Name: series-workflowc2r5m Phase: Succeeded StartedAt: 2026-07-29 06:31:36 +0000 UTC FinishedAt: 2026-07-29 10:31:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[0] Phase: Succeeded StartedAt: 2026-07-29 06:31:36 +0000 UTC FinishedAt: 2026-07-29 06:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 06:31:36 +0000 UTC FinishedAt: 2026-07-29 06:37:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b14361aca6350ff7907b0e9903c7b94dc7d5d4a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b14361aca6350ff7907b0e9903c7b94dc7d5d4a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "6e096857-4a62-41ea-a7f7-df58969df7e5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "tun_net_xmit", "tun_chr_read_iter", "tun_chr_write_iter", "tun_chr_ioctl", "vhost_net_ioctl", "vhost_net_open", "vhost_net_chr_read_iter", "vhost_net_chr_write_iter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9jaHJfd3JpdGVfaXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGV4cGxpY2l0IHF1ZXVlIHdha2luZyBsb2dpYyBiYXNlZCBvbiBgY29uc19jbnRgIGluIHRoZSBUVU4gZHJpdmVyIGFuZCBzaW1wbGlmaWVzIHRoZSByaW5nIGNvbnN1bXB0aW9uIGluIGJvdGggVFVOIGFuZCB2aG9zdC1uZXQuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gVFVOIGFuZCB2aG9zdC1uZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ciBpbiB0aGUgcXVldWUgd2FraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTI2MGM5YTI4ZTI1ODI4YjkxNGE1Mzg2NzhjMDgxZTRlYjg3M2RiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA2OjM1OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcbmluZGV4IGZmYmU2ZjEzZmIxZmEuLmZlZDlkZmRmY2MzYmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC0xNDUsOCAmIzQzOzE0NSw2IEBAIHN0cnVjdCB0dW5fZmlsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqZGV0YWNoZWQ7XG4gXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcbi1cdC8qIFByb3RlY3RlZCBieSB0eF9yaW5nLmNvbnN1bWVyX2xvY2sgKi9cbi1cdGludCBjb25zX2NudDtcbiBcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcbiB9O1xuIFxuQEAgLTU5MCwxMyAmIzQzOzU4OCw4IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKVxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1tpbmRleF0sXG4gXHRcdFx0XHQgICB0dW4tXHUwMDNldGZpbGVzW3R1bi1cdTAwM2VudW1xdWV1ZXMgLSAxXSk7XG4gXHRcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpbmRleF0pO1xuLVx0XHRzcGluX2xvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdG50ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IGluZGV4O1xuIFx0XHRudGZpbGUtXHUwMDNleGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4O1xuLVx0XHRudGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuLVx0XHRpZiAoX19wdHJfcmluZ19lbXB0eShcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZykpXG4tXHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCBpbmRleCk7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0sXG4gXHRcdFx0XHQgICBOVUxMKTtcbiBcbkBAIC03MzcsOSAmIzQzOzczMCw2IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbi1cdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IHR1bi1cdTAwM2VudW1xdWV1ZXM7XG4gXHR0ZmlsZS1cdTAwM2Vzb2NrZXQuc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xuIFxuQEAgLTEwMTgsNyAmIzQzOzEwMDgsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZTtcbiBcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4gXHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbi1cdGludCByZXQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR0ZmlsZSA9IHJjdV9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW3R4cV0pO1xuQEAgLTEwNzMsMzMgJiM0MzsxMDYyLDEzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdG5mX3Jlc2V0X2N0KHNrYik7XG4gXG4tXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4tXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbi1cdGlmICghcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcbi1cdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG4tXHRcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xuLVx0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuLVx0XHRpZiAoIV9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSlcbi1cdFx0XHRuZXRpZl90eF93YWtlX3F1ZXVlKHF1ZXVlKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4tXG4tXHRpZiAocmV0KSB7XG4tXHRcdC8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0XG4tXHRcdCAqIGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguXG4tXHRcdCAqIFNpbmNlIHNrYl90eF90aW1lc3RhbXAoKSwgc2tiX29ycGhhbigpLFxuLVx0XHQgKiBydW5fZWJwZl9maWx0ZXIoKSBhbmQgcHNrYl90cmltKCkgY291bGQgaGF2ZSB0aW5rZXJlZFxuLVx0XHQgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kXG4tXHRcdCAqIHdlIG11c3QgZHJvcCBpbnN0ZWFkLlxuLVx0XHQgKi9cbiYjNDM7XHRpZiAocHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpKSB7XG4gXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZVTExfUklORztcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuIFx0LyogZGV2LVx1MDAzZWxsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi9cbiYjNDM7XHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuIFx0dHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTtcbiBcbiBcdC8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqL1xuQEAgLTIxNDcsNDYgJiM0MzsyMTE2LDEzIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuIFx0cmV0dXJuIHRvdGFsO1xuIH1cbiBcbi0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cbi1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXG4te1xuLVx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbi1cbi1cdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbi1cdHNtcF9tYigpO1xuLVx0aWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkge1xuLVx0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCAmIzQzOz0gY29uc3VtZWQ7XG4tXHRcdGlmICh0ZmlsZS1cdTAwM2Vjb25zX2NudCBcdTAwM2U9IHRmaWxlLVx1MDAzZXR4X3Jpbmcuc2l6ZSAvIDIgfHxcbi1cdFx0ICAgIF9fcHRyX3JpbmdfZW1wdHkoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykpIHtcbi1cdFx0XHRuZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7XG4tXHRcdFx0dGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuLVx0XHR9XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4te1xuLVx0dm9pZCAqcHRyO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHRwdHIgPSBfX3B0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4tXHRpZiAocHRyKVxuLVx0XHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xuLVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbi1cdHJldHVybiBwdHI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tXHRcdFx0ICAgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4ge1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4gXHR2b2lkICpwdHIgPSBOVUxMO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4mIzQzO1x0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbiBcdGlmIChwdHIpXG4gXHRcdGdvdG8gb3V0O1xuIFx0aWYgKG5vYmxvY2spIHtcbkBAIC0yMTk4LDcgJiM0MzsyMTM0LDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4mIzQzO1x0XHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuIFx0XHRpZiAocHRyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbkBAIC0yMjM1LDcgJiM0MzsyMTcxLDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcbiBcdGlmICghcHRyKSB7XG4gXHRcdC8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqL1xuLVx0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssIFx1MDAyNmVycik7XG4mIzQzO1x0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuIFx0XHRpZiAoIXB0cilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTM2OTAsMTYgJiM0MzszNjI2LDYgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG4gXHRcdFx0XHRcdCAgZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRcdFx0ICB0dW5fcHRyX2ZyZWUpO1xuIFxuLVx0aWYgKCFyZXQpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4tXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCB0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCk7XG4tXHRcdFx0dGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuLVx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdGtmcmVlKHJpbmdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM4MDgsMjkgJiM0MzszNzM0LDYgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4gXG4tLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4tdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuLXtcbi1cdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4tXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuLVxuLVx0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZ0dW5fZm9wcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdGlmICghdGZpbGUpXG4tXHRcdHJldHVybjtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHR1biA9IHJjdV9kZXJlZmVyZW5jZSh0ZmlsZS1cdTAwM2V0dW4pO1xuLVx0aWYgKHR1bilcbi1cdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG4tXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwodHVuX3dha2VfcXVldWUpO1xuLVxuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcbiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDNlNzJiOWM2YWYwY2EuLjY5NDliNzA0MTY2ZDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5AQCAtMTc2LDIxICYjNDM7MTc2LDEzIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCBzb2NrICpzayxcbi1cdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuJiM0MztzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcHJvZHVjZShzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuIHtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gc2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZpbGU7XG4gXHRzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gXHUwMDI2bnZxLVx1MDAzZXJ4cTtcbiBcbiBcdHJ4cS1cdTAwM2VoZWFkID0gMDtcbi1cdHNwaW5fbG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbi1cdHJ4cS1cdTAwM2V0YWlsID0gX19wdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVx1MDAzZXJ4X3JpbmcsIHJ4cS1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XG4tXG4tXHRpZiAocnhxLVx1MDAzZXRhaWwpXG4tXHRcdHR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS1cdTAwM2V0YWlsKTtcbi1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNm52cS1cdTAwM2VyeF9yaW5nLVx1MDAzZWNvbnN1bWVyX2xvY2spO1xuJiM0MztcdHJ4cS1cdTAwM2V0YWlsID0gcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cdTAwM2VyeF9yaW5nLCByeHEtXHUwMDNlcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xuIFx0cmV0dXJuIHJ4cS1cdTAwM2V0YWlsO1xuIH1cbiBcbkBAIC0yMTcsMTUgJiM0MzsyMDksMTQgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZvaWQgKnB0cilcbiBcdHJldHVybiBfX3NrYl9hcnJheV9sZW5fd2l0aF90YWcocHRyKTtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLFxuLVx0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcbiYjNDM7XHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBvdXQ6XG5AQCAtMTAxMyw3ICYjNDM7MTAwNCw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHJ2cS1cdTAwM2VyeF9yaW5nKVxuLVx0XHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpO1xuJiM0MztcdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhydnEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gXHRoZWFkID0gc2tiX3BlZWsoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbmluZGV4IDVmM2UyMDZjN2E3MzcuLjgwMTY2ZWI2MmY0MWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5AQCAtMjIsNyAmIzQzOzIyLDYgQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfVFVOKSB8fCBkZWZpbmVkKENPTkZJR19UVU5fTU9EVUxFKVxuIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopO1xuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcbi12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG5AQCAtNTYsOCAmIzQzOzU1LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge31cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuaW5kZXggYzk1ZTg5MTkwM2YwNS4uZDJjMzYyOWJiZTQ1MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG5AQCAtOTYsMjAgJiM0Mzs5Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuLSAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4te1xuLVx0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuICAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBwb2ludGVyIHRoYXQgaXMgYmVpbmcgcXVldWVkXG5AQCAtMTE3LDEwICYjNDM7MTAzLDggQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcilcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXG4ge1xuLVx0aW50IHAgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XG4tXG4tXHRpZiAocClcbi1cdFx0cmV0dXJuIHA7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpIHx8IGRhdGFfcmFjZShyLVx1MDAzZXF1ZXVlW3ItXHUwMDNlcHJvZHVjZXJdKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0LyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9uZXRfeG1pdCYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgZXhwbGljaXQgcXVldWUgd2FraW5nIGxvZ2ljIGJhc2VkIG9uIGBjb25zX2NudGAgaW4gdGhlIFRVTiBkcml2ZXIgYW5kIHNpbXBsaWZpZXMgdGhlIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gcGF0aHMgYmV0d2VlbiBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzIG9jY3VyIGluIHRoZSBxdWV1ZSB3YWtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjYwYzlhMjhlMjU4MjhiOTE0YTUzODY3OGMwODFlNGViODczZGI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDY6MzU6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IGZmYmU2ZjEzZmIxZmEuLmZlZDlkZmRmY2MzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0xNDUsOCAmIzQzOzE0NSw2IEBAIHN0cnVjdCB0dW5fZmlsZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXh0OwogCXN0cnVjdCB0dW5fc3RydWN0ICpkZXRhY2hlZDsKIAlzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZzsKLQkvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovCi0JaW50IGNvbnNfY250OwogCXN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTsKIH07CiAKQEAgLTU5MCwxMyAmIzQzOzU4OCw4IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKQogCQlyY3VfYXNzaWduX3BvaW50ZXIodHVuLSZndDt0ZmlsZXNbaW5kZXhdLAogCQkJCSAgIHR1bi0mZ3Q7dGZpbGVzW3R1bi0mZ3Q7bnVtcXVldWVzIC0gMV0pOwogCQludGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi0mZ3Q7dGZpbGVzW2luZGV4XSk7Ci0JCXNwaW5fbG9jaygmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKIAkJbnRmaWxlLSZndDtxdWV1ZV9pbmRleCA9IGluZGV4OwogCQludGZpbGUtJmd0O3hkcF9yeHEucXVldWVfaW5kZXggPSBpbmRleDsKLQkJbnRmaWxlLSZndDtjb25zX2NudCA9IDA7Ci0JCWlmIChfX3B0cl9yaW5nX2VtcHR5KCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nKSkKLQkJCW5ldGlmX3dha2Vfc3VicXVldWUodHVuLSZndDtkZXYsIGluZGV4KTsKLQkJc3Bpbl91bmxvY2soJmFtcDtudGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0dW4tJmd0O3RmaWxlc1t0dW4tJmd0O251bXF1ZXVlcyAtIDFdLAogCQkJCSAgIE5VTEwpOwogCkBAIC03MzcsOSAmIzQzOzczMCw2IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7Ci0JdGZpbGUtJmd0O2NvbnNfY250ID0gMDsKLQlzcGluX3VubG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCXRmaWxlLSZndDtxdWV1ZV9pbmRleCA9IHR1bi0mZ3Q7bnVtcXVldWVzOwogCXRmaWxlLSZndDtzb2NrZXQuc2stJmd0O3NrX3NodXRkb3duICZhbXA7PSB+UkNWX1NIVVRET1dOOwogCkBAIC0xMDE4LDcgJiM0MzsxMDA4LDYgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlOwogCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7CiAJaW50IGxlbiA9IHNrYi0mZ3Q7bGVuOwotCWludCByZXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbdHhxXSk7CkBAIC0xMDczLDMzICYjNDM7MTA2MiwxMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZl9yZXNldF9jdChza2IpOwogCi0JcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTsKLQotCXNwaW5fbG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwotCXJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nLCBza2IpOwotCWlmICghcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgJmFtcDsmYW1wOwotCSAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZykgPT0gLUVOT1NQQykgewotCQluZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTsKLQkJLyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovCi0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7Ci0JCWlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpKQotCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZShxdWV1ZSk7Ci0JfQotCXNwaW5fdW5sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcucHJvZHVjZXJfbG9jayk7Ci0KLQlpZiAocmV0KSB7Ci0JCS8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0Ci0JCSAqIGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguCi0JCSAqIFNpbmNlIHNrYl90eF90aW1lc3RhbXAoKSwgc2tiX29ycGhhbigpLAotCQkgKiBydW5fZWJwZl9maWx0ZXIoKSBhbmQgcHNrYl90cmltKCkgY291bGQgaGF2ZSB0aW5rZXJlZAotCQkgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kCi0JCSAqIHdlIG11c3QgZHJvcCBpbnN0ZWFkLgotCQkgKi8KJiM0MzsJaWYgKHB0cl9yaW5nX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZywgc2tiKSkgewogCQlkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7CiAJCWdvdG8gZHJvcDsKIAl9CiAKIAkvKiBkZXYtJmd0O2xsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi8KJiM0MzsJcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTsKIAl0eHFfdHJhbnNfY29uZF91cGRhdGUocXVldWUpOwogCiAJLyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovCkBAIC0yMTQ3LDQ2ICYjNDM7MjExNiwxMyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKIAlyZXR1cm4gdG90YWw7CiB9CiAKLS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqLwotc3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAotCQkJICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpCi17Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tJmd0O2RldiwKLQkJCQkJCXRmaWxlLSZndDtxdWV1ZV9pbmRleCk7Ci0KLQkvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovCi0Jc21wX21iKCk7Ci0JaWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgewotCQl0ZmlsZS0mZ3Q7Y29uc19jbnQgJiM0Mzs9IGNvbnN1bWVkOwotCQlpZiAodGZpbGUtJmd0O2NvbnNfY250ICZndDs9IHRmaWxlLSZndDt0eF9yaW5nLnNpemUgLyAyIHx8Ci0JCSAgICBfX3B0cl9yaW5nX2VtcHR5KCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpKSB7Ci0JCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7Ci0JCQl0ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKQotewotCXZvaWQgKnB0cjsKLQotCXNwaW5fbG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwotCXB0ciA9IF9fcHRyX3JpbmdfY29uc3VtZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKTsKLQlpZiAocHRyKQotCQlfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpOwotCi0Jc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKLQlyZXR1cm4gcHRyOwotfQotCi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLAotCQkJICAgaW50IG5vYmxvY2ssIGludCAqZXJyKQomIzQzO3N0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycikKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAl2b2lkICpwdHIgPSBOVUxMOwogCWludCBlcnJvciA9IDA7CiAKLQlwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpOwomIzQzOwlwdHIgPSBwdHJfcmluZ19jb25zdW1lKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpOwogCWlmIChwdHIpCiAJCWdvdG8gb3V0OwogCWlmIChub2Jsb2NrKSB7CkBAIC0yMTk4LDcgJiM0MzsyMTM0LDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKIAogCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7CiYjNDM7CQlwdHIgPSBwdHJfcmluZ19jb25zdW1lKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpOwogCQlpZiAocHRyKQogCQkJYnJlYWs7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtMjIzNSw3ICYjNDM7MjE3MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsCiAKIAlpZiAoIXB0cikgewogCQkvKiBSZWFkIGZyYW1lcyBmcm9tIHJpbmcgKi8KLQkJcHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCAmYW1wO2Vycik7CiYjNDM7CQlwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCAmYW1wO2Vycik7CiAJCWlmICghcHRyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0zNjkwLDE2ICYjNDM7MzYyNiw2IEBAIHN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQogCQkJCQkgIGRldi0mZ3Q7dHhfcXVldWVfbGVuLCBHRlBfS0VSTkVMLAogCQkJCQkgIHR1bl9wdHJfZnJlZSk7CiAKLQlpZiAoIXJldCkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgdHVuLSZndDtudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbaV0pOwotCQkJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7Ci0JCQluZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi0mZ3Q7ZGV2LCB0ZmlsZS0mZ3Q7cXVldWVfaW5kZXgpOwotCQkJdGZpbGUtJmd0O2NvbnNfY250ID0gMDsKLQkJCXNwaW5fdW5sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7Ci0JCX0KLQl9Ci0KIAlrZnJlZShyaW5ncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM4MDgsMjkgJiM0MzszNzM0LDYgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3R4X3JpbmcpOwogCi0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi8KLXZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCkKLXsKLQlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlOwotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47Ci0KLQlpZiAoZmlsZS0mZ3Q7Zl9vcCAhPSAmYW1wO3R1bl9mb3BzKQotCQlyZXR1cm47Ci0KLQl0ZmlsZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKLQlpZiAoIXRmaWxlKQotCQlyZXR1cm47Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQl0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtJmd0O3R1bik7Ci0JaWYgKHR1bikKLQkJX190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTsKLQogbW9kdWxlX2luaXQodHVuX2luaXQpOwogbW9kdWxlX2V4aXQodHVuX2NsZWFudXApOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L25ldC5jIGIvZHJpdmVycy92aG9zdC9uZXQuYwppbmRleCAzZTcyYjljNmFmMGNhLi42OTQ5YjcwNDE2NmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKQEAgLTE3NiwyMSAmIzQzOzE3NiwxMyBAQCBzdGF0aWMgdm9pZCAqdmhvc3RfbmV0X2J1Zl9jb25zdW1lKHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLAotCQkJCSBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKQomIzQzO3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBzay0mZ3Q7c2tfc29ja2V0LSZndDtmaWxlOwogCXN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSAmYW1wO252cS0mZ3Q7cnhxOwogCiAJcnhxLSZndDtoZWFkID0gMDsKLQlzcGluX2xvY2soJmFtcDtudnEtJmd0O3J4X3JpbmctJmd0O2NvbnN1bWVyX2xvY2spOwotCXJ4cS0mZ3Q7dGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS0mZ3Q7cnhfcmluZywgcnhxLSZndDtxdWV1ZSwKLQkJCQkJICAgICAgIFZIT1NUX05FVF9CQVRDSCk7Ci0KLQlpZiAocnhxLSZndDt0YWlsKQotCQl0dW5fd2FrZV9xdWV1ZShmaWxlLCByeHEtJmd0O3RhaWwpOwotCi0Jc3Bpbl91bmxvY2soJmFtcDtudnEtJmd0O3J4X3JpbmctJmd0O2NvbnN1bWVyX2xvY2spOwomIzQzOwlyeHEtJmd0O3RhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLSZndDtyeF9yaW5nLCByeHEtJmd0O3F1ZXVlLAomIzQzOwkJCQkJICAgICAgVkhPU1RfTkVUX0JBVENIKTsKIAlyZXR1cm4gcnhxLSZndDt0YWlsOwogfQogCkBAIC0yMTcsMTUgJiM0MzsyMDksMTQgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZvaWQgKnB0cikKIAlyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzaywKLQkJCSAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSkKIHsKIAlzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gJmFtcDtudnEtJmd0O3J4cTsKIAogCWlmICghdmhvc3RfbmV0X2J1Zl9pc19lbXB0eShyeHEpKQogCQlnb3RvIG91dDsKIAotCWlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHNrLCBudnEpKQomIzQzOwlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKQogCQlyZXR1cm4gMDsKIAogb3V0OgpAQCAtMTAxMyw3ICYjNDM7MTAwNCw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChydnEtJmd0O3J4X3JpbmcpCi0JCXJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsoc2ssIHJ2cSk7CiYjNDM7CQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2ssIGZsYWdzKTsKIAloZWFkID0gc2tiX3BlZWsoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaAppbmRleCA1ZjNlMjA2YzdhNzM3Li44MDE2NmViNjJmNDFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKQEAgLTIyLDcgJiM0MzsyMiw2IEBAIHN0cnVjdCB0dW5fbXNnX2N0bCB7CiAjaWYgZGVmaW5lZChDT05GSUdfVFVOKSB8fCBkZWZpbmVkKENPTkZJR19UVU5fTU9EVUxFKQogc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7CiBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpCiB7CkBAIC01Niw4ICYjNDM7NTUsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmKQogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge30KLQogc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKQogewogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaAppbmRleCBjOTVlODkxOTAzZjA1Li5kMmMzNjI5YmJlNDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oCkBAIC05NiwyMCAmIzQzOzk2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKQogCXJldHVybiByZXQ7CiB9CiAKLS8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLAotICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpCi17Ci0JaWYgKHVubGlrZWx5KCFyLSZndDtzaXplKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZGF0YV9yYWNlKHItJmd0O3F1ZXVlW3ItJmd0O3Byb2R1Y2VyXSkpCi0JCXJldHVybiAtRU5PU1BDOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLAogICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZApAQCAtMTE3LDEwICYjNDM7MTAzLDggQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcikKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKQogewotCWludCBwID0gX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHIpOwotCi0JaWYgKHApCi0JCXJldHVybiBwOwomIzQzOwlpZiAodW5saWtlbHkoIXItJmd0O3NpemUpIHx8IGRhdGFfcmFjZShyLSZndDtxdWV1ZVtyLSZndDtwcm9kdWNlcl0pKQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHBvaW50ZXIgd2UgYXJlIHN0b3JpbmcgcG9pbnRzIHRvIGEgdmFsaWQgZGF0YS4gKi8KIAkvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpcyBnb2luZyBhZnRlciBzb21lIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBUVU4gYW5kIHZob3N0IHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3R1bi5jYCwgYGRyaXZlcnMvdmhvc3QvbmV0LmNgLCBhbmQgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIChgaW5jbHVkZS9saW51eC9pZl90dW4uaGAsIGBpbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhgKS4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIHNpbmNlIHRoZXNlIGFyZSBsb3ctbGV2ZWwgY29tcG9uZW50cyBhbmQgYW55IGNoYW5nZSBoZXJlIGNvdWxkIGhhdmUgZmFyLXJlYWNoaW5nIGVmZmVjdHMsIHNvIGxldCYjMzk7cyBkaWcgZGVlcGVyLgoKRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgc2VlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgY29uc19jbnRgIGZyb20gYHN0cnVjdCB0dW5fZmlsZWAsIHNpbXBsaWZ5aW5nIGB0dW5fbmV0X3htaXRgLCBhbmQgZ2V0dGluZyByaWQgb2Ygc29tZSB3YWtpbmcgZnVuY3Rpb25zOiBgX190dW5fd2FrZV9xdWV1ZWAsIGB0dW5fcmluZ19jb25zdW1lYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAuICBBbHNvLCBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBiZWluZyBhZGp1c3RlZCBzbyBpdCBubyBsb25nZXIgY2FsbHMgYHR1bl93YWtlX3F1ZXVlYCwgYW5kIGBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2VgIGlzIGdvbmUgZnJvbSBgaW5jbHVkZS9saW51eC9wdHJfcmluZy5oYC4gVGhpcyBpcyBhbGwgaW5kaWNhdGl2ZSBvZiBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlbW92aW5nIGV4cGxpY2l0IHF1ZXVlIHdha2luZyBsb2dpYywgcHJvYmFibHkgc2ltcGxpZnlpbmcgdGhlIHJpbmcgY29uc3VtcHRpb24uIFRoYXQgbWVhbnMgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsIHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCwgYXMgd2VsbCBhcyBpZiB3ZSBoYXZlIGVsaW1pbmF0ZWQgYW55IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRob3NlIGNoYW5nZXMuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgcmVhY2hhYmxlIGdpdmVuIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlcmUgVFVOL1RBUCBhbmQgdmhvc3QtbmV0IGFyZSBoZWF2aWx5IHJlbGllZCB1cG9uIHdpdGhpbiBRRU1VL0tWTS4KCkxldCYjMzk7cyBzdGFydCBieSBjaGVja2luZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfVFVOYCBhbmQgYENPTkZJR19WSE9TVF9ORVRgIGFyZSBzZXQgY29ycmVjdGx5LgoKT2theSwgbGV0JiMzOTtzIHNlYXJjaCBmb3IgdGhvc2Ugc3ltYm9scyBpbiB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIHNlZSBpZiB0aGUgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBhcmUgYWxyZWFkeSB3ZWxsLWRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBWaXJ0dWFsaXphdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBgQ09ORklHX1ZIT1NUX05FVGAgc2V0dGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBDbGVhcmx5LCBpdCYjMzk7cyBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gdGhlIHZpcnR1YWwgaG9zdGluZywgc3BlY2lmaWNhbGx5IHRoZSBuZXR3b3JraW5nIGFzcGVjdC4gQXMgYW4gZXhwZXJ0LCBJJiMzOTttIHdlbGwgYXdhcmUgb2YgaG93IHZpcnR1YWwgaG9zdHMgd29yay4gU28sIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWxpemVkIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSwgbWF5YmUgaXQmIzM5O3MgdGhlIGNvcmUuIElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlIGxvb2tpbmc/IFVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9ORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYFZIT1NUX01FTlVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGV4YW1pbmUgdGhlIGBWSE9TVF9NRU5VYCBzdHJ1Y3R1cmUgb3IgY29uZmlndXJhdGlvbi4gVGhpcyBzaWduYWxzIGEgdGFyZ2V0ZWQgdHJvdWJsZXNob290aW5nIGFwcHJvYWNoIOKAkyBjbGVhcmx5IHNvbWV0aGluZyB3aXRoaW4gdGhlIHZpcnR1YWwgaG9zdCBjb25maWd1cmF0aW9uIGl0c2VsZiBpcyBzdXNwZWN0ZWQgYXMgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGlzc3VlIEkmIzM5O20gd29ya2luZyBvbi4gVGhlIHByZXNlbmNlIG9mIGEgbWVudSBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgb3IgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgcmVsYXRlZCB0byB2aXJ0dWFsIGhvc3RzLCBsaWtlbHkgd2l0aGluIGEgd2ViIHNlcnZlciBvciBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudC4gSXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpc3N1ZXMgaGVyZSBjYW4gcXVpY2tseSBjYXNjYWRlIGludG8gd2lkZXNwcmVhZCBwcm9ibGVtcyBpZiBhIHZpcnR1YWwgaG9zdCBpc24mIzM5O3QgY29uZmlndXJlZCBjb3JyZWN0bHksIGlzbiYjMzk7dCBsb2FkaW5nLCBvciBpcyBtaXNpbnRlcnByZXRpbmcgcmVxdWVzdHMuIEl0JiMzOTtzIHRoZSBwb2ludCBvZiBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGdlbmVyYWwgc2VydmVyIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBpbmRpdmlkdWFsIHZpcnR1YWwgaW5zdGFuY2VzLiBUaGUgaW1wbGljYXRpb24gaXMgSSYjMzk7dmUgYWxyZWFkeSBtb3ZlZCBwYXN0IGJyb2FkZXIgZGlhZ25vc3RpY3MgYW5kIGFtIGhvbWluZyBpbiBvbiB0aGUgc3BlY2lmaWMgdmlydHVhbCBob3N0IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9NRU5VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz0yMD1jb25maWcgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjctXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjg6bWVudWNvbmZpZyBWSE9TVF9NRU5VXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjktXHRib29sIFwmIzM0O1ZIT1NUIGRyaXZlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRXhwbG9yYXRpb24gb2YgVFVOIGFuZCBWSE9TVF9ORVQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYFRVTmAgYW5kIGBWSE9TVF9ORVRgIGNvbmZpZ3VyYXRpb25zLCBhbmQgbXkgaW5pdGlhbCBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3R1bi5jYCwgSSYjMzk7dmUgZ290IG15IGV5ZSBvbiB0aGVzZTogYHR1bl9uZXRfeG1pdGAsIGB0dW5fcHV0X3VzZXJgLCBgdHVuX2RvX3JlYWRgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGFuZCBgdHVuX2dldF90eF9yaW5nYC4gCgpUaGVuLCBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRoZSBvbmVzIHRoYXQgbG9vayByZWxldmFudCBhcmUgYHZob3N0X25ldF9idWZfcHJvZHVjZWAsIGB2aG9zdF9uZXRfYnVmX3BlZWtgLCBhbmQgYHBlZWtfaGVhZF9sZW5gLiBOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gaWYgdGhlc2UgYXJlIHN0YXRpYyBvciBpZiB0aGV5JiMzOTtyZSBleHBvcnRlZC4gT2theSwgaXQgbG9va3MgbGlrZSBgdHVuX25ldF94bWl0YCBpcyBzdGF0aWMsIGJ1dCBpbnRlcmVzdGluZywgaXQmIzM5O3MgYXNzaWduZWQgdG8gYG5ldGRldl9vcHMtJmd0O25kb19zdGFydF94bWl0YC4gYHR1bl9wdXRfdXNlcmAsIGB0dW5fZG9fcmVhZGAsIGFuZCBgdHVuX3F1ZXVlX3Jlc2l6ZWAgYXJlIGFsc28gc3RhdGljLiBgdHVuX2dldF90eF9yaW5nYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIAoKSSYjMzk7bGwganVzdCBjaGVjayBgdHVuX2Nocl9yZWFkX2l0ZXJgIHNpbmNlIGl0IGNhbGxzIGB0dW5fZG9fcmVhZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfcmVhZF9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjE2MD1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTYtXG5kcml2ZXJzL25ldC90dW4uYzoyMTk3OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XG5kcml2ZXJzL25ldC90dW4uYy0zNDcwLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ3MTpcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYy0zNDcyLVx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqRm9jdXNpbmcgSW4gb24gTmV0d29yayBUcmFuc21pc3Npb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBoZXJlLiBgdHVuX2Nocl9yZWFkX2l0ZXJgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gc3RhcnQgd2l0aC4gQnV0LCB3YWl0Li4uIHdoYXQgYWJvdXQgYHR1bl9uZXRfeG1pdGA/IEFoLCB5ZXMsIGl0JiMzOTtzIHRpZWQgdG8gYG5kb19zdGFydF94bWl0YCEgVGhhdCBmZWVscyBtb3JlIGRpcmVjdCwgYW5kIHNpbXBsZXIgdG8gZm9sbG93LiBMZXQmIzM5O3MganVzdCB1c2UgYHR1bl9uZXRfeG1pdGAgZm9yIG5vdy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGFuZCBgdmhvc3RfbmV0X2J1Zl9wZWVrYC4gVGhvc2UgYXJlIGJvdGggc3RhdGljIGZ1bmN0aW9ucywgc28gdGhlaXIgc2NvcGUgaXMgbW9yZSBsaW1pdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbnZva2VkLiBMZXQmIzM5O3MgZ28gYW5kIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbS4gVGhhdCBzaG91bGQgZ2l2ZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9uZXRfYnVmX3BlZWsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTg5PXN0YXRpYyB2b2lkIHZob3N0X25ldF9idWZfdW5wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0yMDAtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjIwMTpzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxuZHJpdmVycy92aG9zdC9uZXQuYy0yMDIte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjExLVxuZHJpdmVycy92aG9zdC9uZXQuYzoyMTI6c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjEzLXtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyMi1vdXQ6XG5kcml2ZXJzL3Zob3N0L25ldC5jOjIyMzpcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZob3N0X25ldF9idWZfZ2V0X3B0cihyeHEpKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjI0LX1cbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTEwMDA9c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMDYtXHRpZiAocnZxLVx1MDAzZXJ4X3JpbmcpXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDc6XHRcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsocnZxKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgcGVla19oZWFkX2xlbmAqKgoKT2theSwgc28gYHBlZWtfaGVhZF9sZW5gLi4uIHRoYXQmIzM5O3MgYSBzdGF0aWMgdmFsdWUsIHJpZ2h0PyBJdCYjMzk7cyBub3Qgc29tZXRoaW5nIHRoYXQgY2hhbmdlcyBkeW5hbWljYWxseS4gQWxyaWdodCwgdGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIHZhbHVlLCBhIGNvbnN0YW50IHVzZWQgc29tZXdoZXJlIGRlZXAgaW4gdGhlIGxvZ2ljLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiB3aGVyZSB0aGUgKmhlbGwqIGlzIHRoaXMgdGhpbmcgYmVpbmcgdXNlZD8gSXQmIzM5O3Mgc3RhdGljYWxseSBkZWZpbmVkLCBidXQgdW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gSXMgaXQgdXNlZCBpbiBqdXN0IG9uZSBwbGFjZSwgb3IgaXMgaXQgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIGNvZGUgYmFzZT8gVGhpcyB3aWxsIGRpY3RhdGUgd2hldGhlciBpdCBpcyBhIGdsb2JhbCBwYXJhbWV0ZXIgb3Igc3BlY2lmaWMgdG8gYSBzdWItcm91dGluZSBvZiB0aGUgcHJvZ3JhbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUgcGF0aHMgdGhhdCAqZGVwZW5kKiBvbiB0aGlzIGBwZWVrX2hlYWRfbGVuYCB2YWx1ZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGFueSBtb2RpZmljYXRpb25zIGFuZCBpdHMgb3ZlcmFsbCBwdXJwb3NlLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNvZGUgcGF0aHMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlZWtfaGVhZF9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9OTc0PXN0YXRpYyB2b2lkIGhhbmRsZV90eChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy05OTktXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDA6c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAwMS17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDIwLVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDIxOnN0YXRpYyBpbnQgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMjItXHRcdFx0XHQgICAgICBib29sICpidXN5bG9vcF9pbnRyLCB1bnNpZ25lZCBpbnQgKmNvdW50KVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAyNy1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR2cSA9IFx1MDAyNnRudnEtXHUwMDNldnE7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMjg6XHRpbnQgbGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMjktXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM2LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDM3Olx0XHRsZW4gPSBwZWVrX2hlYWRfbGVuKHJudnEsIHNrKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzOC1cdH1cbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTExNDA9c3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTExOTItXHRkbyB7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjExOTM6XHRcdHNvY2tfbGVuID0gdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4obmV0LCBzb2NrLVx1MDAzZXNrLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMTk0LVx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmJ1c3lsb29wX2ludHIsIFx1MDAyNmNvdW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgUnggQ2FsbCBDaGFpbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBoYW5kbGVfcnhgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHJlY2VpdmUgcGF0aCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiAgVGhlIGNhbGwgc3RhY2sgcHJlc2VudGVkIGlzIGEgbGl0dGxlIGNpcmN1bGFyOiBgaGFuZGxlX3J4YCBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW5gLCB3aGljaCBpbiB0dXJuLCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYGhhbmRsZV9yeGAuIFRoYXQmIzM5O3MgYSBiaXQgb2RkIC0gc2VlbXMgbGlrZSBzb21ldGhpbmcgbWlnaHQgYmUgbmVzdGVkLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgaGFuZGxlX3J4YCBpcyBwcm9iYWJseSBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBvciBzb21lIGFzeW5jaHJvbm91cyBleGVjdXRpb24gbWVjaGFuaXNtLiBJdCBuZWVkcyB0byBiZSwgZ2l2ZW4gdGhlIGNhbGwgc3RydWN0dXJlLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHByb2JhYmx5IHJ1bm5pbmcgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgaGVuY2UgdGhlIHJlY3Vyc2l2ZSBkZXNpZ24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoaXMgYXNzdW1wdGlvbiwgYnV0IEkmIzM5O20gcmVhc29uYWJseSBzdXJlIGl0IGlzIGEgd29ya3F1ZXVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTA1Mz1zdGF0aWMgaW50IGdldF9yeF9idWZzKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEsXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMTM5LSAqIHJlYWQtc2l6ZSBjcml0aWNhbCBzZWN0aW9uIGZvciBvdXIga2luZCBvZiBSQ1UuICovXG5kcml2ZXJzL3Zob3N0L25ldC5jOjExNDA6c3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTE0MS17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xMjk3PXN0YXRpYyB2b2lkIGhhbmRsZV90eF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMwNS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMwNjpzdGF0aWMgdm9pZCBoYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMwNy17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzExLVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMzEyOlx0aGFuZGxlX3J4KG5ldCk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMTMtfVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTMxNT1zdGF0aWMgdm9pZCBoYW5kbGVfdHhfbmV0KHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMyMS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMyMjpzdGF0aWMgdm9pZCBoYW5kbGVfcnhfbmV0KHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzIzLXtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMjUtXHRcdFx0XHRcdCAgICAgcG9sbFtWSE9TVF9ORVRfVlFfUlhdLndvcmspO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxMzI2Olx0aGFuZGxlX3J4KG5ldCk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMjctfVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTMyOT1zdGF0aWMgaW50IHZob3N0X25ldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTM2OC1cdG4tXHUwMDNldnFzW1ZIT1NUX05FVF9WUV9UWF0udnEuaGFuZGxlX2tpY2sgPSBoYW5kbGVfdHhfa2ljaztcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTM2OTpcdG4tXHUwMDNldnFzW1ZIT1NUX05FVF9WUV9SWF0udnEuaGFuZGxlX2tpY2sgPSBoYW5kbGVfcnhfa2ljaztcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTM3MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFZIT1NUX05FVF9WUV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg3LVx0XHRcdHZxc1tWSE9TVF9ORVRfVlFfVFhdKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTM4ODpcdHZob3N0X3BvbGxfaW5pdChuLVx1MDAzZXBvbGwgJiM0MzsgVkhPU1RfTkVUX1ZRX1JYLCBoYW5kbGVfcnhfbmV0LCBFUE9MTElOLCBkZXYsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzODktXHRcdFx0dnFzW1ZIT1NUX05FVF9WUV9SWF0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOgoKKipBbmFseXppbmcgRW50cnkgUG9pbnRzIGFuZCBQb3RlbnRpYWwgQXJlYXMgb2YgSW50ZXJlc3QqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBoYW5kbGVfcnhfa2lja2AgYW5kIGBoYW5kbGVfcnhfbmV0YC4gSSBzZWUgdGhleSYjMzk7cmUgc3RhdGljLCB3aGljaCBpcyB0eXBpY2FsIGZvciBlbnRyeSBwb2ludHMgdG8gdGhlc2Uga2luZHMgb2YgaGFuZGxlcnMuIEl0IG1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSB0aGUgaW5pdGlhbCBjb250YWN0IHBvaW50cyB3aXRoIHRoZSByZWxldmFudCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbW92ZSBiZXlvbmQgdGhvc2UuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIHRoYXQgY291bGQgYmUgd29ydGggZXhhbWluaW5nPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGZpbmQgaG9va3MgZm9yIHBvdGVudGlhbCBtYW5pcHVsYXRpb24gb3IgZXhwbG9yYXRpb24uCgpgdmhvc3RfbmV0X29wZW5gIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgbmV4dCB0aGluZyB0byBjaGVjaywgYnV0IGl0JiMzOTtzIGFsc28gc3RhdGljLCBhbmQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBmaWxlIG9wZW5pbmcgb3BlcmF0aW9ucy4gSXTigJlzIGxpa2VseSBhIHNldHVwIGZ1bmN0aW9uIGJ1dCBJJiMzOTtkIGtlZXAgYW4gZXllIG9uIGl0IHRvIGJlIHN1cmUuIE15IGF0dGVudGlvbiBpcyBub3cgb24gYHZob3N0X25ldF9pb2N0bGAuIElPQ1RMIG9wZXJhdGlvbnMgYXJlIG9mdGVuIG1vcmUgZHluYW1pYyBhbmQgZXhwb3NlIGEgbGFyZ2VyIGludGVyZmFjZSB0byB0aGUgdXNlciBhbmQga2VybmVsIHNwYWNlLiBJJiMzOTtkIG5lZWQgdG8gZXhhbWluZSB3aGF0IHBhcmFtZXRlcnMgaXQgZXhwZWN0cyBhbmQgd2hlcmUgaXQgcm91dGVzIHRoZW0uIFRoaXMgSU9DVEwgaXMgc3RhcnRpbmcgdG8gbG9vayBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xNzE3PXN0YXRpYyBsb25nIHZob3N0X25ldF9zZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbilcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3MzctXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE3Mzg6c3RhdGljIGxvbmcgdmhvc3RfbmV0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3MzktXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzEtXHQucG9sbCAgICAgICAgICAgPSB2aG9zdF9uZXRfY2hyX3BvbGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4NzI6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzMtXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgTmV0d29yayBWdWxuZXJhYmlsaXRpZXMgaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhhdCBgdmhvc3RfbmV0X2lvY3RsYCBmdW5jdGlvbuKApiB0aGF0IHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXJlYSBmb3IgaW52ZXN0aWdhdGlvbi4gSXQgb2Z0ZW4gZGVhbHMgd2l0aCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLCBhbmQgdGhvc2UgYXJlIGFsd2F5cyBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMuIE5vdywgd2hhdCBhYm91dCBgdHVuX25ldF94bWl0YD8gSG1tLCBpbnRlcmVzdGluZy4gSXQmIzM5O3Mgc3RhdGljLCBzbyB0aGF0ICpsaW1pdHMqIGl0cyBkaXJlY3QgdnVsbmVyYWJpbGl0eSwgYnV0IGl0IGNvdWxkIHN0aWxsIGJlIHBhcnQgb2YgYSBsYXJnZXIsIGV4cGxvaXRhYmxlIGNoYWluLgoKT2theSwgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB0dW4uY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqbm90KiBzdGF0aWMuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb2YgdGhvc2UgZXhwb3NlZCBmdW5jdGlvbnMgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCBvciBjYWxsaW5nIGB0dW5fbmV0X3htaXRgLiBGaW5kaW5nIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIGB0dW5fbmV0X3htaXRgLCBvciBpbnRlcmFjdHMgd2l0aCB0aGUgc2FtZSBkYXRhIHN0cnVjdHVyZXMsIHdvdWxkIGJlIGEgbXVjaCBtb3JlIGludGVyZXN0aW5nIHBvaW50IHRvIGZvY3VzIG9uLCBhcyBpdCB3b3VsZCBjcmVhdGUgYSBsb25nZXIgYXR0YWNrIHN1cmZhY2UuIFRoYXQgc2hvdWxkIGhvcGVmdWxseSB1bmNvdmVyIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCB0byBtYW5pcHVsYXRpb24gb3IgY29tcHJvbWlzZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9NTQ2PXZvaWQgdHVuX3B0cl9mcmVlKHZvaWQgKnB0cilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy01NTctfVxuZHJpdmVycy9uZXQvdHVuLmM6NTU4OkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9wdHJfZnJlZSk7XG5kcml2ZXJzL25ldC90dW4uYy01NTktXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzcxMj1zdHJ1Y3Qgc29ja2V0ICp0dW5fZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNzIxLX1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3MjI6RVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF9zb2NrZXQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzcyMy1cbmRyaXZlcnMvbmV0L3R1bi5jPTM3MjQ9c3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzczNC19XG5kcml2ZXJzL25ldC90dW4uYzozNzM1OkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG5kcml2ZXJzL25ldC90dW4uYy0zNzM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkZvY3VzaW5nIG9uIFRVTiBEZXZpY2UgSW50ZXJhY3Rpb25zKioKClJpZ2h0LCBzbyBgdHVuX2dldF90eF9yaW5nYCBpcyBleHBvc2VkLCB0aGF0JiMzOTtzIGltcG9ydGFudCwgYnV0IHdoYXQgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIG9uLCBhdCBsZWFzdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFuYWx5c2lzLCBhcmUgdGhlIGNvcmUgaW50ZXJhY3Rpb24gcG9pbnRzIHdpdGggdGhlIFRVTiBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCBvZiBkYXRhIGZsb3csIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGZvY3VzIG15IGF0dGVudGlvbiBvbiBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYW5kIGB0dW5fY2hyX2lvY3RsYC4gVGhlc2UgYXJlIGxpa2VseSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIGRhdGEgaW5ncmVzcywgZWdyZXNzLCBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSwgcmlnaHQ/IFRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIEkgd2FudCB0byBpbnRlcnJvZ2F0ZSB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0zMDA4PXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMDQ1LVxuZHJpdmVycy9uZXQvdHVuLmM6MzA0NjpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25ldC90dW4uYy0zMDQ3LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTIyLVxuZHJpdmVycy9uZXQvdHVuLmM6MzEyMzpcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O3R1bl9jaHJfaW9jdGwgY21kICV1XFxuXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzEyNC1cbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMzM5LVxuZHJpdmVycy9uZXQvdHVuLmM6MzM0MDpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzM0MS1cdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtMzM0Mi17XG5kcml2ZXJzL25ldC90dW4uYzozMzQzOlx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNDQtfVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTMzNDc9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzM3MC1cdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzM3MTpcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XG5kcml2ZXJzL25ldC90dW4uYy0zMzcyLX1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNDY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzMtXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG5kcml2ZXJzL25ldC90dW4uYzozNDc0Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHR1bl9jaHJfaW9jdGwsXG5kcml2ZXJzL25ldC90dW4uYy0zNDc1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzM4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFVOL1RBUCBEcml2ZXIgYW5kIFJpbmcgQnVmZmVyIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoaXMgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQgb24gdGhlIGNhbGxpbmcgY29udGV4dHMgaGVyZS4gU28sIGlzIHRoZXJlIGFueXRoaW5nICpvdXRzaWRlKiB0aGUgbmV0d29yayBzdGFjayBpdHNlbGYgdGhhdCYjMzk7cyBjYWxsaW5nIHRoaXM/IE5vcGUsIGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBHb29kLiBUaGF0IG5hcnJvd3MgZG93biBteSBmb2N1cy4KCk5vdywgSSYjMzk7bGwgaG9uZSBpbiBvbiB0aGUgY2hhcmFjdGVyIGRldmljZSBlbnRyeSBwb2ludHM6IGB0dW5fY2hyX3JlYWRfaXRlcmAgYW5kIGB0dW5fY2hyX3dyaXRlX2l0ZXJgLiBUaG9zZSBhcmUga2V5LiBBbmQgZG9uJiMzOTt0IGZvcmdldCBgdmhvc3RfbmV0X2lvY3RsYCBhbmQgYHZob3N0X25ldF9vcGVuYCDigJMgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhvc2UgYXMgd2VsbCwgZ2l2ZW4gdGhlaXIgcmVsYXRpb25zaGlwIHRvIHZob3N0LgoKQWhhLCBob2xkIG9uIGEgc2VjLiBUaGlzIHBhdGNoIGlzIHRha2luZyBvdXQgYF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZWAgYW5kIHRoZW4gY2hhbmdpbmcgYF9fcHRyX3JpbmdfcHJvZHVjZWAgaW4gYGluY2x1ZGUvbGludXgvcHRyX3JpbmcuaGAuIFRoYXQmIzM5O3MgYSBjb3JlIGhlYWRlci4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhpcyBtZWFucyBjaGFuZ2VzIHRvIGEgZnVuZGFtZW50YWwgbG93LWxldmVsIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gYmUgKnZlcnkqIGNhcmVmdWwgaGVyZS4gT2theSwgbGV0JiMzOTtzIGZpbmQgb3V0IHdoZXJlIGVsc2UgdGhpcyBgX19wdHJfcmluZ19wcm9kdWNlYCBpcyB1c2VkLiBUaW1lIHRvIHNlZSB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHRvdWNoaW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcHRyX3JpbmdfcHJvZHVjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xMjA0PXN0YXRpYyBpbnQgdHVuX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEyMzctXG5kcml2ZXJzL25ldC90dW4uYzoxMjM4Olx0XHRpZiAoX19wdHJfcmluZ19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcsIGZyYW1lKSkge1xuZHJpdmVycy9uZXQvdHVuLmMtMTIzOS1cdFx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYz01MDM9c3RhdGljIGludCB2ZXRoX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01MzYtXHRcdGlmICh1bmxpa2VseSh4ZHBfZ2V0X2ZyYW1lX2xlbihmcmFtZSkgXHUwMDNlIG1heF9sZW4gfHxcbmRyaXZlcnMvbmV0L3ZldGguYzo1Mzc6XHRcdFx0ICAgICBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2cnEtXHUwMDNleGRwX3JpbmcsIHB0cikpKVxuZHJpdmVycy9uZXQvdmV0aC5jLTUzOC1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTU0Mj12b2lkIHdnX3BhY2tldF9yZWNlaXZlKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTU1LVx0XHRcdGlmIChzcGluX3RyeWxvY2tfYmgoXHUwMDI2d2ctXHUwMDNlaGFuZHNoYWtlX3F1ZXVlLnJpbmcucHJvZHVjZXJfbG9jaykpIHtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTU2Olx0XHRcdFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKFx1MDAyNndnLVx1MDAzZWhhbmRzaGFrZV9xdWV1ZS5yaW5nLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01NTctXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ3Zy1cdTAwM2VoYW5kc2hha2VfcXVldWUucmluZy5wcm9kdWNlcl9sb2NrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9ODg9c3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuLS1cbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xMDMtICovXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTA0OnN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xMDUte1xuLS1cbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaD0xMjQ9c3RhdGljIGlubGluZSBpbnQgcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTI4LVx0c3Bpbl9sb2NrKFx1MDAyNnItXHUwMDNlcHJvZHVjZXJfbG9jayk7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTI5Olx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTMwLVx0c3Bpbl91bmxvY2soXHUwMDI2ci1cdTAwM2Vwcm9kdWNlcl9sb2NrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9MTM1PXN0YXRpYyBpbmxpbmUgaW50IHB0cl9yaW5nX3Byb2R1Y2VfaXJxKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKVxuLS1cbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xMzktXHRzcGluX2xvY2tfaXJxKFx1MDAyNnItXHUwMDNlcHJvZHVjZXJfbG9jayk7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTQwOlx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTQxLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnItXHUwMDNlcHJvZHVjZXJfbG9jayk7XG4tLVxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTE0Nj1zdGF0aWMgaW5saW5lIGludCBwdHJfcmluZ19wcm9kdWNlX2FueShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTUxLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ci1cdTAwM2Vwcm9kdWNlcl9sb2NrLCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTUyOlx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTUzLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZXByb2R1Y2VyX2xvY2ssIGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9MTU4PXN0YXRpYyBpbmxpbmUgaW50IHB0cl9yaW5nX3Byb2R1Y2VfYmgoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXG4tLVxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE2Mi1cdHNwaW5fbG9ja19iaChcdTAwMjZyLVx1MDAzZXByb2R1Y2VyX2xvY2spO1xuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oOjE2MzpcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShyLCBwdHIpO1xuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE2NC1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnItXHUwMDNlcHJvZHVjZXJfbG9jayk7XG4tLVxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTMwMT1zdGF0aWMgaW5saW5lIHZvaWQgKl9fcHRyX3JpbmdfY29uc3VtZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4tLVxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTMwNi1cdCAqIGFjY2Vzc2luZyBkYXRhIHRocm91Z2ggdGhlIHBvaW50ZXIgaXMgdXAgdG8gZGF0ZS4gUGFpcnNcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaDozMDc6XHQgKiB3aXRoIHNtcF93bWIgaW4gX19wdHJfcmluZ19wcm9kdWNlLlxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTMwOC1cdCAqL1xuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmM9NzIzPXN0YXRpYyB2b2lkIGJxX2ZsdXNoX3RvX3F1ZXVlKHN0cnVjdCB4ZHBfYnVsa19xdWV1ZSAqYnEpXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy03NDItXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjc0MzpcdFx0ZXJyID0gX19wdHJfcmluZ19wcm9kdWNlKHEsIHhkcGYpO1xua2VybmVsL2JwZi9jcHVtYXAuYy03NDQtXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz03ODM9c3RhdGljIGJvb2wgcGFnZV9wb29sX3JlY3ljbGVfaW5fcmluZyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSlcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy03ODgtXHRpbl9zb2Z0aXJxID0gcGFnZV9wb29sX3Byb2R1Y2VyX2xvY2socG9vbCk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo3ODk6XHRyZXQgPSAhX19wdHJfcmluZ19wcm9kdWNlKFx1MDAyNnBvb2wtXHUwMDNlcmluZywgKF9fZm9yY2Ugdm9pZCAqKW5ldG1lbSk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy03OTAtXHRpZiAocmV0KVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTkyNj1zdGF0aWMgdm9pZCBwYWdlX3Bvb2xfcmVjeWNsZV9yaW5nX2J1bGsoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy05MzYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBidWxrX2xlbjsgaSYjNDM7JiM0MzspIHtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjkzNzpcdFx0aWYgKF9fcHRyX3JpbmdfcHJvZHVjZShcdTAwMjZwb29sLVx1MDAzZXJpbmcsIChfX2ZvcmNlIHZvaWQgKilidWxrW2ldKSkge1xubmV0L2NvcmUvcGFnZV9wb29sLmMtOTM4LVx0XHRcdC8qIHJpbmcgZnVsbCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VfZnJhZy9wYWdlX2ZyYWdfdGVzdC5jPTc3PXN0YXRpYyBpbnQgcGFnZV9mcmFnX3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYy0xMDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYzoxMDM6XHRcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShyaW5nLCB2YSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYy0xMDQtXHRcdGlmIChyZXQpIHtcbi0tXG50b29scy92aXJ0aW8vcmluZ3Rlc3QvcHRyX3JpbmcuYz0xMjg9aW50IGFkZF9pbmJ1Zih1bnNpZ25lZCBsZW4sIHZvaWQgKmJ1Ziwgdm9pZCAqZGF0YXApXG4tLVxudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmMtMTMxLVxudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmM6MTMyOlx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKFx1MDAyNmFycmF5LCBidWYpO1xudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmMtMTMzLVx0aWYgKHJldCBcdTAwM2U9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1OTEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTaW1wbGlmeWluZyB0aGUgVFVOIERldmljZSBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFpbXMgdG8gc3RyZWFtbGluZSB0aGUgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24uIEl0JiMzOTtzIHJlYWxseSBqdXN0IGEgbWF0dGVyIG9mIGltcHJvdmluZyB0aGUgY29yZSBkYXRhIGZsb3csIG1ha2luZyB0aGluZ3MgYSBiaXQgY2xlYXJlciBhbmQgbW9yZSBlZmZpY2llbnQuIFRoZSBrZXkgY2hhbmdlIGlzIHN3YXBwaW5nIG91dCB0aGUgYF9fcHRyX3JpbmdfcHJvZHVjZWAgYW5kIGBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2VgIGNhbGxzIHdpdGggYSBzaW1wbGVyIGBwdHJfcmluZ19wcm9kdWNlYC4gSXQmIzM5O3MgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgaW1wcm92ZW1lbnQsIHJlZHVjaW5nIHNvbWUgb2YgdGhlIGNvbXBsZXhpdHkgaW4gdGhhdCBmdW5jdGlvbi4KCkFkZGl0aW9uYWxseSwgSSBzZWUgaXQmIzM5O3MgYWxzbyByZW1vdmluZyB0aGUgYHR1bl93YWtlX3F1ZXVlYCBhbmQgYF9fdHVuX3dha2VfcXVldWVgIGZ1bmN0aW9ucy4gQWdhaW4sIHByb2JhYmx5IGEgY29uc29saWRhdGlvbiBvciByZWR1bmRhbmN5IGJlaW5nIGFkZHJlc3NlZC4gRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGltcHJvdmVtZW50LCBubyBtYWpvciBjaGFuZ2VzIHRvIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoZSBjb25maWdzIGludm9sdmVkLiBJIHNlZSB0aGlzIHJlbGllcyBvbiBgVFVOYCBhbmQgYFZIT1NUX05FVGAuIEJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgVFVOYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLiBHb3R0YSBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBHb3R0YSBrZWVwIHRoYXQgY29uZmlnIGh5Z2llbmUgdXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uIGJldHRlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzkxLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYXJlYSBwcm9iYWJseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgc2V0IG9mIGZlYXR1cmVzIG9yIG9wdGlvbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSBtYWRlLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlzc2VjdCBob3cgYSBwYXJ0aWN1bGFyIGFzcGVjdCBpcyBpbXBsZW1lbnRlZC4gQnkgbG9va2luZyBhdCB0aGUgS2NvbmZpZyBmaWxlLCBJIGNhbiBxdWlja2x5IGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdHJpc3RhdGUgb3B0aW9ucyByZWxldmFudCB0byB0aGlzIHNwZWNpZmljIGFyZWEgb2YgdGhlIG5ldHdvcmsgZHJpdmVyLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGRlc2lnbi4gSSBleHBlY3QgdG8gc2VlIGNvbmRpdGlvbmFscyBhbmQgb3B0aW9uIGNob2ljZXMgdGhhdCBkaWN0YXRlIHdoaWNoIHNwZWNpZmljIG5ldHdvcmsgY2FyZCB0eXBlcyBvciBmZWF0dXJlcyBhcmUgY29tcGlsZWQgaW50byB0aGUgZmluYWwga2VybmVsIGltYWdlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgdXNlci1zZWxlY3RhYmxlIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODU6XHRcbiAzODY6XHRjb25maWcgUklPTkVUX1JYX1NJWkVcbiAzODc6XHRcdGludCBcJiMzNDtOdW1iZXIgb2YgaW5ib3VuZCBxdWV1ZSBlbnRyaWVzXCYjMzQ7XG4gMzg4Olx0XHRkZXBlbmRzIG9uIFJJT05FVFxuIDM4OTpcdFx0ZGVmYXVsdCBcJiMzNDsxMjhcJiMzNDtcbiAzOTA6XHRcbiAzOTE6XHRjb25maWcgVFVOXG4gMzkyOlx0XHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAzOTM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM5NDpcdFx0c2VsZWN0IENSQzMyXG4gMzk1Olx0XHRoZWxwXG4gMzk2Olx0XHQgIFRVTi9UQVAgcHJvdmlkZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uIGZvciB1c2VyIHNwYWNlXG4gMzk3Olx0XHQgIHByb2dyYW1zLiAgSXQgY2FuIGJlIHZpZXdlZCBhcyBhIHNpbXBsZSBQb2ludC10by1Qb2ludCBvciBFdGhlcm5ldFxuIDM5ODpcdFx0ICBkZXZpY2UsIHdoaWNoIGluc3RlYWQgb2YgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBhIHBoeXNpY2FsIG1lZGlhLFxuIDM5OTpcdFx0ICByZWNlaXZlcyB0aGVtIGZyb20gdXNlciBzcGFjZSBwcm9ncmFtIGFuZCBpbnN0ZWFkIG9mIHNlbmRpbmcgcGFja2V0c1xuIDQwMDpcdFx0ICB2aWEgcGh5c2ljYWwgbWVkaWEgd3JpdGVzIHRoZW0gdG8gdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbS5cbiA0MDE6XHRcbiA0MDI6XHRcdCAgV2hlbiBhIHByb2dyYW0gb3BlbnMgL2Rldi9uZXQvdHVuLCBkcml2ZXIgY3JlYXRlcyBhbmQgcmVnaXN0ZXJzXG4gNDAzOlx0XHQgIGNvcnJlc3BvbmRpbmcgbmV0IGRldmljZSB0dW5YIG9yIHRhcFguICBBZnRlciBhIHByb2dyYW0gY2xvc2VkIGFib3ZlXG4gNDA0Olx0XHQgIGRldmljZXMsIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIHR1blhYIG9yIHRhcFhYIGRldmljZSBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gYFRVTmAgaXMgZGVmaW5pdGVseSByZWxpYW50IG9uIGBJTkVUYC4gVGhhdCBtdWNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBgVkhPU1RfTkVUYCBmaXRzIGludG8gdGhpcyB3aG9sZSBhcmNoaXRlY3R1cmUuIExldCBtZSBkaWcgaW50byBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgb3IgaWYgaXQgaGFzIGFueXRoaW5nIHVuZXhwZWN0ZWQgdG8gY29udHJpYnV0ZSB0byB0aGUgbWl4LiBVbmRlcnN0YW5kaW5nIHRoaXMgcmVsYXRpb25zaGlwIGlzIGtleSB0byBhIHJvYnVzdCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdGRlZmF1bHQgeVxuICAzMTpcdFxuICAzMjpcdGlmIFZIT1NUX01FTlVcbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVkhPU1RfTkVUXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuICAzNjpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IEVWRU5URkQgXHUwMDI2XHUwMDI2IChUVU4gfHwgIVRVTikgXHUwMDI2XHUwMDI2IChUQVAgfHwgIVRBUClcbiAgMzc6XHRcdHNlbGVjdCBWSE9TVFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXG4gIDQwOlx0XHQgIGd1ZXN0IG5ldHdvcmtpbmcgd2l0aCB2aXJ0aW9fbmV0LiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB2aXJ0aW9fbmV0XG4gIDQxOlx0XHQgIG1vZHVsZSBpdHNlbGYgd2hpY2ggbmVlZHMgdG8gYmUgbG9hZGVkIGluIGd1ZXN0IGtlcm5lbC5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDQ0Olx0XHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIFZIT1NUX1NDU0lcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNDk6XHRcdHNlbGVjdCBWSE9TVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTW9kdWxlIFN5bWJvbCBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBtb2R1bGVzIGFuZCBmaWd1cmluZyBvdXQgd2hpY2ggc3ltYm9scyBhcmUgaW1wb3J0YW50LCBwYXJ0aWN1bGFybHkgZm9yIGBWSE9TVF9ORVRgLiAgVGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgYE5FVGAsIGBFVkVOVEZEYCwgYW5kIHRoZW4gYSBjaG9pY2UgYmV0d2VlbiBgVFVOYCBvciBub3QgYFRVTmAsIGFuZCBgVEFQYCBvciBub3QgYFRBUGAuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFZIT1NUX05FVGAsIHRoZW4gYFRVTmAgbG9va3MgbGlrZSB0aGUgcmlnaHQgY2hvaWNlIGhlcmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzIHRoZW1zZWx2ZXMsIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmZhY2UgZW50cnkgcG9pbnRzLiBJJiMzOTttIGNoZWNraW5nIHRoZSBgdHVuLmNgIGZpbGUgYW5kIEkgc2VlOiBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgLCBhbmQgY3J1Y2lhbGx5LCBgdHVuX25ldF94bWl0YC4gSW4gYG5ldC5jYCwgSSBzcG90OiBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X25ldF9vcGVuYCwgYW5kIGB2aG9zdF9uZXRfcmVsZWFzZWAuCgpJIHdhcyBzbGlnaHRseSBjb25jZXJuZWQgYWJvdXQgYHR1bl9uZXRfeG1pdGAgYmVpbmcgc3RhdGljLCBidXQgdGhhdCYjMzk7cyBhIGtleSBuZXR3b3JrIGVudHJ5IHBvaW50LiBSZW1lbWJlcmluZyB0aGUgZ3VpZGVsaW5lcywgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQsIGFzIHN0YXRpYyBmdW5jdGlvbnMgbWlnaHQgYmUgaW5saW5lZC4gQnV0IHdhaXQsIGB0dW5fbmV0X3htaXRgIGlzIGFzc2lnbmVkIHRvIGBuZG9fc3RhcnRfeG1pdGAuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IGlubGluZWQgYW5kIGl0JiMzOTtzIGEgY2FsbGJhY2s7IGdyZWF0LCBpdCYjMzk7cyBmaW5lIHRvIGxpc3QgaXQuIGB0dW5fY2hyX3JlYWRfaXRlcmAgaXMgYXNzaWduZWQgdG8gYHJlYWRfaXRlcmAsIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGB3cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgIGlzIGFzc2lnbmVkIHRvIGB1bmxvY2tlZF9pb2N0bGAsIGB2aG9zdF9uZXRfaW9jdGxgIGlzIGFzc2lnbmVkIHRvIGB1bmxvY2tlZF9pb2N0bGAgYW5kIGB2aG9zdF9uZXRfb3BlbmAgaXMgYXNzaWduZWQgdG8gYG9wZW5gLiBBbGwgZ29vZCEgVGhlc2UgbG9vayBsaWtlIHRoZSBjb3JyZWN0IHN5bWJvbHMgdG8gY2hlY2suICBGaW5hbGx5LCBhIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0gYHR1bl9uZXRfeG1pdGAgaXMgYWN0dWFsbHkgdGhlcmUsIGJ1dCB0aGF0IHNob3VsZCBiZSBhIGdpdmVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz05OTA9c3RhdGljIHVuc2lnbmVkIGludCBydW5fZWJwZl9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMDAyLS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTAwMzpzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0xMDA0LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHVuX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTE4Ny1cdC5uZG9fc3RvcFx0XHQ9IHR1bl9uZXRfY2xvc2UsXG5kcml2ZXJzL25ldC90dW4uYzoxMTg4Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gdHVuX25ldF94bWl0LFxuZHJpdmVycy9uZXQvdHVuLmMtMTE4OS1cdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjcxLVx0Lm5kb19zdG9wXHRcdD0gdHVuX25ldF9jbG9zZSxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyNzI6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSB0dW5fbmV0X3htaXQsXG5kcml2ZXJzL25ldC90dW4uYy0xMjczLVx0Lm5kb19maXhfZmVhdHVyZXNcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIEtlcm5lbCBNb2R1bGUgSW50ZXJmYWNlKioKCkFscmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgdHVuX25ldF94bWl0YCBpcyBpbmRlZWQgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG1vZHVsZSwgbm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJmYWNlIGhhbmRsZXMgdHJhZmZpYywgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlIGRhdGEgaXMgYmVpbmcgY29uc3VtZWQuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gYHR1bl9jaHJfcmVhZF9pdGVyYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLCB0byBzZWUgdGhlIGJlaGF2aW9yIHdoZW4gdHJhbnNtaXR0aW5nIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfcmVhZF9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjE2MD1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTYtXG5kcml2ZXJzL25ldC90dW4uYzoyMTk3OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XG5kcml2ZXJzL25ldC90dW4uYy0zNDcwLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ3MTpcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYy0zNDcyLVx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzOgoKKipDaGVja2luZyBUdW4gRGV2aWNlIEl0ZXJhdG9ycyoqCgpBbHJpZ2h0LCBzbyBJIGtub3cgYHR1bl9jaHJfcmVhZF9pdGVyYCBpcyBhIGxlZ2l0aW1hdGUgZnVuY3Rpb24sIG5vIHByb2JsZW0gdGhlcmUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIG15IG1lbnRhbCBjaGVja2xpc3QgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBhbmQgcG90ZW50aWFsbHkgdGhlIG5hdHVyZSBvZiBpdHMgY291bnRlcnBhcnQuIEkgbmVlZCB0byBub3cgY2hlY2sgdGhlIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGZ1bmN0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHdlJiMzOTtyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBUVU4gZGV2aWNlLCBhbmQgdGhlIHdyaXRlIGl0ZXJhdGlvbiBtZWNoYW5pc20gaXMgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGF0LiBLbm93aW5nIHdoYXQgaXQgZG9lcyBpcyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfd3JpdGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTE2OTU9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTk4Ni1cbmRyaXZlcnMvbmV0L3R1bi5jOjE5ODc6c3RhdGljIHNzaXplX3QgdHVuX2Nocl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZHJpdmVycy9uZXQvdHVuLmMtMTk4OC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzQ2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dW5fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDcxLVx0LnJlYWRfaXRlciAgPSB0dW5fY2hyX3JlYWRfaXRlcixcbmRyaXZlcnMvbmV0L3R1bi5jOjM0NzI6XHQud3JpdGVfaXRlciA9IHR1bl9jaHJfd3JpdGVfaXRlcixcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzMtXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGB0dW5gIGFuZCBwb3RlbnRpYWxseSB2aXJ0dWFsIGhvc3RpbmcuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgdG8gbWluZCBpcywgKnllcyosIEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgZW5jb3VudGVyZWQgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYmVmb3JlLiBMZXQgbWUgbWVudGFsbHkgdmVyaWZ5IGl0cyBleGlzdGVuY2UuLi4gKll1cCwgaXQmIzM5O3MgdGhlcmUqLiBOb3csIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgYnJvYWRlciBjb250ZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSB2aXJ0dWFsIGhvc3QgbmV0d29ya2luZyBjb21wb25lbnRzLiBUaGF0IG1lYW5zIG15IG5leHQgbW92ZSBpcyB0byBkaWcgaW50byBgdmhvc3RfbmV0X2lvY3RsYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE3MTc9c3RhdGljIGxvbmcgdmhvc3RfbmV0X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfbmV0ICpuKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTczNy1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTczODpzdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTczOS1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg3MS1cdC5wb2xsICAgICAgICAgICA9IHZob3N0X25ldF9jaHJfcG9sbCxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3MjpcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X25ldF9pb2N0bCxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg3My1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgTmV0d29yayBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSBgdmhvc3RfbmV0X2lvY3RsYCBpcyBhIHRoaW5nLiBUaW1lIHRvIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZS4gKkNoZWNrcyB0aGUgY29kZWJhc2UsIHF1aWNrIGFuZCBlZmZpY2llbnQgYXMgYWx3YXlzKi4uLiBZdXAsIGl0JiMzOTtzIHRoZXJlLiBHb29kLiBOb3csIHRoYXQgZ2l2ZXMgbWUgYSBqdW1waW5nLW9mZiBwb2ludC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBob3cgd2UgKmdldCogdG8gdGhhdCBpb2N0bCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgcGF0aCwgdGhlIGVudHJ5IHBvaW50LiBUaGF0IGxpa2VseSBtZWFucyBleGFtaW5pbmcgYHZob3N0X25ldF9vcGVuYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgY29udGV4dCBhcm91bmQgaXRzIHVzZS4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfbmV0X29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTMyMj1zdGF0aWMgdm9pZCBoYW5kbGVfcnhfbmV0KHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMyOC1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMyOTpzdGF0aWMgaW50IHZob3N0X25ldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzMwLXtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODczLVx0LmNvbXBhdF9pb2N0bCAgID0gY29tcGF0X3B0cl9pb2N0bCxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3NDpcdC5vcGVuICAgICAgICAgICA9IHZob3N0X25ldF9vcGVuLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODc1LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNb2R1bGUgSW50ZXJhY3Rpb24gLSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gYHZob3N0X25ldF9vcGVuYCBpcyBkZWZpbml0ZWx5IGEgdGhpbmcuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgb25lLiBOb3csIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGUgd2VlZHMsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBoYXBwZW5zIG9uIHRoZSBvdGhlciBlbmQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbXBhbmlvbiBmdW5jdGlvbjogYHZob3N0X25ldF9yZWxlYXNlYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZSBvYnZpb3VzIGludGVyYWN0aW9uIHBvaW50IG9yIHJhY2UgY29uZGl0aW9uLiBDaGVja2luZyB0aGUgcmVsZWFzZSBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIGNvZGUsIHNvIEkgY2FuIHRoaW5rIHRocm91Z2ggdGhlIGludGVyYWN0aW9ucyBhbmQgcmVzb3VyY2VzIGNvcnJlY3RseS4gTm8gcG9pbnQgZGl2aW5nIHRvbyBkZWVwbHkgaW50byBvcGVuIHdpdGhvdXQgdW5kZXJzdGFuZGluZyBob3cgd2UgY2xlYW4gdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X25ldF9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE0MjE9c3RhdGljIHZvaWQgdmhvc3RfbmV0X2ZsdXNoKHN0cnVjdCB2aG9zdF9uZXQgKm4pXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNDM2LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxNDM3OnN0YXRpYyBpbnQgdmhvc3RfbmV0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE0Mzgte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg2Ny1cdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODY4Olx0LnJlbGVhc2UgICAgICAgID0gdmhvc3RfbmV0X3JlbGVhc2UsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NjktXHQucmVhZF9pdGVyICAgICAgPSB2aG9zdF9uZXRfY2hyX3JlYWRfaXRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdmhvc3RfbmV0IFJlbGF0ZWQgUmVsZWFzZSBhbmQgSXRlcmF0b3JzKioKCkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGNlbnRlcnMgYXJvdW5kIHRoZSBgdmhvc3RfbmV0YCBtb2R1bGUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgY29uZmlybWluZyB0aGF0IGB2aG9zdF9uZXRfcmVsZWFzZWAgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IG1vZHVsZS4gR29vZCwgaXQmIzM5O3MgdGhlcmUuIFRoYXQmIzM5O3MgYSBmb3VuZGF0aW9uYWwgcGllY2UgY29uZmlybWVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHBhcnRpY3VsYXJseSB0aGUgY2hhcmFjdGVyIGRldmljZSBpbnRlcmFjdGlvbnMuIFNvLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSByZWFkIGFuZCB3cml0ZSBpdGVyYXRvcnMuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gYWNyb3NzIGB2aG9zdF9uZXRfY2hyX3JlYWRfaXRlcmAgYW5kIGB2aG9zdF9uZXRfY2hyX3dyaXRlX2l0ZXJgLiBUaGV5JiMzOTtyZSB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBpbnZvbHZlZCBpbiB0cmFuc2ZlcnJpbmcgZGF0YSB0byBhbmQgZnJvbSB0aGUgY2hhcmFjdGVyIGRldmljZSB1c2VkIGJ5IHZob3N0LW5ldC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZnVuY3Rpb25zIGhhbmRsZSB0aGUgaXRlcmF0aW9uIGFuZCBkYXRhIGJ1ZmZlcmluZywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgdmlydGlvIG5ldHdvcmsgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBoYW5kbGluZyBlcnJvciBjYXNlcyBhbmQgZGF0YSB0cmFuc2ZlcnMsIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZ3Vlc3QgVk1zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGl0ZXJhdG9ycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9uZXRfY2hyX3JlYWRfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xNzM4PXN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTgzNy1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTgzODpzdGF0aWMgc3NpemVfdCB2aG9zdF9uZXRfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4Mzkte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NjgtXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9uZXRfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg2OTpcdC5yZWFkX2l0ZXIgICAgICA9IHZob3N0X25ldF9jaHJfcmVhZF9pdGVyLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODcwLVx0LndyaXRlX2l0ZXIgICAgID0gdmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA1MAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IGFuZCBUZXN0aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhbHRlcmluZyB0aGUgcXVldWUgd2FraW5nIGxvZ2ljIGluIHRoZSBUVU4gZHJpdmVyIGJhc2VkIG9uIGBjb25zX2NudGAsIHNpbXBsaWZ5aW5nIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBtZWFucyB0aGUgY3JpdGljYWwgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gdGhlc2UgdHdvIGNvbXBvbmVudHMgYXJlIGJlaW5nIG1vZGlmaWVkLgoKVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBmb3IgcmVncmVzc2lvbnMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3Mgd2l0aGluIHRoYXQgcXVldWUgd2FraW5nIG1lY2hhbmlzbS4gVGhlIGZvY3VzIHN5bWJvbHMgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmc6IGB0dW5fbmV0X3htaXRgLCBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X25ldF9vcGVuYCwgYHZob3N0X25ldF9jaHJfcmVhZF9pdGVyYCwgYW5kIGB2aG9zdF9uZXRfY2hyX3dyaXRlX2l0ZXJgLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBmdXp6aW5nIHRhcmdldHMgdGhlc2UgcGF0aHMgc3BlY2lmaWNhbGx5LgoKUmVnYXJkaW5nIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMsIEkgbmVlZCBgVFVOYCBhbmQgYFZIT1NUX05FVGAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjbGVhciwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgVkhPU1RfTkVUYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gQWxyaWdodCwgaXQgc2VsZWN0cyBgVkhPU1RgLCBhbmQgYFZIT1NUX01FTlVgIGlzIGp1c3QgYSBtZW51Y29uZmlnIG9wdGlvbi4gR29vZC4KCkkmIzM5O20gY29uZmlkZW50IGluIHRob3NlIGNvbmZpZ3VyYXRpb25zLiBOb3csIEkmIzM5O2xsIHJ1biB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGdlbmVyYXRlIHRoZSBiYXNlbGluZSBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9uZXRfeG1pdCYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgZXhwbGljaXQgcXVldWUgd2FraW5nIGxvZ2ljIGJhc2VkIG9uIGBjb25zX2NudGAgaW4gdGhlIFRVTiBkcml2ZXIgYW5kIHNpbXBsaWZpZXMgdGhlIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gcGF0aHMgYmV0d2VlbiBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzIG9jY3VyIGluIHRoZSBxdWV1ZSB3YWtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9jaHJfd3JpdGVfaXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGV4cGxpY2l0IHF1ZXVlIHdha2luZyBsb2dpYyBiYXNlZCBvbiBgY29uc19jbnRgIGluIHRoZSBUVU4gZHJpdmVyIGFuZCBzaW1wbGlmaWVzIHRoZSByaW5nIGNvbnN1bXB0aW9uIGluIGJvdGggVFVOIGFuZCB2aG9zdC1uZXQuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gVFVOIGFuZCB2aG9zdC1uZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ciBpbiB0aGUgcXVldWUgd2FraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NDcuNDgyNDE1Nzk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNDMxMTc4MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVkhPU1RfTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX25ldF94bWl0XCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX2Nocl93cml0ZV9pdGVyXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9vcGVuXCIsXG4gICAgXCJ2aG9zdF9uZXRfY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBleHBsaWNpdCBxdWV1ZSB3YWtpbmcgbG9naWMgYmFzZWQgb24gYGNvbnNfY250YCBpbiB0aGUgVFVOIGRyaXZlciBhbmQgc2ltcGxpZmllcyB0aGUgcmluZyBjb25zdW1wdGlvbiBpbiBib3RoIFRVTiBhbmQgdmhvc3QtbmV0LiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBwYXRocyBiZXR3ZWVuIFRVTiBhbmQgdmhvc3QtbmV0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIgaW4gdGhlIHF1ZXVlIHdha2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NDcuNDgyNDIyMDc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ1MDM3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5MjYwYzlhMjhlMjU4MjhiOTE0YTUzODY3OGMwODFlNGViODczZGI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDA2OjM1OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5pbmRleCBmZmJlNmYxM2ZiMWZhLi5mZWQ5ZGZkZmNjM2JjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXFxuKysrIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5AQCAtMTQ1LDggKzE0NSw2IEBAIHN0cnVjdCB0dW5fZmlsZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbmV4dDtcXG4gXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkO1xcbiBcXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcXG4tXFx0LyogUHJvdGVjdGVkIGJ5IHR4X3JpbmcuY29uc3VtZXJfbG9jayAqL1xcbi1cXHRpbnQgY29uc19jbnQ7XFxuIFxcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcXG4gfTtcXG4gXFxuQEAgLTU5MCwxMyArNTg4LDggQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXFx1MDAzZXRmaWxlc1tpbmRleF0sXFxuIFxcdFxcdFxcdFxcdCAgIHR1bi1cXHUwMDNldGZpbGVzW3R1bi1cXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xcbiBcXHRcXHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2luZGV4XSk7XFxuLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHRcXHRudGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4ID0gaW5kZXg7XFxuIFxcdFxcdG50ZmlsZS1cXHUwMDNleGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4O1xcbi1cXHRcXHRudGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4tXFx0XFx0aWYgKF9fcHRyX3JpbmdfZW1wdHkoXFx1MDAyNm50ZmlsZS1cXHUwMDNldHhfcmluZykpXFxuLVxcdFxcdFxcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVxcdTAwM2VkZXYsIGluZGV4KTtcXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm50ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cXHUwMDNldGZpbGVzW3R1bi1cXHUwMDNlbnVtcXVldWVzIC0gMV0sXFxuIFxcdFxcdFxcdFxcdCAgIE5VTEwpO1xcbiBcXG5AQCAtNzM3LDkgKzczMCw2IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuLVxcdHRmaWxlLVxcdTAwM2Vjb25zX2NudCA9IDA7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4gXFx0dGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4ID0gdHVuLVxcdTAwM2VudW1xdWV1ZXM7XFxuIFxcdHRmaWxlLVxcdTAwM2Vzb2NrZXQuc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjY9IH5SQ1ZfU0hVVERPV047XFxuIFxcbkBAIC0xMDE4LDcgKzEwMDgsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlO1xcbiBcXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xcbiBcXHRpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuLVxcdGludCByZXQ7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdHRmaWxlID0gcmN1X2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW3R4cV0pO1xcbkBAIC0xMDczLDMzICsxMDYyLDEzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuIFxcbi1cXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xcbi1cXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4tXFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZywgc2tiKTtcXG4tXFx0aWYgKCFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xcbi1cXHRcXHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcXG4tXFx0XFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXFxuLVxcdFxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuLVxcdFxcdGlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykpXFxuLVxcdFxcdFxcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xcbi1cXHR9XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4tXFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0LyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgYSBxZGlzYyBpcyBwcmVzZW50LCBidXRcXG4tXFx0XFx0ICogY2FuIGhhcHBlbiBkdWUgdG8gbGx0eC5cXG4tXFx0XFx0ICogU2luY2Ugc2tiX3R4X3RpbWVzdGFtcCgpLCBza2Jfb3JwaGFuKCksXFxuLVxcdFxcdCAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkXFxuLVxcdFxcdCAqIHdpdGggdGhlIFNLQiwgcmV0dXJuaW5nIE5FVERFVl9UWF9CVVNZIGlzIHVuc2FmZSBhbmRcXG4tXFx0XFx0ICogd2UgbXVzdCBkcm9wIGluc3RlYWQuXFxuLVxcdFxcdCAqL1xcbitcXHRpZiAocHRyX3JpbmdfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcsIHNrYikpIHtcXG4gXFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HO1xcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGRldi1cXHUwMDNlbGx0eCByZXF1aXJlcyB0byBkbyBvdXIgb3duIHVwZGF0ZSBvZiB0cmFuc19zdGFydCAqL1xcbitcXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xcbiBcXHR0eHFfdHJhbnNfY29uZF91cGRhdGUocXVldWUpO1xcbiBcXG4gXFx0LyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovXFxuQEAgLTIxNDcsNDYgKzIxMTYsMTMgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuIFxcdHJldHVybiB0b3RhbDtcXG4gfVxcbiBcXG4tLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXFxuLXN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4tXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuLXtcXG4tXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0dGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4tXFxuLVxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cXG4tXFx0c21wX21iKCk7XFxuLVxcdGlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHtcXG4tXFx0XFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ICs9IGNvbnN1bWVkO1xcbi1cXHRcXHRpZiAodGZpbGUtXFx1MDAzZWNvbnNfY250IFxcdTAwM2U9IHRmaWxlLVxcdTAwM2V0eF9yaW5nLnNpemUgLyAyIHx8XFxuLVxcdFxcdCAgICBfX3B0cl9yaW5nX2VtcHR5KFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykpIHtcXG4tXFx0XFx0XFx0bmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpO1xcbi1cXHRcXHRcXHR0ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4te1xcbi1cXHR2b2lkICpwdHI7XFxuLVxcbi1cXHRzcGluX2xvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbi1cXHRwdHIgPSBfX3B0cl9yaW5nX2NvbnN1bWUoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nKTtcXG4tXFx0aWYgKHB0cilcXG4tXFx0XFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcXG4tXFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4tXFx0cmV0dXJuIHB0cjtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tXFx0XFx0XFx0ICAgaW50IG5vYmxvY2ssIGludCAqZXJyKVxcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXFxuIHtcXG4gXFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XFxuIFxcdHZvaWQgKnB0ciA9IE5VTEw7XFxuIFxcdGludCBlcnJvciA9IDA7XFxuIFxcbi1cXHRwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpO1xcbitcXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZyk7XFxuIFxcdGlmIChwdHIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRpZiAobm9ibG9jaykge1xcbkBAIC0yMTk4LDcgKzIxMzQsNyBAQCBzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbiBcXG4gXFx0d2hpbGUgKDEpIHtcXG4gXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4tXFx0XFx0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcXG4rXFx0XFx0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpO1xcbiBcXHRcXHRpZiAocHRyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuQEAgLTIyMzUsNyArMjE3MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuIFxcbiBcXHRpZiAoIXB0cikge1xcbiBcXHRcXHQvKiBSZWFkIGZyYW1lcyBmcm9tIHJpbmcgKi9cXG4tXFx0XFx0cHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCBcXHUwMDI2ZXJyKTtcXG4rXFx0XFx0cHRyID0gdHVuX3JpbmdfcmVjdih0ZmlsZSwgbm9ibG9jaywgXFx1MDAyNmVycik7XFxuIFxcdFxcdGlmICghcHRyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTM2OTAsMTYgKzM2MjYsNiBAQCBzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG4gXFx0XFx0XFx0XFx0XFx0ICBkZXYtXFx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICB0dW5fcHRyX2ZyZWUpO1xcbiBcXG4tXFx0aWYgKCFyZXQpIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0XFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG4tXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4tXFx0XFx0XFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXFx1MDAzZWRldiwgdGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4tXFx0XFx0XFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4tXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuIFxcdGtmcmVlKHJpbmdzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0zODA4LDI5ICszNzM0LDYgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF90eF9yaW5nKTtcXG4gXFxuLS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbi12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXFxuLXtcXG4tXFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZTtcXG4tXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcXG4tXFxuLVxcdGlmIChmaWxlLVxcdTAwM2VmX29wICE9IFxcdTAwMjZ0dW5fZm9wcylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0dGZpbGUgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuLVxcdGlmICghdGZpbGUpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFxuLVxcdHR1biA9IHJjdV9kZXJlZmVyZW5jZSh0ZmlsZS1cXHUwMDNldHVuKTtcXG4tXFx0aWYgKHR1bilcXG4tXFx0XFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XFxuLVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTCh0dW5fd2FrZV9xdWV1ZSk7XFxuLVxcbiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7XFxuIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jXFxuaW5kZXggM2U3MmI5YzZhZjBjYS4uNjk0OWI3MDQxNjZkNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXFxuKysrIGIvZHJpdmVycy92aG9zdC9uZXQuY1xcbkBAIC0xNzYsMjEgKzE3NiwxMyBAQCBzdGF0aWMgdm9pZCAqdmhvc3RfbmV0X2J1Zl9jb25zdW1lKHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCBzb2NrICpzayxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuK3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuIHtcXG4tXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmaWxlO1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gXFx1MDAyNm52cS1cXHUwMDNlcnhxO1xcbiBcXG4gXFx0cnhxLVxcdTAwM2VoZWFkID0gMDtcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZudnEtXFx1MDAzZXJ4X3JpbmctXFx1MDAzZWNvbnN1bWVyX2xvY2spO1xcbi1cXHRyeHEtXFx1MDAzZXRhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXFx1MDAzZXJ4X3JpbmcsIHJ4cS1cXHUwMDNlcXVldWUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xcbi1cXG4tXFx0aWYgKHJ4cS1cXHUwMDNldGFpbClcXG4tXFx0XFx0dHVuX3dha2VfcXVldWUoZmlsZSwgcnhxLVxcdTAwM2V0YWlsKTtcXG4tXFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZudnEtXFx1MDAzZXJ4X3JpbmctXFx1MDAzZWNvbnN1bWVyX2xvY2spO1xcbitcXHRyeHEtXFx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVxcdTAwM2VyeF9yaW5nLCByeHEtXFx1MDAzZXF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xcbiBcXHRyZXR1cm4gcnhxLVxcdTAwM2V0YWlsO1xcbiB9XFxuIFxcbkBAIC0yMTcsMTUgKzIwOSwxNCBAQCBzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxcbiBcXHRyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gXFx1MDAyNm52cS1cXHUwMDNlcnhxO1xcbiBcXG4gXFx0aWYgKCF2aG9zdF9uZXRfYnVmX2lzX2VtcHR5KHJ4cSkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc2ssIG52cSkpXFxuK1xcdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKG52cSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gb3V0OlxcbkBAIC0xMDEzLDcgKzEwMDQsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0aWYgKHJ2cS1cXHUwMDNlcnhfcmluZylcXG4tXFx0XFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhzaywgcnZxKTtcXG4rXFx0XFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhydnEpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2ssIGZsYWdzKTtcXG4gXFx0aGVhZCA9IHNrYl9wZWVrKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXFxuaW5kZXggNWYzZTIwNmM3YTczNy4uODAxNjZlYjYyZjQxYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaFxcbkBAIC0yMiw3ICsyMiw2IEBAIHN0cnVjdCB0dW5fbXNnX2N0bCB7XFxuICNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpXFxuIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopO1xcbiBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuLXZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXFxuIHtcXG5AQCAtNTYsOCArNTUsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmKVxcbiBcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XFxuLVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXFxuIHtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcXG5pbmRleCBjOTVlODkxOTAzZjA1Li5kMmMzNjI5YmJlNDUxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxcbkBAIC05NiwyMCArOTYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRyX3JpbmdfZnVsbF9iaChzdHJ1Y3QgcHRyX3JpbmcgKnIpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxcbi0gKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cXG4tICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXFxuLXtcXG4tXFx0aWYgKHVubGlrZWx5KCFyLVxcdTAwM2VzaXplKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRpZiAoZGF0YV9yYWNlKHItXFx1MDAzZXF1ZXVlW3ItXFx1MDAzZXByb2R1Y2VyXSkpXFxuLVxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxcbiAgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cXG4gICogQ2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHBvaW50ZXIgdGhhdCBpcyBiZWluZyBxdWV1ZWRcXG5AQCAtMTE3LDEwICsxMDMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyKVxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKVxcbiB7XFxuLVxcdGludCBwID0gX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHIpO1xcbi1cXG4tXFx0aWYgKHApXFxuLVxcdFxcdHJldHVybiBwO1xcbitcXHRpZiAodW5saWtlbHkoIXItXFx1MDAzZXNpemUpIHx8IGRhdGFfcmFjZShyLVxcdTAwM2VxdWV1ZVtyLVxcdTAwM2Vwcm9kdWNlcl0pKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSB0aGUgcG9pbnRlciB3ZSBhcmUgc3RvcmluZyBwb2ludHMgdG8gYSB2YWxpZCBkYXRhLiAqL1xcbiBcXHQvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NDcuOTc3NTE0ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTE5MzYwMTIwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fbmV0X3htaXRcIixcbiAgICBcInR1bl9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ0dW5fY2hyX3dyaXRlX2l0ZXJcIixcbiAgICBcInR1bl9jaHJfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X29wZW5cIixcbiAgICBcInZob3N0X25ldF9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ2aG9zdF9uZXRfY2hyX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGV4cGxpY2l0IHF1ZXVlIHdha2luZyBsb2dpYyBiYXNlZCBvbiBgY29uc19jbnRgIGluIHRoZSBUVU4gZHJpdmVyIGFuZCBzaW1wbGlmaWVzIHRoZSByaW5nIGNvbnN1bXB0aW9uIGluIGJvdGggVFVOIGFuZCB2aG9zdC1uZXQuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gVFVOIGFuZCB2aG9zdC1uZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ciBpbiB0aGUgcXVldWUgd2FraW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MjYwYzlhMjhlMjU4MjhiOTE0YTUzODY3OGMwODFlNGViODczZGI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDY6MzU6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCBmZmJlNmYxM2ZiMWZhLi5mZWQ5ZGZkZmNjM2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcbisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5AQCAtMTQ1LDggKzE0NSw2IEBAIHN0cnVjdCB0dW5fZmlsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqZGV0YWNoZWQ7XG4gXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcbi1cdC8qIFByb3RlY3RlZCBieSB0eF9yaW5nLmNvbnN1bWVyX2xvY2sgKi9cbi1cdGludCBjb25zX2NudDtcbiBcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcbiB9O1xuIFxuQEAgLTU5MCwxMyArNTg4LDggQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXHUwMDNldGZpbGVzW2luZGV4XSxcbiBcdFx0XHRcdCAgIHR1bi1cdTAwM2V0ZmlsZXNbdHVuLVx1MDAzZW51bXF1ZXVlcyAtIDFdKTtcbiBcdFx0bnRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2luZGV4XSk7XG4tXHRcdHNwaW5fbG9jayhcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0bnRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4ID0gaW5kZXg7XG4gXHRcdG50ZmlsZS1cdTAwM2V4ZHBfcnhxLnF1ZXVlX2luZGV4ID0gaW5kZXg7XG4tXHRcdG50ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4tXHRcdGlmIChfX3B0cl9yaW5nX2VtcHR5KFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nKSlcbi1cdFx0XHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cdTAwM2VkZXYsIGluZGV4KTtcbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXHUwMDNldGZpbGVzW3R1bi1cdTAwM2VudW1xdWV1ZXMgLSAxXSxcbiBcdFx0XHRcdCAgIE5VTEwpO1xuIFxuQEAgLTczNyw5ICs3MzAsNiBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4tXHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0dGZpbGUtXHUwMDNlcXVldWVfaW5kZXggPSB0dW4tXHUwMDNlbnVtcXVldWVzO1xuIFx0dGZpbGUtXHUwMDNlc29ja2V0LnNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNj0gflJDVl9TSFVURE9XTjtcbiBcbkBAIC0xMDE4LDcgKzEwMDgsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZTtcbiBcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4gXHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbi1cdGludCByZXQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR0ZmlsZSA9IHJjdV9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW3R4cV0pO1xuQEAgLTEwNzMsMzMgKzEwNjIsMTMgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbi1cdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbi1cdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpO1xuLVx0aWYgKCFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xuLVx0XHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcbi1cdFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXG4tXHRcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4tXHRcdGlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpKVxuLVx0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbi1cbi1cdGlmIChyZXQpIHtcbi1cdFx0LyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgYSBxZGlzYyBpcyBwcmVzZW50LCBidXRcbi1cdFx0ICogY2FuIGhhcHBlbiBkdWUgdG8gbGx0eC5cbi1cdFx0ICogU2luY2Ugc2tiX3R4X3RpbWVzdGFtcCgpLCBza2Jfb3JwaGFuKCksXG4tXHRcdCAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkXG4tXHRcdCAqIHdpdGggdGhlIFNLQiwgcmV0dXJuaW5nIE5FVERFVl9UWF9CVVNZIGlzIHVuc2FmZSBhbmRcbi1cdFx0ICogd2UgbXVzdCBkcm9wIGluc3RlYWQuXG4tXHRcdCAqL1xuK1x0aWYgKHB0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKSkge1xuIFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7XG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbiBcdC8qIGRldi1cdTAwM2VsbHR4IHJlcXVpcmVzIHRvIGRvIG91ciBvd24gdXBkYXRlIG9mIHRyYW5zX3N0YXJ0ICovXG4rXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuIFx0dHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTtcbiBcbiBcdC8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqL1xuQEAgLTIxNDcsNDYgKzIxMTYsMTMgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4gXHRyZXR1cm4gdG90YWw7XG4gfVxuIFxuLS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuLXN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi1cdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZClcbi17XG4tXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0dGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuLVxuLVx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xuLVx0c21wX21iKCk7XG4tXHRpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7XG4tXHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ICs9IGNvbnN1bWVkO1xuLVx0XHRpZiAodGZpbGUtXHUwMDNlY29uc19jbnQgXHUwMDNlPSB0ZmlsZS1cdTAwM2V0eF9yaW5nLnNpemUgLyAyIHx8XG4tXHRcdCAgICBfX3B0cl9yaW5nX2VtcHR5KFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpKSB7XG4tXHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpO1xuLVx0XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbi1cdFx0fVxuLVx0fVxuLX1cbi1cbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuLXtcbi1cdHZvaWQgKnB0cjtcbi1cbi1cdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuLVx0cHRyID0gX19wdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuLVx0aWYgKHB0cilcbi1cdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcbi1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHRyZXR1cm4gcHRyO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLVx0XHRcdCAgIGludCBub2Jsb2NrLCBpbnQgKmVycilcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4ge1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4gXHR2b2lkICpwdHIgPSBOVUxMO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4rXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuIFx0aWYgKHB0cilcbiBcdFx0Z290byBvdXQ7XG4gXHRpZiAobm9ibG9jaykge1xuQEAgLTIxOTgsNyArMjEzNCw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4gXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuLVx0XHRwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpO1xuK1x0XHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuIFx0XHRpZiAocHRyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbkBAIC0yMjM1LDcgKzIxNzEsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFxuIFx0aWYgKCFwdHIpIHtcbiBcdFx0LyogUmVhZCBmcmFtZXMgZnJvbSByaW5nICovXG4tXHRcdHB0ciA9IHR1bl9yaW5nX3JlY3YodHVuLCB0ZmlsZSwgbm9ibG9jaywgXHUwMDI2ZXJyKTtcbitcdFx0cHRyID0gdHVuX3JpbmdfcmVjdih0ZmlsZSwgbm9ibG9jaywgXHUwMDI2ZXJyKTtcbiBcdFx0aWYgKCFwdHIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zNjkwLDE2ICszNjI2LDYgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG4gXHRcdFx0XHRcdCAgZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRcdFx0ICB0dW5fcHRyX2ZyZWUpO1xuIFxuLVx0aWYgKCFyZXQpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XG4tXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuLVx0XHRcdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuLVx0XHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuLVx0XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRrZnJlZShyaW5ncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0zODA4LDI5ICszNzM0LDYgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4gXG4tLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4tdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuLXtcbi1cdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4tXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuLVxuLVx0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZ0dW5fZm9wcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdGlmICghdGZpbGUpXG4tXHRcdHJldHVybjtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHR1biA9IHJjdV9kZXJlZmVyZW5jZSh0ZmlsZS1cdTAwM2V0dW4pO1xuLVx0aWYgKHR1bilcbi1cdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG4tXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwodHVuX3dha2VfcXVldWUpO1xuLVxuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcbiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDNlNzJiOWM2YWYwY2EuLjY5NDliNzA0MTY2ZDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5AQCAtMTc2LDIxICsxNzYsMTMgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxuLVx0XHRcdFx0IHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiB7XG4tXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmaWxlO1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRyeHEtXHUwMDNlaGVhZCA9IDA7XG4tXHRzcGluX2xvY2soXHUwMDI2bnZxLVx1MDAzZXJ4X3JpbmctXHUwMDNlY29uc3VtZXJfbG9jayk7XG4tXHRyeHEtXHUwMDNldGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cdTAwM2VyeF9yaW5nLCByeHEtXHUwMDNlcXVldWUsXG4tXHRcdFx0XHRcdCAgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xuLVxuLVx0aWYgKHJ4cS1cdTAwM2V0YWlsKVxuLVx0XHR0dW5fd2FrZV9xdWV1ZShmaWxlLCByeHEtXHUwMDNldGFpbCk7XG4tXG4tXHRzcGluX3VubG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbitcdHJ4cS1cdTAwM2V0YWlsID0gcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cdTAwM2VyeF9yaW5nLCByeHEtXHUwMDNlcXVldWUsXG4rXHRcdFx0XHRcdCAgICAgIFZIT1NUX05FVF9CQVRDSCk7XG4gXHRyZXR1cm4gcnhxLVx1MDAzZXRhaWw7XG4gfVxuIFxuQEAgLTIxNywxNSArMjA5LDE0IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXG4gXHRyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuK3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcbitcdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKG52cSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIG91dDpcbkBAIC0xMDEzLDcgKzEwMDQsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmIChydnEtXHUwMDNlcnhfcmluZylcbi1cdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhzaywgcnZxKTtcbitcdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhydnEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gXHRoZWFkID0gc2tiX3BlZWsoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbmluZGV4IDVmM2UyMDZjN2E3MzcuLjgwMTY2ZWI2MmY0MWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5AQCAtMjIsNyArMjIsNiBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwge1xuICNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XG4gc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpO1xuLXZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxuIHtcbkBAIC01Niw4ICs1NSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmYpXG4gXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XG4tXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbmluZGV4IGM5NWU4OTE5MDNmMDUuLmQyYzM2MjliYmU0NTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuQEAgLTk2LDIwICs5Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuLSAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4te1xuLVx0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuICAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBwb2ludGVyIHRoYXQgaXMgYmVpbmcgcXVldWVkXG5AQCAtMTE3LDEwICsxMDMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbiB7XG4tXHRpbnQgcCA9IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShyKTtcbi1cbi1cdGlmIChwKVxuLVx0XHRyZXR1cm4gcDtcbitcdGlmICh1bmxpa2VseSghci1cdTAwM2VzaXplKSB8fCBkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0LyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM1OjQ3Ljk3NzUxNjM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU5NzQ2OTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpcyBnb2luZyBhZnRlciBzb21lIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBUVU4gYW5kIHZob3N0IHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIGFuZCByZWxldmFudCBoZWFkZXIgZmlsZXMgKGBpbmNsdWRlL2xpbnV4L2lmX3R1bi5oYCwgYGluY2x1ZGUvbGludXgvcHRyX3JpbmcuaGApLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBwb3RlbnRpYWxseSBzaWduaWZpY2FudCwgc2luY2UgdGhlc2UgYXJlIGxvdy1sZXZlbCBjb21wb25lbnRzIGFuZCBhbnkgY2hhbmdlIGhlcmUgY291bGQgaGF2ZSBmYXItcmVhY2hpbmcgZWZmZWN0cywgc28gbGV0J3MgZGlnIGRlZXBlci5cblxuRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgc2VlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgY29uc19jbnRgIGZyb20gYHN0cnVjdCB0dW5fZmlsZWAsIHNpbXBsaWZ5aW5nIGB0dW5fbmV0X3htaXRgLCBhbmQgZ2V0dGluZyByaWQgb2Ygc29tZSB3YWtpbmcgZnVuY3Rpb25zOiBgX190dW5fd2FrZV9xdWV1ZWAsIGB0dW5fcmluZ19jb25zdW1lYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAuICBBbHNvLCBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBiZWluZyBhZGp1c3RlZCBzbyBpdCBubyBsb25nZXIgY2FsbHMgYHR1bl93YWtlX3F1ZXVlYCwgYW5kIGBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2VgIGlzIGdvbmUgZnJvbSBgaW5jbHVkZS9saW51eC9wdHJfcmluZy5oYC4gVGhpcyBpcyBhbGwgaW5kaWNhdGl2ZSBvZiBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCByZW1vdmluZyBleHBsaWNpdCBxdWV1ZSB3YWtpbmcgbG9naWMsIHByb2JhYmx5IHNpbXBsaWZ5aW5nIHRoZSByaW5nIGNvbnN1bXB0aW9uLiBUaGF0IG1lYW5zIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb25hbCByZWdyZXNzaW9ucyByZWxhdGVkIHRvIHF1ZXVlIG1hbmFnZW1lbnQsIGFzIHdlbGwgYXMgaWYgd2UgaGF2ZSBlbGltaW5hdGVkIGFueSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgd2l0aCB0aG9zZSBjaGFuZ2VzLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgcmVhY2hhYmxlIGdpdmVuIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlcmUgVFVOL1RBUCBhbmQgdmhvc3QtbmV0IGFyZSBoZWF2aWx5IHJlbGllZCB1cG9uIHdpdGhpbiBRRU1VL0tWTS5cblxuTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1RVTmAgYW5kIGBDT05GSUdfVkhPU1RfTkVUYCBhcmUgc2V0IGNvcnJlY3RseS5cblxuT2theSwgbGV0J3Mgc2VhcmNoIGZvciB0aG9zZSBzeW1ib2xzIGluIHRoZSBLY29uZmlnLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zIGFyZSBhbHJlYWR5IHdlbGwtZGVmaW5lZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNTo1NC41NzQ5ODg0OTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjUyODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUVU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00MTU9Y29uZmlnIFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MjE6Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY3Jvc3MtZW5kaWFuIHZuZXQgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIGtlcm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM1OjU0LjY4MDI1MDQyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODcyNzQyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFZpcnR1YWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHplcm8gaW4gb24gdGhpcyBgQ09ORklHX1ZIT1NUX05FVGAgc2V0dGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBDbGVhcmx5LCBpdCdzIHNvbWV0aGluZyBmdW5kYW1lbnRhbCB0byB0aGUgdmlydHVhbCBob3N0aW5nLCBzcGVjaWZpY2FsbHkgdGhlIG5ldHdvcmtpbmcgYXNwZWN0LiBBcyBhbiBleHBlcnQsIEknbSB3ZWxsIGF3YXJlIG9mIGhvdyB2aXJ0dWFsIGhvc3RzIHdvcmsuIFNvLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsaXplZCBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIG1heWJlIGl0J3MgdGhlIGNvcmUuIElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlIGxvb2tpbmc/IFVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NTcuNDY3NTI3MDQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDQzMDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NTcuNTEyNTc4ODU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NjUxNzYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBWSE9TVF9NRU5VYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZXhhbWluZSB0aGUgYFZIT1NUX01FTlVgIHN0cnVjdHVyZSBvciBjb25maWd1cmF0aW9uLiBUaGlzIHNpZ25hbHMgYSB0YXJnZXRlZCB0cm91Ymxlc2hvb3RpbmcgYXBwcm9hY2gg4oCTIGNsZWFybHkgc29tZXRoaW5nIHdpdGhpbiB0aGUgdmlydHVhbCBob3N0IGNvbmZpZ3VyYXRpb24gaXRzZWxmIGlzIHN1c3BlY3RlZCBhcyB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSdtIHdvcmtpbmcgb24uIFRoZSBwcmVzZW5jZSBvZiBhIG1lbnUgc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IG9yIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIHJlbGF0ZWQgdG8gdmlydHVhbCBob3N0cywgbGlrZWx5IHdpdGhpbiBhIHdlYiBzZXJ2ZXIgb3IgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuIEl0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpc3N1ZXMgaGVyZSBjYW4gcXVpY2tseSBjYXNjYWRlIGludG8gd2lkZXNwcmVhZCBwcm9ibGVtcyBpZiBhIHZpcnR1YWwgaG9zdCBpc24ndCBjb25maWd1cmVkIGNvcnJlY3RseSwgaXNuJ3QgbG9hZGluZywgb3IgaXMgbWlzaW50ZXJwcmV0aW5nIHJlcXVlc3RzLiBJdCdzIHRoZSBwb2ludCBvZiBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGdlbmVyYWwgc2VydmVyIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBpbmRpdmlkdWFsIHZpcnR1YWwgaW5zdGFuY2VzLiBUaGUgaW1wbGljYXRpb24gaXMgSSd2ZSBhbHJlYWR5IG1vdmVkIHBhc3QgYnJvYWRlciBkaWFnbm9zdGljcyBhbmQgYW0gaG9taW5nIGluIG9uIHRoZSBzcGVjaWZpYyB2aXJ0dWFsIGhvc3Qgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjowMC44NjkwOTkyNjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NzczNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX01FTlVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0yMD1jb25maWcgVkhPU1RcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjg6bWVudWNvbmZpZyBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIlZIT1NUIGRyaXZlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjAwLjkxNzY4NTgyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDc5NzMxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBFeHBsb3JhdGlvbiBvZiBUVU4gYW5kIFZIT1NUX05FVCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYFRVTmAgYW5kIGBWSE9TVF9ORVRgIGNvbmZpZ3VyYXRpb25zLCBhbmQgbXkgaW5pdGlhbCBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvdHVuLmNgLCBJJ3ZlIGdvdCBteSBleWUgb24gdGhlc2U6IGB0dW5fbmV0X3htaXRgLCBgdHVuX3B1dF91c2VyYCwgYHR1bl9kb19yZWFkYCwgYHR1bl9xdWV1ZV9yZXNpemVgLCBhbmQgYHR1bl9nZXRfdHhfcmluZ2AuIFxuXG5UaGVuLCBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRoZSBvbmVzIHRoYXQgbG9vayByZWxldmFudCBhcmUgYHZob3N0X25ldF9idWZfcHJvZHVjZWAsIGB2aG9zdF9uZXRfYnVmX3BlZWtgLCBhbmQgYHBlZWtfaGVhZF9sZW5gLiBOb3csIGxldCdzIGp1c3QgY29uZmlybSBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIGlmIHRoZXkncmUgZXhwb3J0ZWQuIE9rYXksIGl0IGxvb2tzIGxpa2UgYHR1bl9uZXRfeG1pdGAgaXMgc3RhdGljLCBidXQgaW50ZXJlc3RpbmcsIGl0J3MgYXNzaWduZWQgdG8gYG5ldGRldl9vcHMtXHUwMDNlbmRvX3N0YXJ0X3htaXRgLiBgdHVuX3B1dF91c2VyYCwgYHR1bl9kb19yZWFkYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYCBhcmUgYWxzbyBzdGF0aWMuIGB0dW5fZ2V0X3R4X3JpbmdgIGlzIGV4cG9ydGVkLCB0aGF0J3MgaW1wb3J0YW50LiBcblxuSSdsbCBqdXN0IGNoZWNrIGB0dW5fY2hyX3JlYWRfaXRlcmAgc2luY2UgaXQgY2FsbHMgYHR1bl9kb19yZWFkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjowNy43NjU2NjI4ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDMxMzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9jaHJfcmVhZF9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTIxNjA9c3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjE5NzpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuZHJpdmVycy9uZXQvdHVuLmMtMjE5OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNDY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzAtXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25ldC90dW4uYzozNDcxOlxcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3Mi1cXHQud3JpdGVfaXRlciA9IHR1bl9jaHJfd3JpdGVfaXRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6MDcuODYwNzAxOTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjE1OTQyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipGb2N1c2luZyBJbiBvbiBOZXR3b3JrIFRyYW5zbWlzc2lvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBoZXJlLiBgdHVuX2Nocl9yZWFkX2l0ZXJgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gc3RhcnQgd2l0aC4gQnV0LCB3YWl0Li4uIHdoYXQgYWJvdXQgYHR1bl9uZXRfeG1pdGA/IEFoLCB5ZXMsIGl0J3MgdGllZCB0byBgbmRvX3N0YXJ0X3htaXRgISBUaGF0IGZlZWxzIG1vcmUgZGlyZWN0LCBhbmQgc2ltcGxlciB0byBmb2xsb3cuIExldCdzIGp1c3QgdXNlIGB0dW5fbmV0X3htaXRgIGZvciBub3cuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHZob3N0X25ldF9idWZfcHJvZHVjZWAgYW5kIGB2aG9zdF9uZXRfYnVmX3BlZWtgLiBUaG9zZSBhcmUgYm90aCBzdGF0aWMgZnVuY3Rpb25zLCBzbyB0aGVpciBzY29wZSBpcyBtb3JlIGxpbWl0ZWQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgaW52b2tlZC4gTGV0J3MgZ28gYW5kIHNlZSB3aGVyZSB0aGV5J3JlIGNhbGxlZCBmcm9tLiBUaGF0IHNob3VsZCBnaXZlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjoxMS43MjIyOTg4MjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjgzNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9idWZfcGVla1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTg5PXN0YXRpYyB2b2lkIHZob3N0X25ldF9idWZfdW5wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIwMC1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjIwMTpzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjAyLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjExLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjEyOnN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuZHJpdmVycy92aG9zdC9uZXQuYy0yMTMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0yMjItb3V0OlxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjIzOlxcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZob3N0X25ldF9idWZfZ2V0X3B0cihyeHEpKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyNC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTEwMDA9c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAwNi1cXHRpZiAocnZxLVxcdTAwM2VyeF9yaW5nKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAwNzpcXHRcXHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDA4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjoxMS43Njc1OTA1NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NDUxNzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBwZWVrX2hlYWRfbGVuYCoqXG5cbk9rYXksIHNvIGBwZWVrX2hlYWRfbGVuYC4uLiB0aGF0J3MgYSBzdGF0aWMgdmFsdWUsIHJpZ2h0PyBJdCdzIG5vdCBzb21ldGhpbmcgdGhhdCBjaGFuZ2VzIGR5bmFtaWNhbGx5LiBBbHJpZ2h0LCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGEgY29uZmlndXJhdGlvbiB2YWx1ZSwgYSBjb25zdGFudCB1c2VkIHNvbWV3aGVyZSBkZWVwIGluIHRoZSBsb2dpYy5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiB3aGVyZSB0aGUgKmhlbGwqIGlzIHRoaXMgdGhpbmcgYmVpbmcgdXNlZD8gSXQncyBzdGF0aWNhbGx5IGRlZmluZWQsIGJ1dCB1bmRlcnN0YW5kaW5nIGl0cyBjb250ZXh0IGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzLiBJcyBpdCB1c2VkIGluIGp1c3Qgb25lIHBsYWNlLCBvciBpcyBpdCBzY2F0dGVyZWQgdGhyb3VnaG91dCB0aGUgY29kZSBiYXNlPyBUaGlzIHdpbGwgZGljdGF0ZSB3aGV0aGVyIGl0IGlzIGEgZ2xvYmFsIHBhcmFtZXRlciBvciBzcGVjaWZpYyB0byBhIHN1Yi1yb3V0aW5lIG9mIHRoZSBwcm9ncmFtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29kZSBwYXRocyB0aGF0ICpkZXBlbmQqIG9uIHRoaXMgYHBlZWtfaGVhZF9sZW5gIHZhbHVlIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYW55IG1vZGlmaWNhdGlvbnMgYW5kIGl0cyBvdmVyYWxsIHB1cnBvc2UuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29kZSBwYXRocyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjE2LjA1MjExMDI4NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0NzAzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVla19oZWFkX2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9OTc0PXN0YXRpYyB2b2lkIGhhbmRsZV90eChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTk5OS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDA6c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMDEte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDIwLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAyMTpzdGF0aWMgaW50IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAyMi1cXHRcXHRcXHRcXHQgICAgICBib29sICpidXN5bG9vcF9pbnRyLCB1bnNpZ25lZCBpbnQgKmNvdW50KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDI3LVxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR2cSA9IFxcdTAwMjZ0bnZxLVxcdTAwM2V2cTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMjg6XFx0aW50IGxlbiA9IHBlZWtfaGVhZF9sZW4ocm52cSwgc2spO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAyOS1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzNi1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMzc6XFx0XFx0bGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM4LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTE0MD1zdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHZob3N0X25ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMTkyLVxcdGRvIHtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjExOTM6XFx0XFx0c29ja19sZW4gPSB2aG9zdF9uZXRfcnhfcGVla19oZWFkX2xlbihuZXQsIHNvY2stXFx1MDAzZXNrLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTE5NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YnVzeWxvb3BfaW50ciwgXFx1MDAyNmNvdW50KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6MTYuMTM5NTg2NjUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDExNTYwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUnggQ2FsbCBDaGFpbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaGFuZGxlX3J4YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIHBhcnQgb2YgdGhlIHJlY2VpdmUgcGF0aCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiAgVGhlIGNhbGwgc3RhY2sgcHJlc2VudGVkIGlzIGEgbGl0dGxlIGNpcmN1bGFyOiBgaGFuZGxlX3J4YCBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW5gLCB3aGljaCBpbiB0dXJuLCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYGhhbmRsZV9yeGAuIFRoYXQncyBhIGJpdCBvZGQgLSBzZWVtcyBsaWtlIHNvbWV0aGluZyBtaWdodCBiZSBuZXN0ZWQuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYGhhbmRsZV9yeGAgaXMgcHJvYmFibHkgYSB3b3JrcXVldWUgZnVuY3Rpb24gb3Igc29tZSBhc3luY2hyb25vdXMgZXhlY3V0aW9uIG1lY2hhbmlzbS4gSXQgbmVlZHMgdG8gYmUsIGdpdmVuIHRoZSBjYWxsIHN0cnVjdHVyZS4gSXQgc2VlbXMgbGlrZSBpdCdzIHByb2JhYmx5IHJ1bm5pbmcgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgaGVuY2UgdGhlIHJlY3Vyc2l2ZSBkZXNpZ24uIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLCBidXQgSSdtIHJlYXNvbmFibHkgc3VyZSBpdCBpcyBhIHdvcmtxdWV1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjE5LjU4MDc0NTU4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDc0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3J4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0xMDUzPXN0YXRpYyBpbnQgZ2V0X3J4X2J1ZnMoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTEzOS0gKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqL1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTE0MDpzdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHZob3N0X25ldCAqbmV0KVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTE0MS17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTEyOTc9c3RhdGljIHZvaWQgaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMDUtXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxMzA2OnN0YXRpYyB2b2lkIGhhbmRsZV9yeF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMwNy17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMTEtXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxMzEyOlxcdGhhbmRsZV9yeChuZXQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMxMy19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTEzMTU9c3RhdGljIHZvaWQgaGFuZGxlX3R4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMyMS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzMjI6c3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMjMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzI1LVxcdFxcdFxcdFxcdFxcdCAgICAgcG9sbFtWSE9TVF9ORVRfVlFfUlhdLndvcmspO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMyNjpcXHRoYW5kbGVfcngobmV0KTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMjctfVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xMzI5PXN0YXRpYyBpbnQgdmhvc3RfbmV0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzNjgtXFx0bi1cXHUwMDNldnFzW1ZIT1NUX05FVF9WUV9UWF0udnEuaGFuZGxlX2tpY2sgPSBoYW5kbGVfdHhfa2ljaztcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzNjk6XFx0bi1cXHUwMDNldnFzW1ZIT1NUX05FVF9WUV9SWF0udnEuaGFuZGxlX2tpY2sgPSBoYW5kbGVfcnhfa2ljaztcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzNzAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFZIT1NUX05FVF9WUV9NQVg7IGkrKykge1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg3LVxcdFxcdFxcdHZxc1tWSE9TVF9ORVRfVlFfVFhdKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzODg6XFx0dmhvc3RfcG9sbF9pbml0KG4tXFx1MDAzZXBvbGwgKyBWSE9TVF9ORVRfVlFfUlgsIGhhbmRsZV9yeF9uZXQsIEVQT0xMSU4sIGRldixcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzODktXFx0XFx0XFx0dnFzW1ZIT1NUX05FVF9WUV9SWF0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjoxOS42Mjg3OTc2NjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMjAyNjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IEknZCBhcHByb2FjaCB0aGlzIHByb2JsZW06XG5cbioqQW5hbHl6aW5nIEVudHJ5IFBvaW50cyBhbmQgUG90ZW50aWFsIEFyZWFzIG9mIEludGVyZXN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGhhbmRsZV9yeF9raWNrYCBhbmQgYGhhbmRsZV9yeF9uZXRgLiBJIHNlZSB0aGV5J3JlIHN0YXRpYywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgZW50cnkgcG9pbnRzIHRvIHRoZXNlIGtpbmRzIG9mIGhhbmRsZXJzLiBJdCBtYWtlcyBzZW5zZSwgdGhleSdyZSB0aGUgaW5pdGlhbCBjb250YWN0IHBvaW50cyB3aXRoIHRoZSByZWxldmFudCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbW92ZSBiZXlvbmQgdGhvc2UuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIHRoYXQgY291bGQgYmUgd29ydGggZXhhbWluaW5nPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGZpbmQgaG9va3MgZm9yIHBvdGVudGlhbCBtYW5pcHVsYXRpb24gb3IgZXhwbG9yYXRpb24uXG5cbmB2aG9zdF9uZXRfb3BlbmAgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBuZXh0IHRoaW5nIHRvIGNoZWNrLCBidXQgaXQncyBhbHNvIHN0YXRpYywgYW5kIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gZmlsZSBvcGVuaW5nIG9wZXJhdGlvbnMuIEl04oCZcyBsaWtlbHkgYSBzZXR1cCBmdW5jdGlvbiBidXQgSSdkIGtlZXAgYW4gZXllIG9uIGl0IHRvIGJlIHN1cmUuIE15IGF0dGVudGlvbiBpcyBub3cgb24gYHZob3N0X25ldF9pb2N0bGAuIElPQ1RMIG9wZXJhdGlvbnMgYXJlIG9mdGVuIG1vcmUgZHluYW1pYyBhbmQgZXhwb3NlIGEgbGFyZ2VyIGludGVyZmFjZSB0byB0aGUgdXNlciBhbmQga2VybmVsIHNwYWNlLiBJJ2QgbmVlZCB0byBleGFtaW5lIHdoYXQgcGFyYW1ldGVycyBpdCBleHBlY3RzIGFuZCB3aGVyZSBpdCByb3V0ZXMgdGhlbS4gVGhpcyBJT0NUTCBpcyBzdGFydGluZyB0byBsb29rIHByb21pc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjoyMy45NjA4MjY4MjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzU4NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTcxNz1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3MzctXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxNzM4OnN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTczOS1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzEtXFx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfbmV0X2Nocl9wb2xsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3MjpcXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODczLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjI0LjAwODE5Mjc1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE4NzMwODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE5ldHdvcmsgVnVsbmVyYWJpbGl0aWVzIGluIHRoZSBLZXJuZWwqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB0aGF0IGB2aG9zdF9uZXRfaW9jdGxgIGZ1bmN0aW9u4oCmIHRoYXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyBhcmVhIGZvciBpbnZlc3RpZ2F0aW9uLiBJdCBvZnRlbiBkZWFscyB3aXRoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24sIGFuZCB0aG9zZSBhcmUgYWx3YXlzIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4gTm93LCB3aGF0IGFib3V0IGB0dW5fbmV0X3htaXRgPyBIbW0sIGludGVyZXN0aW5nLiBJdCdzIHN0YXRpYywgc28gdGhhdCAqbGltaXRzKiBpdHMgZGlyZWN0IHZ1bG5lcmFiaWxpdHksIGJ1dCBpdCBjb3VsZCBzdGlsbCBiZSBwYXJ0IG9mIGEgbGFyZ2VyLCBleHBsb2l0YWJsZSBjaGFpbi5cblxuT2theSwgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB0dW4uY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqbm90KiBzdGF0aWMuIEknbGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvZiB0aG9zZSBleHBvc2VkIGZ1bmN0aW9ucyBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIG9yIGNhbGxpbmcgYHR1bl9uZXRfeG1pdGAuIEZpbmRpbmcgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHR1bl9uZXRfeG1pdGAsIG9yIGludGVyYWN0cyB3aXRoIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcywgd291bGQgYmUgYSBtdWNoIG1vcmUgaW50ZXJlc3RpbmcgcG9pbnQgdG8gZm9jdXMgb24sIGFzIGl0IHdvdWxkIGNyZWF0ZSBhIGxvbmdlciBhdHRhY2sgc3VyZmFjZS4gVGhhdCBzaG91bGQgaG9wZWZ1bGx5IHVuY292ZXIgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBleHBvc2VkIHRvIG1hbmlwdWxhdGlvbiBvciBjb21wcm9taXNlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6MjguOTI2OTI2OTE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxMjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTU0Nj12b2lkIHR1bl9wdHJfZnJlZSh2b2lkICpwdHIpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy01NTctfVxcbmRyaXZlcnMvbmV0L3R1bi5jOjU1ODpFWFBPUlRfU1lNQk9MX0dQTCh0dW5fcHRyX2ZyZWUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTU1OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM3MTI9c3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzIxLX1cXG5kcml2ZXJzL25ldC90dW4uYzozNzIyOkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfc29ja2V0KTtcXG5kcml2ZXJzL25ldC90dW4uYy0zNzIzLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM3MjQ9c3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzM0LX1cXG5kcml2ZXJzL25ldC90dW4uYzozNzM1OkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzczNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6MjguOTcxNDQ3MTIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODU5MjMwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKkZvY3VzaW5nIG9uIFRVTiBEZXZpY2UgSW50ZXJhY3Rpb25zKipcblxuUmlnaHQsIHNvIGB0dW5fZ2V0X3R4X3JpbmdgIGlzIGV4cG9zZWQsIHRoYXQncyBpbXBvcnRhbnQsIGJ1dCB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiwgYXQgbGVhc3QgZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcywgYXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIHBvaW50cyB3aXRoIHRoZSBUVU4gZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCBvZiBkYXRhIGZsb3csIHNvIEknbSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGB0dW5fY2hyX3JlYWRfaXRlcmAsIGB0dW5fY2hyX3dyaXRlX2l0ZXJgLCBhbmQgYHR1bl9jaHJfaW9jdGxgLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgZGF0YSBpbmdyZXNzLCBlZ3Jlc3MsIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlLCByaWdodD8gVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIGludGVycm9nYXRlIHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZSBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjozMy43NTczNzM5NzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDExNzI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fY2hyX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTMwMDg9c3RhdGljIHVuc2lnbmVkIGNoYXIgdHVuX2dldF9hZGRyX2xlbih1bnNpZ25lZCBzaG9ydCB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA0NS1cXG5kcml2ZXJzL25ldC90dW4uYzozMDQ2OnN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL25ldC90dW4uYy0zMDQ3LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxMjItXFxuZHJpdmVycy9uZXQvdHVuLmM6MzEyMzpcXHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXFx1MDAzZWRldiwgXFxcInR1bl9jaHJfaW9jdGwgY21kICV1XFxcXG5cXFwiLCBjbWQpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMxMjQtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMzM5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMzNDA6c3RhdGljIGxvbmcgdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5kcml2ZXJzL25ldC90dW4uYy0zMzQxLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzM0Mi17XFxuZHJpdmVycy9uZXQvdHVuLmM6MzM0MzpcXHRyZXR1cm4gX190dW5fY2hyX2lvY3RsKGZpbGUsIGNtZCwgYXJnLCBzaXplb2YgKHN0cnVjdCBpZnJlcSkpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNDQtfVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzM0Nz1zdGF0aWMgbG9uZyB0dW5fY2hyX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzAtXFx0ICovXFxuZHJpdmVycy9uZXQvdHVuLmM6MzM3MTpcXHRyZXR1cm4gX190dW5fY2hyX2lvY3RsKGZpbGUsIGNtZCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9pZnJlcSkpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzItfVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzQ2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dW5fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzMtXFx0LnBvbGxcXHQ9IHR1bl9jaHJfcG9sbCxcXG5kcml2ZXJzL25ldC90dW4uYzozNDc0OlxcdC51bmxvY2tlZF9pb2N0bFxcdD0gdHVuX2Nocl9pb2N0bCxcXG5kcml2ZXJzL25ldC90dW4uYy0zNDc1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjMzLjkyMTQ5NTQ4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzM1MzQ0NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOL1RBUCBEcml2ZXIgYW5kIFJpbmcgQnVmZmVyIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGlzIGB0dW5fbmV0X3htaXRgIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCdzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBzb2xpZCBvbiB0aGUgY2FsbGluZyBjb250ZXh0cyBoZXJlLiBTbywgaXMgdGhlcmUgYW55dGhpbmcgKm91dHNpZGUqIHRoZSBuZXR3b3JrIHN0YWNrIGl0c2VsZiB0aGF0J3MgY2FsbGluZyB0aGlzPyBOb3BlLCBsb29rcyBsaWtlIGl0J3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBHb29kLiBUaGF0IG5hcnJvd3MgZG93biBteSBmb2N1cy5cblxuTm93LCBJJ2xsIGhvbmUgaW4gb24gdGhlIGNoYXJhY3RlciBkZXZpY2UgZW50cnkgcG9pbnRzOiBgdHVuX2Nocl9yZWFkX2l0ZXJgIGFuZCBgdHVuX2Nocl93cml0ZV9pdGVyYC4gVGhvc2UgYXJlIGtleS4gQW5kIGRvbid0IGZvcmdldCBgdmhvc3RfbmV0X2lvY3RsYCBhbmQgYHZob3N0X25ldF9vcGVuYCDigJMgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhvc2UgYXMgd2VsbCwgZ2l2ZW4gdGhlaXIgcmVsYXRpb25zaGlwIHRvIHZob3N0LlxuXG5BaGEsIGhvbGQgb24gYSBzZWMuIFRoaXMgcGF0Y2ggaXMgdGFraW5nIG91dCBgX19wdHJfcmluZ19jaGVja19wcm9kdWNlYCBhbmQgdGhlbiBjaGFuZ2luZyBgX19wdHJfcmluZ19wcm9kdWNlYCBpbiBgaW5jbHVkZS9saW51eC9wdHJfcmluZy5oYC4gVGhhdCdzIGEgY29yZSBoZWFkZXIuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgY2hhbmdlcyB0byBhIGZ1bmRhbWVudGFsIGxvdy1sZXZlbCBkYXRhIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGJlICp2ZXJ5KiBjYXJlZnVsIGhlcmUuIE9rYXksIGxldCdzIGZpbmQgb3V0IHdoZXJlIGVsc2UgdGhpcyBgX19wdHJfcmluZ19wcm9kdWNlYCBpcyB1c2VkLiBUaW1lIHRvIHNlZSB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHRvdWNoaW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzM4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjQyLjI1Njg0NTEwOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NTIyNjQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3B0cl9yaW5nX3Byb2R1Y2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTEyMDQ9c3RhdGljIGludCB0dW5feGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMjM3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyMzg6XFx0XFx0aWYgKF9fcHRyX3JpbmdfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcsIGZyYW1lKSkge1xcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMzktXFx0XFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz01MDM9c3RhdGljIGludCB2ZXRoX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTUzNi1cXHRcXHRpZiAodW5saWtlbHkoeGRwX2dldF9mcmFtZV9sZW4oZnJhbWUpIFxcdTAwM2UgbWF4X2xlbiB8fFxcbmRyaXZlcnMvbmV0L3ZldGguYzo1Mzc6XFx0XFx0XFx0ICAgICBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnJxLVxcdTAwM2V4ZHBfcmluZywgcHRyKSkpXFxuZHJpdmVycy9uZXQvdmV0aC5jLTUzOC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM9NTQyPXZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTU1NS1cXHRcXHRcXHRpZiAoc3Bpbl90cnlsb2NrX2JoKFxcdTAwMjZ3Zy1cXHUwMDNlaGFuZHNoYWtlX3F1ZXVlLnJpbmcucHJvZHVjZXJfbG9jaykpIHtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jOjU1NjpcXHRcXHRcXHRcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNndnLVxcdTAwM2VoYW5kc2hha2VfcXVldWUucmluZywgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTU1Ny1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2d2ctXFx1MDAzZWhhbmRzaGFrZV9xdWV1ZS5yaW5nLnByb2R1Y2VyX2xvY2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTg4PXN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xMDMtICovXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oOjEwNDpzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTEwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9MTI0PXN0YXRpYyBpbmxpbmUgaW50IHB0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTI4LVxcdHNwaW5fbG9jayhcXHUwMDI2ci1cXHUwMDNlcHJvZHVjZXJfbG9jayk7XFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oOjEyOTpcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UociwgcHRyKTtcXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTMwLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZyLVxcdTAwM2Vwcm9kdWNlcl9sb2NrKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaD0xMzU9c3RhdGljIGlubGluZSBpbnQgcHRyX3JpbmdfcHJvZHVjZV9pcnEoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTM5LVxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnItXFx1MDAzZXByb2R1Y2VyX2xvY2spO1xcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaDoxNDA6XFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE0MS1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnItXFx1MDAzZXByb2R1Y2VyX2xvY2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTE0Nj1zdGF0aWMgaW5saW5lIGludCBwdHJfcmluZ19wcm9kdWNlX2FueShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xNTEtXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnItXFx1MDAzZXByb2R1Y2VyX2xvY2ssIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTUyOlxcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShyLCBwdHIpO1xcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xNTMtXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ci1cXHUwMDNlcHJvZHVjZXJfbG9jaywgZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTE1OD1zdGF0aWMgaW5saW5lIGludCBwdHJfcmluZ19wcm9kdWNlX2JoKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE2Mi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnItXFx1MDAzZXByb2R1Y2VyX2xvY2spO1xcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaDoxNjM6XFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE2NC1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2ci1cXHUwMDNlcHJvZHVjZXJfbG9jayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9MzAxPXN0YXRpYyBpbmxpbmUgdm9pZCAqX19wdHJfcmluZ19jb25zdW1lKHN0cnVjdCBwdHJfcmluZyAqcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0zMDYtXFx0ICogYWNjZXNzaW5nIGRhdGEgdGhyb3VnaCB0aGUgcG9pbnRlciBpcyB1cCB0byBkYXRlLiBQYWlyc1xcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaDozMDc6XFx0ICogd2l0aCBzbXBfd21iIGluIF9fcHRyX3JpbmdfcHJvZHVjZS5cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMzA4LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz03MjM9c3RhdGljIHZvaWQgYnFfZmx1c2hfdG9fcXVldWUoc3RydWN0IHhkcF9idWxrX3F1ZXVlICpicSlcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtNzQyLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM6NzQzOlxcdFxcdGVyciA9IF9fcHRyX3JpbmdfcHJvZHVjZShxLCB4ZHBmKTtcXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTc0NC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz03ODM9c3RhdGljIGJvb2wgcGFnZV9wb29sX3JlY3ljbGVfaW5fcmluZyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSlcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTc4OC1cXHRpbl9zb2Z0aXJxID0gcGFnZV9wb29sX3Byb2R1Y2VyX2xvY2socG9vbCk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Nzg5OlxcdHJldCA9ICFfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnBvb2wtXFx1MDAzZXJpbmcsIChfX2ZvcmNlIHZvaWQgKiluZXRtZW0pO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTc5MC1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9OTI2PXN0YXRpYyB2b2lkIHBhZ2VfcG9vbF9yZWN5Y2xlX3JpbmdfYnVsayhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTM2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBidWxrX2xlbjsgaSsrKSB7XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6OTM3OlxcdFxcdGlmIChfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnBvb2wtXFx1MDAzZXJpbmcsIChfX2ZvcmNlIHZvaWQgKilidWxrW2ldKSkge1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTkzOC1cXHRcXHRcXHQvKiByaW5nIGZ1bGwgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VfZnJhZy9wYWdlX2ZyYWdfdGVzdC5jPTc3PXN0YXRpYyBpbnQgcGFnZV9mcmFnX3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VfZnJhZy9wYWdlX2ZyYWdfdGVzdC5jLTEwMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYzoxMDM6XFx0XFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHJpbmcsIHZhKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYy0xMDQtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmM9MTI4PWludCBhZGRfaW5idWYodW5zaWduZWQgbGVuLCB2b2lkICpidWYsIHZvaWQgKmRhdGFwKVxcbi0tXFxudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmMtMTMxLVxcbnRvb2xzL3ZpcnRpby9yaW5ndGVzdC9wdHJfcmluZy5jOjEzMjpcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNmFycmF5LCBidWYpO1xcbnRvb2xzL3ZpcnRpby9yaW5ndGVzdC9wdHJfcmluZy5jLTEzMy1cXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6NDQuNzEyMDc3MjQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDMxOTY4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU2ltcGxpZnlpbmcgdGhlIFRVTiBEZXZpY2UgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFpbXMgdG8gc3RyZWFtbGluZSB0aGUgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24uIEl0J3MgcmVhbGx5IGp1c3QgYSBtYXR0ZXIgb2YgaW1wcm92aW5nIHRoZSBjb3JlIGRhdGEgZmxvdywgbWFraW5nIHRoaW5ncyBhIGJpdCBjbGVhcmVyIGFuZCBtb3JlIGVmZmljaWVudC4gVGhlIGtleSBjaGFuZ2UgaXMgc3dhcHBpbmcgb3V0IHRoZSBgX19wdHJfcmluZ19wcm9kdWNlYCBhbmQgYF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZWAgY2FsbHMgd2l0aCBhIHNpbXBsZXIgYHB0cl9yaW5nX3Byb2R1Y2VgLiBJdCdzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGltcHJvdmVtZW50LCByZWR1Y2luZyBzb21lIG9mIHRoZSBjb21wbGV4aXR5IGluIHRoYXQgZnVuY3Rpb24uXG5cbkFkZGl0aW9uYWxseSwgSSBzZWUgaXQncyBhbHNvIHJlbW92aW5nIHRoZSBgdHVuX3dha2VfcXVldWVgIGFuZCBgX190dW5fd2FrZV9xdWV1ZWAgZnVuY3Rpb25zLiBBZ2FpbiwgcHJvYmFibHkgYSBjb25zb2xpZGF0aW9uIG9yIHJlZHVuZGFuY3kgYmVpbmcgYWRkcmVzc2VkLiBGdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgaW1wcm92ZW1lbnQsIG5vIG1ham9yIGNoYW5nZXMgdG8gdGhlIGV4dGVybmFsIGludGVyZmFjZS5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoaXMgaXMgcHJvcGVybHkgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGUgY29uZmlncyBpbnZvbHZlZC4gSSBzZWUgdGhpcyByZWxpZXMgb24gYFRVTmAgYW5kIGBWSE9TVF9ORVRgLiBCZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFRVTmAgZG9lc24ndCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLiBHb3R0YSBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBHb3R0YSBrZWVwIHRoYXQgY29uZmlnIGh5Z2llbmUgdXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTkxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6NDkuMjE1Mjc3MjcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU0NzEwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRVTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6NDkuMzMwNzU2NDMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzc2MzIyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYmV0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM5MS4gSSdtIGd1ZXNzaW5nIHRoYXQgYXJlYSBwcm9iYWJseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgc2V0IG9mIGZlYXR1cmVzIG9yIG9wdGlvbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSBtYWRlLCBzbyBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaXNzZWN0IGhvdyBhIHBhcnRpY3VsYXIgYXNwZWN0IGlzIGltcGxlbWVudGVkLiBCeSBsb29raW5nIGF0IHRoZSBLY29uZmlnIGZpbGUsIEkgY2FuIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCB0cmlzdGF0ZSBvcHRpb25zIHJlbGV2YW50IHRvIHRoaXMgc3BlY2lmaWMgYXJlYSBvZiB0aGUgbmV0d29yayBkcml2ZXIsIHdoaWNoIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZGVzaWduLiBJIGV4cGVjdCB0byBzZWUgY29uZGl0aW9uYWxzIGFuZCBvcHRpb24gY2hvaWNlcyB0aGF0IGRpY3RhdGUgd2hpY2ggc3BlY2lmaWMgbmV0d29yayBjYXJkIHR5cGVzIG9yIGZlYXR1cmVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBpbiB0ZXJtcyBvZiB1c2VyLXNlbGVjdGFibGUgbmV0d29yayBmdW5jdGlvbmFsaXR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjUzLjI2ODM5MjY4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAzNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODU6XFx0XFxuIDM4NjpcXHRjb25maWcgUklPTkVUX1JYX1NJWkVcXG4gMzg3OlxcdFxcdGludCBcXFwiTnVtYmVyIG9mIGluYm91bmQgcXVldWUgZW50cmllc1xcXCJcXG4gMzg4OlxcdFxcdGRlcGVuZHMgb24gUklPTkVUXFxuIDM4OTpcXHRcXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuIDM5MDpcXHRcXG4gMzkxOlxcdGNvbmZpZyBUVU5cXG4gMzkyOlxcdFxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcXFwiXFxuIDM5MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMzk0OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAzOTU6XFx0XFx0aGVscFxcbiAzOTY6XFx0XFx0ICBUVU4vVEFQIHByb3ZpZGVzIHBhY2tldCByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbiBmb3IgdXNlciBzcGFjZVxcbiAzOTc6XFx0XFx0ICBwcm9ncmFtcy4gIEl0IGNhbiBiZSB2aWV3ZWQgYXMgYSBzaW1wbGUgUG9pbnQtdG8tUG9pbnQgb3IgRXRoZXJuZXRcXG4gMzk4OlxcdFxcdCAgZGV2aWNlLCB3aGljaCBpbnN0ZWFkIG9mIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gYSBwaHlzaWNhbCBtZWRpYSxcXG4gMzk5OlxcdFxcdCAgcmVjZWl2ZXMgdGhlbSBmcm9tIHVzZXIgc3BhY2UgcHJvZ3JhbSBhbmQgaW5zdGVhZCBvZiBzZW5kaW5nIHBhY2tldHNcXG4gNDAwOlxcdFxcdCAgdmlhIHBoeXNpY2FsIG1lZGlhIHdyaXRlcyB0aGVtIHRvIHRoZSB1c2VyIHNwYWNlIHByb2dyYW0uXFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdCAgV2hlbiBhIHByb2dyYW0gb3BlbnMgL2Rldi9uZXQvdHVuLCBkcml2ZXIgY3JlYXRlcyBhbmQgcmVnaXN0ZXJzXFxuIDQwMzpcXHRcXHQgIGNvcnJlc3BvbmRpbmcgbmV0IGRldmljZSB0dW5YIG9yIHRhcFguICBBZnRlciBhIHByb2dyYW0gY2xvc2VkIGFib3ZlXFxuIDQwNDpcXHRcXHQgIGRldmljZXMsIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIHR1blhYIG9yIHRhcFhYIGRldmljZSBhbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6NTMuMjY4NTI1NDg1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTI0NDMzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIGBUVU5gIGlzIGRlZmluaXRlbHkgcmVsaWFudCBvbiBgSU5FVGAuIFRoYXQgbXVjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSBuZWVkIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYFZIT1NUX05FVGAgZml0cyBpbnRvIHRoaXMgd2hvbGUgYXJjaGl0ZWN0dXJlLiBMZXQgbWUgZGlnIGludG8gaXRzIGRlcGVuZGVuY2llcyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIG9yIGlmIGl0IGhhcyBhbnl0aGluZyB1bmV4cGVjdGVkIHRvIGNvbnRyaWJ1dGUgdG8gdGhlIG1peC4gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBpcyBrZXkgdG8gYSByb2J1c3QgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjU2LjU4MDk3MTYyN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzE6XFx0XFxuICAzMjpcXHRpZiBWSE9TVF9NRU5VXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBWSE9TVF9ORVRcXG4gIDM1OlxcdFxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgKFRVTiB8fCAhVFVOKSBcXHUwMDI2XFx1MDAyNiAoVEFQIHx8ICFUQVApXFxuICAzNzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNDA6XFx0XFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxcbiAgNDE6XFx0XFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICA0NDpcXHRcXHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBWSE9TVF9TQ1NJXFxuICA0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNDk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjU2LjU4MTA3NzcxN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE0Nzg5MDY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTW9kdWxlIFN5bWJvbCBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgbW9kdWxlcyBhbmQgZmlndXJpbmcgb3V0IHdoaWNoIHN5bWJvbHMgYXJlIGltcG9ydGFudCwgcGFydGljdWxhcmx5IGZvciBgVkhPU1RfTkVUYC4gIFRoZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGBORVRgLCBgRVZFTlRGRGAsIGFuZCB0aGVuIGEgY2hvaWNlIGJldHdlZW4gYFRVTmAgb3Igbm90IGBUVU5gLCBhbmQgYFRBUGAgb3Igbm90IGBUQVBgLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYFZIT1NUX05FVGAsIHRoZW4gYFRVTmAgbG9va3MgbGlrZSB0aGUgcmlnaHQgY2hvaWNlIGhlcmUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyB0aGVtc2VsdmVzLCBmb2N1c2luZyBvbiB0aGUgaW50ZXJmYWNlIGVudHJ5IHBvaW50cy4gSSdtIGNoZWNraW5nIHRoZSBgdHVuLmNgIGZpbGUgYW5kIEkgc2VlOiBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgLCBhbmQgY3J1Y2lhbGx5LCBgdHVuX25ldF94bWl0YC4gSW4gYG5ldC5jYCwgSSBzcG90OiBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X25ldF9vcGVuYCwgYW5kIGB2aG9zdF9uZXRfcmVsZWFzZWAuXG5cbkkgd2FzIHNsaWdodGx5IGNvbmNlcm5lZCBhYm91dCBgdHVuX25ldF94bWl0YCBiZWluZyBzdGF0aWMsIGJ1dCB0aGF0J3MgYSBrZXkgbmV0d29yayBlbnRyeSBwb2ludC4gUmVtZW1iZXJpbmcgdGhlIGd1aWRlbGluZXMsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBhcmUgcHJlZmVycmVkLCBhcyBzdGF0aWMgZnVuY3Rpb25zIG1pZ2h0IGJlIGlubGluZWQuIEJ1dCB3YWl0LCBgdHVuX25ldF94bWl0YCBpcyBhc3NpZ25lZCB0byBgbmRvX3N0YXJ0X3htaXRgLiBUaGF0IG1lYW5zIGl0J3Mgbm90IGlubGluZWQgYW5kIGl0J3MgYSBjYWxsYmFjazsgZ3JlYXQsIGl0J3MgZmluZSB0byBsaXN0IGl0LiBgdHVuX2Nocl9yZWFkX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGByZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCBpcyBhc3NpZ25lZCB0byBgd3JpdGVfaXRlcmAsIGB0dW5fY2hyX2lvY3RsYCBpcyBhc3NpZ25lZCB0byBgdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCBpcyBhc3NpZ25lZCB0byBgdW5sb2NrZWRfaW9jdGxgIGFuZCBgdmhvc3RfbmV0X29wZW5gIGlzIGFzc2lnbmVkIHRvIGBvcGVuYC4gQWxsIGdvb2QhIFRoZXNlIGxvb2sgbGlrZSB0aGUgY29ycmVjdCBzeW1ib2xzIHRvIGNoZWNrLiAgRmluYWxseSwgYSBxdWljayBjaGVjayB0byBjb25maXJtIGB0dW5fbmV0X3htaXRgIGlzIGFjdHVhbGx5IHRoZXJlLCBidXQgdGhhdCBzaG91bGQgYmUgYSBnaXZlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzowNi43Mjg5NzEwOTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTMzNzk1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fbmV0X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9OTkwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcnVuX2VicGZfZmlsdGVyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMDAyLS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjEwMDM6c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTE4Ny1cXHQubmRvX3N0b3BcXHRcXHQ9IHR1bl9uZXRfY2xvc2UsXFxuZHJpdmVycy9uZXQvdHVuLmM6MTE4ODpcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IHR1bl9uZXRfeG1pdCxcXG5kcml2ZXJzL25ldC90dW4uYy0xMTg5LVxcdC5uZG9fZml4X2ZlYXR1cmVzXFx0PSB0dW5fbmV0X2ZpeF9mZWF0dXJlcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNzEtXFx0Lm5kb19zdG9wXFx0XFx0PSB0dW5fbmV0X2Nsb3NlLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyNzI6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB0dW5fbmV0X3htaXQsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTI3My1cXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM3OjA2LjkzODMxMzc4NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE0NzI1OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgS2VybmVsIE1vZHVsZSBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgYHR1bl9uZXRfeG1pdGAgaXMgaW5kZWVkIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBuZXR3b3JrIGludGVyZmFjZSBtb2R1bGUsIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyZmFjZSBoYW5kbGVzIHRyYWZmaWMsIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoZSBkYXRhIGlzIGJlaW5nIGNvbnN1bWVkLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGB0dW5fY2hyX3JlYWRfaXRlcmAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLCB0byBzZWUgdGhlIGJlaGF2aW9yIHdoZW4gdHJhbnNtaXR0aW5nIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MTAuODUzMDQzOTQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDEwNTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0yMTYwPXN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTk2LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIxOTc6c3RhdGljIHNzaXplX3QgdHVuX2Nocl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzQ2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dW5fZm9wcyA9IHtcXG5kcml2ZXJzL25ldC90dW4uYy0zNDcwLVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ3MTpcXHQucmVhZF9pdGVyICA9IHR1bl9jaHJfcmVhZF9pdGVyLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzItXFx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM3OjEwLjkzNzE1NjA0NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk2NzY1MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIFR1biBEZXZpY2UgSXRlcmF0b3JzKipcblxuQWxyaWdodCwgc28gSSBrbm93IGB0dW5fY2hyX3JlYWRfaXRlcmAgaXMgYSBsZWdpdGltYXRlIGZ1bmN0aW9uLCBubyBwcm9ibGVtIHRoZXJlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiBteSBtZW50YWwgY2hlY2tsaXN0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBleGlzdGVuY2UgYW5kIHBvdGVudGlhbGx5IHRoZSBuYXR1cmUgb2YgaXRzIGNvdW50ZXJwYXJ0LiBJIG5lZWQgdG8gbm93IGNoZWNrIHRoZSBgdHVuX2Nocl93cml0ZV9pdGVyYCBmdW5jdGlvbi4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHdlJ3JlIGludGVyYWN0aW5nIHdpdGggdGhlIFRVTiBkZXZpY2UsIGFuZCB0aGUgd3JpdGUgaXRlcmF0aW9uIG1lY2hhbmlzbSBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoYXQuIEtub3dpbmcgd2hhdCBpdCBkb2VzIGlzIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoxNC45MzM5MjM4ODlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzY2MjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fY2hyX3dyaXRlX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MTY5NT1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE5ODYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTk4NzpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZHJpdmVycy9uZXQvdHVuLmMtMTk4OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNDY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3MS1cXHQucmVhZF9pdGVyICA9IHR1bl9jaHJfcmVhZF9pdGVyLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM0NzI6XFx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3My1cXHQucG9sbFxcdD0gdHVuX2Nocl9wb2xsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoxNS4wMzc1OTEzNzRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNjgxMjQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBgdHVuYCBhbmQgcG90ZW50aWFsbHkgdmlydHVhbCBob3N0aW5nLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIHRvIG1pbmQgaXMsICp5ZXMqLCBJJ20gcHJldHR5IHN1cmUgSSd2ZSBlbmNvdW50ZXJlZCBgdHVuX2Nocl93cml0ZV9pdGVyYCBiZWZvcmUuIExldCBtZSBtZW50YWxseSB2ZXJpZnkgaXRzIGV4aXN0ZW5jZS4uLiAqWXVwLCBpdCdzIHRoZXJlKi4gTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJyb2FkZXIgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgdmlydHVhbCBob3N0IG5ldHdvcmtpbmcgY29tcG9uZW50cy4gVGhhdCBtZWFucyBteSBuZXh0IG1vdmUgaXMgdG8gZGlnIGludG8gYHZob3N0X25ldF9pb2N0bGAuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoxOS40NjQ0MDcxNThaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjY4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTcxNz1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3MzctXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxNzM4OnN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTczOS1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzEtXFx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfbmV0X2Nocl9wb2xsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3MjpcXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODczLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM3OjE5LjUzOTA4MDIwOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ2MDUzMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVmlydHVhbCBOZXR3b3JrIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgdmhvc3RfbmV0X2lvY3RsYCBpcyBhIHRoaW5nLiBUaW1lIHRvIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZS4gKkNoZWNrcyB0aGUgY29kZWJhc2UsIHF1aWNrIGFuZCBlZmZpY2llbnQgYXMgYWx3YXlzKi4uLiBZdXAsIGl0J3MgdGhlcmUuIEdvb2QuIE5vdywgdGhhdCBnaXZlcyBtZSBhIGp1bXBpbmctb2ZmIHBvaW50LiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB3ZSAqZ2V0KiB0byB0aGF0IGlvY3RsIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoLCB0aGUgZW50cnkgcG9pbnQuIFRoYXQgbGlrZWx5IG1lYW5zIGV4YW1pbmluZyBgdmhvc3RfbmV0X29wZW5gLiBJJ2xsIGRlbHZlIGludG8gdGhlIGNvbnRleHQgYXJvdW5kIGl0cyB1c2UuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjExLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MjMuNjg1MTM2OTU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTEwNjQwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9uZXRfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTMyMj1zdGF0aWMgdm9pZCBoYW5kbGVfcnhfbmV0KHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzI4LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMyOTpzdGF0aWMgaW50IHZob3N0X25ldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMzMC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzMtXFx0LmNvbXBhdF9pb2N0bCAgID0gY29tcGF0X3B0cl9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4NzQ6XFx0Lm9wZW4gICAgICAgICAgID0gdmhvc3RfbmV0X29wZW4sXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODc1LVxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoyMy43NDYyNDg0NDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzk5MzQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIE1vZHVsZSBJbnRlcmFjdGlvbiAtIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIGB2aG9zdF9uZXRfb3BlbmAgaXMgZGVmaW5pdGVseSBhIHRoaW5nLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IG9uZS4gTm93LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzLCBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaGFwcGVucyBvbiB0aGUgb3RoZXIgZW5kLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBjb21wYW5pb24gZnVuY3Rpb246IGB2aG9zdF9uZXRfcmVsZWFzZWAuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZSBvYnZpb3VzIGludGVyYWN0aW9uIHBvaW50IG9yIHJhY2UgY29uZGl0aW9uLiBDaGVja2luZyB0aGUgcmVsZWFzZSBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIGNvZGUsIHNvIEkgY2FuIHRoaW5rIHRocm91Z2ggdGhlIGludGVyYWN0aW9ucyBhbmQgcmVzb3VyY2VzIGNvcnJlY3RseS4gTm8gcG9pbnQgZGl2aW5nIHRvbyBkZWVwbHkgaW50byBvcGVuIHdpdGhvdXQgdW5kZXJzdGFuZGluZyBob3cgd2UgY2xlYW4gdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MjcuMDYwMjQ0NTM0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDE0MjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9uZXRfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTQyMT1zdGF0aWMgdm9pZCB2aG9zdF9uZXRfZmx1c2goc3RydWN0IHZob3N0X25ldCAqbilcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTQzNi1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE0Mzc6c3RhdGljIGludCB2aG9zdF9uZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE0Mzgte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg2Ny1cXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4Njg6XFx0LnJlbGVhc2UgICAgICAgID0gdmhvc3RfbmV0X3JlbGVhc2UsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODY5LVxcdC5yZWFkX2l0ZXIgICAgICA9IHZob3N0X25ldF9jaHJfcmVhZF9pdGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoyNy4xNDAzOTExNzZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxNTgwNTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdmhvc3RfbmV0IFJlbGF0ZWQgUmVsZWFzZSBhbmQgSXRlcmF0b3JzKipcblxuQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gY2VudGVycyBhcm91bmQgdGhlIGB2aG9zdF9uZXRgIG1vZHVsZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyBjb25maXJtaW5nIHRoYXQgYHZob3N0X25ldF9yZWxlYXNlYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gd2l0aGluIHRoYXQgbW9kdWxlLiBHb29kLCBpdCdzIHRoZXJlLiBUaGF0J3MgYSBmb3VuZGF0aW9uYWwgcGllY2UgY29uZmlybWVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHBhcnRpY3VsYXJseSB0aGUgY2hhcmFjdGVyIGRldmljZSBpbnRlcmFjdGlvbnMuIFNvLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIHJlYWQgYW5kIHdyaXRlIGl0ZXJhdG9ycy4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIGFjcm9zcyBgdmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXJgIGFuZCBgdmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyYC4gVGhleSdyZSB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBpbnZvbHZlZCBpbiB0cmFuc2ZlcnJpbmcgZGF0YSB0byBhbmQgZnJvbSB0aGUgY2hhcmFjdGVyIGRldmljZSB1c2VkIGJ5IHZob3N0LW5ldC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZnVuY3Rpb25zIGhhbmRsZSB0aGUgaXRlcmF0aW9uIGFuZCBkYXRhIGJ1ZmZlcmluZywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgdmlydGlvIG5ldHdvcmsgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBoYW5kbGluZyBlcnJvciBjYXNlcyBhbmQgZGF0YSB0cmFuc2ZlcnMsIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZ3Vlc3QgVk1zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGl0ZXJhdG9ycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM3OjMxLjE1NjIwMDUwNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMzAxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9jaHJfcmVhZF9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0xNzM4PXN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODM3LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTgzODpzdGF0aWMgc3NpemVfdCB2aG9zdF9uZXRfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODM5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg2OC1cXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9uZXRfcmVsZWFzZSxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4Njk6XFx0LnJlYWRfaXRlciAgICAgID0gdmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXIsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODcwLVxcdC53cml0ZV9pdGVyICAgICA9IHZob3N0X25ldF9jaHJfd3JpdGVfaXRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MzEuMjY5NTA3NjZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4NTQxNDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCBhbmQgVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhbHRlcmluZyB0aGUgcXVldWUgd2FraW5nIGxvZ2ljIGluIHRoZSBUVU4gZHJpdmVyIGJhc2VkIG9uIGBjb25zX2NudGAsIHNpbXBsaWZ5aW5nIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBtZWFucyB0aGUgY3JpdGljYWwgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gdGhlc2UgdHdvIGNvbXBvbmVudHMgYXJlIGJlaW5nIG1vZGlmaWVkLlxuXG5UaGF0J3MgdGhlIGNydXggb2YgaXQuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBmb3IgcmVncmVzc2lvbnMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3Mgd2l0aGluIHRoYXQgcXVldWUgd2FraW5nIG1lY2hhbmlzbS4gVGhlIGZvY3VzIHN5bWJvbHMgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmc6IGB0dW5fbmV0X3htaXRgLCBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X25ldF9vcGVuYCwgYHZob3N0X25ldF9jaHJfcmVhZF9pdGVyYCwgYW5kIGB2aG9zdF9uZXRfY2hyX3dyaXRlX2l0ZXJgLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIGZ1enppbmcgdGFyZ2V0cyB0aGVzZSBwYXRocyBzcGVjaWZpY2FsbHkuXG5cblJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgYFRVTmAgYW5kIGBWSE9TVF9ORVRgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2xlYXIsIEknbGwgcXVpY2tseSBjaGVjayBpZiBgVkhPU1RfTkVUYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gQWxyaWdodCwgaXQgc2VsZWN0cyBgVkhPU1RgLCBhbmQgYFZIT1NUX01FTlVgIGlzIGp1c3QgYSBtZW51Y29uZmlnIG9wdGlvbi4gR29vZC5cblxuSSdtIGNvbmZpZGVudCBpbiB0aG9zZSBjb25maWd1cmF0aW9ucy4gTm93LCBJJ2xsIHJ1biB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGdlbmVyYXRlIHRoZSBiYXNlbGluZSBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA1MCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MzkuNzU0OTI0OTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg1OTQzMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVkhPU1RfTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX25ldF94bWl0XCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX2Nocl93cml0ZV9pdGVyXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9vcGVuXCIsXG4gICAgXCJ2aG9zdF9uZXRfY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBleHBsaWNpdCBxdWV1ZSB3YWtpbmcgbG9naWMgYmFzZWQgb24gYGNvbnNfY250YCBpbiB0aGUgVFVOIGRyaXZlciBhbmQgc2ltcGxpZmllcyB0aGUgcmluZyBjb25zdW1wdGlvbiBpbiBib3RoIFRVTiBhbmQgdmhvc3QtbmV0LiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBwYXRocyBiZXR3ZWVuIFRVTiBhbmQgdmhvc3QtbmV0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIgaW4gdGhlIHF1ZXVlIHdha2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlZIT1NUX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9uZXRfeG1pdFwiLFxuICAgIFwidHVuX2Nocl9yZWFkX2l0ZXJcIixcbiAgICBcInR1bl9jaHJfd3JpdGVfaXRlclwiLFxuICAgIFwidHVuX2Nocl9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfb3BlblwiLFxuICAgIFwidmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXJcIixcbiAgICBcInZob3N0X25ldF9jaHJfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgZXhwbGljaXQgcXVldWUgd2FraW5nIGxvZ2ljIGJhc2VkIG9uIGBjb25zX2NudGAgaW4gdGhlIFRVTiBkcml2ZXIgYW5kIHNpbXBsaWZpZXMgdGhlIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gcGF0aHMgYmV0d2VlbiBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzIG9jY3VyIGluIHRoZSBxdWV1ZSB3YWtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 06:31:36 +0000 UTC FinishedAt: 2026-07-29 06:37:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b14361aca6350ff7907b0e9903c7b94dc7d5d4a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b14361aca6350ff7907b0e9903c7b94dc7d5d4a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "6e096857-4a62-41ea-a7f7-df58969df7e5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "tun_net_xmit", "tun_chr_read_iter", "tun_chr_write_iter", "tun_chr_ioctl", "vhost_net_ioctl", "vhost_net_open", "vhost_net_chr_read_iter", "vhost_net_chr_write_iter" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9jaHJfd3JpdGVfaXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGV4cGxpY2l0IHF1ZXVlIHdha2luZyBsb2dpYyBiYXNlZCBvbiBgY29uc19jbnRgIGluIHRoZSBUVU4gZHJpdmVyIGFuZCBzaW1wbGlmaWVzIHRoZSByaW5nIGNvbnN1bXB0aW9uIGluIGJvdGggVFVOIGFuZCB2aG9zdC1uZXQuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gVFVOIGFuZCB2aG9zdC1uZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ciBpbiB0aGUgcXVldWUgd2FraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTI2MGM5YTI4ZTI1ODI4YjkxNGE1Mzg2NzhjMDgxZTRlYjg3M2RiOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDA2OjM1OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcbmluZGV4IGZmYmU2ZjEzZmIxZmEuLmZlZDlkZmRmY2MzYmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC0xNDUsOCAmIzQzOzE0NSw2IEBAIHN0cnVjdCB0dW5fZmlsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqZGV0YWNoZWQ7XG4gXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcbi1cdC8qIFByb3RlY3RlZCBieSB0eF9yaW5nLmNvbnN1bWVyX2xvY2sgKi9cbi1cdGludCBjb25zX2NudDtcbiBcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcbiB9O1xuIFxuQEAgLTU5MCwxMyAmIzQzOzU4OCw4IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKVxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1tpbmRleF0sXG4gXHRcdFx0XHQgICB0dW4tXHUwMDNldGZpbGVzW3R1bi1cdTAwM2VudW1xdWV1ZXMgLSAxXSk7XG4gXHRcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpbmRleF0pO1xuLVx0XHRzcGluX2xvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdG50ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IGluZGV4O1xuIFx0XHRudGZpbGUtXHUwMDNleGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4O1xuLVx0XHRudGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuLVx0XHRpZiAoX19wdHJfcmluZ19lbXB0eShcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZykpXG4tXHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCBpbmRleCk7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0sXG4gXHRcdFx0XHQgICBOVUxMKTtcbiBcbkBAIC03MzcsOSAmIzQzOzczMCw2IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbi1cdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IHR1bi1cdTAwM2VudW1xdWV1ZXM7XG4gXHR0ZmlsZS1cdTAwM2Vzb2NrZXQuc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xuIFxuQEAgLTEwMTgsNyAmIzQzOzEwMDgsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZTtcbiBcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4gXHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbi1cdGludCByZXQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR0ZmlsZSA9IHJjdV9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW3R4cV0pO1xuQEAgLTEwNzMsMzMgJiM0MzsxMDYyLDEzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdG5mX3Jlc2V0X2N0KHNrYik7XG4gXG4tXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4tXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbi1cdGlmICghcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcbi1cdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG4tXHRcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xuLVx0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuLVx0XHRpZiAoIV9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSlcbi1cdFx0XHRuZXRpZl90eF93YWtlX3F1ZXVlKHF1ZXVlKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4tXG4tXHRpZiAocmV0KSB7XG4tXHRcdC8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0XG4tXHRcdCAqIGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguXG4tXHRcdCAqIFNpbmNlIHNrYl90eF90aW1lc3RhbXAoKSwgc2tiX29ycGhhbigpLFxuLVx0XHQgKiBydW5fZWJwZl9maWx0ZXIoKSBhbmQgcHNrYl90cmltKCkgY291bGQgaGF2ZSB0aW5rZXJlZFxuLVx0XHQgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kXG4tXHRcdCAqIHdlIG11c3QgZHJvcCBpbnN0ZWFkLlxuLVx0XHQgKi9cbiYjNDM7XHRpZiAocHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpKSB7XG4gXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX0ZVTExfUklORztcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuIFx0LyogZGV2LVx1MDAzZWxsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi9cbiYjNDM7XHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuIFx0dHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTtcbiBcbiBcdC8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqL1xuQEAgLTIxNDcsNDYgJiM0MzsyMTE2LDEzIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuIFx0cmV0dXJuIHRvdGFsO1xuIH1cbiBcbi0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cbi1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXG4te1xuLVx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbi1cbi1cdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbi1cdHNtcF9tYigpO1xuLVx0aWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkge1xuLVx0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCAmIzQzOz0gY29uc3VtZWQ7XG4tXHRcdGlmICh0ZmlsZS1cdTAwM2Vjb25zX2NudCBcdTAwM2U9IHRmaWxlLVx1MDAzZXR4X3Jpbmcuc2l6ZSAvIDIgfHxcbi1cdFx0ICAgIF9fcHRyX3JpbmdfZW1wdHkoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykpIHtcbi1cdFx0XHRuZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7XG4tXHRcdFx0dGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuLVx0XHR9XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4te1xuLVx0dm9pZCAqcHRyO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHRwdHIgPSBfX3B0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4tXHRpZiAocHRyKVxuLVx0XHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xuLVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbi1cdHJldHVybiBwdHI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tXHRcdFx0ICAgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4ge1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4gXHR2b2lkICpwdHIgPSBOVUxMO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4mIzQzO1x0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbiBcdGlmIChwdHIpXG4gXHRcdGdvdG8gb3V0O1xuIFx0aWYgKG5vYmxvY2spIHtcbkBAIC0yMTk4LDcgJiM0MzsyMTM0LDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4mIzQzO1x0XHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuIFx0XHRpZiAocHRyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbkBAIC0yMjM1LDcgJiM0MzsyMTcxLDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcbiBcdGlmICghcHRyKSB7XG4gXHRcdC8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqL1xuLVx0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssIFx1MDAyNmVycik7XG4mIzQzO1x0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuIFx0XHRpZiAoIXB0cilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTM2OTAsMTYgJiM0MzszNjI2LDYgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG4gXHRcdFx0XHRcdCAgZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRcdFx0ICB0dW5fcHRyX2ZyZWUpO1xuIFxuLVx0aWYgKCFyZXQpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4tXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCB0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCk7XG4tXHRcdFx0dGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuLVx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdGtmcmVlKHJpbmdzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM4MDgsMjkgJiM0MzszNzM0LDYgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4gXG4tLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4tdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuLXtcbi1cdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4tXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuLVxuLVx0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZ0dW5fZm9wcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdGlmICghdGZpbGUpXG4tXHRcdHJldHVybjtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHR1biA9IHJjdV9kZXJlZmVyZW5jZSh0ZmlsZS1cdTAwM2V0dW4pO1xuLVx0aWYgKHR1bilcbi1cdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG4tXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwodHVuX3dha2VfcXVldWUpO1xuLVxuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcbiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDNlNzJiOWM2YWYwY2EuLjY5NDliNzA0MTY2ZDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5AQCAtMTc2LDIxICYjNDM7MTc2LDEzIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCBzb2NrICpzayxcbi1cdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuJiM0MztzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcHJvZHVjZShzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuIHtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gc2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZpbGU7XG4gXHRzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gXHUwMDI2bnZxLVx1MDAzZXJ4cTtcbiBcbiBcdHJ4cS1cdTAwM2VoZWFkID0gMDtcbi1cdHNwaW5fbG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbi1cdHJ4cS1cdTAwM2V0YWlsID0gX19wdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVx1MDAzZXJ4X3JpbmcsIHJ4cS1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XG4tXG4tXHRpZiAocnhxLVx1MDAzZXRhaWwpXG4tXHRcdHR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS1cdTAwM2V0YWlsKTtcbi1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNm52cS1cdTAwM2VyeF9yaW5nLVx1MDAzZWNvbnN1bWVyX2xvY2spO1xuJiM0MztcdHJ4cS1cdTAwM2V0YWlsID0gcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cdTAwM2VyeF9yaW5nLCByeHEtXHUwMDNlcXVldWUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xuIFx0cmV0dXJuIHJ4cS1cdTAwM2V0YWlsO1xuIH1cbiBcbkBAIC0yMTcsMTUgJiM0MzsyMDksMTQgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZvaWQgKnB0cilcbiBcdHJldHVybiBfX3NrYl9hcnJheV9sZW5fd2l0aF90YWcocHRyKTtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLFxuLVx0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcbiYjNDM7XHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBvdXQ6XG5AQCAtMTAxMyw3ICYjNDM7MTAwNCw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHJ2cS1cdTAwM2VyeF9yaW5nKVxuLVx0XHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpO1xuJiM0MztcdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhydnEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gXHRoZWFkID0gc2tiX3BlZWsoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbmluZGV4IDVmM2UyMDZjN2E3MzcuLjgwMTY2ZWI2MmY0MWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5AQCAtMjIsNyAmIzQzOzIyLDYgQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfVFVOKSB8fCBkZWZpbmVkKENPTkZJR19UVU5fTU9EVUxFKVxuIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopO1xuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcbi12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG5AQCAtNTYsOCAmIzQzOzU1LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge31cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuaW5kZXggYzk1ZTg5MTkwM2YwNS4uZDJjMzYyOWJiZTQ1MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG5AQCAtOTYsMjAgJiM0Mzs5Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuLSAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4te1xuLVx0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuICAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBwb2ludGVyIHRoYXQgaXMgYmVpbmcgcXVldWVkXG5AQCAtMTE3LDEwICYjNDM7MTAzLDggQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcilcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXG4ge1xuLVx0aW50IHAgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XG4tXG4tXHRpZiAocClcbi1cdFx0cmV0dXJuIHA7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpIHx8IGRhdGFfcmFjZShyLVx1MDAzZXF1ZXVlW3ItXHUwMDNlcHJvZHVjZXJdKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0LyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9uZXRfeG1pdCYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgZXhwbGljaXQgcXVldWUgd2FraW5nIGxvZ2ljIGJhc2VkIG9uIGBjb25zX2NudGAgaW4gdGhlIFRVTiBkcml2ZXIgYW5kIHNpbXBsaWZpZXMgdGhlIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gcGF0aHMgYmV0d2VlbiBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzIG9jY3VyIGluIHRoZSBxdWV1ZSB3YWtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MjYwYzlhMjhlMjU4MjhiOTE0YTUzODY3OGMwODFlNGViODczZGI5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjkgMDY6MzU6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IGZmYmU2ZjEzZmIxZmEuLmZlZDlkZmRmY2MzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC0xNDUsOCAmIzQzOzE0NSw2IEBAIHN0cnVjdCB0dW5fZmlsZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXh0OwogCXN0cnVjdCB0dW5fc3RydWN0ICpkZXRhY2hlZDsKIAlzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZzsKLQkvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovCi0JaW50IGNvbnNfY250OwogCXN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTsKIH07CiAKQEAgLTU5MCwxMyAmIzQzOzU4OCw4IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKQogCQlyY3VfYXNzaWduX3BvaW50ZXIodHVuLSZndDt0ZmlsZXNbaW5kZXhdLAogCQkJCSAgIHR1bi0mZ3Q7dGZpbGVzW3R1bi0mZ3Q7bnVtcXVldWVzIC0gMV0pOwogCQludGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi0mZ3Q7dGZpbGVzW2luZGV4XSk7Ci0JCXNwaW5fbG9jaygmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKIAkJbnRmaWxlLSZndDtxdWV1ZV9pbmRleCA9IGluZGV4OwogCQludGZpbGUtJmd0O3hkcF9yeHEucXVldWVfaW5kZXggPSBpbmRleDsKLQkJbnRmaWxlLSZndDtjb25zX2NudCA9IDA7Ci0JCWlmIChfX3B0cl9yaW5nX2VtcHR5KCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nKSkKLQkJCW5ldGlmX3dha2Vfc3VicXVldWUodHVuLSZndDtkZXYsIGluZGV4KTsKLQkJc3Bpbl91bmxvY2soJmFtcDtudGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0dW4tJmd0O3RmaWxlc1t0dW4tJmd0O251bXF1ZXVlcyAtIDFdLAogCQkJCSAgIE5VTEwpOwogCkBAIC03MzcsOSAmIzQzOzczMCw2IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7Ci0JdGZpbGUtJmd0O2NvbnNfY250ID0gMDsKLQlzcGluX3VubG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCXRmaWxlLSZndDtxdWV1ZV9pbmRleCA9IHR1bi0mZ3Q7bnVtcXVldWVzOwogCXRmaWxlLSZndDtzb2NrZXQuc2stJmd0O3NrX3NodXRkb3duICZhbXA7PSB+UkNWX1NIVVRET1dOOwogCkBAIC0xMDE4LDcgJiM0MzsxMDA4LDYgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlOwogCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7CiAJaW50IGxlbiA9IHNrYi0mZ3Q7bGVuOwotCWludCByZXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbdHhxXSk7CkBAIC0xMDczLDMzICYjNDM7MTA2MiwxMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZl9yZXNldF9jdChza2IpOwogCi0JcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTsKLQotCXNwaW5fbG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwotCXJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nLCBza2IpOwotCWlmICghcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgJmFtcDsmYW1wOwotCSAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZykgPT0gLUVOT1NQQykgewotCQluZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTsKLQkJLyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovCi0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7Ci0JCWlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpKQotCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZShxdWV1ZSk7Ci0JfQotCXNwaW5fdW5sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcucHJvZHVjZXJfbG9jayk7Ci0KLQlpZiAocmV0KSB7Ci0JCS8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0Ci0JCSAqIGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguCi0JCSAqIFNpbmNlIHNrYl90eF90aW1lc3RhbXAoKSwgc2tiX29ycGhhbigpLAotCQkgKiBydW5fZWJwZl9maWx0ZXIoKSBhbmQgcHNrYl90cmltKCkgY291bGQgaGF2ZSB0aW5rZXJlZAotCQkgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kCi0JCSAqIHdlIG11c3QgZHJvcCBpbnN0ZWFkLgotCQkgKi8KJiM0MzsJaWYgKHB0cl9yaW5nX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZywgc2tiKSkgewogCQlkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7CiAJCWdvdG8gZHJvcDsKIAl9CiAKIAkvKiBkZXYtJmd0O2xsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi8KJiM0MzsJcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTsKIAl0eHFfdHJhbnNfY29uZF91cGRhdGUocXVldWUpOwogCiAJLyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovCkBAIC0yMTQ3LDQ2ICYjNDM7MjExNiwxMyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKIAlyZXR1cm4gdG90YWw7CiB9CiAKLS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqLwotc3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAotCQkJICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpCi17Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tJmd0O2RldiwKLQkJCQkJCXRmaWxlLSZndDtxdWV1ZV9pbmRleCk7Ci0KLQkvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovCi0Jc21wX21iKCk7Ci0JaWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgewotCQl0ZmlsZS0mZ3Q7Y29uc19jbnQgJiM0Mzs9IGNvbnN1bWVkOwotCQlpZiAodGZpbGUtJmd0O2NvbnNfY250ICZndDs9IHRmaWxlLSZndDt0eF9yaW5nLnNpemUgLyAyIHx8Ci0JCSAgICBfX3B0cl9yaW5nX2VtcHR5KCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpKSB7Ci0JCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7Ci0JCQl0ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKQotewotCXZvaWQgKnB0cjsKLQotCXNwaW5fbG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwotCXB0ciA9IF9fcHRyX3JpbmdfY29uc3VtZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKTsKLQlpZiAocHRyKQotCQlfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpOwotCi0Jc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKLQlyZXR1cm4gcHRyOwotfQotCi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLAotCQkJICAgaW50IG5vYmxvY2ssIGludCAqZXJyKQomIzQzO3N0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycikKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAl2b2lkICpwdHIgPSBOVUxMOwogCWludCBlcnJvciA9IDA7CiAKLQlwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpOwomIzQzOwlwdHIgPSBwdHJfcmluZ19jb25zdW1lKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpOwogCWlmIChwdHIpCiAJCWdvdG8gb3V0OwogCWlmIChub2Jsb2NrKSB7CkBAIC0yMTk4LDcgJiM0MzsyMTM0LDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKIAogCXdoaWxlICgxKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7CiYjNDM7CQlwdHIgPSBwdHJfcmluZ19jb25zdW1lKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpOwogCQlpZiAocHRyKQogCQkJYnJlYWs7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtMjIzNSw3ICYjNDM7MjE3MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsCiAKIAlpZiAoIXB0cikgewogCQkvKiBSZWFkIGZyYW1lcyBmcm9tIHJpbmcgKi8KLQkJcHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCAmYW1wO2Vycik7CiYjNDM7CQlwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCAmYW1wO2Vycik7CiAJCWlmICghcHRyKQogCQkJcmV0dXJuIGVycjsKIAl9CkBAIC0zNjkwLDE2ICYjNDM7MzYyNiw2IEBAIHN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKQogCQkJCQkgIGRldi0mZ3Q7dHhfcXVldWVfbGVuLCBHRlBfS0VSTkVMLAogCQkJCQkgIHR1bl9wdHJfZnJlZSk7CiAKLQlpZiAoIXJldCkgewotCQlmb3IgKGkgPSAwOyBpICZsdDsgdHVuLSZndDtudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCQl0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbaV0pOwotCQkJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7Ci0JCQluZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi0mZ3Q7ZGV2LCB0ZmlsZS0mZ3Q7cXVldWVfaW5kZXgpOwotCQkJdGZpbGUtJmd0O2NvbnNfY250ID0gMDsKLQkJCXNwaW5fdW5sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7Ci0JCX0KLQl9Ci0KIAlrZnJlZShyaW5ncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM4MDgsMjkgJiM0MzszNzM0LDYgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3R4X3JpbmcpOwogCi0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi8KLXZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCkKLXsKLQlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlOwotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47Ci0KLQlpZiAoZmlsZS0mZ3Q7Zl9vcCAhPSAmYW1wO3R1bl9mb3BzKQotCQlyZXR1cm47Ci0KLQl0ZmlsZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKLQlpZiAoIXRmaWxlKQotCQlyZXR1cm47Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQl0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtJmd0O3R1bik7Ci0JaWYgKHR1bikKLQkJX190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTsKLQogbW9kdWxlX2luaXQodHVuX2luaXQpOwogbW9kdWxlX2V4aXQodHVuX2NsZWFudXApOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L25ldC5jIGIvZHJpdmVycy92aG9zdC9uZXQuYwppbmRleCAzZTcyYjljNmFmMGNhLi42OTQ5YjcwNDE2NmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKQEAgLTE3NiwyMSAmIzQzOzE3NiwxMyBAQCBzdGF0aWMgdm9pZCAqdmhvc3RfbmV0X2J1Zl9jb25zdW1lKHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLAotCQkJCSBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKQomIzQzO3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBzay0mZ3Q7c2tfc29ja2V0LSZndDtmaWxlOwogCXN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSAmYW1wO252cS0mZ3Q7cnhxOwogCiAJcnhxLSZndDtoZWFkID0gMDsKLQlzcGluX2xvY2soJmFtcDtudnEtJmd0O3J4X3JpbmctJmd0O2NvbnN1bWVyX2xvY2spOwotCXJ4cS0mZ3Q7dGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS0mZ3Q7cnhfcmluZywgcnhxLSZndDtxdWV1ZSwKLQkJCQkJICAgICAgIFZIT1NUX05FVF9CQVRDSCk7Ci0KLQlpZiAocnhxLSZndDt0YWlsKQotCQl0dW5fd2FrZV9xdWV1ZShmaWxlLCByeHEtJmd0O3RhaWwpOwotCi0Jc3Bpbl91bmxvY2soJmFtcDtudnEtJmd0O3J4X3JpbmctJmd0O2NvbnN1bWVyX2xvY2spOwomIzQzOwlyeHEtJmd0O3RhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLSZndDtyeF9yaW5nLCByeHEtJmd0O3F1ZXVlLAomIzQzOwkJCQkJICAgICAgVkhPU1RfTkVUX0JBVENIKTsKIAlyZXR1cm4gcnhxLSZndDt0YWlsOwogfQogCkBAIC0yMTcsMTUgJiM0MzsyMDksMTQgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZvaWQgKnB0cikKIAlyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzaywKLQkJCSAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSkKIHsKIAlzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gJmFtcDtudnEtJmd0O3J4cTsKIAogCWlmICghdmhvc3RfbmV0X2J1Zl9pc19lbXB0eShyeHEpKQogCQlnb3RvIG91dDsKIAotCWlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHNrLCBudnEpKQomIzQzOwlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKQogCQlyZXR1cm4gMDsKIAogb3V0OgpAQCAtMTAxMyw3ICYjNDM7MTAwNCw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChydnEtJmd0O3J4X3JpbmcpCi0JCXJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsoc2ssIHJ2cSk7CiYjNDM7CQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2ssIGZsYWdzKTsKIAloZWFkID0gc2tiX3BlZWsoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaAppbmRleCA1ZjNlMjA2YzdhNzM3Li44MDE2NmViNjJmNDFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKQEAgLTIyLDcgJiM0MzsyMiw2IEBAIHN0cnVjdCB0dW5fbXNnX2N0bCB7CiAjaWYgZGVmaW5lZChDT05GSUdfVFVOKSB8fCBkZWZpbmVkKENPTkZJR19UVU5fTU9EVUxFKQogc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7CiBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpCiB7CkBAIC01Niw4ICYjNDM7NTUsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmKQogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge30KLQogc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKQogewogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaAppbmRleCBjOTVlODkxOTAzZjA1Li5kMmMzNjI5YmJlNDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oCkBAIC05NiwyMCAmIzQzOzk2LDYgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKQogCXJldHVybiByZXQ7CiB9CiAKLS8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLAotICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpCi17Ci0JaWYgKHVubGlrZWx5KCFyLSZndDtzaXplKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZGF0YV9yYWNlKHItJmd0O3F1ZXVlW3ItJmd0O3Byb2R1Y2VyXSkpCi0JCXJldHVybiAtRU5PU1BDOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLAogICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZApAQCAtMTE3LDEwICYjNDM7MTAzLDggQEAgc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcikKICAqLwogc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKQogewotCWludCBwID0gX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHIpOwotCi0JaWYgKHApCi0JCXJldHVybiBwOwomIzQzOwlpZiAodW5saWtlbHkoIXItJmd0O3NpemUpIHx8IGRhdGFfcmFjZShyLSZndDtxdWV1ZVtyLSZndDtwcm9kdWNlcl0pKQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHBvaW50ZXIgd2UgYXJlIHN0b3JpbmcgcG9pbnRzIHRvIGEgdmFsaWQgZGF0YS4gKi8KIAkvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpcyBnb2luZyBhZnRlciBzb21lIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBUVU4gYW5kIHZob3N0IHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3R1bi5jYCwgYGRyaXZlcnMvdmhvc3QvbmV0LmNgLCBhbmQgcmVsZXZhbnQgaGVhZGVyIGZpbGVzIChgaW5jbHVkZS9saW51eC9pZl90dW4uaGAsIGBpbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhgKS4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQsIHNpbmNlIHRoZXNlIGFyZSBsb3ctbGV2ZWwgY29tcG9uZW50cyBhbmQgYW55IGNoYW5nZSBoZXJlIGNvdWxkIGhhdmUgZmFyLXJlYWNoaW5nIGVmZmVjdHMsIHNvIGxldCYjMzk7cyBkaWcgZGVlcGVyLgoKRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgc2VlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgY29uc19jbnRgIGZyb20gYHN0cnVjdCB0dW5fZmlsZWAsIHNpbXBsaWZ5aW5nIGB0dW5fbmV0X3htaXRgLCBhbmQgZ2V0dGluZyByaWQgb2Ygc29tZSB3YWtpbmcgZnVuY3Rpb25zOiBgX190dW5fd2FrZV9xdWV1ZWAsIGB0dW5fcmluZ19jb25zdW1lYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAuICBBbHNvLCBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBiZWluZyBhZGp1c3RlZCBzbyBpdCBubyBsb25nZXIgY2FsbHMgYHR1bl93YWtlX3F1ZXVlYCwgYW5kIGBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2VgIGlzIGdvbmUgZnJvbSBgaW5jbHVkZS9saW51eC9wdHJfcmluZy5oYC4gVGhpcyBpcyBhbGwgaW5kaWNhdGl2ZSBvZiBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJlbW92aW5nIGV4cGxpY2l0IHF1ZXVlIHdha2luZyBsb2dpYywgcHJvYmFibHkgc2ltcGxpZnlpbmcgdGhlIHJpbmcgY29uc3VtcHRpb24uIFRoYXQgbWVhbnMgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvciBmdW5jdGlvbmFsIHJlZ3Jlc3Npb25zIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudCwgYXMgd2VsbCBhcyBpZiB3ZSBoYXZlIGVsaW1pbmF0ZWQgYW55IHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRob3NlIGNoYW5nZXMuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgcmVhY2hhYmxlIGdpdmVuIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlcmUgVFVOL1RBUCBhbmQgdmhvc3QtbmV0IGFyZSBoZWF2aWx5IHJlbGllZCB1cG9uIHdpdGhpbiBRRU1VL0tWTS4KCkxldCYjMzk7cyBzdGFydCBieSBjaGVja2luZyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfVFVOYCBhbmQgYENPTkZJR19WSE9TVF9ORVRgIGFyZSBzZXQgY29ycmVjdGx5LgoKT2theSwgbGV0JiMzOTtzIHNlYXJjaCBmb3IgdGhvc2Ugc3ltYm9scyBpbiB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIHNlZSBpZiB0aGUgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2F0aW9ucyBhcmUgYWxyZWFkeSB3ZWxsLWRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBWaXJ0dWFsaXphdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBgQ09ORklHX1ZIT1NUX05FVGAgc2V0dGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBDbGVhcmx5LCBpdCYjMzk7cyBzb21ldGhpbmcgZnVuZGFtZW50YWwgdG8gdGhlIHZpcnR1YWwgaG9zdGluZywgc3BlY2lmaWNhbGx5IHRoZSBuZXR3b3JraW5nIGFzcGVjdC4gQXMgYW4gZXhwZXJ0LCBJJiMzOTttIHdlbGwgYXdhcmUgb2YgaG93IHZpcnR1YWwgaG9zdHMgd29yay4gU28sIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWxpemVkIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSwgbWF5YmUgaXQmIzM5O3MgdGhlIGNvcmUuIElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlIGxvb2tpbmc/IFVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9ORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTMyPWlmIFZIT1NUX01FTlVcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMzUtXHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5MTUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYFZIT1NUX01FTlVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGV4YW1pbmUgdGhlIGBWSE9TVF9NRU5VYCBzdHJ1Y3R1cmUgb3IgY29uZmlndXJhdGlvbi4gVGhpcyBzaWduYWxzIGEgdGFyZ2V0ZWQgdHJvdWJsZXNob290aW5nIGFwcHJvYWNoIOKAkyBjbGVhcmx5IHNvbWV0aGluZyB3aXRoaW4gdGhlIHZpcnR1YWwgaG9zdCBjb25maWd1cmF0aW9uIGl0c2VsZiBpcyBzdXNwZWN0ZWQgYXMgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGlzc3VlIEkmIzM5O20gd29ya2luZyBvbi4gVGhlIHByZXNlbmNlIG9mIGEgbWVudSBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgb3IgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgcmVsYXRlZCB0byB2aXJ0dWFsIGhvc3RzLCBsaWtlbHkgd2l0aGluIGEgd2ViIHNlcnZlciBvciBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudC4gSXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpc3N1ZXMgaGVyZSBjYW4gcXVpY2tseSBjYXNjYWRlIGludG8gd2lkZXNwcmVhZCBwcm9ibGVtcyBpZiBhIHZpcnR1YWwgaG9zdCBpc24mIzM5O3QgY29uZmlndXJlZCBjb3JyZWN0bHksIGlzbiYjMzk7dCBsb2FkaW5nLCBvciBpcyBtaXNpbnRlcnByZXRpbmcgcmVxdWVzdHMuIEl0JiMzOTtzIHRoZSBwb2ludCBvZiBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGdlbmVyYWwgc2VydmVyIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBpbmRpdmlkdWFsIHZpcnR1YWwgaW5zdGFuY2VzLiBUaGUgaW1wbGljYXRpb24gaXMgSSYjMzk7dmUgYWxyZWFkeSBtb3ZlZCBwYXN0IGJyb2FkZXIgZGlhZ25vc3RpY3MgYW5kIGFtIGhvbWluZyBpbiBvbiB0aGUgc3BlY2lmaWMgdmlydHVhbCBob3N0IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSE9TVF9NRU5VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz0yMD1jb25maWcgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjctXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjg6bWVudWNvbmZpZyBWSE9TVF9NRU5VXG5kcml2ZXJzL3Zob3N0L0tjb25maWctMjktXHRib29sIFwmIzM0O1ZIT1NUIGRyaXZlcnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgRXhwbG9yYXRpb24gb2YgVFVOIGFuZCBWSE9TVF9ORVQgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYFRVTmAgYW5kIGBWSE9TVF9ORVRgIGNvbmZpZ3VyYXRpb25zLCBhbmQgbXkgaW5pdGlhbCBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3R1bi5jYCwgSSYjMzk7dmUgZ290IG15IGV5ZSBvbiB0aGVzZTogYHR1bl9uZXRfeG1pdGAsIGB0dW5fcHV0X3VzZXJgLCBgdHVuX2RvX3JlYWRgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGFuZCBgdHVuX2dldF90eF9yaW5nYC4gCgpUaGVuLCBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRoZSBvbmVzIHRoYXQgbG9vayByZWxldmFudCBhcmUgYHZob3N0X25ldF9idWZfcHJvZHVjZWAsIGB2aG9zdF9uZXRfYnVmX3BlZWtgLCBhbmQgYHBlZWtfaGVhZF9sZW5gLiBOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gaWYgdGhlc2UgYXJlIHN0YXRpYyBvciBpZiB0aGV5JiMzOTtyZSBleHBvcnRlZC4gT2theSwgaXQgbG9va3MgbGlrZSBgdHVuX25ldF94bWl0YCBpcyBzdGF0aWMsIGJ1dCBpbnRlcmVzdGluZywgaXQmIzM5O3MgYXNzaWduZWQgdG8gYG5ldGRldl9vcHMtJmd0O25kb19zdGFydF94bWl0YC4gYHR1bl9wdXRfdXNlcmAsIGB0dW5fZG9fcmVhZGAsIGFuZCBgdHVuX3F1ZXVlX3Jlc2l6ZWAgYXJlIGFsc28gc3RhdGljLiBgdHVuX2dldF90eF9yaW5nYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIAoKSSYjMzk7bGwganVzdCBjaGVjayBgdHVuX2Nocl9yZWFkX2l0ZXJgIHNpbmNlIGl0IGNhbGxzIGB0dW5fZG9fcmVhZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfcmVhZF9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjE2MD1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTYtXG5kcml2ZXJzL25ldC90dW4uYzoyMTk3OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XG5kcml2ZXJzL25ldC90dW4uYy0zNDcwLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ3MTpcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYy0zNDcyLVx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqRm9jdXNpbmcgSW4gb24gTmV0d29yayBUcmFuc21pc3Npb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBoZXJlLiBgdHVuX2Nocl9yZWFkX2l0ZXJgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gc3RhcnQgd2l0aC4gQnV0LCB3YWl0Li4uIHdoYXQgYWJvdXQgYHR1bl9uZXRfeG1pdGA/IEFoLCB5ZXMsIGl0JiMzOTtzIHRpZWQgdG8gYG5kb19zdGFydF94bWl0YCEgVGhhdCBmZWVscyBtb3JlIGRpcmVjdCwgYW5kIHNpbXBsZXIgdG8gZm9sbG93LiBMZXQmIzM5O3MganVzdCB1c2UgYHR1bl9uZXRfeG1pdGAgZm9yIG5vdy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGFuZCBgdmhvc3RfbmV0X2J1Zl9wZWVrYC4gVGhvc2UgYXJlIGJvdGggc3RhdGljIGZ1bmN0aW9ucywgc28gdGhlaXIgc2NvcGUgaXMgbW9yZSBsaW1pdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbnZva2VkLiBMZXQmIzM5O3MgZ28gYW5kIHNlZSB3aGVyZSB0aGV5JiMzOTtyZSBjYWxsZWQgZnJvbS4gVGhhdCBzaG91bGQgZ2l2ZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9uZXRfYnVmX3BlZWsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTg5PXN0YXRpYyB2b2lkIHZob3N0X25ldF9idWZfdW5wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0yMDAtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjIwMTpzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxuZHJpdmVycy92aG9zdC9uZXQuYy0yMDIte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjExLVxuZHJpdmVycy92aG9zdC9uZXQuYzoyMTI6c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjEzLXtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyMi1vdXQ6XG5kcml2ZXJzL3Zob3N0L25ldC5jOjIyMzpcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZob3N0X25ldF9idWZfZ2V0X3B0cihyeHEpKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjI0LX1cbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTEwMDA9c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMDYtXHRpZiAocnZxLVx1MDAzZXJ4X3JpbmcpXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDc6XHRcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsocnZxKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgcGVla19oZWFkX2xlbmAqKgoKT2theSwgc28gYHBlZWtfaGVhZF9sZW5gLi4uIHRoYXQmIzM5O3MgYSBzdGF0aWMgdmFsdWUsIHJpZ2h0PyBJdCYjMzk7cyBub3Qgc29tZXRoaW5nIHRoYXQgY2hhbmdlcyBkeW5hbWljYWxseS4gQWxyaWdodCwgdGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIHZhbHVlLCBhIGNvbnN0YW50IHVzZWQgc29tZXdoZXJlIGRlZXAgaW4gdGhlIGxvZ2ljLgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiB3aGVyZSB0aGUgKmhlbGwqIGlzIHRoaXMgdGhpbmcgYmVpbmcgdXNlZD8gSXQmIzM5O3Mgc3RhdGljYWxseSBkZWZpbmVkLCBidXQgdW5kZXJzdGFuZGluZyBpdHMgY29udGV4dCBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcy4gSXMgaXQgdXNlZCBpbiBqdXN0IG9uZSBwbGFjZSwgb3IgaXMgaXQgc2NhdHRlcmVkIHRocm91Z2hvdXQgdGhlIGNvZGUgYmFzZT8gVGhpcyB3aWxsIGRpY3RhdGUgd2hldGhlciBpdCBpcyBhIGdsb2JhbCBwYXJhbWV0ZXIgb3Igc3BlY2lmaWMgdG8gYSBzdWItcm91dGluZSBvZiB0aGUgcHJvZ3JhbS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUgcGF0aHMgdGhhdCAqZGVwZW5kKiBvbiB0aGlzIGBwZWVrX2hlYWRfbGVuYCB2YWx1ZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIGFueSBtb2RpZmljYXRpb25zIGFuZCBpdHMgb3ZlcmFsbCBwdXJwb3NlLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNvZGUgcGF0aHMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlZWtfaGVhZF9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9OTc0PXN0YXRpYyB2b2lkIGhhbmRsZV90eChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy05OTktXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDA6c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAwMS17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDIwLVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDIxOnN0YXRpYyBpbnQgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMjItXHRcdFx0XHQgICAgICBib29sICpidXN5bG9vcF9pbnRyLCB1bnNpZ25lZCBpbnQgKmNvdW50KVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAyNy1cdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR2cSA9IFx1MDAyNnRudnEtXHUwMDNldnE7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMjg6XHRpbnQgbGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMjktXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM2LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDM3Olx0XHRsZW4gPSBwZWVrX2hlYWRfbGVuKHJudnEsIHNrKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzOC1cdH1cbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTExNDA9c3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTExOTItXHRkbyB7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjExOTM6XHRcdHNvY2tfbGVuID0gdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4obmV0LCBzb2NrLVx1MDAzZXNrLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMTk0LVx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmJ1c3lsb29wX2ludHIsIFx1MDAyNmNvdW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQzNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgUnggQ2FsbCBDaGFpbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBoYW5kbGVfcnhgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHJlY2VpdmUgcGF0aCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiAgVGhlIGNhbGwgc3RhY2sgcHJlc2VudGVkIGlzIGEgbGl0dGxlIGNpcmN1bGFyOiBgaGFuZGxlX3J4YCBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW5gLCB3aGljaCBpbiB0dXJuLCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYGhhbmRsZV9yeGAuIFRoYXQmIzM5O3MgYSBiaXQgb2RkIC0gc2VlbXMgbGlrZSBzb21ldGhpbmcgbWlnaHQgYmUgbmVzdGVkLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgaGFuZGxlX3J4YCBpcyBwcm9iYWJseSBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBvciBzb21lIGFzeW5jaHJvbm91cyBleGVjdXRpb24gbWVjaGFuaXNtLiBJdCBuZWVkcyB0byBiZSwgZ2l2ZW4gdGhlIGNhbGwgc3RydWN0dXJlLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHByb2JhYmx5IHJ1bm5pbmcgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgaGVuY2UgdGhlIHJlY3Vyc2l2ZSBkZXNpZ24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoaXMgYXNzdW1wdGlvbiwgYnV0IEkmIzM5O20gcmVhc29uYWJseSBzdXJlIGl0IGlzIGEgd29ya3F1ZXVlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYW5kbGVfcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTA1Mz1zdGF0aWMgaW50IGdldF9yeF9idWZzKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEsXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMTM5LSAqIHJlYWQtc2l6ZSBjcml0aWNhbCBzZWN0aW9uIGZvciBvdXIga2luZCBvZiBSQ1UuICovXG5kcml2ZXJzL3Zob3N0L25ldC5jOjExNDA6c3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldClcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTE0MS17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xMjk3PXN0YXRpYyB2b2lkIGhhbmRsZV90eF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMwNS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMwNjpzdGF0aWMgdm9pZCBoYW5kbGVfcnhfa2ljayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMwNy17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzExLVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMzEyOlx0aGFuZGxlX3J4KG5ldCk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMTMtfVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTMxNT1zdGF0aWMgdm9pZCBoYW5kbGVfdHhfbmV0KHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMyMS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMyMjpzdGF0aWMgdm9pZCBoYW5kbGVfcnhfbmV0KHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzIzLXtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMjUtXHRcdFx0XHRcdCAgICAgcG9sbFtWSE9TVF9ORVRfVlFfUlhdLndvcmspO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxMzI2Olx0aGFuZGxlX3J4KG5ldCk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMjctfVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTMyOT1zdGF0aWMgaW50IHZob3N0X25ldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTM2OC1cdG4tXHUwMDNldnFzW1ZIT1NUX05FVF9WUV9UWF0udnEuaGFuZGxlX2tpY2sgPSBoYW5kbGVfdHhfa2ljaztcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTM2OTpcdG4tXHUwMDNldnFzW1ZIT1NUX05FVF9WUV9SWF0udnEuaGFuZGxlX2tpY2sgPSBoYW5kbGVfcnhfa2ljaztcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTM3MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFZIT1NUX05FVF9WUV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg3LVx0XHRcdHZxc1tWSE9TVF9ORVRfVlFfVFhdKTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTM4ODpcdHZob3N0X3BvbGxfaW5pdChuLVx1MDAzZXBvbGwgJiM0MzsgVkhPU1RfTkVUX1ZRX1JYLCBoYW5kbGVfcnhfbmV0LCBFUE9MTElOLCBkZXYsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzODktXHRcdFx0dnFzW1ZIT1NUX05FVF9WUV9SWF0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOgoKKipBbmFseXppbmcgRW50cnkgUG9pbnRzIGFuZCBQb3RlbnRpYWwgQXJlYXMgb2YgSW50ZXJlc3QqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBoYW5kbGVfcnhfa2lja2AgYW5kIGBoYW5kbGVfcnhfbmV0YC4gSSBzZWUgdGhleSYjMzk7cmUgc3RhdGljLCB3aGljaCBpcyB0eXBpY2FsIGZvciBlbnRyeSBwb2ludHMgdG8gdGhlc2Uga2luZHMgb2YgaGFuZGxlcnMuIEl0IG1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSB0aGUgaW5pdGlhbCBjb250YWN0IHBvaW50cyB3aXRoIHRoZSByZWxldmFudCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbW92ZSBiZXlvbmQgdGhvc2UuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIHRoYXQgY291bGQgYmUgd29ydGggZXhhbWluaW5nPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGZpbmQgaG9va3MgZm9yIHBvdGVudGlhbCBtYW5pcHVsYXRpb24gb3IgZXhwbG9yYXRpb24uCgpgdmhvc3RfbmV0X29wZW5gIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgbmV4dCB0aGluZyB0byBjaGVjaywgYnV0IGl0JiMzOTtzIGFsc28gc3RhdGljLCBhbmQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBmaWxlIG9wZW5pbmcgb3BlcmF0aW9ucy4gSXTigJlzIGxpa2VseSBhIHNldHVwIGZ1bmN0aW9uIGJ1dCBJJiMzOTtkIGtlZXAgYW4gZXllIG9uIGl0IHRvIGJlIHN1cmUuIE15IGF0dGVudGlvbiBpcyBub3cgb24gYHZob3N0X25ldF9pb2N0bGAuIElPQ1RMIG9wZXJhdGlvbnMgYXJlIG9mdGVuIG1vcmUgZHluYW1pYyBhbmQgZXhwb3NlIGEgbGFyZ2VyIGludGVyZmFjZSB0byB0aGUgdXNlciBhbmQga2VybmVsIHNwYWNlLiBJJiMzOTtkIG5lZWQgdG8gZXhhbWluZSB3aGF0IHBhcmFtZXRlcnMgaXQgZXhwZWN0cyBhbmQgd2hlcmUgaXQgcm91dGVzIHRoZW0uIFRoaXMgSU9DVEwgaXMgc3RhcnRpbmcgdG8gbG9vayBwcm9taXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xNzE3PXN0YXRpYyBsb25nIHZob3N0X25ldF9zZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbilcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3MzctXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE3Mzg6c3RhdGljIGxvbmcgdmhvc3RfbmV0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3MzktXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzEtXHQucG9sbCAgICAgICAgICAgPSB2aG9zdF9uZXRfY2hyX3BvbGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4NzI6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzMtXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk5NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgTmV0d29yayBWdWxuZXJhYmlsaXRpZXMgaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhhdCBgdmhvc3RfbmV0X2lvY3RsYCBmdW5jdGlvbuKApiB0aGF0IHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXJlYSBmb3IgaW52ZXN0aWdhdGlvbi4gSXQgb2Z0ZW4gZGVhbHMgd2l0aCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLCBhbmQgdGhvc2UgYXJlIGFsd2F5cyBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvcnMuIE5vdywgd2hhdCBhYm91dCBgdHVuX25ldF94bWl0YD8gSG1tLCBpbnRlcmVzdGluZy4gSXQmIzM5O3Mgc3RhdGljLCBzbyB0aGF0ICpsaW1pdHMqIGl0cyBkaXJlY3QgdnVsbmVyYWJpbGl0eSwgYnV0IGl0IGNvdWxkIHN0aWxsIGJlIHBhcnQgb2YgYSBsYXJnZXIsIGV4cGxvaXRhYmxlIGNoYWluLgoKT2theSwgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB0dW4uY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqbm90KiBzdGF0aWMuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hpY2ggb2YgdGhvc2UgZXhwb3NlZCBmdW5jdGlvbnMgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCBvciBjYWxsaW5nIGB0dW5fbmV0X3htaXRgLiBGaW5kaW5nIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIGB0dW5fbmV0X3htaXRgLCBvciBpbnRlcmFjdHMgd2l0aCB0aGUgc2FtZSBkYXRhIHN0cnVjdHVyZXMsIHdvdWxkIGJlIGEgbXVjaCBtb3JlIGludGVyZXN0aW5nIHBvaW50IHRvIGZvY3VzIG9uLCBhcyBpdCB3b3VsZCBjcmVhdGUgYSBsb25nZXIgYXR0YWNrIHN1cmZhY2UuIFRoYXQgc2hvdWxkIGhvcGVmdWxseSB1bmNvdmVyIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCB0byBtYW5pcHVsYXRpb24gb3IgY29tcHJvbWlzZS4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9NTQ2PXZvaWQgdHVuX3B0cl9mcmVlKHZvaWQgKnB0cilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy01NTctfVxuZHJpdmVycy9uZXQvdHVuLmM6NTU4OkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9wdHJfZnJlZSk7XG5kcml2ZXJzL25ldC90dW4uYy01NTktXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzcxMj1zdHJ1Y3Qgc29ja2V0ICp0dW5fZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNzIxLX1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3MjI6RVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF9zb2NrZXQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzcyMy1cbmRyaXZlcnMvbmV0L3R1bi5jPTM3MjQ9c3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzczNC19XG5kcml2ZXJzL25ldC90dW4uYzozNzM1OkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG5kcml2ZXJzL25ldC90dW4uYy0zNzM2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkZvY3VzaW5nIG9uIFRVTiBEZXZpY2UgSW50ZXJhY3Rpb25zKioKClJpZ2h0LCBzbyBgdHVuX2dldF90eF9yaW5nYCBpcyBleHBvc2VkLCB0aGF0JiMzOTtzIGltcG9ydGFudCwgYnV0IHdoYXQgSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIG9uLCBhdCBsZWFzdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGFuYWx5c2lzLCBhcmUgdGhlIGNvcmUgaW50ZXJhY3Rpb24gcG9pbnRzIHdpdGggdGhlIFRVTiBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCBvZiBkYXRhIGZsb3csIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGZvY3VzIG15IGF0dGVudGlvbiBvbiBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYW5kIGB0dW5fY2hyX2lvY3RsYC4gVGhlc2UgYXJlIGxpa2VseSB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIGRhdGEgaW5ncmVzcywgZWdyZXNzLCBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSwgcmlnaHQ/IFRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIEkgd2FudCB0byBpbnRlcnJvZ2F0ZSB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0zMDA4PXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMDQ1LVxuZHJpdmVycy9uZXQvdHVuLmM6MzA0NjpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25ldC90dW4uYy0zMDQ3LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTIyLVxuZHJpdmVycy9uZXQvdHVuLmM6MzEyMzpcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O3R1bl9jaHJfaW9jdGwgY21kICV1XFxuXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzEyNC1cbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMzM5LVxuZHJpdmVycy9uZXQvdHVuLmM6MzM0MDpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzM0MS1cdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtMzM0Mi17XG5kcml2ZXJzL25ldC90dW4uYzozMzQzOlx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNDQtfVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTMzNDc9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzM3MC1cdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzM3MTpcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XG5kcml2ZXJzL25ldC90dW4uYy0zMzcyLX1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNDY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzMtXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG5kcml2ZXJzL25ldC90dW4uYzozNDc0Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHR1bl9jaHJfaW9jdGwsXG5kcml2ZXJzL25ldC90dW4uYy0zNDc1LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzM4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFVOL1RBUCBEcml2ZXIgYW5kIFJpbmcgQnVmZmVyIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIHRoaXMgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24uIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQgb24gdGhlIGNhbGxpbmcgY29udGV4dHMgaGVyZS4gU28sIGlzIHRoZXJlIGFueXRoaW5nICpvdXRzaWRlKiB0aGUgbmV0d29yayBzdGFjayBpdHNlbGYgdGhhdCYjMzk7cyBjYWxsaW5nIHRoaXM/IE5vcGUsIGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBHb29kLiBUaGF0IG5hcnJvd3MgZG93biBteSBmb2N1cy4KCk5vdywgSSYjMzk7bGwgaG9uZSBpbiBvbiB0aGUgY2hhcmFjdGVyIGRldmljZSBlbnRyeSBwb2ludHM6IGB0dW5fY2hyX3JlYWRfaXRlcmAgYW5kIGB0dW5fY2hyX3dyaXRlX2l0ZXJgLiBUaG9zZSBhcmUga2V5LiBBbmQgZG9uJiMzOTt0IGZvcmdldCBgdmhvc3RfbmV0X2lvY3RsYCBhbmQgYHZob3N0X25ldF9vcGVuYCDigJMgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhvc2UgYXMgd2VsbCwgZ2l2ZW4gdGhlaXIgcmVsYXRpb25zaGlwIHRvIHZob3N0LgoKQWhhLCBob2xkIG9uIGEgc2VjLiBUaGlzIHBhdGNoIGlzIHRha2luZyBvdXQgYF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZWAgYW5kIHRoZW4gY2hhbmdpbmcgYF9fcHRyX3JpbmdfcHJvZHVjZWAgaW4gYGluY2x1ZGUvbGludXgvcHRyX3JpbmcuaGAuIFRoYXQmIzM5O3MgYSBjb3JlIGhlYWRlci4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhpcyBtZWFucyBjaGFuZ2VzIHRvIGEgZnVuZGFtZW50YWwgbG93LWxldmVsIGRhdGEgc3RydWN0dXJlLiBJIG5lZWQgdG8gYmUgKnZlcnkqIGNhcmVmdWwgaGVyZS4gT2theSwgbGV0JiMzOTtzIGZpbmQgb3V0IHdoZXJlIGVsc2UgdGhpcyBgX19wdHJfcmluZ19wcm9kdWNlYCBpcyB1c2VkLiBUaW1lIHRvIHNlZSB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHRvdWNoaW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcHRyX3JpbmdfcHJvZHVjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xMjA0PXN0YXRpYyBpbnQgdHVuX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEyMzctXG5kcml2ZXJzL25ldC90dW4uYzoxMjM4Olx0XHRpZiAoX19wdHJfcmluZ19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcsIGZyYW1lKSkge1xuZHJpdmVycy9uZXQvdHVuLmMtMTIzOS1cdFx0XHRkZXZfY29yZV9zdGF0c190eF9kcm9wcGVkX2luYyhkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3ZldGguYz01MDM9c3RhdGljIGludCB2ZXRoX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxuLS1cbmRyaXZlcnMvbmV0L3ZldGguYy01MzYtXHRcdGlmICh1bmxpa2VseSh4ZHBfZ2V0X2ZyYW1lX2xlbihmcmFtZSkgXHUwMDNlIG1heF9sZW4gfHxcbmRyaXZlcnMvbmV0L3ZldGguYzo1Mzc6XHRcdFx0ICAgICBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2cnEtXHUwMDNleGRwX3JpbmcsIHB0cikpKVxuZHJpdmVycy9uZXQvdmV0aC5jLTUzOC1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jPTU0Mj12b2lkIHdnX3BhY2tldF9yZWNlaXZlKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMtNTU1LVx0XHRcdGlmIChzcGluX3RyeWxvY2tfYmgoXHUwMDI2d2ctXHUwMDNlaGFuZHNoYWtlX3F1ZXVlLnJpbmcucHJvZHVjZXJfbG9jaykpIHtcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6NTU2Olx0XHRcdFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKFx1MDAyNndnLVx1MDAzZWhhbmRzaGFrZV9xdWV1ZS5yaW5nLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYy01NTctXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ3Zy1cdTAwM2VoYW5kc2hha2VfcXVldWUucmluZy5wcm9kdWNlcl9sb2NrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9ODg9c3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuLS1cbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xMDMtICovXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTA0OnN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xMDUte1xuLS1cbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaD0xMjQ9c3RhdGljIGlubGluZSBpbnQgcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTI4LVx0c3Bpbl9sb2NrKFx1MDAyNnItXHUwMDNlcHJvZHVjZXJfbG9jayk7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTI5Olx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTMwLVx0c3Bpbl91bmxvY2soXHUwMDI2ci1cdTAwM2Vwcm9kdWNlcl9sb2NrKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9MTM1PXN0YXRpYyBpbmxpbmUgaW50IHB0cl9yaW5nX3Byb2R1Y2VfaXJxKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKVxuLS1cbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xMzktXHRzcGluX2xvY2tfaXJxKFx1MDAyNnItXHUwMDNlcHJvZHVjZXJfbG9jayk7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTQwOlx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTQxLVx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnItXHUwMDNlcHJvZHVjZXJfbG9jayk7XG4tLVxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTE0Nj1zdGF0aWMgaW5saW5lIGludCBwdHJfcmluZ19wcm9kdWNlX2FueShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTUxLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ci1cdTAwM2Vwcm9kdWNlcl9sb2NrLCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTUyOlx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTUzLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZXByb2R1Y2VyX2xvY2ssIGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9MTU4PXN0YXRpYyBpbmxpbmUgaW50IHB0cl9yaW5nX3Byb2R1Y2VfYmgoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXG4tLVxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE2Mi1cdHNwaW5fbG9ja19iaChcdTAwMjZyLVx1MDAzZXByb2R1Y2VyX2xvY2spO1xuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oOjE2MzpcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShyLCBwdHIpO1xuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE2NC1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnItXHUwMDNlcHJvZHVjZXJfbG9jayk7XG4tLVxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTMwMT1zdGF0aWMgaW5saW5lIHZvaWQgKl9fcHRyX3JpbmdfY29uc3VtZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4tLVxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTMwNi1cdCAqIGFjY2Vzc2luZyBkYXRhIHRocm91Z2ggdGhlIHBvaW50ZXIgaXMgdXAgdG8gZGF0ZS4gUGFpcnNcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaDozMDc6XHQgKiB3aXRoIHNtcF93bWIgaW4gX19wdHJfcmluZ19wcm9kdWNlLlxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTMwOC1cdCAqL1xuLS1cbmtlcm5lbC9icGYvY3B1bWFwLmM9NzIzPXN0YXRpYyB2b2lkIGJxX2ZsdXNoX3RvX3F1ZXVlKHN0cnVjdCB4ZHBfYnVsa19xdWV1ZSAqYnEpXG4tLVxua2VybmVsL2JwZi9jcHVtYXAuYy03NDItXG5rZXJuZWwvYnBmL2NwdW1hcC5jOjc0MzpcdFx0ZXJyID0gX19wdHJfcmluZ19wcm9kdWNlKHEsIHhkcGYpO1xua2VybmVsL2JwZi9jcHVtYXAuYy03NDQtXHRcdGlmIChlcnIpIHtcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz03ODM9c3RhdGljIGJvb2wgcGFnZV9wb29sX3JlY3ljbGVfaW5fcmluZyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSlcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy03ODgtXHRpbl9zb2Z0aXJxID0gcGFnZV9wb29sX3Byb2R1Y2VyX2xvY2socG9vbCk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYzo3ODk6XHRyZXQgPSAhX19wdHJfcmluZ19wcm9kdWNlKFx1MDAyNnBvb2wtXHUwMDNlcmluZywgKF9fZm9yY2Ugdm9pZCAqKW5ldG1lbSk7XG5uZXQvY29yZS9wYWdlX3Bvb2wuYy03OTAtXHRpZiAocmV0KVxuLS1cbm5ldC9jb3JlL3BhZ2VfcG9vbC5jPTkyNj1zdGF0aWMgdm9pZCBwYWdlX3Bvb2xfcmVjeWNsZV9yaW5nX2J1bGsoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbi0tXG5uZXQvY29yZS9wYWdlX3Bvb2wuYy05MzYtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBidWxrX2xlbjsgaSYjNDM7JiM0MzspIHtcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jOjkzNzpcdFx0aWYgKF9fcHRyX3JpbmdfcHJvZHVjZShcdTAwMjZwb29sLVx1MDAzZXJpbmcsIChfX2ZvcmNlIHZvaWQgKilidWxrW2ldKSkge1xubmV0L2NvcmUvcGFnZV9wb29sLmMtOTM4LVx0XHRcdC8qIHJpbmcgZnVsbCAqL1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VfZnJhZy9wYWdlX2ZyYWdfdGVzdC5jPTc3PXN0YXRpYyBpbnQgcGFnZV9mcmFnX3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYy0xMDItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYzoxMDM6XHRcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShyaW5nLCB2YSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYy0xMDQtXHRcdGlmIChyZXQpIHtcbi0tXG50b29scy92aXJ0aW8vcmluZ3Rlc3QvcHRyX3JpbmcuYz0xMjg9aW50IGFkZF9pbmJ1Zih1bnNpZ25lZCBsZW4sIHZvaWQgKmJ1Ziwgdm9pZCAqZGF0YXApXG4tLVxudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmMtMTMxLVxudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmM6MTMyOlx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKFx1MDAyNmFycmF5LCBidWYpO1xudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmMtMTMzLVx0aWYgKHJldCBcdTAwM2U9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1OTEKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTaW1wbGlmeWluZyB0aGUgVFVOIERldmljZSBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFpbXMgdG8gc3RyZWFtbGluZSB0aGUgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24uIEl0JiMzOTtzIHJlYWxseSBqdXN0IGEgbWF0dGVyIG9mIGltcHJvdmluZyB0aGUgY29yZSBkYXRhIGZsb3csIG1ha2luZyB0aGluZ3MgYSBiaXQgY2xlYXJlciBhbmQgbW9yZSBlZmZpY2llbnQuIFRoZSBrZXkgY2hhbmdlIGlzIHN3YXBwaW5nIG91dCB0aGUgYF9fcHRyX3JpbmdfcHJvZHVjZWAgYW5kIGBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2VgIGNhbGxzIHdpdGggYSBzaW1wbGVyIGBwdHJfcmluZ19wcm9kdWNlYC4gSXQmIzM5O3MgYSBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgaW1wcm92ZW1lbnQsIHJlZHVjaW5nIHNvbWUgb2YgdGhlIGNvbXBsZXhpdHkgaW4gdGhhdCBmdW5jdGlvbi4KCkFkZGl0aW9uYWxseSwgSSBzZWUgaXQmIzM5O3MgYWxzbyByZW1vdmluZyB0aGUgYHR1bl93YWtlX3F1ZXVlYCBhbmQgYF9fdHVuX3dha2VfcXVldWVgIGZ1bmN0aW9ucy4gQWdhaW4sIHByb2JhYmx5IGEgY29uc29saWRhdGlvbiBvciByZWR1bmRhbmN5IGJlaW5nIGFkZHJlc3NlZC4gRnVuY3Rpb25hbGx5LCB0aGlzIHNlZW1zIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIGltcHJvdmVtZW50LCBubyBtYWpvciBjaGFuZ2VzIHRvIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoZSBjb25maWdzIGludm9sdmVkLiBJIHNlZSB0aGlzIHJlbGllcyBvbiBgVFVOYCBhbmQgYFZIT1NUX05FVGAuIEJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgVFVOYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLiBHb3R0YSBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBHb3R0YSBrZWVwIHRoYXQgY29uZmlnIGh5Z2llbmUgdXAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uIGJldHRlci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMzkxLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYXJlYSBwcm9iYWJseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgc2V0IG9mIGZlYXR1cmVzIG9yIG9wdGlvbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSBtYWRlLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZGlzc2VjdCBob3cgYSBwYXJ0aWN1bGFyIGFzcGVjdCBpcyBpbXBsZW1lbnRlZC4gQnkgbG9va2luZyBhdCB0aGUgS2NvbmZpZyBmaWxlLCBJIGNhbiBxdWlja2x5IGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdHJpc3RhdGUgb3B0aW9ucyByZWxldmFudCB0byB0aGlzIHNwZWNpZmljIGFyZWEgb2YgdGhlIG5ldHdvcmsgZHJpdmVyLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGRlc2lnbi4gSSBleHBlY3QgdG8gc2VlIGNvbmRpdGlvbmFscyBhbmQgb3B0aW9uIGNob2ljZXMgdGhhdCBkaWN0YXRlIHdoaWNoIHNwZWNpZmljIG5ldHdvcmsgY2FyZCB0eXBlcyBvciBmZWF0dXJlcyBhcmUgY29tcGlsZWQgaW50byB0aGUgZmluYWwga2VybmVsIGltYWdlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgdXNlci1zZWxlY3RhYmxlIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODU6XHRcbiAzODY6XHRjb25maWcgUklPTkVUX1JYX1NJWkVcbiAzODc6XHRcdGludCBcJiMzNDtOdW1iZXIgb2YgaW5ib3VuZCBxdWV1ZSBlbnRyaWVzXCYjMzQ7XG4gMzg4Olx0XHRkZXBlbmRzIG9uIFJJT05FVFxuIDM4OTpcdFx0ZGVmYXVsdCBcJiMzNDsxMjhcJiMzNDtcbiAzOTA6XHRcbiAzOTE6XHRjb25maWcgVFVOXG4gMzkyOlx0XHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiAzOTM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM5NDpcdFx0c2VsZWN0IENSQzMyXG4gMzk1Olx0XHRoZWxwXG4gMzk2Olx0XHQgIFRVTi9UQVAgcHJvdmlkZXMgcGFja2V0IHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uIGZvciB1c2VyIHNwYWNlXG4gMzk3Olx0XHQgIHByb2dyYW1zLiAgSXQgY2FuIGJlIHZpZXdlZCBhcyBhIHNpbXBsZSBQb2ludC10by1Qb2ludCBvciBFdGhlcm5ldFxuIDM5ODpcdFx0ICBkZXZpY2UsIHdoaWNoIGluc3RlYWQgb2YgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBhIHBoeXNpY2FsIG1lZGlhLFxuIDM5OTpcdFx0ICByZWNlaXZlcyB0aGVtIGZyb20gdXNlciBzcGFjZSBwcm9ncmFtIGFuZCBpbnN0ZWFkIG9mIHNlbmRpbmcgcGFja2V0c1xuIDQwMDpcdFx0ICB2aWEgcGh5c2ljYWwgbWVkaWEgd3JpdGVzIHRoZW0gdG8gdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbS5cbiA0MDE6XHRcbiA0MDI6XHRcdCAgV2hlbiBhIHByb2dyYW0gb3BlbnMgL2Rldi9uZXQvdHVuLCBkcml2ZXIgY3JlYXRlcyBhbmQgcmVnaXN0ZXJzXG4gNDAzOlx0XHQgIGNvcnJlc3BvbmRpbmcgbmV0IGRldmljZSB0dW5YIG9yIHRhcFguICBBZnRlciBhIHByb2dyYW0gY2xvc2VkIGFib3ZlXG4gNDA0Olx0XHQgIGRldmljZXMsIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIHR1blhYIG9yIHRhcFhYIGRldmljZSBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gYFRVTmAgaXMgZGVmaW5pdGVseSByZWxpYW50IG9uIGBJTkVUYC4gVGhhdCBtdWNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBgVkhPU1RfTkVUYCBmaXRzIGludG8gdGhpcyB3aG9sZSBhcmNoaXRlY3R1cmUuIExldCBtZSBkaWcgaW50byBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgb3IgaWYgaXQgaGFzIGFueXRoaW5nIHVuZXhwZWN0ZWQgdG8gY29udHJpYnV0ZSB0byB0aGUgbWl4LiBVbmRlcnN0YW5kaW5nIHRoaXMgcmVsYXRpb25zaGlwIGlzIGtleSB0byBhIHJvYnVzdCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdGRlZmF1bHQgeVxuICAzMTpcdFxuICAzMjpcdGlmIFZIT1NUX01FTlVcbiAgMzM6XHRcbiAgMzQ6XHRjb25maWcgVkhPU1RfTkVUXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFwmIzM0O1xuICAzNjpcdFx0ZGVwZW5kcyBvbiBORVQgXHUwMDI2XHUwMDI2IEVWRU5URkQgXHUwMDI2XHUwMDI2IChUVU4gfHwgIVRVTikgXHUwMDI2XHUwMDI2IChUQVAgfHwgIVRBUClcbiAgMzc6XHRcdHNlbGVjdCBWSE9TVFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBUaGlzIGtlcm5lbCBtb2R1bGUgY2FuIGJlIGxvYWRlZCBpbiBob3N0IGtlcm5lbCB0byBhY2NlbGVyYXRlXG4gIDQwOlx0XHQgIGd1ZXN0IG5ldHdvcmtpbmcgd2l0aCB2aXJ0aW9fbmV0LiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB2aXJ0aW9fbmV0XG4gIDQxOlx0XHQgIG1vZHVsZSBpdHNlbGYgd2hpY2ggbmVlZHMgdG8gYmUgbG9hZGVkIGluIGd1ZXN0IGtlcm5lbC5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXG4gIDQ0Olx0XHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIFZIT1NUX1NDU0lcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNDk6XHRcdHNlbGVjdCBWSE9TVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTW9kdWxlIFN5bWJvbCBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBtb2R1bGVzIGFuZCBmaWd1cmluZyBvdXQgd2hpY2ggc3ltYm9scyBhcmUgaW1wb3J0YW50LCBwYXJ0aWN1bGFybHkgZm9yIGBWSE9TVF9ORVRgLiAgVGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgYE5FVGAsIGBFVkVOVEZEYCwgYW5kIHRoZW4gYSBjaG9pY2UgYmV0d2VlbiBgVFVOYCBvciBub3QgYFRVTmAsIGFuZCBgVEFQYCBvciBub3QgYFRBUGAuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFZIT1NUX05FVGAsIHRoZW4gYFRVTmAgbG9va3MgbGlrZSB0aGUgcmlnaHQgY2hvaWNlIGhlcmUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzIHRoZW1zZWx2ZXMsIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmZhY2UgZW50cnkgcG9pbnRzLiBJJiMzOTttIGNoZWNraW5nIHRoZSBgdHVuLmNgIGZpbGUgYW5kIEkgc2VlOiBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgLCBhbmQgY3J1Y2lhbGx5LCBgdHVuX25ldF94bWl0YC4gSW4gYG5ldC5jYCwgSSBzcG90OiBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X25ldF9vcGVuYCwgYW5kIGB2aG9zdF9uZXRfcmVsZWFzZWAuCgpJIHdhcyBzbGlnaHRseSBjb25jZXJuZWQgYWJvdXQgYHR1bl9uZXRfeG1pdGAgYmVpbmcgc3RhdGljLCBidXQgdGhhdCYjMzk7cyBhIGtleSBuZXR3b3JrIGVudHJ5IHBvaW50LiBSZW1lbWJlcmluZyB0aGUgZ3VpZGVsaW5lcywgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQsIGFzIHN0YXRpYyBmdW5jdGlvbnMgbWlnaHQgYmUgaW5saW5lZC4gQnV0IHdhaXQsIGB0dW5fbmV0X3htaXRgIGlzIGFzc2lnbmVkIHRvIGBuZG9fc3RhcnRfeG1pdGAuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IGlubGluZWQgYW5kIGl0JiMzOTtzIGEgY2FsbGJhY2s7IGdyZWF0LCBpdCYjMzk7cyBmaW5lIHRvIGxpc3QgaXQuIGB0dW5fY2hyX3JlYWRfaXRlcmAgaXMgYXNzaWduZWQgdG8gYHJlYWRfaXRlcmAsIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGB3cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgIGlzIGFzc2lnbmVkIHRvIGB1bmxvY2tlZF9pb2N0bGAsIGB2aG9zdF9uZXRfaW9jdGxgIGlzIGFzc2lnbmVkIHRvIGB1bmxvY2tlZF9pb2N0bGAgYW5kIGB2aG9zdF9uZXRfb3BlbmAgaXMgYXNzaWduZWQgdG8gYG9wZW5gLiBBbGwgZ29vZCEgVGhlc2UgbG9vayBsaWtlIHRoZSBjb3JyZWN0IHN5bWJvbHMgdG8gY2hlY2suICBGaW5hbGx5LCBhIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0gYHR1bl9uZXRfeG1pdGAgaXMgYWN0dWFsbHkgdGhlcmUsIGJ1dCB0aGF0IHNob3VsZCBiZSBhIGdpdmVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz05OTA9c3RhdGljIHVuc2lnbmVkIGludCBydW5fZWJwZl9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMDAyLS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTAwMzpzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0xMDA0LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHVuX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTE4Ny1cdC5uZG9fc3RvcFx0XHQ9IHR1bl9uZXRfY2xvc2UsXG5kcml2ZXJzL25ldC90dW4uYzoxMTg4Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gdHVuX25ldF94bWl0LFxuZHJpdmVycy9uZXQvdHVuLmMtMTE4OS1cdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjcxLVx0Lm5kb19zdG9wXHRcdD0gdHVuX25ldF9jbG9zZSxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyNzI6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSB0dW5fbmV0X3htaXQsXG5kcml2ZXJzL25ldC90dW4uYy0xMjczLVx0Lm5kb19maXhfZmVhdHVyZXNcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIEtlcm5lbCBNb2R1bGUgSW50ZXJmYWNlKioKCkFscmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgdHVuX25ldF94bWl0YCBpcyBpbmRlZWQgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIG1vZHVsZSwgbm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJmYWNlIGhhbmRsZXMgdHJhZmZpYywgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlIGRhdGEgaXMgYmVpbmcgY29uc3VtZWQuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gYHR1bl9jaHJfcmVhZF9pdGVyYC4gSSYjMzk7bSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLCB0byBzZWUgdGhlIGJlaGF2aW9yIHdoZW4gdHJhbnNtaXR0aW5nIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfcmVhZF9pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjE2MD1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTYtXG5kcml2ZXJzL25ldC90dW4uYzoyMTk3OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTgte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0Njk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XG5kcml2ZXJzL25ldC90dW4uYy0zNDcwLVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ3MTpcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXG5kcml2ZXJzL25ldC90dW4uYy0zNDcyLVx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzM5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzOgoKKipDaGVja2luZyBUdW4gRGV2aWNlIEl0ZXJhdG9ycyoqCgpBbHJpZ2h0LCBzbyBJIGtub3cgYHR1bl9jaHJfcmVhZF9pdGVyYCBpcyBhIGxlZ2l0aW1hdGUgZnVuY3Rpb24sIG5vIHByb2JsZW0gdGhlcmUuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIG15IG1lbnRhbCBjaGVja2xpc3QgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBhbmQgcG90ZW50aWFsbHkgdGhlIG5hdHVyZSBvZiBpdHMgY291bnRlcnBhcnQuIEkgbmVlZCB0byBub3cgY2hlY2sgdGhlIGB0dW5fY2hyX3dyaXRlX2l0ZXJgIGZ1bmN0aW9uLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHdlJiMzOTtyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBUVU4gZGV2aWNlLCBhbmQgdGhlIHdyaXRlIGl0ZXJhdGlvbiBtZWNoYW5pc20gaXMgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGF0LiBLbm93aW5nIHdoYXQgaXQgZG9lcyBpcyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfd3JpdGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTE2OTU9c3RhdGljIHNzaXplX3QgdHVuX2dldF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTk4Ni1cbmRyaXZlcnMvbmV0L3R1bi5jOjE5ODc6c3RhdGljIHNzaXplX3QgdHVuX2Nocl93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuZHJpdmVycy9uZXQvdHVuLmMtMTk4OC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzQ2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dW5fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDcxLVx0LnJlYWRfaXRlciAgPSB0dW5fY2hyX3JlYWRfaXRlcixcbmRyaXZlcnMvbmV0L3R1bi5jOjM0NzI6XHQud3JpdGVfaXRlciA9IHR1bl9jaHJfd3JpdGVfaXRlcixcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzMtXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTY3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGB0dW5gIGFuZCBwb3RlbnRpYWxseSB2aXJ0dWFsIGhvc3RpbmcuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgdG8gbWluZCBpcywgKnllcyosIEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgZW5jb3VudGVyZWQgYHR1bl9jaHJfd3JpdGVfaXRlcmAgYmVmb3JlLiBMZXQgbWUgbWVudGFsbHkgdmVyaWZ5IGl0cyBleGlzdGVuY2UuLi4gKll1cCwgaXQmIzM5O3MgdGhlcmUqLiBOb3csIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgYnJvYWRlciBjb250ZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSB2aXJ0dWFsIGhvc3QgbmV0d29ya2luZyBjb21wb25lbnRzLiBUaGF0IG1lYW5zIG15IG5leHQgbW92ZSBpcyB0byBkaWcgaW50byBgdmhvc3RfbmV0X2lvY3RsYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE3MTc9c3RhdGljIGxvbmcgdmhvc3RfbmV0X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfbmV0ICpuKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTczNy1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTczODpzdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTczOS1cdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg3MS1cdC5wb2xsICAgICAgICAgICA9IHZob3N0X25ldF9jaHJfcG9sbCxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3MjpcdC51bmxvY2tlZF9pb2N0bCA9IHZob3N0X25ldF9pb2N0bCxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg3My1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjExCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgTmV0d29yayBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBwcmV0dHkgc3VyZSBgdmhvc3RfbmV0X2lvY3RsYCBpcyBhIHRoaW5nLiBUaW1lIHRvIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZS4gKkNoZWNrcyB0aGUgY29kZWJhc2UsIHF1aWNrIGFuZCBlZmZpY2llbnQgYXMgYWx3YXlzKi4uLiBZdXAsIGl0JiMzOTtzIHRoZXJlLiBHb29kLiBOb3csIHRoYXQgZ2l2ZXMgbWUgYSBqdW1waW5nLW9mZiBwb2ludC4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCBob3cgd2UgKmdldCogdG8gdGhhdCBpb2N0bCBpbiB0aGUgZmlyc3QgcGxhY2UuIEkgbmVlZCB0byB0cmFjZSB0aGUgcGF0aCwgdGhlIGVudHJ5IHBvaW50LiBUaGF0IGxpa2VseSBtZWFucyBleGFtaW5pbmcgYHZob3N0X25ldF9vcGVuYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGUgY29udGV4dCBhcm91bmQgaXRzIHVzZS4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfbmV0X29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9MTMyMj1zdGF0aWMgdm9pZCBoYW5kbGVfcnhfbmV0KHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMyOC1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMyOTpzdGF0aWMgaW50IHZob3N0X25ldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzMwLXtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xODczLVx0LmNvbXBhdF9pb2N0bCAgID0gY29tcGF0X3B0cl9pb2N0bCxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3NDpcdC5vcGVuICAgICAgICAgICA9IHZob3N0X25ldF9vcGVuLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODc1LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNb2R1bGUgSW50ZXJhY3Rpb24gLSBRdWljayBDaGVjayoqCgpSaWdodCwgc28gYHZob3N0X25ldF9vcGVuYCBpcyBkZWZpbml0ZWx5IGEgdGhpbmcuIEkgcmVtZW1iZXIgc2VlaW5nIHRoYXQgb25lLiBOb3csIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbiB0aGUgd2VlZHMsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBoYXBwZW5zIG9uIHRoZSBvdGhlciBlbmQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbXBhbmlvbiBmdW5jdGlvbjogYHZob3N0X25ldF9yZWxlYXNlYC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZSBvYnZpb3VzIGludGVyYWN0aW9uIHBvaW50IG9yIHJhY2UgY29uZGl0aW9uLiBDaGVja2luZyB0aGUgcmVsZWFzZSBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIGNvZGUsIHNvIEkgY2FuIHRoaW5rIHRocm91Z2ggdGhlIGludGVyYWN0aW9ucyBhbmQgcmVzb3VyY2VzIGNvcnJlY3RseS4gTm8gcG9pbnQgZGl2aW5nIHRvbyBkZWVwbHkgaW50byBvcGVuIHdpdGhvdXQgdW5kZXJzdGFuZGluZyBob3cgd2UgY2xlYW4gdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDA2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X25ldF9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE0MjE9c3RhdGljIHZvaWQgdmhvc3RfbmV0X2ZsdXNoKHN0cnVjdCB2aG9zdF9uZXQgKm4pXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNDM2LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxNDM3OnN0YXRpYyBpbnQgdmhvc3RfbmV0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE0Mzgte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg2Ny1cdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODY4Olx0LnJlbGVhc2UgICAgICAgID0gdmhvc3RfbmV0X3JlbGVhc2UsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NjktXHQucmVhZF9pdGVyICAgICAgPSB2aG9zdF9uZXRfY2hyX3JlYWRfaXRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMDY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdmhvc3RfbmV0IFJlbGF0ZWQgUmVsZWFzZSBhbmQgSXRlcmF0b3JzKioKCkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGNlbnRlcnMgYXJvdW5kIHRoZSBgdmhvc3RfbmV0YCBtb2R1bGUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgY29uZmlybWluZyB0aGF0IGB2aG9zdF9uZXRfcmVsZWFzZWAgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGF0IG1vZHVsZS4gR29vZCwgaXQmIzM5O3MgdGhlcmUuIFRoYXQmIzM5O3MgYSBmb3VuZGF0aW9uYWwgcGllY2UgY29uZmlybWVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHBhcnRpY3VsYXJseSB0aGUgY2hhcmFjdGVyIGRldmljZSBpbnRlcmFjdGlvbnMuIFNvLCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSByZWFkIGFuZCB3cml0ZSBpdGVyYXRvcnMuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gYWNyb3NzIGB2aG9zdF9uZXRfY2hyX3JlYWRfaXRlcmAgYW5kIGB2aG9zdF9uZXRfY2hyX3dyaXRlX2l0ZXJgLiBUaGV5JiMzOTtyZSB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBpbnZvbHZlZCBpbiB0cmFuc2ZlcnJpbmcgZGF0YSB0byBhbmQgZnJvbSB0aGUgY2hhcmFjdGVyIGRldmljZSB1c2VkIGJ5IHZob3N0LW5ldC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZnVuY3Rpb25zIGhhbmRsZSB0aGUgaXRlcmF0aW9uIGFuZCBkYXRhIGJ1ZmZlcmluZywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgdmlydGlvIG5ldHdvcmsgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBoYW5kbGluZyBlcnJvciBjYXNlcyBhbmQgZGF0YSB0cmFuc2ZlcnMsIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZ3Vlc3QgVk1zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGl0ZXJhdG9ycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9uZXRfY2hyX3JlYWRfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xNzM4PXN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTgzNy1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTgzODpzdGF0aWMgc3NpemVfdCB2aG9zdF9uZXRfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4Mzkte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NjgtXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9uZXRfcmVsZWFzZSxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg2OTpcdC5yZWFkX2l0ZXIgICAgICA9IHZob3N0X25ldF9jaHJfcmVhZF9pdGVyLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODcwLVx0LndyaXRlX2l0ZXIgICAgID0gdmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA1MAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0IGFuZCBUZXN0aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhbHRlcmluZyB0aGUgcXVldWUgd2FraW5nIGxvZ2ljIGluIHRoZSBUVU4gZHJpdmVyIGJhc2VkIG9uIGBjb25zX2NudGAsIHNpbXBsaWZ5aW5nIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBtZWFucyB0aGUgY3JpdGljYWwgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gdGhlc2UgdHdvIGNvbXBvbmVudHMgYXJlIGJlaW5nIG1vZGlmaWVkLgoKVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4KCkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBmb3IgcmVncmVzc2lvbnMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3Mgd2l0aGluIHRoYXQgcXVldWUgd2FraW5nIG1lY2hhbmlzbS4gVGhlIGZvY3VzIHN5bWJvbHMgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmc6IGB0dW5fbmV0X3htaXRgLCBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X25ldF9vcGVuYCwgYHZob3N0X25ldF9jaHJfcmVhZF9pdGVyYCwgYW5kIGB2aG9zdF9uZXRfY2hyX3dyaXRlX2l0ZXJgLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBmdXp6aW5nIHRhcmdldHMgdGhlc2UgcGF0aHMgc3BlY2lmaWNhbGx5LgoKUmVnYXJkaW5nIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMsIEkgbmVlZCBgVFVOYCBhbmQgYFZIT1NUX05FVGAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjbGVhciwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgVkhPU1RfTkVUYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gQWxyaWdodCwgaXQgc2VsZWN0cyBgVkhPU1RgLCBhbmQgYFZIT1NUX01FTlVgIGlzIGp1c3QgYSBtZW51Y29uZmlnIG9wdGlvbi4gR29vZC4KCkkmIzM5O20gY29uZmlkZW50IGluIHRob3NlIGNvbmZpZ3VyYXRpb25zLiBOb3csIEkmIzM5O2xsIHJ1biB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGdlbmVyYXRlIHRoZSBiYXNlbGluZSBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9uZXRfeG1pdCYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgZXhwbGljaXQgcXVldWUgd2FraW5nIGxvZ2ljIGJhc2VkIG9uIGBjb25zX2NudGAgaW4gdGhlIFRVTiBkcml2ZXIgYW5kIHNpbXBsaWZpZXMgdGhlIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gcGF0aHMgYmV0d2VlbiBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzIG9jY3VyIGluIHRoZSBxdWV1ZSB3YWtpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX2Nocl93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9jaHJfd3JpdGVfaXRlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGV4cGxpY2l0IHF1ZXVlIHdha2luZyBsb2dpYyBiYXNlZCBvbiBgY29uc19jbnRgIGluIHRoZSBUVU4gZHJpdmVyIGFuZCBzaW1wbGlmaWVzIHRoZSByaW5nIGNvbnN1bXB0aW9uIGluIGJvdGggVFVOIGFuZCB2aG9zdC1uZXQuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gVFVOIGFuZCB2aG9zdC1uZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ciBpbiB0aGUgcXVldWUgd2FraW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NDcuNDgyNDE1Nzk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNDMxMTc4MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVkhPU1RfTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX25ldF94bWl0XCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX2Nocl93cml0ZV9pdGVyXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9vcGVuXCIsXG4gICAgXCJ2aG9zdF9uZXRfY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBleHBsaWNpdCBxdWV1ZSB3YWtpbmcgbG9naWMgYmFzZWQgb24gYGNvbnNfY250YCBpbiB0aGUgVFVOIGRyaXZlciBhbmQgc2ltcGxpZmllcyB0aGUgcmluZyBjb25zdW1wdGlvbiBpbiBib3RoIFRVTiBhbmQgdmhvc3QtbmV0LiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBwYXRocyBiZXR3ZWVuIFRVTiBhbmQgdmhvc3QtbmV0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIgaW4gdGhlIHF1ZXVlIHdha2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NDcuNDgyNDIyMDc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ1MDM3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5MjYwYzlhMjhlMjU4MjhiOTE0YTUzODY3OGMwODFlNGViODczZGI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDA2OjM1OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5pbmRleCBmZmJlNmYxM2ZiMWZhLi5mZWQ5ZGZkZmNjM2JjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXFxuKysrIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5AQCAtMTQ1LDggKzE0NSw2IEBAIHN0cnVjdCB0dW5fZmlsZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbmV4dDtcXG4gXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkO1xcbiBcXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcXG4tXFx0LyogUHJvdGVjdGVkIGJ5IHR4X3JpbmcuY29uc3VtZXJfbG9jayAqL1xcbi1cXHRpbnQgY29uc19jbnQ7XFxuIFxcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcXG4gfTtcXG4gXFxuQEAgLTU5MCwxMyArNTg4LDggQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXFx1MDAzZXRmaWxlc1tpbmRleF0sXFxuIFxcdFxcdFxcdFxcdCAgIHR1bi1cXHUwMDNldGZpbGVzW3R1bi1cXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xcbiBcXHRcXHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2luZGV4XSk7XFxuLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHRcXHRudGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4ID0gaW5kZXg7XFxuIFxcdFxcdG50ZmlsZS1cXHUwMDNleGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4O1xcbi1cXHRcXHRudGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4tXFx0XFx0aWYgKF9fcHRyX3JpbmdfZW1wdHkoXFx1MDAyNm50ZmlsZS1cXHUwMDNldHhfcmluZykpXFxuLVxcdFxcdFxcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVxcdTAwM2VkZXYsIGluZGV4KTtcXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm50ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cXHUwMDNldGZpbGVzW3R1bi1cXHUwMDNlbnVtcXVldWVzIC0gMV0sXFxuIFxcdFxcdFxcdFxcdCAgIE5VTEwpO1xcbiBcXG5AQCAtNzM3LDkgKzczMCw2IEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuLVxcdHRmaWxlLVxcdTAwM2Vjb25zX2NudCA9IDA7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4gXFx0dGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4ID0gdHVuLVxcdTAwM2VudW1xdWV1ZXM7XFxuIFxcdHRmaWxlLVxcdTAwM2Vzb2NrZXQuc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjY9IH5SQ1ZfU0hVVERPV047XFxuIFxcbkBAIC0xMDE4LDcgKzEwMDgsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnF1ZXVlO1xcbiBcXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xcbiBcXHRpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxuLVxcdGludCByZXQ7XFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdHRmaWxlID0gcmN1X2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW3R4cV0pO1xcbkBAIC0xMDczLDMzICsxMDYyLDEzIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuIFxcbi1cXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xcbi1cXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4tXFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZywgc2tiKTtcXG4tXFx0aWYgKCFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xcbi1cXHRcXHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcXG4tXFx0XFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXFxuLVxcdFxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuLVxcdFxcdGlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykpXFxuLVxcdFxcdFxcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xcbi1cXHR9XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4tXFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0LyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgYSBxZGlzYyBpcyBwcmVzZW50LCBidXRcXG4tXFx0XFx0ICogY2FuIGhhcHBlbiBkdWUgdG8gbGx0eC5cXG4tXFx0XFx0ICogU2luY2Ugc2tiX3R4X3RpbWVzdGFtcCgpLCBza2Jfb3JwaGFuKCksXFxuLVxcdFxcdCAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkXFxuLVxcdFxcdCAqIHdpdGggdGhlIFNLQiwgcmV0dXJuaW5nIE5FVERFVl9UWF9CVVNZIGlzIHVuc2FmZSBhbmRcXG4tXFx0XFx0ICogd2UgbXVzdCBkcm9wIGluc3RlYWQuXFxuLVxcdFxcdCAqL1xcbitcXHRpZiAocHRyX3JpbmdfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcsIHNrYikpIHtcXG4gXFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HO1xcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGRldi1cXHUwMDNlbGx0eCByZXF1aXJlcyB0byBkbyBvdXIgb3duIHVwZGF0ZSBvZiB0cmFuc19zdGFydCAqL1xcbitcXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xcbiBcXHR0eHFfdHJhbnNfY29uZF91cGRhdGUocXVldWUpO1xcbiBcXG4gXFx0LyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovXFxuQEAgLTIxNDcsNDYgKzIxMTYsMTMgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuIFxcdHJldHVybiB0b3RhbDtcXG4gfVxcbiBcXG4tLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXFxuLXN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4tXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuLXtcXG4tXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0dGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4tXFxuLVxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cXG4tXFx0c21wX21iKCk7XFxuLVxcdGlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHtcXG4tXFx0XFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ICs9IGNvbnN1bWVkO1xcbi1cXHRcXHRpZiAodGZpbGUtXFx1MDAzZWNvbnNfY250IFxcdTAwM2U9IHRmaWxlLVxcdTAwM2V0eF9yaW5nLnNpemUgLyAyIHx8XFxuLVxcdFxcdCAgICBfX3B0cl9yaW5nX2VtcHR5KFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZykpIHtcXG4tXFx0XFx0XFx0bmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpO1xcbi1cXHRcXHRcXHR0ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4te1xcbi1cXHR2b2lkICpwdHI7XFxuLVxcbi1cXHRzcGluX2xvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbi1cXHRwdHIgPSBfX3B0cl9yaW5nX2NvbnN1bWUoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nKTtcXG4tXFx0aWYgKHB0cilcXG4tXFx0XFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcXG4tXFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4tXFx0cmV0dXJuIHB0cjtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tXFx0XFx0XFx0ICAgaW50IG5vYmxvY2ssIGludCAqZXJyKVxcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXFxuIHtcXG4gXFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XFxuIFxcdHZvaWQgKnB0ciA9IE5VTEw7XFxuIFxcdGludCBlcnJvciA9IDA7XFxuIFxcbi1cXHRwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpO1xcbitcXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZyk7XFxuIFxcdGlmIChwdHIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRpZiAobm9ibG9jaykge1xcbkBAIC0yMTk4LDcgKzIxMzQsNyBAQCBzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbiBcXG4gXFx0d2hpbGUgKDEpIHtcXG4gXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4tXFx0XFx0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcXG4rXFx0XFx0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpO1xcbiBcXHRcXHRpZiAocHRyKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuQEAgLTIyMzUsNyArMjE3MSw3IEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuIFxcbiBcXHRpZiAoIXB0cikge1xcbiBcXHRcXHQvKiBSZWFkIGZyYW1lcyBmcm9tIHJpbmcgKi9cXG4tXFx0XFx0cHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCBcXHUwMDI2ZXJyKTtcXG4rXFx0XFx0cHRyID0gdHVuX3JpbmdfcmVjdih0ZmlsZSwgbm9ibG9jaywgXFx1MDAyNmVycik7XFxuIFxcdFxcdGlmICghcHRyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTM2OTAsMTYgKzM2MjYsNiBAQCBzdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG4gXFx0XFx0XFx0XFx0XFx0ICBkZXYtXFx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICB0dW5fcHRyX2ZyZWUpO1xcbiBcXG4tXFx0aWYgKCFyZXQpIHtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4tXFx0XFx0XFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG4tXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4tXFx0XFx0XFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXFx1MDAzZWRldiwgdGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4tXFx0XFx0XFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4tXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuIFxcdGtmcmVlKHJpbmdzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0zODA4LDI5ICszNzM0LDYgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF90eF9yaW5nKTtcXG4gXFxuLS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbi12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXFxuLXtcXG4tXFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZTtcXG4tXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcXG4tXFxuLVxcdGlmIChmaWxlLVxcdTAwM2VmX29wICE9IFxcdTAwMjZ0dW5fZm9wcylcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0dGZpbGUgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuLVxcdGlmICghdGZpbGUpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFxuLVxcdHR1biA9IHJjdV9kZXJlZmVyZW5jZSh0ZmlsZS1cXHUwMDNldHVuKTtcXG4tXFx0aWYgKHR1bilcXG4tXFx0XFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XFxuLVxcbi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MX0dQTCh0dW5fd2FrZV9xdWV1ZSk7XFxuLVxcbiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7XFxuIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jXFxuaW5kZXggM2U3MmI5YzZhZjBjYS4uNjk0OWI3MDQxNjZkNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXFxuKysrIGIvZHJpdmVycy92aG9zdC9uZXQuY1xcbkBAIC0xNzYsMjEgKzE3NiwxMyBAQCBzdGF0aWMgdm9pZCAqdmhvc3RfbmV0X2J1Zl9jb25zdW1lKHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCBzb2NrICpzayxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuK3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuIHtcXG4tXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmaWxlO1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gXFx1MDAyNm52cS1cXHUwMDNlcnhxO1xcbiBcXG4gXFx0cnhxLVxcdTAwM2VoZWFkID0gMDtcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZudnEtXFx1MDAzZXJ4X3JpbmctXFx1MDAzZWNvbnN1bWVyX2xvY2spO1xcbi1cXHRyeHEtXFx1MDAzZXRhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXFx1MDAzZXJ4X3JpbmcsIHJ4cS1cXHUwMDNlcXVldWUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xcbi1cXG4tXFx0aWYgKHJ4cS1cXHUwMDNldGFpbClcXG4tXFx0XFx0dHVuX3dha2VfcXVldWUoZmlsZSwgcnhxLVxcdTAwM2V0YWlsKTtcXG4tXFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZudnEtXFx1MDAzZXJ4X3JpbmctXFx1MDAzZWNvbnN1bWVyX2xvY2spO1xcbitcXHRyeHEtXFx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVxcdTAwM2VyeF9yaW5nLCByeHEtXFx1MDAzZXF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xcbiBcXHRyZXR1cm4gcnhxLVxcdTAwM2V0YWlsO1xcbiB9XFxuIFxcbkBAIC0yMTcsMTUgKzIwOSwxNCBAQCBzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxcbiBcXHRyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxID0gXFx1MDAyNm52cS1cXHUwMDNlcnhxO1xcbiBcXG4gXFx0aWYgKCF2aG9zdF9uZXRfYnVmX2lzX2VtcHR5KHJ4cSkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc2ssIG52cSkpXFxuK1xcdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKG52cSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gb3V0OlxcbkBAIC0xMDEzLDcgKzEwMDQsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0aWYgKHJ2cS1cXHUwMDNlcnhfcmluZylcXG4tXFx0XFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhzaywgcnZxKTtcXG4rXFx0XFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhydnEpO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2ssIGZsYWdzKTtcXG4gXFx0aGVhZCA9IHNrYl9wZWVrKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXFxuaW5kZXggNWYzZTIwNmM3YTczNy4uODAxNjZlYjYyZjQxYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaFxcbkBAIC0yMiw3ICsyMiw2IEBAIHN0cnVjdCB0dW5fbXNnX2N0bCB7XFxuICNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpXFxuIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopO1xcbiBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuLXZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXFxuIHtcXG5AQCAtNTYsOCArNTUsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmKVxcbiBcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XFxuLVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXFxuIHtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcXG5pbmRleCBjOTVlODkxOTAzZjA1Li5kMmMzNjI5YmJlNDUxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxcbkBAIC05NiwyMCArOTYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRyX3JpbmdfZnVsbF9iaChzdHJ1Y3QgcHRyX3JpbmcgKnIpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuLS8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxcbi0gKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cXG4tICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXFxuLXtcXG4tXFx0aWYgKHVubGlrZWx5KCFyLVxcdTAwM2VzaXplKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRpZiAoZGF0YV9yYWNlKHItXFx1MDAzZXF1ZXVlW3ItXFx1MDAzZXByb2R1Y2VyXSkpXFxuLVxcdFxcdHJldHVybiAtRU5PU1BDO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxcbiAgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cXG4gICogQ2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHBvaW50ZXIgdGhhdCBpcyBiZWluZyBxdWV1ZWRcXG5AQCAtMTE3LDEwICsxMDMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyKVxcbiAgKi9cXG4gc3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKVxcbiB7XFxuLVxcdGludCBwID0gX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHIpO1xcbi1cXG4tXFx0aWYgKHApXFxuLVxcdFxcdHJldHVybiBwO1xcbitcXHRpZiAodW5saWtlbHkoIXItXFx1MDAzZXNpemUpIHx8IGRhdGFfcmFjZShyLVxcdTAwM2VxdWV1ZVtyLVxcdTAwM2Vwcm9kdWNlcl0pKVxcbitcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4gXFxuIFxcdC8qIE1ha2Ugc3VyZSB0aGUgcG9pbnRlciB3ZSBhcmUgc3RvcmluZyBwb2ludHMgdG8gYSB2YWxpZCBkYXRhLiAqL1xcbiBcXHQvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NDcuOTc3NTE0ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTE5MzYwMTIwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fbmV0X3htaXRcIixcbiAgICBcInR1bl9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ0dW5fY2hyX3dyaXRlX2l0ZXJcIixcbiAgICBcInR1bl9jaHJfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X29wZW5cIixcbiAgICBcInZob3N0X25ldF9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ2aG9zdF9uZXRfY2hyX3dyaXRlX2l0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIGV4cGxpY2l0IHF1ZXVlIHdha2luZyBsb2dpYyBiYXNlZCBvbiBgY29uc19jbnRgIGluIHRoZSBUVU4gZHJpdmVyIGFuZCBzaW1wbGlmaWVzIHRoZSByaW5nIGNvbnN1bXB0aW9uIGluIGJvdGggVFVOIGFuZCB2aG9zdC1uZXQuIEl0IG1vZGlmaWVzIGNvcmUgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gVFVOIGFuZCB2aG9zdC1uZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ciBpbiB0aGUgcXVldWUgd2FraW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5MjYwYzlhMjhlMjU4MjhiOTE0YTUzODY3OGMwODFlNGViODczZGI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjkgMDY6MzU6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCBmZmJlNmYxM2ZiMWZhLi5mZWQ5ZGZkZmNjM2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcbisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5AQCAtMTQ1LDggKzE0NSw2IEBAIHN0cnVjdCB0dW5fZmlsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqZGV0YWNoZWQ7XG4gXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcbi1cdC8qIFByb3RlY3RlZCBieSB0eF9yaW5nLmNvbnN1bWVyX2xvY2sgKi9cbi1cdGludCBjb25zX2NudDtcbiBcdHN0cnVjdCB4ZHBfcnhxX2luZm8geGRwX3J4cTtcbiB9O1xuIFxuQEAgLTU5MCwxMyArNTg4LDggQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXHUwMDNldGZpbGVzW2luZGV4XSxcbiBcdFx0XHRcdCAgIHR1bi1cdTAwM2V0ZmlsZXNbdHVuLVx1MDAzZW51bXF1ZXVlcyAtIDFdKTtcbiBcdFx0bnRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2luZGV4XSk7XG4tXHRcdHNwaW5fbG9jayhcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0bnRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4ID0gaW5kZXg7XG4gXHRcdG50ZmlsZS1cdTAwM2V4ZHBfcnhxLnF1ZXVlX2luZGV4ID0gaW5kZXg7XG4tXHRcdG50ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4tXHRcdGlmIChfX3B0cl9yaW5nX2VtcHR5KFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nKSlcbi1cdFx0XHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cdTAwM2VkZXYsIGluZGV4KTtcbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXHUwMDNldGZpbGVzW3R1bi1cdTAwM2VudW1xdWV1ZXMgLSAxXSxcbiBcdFx0XHRcdCAgIE5VTEwpO1xuIFxuQEAgLTczNyw5ICs3MzAsNiBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4tXHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0dGZpbGUtXHUwMDNlcXVldWVfaW5kZXggPSB0dW4tXHUwMDNlbnVtcXVldWVzO1xuIFx0dGZpbGUtXHUwMDNlc29ja2V0LnNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNj0gflJDVl9TSFVURE9XTjtcbiBcbkBAIC0xMDE4LDcgKzEwMDgsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZTtcbiBcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4gXHRpbnQgbGVuID0gc2tiLVx1MDAzZWxlbjtcbi1cdGludCByZXQ7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR0ZmlsZSA9IHJjdV9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW3R4cV0pO1xuQEAgLTEwNzMsMzMgKzEwNjIsMTMgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbi1cdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbi1cdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpO1xuLVx0aWYgKCFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xuLVx0XHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcbi1cdFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXG4tXHRcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4tXHRcdGlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpKVxuLVx0XHRcdG5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbi1cbi1cdGlmIChyZXQpIHtcbi1cdFx0LyogVGhpcyBzaG91bGQgYmUgYSByYXJlIGNhc2UgaWYgYSBxZGlzYyBpcyBwcmVzZW50LCBidXRcbi1cdFx0ICogY2FuIGhhcHBlbiBkdWUgdG8gbGx0eC5cbi1cdFx0ICogU2luY2Ugc2tiX3R4X3RpbWVzdGFtcCgpLCBza2Jfb3JwaGFuKCksXG4tXHRcdCAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkXG4tXHRcdCAqIHdpdGggdGhlIFNLQiwgcmV0dXJuaW5nIE5FVERFVl9UWF9CVVNZIGlzIHVuc2FmZSBhbmRcbi1cdFx0ICogd2UgbXVzdCBkcm9wIGluc3RlYWQuXG4tXHRcdCAqL1xuK1x0aWYgKHB0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKSkge1xuIFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7XG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbiBcdC8qIGRldi1cdTAwM2VsbHR4IHJlcXVpcmVzIHRvIGRvIG91ciBvd24gdXBkYXRlIG9mIHRyYW5zX3N0YXJ0ICovXG4rXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuIFx0dHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTtcbiBcbiBcdC8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqL1xuQEAgLTIxNDcsNDYgKzIxMTYsMTMgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4gXHRyZXR1cm4gdG90YWw7XG4gfVxuIFxuLS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuLXN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi1cdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZClcbi17XG4tXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcdFx0dGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuLVxuLVx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xuLVx0c21wX21iKCk7XG4tXHRpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7XG4tXHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ICs9IGNvbnN1bWVkO1xuLVx0XHRpZiAodGZpbGUtXHUwMDNlY29uc19jbnQgXHUwMDNlPSB0ZmlsZS1cdTAwM2V0eF9yaW5nLnNpemUgLyAyIHx8XG4tXHRcdCAgICBfX3B0cl9yaW5nX2VtcHR5KFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpKSB7XG4tXHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpO1xuLVx0XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbi1cdFx0fVxuLVx0fVxuLX1cbi1cbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuLXtcbi1cdHZvaWQgKnB0cjtcbi1cbi1cdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuLVx0cHRyID0gX19wdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuLVx0aWYgKHB0cilcbi1cdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcbi1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4tXHRyZXR1cm4gcHRyO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuLVx0XHRcdCAgIGludCBub2Jsb2NrLCBpbnQgKmVycilcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4ge1xuIFx0REVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7XG4gXHR2b2lkICpwdHIgPSBOVUxMO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4rXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuIFx0aWYgKHB0cilcbiBcdFx0Z290byBvdXQ7XG4gXHRpZiAobm9ibG9jaykge1xuQEAgLTIxOTgsNyArMjEzNCw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXG4gXG4gXHR3aGlsZSAoMSkge1xuIFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuLVx0XHRwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpO1xuK1x0XHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuIFx0XHRpZiAocHRyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbkBAIC0yMjM1LDcgKzIxNzEsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuIFxuIFx0aWYgKCFwdHIpIHtcbiBcdFx0LyogUmVhZCBmcmFtZXMgZnJvbSByaW5nICovXG4tXHRcdHB0ciA9IHR1bl9yaW5nX3JlY3YodHVuLCB0ZmlsZSwgbm9ibG9jaywgXHUwMDI2ZXJyKTtcbitcdFx0cHRyID0gdHVuX3JpbmdfcmVjdih0ZmlsZSwgbm9ibG9jaywgXHUwMDI2ZXJyKTtcbiBcdFx0aWYgKCFwdHIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zNjkwLDE2ICszNjI2LDYgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG4gXHRcdFx0XHRcdCAgZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRcdFx0ICB0dW5fcHRyX2ZyZWUpO1xuIFxuLVx0aWYgKCFyZXQpIHtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XG4tXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuLVx0XHRcdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuLVx0XHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuLVx0XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRrZnJlZShyaW5ncyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0zODA4LDI5ICszNzM0LDYgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4gXG4tLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4tdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuLXtcbi1cdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4tXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuLVxuLVx0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZ0dW5fZm9wcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0dGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdGlmICghdGZpbGUpXG4tXHRcdHJldHVybjtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHR1biA9IHJjdV9kZXJlZmVyZW5jZSh0ZmlsZS1cdTAwM2V0dW4pO1xuLVx0aWYgKHR1bilcbi1cdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG4tXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwodHVuX3dha2VfcXVldWUpO1xuLVxuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcbiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDNlNzJiOWM2YWYwY2EuLjY5NDliNzA0MTY2ZDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5AQCAtMTc2LDIxICsxNzYsMTMgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxuLVx0XHRcdFx0IHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiB7XG4tXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmaWxlO1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRyeHEtXHUwMDNlaGVhZCA9IDA7XG4tXHRzcGluX2xvY2soXHUwMDI2bnZxLVx1MDAzZXJ4X3JpbmctXHUwMDNlY29uc3VtZXJfbG9jayk7XG4tXHRyeHEtXHUwMDNldGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cdTAwM2VyeF9yaW5nLCByeHEtXHUwMDNlcXVldWUsXG4tXHRcdFx0XHRcdCAgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xuLVxuLVx0aWYgKHJ4cS1cdTAwM2V0YWlsKVxuLVx0XHR0dW5fd2FrZV9xdWV1ZShmaWxlLCByeHEtXHUwMDNldGFpbCk7XG4tXG4tXHRzcGluX3VubG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbitcdHJ4cS1cdTAwM2V0YWlsID0gcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cdTAwM2VyeF9yaW5nLCByeHEtXHUwMDNlcXVldWUsXG4rXHRcdFx0XHRcdCAgICAgIFZIT1NUX05FVF9CQVRDSCk7XG4gXHRyZXR1cm4gcnhxLVx1MDAzZXRhaWw7XG4gfVxuIFxuQEAgLTIxNywxNSArMjA5LDE0IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXG4gXHRyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuK3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcbitcdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKG52cSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIG91dDpcbkBAIC0xMDEzLDcgKzEwMDQsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmIChydnEtXHUwMDNlcnhfcmluZylcbi1cdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhzaywgcnZxKTtcbitcdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhydnEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gXHRoZWFkID0gc2tiX3BlZWsoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbmluZGV4IDVmM2UyMDZjN2E3MzcuLjgwMTY2ZWI2MmY0MWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5AQCAtMjIsNyArMjIsNiBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwge1xuICNpZiBkZWZpbmVkKENPTkZJR19UVU4pIHx8IGRlZmluZWQoQ09ORklHX1RVTl9NT0RVTEUpXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XG4gc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpO1xuLXZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxuIHtcbkBAIC01Niw4ICs1NSw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmYpXG4gXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XG4tXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmggYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbmluZGV4IGM5NWU4OTE5MDNmMDUuLmQyYzM2MjliYmU0NTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuQEAgLTk2LDIwICs5Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuLSAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXG4te1xuLVx0aWYgKHVubGlrZWx5KCFyLVx1MDAzZXNpemUpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4tXHRcdHJldHVybiAtRU5PU1BDO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuICAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBwb2ludGVyIHRoYXQgaXMgYmVpbmcgcXVldWVkXG5AQCAtMTE3LDEwICsxMDMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbiB7XG4tXHRpbnQgcCA9IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShyKTtcbi1cbi1cdGlmIChwKVxuLVx0XHRyZXR1cm4gcDtcbitcdGlmICh1bmxpa2VseSghci1cdTAwM2VzaXplKSB8fCBkYXRhX3JhY2Uoci1cdTAwM2VxdWV1ZVtyLVx1MDAzZXByb2R1Y2VyXSkpXG4rXHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0LyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM1OjQ3Ljk3NzUxNjM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU5NzQ2OTk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBUaGlzIHBhdGNoIHNlcmllcyBpcyBnb2luZyBhZnRlciBzb21lIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBUVU4gYW5kIHZob3N0IHN1YnN5c3RlbXMuIEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIGFuZCByZWxldmFudCBoZWFkZXIgZmlsZXMgKGBpbmNsdWRlL2xpbnV4L2lmX3R1bi5oYCwgYGluY2x1ZGUvbGludXgvcHRyX3JpbmcuaGApLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBwb3RlbnRpYWxseSBzaWduaWZpY2FudCwgc2luY2UgdGhlc2UgYXJlIGxvdy1sZXZlbCBjb21wb25lbnRzIGFuZCBhbnkgY2hhbmdlIGhlcmUgY291bGQgaGF2ZSBmYXItcmVhY2hpbmcgZWZmZWN0cywgc28gbGV0J3MgZGlnIGRlZXBlci5cblxuRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgc2VlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgY29uc19jbnRgIGZyb20gYHN0cnVjdCB0dW5fZmlsZWAsIHNpbXBsaWZ5aW5nIGB0dW5fbmV0X3htaXRgLCBhbmQgZ2V0dGluZyByaWQgb2Ygc29tZSB3YWtpbmcgZnVuY3Rpb25zOiBgX190dW5fd2FrZV9xdWV1ZWAsIGB0dW5fcmluZ19jb25zdW1lYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAuICBBbHNvLCBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBiZWluZyBhZGp1c3RlZCBzbyBpdCBubyBsb25nZXIgY2FsbHMgYHR1bl93YWtlX3F1ZXVlYCwgYW5kIGBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2VgIGlzIGdvbmUgZnJvbSBgaW5jbHVkZS9saW51eC9wdHJfcmluZy5oYC4gVGhpcyBpcyBhbGwgaW5kaWNhdGl2ZSBvZiBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCByZW1vdmluZyBleHBsaWNpdCBxdWV1ZSB3YWtpbmcgbG9naWMsIHByb2JhYmx5IHNpbXBsaWZ5aW5nIHRoZSByaW5nIGNvbnN1bXB0aW9uLiBUaGF0IG1lYW5zIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb25hbCByZWdyZXNzaW9ucyByZWxhdGVkIHRvIHF1ZXVlIG1hbmFnZW1lbnQsIGFzIHdlbGwgYXMgaWYgd2UgaGF2ZSBlbGltaW5hdGVkIGFueSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgd2l0aCB0aG9zZSBjaGFuZ2VzLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgcmVhY2hhYmxlIGdpdmVuIHRoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2hlcmUgVFVOL1RBUCBhbmQgdmhvc3QtbmV0IGFyZSBoZWF2aWx5IHJlbGllZCB1cG9uIHdpdGhpbiBRRU1VL0tWTS5cblxuTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1RVTmAgYW5kIGBDT05GSUdfVkhPU1RfTkVUYCBhcmUgc2V0IGNvcnJlY3RseS5cblxuT2theSwgbGV0J3Mgc2VhcmNoIGZvciB0aG9zZSBzeW1ib2xzIGluIHRoZSBLY29uZmlnLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBkZXBlbmRlbmNpZXMgb3IgaW1wbGljYXRpb25zIGFyZSBhbHJlYWR5IHdlbGwtZGVmaW5lZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNTo1NC41NzQ5ODg0OTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjUyODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUVU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00MTU9Y29uZmlnIFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MjE6Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY3Jvc3MtZW5kaWFuIHZuZXQgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIGtlcm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM1OjU0LjY4MDI1MDQyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODcyNzQyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFZpcnR1YWxpemF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHplcm8gaW4gb24gdGhpcyBgQ09ORklHX1ZIT1NUX05FVGAgc2V0dGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBDbGVhcmx5LCBpdCdzIHNvbWV0aGluZyBmdW5kYW1lbnRhbCB0byB0aGUgdmlydHVhbCBob3N0aW5nLCBzcGVjaWZpY2FsbHkgdGhlIG5ldHdvcmtpbmcgYXNwZWN0LiBBcyBhbiBleHBlcnQsIEknbSB3ZWxsIGF3YXJlIG9mIGhvdyB2aXJ0dWFsIGhvc3RzIHdvcmsuIFNvLCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSB2aXJ0dWFsaXplZCBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIG1heWJlIGl0J3MgdGhlIGNvcmUuIElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlIGxvb2tpbmc/IFVuZGVyc3RhbmRpbmcgaXRzIGNvbmZpZ3VyYXRpb24gaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NTcuNDY3NTI3MDQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDQzMDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzU6NTcuNTEyNTc4ODU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NjUxNzYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIGBWSE9TVF9NRU5VYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZXhhbWluZSB0aGUgYFZIT1NUX01FTlVgIHN0cnVjdHVyZSBvciBjb25maWd1cmF0aW9uLiBUaGlzIHNpZ25hbHMgYSB0YXJnZXRlZCB0cm91Ymxlc2hvb3RpbmcgYXBwcm9hY2gg4oCTIGNsZWFybHkgc29tZXRoaW5nIHdpdGhpbiB0aGUgdmlydHVhbCBob3N0IGNvbmZpZ3VyYXRpb24gaXRzZWxmIGlzIHN1c3BlY3RlZCBhcyB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSdtIHdvcmtpbmcgb24uIFRoZSBwcmVzZW5jZSBvZiBhIG1lbnUgc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IG9yIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIHJlbGF0ZWQgdG8gdmlydHVhbCBob3N0cywgbGlrZWx5IHdpdGhpbiBhIHdlYiBzZXJ2ZXIgb3IgYXBwbGljYXRpb24gZW52aXJvbm1lbnQuIEl0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpc3N1ZXMgaGVyZSBjYW4gcXVpY2tseSBjYXNjYWRlIGludG8gd2lkZXNwcmVhZCBwcm9ibGVtcyBpZiBhIHZpcnR1YWwgaG9zdCBpc24ndCBjb25maWd1cmVkIGNvcnJlY3RseSwgaXNuJ3QgbG9hZGluZywgb3IgaXMgbWlzaW50ZXJwcmV0aW5nIHJlcXVlc3RzLiBJdCdzIHRoZSBwb2ludCBvZiBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGdlbmVyYWwgc2VydmVyIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBpbmRpdmlkdWFsIHZpcnR1YWwgaW5zdGFuY2VzLiBUaGUgaW1wbGljYXRpb24gaXMgSSd2ZSBhbHJlYWR5IG1vdmVkIHBhc3QgYnJvYWRlciBkaWFnbm9zdGljcyBhbmQgYW0gaG9taW5nIGluIG9uIHRoZSBzcGVjaWZpYyB2aXJ0dWFsIGhvc3Qgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjowMC44NjkwOTkyNjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1NzczNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX01FTlVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0yMD1jb25maWcgVkhPU1RcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6Mjg6bWVudWNvbmZpZyBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIlZIT1NUIGRyaXZlcnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjAwLjkxNzY4NTgyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDc5NzMxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBFeHBsb3JhdGlvbiBvZiBUVU4gYW5kIFZIT1NUX05FVCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYFRVTmAgYW5kIGBWSE9TVF9ORVRgIGNvbmZpZ3VyYXRpb25zLCBhbmQgbXkgaW5pdGlhbCBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCBgZHJpdmVycy9uZXQvdHVuLmNgLCBJJ3ZlIGdvdCBteSBleWUgb24gdGhlc2U6IGB0dW5fbmV0X3htaXRgLCBgdHVuX3B1dF91c2VyYCwgYHR1bl9kb19yZWFkYCwgYHR1bl9xdWV1ZV9yZXNpemVgLCBhbmQgYHR1bl9nZXRfdHhfcmluZ2AuIFxuXG5UaGVuLCBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRoZSBvbmVzIHRoYXQgbG9vayByZWxldmFudCBhcmUgYHZob3N0X25ldF9idWZfcHJvZHVjZWAsIGB2aG9zdF9uZXRfYnVmX3BlZWtgLCBhbmQgYHBlZWtfaGVhZF9sZW5gLiBOb3csIGxldCdzIGp1c3QgY29uZmlybSBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIGlmIHRoZXkncmUgZXhwb3J0ZWQuIE9rYXksIGl0IGxvb2tzIGxpa2UgYHR1bl9uZXRfeG1pdGAgaXMgc3RhdGljLCBidXQgaW50ZXJlc3RpbmcsIGl0J3MgYXNzaWduZWQgdG8gYG5ldGRldl9vcHMtXHUwMDNlbmRvX3N0YXJ0X3htaXRgLiBgdHVuX3B1dF91c2VyYCwgYHR1bl9kb19yZWFkYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYCBhcmUgYWxzbyBzdGF0aWMuIGB0dW5fZ2V0X3R4X3JpbmdgIGlzIGV4cG9ydGVkLCB0aGF0J3MgaW1wb3J0YW50LiBcblxuSSdsbCBqdXN0IGNoZWNrIGB0dW5fY2hyX3JlYWRfaXRlcmAgc2luY2UgaXQgY2FsbHMgYHR1bl9kb19yZWFkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjowNy43NjU2NjI4ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MDMxMzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9jaHJfcmVhZF9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTIxNjA9c3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MjE5NzpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuZHJpdmVycy9uZXQvdHVuLmMtMjE5OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNDY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzAtXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25ldC90dW4uYzozNDcxOlxcdC5yZWFkX2l0ZXIgID0gdHVuX2Nocl9yZWFkX2l0ZXIsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3Mi1cXHQud3JpdGVfaXRlciA9IHR1bl9jaHJfd3JpdGVfaXRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6MDcuODYwNzAxOTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjE1OTQyNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipGb2N1c2luZyBJbiBvbiBOZXR3b3JrIFRyYW5zbWlzc2lvbioqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBoZXJlLiBgdHVuX2Nocl9yZWFkX2l0ZXJgIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgdG8gc3RhcnQgd2l0aC4gQnV0LCB3YWl0Li4uIHdoYXQgYWJvdXQgYHR1bl9uZXRfeG1pdGA/IEFoLCB5ZXMsIGl0J3MgdGllZCB0byBgbmRvX3N0YXJ0X3htaXRgISBUaGF0IGZlZWxzIG1vcmUgZGlyZWN0LCBhbmQgc2ltcGxlciB0byBmb2xsb3cuIExldCdzIGp1c3QgdXNlIGB0dW5fbmV0X3htaXRgIGZvciBub3cuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHZob3N0X25ldF9idWZfcHJvZHVjZWAgYW5kIGB2aG9zdF9uZXRfYnVmX3BlZWtgLiBUaG9zZSBhcmUgYm90aCBzdGF0aWMgZnVuY3Rpb25zLCBzbyB0aGVpciBzY29wZSBpcyBtb3JlIGxpbWl0ZWQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRob3NlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgaW52b2tlZC4gTGV0J3MgZ28gYW5kIHNlZSB3aGVyZSB0aGV5J3JlIGNhbGxlZCBmcm9tLiBUaGF0IHNob3VsZCBnaXZlIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjoxMS43MjIyOTg4MjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjgzNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9idWZfcGVla1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTg5PXN0YXRpYyB2b2lkIHZob3N0X25ldF9idWZfdW5wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIwMC1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjIwMTpzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjAyLXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjExLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjEyOnN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuZHJpdmVycy92aG9zdC9uZXQuYy0yMTMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0yMjItb3V0OlxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjIzOlxcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZob3N0X25ldF9idWZfZ2V0X3B0cihyeHEpKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyNC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTEwMDA9c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAwNi1cXHRpZiAocnZxLVxcdTAwM2VyeF9yaW5nKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAwNzpcXHRcXHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDA4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjoxMS43Njc1OTA1NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NDUxNzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBwZWVrX2hlYWRfbGVuYCoqXG5cbk9rYXksIHNvIGBwZWVrX2hlYWRfbGVuYC4uLiB0aGF0J3MgYSBzdGF0aWMgdmFsdWUsIHJpZ2h0PyBJdCdzIG5vdCBzb21ldGhpbmcgdGhhdCBjaGFuZ2VzIGR5bmFtaWNhbGx5LiBBbHJpZ2h0LCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGEgY29uZmlndXJhdGlvbiB2YWx1ZSwgYSBjb25zdGFudCB1c2VkIHNvbWV3aGVyZSBkZWVwIGluIHRoZSBsb2dpYy5cblxuVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiB3aGVyZSB0aGUgKmhlbGwqIGlzIHRoaXMgdGhpbmcgYmVpbmcgdXNlZD8gSXQncyBzdGF0aWNhbGx5IGRlZmluZWQsIGJ1dCB1bmRlcnN0YW5kaW5nIGl0cyBjb250ZXh0IGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzLiBJcyBpdCB1c2VkIGluIGp1c3Qgb25lIHBsYWNlLCBvciBpcyBpdCBzY2F0dGVyZWQgdGhyb3VnaG91dCB0aGUgY29kZSBiYXNlPyBUaGlzIHdpbGwgZGljdGF0ZSB3aGV0aGVyIGl0IGlzIGEgZ2xvYmFsIHBhcmFtZXRlciBvciBzcGVjaWZpYyB0byBhIHN1Yi1yb3V0aW5lIG9mIHRoZSBwcm9ncmFtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29kZSBwYXRocyB0aGF0ICpkZXBlbmQqIG9uIHRoaXMgYHBlZWtfaGVhZF9sZW5gIHZhbHVlIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgYW55IG1vZGlmaWNhdGlvbnMgYW5kIGl0cyBvdmVyYWxsIHB1cnBvc2UuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29kZSBwYXRocyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjE2LjA1MjExMDI4NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0NzAzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVla19oZWFkX2xlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9OTc0PXN0YXRpYyB2b2lkIGhhbmRsZV90eChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTk5OS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMDA6c3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMDEte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDIwLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAyMTpzdGF0aWMgaW50IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAyMi1cXHRcXHRcXHRcXHQgICAgICBib29sICpidXN5bG9vcF9pbnRyLCB1bnNpZ25lZCBpbnQgKmNvdW50KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDI3LVxcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnR2cSA9IFxcdTAwMjZ0bnZxLVxcdTAwM2V2cTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMjg6XFx0aW50IGxlbiA9IHBlZWtfaGVhZF9sZW4ocm52cSwgc2spO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAyOS1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAzNi1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEwMzc6XFx0XFx0bGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM4LVxcdH1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTE0MD1zdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHZob3N0X25ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMTkyLVxcdGRvIHtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjExOTM6XFx0XFx0c29ja19sZW4gPSB2aG9zdF9uZXRfcnhfcGVla19oZWFkX2xlbihuZXQsIHNvY2stXFx1MDAzZXNrLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTE5NC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YnVzeWxvb3BfaW50ciwgXFx1MDAyNmNvdW50KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6MTYuMTM5NTg2NjUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDExNTYwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUnggQ2FsbCBDaGFpbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaGFuZGxlX3J4YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIHBhcnQgb2YgdGhlIHJlY2VpdmUgcGF0aCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiAgVGhlIGNhbGwgc3RhY2sgcHJlc2VudGVkIGlzIGEgbGl0dGxlIGNpcmN1bGFyOiBgaGFuZGxlX3J4YCBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW5gLCB3aGljaCBpbiB0dXJuLCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYGhhbmRsZV9yeGAuIFRoYXQncyBhIGJpdCBvZGQgLSBzZWVtcyBsaWtlIHNvbWV0aGluZyBtaWdodCBiZSBuZXN0ZWQuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYGhhbmRsZV9yeGAgaXMgcHJvYmFibHkgYSB3b3JrcXVldWUgZnVuY3Rpb24gb3Igc29tZSBhc3luY2hyb25vdXMgZXhlY3V0aW9uIG1lY2hhbmlzbS4gSXQgbmVlZHMgdG8gYmUsIGdpdmVuIHRoZSBjYWxsIHN0cnVjdHVyZS4gSXQgc2VlbXMgbGlrZSBpdCdzIHByb2JhYmx5IHJ1bm5pbmcgaW4gYSBkaWZmZXJlbnQgY29udGV4dCwgaGVuY2UgdGhlIHJlY3Vyc2l2ZSBkZXNpZ24uIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLCBidXQgSSdtIHJlYXNvbmFibHkgc3VyZSBpdCBpcyBhIHdvcmtxdWV1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjE5LjU4MDc0NTU4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDc0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFuZGxlX3J4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0xMDUzPXN0YXRpYyBpbnQgZ2V0X3J4X2J1ZnMoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTEzOS0gKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqL1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTE0MDpzdGF0aWMgdm9pZCBoYW5kbGVfcngoc3RydWN0IHZob3N0X25ldCAqbmV0KVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTE0MS17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTEyOTc9c3RhdGljIHZvaWQgaGFuZGxlX3R4X2tpY2soc3RydWN0IHZob3N0X3dvcmsgKndvcmspXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMDUtXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxMzA2OnN0YXRpYyB2b2lkIGhhbmRsZV9yeF9raWNrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMwNy17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMTEtXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxMzEyOlxcdGhhbmRsZV9yeChuZXQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMxMy19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTEzMTU9c3RhdGljIHZvaWQgaGFuZGxlX3R4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMyMS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzMjI6c3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMjMte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzI1LVxcdFxcdFxcdFxcdFxcdCAgICAgcG9sbFtWSE9TVF9ORVRfVlFfUlhdLndvcmspO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMyNjpcXHRoYW5kbGVfcngobmV0KTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMjctfVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xMzI5PXN0YXRpYyBpbnQgdmhvc3RfbmV0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzNjgtXFx0bi1cXHUwMDNldnFzW1ZIT1NUX05FVF9WUV9UWF0udnEuaGFuZGxlX2tpY2sgPSBoYW5kbGVfdHhfa2ljaztcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzNjk6XFx0bi1cXHUwMDNldnFzW1ZIT1NUX05FVF9WUV9SWF0udnEuaGFuZGxlX2tpY2sgPSBoYW5kbGVfcnhfa2ljaztcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzNzAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFZIT1NUX05FVF9WUV9NQVg7IGkrKykge1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg3LVxcdFxcdFxcdHZxc1tWSE9TVF9ORVRfVlFfVFhdKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzODg6XFx0dmhvc3RfcG9sbF9pbml0KG4tXFx1MDAzZXBvbGwgKyBWSE9TVF9ORVRfVlFfUlgsIGhhbmRsZV9yeF9uZXQsIEVQT0xMSU4sIGRldixcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzODktXFx0XFx0XFx0dnFzW1ZIT1NUX05FVF9WUV9SWF0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjoxOS42Mjg3OTc2NjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMjAyNjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IEknZCBhcHByb2FjaCB0aGlzIHByb2JsZW06XG5cbioqQW5hbHl6aW5nIEVudHJ5IFBvaW50cyBhbmQgUG90ZW50aWFsIEFyZWFzIG9mIEludGVyZXN0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGhhbmRsZV9yeF9raWNrYCBhbmQgYGhhbmRsZV9yeF9uZXRgLiBJIHNlZSB0aGV5J3JlIHN0YXRpYywgd2hpY2ggaXMgdHlwaWNhbCBmb3IgZW50cnkgcG9pbnRzIHRvIHRoZXNlIGtpbmRzIG9mIGhhbmRsZXJzLiBJdCBtYWtlcyBzZW5zZSwgdGhleSdyZSB0aGUgaW5pdGlhbCBjb250YWN0IHBvaW50cyB3aXRoIHRoZSByZWxldmFudCBzdWJzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbW92ZSBiZXlvbmQgdGhvc2UuIEFyZSB0aGVyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXR3b3JraW5nIHRoYXQgY291bGQgYmUgd29ydGggZXhhbWluaW5nPyBUaGUgZ29hbCBoZXJlIGlzIHRvIGZpbmQgaG9va3MgZm9yIHBvdGVudGlhbCBtYW5pcHVsYXRpb24gb3IgZXhwbG9yYXRpb24uXG5cbmB2aG9zdF9uZXRfb3BlbmAgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBuZXh0IHRoaW5nIHRvIGNoZWNrLCBidXQgaXQncyBhbHNvIHN0YXRpYywgYW5kIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gZmlsZSBvcGVuaW5nIG9wZXJhdGlvbnMuIEl04oCZcyBsaWtlbHkgYSBzZXR1cCBmdW5jdGlvbiBidXQgSSdkIGtlZXAgYW4gZXllIG9uIGl0IHRvIGJlIHN1cmUuIE15IGF0dGVudGlvbiBpcyBub3cgb24gYHZob3N0X25ldF9pb2N0bGAuIElPQ1RMIG9wZXJhdGlvbnMgYXJlIG9mdGVuIG1vcmUgZHluYW1pYyBhbmQgZXhwb3NlIGEgbGFyZ2VyIGludGVyZmFjZSB0byB0aGUgdXNlciBhbmQga2VybmVsIHNwYWNlLiBJJ2QgbmVlZCB0byBleGFtaW5lIHdoYXQgcGFyYW1ldGVycyBpdCBleHBlY3RzIGFuZCB3aGVyZSBpdCByb3V0ZXMgdGhlbS4gVGhpcyBJT0NUTCBpcyBzdGFydGluZyB0byBsb29rIHByb21pc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjoyMy45NjA4MjY4MjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzU4NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTcxNz1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3MzctXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxNzM4OnN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTczOS1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzEtXFx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfbmV0X2Nocl9wb2xsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3MjpcXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODczLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjI0LjAwODE5Mjc1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTE4NzMwODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIE5ldHdvcmsgVnVsbmVyYWJpbGl0aWVzIGluIHRoZSBLZXJuZWwqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLCB0aGF0IGB2aG9zdF9uZXRfaW9jdGxgIGZ1bmN0aW9u4oCmIHRoYXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyBhcmVhIGZvciBpbnZlc3RpZ2F0aW9uLiBJdCBvZnRlbiBkZWFscyB3aXRoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24sIGFuZCB0aG9zZSBhcmUgYWx3YXlzIHBvdGVudGlhbCBhdHRhY2sgdmVjdG9ycy4gTm93LCB3aGF0IGFib3V0IGB0dW5fbmV0X3htaXRgPyBIbW0sIGludGVyZXN0aW5nLiBJdCdzIHN0YXRpYywgc28gdGhhdCAqbGltaXRzKiBpdHMgZGlyZWN0IHZ1bG5lcmFiaWxpdHksIGJ1dCBpdCBjb3VsZCBzdGlsbCBiZSBwYXJ0IG9mIGEgbGFyZ2VyLCBleHBsb2l0YWJsZSBjaGFpbi5cblxuT2theSwgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB0dW4uY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9ydGVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCAqbm90KiBzdGF0aWMuIEknbGwgbmVlZCB0byBpZGVudGlmeSB3aGljaCBvZiB0aG9zZSBleHBvc2VkIGZ1bmN0aW9ucyBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIG9yIGNhbGxpbmcgYHR1bl9uZXRfeG1pdGAuIEZpbmRpbmcgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHR1bl9uZXRfeG1pdGAsIG9yIGludGVyYWN0cyB3aXRoIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcywgd291bGQgYmUgYSBtdWNoIG1vcmUgaW50ZXJlc3RpbmcgcG9pbnQgdG8gZm9jdXMgb24sIGFzIGl0IHdvdWxkIGNyZWF0ZSBhIGxvbmdlciBhdHRhY2sgc3VyZmFjZS4gVGhhdCBzaG91bGQgaG9wZWZ1bGx5IHVuY292ZXIgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBleHBvc2VkIHRvIG1hbmlwdWxhdGlvbiBvciBjb21wcm9taXNlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6MjguOTI2OTI2OTE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxMjQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTU0Nj12b2lkIHR1bl9wdHJfZnJlZSh2b2lkICpwdHIpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy01NTctfVxcbmRyaXZlcnMvbmV0L3R1bi5jOjU1ODpFWFBPUlRfU1lNQk9MX0dQTCh0dW5fcHRyX2ZyZWUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTU1OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM3MTI9c3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzIxLX1cXG5kcml2ZXJzL25ldC90dW4uYzozNzIyOkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfc29ja2V0KTtcXG5kcml2ZXJzL25ldC90dW4uYy0zNzIzLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM3MjQ9c3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzM0LX1cXG5kcml2ZXJzL25ldC90dW4uYzozNzM1OkVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzczNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6MjguOTcxNDQ3MTIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODU5MjMwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKkZvY3VzaW5nIG9uIFRVTiBEZXZpY2UgSW50ZXJhY3Rpb25zKipcblxuUmlnaHQsIHNvIGB0dW5fZ2V0X3R4X3JpbmdgIGlzIGV4cG9zZWQsIHRoYXQncyBpbXBvcnRhbnQsIGJ1dCB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBvbiwgYXQgbGVhc3QgZm9yIHRoaXMgcGFydGljdWxhciBhbmFseXNpcywgYXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIHBvaW50cyB3aXRoIHRoZSBUVU4gZGV2aWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCBvZiBkYXRhIGZsb3csIHNvIEknbSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGB0dW5fY2hyX3JlYWRfaXRlcmAsIGB0dW5fY2hyX3dyaXRlX2l0ZXJgLCBhbmQgYHR1bl9jaHJfaW9jdGxgLiBUaGVzZSBhcmUgbGlrZWx5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBoYW5kbGluZyB0aGUgZGF0YSBpbmdyZXNzLCBlZ3Jlc3MsIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlLCByaWdodD8gVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIGludGVycm9nYXRlIHRvIHVuZGVyc3RhbmQgdGhlIGRldmljZSBpbnRlcmFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNjozMy43NTczNzM5NzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDExNzI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fY2hyX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTMwMDg9c3RhdGljIHVuc2lnbmVkIGNoYXIgdHVuX2dldF9hZGRyX2xlbih1bnNpZ25lZCBzaG9ydCB0eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzA0NS1cXG5kcml2ZXJzL25ldC90dW4uYzozMDQ2OnN0YXRpYyBsb25nIF9fdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcXG5kcml2ZXJzL25ldC90dW4uYy0zMDQ3LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxMjItXFxuZHJpdmVycy9uZXQvdHVuLmM6MzEyMzpcXHRuZXRpZl9pbmZvKHR1biwgZHJ2LCB0dW4tXFx1MDAzZWRldiwgXFxcInR1bl9jaHJfaW9jdGwgY21kICV1XFxcXG5cXFwiLCBjbWQpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMxMjQtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMzM5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMzNDA6c3RhdGljIGxvbmcgdHVuX2Nocl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5kcml2ZXJzL25ldC90dW4uYy0zMzQxLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzM0Mi17XFxuZHJpdmVycy9uZXQvdHVuLmM6MzM0MzpcXHRyZXR1cm4gX190dW5fY2hyX2lvY3RsKGZpbGUsIGNtZCwgYXJnLCBzaXplb2YgKHN0cnVjdCBpZnJlcSkpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNDQtfVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzM0Nz1zdGF0aWMgbG9uZyB0dW5fY2hyX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzAtXFx0ICovXFxuZHJpdmVycy9uZXQvdHVuLmM6MzM3MTpcXHRyZXR1cm4gX190dW5fY2hyX2lvY3RsKGZpbGUsIGNtZCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbXBhdF9pZnJlcSkpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTMzNzItfVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzQ2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dW5fZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzMtXFx0LnBvbGxcXHQ9IHR1bl9jaHJfcG9sbCxcXG5kcml2ZXJzL25ldC90dW4uYzozNDc0OlxcdC51bmxvY2tlZF9pb2N0bFxcdD0gdHVuX2Nocl9pb2N0bCxcXG5kcml2ZXJzL25ldC90dW4uYy0zNDc1LSNpZmRlZiBDT05GSUdfQ09NUEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjMzLjkyMTQ5NTQ4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzM1MzQ0NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOL1RBUCBEcml2ZXIgYW5kIFJpbmcgQnVmZmVyIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGlzIGB0dW5fbmV0X3htaXRgIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCdzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBzb2xpZCBvbiB0aGUgY2FsbGluZyBjb250ZXh0cyBoZXJlLiBTbywgaXMgdGhlcmUgYW55dGhpbmcgKm91dHNpZGUqIHRoZSBuZXR3b3JrIHN0YWNrIGl0c2VsZiB0aGF0J3MgY2FsbGluZyB0aGlzPyBOb3BlLCBsb29rcyBsaWtlIGl0J3Mgc3RyaWN0bHkgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBHb29kLiBUaGF0IG5hcnJvd3MgZG93biBteSBmb2N1cy5cblxuTm93LCBJJ2xsIGhvbmUgaW4gb24gdGhlIGNoYXJhY3RlciBkZXZpY2UgZW50cnkgcG9pbnRzOiBgdHVuX2Nocl9yZWFkX2l0ZXJgIGFuZCBgdHVuX2Nocl93cml0ZV9pdGVyYC4gVGhvc2UgYXJlIGtleS4gQW5kIGRvbid0IGZvcmdldCBgdmhvc3RfbmV0X2lvY3RsYCBhbmQgYHZob3N0X25ldF9vcGVuYCDigJMgSSBzaG91bGQga2VlcCBhbiBleWUgb24gdGhvc2UgYXMgd2VsbCwgZ2l2ZW4gdGhlaXIgcmVsYXRpb25zaGlwIHRvIHZob3N0LlxuXG5BaGEsIGhvbGQgb24gYSBzZWMuIFRoaXMgcGF0Y2ggaXMgdGFraW5nIG91dCBgX19wdHJfcmluZ19jaGVja19wcm9kdWNlYCBhbmQgdGhlbiBjaGFuZ2luZyBgX19wdHJfcmluZ19wcm9kdWNlYCBpbiBgaW5jbHVkZS9saW51eC9wdHJfcmluZy5oYC4gVGhhdCdzIGEgY29yZSBoZWFkZXIuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgY2hhbmdlcyB0byBhIGZ1bmRhbWVudGFsIGxvdy1sZXZlbCBkYXRhIHN0cnVjdHVyZS4gSSBuZWVkIHRvIGJlICp2ZXJ5KiBjYXJlZnVsIGhlcmUuIE9rYXksIGxldCdzIGZpbmQgb3V0IHdoZXJlIGVsc2UgdGhpcyBgX19wdHJfcmluZ19wcm9kdWNlYCBpcyB1c2VkLiBUaW1lIHRvIHNlZSB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHRvdWNoaW5nIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzM4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjQyLjI1Njg0NTEwOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NTIyNjQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3B0cl9yaW5nX3Byb2R1Y2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTEyMDQ9c3RhdGljIGludCB0dW5feGRwX3htaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMjM3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyMzg6XFx0XFx0aWYgKF9fcHRyX3JpbmdfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcsIGZyYW1lKSkge1xcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMzktXFx0XFx0XFx0ZGV2X2NvcmVfc3RhdHNfdHhfZHJvcHBlZF9pbmMoZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3ZldGguYz01MDM9c3RhdGljIGludCB2ZXRoX3hkcF94bWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuLFxcbi0tXFxuZHJpdmVycy9uZXQvdmV0aC5jLTUzNi1cXHRcXHRpZiAodW5saWtlbHkoeGRwX2dldF9mcmFtZV9sZW4oZnJhbWUpIFxcdTAwM2UgbWF4X2xlbiB8fFxcbmRyaXZlcnMvbmV0L3ZldGguYzo1Mzc6XFx0XFx0XFx0ICAgICBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnJxLVxcdTAwM2V4ZHBfcmluZywgcHRyKSkpXFxuZHJpdmVycy9uZXQvdmV0aC5jLTUzOC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM9NTQyPXZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTU1NS1cXHRcXHRcXHRpZiAoc3Bpbl90cnlsb2NrX2JoKFxcdTAwMjZ3Zy1cXHUwMDNlaGFuZHNoYWtlX3F1ZXVlLnJpbmcucHJvZHVjZXJfbG9jaykpIHtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jOjU1NjpcXHRcXHRcXHRcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNndnLVxcdTAwM2VoYW5kc2hha2VfcXVldWUucmluZywgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jLTU1Ny1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2d2ctXFx1MDAzZWhhbmRzaGFrZV9xdWV1ZS5yaW5nLnByb2R1Y2VyX2xvY2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTg4PXN0YXRpYyBpbmxpbmUgYm9vbCBwdHJfcmluZ19mdWxsX2JoKHN0cnVjdCBwdHJfcmluZyAqcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xMDMtICovXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oOjEwNDpzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTEwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9MTI0PXN0YXRpYyBpbmxpbmUgaW50IHB0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTI4LVxcdHNwaW5fbG9jayhcXHUwMDI2ci1cXHUwMDNlcHJvZHVjZXJfbG9jayk7XFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oOjEyOTpcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UociwgcHRyKTtcXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTMwLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZyLVxcdTAwM2Vwcm9kdWNlcl9sb2NrKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaD0xMzU9c3RhdGljIGlubGluZSBpbnQgcHRyX3JpbmdfcHJvZHVjZV9pcnEoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMTM5LVxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnItXFx1MDAzZXByb2R1Y2VyX2xvY2spO1xcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaDoxNDA6XFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE0MS1cXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnItXFx1MDAzZXByb2R1Y2VyX2xvY2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTE0Nj1zdGF0aWMgaW5saW5lIGludCBwdHJfcmluZ19wcm9kdWNlX2FueShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xNTEtXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnItXFx1MDAzZXByb2R1Y2VyX2xvY2ssIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg6MTUyOlxcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShyLCBwdHIpO1xcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0xNTMtXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ci1cXHUwMDNlcHJvZHVjZXJfbG9jaywgZmxhZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oPTE1OD1zdGF0aWMgaW5saW5lIGludCBwdHJfcmluZ19wcm9kdWNlX2JoKHN0cnVjdCBwdHJfcmluZyAqciwgdm9pZCAqcHRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE2Mi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnItXFx1MDAzZXByb2R1Y2VyX2xvY2spO1xcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaDoxNjM6XFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHIsIHB0cik7XFxuaW5jbHVkZS9saW51eC9wdHJfcmluZy5oLTE2NC1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2ci1cXHUwMDNlcHJvZHVjZXJfbG9jayk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmg9MzAxPXN0YXRpYyBpbmxpbmUgdm9pZCAqX19wdHJfcmluZ19jb25zdW1lKHN0cnVjdCBwdHJfcmluZyAqcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaC0zMDYtXFx0ICogYWNjZXNzaW5nIGRhdGEgdGhyb3VnaCB0aGUgcG9pbnRlciBpcyB1cCB0byBkYXRlLiBQYWlyc1xcbmluY2x1ZGUvbGludXgvcHRyX3JpbmcuaDozMDc6XFx0ICogd2l0aCBzbXBfd21iIGluIF9fcHRyX3JpbmdfcHJvZHVjZS5cXG5pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgtMzA4LVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi9jcHVtYXAuYz03MjM9c3RhdGljIHZvaWQgYnFfZmx1c2hfdG9fcXVldWUoc3RydWN0IHhkcF9idWxrX3F1ZXVlICpicSlcXG4tLVxcbmtlcm5lbC9icGYvY3B1bWFwLmMtNzQyLVxcbmtlcm5lbC9icGYvY3B1bWFwLmM6NzQzOlxcdFxcdGVyciA9IF9fcHRyX3JpbmdfcHJvZHVjZShxLCB4ZHBmKTtcXG5rZXJuZWwvYnBmL2NwdW1hcC5jLTc0NC1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvY29yZS9wYWdlX3Bvb2wuYz03ODM9c3RhdGljIGJvb2wgcGFnZV9wb29sX3JlY3ljbGVfaW5fcmluZyhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBuZXRtZW1fcmVmIG5ldG1lbSlcXG4tLVxcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTc4OC1cXHRpbl9zb2Z0aXJxID0gcGFnZV9wb29sX3Byb2R1Y2VyX2xvY2socG9vbCk7XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6Nzg5OlxcdHJldCA9ICFfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnBvb2wtXFx1MDAzZXJpbmcsIChfX2ZvcmNlIHZvaWQgKiluZXRtZW0pO1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTc5MC1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmM9OTI2PXN0YXRpYyB2b2lkIHBhZ2VfcG9vbF9yZWN5Y2xlX3JpbmdfYnVsayhzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxubmV0L2NvcmUvcGFnZV9wb29sLmMtOTM2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBidWxrX2xlbjsgaSsrKSB7XFxubmV0L2NvcmUvcGFnZV9wb29sLmM6OTM3OlxcdFxcdGlmIChfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnBvb2wtXFx1MDAzZXJpbmcsIChfX2ZvcmNlIHZvaWQgKilidWxrW2ldKSkge1xcbm5ldC9jb3JlL3BhZ2VfcG9vbC5jLTkzOC1cXHRcXHRcXHQvKiByaW5nIGZ1bGwgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VfZnJhZy9wYWdlX2ZyYWdfdGVzdC5jPTc3PXN0YXRpYyBpbnQgcGFnZV9mcmFnX3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BhZ2VfZnJhZy9wYWdlX2ZyYWdfdGVzdC5jLTEwMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYzoxMDM6XFx0XFx0cmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKHJpbmcsIHZhKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wYWdlX2ZyYWcvcGFnZV9mcmFnX3Rlc3QuYy0xMDQtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmM9MTI4PWludCBhZGRfaW5idWYodW5zaWduZWQgbGVuLCB2b2lkICpidWYsIHZvaWQgKmRhdGFwKVxcbi0tXFxudG9vbHMvdmlydGlvL3Jpbmd0ZXN0L3B0cl9yaW5nLmMtMTMxLVxcbnRvb2xzL3ZpcnRpby9yaW5ndGVzdC9wdHJfcmluZy5jOjEzMjpcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNmFycmF5LCBidWYpO1xcbnRvb2xzL3ZpcnRpby9yaW5ndGVzdC9wdHJfcmluZy5jLTEzMy1cXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6NDQuNzEyMDc3MjQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDMxOTY4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU2ltcGxpZnlpbmcgdGhlIFRVTiBEZXZpY2UgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFpbXMgdG8gc3RyZWFtbGluZSB0aGUgYHR1bl9uZXRfeG1pdGAgZnVuY3Rpb24uIEl0J3MgcmVhbGx5IGp1c3QgYSBtYXR0ZXIgb2YgaW1wcm92aW5nIHRoZSBjb3JlIGRhdGEgZmxvdywgbWFraW5nIHRoaW5ncyBhIGJpdCBjbGVhcmVyIGFuZCBtb3JlIGVmZmljaWVudC4gVGhlIGtleSBjaGFuZ2UgaXMgc3dhcHBpbmcgb3V0IHRoZSBgX19wdHJfcmluZ19wcm9kdWNlYCBhbmQgYF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZWAgY2FsbHMgd2l0aCBhIHNpbXBsZXIgYHB0cl9yaW5nX3Byb2R1Y2VgLiBJdCdzIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIGltcHJvdmVtZW50LCByZWR1Y2luZyBzb21lIG9mIHRoZSBjb21wbGV4aXR5IGluIHRoYXQgZnVuY3Rpb24uXG5cbkFkZGl0aW9uYWxseSwgSSBzZWUgaXQncyBhbHNvIHJlbW92aW5nIHRoZSBgdHVuX3dha2VfcXVldWVgIGFuZCBgX190dW5fd2FrZV9xdWV1ZWAgZnVuY3Rpb25zLiBBZ2FpbiwgcHJvYmFibHkgYSBjb25zb2xpZGF0aW9uIG9yIHJlZHVuZGFuY3kgYmVpbmcgYWRkcmVzc2VkLiBGdW5jdGlvbmFsbHksIHRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgaW1wcm92ZW1lbnQsIG5vIG1ham9yIGNoYW5nZXMgdG8gdGhlIGV4dGVybmFsIGludGVyZmFjZS5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoaXMgaXMgcHJvcGVybHkgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGUgY29uZmlncyBpbnZvbHZlZC4gSSBzZWUgdGhpcyByZWxpZXMgb24gYFRVTmAgYW5kIGBWSE9TVF9ORVRgLiBCZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFRVTmAgZG9lc24ndCBoYXZlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGJlIGFmZmVjdGVkLiBHb3R0YSBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBHb3R0YSBrZWVwIHRoYXQgY29uZmlnIGh5Z2llbmUgdXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTkxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6NDkuMjE1Mjc3MjcyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU0NzEwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRVTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyMi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6NDkuMzMwNzU2NDMxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzc2MzIyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYmV0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM5MS4gSSdtIGd1ZXNzaW5nIHRoYXQgYXJlYSBwcm9iYWJseSBkZWFscyB3aXRoIGEgc3BlY2lmaWMgc2V0IG9mIGZlYXR1cmVzIG9yIG9wdGlvbnMsIGdpdmVuIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zIGFyZSBtYWRlLCBzbyBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaXNzZWN0IGhvdyBhIHBhcnRpY3VsYXIgYXNwZWN0IGlzIGltcGxlbWVudGVkLiBCeSBsb29raW5nIGF0IHRoZSBLY29uZmlnIGZpbGUsIEkgY2FuIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCB0cmlzdGF0ZSBvcHRpb25zIHJlbGV2YW50IHRvIHRoaXMgc3BlY2lmaWMgYXJlYSBvZiB0aGUgbmV0d29yayBkcml2ZXIsIHdoaWNoIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZGVzaWduLiBJIGV4cGVjdCB0byBzZWUgY29uZGl0aW9uYWxzIGFuZCBvcHRpb24gY2hvaWNlcyB0aGF0IGRpY3RhdGUgd2hpY2ggc3BlY2lmaWMgbmV0d29yayBjYXJkIHR5cGVzIG9yIGZlYXR1cmVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBmaW5hbCBrZXJuZWwgaW1hZ2UuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCBpbiB0ZXJtcyBvZiB1c2VyLXNlbGVjdGFibGUgbmV0d29yayBmdW5jdGlvbmFsaXR5IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEyNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjUzLjI2ODM5MjY4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAzNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODU6XFx0XFxuIDM4NjpcXHRjb25maWcgUklPTkVUX1JYX1NJWkVcXG4gMzg3OlxcdFxcdGludCBcXFwiTnVtYmVyIG9mIGluYm91bmQgcXVldWUgZW50cmllc1xcXCJcXG4gMzg4OlxcdFxcdGRlcGVuZHMgb24gUklPTkVUXFxuIDM4OTpcXHRcXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuIDM5MDpcXHRcXG4gMzkxOlxcdGNvbmZpZyBUVU5cXG4gMzkyOlxcdFxcdHRyaXN0YXRlIFxcXCJVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcXFwiXFxuIDM5MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMzk0OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAzOTU6XFx0XFx0aGVscFxcbiAzOTY6XFx0XFx0ICBUVU4vVEFQIHByb3ZpZGVzIHBhY2tldCByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbiBmb3IgdXNlciBzcGFjZVxcbiAzOTc6XFx0XFx0ICBwcm9ncmFtcy4gIEl0IGNhbiBiZSB2aWV3ZWQgYXMgYSBzaW1wbGUgUG9pbnQtdG8tUG9pbnQgb3IgRXRoZXJuZXRcXG4gMzk4OlxcdFxcdCAgZGV2aWNlLCB3aGljaCBpbnN0ZWFkIG9mIHJlY2VpdmluZyBwYWNrZXRzIGZyb20gYSBwaHlzaWNhbCBtZWRpYSxcXG4gMzk5OlxcdFxcdCAgcmVjZWl2ZXMgdGhlbSBmcm9tIHVzZXIgc3BhY2UgcHJvZ3JhbSBhbmQgaW5zdGVhZCBvZiBzZW5kaW5nIHBhY2tldHNcXG4gNDAwOlxcdFxcdCAgdmlhIHBoeXNpY2FsIG1lZGlhIHdyaXRlcyB0aGVtIHRvIHRoZSB1c2VyIHNwYWNlIHByb2dyYW0uXFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdCAgV2hlbiBhIHByb2dyYW0gb3BlbnMgL2Rldi9uZXQvdHVuLCBkcml2ZXIgY3JlYXRlcyBhbmQgcmVnaXN0ZXJzXFxuIDQwMzpcXHRcXHQgIGNvcnJlc3BvbmRpbmcgbmV0IGRldmljZSB0dW5YIG9yIHRhcFguICBBZnRlciBhIHByb2dyYW0gY2xvc2VkIGFib3ZlXFxuIDQwNDpcXHRcXHQgIGRldmljZXMsIGRyaXZlciB3aWxsIGF1dG9tYXRpY2FsbHkgZGVsZXRlIHR1blhYIG9yIHRhcFhYIGRldmljZSBhbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6MzY6NTMuMjY4NTI1NDg1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTI0NDMzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIGBUVU5gIGlzIGRlZmluaXRlbHkgcmVsaWFudCBvbiBgSU5FVGAuIFRoYXQgbXVjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSBuZWVkIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgYFZIT1NUX05FVGAgZml0cyBpbnRvIHRoaXMgd2hvbGUgYXJjaGl0ZWN0dXJlLiBMZXQgbWUgZGlnIGludG8gaXRzIGRlcGVuZGVuY2llcyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIG9yIGlmIGl0IGhhcyBhbnl0aGluZyB1bmV4cGVjdGVkIHRvIGNvbnRyaWJ1dGUgdG8gdGhlIG1peC4gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBpcyBrZXkgdG8gYSByb2J1c3QgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjU2LjU4MDk3MTYyN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdGRlZmF1bHQgeVxcbiAgMzE6XFx0XFxuICAzMjpcXHRpZiBWSE9TVF9NRU5VXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBWSE9TVF9ORVRcXG4gIDM1OlxcdFxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgKFRVTiB8fCAhVFVOKSBcXHUwMDI2XFx1MDAyNiAoVEFQIHx8ICFUQVApXFxuICAzNzpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNDA6XFx0XFx0ICBndWVzdCBuZXR3b3JraW5nIHdpdGggdmlydGlvX25ldC4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdmlydGlvX25ldFxcbiAgNDE6XFx0XFx0ICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuXFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsXFxuICA0NDpcXHRcXHQgIGJlIGNhbGxlZCB2aG9zdF9uZXQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBWSE9TVF9TQ1NJXFxuICA0NzpcXHRcXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXFx1MDAyNlxcdTAwMjYgRVZFTlRGRFxcbiAgNDk6XFx0XFx0c2VsZWN0IFZIT1NUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM2OjU2LjU4MTA3NzcxN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE0Nzg5MDY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTW9kdWxlIFN5bWJvbCBWZXJpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgbW9kdWxlcyBhbmQgZmlndXJpbmcgb3V0IHdoaWNoIHN5bWJvbHMgYXJlIGltcG9ydGFudCwgcGFydGljdWxhcmx5IGZvciBgVkhPU1RfTkVUYC4gIFRoZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGBORVRgLCBgRVZFTlRGRGAsIGFuZCB0aGVuIGEgY2hvaWNlIGJldHdlZW4gYFRVTmAgb3Igbm90IGBUVU5gLCBhbmQgYFRBUGAgb3Igbm90IGBUQVBgLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggYFZIT1NUX05FVGAsIHRoZW4gYFRVTmAgbG9va3MgbGlrZSB0aGUgcmlnaHQgY2hvaWNlIGhlcmUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyB0aGVtc2VsdmVzLCBmb2N1c2luZyBvbiB0aGUgaW50ZXJmYWNlIGVudHJ5IHBvaW50cy4gSSdtIGNoZWNraW5nIHRoZSBgdHVuLmNgIGZpbGUgYW5kIEkgc2VlOiBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgLCBhbmQgY3J1Y2lhbGx5LCBgdHVuX25ldF94bWl0YC4gSW4gYG5ldC5jYCwgSSBzcG90OiBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X25ldF9vcGVuYCwgYW5kIGB2aG9zdF9uZXRfcmVsZWFzZWAuXG5cbkkgd2FzIHNsaWdodGx5IGNvbmNlcm5lZCBhYm91dCBgdHVuX25ldF94bWl0YCBiZWluZyBzdGF0aWMsIGJ1dCB0aGF0J3MgYSBrZXkgbmV0d29yayBlbnRyeSBwb2ludC4gUmVtZW1iZXJpbmcgdGhlIGd1aWRlbGluZXMsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBhcmUgcHJlZmVycmVkLCBhcyBzdGF0aWMgZnVuY3Rpb25zIG1pZ2h0IGJlIGlubGluZWQuIEJ1dCB3YWl0LCBgdHVuX25ldF94bWl0YCBpcyBhc3NpZ25lZCB0byBgbmRvX3N0YXJ0X3htaXRgLiBUaGF0IG1lYW5zIGl0J3Mgbm90IGlubGluZWQgYW5kIGl0J3MgYSBjYWxsYmFjazsgZ3JlYXQsIGl0J3MgZmluZSB0byBsaXN0IGl0LiBgdHVuX2Nocl9yZWFkX2l0ZXJgIGlzIGFzc2lnbmVkIHRvIGByZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCBpcyBhc3NpZ25lZCB0byBgd3JpdGVfaXRlcmAsIGB0dW5fY2hyX2lvY3RsYCBpcyBhc3NpZ25lZCB0byBgdW5sb2NrZWRfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCBpcyBhc3NpZ25lZCB0byBgdW5sb2NrZWRfaW9jdGxgIGFuZCBgdmhvc3RfbmV0X29wZW5gIGlzIGFzc2lnbmVkIHRvIGBvcGVuYC4gQWxsIGdvb2QhIFRoZXNlIGxvb2sgbGlrZSB0aGUgY29ycmVjdCBzeW1ib2xzIHRvIGNoZWNrLiAgRmluYWxseSwgYSBxdWljayBjaGVjayB0byBjb25maXJtIGB0dW5fbmV0X3htaXRgIGlzIGFjdHVhbGx5IHRoZXJlLCBidXQgdGhhdCBzaG91bGQgYmUgYSBnaXZlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzowNi43Mjg5NzEwOTRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTMzNzk1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fbmV0X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9OTkwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcnVuX2VicGZfZmlsdGVyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMDAyLS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjEwMDM6c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTE4Ny1cXHQubmRvX3N0b3BcXHRcXHQ9IHR1bl9uZXRfY2xvc2UsXFxuZHJpdmVycy9uZXQvdHVuLmM6MTE4ODpcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IHR1bl9uZXRfeG1pdCxcXG5kcml2ZXJzL25ldC90dW4uYy0xMTg5LVxcdC5uZG9fZml4X2ZlYXR1cmVzXFx0PSB0dW5fbmV0X2ZpeF9mZWF0dXJlcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNzEtXFx0Lm5kb19zdG9wXFx0XFx0PSB0dW5fbmV0X2Nsb3NlLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyNzI6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB0dW5fbmV0X3htaXQsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTI3My1cXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM3OjA2LjkzODMxMzc4NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE0NzI1OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgS2VybmVsIE1vZHVsZSBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgYHR1bl9uZXRfeG1pdGAgaXMgaW5kZWVkIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBuZXR3b3JrIGludGVyZmFjZSBtb2R1bGUsIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGludGVyZmFjZSBoYW5kbGVzIHRyYWZmaWMsIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoZSBkYXRhIGlzIGJlaW5nIGNvbnN1bWVkLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGB0dW5fY2hyX3JlYWRfaXRlcmAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLCB0byBzZWUgdGhlIGJlaGF2aW9yIHdoZW4gdHJhbnNtaXR0aW5nIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MTAuODUzMDQzOTQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDEwNTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0yMTYwPXN0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTk2LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIxOTc6c3RhdGljIHNzaXplX3QgdHVuX2Nocl9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTIxOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzQ2OT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0dW5fZm9wcyA9IHtcXG5kcml2ZXJzL25ldC90dW4uYy0zNDcwLVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9uZXQvdHVuLmM6MzQ3MTpcXHQucmVhZF9pdGVyICA9IHR1bl9jaHJfcmVhZF9pdGVyLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzItXFx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM3OjEwLjkzNzE1NjA0NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk2NzY1MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIFR1biBEZXZpY2UgSXRlcmF0b3JzKipcblxuQWxyaWdodCwgc28gSSBrbm93IGB0dW5fY2hyX3JlYWRfaXRlcmAgaXMgYSBsZWdpdGltYXRlIGZ1bmN0aW9uLCBubyBwcm9ibGVtIHRoZXJlLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiBteSBtZW50YWwgY2hlY2tsaXN0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBleGlzdGVuY2UgYW5kIHBvdGVudGlhbGx5IHRoZSBuYXR1cmUgb2YgaXRzIGNvdW50ZXJwYXJ0LiBJIG5lZWQgdG8gbm93IGNoZWNrIHRoZSBgdHVuX2Nocl93cml0ZV9pdGVyYCBmdW5jdGlvbi4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHdlJ3JlIGludGVyYWN0aW5nIHdpdGggdGhlIFRVTiBkZXZpY2UsIGFuZCB0aGUgd3JpdGUgaXRlcmF0aW9uIG1lY2hhbmlzbSBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoYXQuIEtub3dpbmcgd2hhdCBpdCBkb2VzIGlzIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoxNC45MzM5MjM4ODlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzY2MjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fY2hyX3dyaXRlX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MTY5NT1zdGF0aWMgc3NpemVfdCB0dW5fZ2V0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTE5ODYtXFxuZHJpdmVycy9uZXQvdHVuLmM6MTk4NzpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuZHJpdmVycy9uZXQvdHVuLmMtMTk4OC17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNDY5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3MS1cXHQucmVhZF9pdGVyICA9IHR1bl9jaHJfcmVhZF9pdGVyLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM0NzI6XFx0LndyaXRlX2l0ZXIgPSB0dW5fY2hyX3dyaXRlX2l0ZXIsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3My1cXHQucG9sbFxcdD0gdHVuX2Nocl9wb2xsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoxNS4wMzc1OTEzNzRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyNjgxMjQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBgdHVuYCBhbmQgcG90ZW50aWFsbHkgdmlydHVhbCBob3N0aW5nLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIHRvIG1pbmQgaXMsICp5ZXMqLCBJJ20gcHJldHR5IHN1cmUgSSd2ZSBlbmNvdW50ZXJlZCBgdHVuX2Nocl93cml0ZV9pdGVyYCBiZWZvcmUuIExldCBtZSBtZW50YWxseSB2ZXJpZnkgaXRzIGV4aXN0ZW5jZS4uLiAqWXVwLCBpdCdzIHRoZXJlKi4gTm93LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGJyb2FkZXIgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgdmlydHVhbCBob3N0IG5ldHdvcmtpbmcgY29tcG9uZW50cy4gVGhhdCBtZWFucyBteSBuZXh0IG1vdmUgaXMgdG8gZGlnIGludG8gYHZob3N0X25ldF9pb2N0bGAuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxNjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoxOS40NjQ0MDcxNThaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjY4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTcxNz1zdGF0aWMgbG9uZyB2aG9zdF9uZXRfc2V0X293bmVyKHN0cnVjdCB2aG9zdF9uZXQgKm4pXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3MzctXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxNzM4OnN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTczOS1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzEtXFx0LnBvbGwgICAgICAgICAgID0gdmhvc3RfbmV0X2Nocl9wb2xsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTg3MjpcXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODczLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM3OjE5LjUzOTA4MDIwOFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ2MDUzMTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVmlydHVhbCBOZXR3b3JrIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBwcmV0dHkgc3VyZSBgdmhvc3RfbmV0X2lvY3RsYCBpcyBhIHRoaW5nLiBUaW1lIHRvIGNvbmZpcm0gaXRzIGV4aXN0ZW5jZS4gKkNoZWNrcyB0aGUgY29kZWJhc2UsIHF1aWNrIGFuZCBlZmZpY2llbnQgYXMgYWx3YXlzKi4uLiBZdXAsIGl0J3MgdGhlcmUuIEdvb2QuIE5vdywgdGhhdCBnaXZlcyBtZSBhIGp1bXBpbmctb2ZmIHBvaW50LiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB3ZSAqZ2V0KiB0byB0aGF0IGlvY3RsIGluIHRoZSBmaXJzdCBwbGFjZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoLCB0aGUgZW50cnkgcG9pbnQuIFRoYXQgbGlrZWx5IG1lYW5zIGV4YW1pbmluZyBgdmhvc3RfbmV0X29wZW5gLiBJJ2xsIGRlbHZlIGludG8gdGhlIGNvbnRleHQgYXJvdW5kIGl0cyB1c2UuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjExLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MjMuNjg1MTM2OTU0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTEwNjQwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9uZXRfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTMyMj1zdGF0aWMgdm9pZCBoYW5kbGVfcnhfbmV0KHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzI4LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTMyOTpzdGF0aWMgaW50IHZob3N0X25ldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMzMC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE4NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3RfbmV0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4NzMtXFx0LmNvbXBhdF9pb2N0bCAgID0gY29tcGF0X3B0cl9pb2N0bCxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4NzQ6XFx0Lm9wZW4gICAgICAgICAgID0gdmhvc3RfbmV0X29wZW4sXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODc1LVxcdC5sbHNlZWtcXHRcXHQ9IG5vb3BfbGxzZWVrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoyMy43NDYyNDg0NDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzk5MzQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIE1vZHVsZSBJbnRlcmFjdGlvbiAtIFF1aWNrIENoZWNrKipcblxuUmlnaHQsIHNvIGB2aG9zdF9uZXRfb3BlbmAgaXMgZGVmaW5pdGVseSBhIHRoaW5nLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IG9uZS4gTm93LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzLCBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaGFwcGVucyBvbiB0aGUgb3RoZXIgZW5kLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBjb21wYW5pb24gZnVuY3Rpb246IGB2aG9zdF9uZXRfcmVsZWFzZWAuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZSBvYnZpb3VzIGludGVyYWN0aW9uIHBvaW50IG9yIHJhY2UgY29uZGl0aW9uLiBDaGVja2luZyB0aGUgcmVsZWFzZSBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgdGhlIGNvZGUsIHNvIEkgY2FuIHRoaW5rIHRocm91Z2ggdGhlIGludGVyYWN0aW9ucyBhbmQgcmVzb3VyY2VzIGNvcnJlY3RseS4gTm8gcG9pbnQgZGl2aW5nIHRvbyBkZWVwbHkgaW50byBvcGVuIHdpdGhvdXQgdW5kZXJzdGFuZGluZyBob3cgd2UgY2xlYW4gdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MjcuMDYwMjQ0NTM0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDE0MjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9uZXRfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTQyMT1zdGF0aWMgdm9pZCB2aG9zdF9uZXRfZmx1c2goc3RydWN0IHZob3N0X25ldCAqbilcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTQzNi1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE0Mzc6c3RhdGljIGludCB2aG9zdF9uZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE0Mzgte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xODY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg2Ny1cXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4Njg6XFx0LnJlbGVhc2UgICAgICAgID0gdmhvc3RfbmV0X3JlbGVhc2UsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODY5LVxcdC5yZWFkX2l0ZXIgICAgICA9IHZob3N0X25ldF9jaHJfcmVhZF9pdGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQwNjozNzoyNy4xNDAzOTExNzZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxNTgwNTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdmhvc3RfbmV0IFJlbGF0ZWQgUmVsZWFzZSBhbmQgSXRlcmF0b3JzKipcblxuQWxyaWdodCwgc28gdGhlIGRpc2N1c3Npb24gY2VudGVycyBhcm91bmQgdGhlIGB2aG9zdF9uZXRgIG1vZHVsZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyBjb25maXJtaW5nIHRoYXQgYHZob3N0X25ldF9yZWxlYXNlYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gd2l0aGluIHRoYXQgbW9kdWxlLiBHb29kLCBpdCdzIHRoZXJlLiBUaGF0J3MgYSBmb3VuZGF0aW9uYWwgcGllY2UgY29uZmlybWVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHBhcnRpY3VsYXJseSB0aGUgY2hhcmFjdGVyIGRldmljZSBpbnRlcmFjdGlvbnMuIFNvLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIHJlYWQgYW5kIHdyaXRlIGl0ZXJhdG9ycy4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIGFjcm9zcyBgdmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXJgIGFuZCBgdmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyYC4gVGhleSdyZSB0aGUgY3JpdGljYWwgY29tcG9uZW50cyBpbnZvbHZlZCBpbiB0cmFuc2ZlcnJpbmcgZGF0YSB0byBhbmQgZnJvbSB0aGUgY2hhcmFjdGVyIGRldmljZSB1c2VkIGJ5IHZob3N0LW5ldC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZnVuY3Rpb25zIGhhbmRsZSB0aGUgaXRlcmF0aW9uIGFuZCBkYXRhIGJ1ZmZlcmluZywgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHVuZGVybHlpbmcgdmlydGlvIG5ldHdvcmsgZGV2aWNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBoYW5kbGluZyBlcnJvciBjYXNlcyBhbmQgZGF0YSB0cmFuc2ZlcnMsIGVzcGVjaWFsbHkgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZ3Vlc3QgVk1zLiBVbmRlcnN0YW5kaW5nIHRob3NlIGl0ZXJhdG9ycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDA2OjM3OjMxLjE1NjIwMDUwNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMzAxODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X25ldF9jaHJfcmVhZF9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuYz0xNzM4PXN0YXRpYyBsb25nIHZob3N0X25ldF9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODM3LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTgzODpzdGF0aWMgc3NpemVfdCB2aG9zdF9uZXRfY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODM5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg2Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg2OC1cXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9uZXRfcmVsZWFzZSxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4Njk6XFx0LnJlYWRfaXRlciAgICAgID0gdmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXIsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODcwLVxcdC53cml0ZV9pdGVyICAgICA9IHZob3N0X25ldF9jaHJfd3JpdGVfaXRlcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MzEuMjY5NTA3NjZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ4NTQxNDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCBhbmQgVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBhbHRlcmluZyB0aGUgcXVldWUgd2FraW5nIGxvZ2ljIGluIHRoZSBUVU4gZHJpdmVyIGJhc2VkIG9uIGBjb25zX2NudGAsIHNpbXBsaWZ5aW5nIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBtZWFucyB0aGUgY3JpdGljYWwgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uIHBhdGhzIGJldHdlZW4gdGhlc2UgdHdvIGNvbXBvbmVudHMgYXJlIGJlaW5nIG1vZGlmaWVkLlxuXG5UaGF0J3MgdGhlIGNydXggb2YgaXQuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyBmb3IgcmVncmVzc2lvbnMgYW5kIHBvdGVudGlhbCBkZWFkbG9ja3Mgd2l0aGluIHRoYXQgcXVldWUgd2FraW5nIG1lY2hhbmlzbS4gVGhlIGZvY3VzIHN5bWJvbHMgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRvIHN0YXJ0IGxvb2tpbmc6IGB0dW5fbmV0X3htaXRgLCBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX2Nocl93cml0ZV9pdGVyYCwgYHR1bl9jaHJfaW9jdGxgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYHZob3N0X25ldF9vcGVuYCwgYHZob3N0X25ldF9jaHJfcmVhZF9pdGVyYCwgYW5kIGB2aG9zdF9uZXRfY2hyX3dyaXRlX2l0ZXJgLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIGZ1enppbmcgdGFyZ2V0cyB0aGVzZSBwYXRocyBzcGVjaWZpY2FsbHkuXG5cblJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgYFRVTmAgYW5kIGBWSE9TVF9ORVRgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2xlYXIsIEknbGwgcXVpY2tseSBjaGVjayBpZiBgVkhPU1RfTkVUYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gQWxyaWdodCwgaXQgc2VsZWN0cyBgVkhPU1RgLCBhbmQgYFZIT1NUX01FTlVgIGlzIGp1c3QgYSBtZW51Y29uZmlnIG9wdGlvbi4gR29vZC5cblxuSSdtIGNvbmZpZGVudCBpbiB0aG9zZSBjb25maWd1cmF0aW9ucy4gTm93LCBJJ2xsIHJ1biB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGdlbmVyYXRlIHRoZSBiYXNlbGluZSBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA1MCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMDY6Mzc6MzkuNzU0OTI0OTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg1OTQzMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRVTlwiLFxuICAgIFwiVkhPU1RfTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX25ldF94bWl0XCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX2Nocl93cml0ZV9pdGVyXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfaW9jdGxcIixcbiAgICBcInZob3N0X25ldF9vcGVuXCIsXG4gICAgXCJ2aG9zdF9uZXRfY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidmhvc3RfbmV0X2Nocl93cml0ZV9pdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBleHBsaWNpdCBxdWV1ZSB3YWtpbmcgbG9naWMgYmFzZWQgb24gYGNvbnNfY250YCBpbiB0aGUgVFVOIGRyaXZlciBhbmQgc2ltcGxpZmllcyB0aGUgcmluZyBjb25zdW1wdGlvbiBpbiBib3RoIFRVTiBhbmQgdmhvc3QtbmV0LiBJdCBtb2RpZmllcyBjb3JlIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBwYXRocyBiZXR3ZWVuIFRVTiBhbmQgdmhvc3QtbmV0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIgaW4gdGhlIHF1ZXVlIHdha2luZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlZIT1NUX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9uZXRfeG1pdFwiLFxuICAgIFwidHVuX2Nocl9yZWFkX2l0ZXJcIixcbiAgICBcInR1bl9jaHJfd3JpdGVfaXRlclwiLFxuICAgIFwidHVuX2Nocl9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfb3BlblwiLFxuICAgIFwidmhvc3RfbmV0X2Nocl9yZWFkX2l0ZXJcIixcbiAgICBcInZob3N0X25ldF9jaHJfd3JpdGVfaXRlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgZXhwbGljaXQgcXVldWUgd2FraW5nIGxvZ2ljIGJhc2VkIG9uIGBjb25zX2NudGAgaW4gdGhlIFRVTiBkcml2ZXIgYW5kIHNpbXBsaWZpZXMgdGhlIHJpbmcgY29uc3VtcHRpb24gaW4gYm90aCBUVU4gYW5kIHZob3N0LW5ldC4gSXQgbW9kaWZpZXMgY29yZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24gcGF0aHMgYmV0d2VlbiBUVU4gYW5kIHZob3N0LW5ldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzIG9jY3VyIGluIHRoZSBxdWV1ZSB3YWtpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[1] Phase: Succeeded StartedAt: 2026-07-29 06:37:52 +0000 UTC FinishedAt: 2026-07-29 06:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 06:37:52 +0000 UTC FinishedAt: 2026-07-29 06:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2] Phase: Succeeded StartedAt: 2026-07-29 06:37:52 +0000 UTC FinishedAt: 2026-07-29 10:31:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 06:37:52 +0000 UTC FinishedAt: 2026-07-29 10:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 06:37:52 +0000 UTC FinishedAt: 2026-07-29 06:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 06:37:52 +0000 UTC FinishedAt: 2026-07-29 06:37:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc2r5m/series-workflowc2r5m-convert-artifact-1729122705/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 06:38:02 +0000 UTC FinishedAt: 2026-07-29 07:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 06:38:02 +0000 UTC FinishedAt: 2026-07-29 07:00:21 +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:*f1faebb5-0594-4faa-9695-0f2ce106b651,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-workflowc2r5m/series-workflowc2r5m-convert-artifact-1729122705/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": "60689a20-7e60-4fca-b2ca-cc49423a0753", "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-workflowc2r5m/series-workflowc2r5m-build-action-1950495551/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 06:38:02 +0000 UTC FinishedAt: 2026-07-29 07:00:11 +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:*f1faebb5-0594-4faa-9695-0f2ce106b651,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-workflowc2r5m/series-workflowc2r5m-convert-artifact-1729122705/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": "60689a20-7e60-4fca-b2ca-cc49423a0753", "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-workflowc2r5m/series-workflowc2r5m-build-action-1950495551/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 07:00:21 +0000 UTC FinishedAt: 2026-07-29 07:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 07:00:21 +0000 UTC FinishedAt: 2026-07-29 07:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 07:00:21 +0000 UTC FinishedAt: 2026-07-29 07:00:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 07:00:21 +0000 UTC FinishedAt: 2026-07-29 07:00:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc2r5m/series-workflowc2r5m-convert-artifact-2791503204/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 07:00:31 +0000 UTC FinishedAt: 2026-07-29 07:02:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 07:00:31 +0000 UTC FinishedAt: 2026-07-29 07:02:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60689a20-7e60-4fca-b2ca-cc49423a0753,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-workflowc2r5m/series-workflowc2r5m-build-action-1950495551/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-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 07:02:34 +0000 UTC FinishedAt: 2026-07-29 07:02:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 07:02:34 +0000 UTC FinishedAt: 2026-07-29 07:02:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 07:02:34 +0000 UTC FinishedAt: 2026-07-29 07:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 07:02:34 +0000 UTC FinishedAt: 2026-07-29 07:25:43 +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:*f1faebb5-0594-4faa-9695-0f2ce106b651,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-workflowc2r5m/series-workflowc2r5m-convert-artifact-2791503204/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": "ce46e819-08a6-4a3d-83a5-28408098f5eb", "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-workflowc2r5m/series-workflowc2r5m-build-action-2237726448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 07:02:34 +0000 UTC FinishedAt: 2026-07-29 07:25:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f1faebb5-0594-4faa-9695-0f2ce106b651,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-workflowc2r5m/series-workflowc2r5m-convert-artifact-2791503204/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": "ce46e819-08a6-4a3d-83a5-28408098f5eb", "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-workflowc2r5m/series-workflowc2r5m-build-action-2237726448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 07:25:43 +0000 UTC FinishedAt: 2026-07-29 07:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 07:25:43 +0000 UTC FinishedAt: 2026-07-29 07:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 07:25:43 +0000 UTC FinishedAt: 2026-07-29 07:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 07:25:43 +0000 UTC FinishedAt: 2026-07-29 07:27:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce46e819-08a6-4a3d-83a5-28408098f5eb,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-workflowc2r5m/series-workflowc2r5m-build-action-2237726448/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-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 07:27:59 +0000 UTC FinishedAt: 2026-07-29 10:31:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 07:27:59 +0000 UTC FinishedAt: 2026-07-29 10:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"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:*60689a20-7e60-4fca-b2ca-cc49423a0753,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce46e819-08a6-4a3d-83a5-28408098f5eb,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-workflowc2r5m/series-workflowc2r5m-build-action-1950495551/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-workflowc2r5m/series-workflowc2r5m-build-action-2237726448/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 07:27:59 +0000 UTC FinishedAt: 2026-07-29 07:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 07:27:59 +0000 UTC FinishedAt: 2026-07-29 07:28:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"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-workflowc2r5m/series-workflowc2r5m-convert-artifact-4135356653/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 07:27:59 +0000 UTC FinishedAt: 2026-07-29 07:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 07:27:59 +0000 UTC FinishedAt: 2026-07-29 07:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 07:27:59 +0000 UTC FinishedAt: 2026-07-29 07:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 07:28:09 +0000 UTC FinishedAt: 2026-07-29 10:31:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2r5m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_chr_read_iter","tun_chr_write_iter","tun_chr_ioctl","vhost_net_ioctl","vhost_net_open","vhost_net_chr_read_iter","vhost_net_chr_write_iter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b14361aca6350ff7907b0e9903c7b94dc7d5d4a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"6e096857-4a62-41ea-a7f7-df58969df7e5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 07:28:09 +0000 UTC FinishedAt: 2026-07-29 10:30:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60689a20-7e60-4fca-b2ca-cc49423a0753,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ce46e819-08a6-4a3d-83a5-28408098f5eb,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-workflowc2r5m/series-workflowc2r5m-build-action-1950495551/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-workflowc2r5m/series-workflowc2r5m-build-action-2237726448/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-workflowc2r5m/series-workflowc2r5m-convert-artifact-4135356653/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,}