Name: series-workflowgc5dt Phase: Failed StartedAt: 2026-09-11 12:39:00 +0000 UTC FinishedAt: 2026-09-11 13:31:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgc5dt[0] Phase: Succeeded StartedAt: 2026-09-11 12:39:00 +0000 UTC FinishedAt: 2026-09-11 13:30:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgc5dt[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 12:39:00 +0000 UTC FinishedAt: 2026-09-11 13:30:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBQQ0llIE5JQyBoYXJkd2FyZSAoRTgwMC9FODEwIHNlcmllcykgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk0MzZhZjI3Mzk3YzgwNzNhZjFmY2FkZTcwYjI0NjE5MTUyMzE1NjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMzozMDoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbmluZGV4IGY3MmJiMWFhNDA2NzQuLjQ4ZjQzMTJkZjRhNDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuQEAgLTMyOCw2ICYjNDM7MzI4LDggQEAgZW51bSBpY2VfdnNpX3N0YXRlIHtcbiBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyB7XG4gXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzOyAgLyogVHggcmluZyBzdGF0cyBhcnJheSAqL1xuIFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsgIC8qIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbiYjNDM7XHR1MTYgdHhfcmluZ19zdGF0c19sZW47ICAvKiBMZW5ndGggb2YgdGhlIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbiYjNDM7XHR1MTYgcnhfcmluZ19zdGF0c19sZW47ICAvKiBMZW5ndGggb2YgdGhlIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbiB9O1xuIFxuIC8qIHN0cnVjdCB0aGF0IGRlZmluZXMgYSBWU0ksIGFzc29jaWF0ZWQgd2l0aCBhIGRldiAqL1xuQEAgLTQwMSw5ICYjNDM7NDAzLDExIEBAIHN0cnVjdCBpY2VfdnNpIHtcbiBcdHU4IHJ4X21hcHBpbmdfbW9kZTtcdFx0IC8qIElDRV9NQVBfTU9ERV9bQ09OVElHfFNDQVRURVJdICovXG4gXHR1MTYgKnR4cV9tYXA7XHRcdFx0IC8qIGluZGV4IGluIHBmLVx1MDAzZWF2YWlsX3R4cXMgKi9cbiBcdHUxNiAqcnhxX21hcDtcdFx0XHQgLyogaW5kZXggaW4gcGYtXHUwMDNlYXZhaWxfcnhxcyAqL1xuLVx0dTE2IGFsbG9jX3R4cTtcdFx0XHQgLyogQWxsb2NhdGVkIFR4IHF1ZXVlcyAqL1xuJiM0MztcdHN0cnVjdF9ncm91cF90YWdnZWQoaWNlX3ZzaV9hbGxvY19xdWV1ZXNfcGFyYW1zLCBhbGxvY190eHFfcnhxLFxuJiM0MztcdFx0dTE2IGFsbG9jX3R4cTtcdFx0IC8qIEFsbG9jYXRlZCBUeCBxdWV1ZXMgKi9cbiYjNDM7XHRcdHUxNiBhbGxvY19yeHE7XHRcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXG4mIzQzO1x0KTtcbiBcdHUxNiBudW1fdHhxO1x0XHRcdCAvKiBVc2VkIFR4IHF1ZXVlcyAqL1xuLVx0dTE2IGFsbG9jX3J4cTtcdFx0XHQgLyogQWxsb2NhdGVkIFJ4IHF1ZXVlcyAqL1xuIFx0dTE2IG51bV9yeHE7XHRcdFx0IC8qIFVzZWQgUnggcXVldWVzICovXG4gXHR1MTYgcmVxX3R4cTtcdFx0XHQgLyogVXNlciByZXF1ZXN0ZWQgVHggcXVldWVzICovXG4gXHR1MTYgcmVxX3J4cTtcdFx0XHQgLyogVXNlciByZXF1ZXN0ZWQgUnggcXVldWVzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbmluZGV4IDhjZGM0ZmRhODllOTcuLjQ5NDlmMjllNTM4ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5AQCAtMTUzLDE2ICYjNDM7MTUzLDU2IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9kZXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB1MTYgaWNlX2dldF9yeHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3N0YXRpYyB1MTYgaWNlX2dldF9yeHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYsIHUxNiBoZWxkKVxuIHtcbi1cdHJldHVybiBtaW4oaWNlX2dldF9hdmFpbF9yeHFfY291bnQocGYpLFxuLVx0XHQgICBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpKTtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZikgJiM0MzsgaGVsZCxcbiYjNDM7XHRcdCAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XG4gfVxuIFxuLXN0YXRpYyB1MTYgaWNlX2dldF90eHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3N0YXRpYyB1MTYgaWNlX2dldF90eHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYsIHUxNiBoZWxkKVxuIHtcbi1cdHJldHVybiBtaW4oaWNlX2dldF9hdmFpbF90eHFfY291bnQocGYpLFxuLVx0XHQgICBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpKTtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3R4cV9jb3VudChwZikgJiM0MzsgaGVsZCxcbiYjNDM7XHRcdCAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEBoZWxkX3R4cSwgQGhlbGRfcnhxOiBxdWV1ZXMgdGhlIFZTSSBzdGlsbCBvd25zIGJ1dCBpcyBhYm91dCB0byByZXR1cm4gdG8gdGhlXG4mIzQzOyAqIFBGIHBvb2wsIHNvIHRoYXQgdGhlIHJlc3VsdCBtYXRjaGVzIHdoYXQgaXQgd2lsbCBiZSBvbmNlIHRoZXkgYXJlIGJhY2sgdGhlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtc1xuJiM0MztpY2VfdnNpX2dldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSwgdTE2IGhlbGRfdHhxLCB1MTYgaGVsZF9yeHEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9hbGxvY19xdWV1ZXNfcGFyYW1zIHFzID0ge307XG4mIzQzO1x0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh2c2ktXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgSUNFX1ZTSV9QRjpcbiYjNDM7XHRcdHFzLmFsbG9jX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID86IGljZV9nZXRfdHhxX2NvdW50KHBmLCBoZWxkX3R4cSk7XG4mIzQzO1xuJiM0MztcdFx0Lyogb25seSAxIFJ4IHF1ZXVlIHVubGVzcyBSU1MgaXMgZW5hYmxlZCAqL1xuJiM0MztcdFx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRcdHFzLmFsbG9jX3J4cSA9IDE7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHFzLmFsbG9jX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxID86XG4mIzQzO1x0XHRcdFx0ICAgICAgIGljZV9nZXRfcnhxX2NvdW50KHBmLCBoZWxkX3J4cSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIElDRV9WU0lfU0Y6XG4mIzQzO1x0Y2FzZSBJQ0VfVlNJX0NUUkw6XG4mIzQzO1x0Y2FzZSBJQ0VfVlNJX0xCOlxuJiM0MztcdFx0cXMuYWxsb2NfdHhxID0gMTtcbiYjNDM7XHRcdHFzLmFsbG9jX3J4cSA9IDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIElDRV9WU0lfVkY6XG4mIzQzO1x0XHRxcy5hbGxvY190eHEgPSB2c2ktXHUwMDNldmYtXHUwMDNlbnVtX3JlcV9xcyA/OiB2c2ktXHUwMDNldmYtXHUwMDNlbnVtX3ZmX3FzO1xuJiM0MztcdFx0cXMuYWxsb2NfcnhxID0gcXMuYWxsb2NfdHhxO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBJQ0VfVlNJX0NITkw6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1Vua25vd24gVlNJIHR5cGUgJWRcXG5cJiMzNDssIHZzaS1cdTAwM2V0eXBlKTtcbiYjNDM7XHRcdHJldHVybiB2c2ktXHUwMDNlYWxsb2NfdHhxX3J4cTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBxcztcbiB9XG4gXG4gLyoqXG5AQCAtMTgwLDQ0ICYjNDM7MjIwLDI3IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0aWYgKFdBUk5fT04odnNpX3R5cGUgPT0gSUNFX1ZTSV9WRiBcdTAwMjZcdTAwMjYgIXZmKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdHZzaS1cdTAwM2VhbGxvY190eHFfcnhxID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgMCwgMCk7XG4mIzQzO1xuIFx0c3dpdGNoICh2c2lfdHlwZSkge1xuIFx0Y2FzZSBJQ0VfVlNJX1BGOlxuLVx0XHRpZiAodnNpLVx1MDAzZXJlcV90eHEpIHtcbi1cdFx0XHR2c2ktXHUwMDNlYWxsb2NfdHhxID0gdnNpLVx1MDAzZXJlcV90eHE7XG4mIzQzO1x0XHRpZiAodnNpLVx1MDAzZXJlcV90eHEpXG4gXHRcdFx0dnNpLVx1MDAzZW51bV90eHEgPSB2c2ktXHUwMDNlcmVxX3R4cTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHR2c2ktXHUwMDNlYWxsb2NfdHhxID0gaWNlX2dldF90eHFfY291bnQocGYpO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAodnNpLVx1MDAzZXJlcV9yeHEgXHUwMDI2XHUwMDI2IHRlc3RfYml0KElDRV9GTEFHX1JTU19FTkEsIHBmLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdFx0dnNpLVx1MDAzZW51bV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cTtcbiBcbiBcdFx0cGYtXHUwMDNlbnVtX2xhbl90eCA9IHZzaS1cdTAwM2VhbGxvY190eHE7XG4tXG4tXHRcdC8qIG9ubHkgMSBSeCBxdWV1ZSB1bmxlc3MgUlNTIGlzIGVuYWJsZWQgKi9cbi1cdFx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cdTAwM2VmbGFncykpIHtcbi1cdFx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAodnNpLVx1MDAzZXJlcV9yeHEpIHtcbi1cdFx0XHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cTtcbi1cdFx0XHRcdHZzaS1cdTAwM2VudW1fcnhxID0gdnNpLVx1MDAzZXJlcV9yeHE7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSBpY2VfZ2V0X3J4cV9jb3VudChwZik7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4gXHRcdHBmLVx1MDAzZW51bV9sYW5fcnggPSB2c2ktXHUwMDNlYWxsb2NfcnhxO1xuIFxuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IG1heCh2c2ktXHUwMDNlYWxsb2NfcnhxLCB2c2ktXHUwMDNlYWxsb2NfdHhxKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfU0Y6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAxO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMTtcbiBcdFx0dnNpLVx1MDAzZW51bV9xX3ZlY3RvcnMgPSAxO1xuIFx0XHR2c2ktXHUwMDNlaXJxX2R5bl9hbGxvYyA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfVlNJX1ZGOlxuIFx0XHRpZiAodmYtXHUwMDNlbnVtX3JlcV9xcylcbiBcdFx0XHR2Zi1cdTAwM2VudW1fdmZfcXMgPSB2Zi1cdTAwM2VudW1fcmVxX3FzO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfdHhxID0gdmYtXHUwMDNlbnVtX3ZmX3FzO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gdmYtXHUwMDNlbnVtX3ZmX3FzO1xuIFx0XHQvKiBwZi1cdTAwM2V2ZnMubnVtX21zaXhfcGVyIGluY2x1ZGVzIChWRiBtaXNjZWxsYW5lb3VzIHZlY3RvciAmIzQzO1xuIFx0XHQgKiBkYXRhIHF1ZXVlIGludGVycnVwdHMpLiBTaW5jZSB2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyBpcyBudW1iZXJcbiBcdFx0ICogb2YgcXVldWVzIHZlY3RvcnMsIHN1YnRyYWN0IDEgKElDRV9OT05RX1ZFQ1NfVkYpIGZyb20gdGhlXG5AQCAtMjI2LDIyICYjNDM7MjQ5LDE1IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IHZmLVx1MDAzZW51bV9tc2l4IC0gSUNFX05PTlFfVkVDU19WRjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfQ1RSTDpcbi1cdFx0dnNpLVx1MDAzZWFsbG9jX3R4cSA9IDE7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSAxO1xuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfVlNJX0NITkw6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAwO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfTEI6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAxO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMTtcbiBcdFx0LyogQSBkdW1teSBxX3ZlY3Rvciwgbm8gYWN0dWFsIElSUS4gKi9cbiBcdFx0dnNpLVx1MDAzZW51bV9xX3ZlY3RvcnMgPSAxO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtVbmtub3duIFZTSSB0eXBlICVkXFxuXCYjMzQ7LCB2c2lfdHlwZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuQEAgLTMzMCw2ICYjNDM7MzQ2LDMyIEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdHZzaS1cdTAwM2VyeHFfbWFwID0gTlVMTDtcbiB9XG4gXG4mIzQzOy8qIGZyZWUgc2luZ2xlIHN0YXRzIG1lbW9yeSAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2ljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQsIGJvb2wgZnJlZV9lbnRyaWVzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF2c2lfc3RhdClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWVfZW50cmllcykge1xuJiM0MztcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xuJiM0MztcdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbiYjNDM7XHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKTtcbiYjNDM7XHRrZnJlZSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKTtcbiYjNDM7XHRrZnJlZSh2c2lfc3RhdCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX3ZzaV9mcmVlX3N0YXRzIC0gRnJlZSB0aGUgcmluZyBzdGF0aXN0aWNzIHN0cnVjdHVyZXNcbiAgKiBAdnNpOiBWU0kgcG9pbnRlclxuQEAgLTMzOCw3ICYjNDM7MzgwLDYgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4ge1xuIFx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbi1cdGludCBpO1xuIFxuIFx0aWYgKHZzaS1cdTAwM2V0eXBlID09IElDRV9WU0lfQ0hOTClcbiBcdFx0cmV0dXJuO1xuQEAgLTM0NiwyNiAmIzQzOzM4Nyw3IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR2c2lfc3RhdCA9IHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XTtcbi1cdGlmICghdnNpX3N0YXQpXG4tXHRcdHJldHVybjtcbi1cbi1cdGljZV9mb3JfZWFjaF9hbGxvY190eHEodnNpLCBpKSB7XG4tXHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4tXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0aWNlX2Zvcl9lYWNoX2FsbG9jX3J4cSh2c2ksIGkpIHtcbi1cdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbi1cdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKTtcbi1cdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpO1xuLVx0a2ZyZWUodnNpX3N0YXQpO1xuJiM0MztcdF9faWNlX3ZzaV9mcmVlX3N0YXRzKHZzaV9zdGF0LCB0cnVlKTtcbiBcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IE5VTEw7XG4gfVxuIFxuQEAgLTUxMyw2ICYjNDM7NTM1LDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbXNpeF9jbGVhbl9yaW5ncyhpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXMoaW50IHR4cSwgaW50IHJ4cSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0cztcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4mIzQzO1xuJiM0MztcdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcbiYjNDM7XHR0eF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCp0eF9yaW5nX3N0YXRzLCB0eHEpO1xuJiM0MztcdHJ4X3Jpbmdfc3RhdHMgPSBremFsbG9jX29ianMoKnJ4X3Jpbmdfc3RhdHMsIHJ4cSk7XG4mIzQzO1x0aWYgKCF2c2lfc3RhdCB8fCAhdHhfcmluZ19zdGF0cyB8fCAhcnhfcmluZ19zdGF0cykge1xuJiM0MztcdFx0a2ZyZWUodnNpX3N0YXQpO1xuJiM0MztcdFx0a2ZyZWUodHhfcmluZ19zdGF0cyk7XG4mIzQzO1x0XHRrZnJlZShyeF9yaW5nX3N0YXRzKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW4gPSB0eHE7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c19sZW4gPSByeHE7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2c2lfc3RhdDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzIC0gQWxsb2NhdGUgc3RhdGlzdGljcyBhcnJheXNcbiAgKiBAdnNpOiBWU0kgcG9pbnRlclxuQEAgLTUzMSwzMSAmIzQzOzU3NywxMiBAQCBzdGF0aWMgaW50IGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdC8qIHJlYWxsb2Mgd2lsbCBoYXBwZW4gaW4gcmVidWlsZCBwYXRoICovXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpO1xuJiM0MztcdHZzaV9zdGF0ID0gaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXModnNpLVx1MDAzZWFsbG9jX3R4cSwgdnNpLVx1MDAzZWFsbG9jX3J4cSk7XG4gXHRpZiAoIXZzaV9zdGF0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxuLVx0XHRremFsbG9jX29ianMoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHZzaS1cdTAwM2VhbGxvY190eHEpO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKVxuLVx0XHRnb3RvIGVycl9hbGxvY190eDtcbi1cbi1cdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuLVx0XHRremFsbG9jX29ianMoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaS1cdTAwM2VhbGxvY19yeHEpO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKVxuLVx0XHRnb3RvIGVycl9hbGxvY19yeDtcbi1cbiBcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IHZzaV9zdGF0O1xuLVxuIFx0cmV0dXJuIDA7XG4tXG4tZXJyX2FsbG9jX3J4OlxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyk7XG4tZXJyX2FsbG9jX3R4OlxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyk7XG4tXHRrZnJlZSh2c2lfc3RhdCk7XG4tXHRwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0gPSBOVUxMO1xuLVx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuQEAgLTI5MjYsNiAmIzQzOzI5NTMsNTEgQEAgaWNlX3ZzaV9yZWJ1aWxkX2dldF9jb2FsZXNjZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0cmV0dXJuIHZzaS1cdTAwM2VudW1fcV92ZWN0b3JzO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3VudXNlZF9zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld192c2lfc3RhdClcbiYjNDM7e1xuJiM0MztcdGludCBuZXdfdHhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcdGludCBuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcdGludCBwcmV2X3R4cSA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcdGludCBwcmV2X3J4cSA9IHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gbmV3X3R4cTsgaSBcdTAwM2MgcHJldl90eHE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xuJiM0MztcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0Zm9yIChpbnQgaSA9IG5ld19yeHE7IGkgXHUwMDNjIHByZXZfcnhxOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbiYjNDM7XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqbmV3X3ZzaV9zdGF0KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG5ld190eHEsIG5ld19yeHEsIHByZXZfdHhxLCBwcmV2X3J4cTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4mIzQzO1x0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbiYjNDM7XG4mIzQzO1x0bmV3X3R4cSA9IG5ld192c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcbiYjNDM7XHRuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcdHZzaV9zdGF0ID0gcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdO1xuJiM0MztcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IG5ld192c2lfc3RhdDtcbiYjNDM7XHRpZiAoIXZzaV9zdGF0KVxuJiM0MztcdFx0cmV0dXJuOyAvKiBkb24mIzM5O3QgY29weSBpZiB0aGVyZSBpcyBubyBzb3VyY2UgKi9cbiYjNDM7XG4mIzQzO1x0cHJldl90eHEgPSB2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcbiYjNDM7XHRwcmV2X3J4cSA9IHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcbiYjNDM7XHRtZW1jcHkobmV3X3ZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsXG4mIzQzO1x0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cykgKiBtaW4ocHJldl90eHEsIG5ld190eHEpKTtcbiYjNDM7XHRtZW1jcHkobmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsXG4mIzQzO1x0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cykgKiBtaW4ocHJldl9yeHEsIG5ld19yeHEpKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlIC0gc2V0IGNvYWxlc2NlIGZyb20gZWFybGllciBzYXZlZCBhcnJheXNcbiAgKiBAdnNpOiBWU0kgY29ubmVjdGVkIHdpdGggcV92ZWN0b3JzXG5AQCAtMzAxMiw2MCAmIzQzOzMwODQsMzcgQEAgaWNlX3ZzaV9yZWJ1aWxkX3NldF9jb2FsZXNjZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIH1cbiBcbiAvKipcbi0gKiBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMgLSBGcmVlcyB1bnVzZWQgc3RhdCBzdHJ1Y3R1cmVzIG9yIGFsbG9jIG5ldyBvbmVzXG4tICogQHZzaTogVlNJIHBvaW50ZXJcbiYjNDM7ICogaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXMgLSByZXNpemUgcmluZyBzdGF0cyBhcnJheXMgZm9yIG5ldyBxdWV1ZSBjb3VudFxuJiM0MzsgKiBAdnNpOiBWU0kgdG8gc3dhcCB0aGUgcmluZyBzdGF0cyBhcnJheXMgb2ZcbiYjNDM7ICpcbiYjNDM7ICogQ2FsbCB3aGlsZSBAdnNpIHN0aWxsIG93bnMgaXRzIHF1ZXVlcyBhbmQgYmVmb3JlIGljZV92c2lfZGVjZmcoKSByZXR1cm5zIHRoZW1cbiYjNDM7ICogdG8gdGhlIFBGIHBvb2wsIHNvIHRoYXQgdGhlIG5ldyBzaXplIGlzIHdoYXQgaWNlX3ZzaV9zZXRfbnVtX3FzKCkgd2lsbCBjb21wdXRlXG4mIzQzOyAqIGFmdGVyd2FyZHMuIFN1cnZpdmluZyBlbnRyaWVzIGFyZSBjYXJyaWVkIG92ZXIsIHRoZSByZXN0IGlzIGZyZWVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZVxuICAqL1xuLXN0YXRpYyBpbnRcbi1pY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiYjNDM7aW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4ge1xuLVx0dTE2IHJlcV90eHEgPSB2c2ktXHUwMDNlcmVxX3R4cSA/IHZzaS1cdTAwM2VyZXFfdHhxIDogdnNpLVx1MDAzZWFsbG9jX3R4cTtcbi1cdHUxNiByZXFfcnhxID0gdnNpLVx1MDAzZXJlcV9yeHEgPyB2c2ktXHUwMDNlcmVxX3J4cSA6IHZzaS1cdTAwM2VhbGxvY19yeHE7XG4tXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzO1xuLVx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0cztcbi1cdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9hbGxvY19xdWV1ZXNfcGFyYW1zIHFzO1xuJiM0MztcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICpvbGRfc3RhdDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqbmV3X3N0YXQ7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0dTE2IHByZXZfdHhxID0gdnNpLVx1MDAzZWFsbG9jX3R4cTtcbi1cdHUxNiBwcmV2X3J4cSA9IHZzaS1cdTAwM2VhbGxvY19yeHE7XG4tXHRpbnQgaTtcbiBcbi1cdHZzaV9zdGF0ID0gcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdO1xuJiM0MztcdGlmICh2c2ktXHUwMDNldHlwZSA9PSBJQ0VfVlNJX0NITkwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChyZXFfdHhxIFx1MDAzYyBwcmV2X3R4cSkge1xuLVx0XHRmb3IgKGkgPSByZXFfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRpZiAodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xuLVx0XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4tXHRcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuJiM0MztcdHFzID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgdnNpLVx1MDAzZWFsbG9jX3R4cSAmIzQzOyB2c2ktXHUwMDNlbnVtX3hkcF90eHEsXG4mIzQzO1x0XHRcdFx0dnNpLVx1MDAzZWFsbG9jX3J4cSk7XG4gXG4tXHR0eF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cztcbi1cdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxuLVx0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzLCByZXFfdHhxLFxuLVx0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpLFxuLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpIHtcbi1cdFx0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0bmV3X3N0YXQgPSBpY2VfdnNpX25ld19zdGF0X2FycmF5cyhxcy5hbGxvY190eHEsIHFzLmFsbG9jX3J4cSk7XG4mIzQzO1x0aWYgKCFuZXdfc3RhdClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4gXG4tXHRpZiAocmVxX3J4cSBcdTAwM2MgcHJldl9yeHEpIHtcbi1cdFx0Zm9yIChpID0gcmVxX3J4cTsgaSBcdTAwM2MgcHJldl9yeHE7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJ4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzO1xuLVx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9XG4tXHRcdGtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsXG4tXHRcdFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyksXG4tXHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cykge1xuLVx0XHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0cztcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0b2xkX3N0YXQgPSBwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF07XG4mIzQzO1x0aWNlX3ZzaV9zZXRfc3RhdF9hcnJheXModnNpLCBuZXdfc3RhdCk7XG4mIzQzO1x0aWYgKG9sZF9zdGF0KSB7XG4mIzQzO1x0XHRpY2VfdnNpX2ZyZWVfdW51c2VkX3N0YXRfYXJyYXlzKG9sZF9zdGF0LCBuZXdfc3RhdCk7XG4mIzQzO1x0XHRfX2ljZV92c2lfZnJlZV9zdGF0cyhvbGRfc3RhdCwgZmFsc2UpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzA5OCw3ICYjNDM7MzE0Nyw3IEBAIGludCBpY2VfdnNpX3JlYnVpbGQoc3RydWN0IGljZV92c2kgKnZzaSwgdTMyIHZzaV9mbGFncylcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dnNpLVx1MDAzZXhkcF9zdGF0ZV9sb2NrKTtcbiBcbi1cdHJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpO1xuJiM0MztcdHJldCA9IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHZzaSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxuaW5kZXggNDk0NTRkOThkY2ZlZi4uNTIzNjA4OGMzMjBiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmhcbkBAIC02Nyw2ICYjNDM7NjcsNyBAQCB2b2lkIGljZV92c2lfZGVjZmcoc3RydWN0IGljZV92c2kgKnZzaSk7XG4gdm9pZCBpY2VfZGlzX3ZzaShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGxvY2tlZCk7XG4gXG4gaW50IGljZV92c2lfcmVidWlsZChzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MzIgdnNpX2ZsYWdzKTtcbiYjNDM7aW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpO1xuIGludCBpY2VfdnNpX2NmZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKTtcbiBzdHJ1Y3QgaWNlX3ZzaSAqaWNlX3ZzaV9hbGxvYyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfdnNpX2ZyZWUoc3RydWN0IGljZV92c2kgKnZzaSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbmluZGV4IDI3ZTRhY2IxNjIwZjAuLmZkNzBhOTNiOTg2OTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG5AQCAtMjY4LDYgJiM0MzsyNjgsMTAgQEAgc3RhdGljIGludCBpY2VfdmZfcmVjb25maWdfdnNpKHN0cnVjdCBpY2VfdmYgKnZmKVxuIFxuIFx0dnNpLVx1MDAzZWZsYWdzID0gSUNFX1ZTSV9GTEFHX05PX0lOSVQ7XG4gXG4mIzQzO1x0ZXJyID0gaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXModnNpKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4gXHRpY2VfdnNpX2RlY2ZnKHZzaSk7XG4gXHRpY2VfZmx0cl9yZW1vdmVfYWxsKHZzaSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTM6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBQQ0llIE5JQyBoYXJkd2FyZSAoRTgwMC9FODEwIHNlcmllcykgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk0MzZhZjI3Mzk3YzgwNzNhZjFmY2FkZTcwYjI0NjE5MTUyMzE1NjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxMzozMDoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAppbmRleCBmNzJiYjFhYTQwNjc0Li40OGY0MzEyZGY0YTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCkBAIC0zMjgsNiAmIzQzOzMyOCw4IEBAIGVudW0gaWNlX3ZzaV9zdGF0ZSB7CiBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyB7CiAJc3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0czsgIC8qIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi8KIAlzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzOyAgLyogUnggcmluZyBzdGF0cyBhcnJheSAqLwomIzQzOwl1MTYgdHhfcmluZ19zdGF0c19sZW47ICAvKiBMZW5ndGggb2YgdGhlIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi8KJiM0MzsJdTE2IHJ4X3Jpbmdfc3RhdHNfbGVuOyAgLyogTGVuZ3RoIG9mIHRoZSBSeCByaW5nIHN0YXRzIGFycmF5ICovCiB9OwogCiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi8KQEAgLTQwMSw5ICYjNDM7NDAzLDExIEBAIHN0cnVjdCBpY2VfdnNpIHsKIAl1OCByeF9tYXBwaW5nX21vZGU7CQkgLyogSUNFX01BUF9NT0RFX1tDT05USUd8U0NBVFRFUl0gKi8KIAl1MTYgKnR4cV9tYXA7CQkJIC8qIGluZGV4IGluIHBmLSZndDthdmFpbF90eHFzICovCiAJdTE2ICpyeHFfbWFwOwkJCSAvKiBpbmRleCBpbiBwZi0mZ3Q7YXZhaWxfcnhxcyAqLwotCXUxNiBhbGxvY190eHE7CQkJIC8qIEFsbG9jYXRlZCBUeCBxdWV1ZXMgKi8KJiM0MzsJc3RydWN0X2dyb3VwX3RhZ2dlZChpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMsIGFsbG9jX3R4cV9yeHEsCiYjNDM7CQl1MTYgYWxsb2NfdHhxOwkJIC8qIEFsbG9jYXRlZCBUeCBxdWV1ZXMgKi8KJiM0MzsJCXUxNiBhbGxvY19yeHE7CQkgLyogQWxsb2NhdGVkIFJ4IHF1ZXVlcyAqLwomIzQzOwkpOwogCXUxNiBudW1fdHhxOwkJCSAvKiBVc2VkIFR4IHF1ZXVlcyAqLwotCXUxNiBhbGxvY19yeHE7CQkJIC8qIEFsbG9jYXRlZCBSeCBxdWV1ZXMgKi8KIAl1MTYgbnVtX3J4cTsJCQkgLyogVXNlZCBSeCBxdWV1ZXMgKi8KIAl1MTYgcmVxX3R4cTsJCQkgLyogVXNlciByZXF1ZXN0ZWQgVHggcXVldWVzICovCiAJdTE2IHJlcV9yeHE7CQkJIC8qIFVzZXIgcmVxdWVzdGVkIFJ4IHF1ZXVlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKaW5kZXggOGNkYzRmZGE4OWU5Ny4uNDk0OWYyOWU1MzhlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jCkBAIC0xNTMsMTYgJiM0MzsxNTMsNTYgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9zZXRfbnVtX2Rlc2Moc3RydWN0IGljZV92c2kgKnZzaSkKIAl9CiB9CiAKLXN0YXRpYyB1MTYgaWNlX2dldF9yeHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7c3RhdGljIHUxNiBpY2VfZ2V0X3J4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZiwgdTE2IGhlbGQpCiB7Ci0JcmV0dXJuIG1pbihpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZiksCi0JCSAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpOwomIzQzOwlyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZikgJiM0MzsgaGVsZCwKJiM0MzsJCSAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7CiB9CiAKLXN0YXRpYyB1MTYgaWNlX2dldF90eHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7c3RhdGljIHUxNiBpY2VfZ2V0X3R4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZiwgdTE2IGhlbGQpCiB7Ci0JcmV0dXJuIG1pbihpY2VfZ2V0X2F2YWlsX3R4cV9jb3VudChwZiksCi0JCSAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpOwomIzQzOwlyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3R4cV9jb3VudChwZikgJiM0MzsgaGVsZCwKJiM0MzsJCSAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEBoZWxkX3R4cSwgQGhlbGRfcnhxOiBxdWV1ZXMgdGhlIFZTSSBzdGlsbCBvd25zIGJ1dCBpcyBhYm91dCB0byByZXR1cm4gdG8gdGhlCiYjNDM7ICogUEYgcG9vbCwgc28gdGhhdCB0aGUgcmVzdWx0IG1hdGNoZXMgd2hhdCBpdCB3aWxsIGJlIG9uY2UgdGhleSBhcmUgYmFjayB0aGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtcwomIzQzO2ljZV92c2lfZ2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MTYgaGVsZF90eHEsIHUxNiBoZWxkX3J4cSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMgcXMgPSB7fTsKJiM0MzsJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7CiYjNDM7CiYjNDM7CXN3aXRjaCAodnNpLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgSUNFX1ZTSV9QRjoKJiM0MzsJCXFzLmFsbG9jX3R4cSA9IHZzaS0mZ3Q7cmVxX3R4cSA/OiBpY2VfZ2V0X3R4cV9jb3VudChwZiwgaGVsZF90eHEpOwomIzQzOwomIzQzOwkJLyogb25seSAxIFJ4IHF1ZXVlIHVubGVzcyBSU1MgaXMgZW5hYmxlZCAqLwomIzQzOwkJaWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCXFzLmFsbG9jX3J4cSA9IDE7CiYjNDM7CQllbHNlCiYjNDM7CQkJcXMuYWxsb2NfcnhxID0gdnNpLSZndDtyZXFfcnhxID86CiYjNDM7CQkJCSAgICAgICBpY2VfZ2V0X3J4cV9jb3VudChwZiwgaGVsZF9yeHEpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSUNFX1ZTSV9TRjoKJiM0MzsJY2FzZSBJQ0VfVlNJX0NUUkw6CiYjNDM7CWNhc2UgSUNFX1ZTSV9MQjoKJiM0MzsJCXFzLmFsbG9jX3R4cSA9IDE7CiYjNDM7CQlxcy5hbGxvY19yeHEgPSAxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSUNFX1ZTSV9WRjoKJiM0MzsJCXFzLmFsbG9jX3R4cSA9IHZzaS0mZ3Q7dmYtJmd0O251bV9yZXFfcXMgPzogdnNpLSZndDt2Zi0mZ3Q7bnVtX3ZmX3FzOwomIzQzOwkJcXMuYWxsb2NfcnhxID0gcXMuYWxsb2NfdHhxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSUNFX1ZTSV9DSE5MOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtVbmtub3duIFZTSSB0eXBlICVkXG4mIzM0OywgdnNpLSZndDt0eXBlKTsKJiM0MzsJCXJldHVybiB2c2ktJmd0O2FsbG9jX3R4cV9yeHE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHFzOwogfQogCiAvKioKQEAgLTE4MCw0NCAmIzQzOzIyMCwyNyBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSkKIAlpZiAoV0FSTl9PTih2c2lfdHlwZSA9PSBJQ0VfVlNJX1ZGICZhbXA7JmFtcDsgIXZmKSkKIAkJcmV0dXJuOwogCiYjNDM7CXZzaS0mZ3Q7YWxsb2NfdHhxX3J4cSA9IGljZV92c2lfZ2V0X251bV9xcyh2c2ksIDAsIDApOwomIzQzOwogCXN3aXRjaCAodnNpX3R5cGUpIHsKIAljYXNlIElDRV9WU0lfUEY6Ci0JCWlmICh2c2ktJmd0O3JlcV90eHEpIHsKLQkJCXZzaS0mZ3Q7YWxsb2NfdHhxID0gdnNpLSZndDtyZXFfdHhxOwomIzQzOwkJaWYgKHZzaS0mZ3Q7cmVxX3R4cSkKIAkJCXZzaS0mZ3Q7bnVtX3R4cSA9IHZzaS0mZ3Q7cmVxX3R4cTsKLQkJfSBlbHNlIHsKLQkJCXZzaS0mZ3Q7YWxsb2NfdHhxID0gaWNlX2dldF90eHFfY291bnQocGYpOwotCQl9CiYjNDM7CQlpZiAodnNpLSZndDtyZXFfcnhxICZhbXA7JmFtcDsgdGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtJmd0O2ZsYWdzKSkKJiM0MzsJCQl2c2ktJmd0O251bV9yeHEgPSB2c2ktJmd0O3JlcV9yeHE7CiAKIAkJcGYtJmd0O251bV9sYW5fdHggPSB2c2ktJmd0O2FsbG9jX3R4cTsKLQotCQkvKiBvbmx5IDEgUnggcXVldWUgdW5sZXNzIFJTUyBpcyBlbmFibGVkICovCi0JCWlmICghdGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtJmd0O2ZsYWdzKSkgewotCQkJdnNpLSZndDthbGxvY19yeHEgPSAxOwotCQl9IGVsc2UgewotCQkJaWYgKHZzaS0mZ3Q7cmVxX3J4cSkgewotCQkJCXZzaS0mZ3Q7YWxsb2NfcnhxID0gdnNpLSZndDtyZXFfcnhxOwotCQkJCXZzaS0mZ3Q7bnVtX3J4cSA9IHZzaS0mZ3Q7cmVxX3J4cTsKLQkJCX0gZWxzZSB7Ci0JCQkJdnNpLSZndDthbGxvY19yeHEgPSBpY2VfZ2V0X3J4cV9jb3VudChwZik7Ci0JCQl9Ci0JCX0KLQogCQlwZi0mZ3Q7bnVtX2xhbl9yeCA9IHZzaS0mZ3Q7YWxsb2NfcnhxOwogCiAJCXZzaS0mZ3Q7bnVtX3FfdmVjdG9ycyA9IG1heCh2c2ktJmd0O2FsbG9jX3J4cSwgdnNpLSZndDthbGxvY190eHEpOwogCQlicmVhazsKIAljYXNlIElDRV9WU0lfU0Y6Ci0JCXZzaS0mZ3Q7YWxsb2NfdHhxID0gMTsKLQkJdnNpLSZndDthbGxvY19yeHEgPSAxOwogCQl2c2ktJmd0O251bV9xX3ZlY3RvcnMgPSAxOwogCQl2c2ktJmd0O2lycV9keW5fYWxsb2MgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIElDRV9WU0lfVkY6CiAJCWlmICh2Zi0mZ3Q7bnVtX3JlcV9xcykKIAkJCXZmLSZndDtudW1fdmZfcXMgPSB2Zi0mZ3Q7bnVtX3JlcV9xczsKLQkJdnNpLSZndDthbGxvY190eHEgPSB2Zi0mZ3Q7bnVtX3ZmX3FzOwotCQl2c2ktJmd0O2FsbG9jX3J4cSA9IHZmLSZndDtudW1fdmZfcXM7CiAJCS8qIHBmLSZndDt2ZnMubnVtX21zaXhfcGVyIGluY2x1ZGVzIChWRiBtaXNjZWxsYW5lb3VzIHZlY3RvciAmIzQzOwogCQkgKiBkYXRhIHF1ZXVlIGludGVycnVwdHMpLiBTaW5jZSB2c2ktJmd0O251bV9xX3ZlY3RvcnMgaXMgbnVtYmVyCiAJCSAqIG9mIHF1ZXVlcyB2ZWN0b3JzLCBzdWJ0cmFjdCAxIChJQ0VfTk9OUV9WRUNTX1ZGKSBmcm9tIHRoZQpAQCAtMjI2LDIyICYjNDM7MjQ5LDE1IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQl2c2ktJmd0O251bV9xX3ZlY3RvcnMgPSB2Zi0mZ3Q7bnVtX21zaXggLSBJQ0VfTk9OUV9WRUNTX1ZGOwogCQlicmVhazsKIAljYXNlIElDRV9WU0lfQ1RSTDoKLQkJdnNpLSZndDthbGxvY190eHEgPSAxOwotCQl2c2ktJmd0O2FsbG9jX3J4cSA9IDE7CiAJCXZzaS0mZ3Q7bnVtX3FfdmVjdG9ycyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgSUNFX1ZTSV9DSE5MOgotCQl2c2ktJmd0O2FsbG9jX3R4cSA9IDA7Ci0JCXZzaS0mZ3Q7YWxsb2NfcnhxID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJQ0VfVlNJX0xCOgotCQl2c2ktJmd0O2FsbG9jX3R4cSA9IDE7Ci0JCXZzaS0mZ3Q7YWxsb2NfcnhxID0gMTsKIAkJLyogQSBkdW1teSBxX3ZlY3Rvciwgbm8gYWN0dWFsIElSUS4gKi8KIAkJdnNpLSZndDtudW1fcV92ZWN0b3JzID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VW5rbm93biBWU0kgdHlwZSAlZFxuJiMzNDssIHZzaV90eXBlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zMzAsNiAmIzQzOzM0NiwzMiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJdnNpLSZndDtyeHFfbWFwID0gTlVMTDsKIH0KIAomIzQzOy8qIGZyZWUgc2luZ2xlIHN0YXRzIG1lbW9yeSAqLwomIzQzO3N0YXRpYyB2b2lkIF9faWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdCwgYm9vbCBmcmVlX2VudHJpZXMpCiYjNDM7ewomIzQzOwlpZiAoIXZzaV9zdGF0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZnJlZV9lbnRyaWVzKSB7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0pIHsKJiM0MzsJCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCByY3UpOwomIzQzOwkJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzX2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNbaV0pIHsKJiM0MzsJCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCByY3UpOwomIzQzOwkJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpOwomIzQzOwlrZnJlZSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyk7CiYjNDM7CWtmcmVlKHZzaV9zdGF0KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV92c2lfZnJlZV9zdGF0cyAtIEZyZWUgdGhlIHJpbmcgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzCiAgKiBAdnNpOiBWU0kgcG9pbnRlcgpAQCAtMzM4LDcgJiM0MzszODAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSkKIHsKIAlzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7CiAJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7Ci0JaW50IGk7CiAKIAlpZiAodnNpLSZndDt0eXBlID09IElDRV9WU0lfQ0hOTCkKIAkJcmV0dXJuOwpAQCAtMzQ2LDI2ICYjNDM7Mzg3LDcgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJCXJldHVybjsKIAogCXZzaV9zdGF0ID0gcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF07Ci0JaWYgKCF2c2lfc3RhdCkKLQkJcmV0dXJuOwotCi0JaWNlX2Zvcl9lYWNoX2FsbG9jX3R4cSh2c2ksIGkpIHsKLQkJaWYgKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldKSB7Ci0JCQlrZnJlZV9yY3UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7Ci0JCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKLQkJfQotCX0KLQotCWljZV9mb3JfZWFjaF9hbGxvY19yeHEodnNpLCBpKSB7Ci0JCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewotCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCByY3UpOwotCQkJV1JJVEVfT05DRSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7Ci0JCX0KLQl9Ci0KLQlrZnJlZSh2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyk7Ci0Ja2ZyZWUodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpOwotCWtmcmVlKHZzaV9zdGF0KTsKJiM0MzsJX19pY2VfdnNpX2ZyZWVfc3RhdHModnNpX3N0YXQsIHRydWUpOwogCXBmLSZndDt2c2lfc3RhdHNbdnNpLSZndDtpZHhdID0gTlVMTDsKIH0KIApAQCAtNTEzLDYgJiM0Mzs1MzUsMzAgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9tc2l4X2NsZWFuX3JpbmdzKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXMoaW50IHR4cSwgaW50IHJ4cSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7CiYjNDM7CXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDsKJiM0MzsKJiM0MzsJdnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpOwomIzQzOwl0eF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCp0eF9yaW5nX3N0YXRzLCB0eHEpOwomIzQzOwlyeF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCpyeF9yaW5nX3N0YXRzLCByeHEpOwomIzQzOwlpZiAoIXZzaV9zdGF0IHx8ICF0eF9yaW5nX3N0YXRzIHx8ICFyeF9yaW5nX3N0YXRzKSB7CiYjNDM7CQlrZnJlZSh2c2lfc3RhdCk7CiYjNDM7CQlrZnJlZSh0eF9yaW5nX3N0YXRzKTsKJiM0MzsJCWtmcmVlKHJ4X3Jpbmdfc3RhdHMpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzOwomIzQzOwl2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7CiYjNDM7CXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbiA9IHR4cTsKJiM0MzsJdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNfbGVuID0gcnhxOwomIzQzOwomIzQzOwlyZXR1cm4gdnNpX3N0YXQ7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzIC0gQWxsb2NhdGUgc3RhdGlzdGljcyBhcnJheXMKICAqIEB2c2k6IFZTSSBwb2ludGVyCkBAIC01MzEsMzEgJiM0Mzs1NzcsMTIgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJLyogcmVhbGxvYyB3aWxsIGhhcHBlbiBpbiByZWJ1aWxkIHBhdGggKi8KIAkJcmV0dXJuIDA7CiAKLQl2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7CiYjNDM7CXZzaV9zdGF0ID0gaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXModnNpLSZndDthbGxvY190eHEsIHZzaS0mZ3Q7YWxsb2NfcnhxKTsKIAlpZiAoIXZzaV9zdGF0KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzID0KLQkJa3phbGxvY19vYmpzKCp2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cywgdnNpLSZndDthbGxvY190eHEpOwotCWlmICghdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpCi0JCWdvdG8gZXJyX2FsbG9jX3R4OwotCi0JdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMgPQotCQlremFsbG9jX29ianMoKnZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzLCB2c2ktJmd0O2FsbG9jX3J4cSk7Ci0JaWYgKCF2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cykKLQkJZ290byBlcnJfYWxsb2Nfcng7Ci0KIAlwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XSA9IHZzaV9zdGF0OwotCiAJcmV0dXJuIDA7Ci0KLWVycl9hbGxvY19yeDoKLQlrZnJlZSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyk7Ci1lcnJfYWxsb2NfdHg6Ci0Ja2ZyZWUodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpOwotCWtmcmVlKHZzaV9zdGF0KTsKLQlwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XSA9IE5VTEw7Ci0JcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qKgpAQCAtMjkyNiw2ICYjNDM7Mjk1Myw1MSBAQCBpY2VfdnNpX3JlYnVpbGRfZ2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksCiAJcmV0dXJuIHZzaS0mZ3Q7bnVtX3FfdmVjdG9yczsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGljZV92c2lfZnJlZV91bnVzZWRfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0LAomIzQzOwkJCQkJICAgIHN0cnVjdCBpY2VfdnNpX3N0YXRzICpuZXdfdnNpX3N0YXQpCiYjNDM7ewomIzQzOwlpbnQgbmV3X3R4cSA9IG5ld192c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0c19sZW47CiYjNDM7CWludCBuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJaW50IHByZXZfdHhxID0gdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNfbGVuOwomIzQzOwlpbnQgcHJldl9yeHEgPSB2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c19sZW47CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSBuZXdfdHhxOyBpICZsdDsgcHJldl90eHE7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0pIHsKJiM0MzsJCQlrZnJlZV9yY3UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7CiYjNDM7CQkJV1JJVEVfT05DRSh2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZm9yIChpbnQgaSA9IG5ld19yeHE7IGkgJmx0OyBwcmV2X3J4cTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewomIzQzOwkJCWtmcmVlX3JjdSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSwgcmN1KTsKJiM0MzsJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLAomIzQzOwkJCQkgICAgc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld192c2lfc3RhdCkKJiM0Mzt7CiYjNDM7CXUxNiBuZXdfdHhxLCBuZXdfcnhxLCBwcmV2X3R4cSwgcHJldl9yeHE7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDsKJiM0MzsJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7CiYjNDM7CiYjNDM7CW5ld190eHEgPSBuZXdfdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNfbGVuOwomIzQzOwluZXdfcnhxID0gbmV3X3ZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJdnNpX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKJiM0MzsJcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0gPSBuZXdfdnNpX3N0YXQ7CiYjNDM7CWlmICghdnNpX3N0YXQpCiYjNDM7CQlyZXR1cm47IC8qIGRvbiYjMzk7dCBjb3B5IGlmIHRoZXJlIGlzIG5vIHNvdXJjZSAqLwomIzQzOwomIzQzOwlwcmV2X3R4cSA9IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJcHJldl9yeHEgPSB2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c19sZW47CiYjNDM7CiYjNDM7CW1lbWNweShuZXdfdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzLAomIzQzOwkgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cykgKiBtaW4ocHJldl90eHEsIG5ld190eHEpKTsKJiM0MzsJbWVtY3B5KG5ld192c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cywgdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMsCiYjNDM7CSAgICAgICBzaXplb2YoKnZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzKSAqIG1pbihwcmV2X3J4cSwgbmV3X3J4cSkpOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX3ZzaV9yZWJ1aWxkX3NldF9jb2FsZXNjZSAtIHNldCBjb2FsZXNjZSBmcm9tIGVhcmxpZXIgc2F2ZWQgYXJyYXlzCiAgKiBAdnNpOiBWU0kgY29ubmVjdGVkIHdpdGggcV92ZWN0b3JzCkBAIC0zMDEyLDYwICYjNDM7MzA4NCwzNyBAQCBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksCiB9CiAKIC8qKgotICogaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzIC0gRnJlZXMgdW51c2VkIHN0YXQgc3RydWN0dXJlcyBvciBhbGxvYyBuZXcgb25lcwotICogQHZzaTogVlNJIHBvaW50ZXIKJiM0MzsgKiBpY2VfdnNpX3Jlc2l6ZV9zdGF0X2FycmF5cyAtIHJlc2l6ZSByaW5nIHN0YXRzIGFycmF5cyBmb3IgbmV3IHF1ZXVlIGNvdW50CiYjNDM7ICogQHZzaTogVlNJIHRvIHN3YXAgdGhlIHJpbmcgc3RhdHMgYXJyYXlzIG9mCiYjNDM7ICoKJiM0MzsgKiBDYWxsIHdoaWxlIEB2c2kgc3RpbGwgb3ducyBpdHMgcXVldWVzIGFuZCBiZWZvcmUgaWNlX3ZzaV9kZWNmZygpIHJldHVybnMgdGhlbQomIzQzOyAqIHRvIHRoZSBQRiBwb29sLCBzbyB0aGF0IHRoZSBuZXcgc2l6ZSBpcyB3aGF0IGljZV92c2lfc2V0X251bV9xcygpIHdpbGwgY29tcHV0ZQomIzQzOyAqIGFmdGVyd2FyZHMuIFN1cnZpdmluZyBlbnRyaWVzIGFyZSBjYXJyaWVkIG92ZXIsIHRoZSByZXN0IGlzIGZyZWVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKICAqLwotc3RhdGljIGludAotaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiYjNDM7aW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiB7Ci0JdTE2IHJlcV90eHEgPSB2c2ktJmd0O3JlcV90eHEgPyB2c2ktJmd0O3JlcV90eHEgOiB2c2ktJmd0O2FsbG9jX3R4cTsKLQl1MTYgcmVxX3J4cSA9IHZzaS0mZ3Q7cmVxX3J4cSA/IHZzaS0mZ3Q7cmVxX3J4cSA6IHZzaS0mZ3Q7YWxsb2NfcnhxOwotCXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7Ci0Jc3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsKLQlzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMgcXM7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX3N0YXRzICpvbGRfc3RhdDsKJiM0MzsJc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld19zdGF0OwogCXN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLSZndDtiYWNrOwotCXUxNiBwcmV2X3R4cSA9IHZzaS0mZ3Q7YWxsb2NfdHhxOwotCXUxNiBwcmV2X3J4cSA9IHZzaS0mZ3Q7YWxsb2NfcnhxOwotCWludCBpOwogCi0JdnNpX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKJiM0MzsJaWYgKHZzaS0mZ3Q7dHlwZSA9PSBJQ0VfVlNJX0NITkwpCiYjNDM7CQlyZXR1cm4gMDsKIAotCWlmIChyZXFfdHhxICZsdDsgcHJldl90eHEpIHsKLQkJZm9yIChpID0gcmVxX3R4cTsgaSAmbHQ7IHByZXZfdHhxOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldKSB7Ci0JCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCByY3UpOwotCQkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwotCQkJfQotCQl9Ci0JfQomIzQzOwlxcyA9IGljZV92c2lfZ2V0X251bV9xcyh2c2ksIHZzaS0mZ3Q7YWxsb2NfdHhxICYjNDM7IHZzaS0mZ3Q7bnVtX3hkcF90eHEsCiYjNDM7CQkJCXZzaS0mZ3Q7YWxsb2NfcnhxKTsKIAotCXR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0czsKLQl2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyA9Ci0JCWtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzLCByZXFfdHhxLAotCQkJICAgICAgIHNpemVvZigqdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpLAotCQkJICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQlpZiAoIXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzKSB7Ci0JCXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0czsKJiM0MzsJbmV3X3N0YXQgPSBpY2VfdnNpX25ld19zdGF0X2FycmF5cyhxcy5hbGxvY190eHEsIHFzLmFsbG9jX3J4cSk7CiYjNDM7CWlmICghbmV3X3N0YXQpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCWlmIChyZXFfcnhxICZsdDsgcHJldl9yeHEpIHsKLQkJZm9yIChpID0gcmVxX3J4cTsgaSAmbHQ7IHByZXZfcnhxOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldKSB7Ci0JCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCByY3UpOwotCQkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwotCQkJfQotCQl9Ci0JfQotCi0JcnhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzOwotCXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzID0KLQkJa3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsCi0JCQkgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCWlmICghdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpIHsKLQkJdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMgPSByeF9yaW5nX3N0YXRzOwotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJb2xkX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKJiM0MzsJaWNlX3ZzaV9zZXRfc3RhdF9hcnJheXModnNpLCBuZXdfc3RhdCk7CiYjNDM7CWlmIChvbGRfc3RhdCkgewomIzQzOwkJaWNlX3ZzaV9mcmVlX3VudXNlZF9zdGF0X2FycmF5cyhvbGRfc3RhdCwgbmV3X3N0YXQpOwomIzQzOwkJX19pY2VfdnNpX2ZyZWVfc3RhdHMob2xkX3N0YXQsIGZhbHNlKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMwOTgsNyAmIzQzOzMxNDcsNyBAQCBpbnQgaWNlX3ZzaV9yZWJ1aWxkKHN0cnVjdCBpY2VfdnNpICp2c2ksIHUzMiB2c2lfZmxhZ3MpCiAKIAltdXRleF9sb2NrKCZhbXA7dnNpLSZndDt4ZHBfc3RhdGVfbG9jayk7CiAKLQlyZXQgPSBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXModnNpKTsKJiM0MzsJcmV0ID0gaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXModnNpKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmgKaW5kZXggNDk0NTRkOThkY2ZlZi4uNTIzNjA4OGMzMjBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5oCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCB2b2lkIGljZV92c2lfZGVjZmcoc3RydWN0IGljZV92c2kgKnZzaSk7CiB2b2lkIGljZV9kaXNfdnNpKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgbG9ja2VkKTsKIAogaW50IGljZV92c2lfcmVidWlsZChzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MzIgdnNpX2ZsYWdzKTsKJiM0MztpbnQgaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSk7CiBpbnQgaWNlX3ZzaV9jZmcoc3RydWN0IGljZV92c2kgKnZzaSk7CiBzdHJ1Y3QgaWNlX3ZzaSAqaWNlX3ZzaV9hbGxvYyhzdHJ1Y3QgaWNlX3BmICpwZik7CiB2b2lkIGljZV92c2lfZnJlZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jCmluZGV4IDI3ZTRhY2IxNjIwZjAuLmZkNzBhOTNiOTg2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYwpAQCAtMjY4LDYgJiM0MzsyNjgsMTAgQEAgc3RhdGljIGludCBpY2VfdmZfcmVjb25maWdfdnNpKHN0cnVjdCBpY2VfdmYgKnZmKQogCiAJdnNpLSZndDtmbGFncyA9IElDRV9WU0lfRkxBR19OT19JTklUOwogCiYjNDM7CWVyciA9IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHZzaSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWljZV92c2lfZGVjZmcodnNpKTsKIAlpY2VfZmx0cl9yZW1vdmVfYWxsKHZzaSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGUgY29kZSBtb2RpZmljYXRpb25zIGFuZCBpbnN0cnVjdGlvbnMgY2FyZWZ1bGx5LiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIgRTgwMCBzZXJpZXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBpY2VgIGRyaXZlciwgYmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9uczogYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaGAsIGBpY2VfbGliLmNgLCBgaWNlX2xpYi5oYCwgYW5kIGBpY2VfdmZfbGliLmNgLgoKTm93LCBhY2NvcmRpbmcgdG8gU2VjdGlvbiAyIG9mIHRoZSB0cmlhZ2UgcGhpbG9zb3BoeSwgd2UgbmVlZCB0byBjb25zaWRlciBpZiB0aGlzIGRyaXZlciBpbnZvbHZlcyAmIzM0O3N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7LiBUaGlzIG1lYW5zIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzLCBpcyB0aGUgSW50ZWwgYGljZWAgZHJpdmVyIHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgZW52aXJvbm1lbnRzLCBvciBkb2VzIGl0ICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdW5jdGlvbj8KCkkga25vdyB0aGUgYGljZWAgZHJpdmVyIGlzIHRoZSBkcml2ZXIgZm9yIEludGVsIEV0aGVybmV0IDgwMCBTZXJpZXMgTklDcy4gSXQgd29ya3Mgd2l0aCBJbnRlbCBOSUMgaGFyZHdhcmUgKFBDSSBkZXZpY2UpIGFuZCBmaXJtd2FyZSB0aHJvdWdoIGFkbWluIHF1ZXVlcyBhbmQgcmVnaXN0ZXJzLiBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgYGljZWAgaGFyZHdhcmUgZGlyZWN0bHkuIFFFTVUgaGFuZGxlcyBvdGhlciBkcml2ZXJzIGxpa2UgZTEwMDAsIGUxMDAwZSwgaWdiLCBhbmQgdmlydGlvLW5ldCwgYnV0IG5vdCB0aGUgRTgwMCBzZXJpZXMuIFNpbWlsYXJseSwgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBzb2Z0d2FyZSBlbXVsYXRpb24gbWV0aG9kcyBsaWtlIG5ldGtpdCwgZHVtbXksIHZldGgsIHRhcC90dW4sIHZpcnRpbywgb3IgVVNCIGdhZGdldCwgZm9yIHRoZSBgaWNlYCBkcml2ZXIuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiBmb3IgYElDRWAgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjY4PWNvbmZpZyBJNDBFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjkxOmNvbmZpZyBJQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMyMS1cdGJvb2wgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzMxOmNvbmZpZyBJQ0VfU1dJVENIREVWXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMi1cdGJvb2wgXCYjMzQ7U3dpdGNoZGV2IFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzQ1OmNvbmZpZyBJQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIHBsYXRmb3JtcyB3aXRoIFBUTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIElDRSBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBJbnRlbCBFdGhlcm5ldCBgSUNFYCBkcml2ZXIuIEJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBkcml2ZXImIzM5O3MgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXJvdW5kIGxpbmUgMjkxIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnYC4gVGhpcyBmaWxlIHVzdWFsbHkgb3V0bGluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBzbyBpdCYjMzk7cyB0aGUgaWRlYWwgcGxhY2UgdG8gZGVjaXBoZXIgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIHRoZSBgSUNFYCBkcml2ZXIgcmVsaWVzIHVwb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBuZWVkcyB0byBzdWNjZXNzZnVsbHkgaW5jbHVkZSB0aGF0IGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFxuIDI5MTpcdGNvbmZpZyBJQ0VcbiAyOTI6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFwmIzM0O1xuIDI5MzpcdFx0ZGVmYXVsdCBuXG4gMjk0Olx0XHRkZXBlbmRzIG9uIFBDSV9NU0lcbiAyOTU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAyOTY6XHRcdGRlcGVuZHMgb24gR05TUyB8fCBHTlNTID0gblxuIDI5NzpcdFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbiAyOTg6XHRcdHNlbGVjdCBESU1MSUJcbiAyOTk6XHRcdHNlbGVjdCBMSUJFVEhfWERQXG4gMzAwOlx0XHRzZWxlY3QgTElCSUVcbiAzMDE6XHRcdHNlbGVjdCBMSUJJRV9BRE1JTlFcbiAzMDI6XHRcdHNlbGVjdCBMSUJJRV9GV0xPRyBpZiBERUJVR19GU1xuIDMwMzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gMzA0Olx0XHRzZWxlY3QgUEFDS0lOR1xuIDMwNTpcdFx0c2VsZWN0IFBMRE1GV1xuIDMwNjpcdFx0c2VsZWN0IERQTExcbiAzMDc6XHRcdGhlbHBcbiAzMDg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBvZlxuIDMwOTpcdFx0ICBkZXZpY2VzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ29cbiAzMTA6XHRcdCAgdG8gdGhlIEFkYXB0ZXIgXHUwMDI2IERyaXZlciBJRCBHdWlkZSB0aGF0IGNhbiBiZSBsb2NhdGVkIGF0OlxuIDMxMTpcdFxuIDMxMjpcdFx0ICBcdTAwM2NodHRwOi8vc3VwcG9ydC5pbnRlbC5jb21cdTAwM2VcbiAzMTM6XHRcbiAzMTQ6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gMzE1Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcdTAwM2UuXG4gMzE2Olx0XG4gMzE3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAzMTg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgaWNlLlxuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA0CgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDQxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmc9ZmFsc2UgZm9yIEludGVsIEU4MDAgU2VyaWVzIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBndWlkZWxpbmVzIGNvcnJlY3RseS4gVGhlIGNvcmUgb2YgaXQgYWxsIGlzIGFib3V0IHdoZW4gKm5vdCogdG8gZnV6ei4gUnVsZSAyIHNlZW1zIHJlbGV2YW50IGhlcmUsIHNwZWNpZmljYWxseSB0aGUgcGFydCBhYm91dCAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhpczsgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLgoKVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcywgb3IgYGljZWAuIEkga25vdyB0aGlzIGRyaXZlciBpbnRpbWF0ZWx5IOKAkyBpdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgTklDIGRyaXZlciwgYW5kIGl0ICphYnNvbHV0ZWx5KiByZWxpZXMgb24gcGh5c2ljYWwgSW50ZWwgRTgxMC9FODAwIFBDSWUgaGFyZHdhcmUsIHRoZSBBU0lDcy4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgYW5kIEdDRSwgc2ltcGx5ICpkb24mIzM5O3QqIGVtdWxhdGUgdGhpcyBoYXJkd2FyZS4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQsIGFuZCBpdCYjMzk7cyB0aGUgZGVmaW5pbmcgZmFjdG9yLgoKU28sIHRoaXMgZmFsbHMgZGlyZWN0bHkgdW5kZXIgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgVGhlcmUmIzM5O3Mgbm8gd2F5IHN5emthbGxlciwgb3IgYW55IHN0YW5kYXJkIGZ1enplciwgY2FuIGVmZmVjdGl2ZWx5IHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZS4KCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBtb2RpZmllZCBmaWxlcy4gTGV0IG1lIHNlZS4uLiB5ZXMsIHRoZSBkaWZmIGluY2x1ZGVzIGBpY2UuaGAsIGBpY2VfbGliLmNgLCBgaWNlX2xpYi5oYCwgYW5kIGBpY2VfdmZfbGliLmNgLiBBbGwgb2YgdGhlc2UgZmlsZXMgYXJlIGxvY2F0ZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LCB3aGljaCBpcyAqZXhjbHVzaXZlbHkqIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBkcml2ZXIgY29kZS4gQ29uZmlybWF0aW9uIQoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyAqbXVzdCogYmUgc2V0IHRvIGBmYWxzZWAuIFNpbmNlIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBuZWVkZWQuIENvbnNlcXVlbnRseSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBhbHNvIGJlIGVtcHR5IChvciBhIG51bGwvZW1wdHkgYXJyYXkpIOKAkyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gdGVzdCB1bnJlYWNoYWJsZSBjb2RlLiBUaGUgcmVhc29uaW5nIHNob3VsZCBiZSBjb25jaXNlLCBidXQgY2xlYXI6IHRoaXMgY2hhbmdlIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIEludGVsIEU4MDAgRXRoZXJuZXQgZHJpdmVyIChgaWNlYCksIHdoaWNoIGRlcGVuZHMgb24gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgKFFFTVUvc3l6a2FsbGVyKS4gVGhpcyBtZWFucyB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4gSSBoYXZlIHdoYXQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBQQ0llIE5JQyBoYXJkd2FyZSAoRTgwMC9FODEwIHNlcmllcykgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBQQ0llIE5JQyBoYXJkd2FyZSAoRTgwMC9FODEwIHNlcmllcykgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTM6MzA6MTcuNDQ4MjA2OTM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MzkxNDczMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSBlbnRpcmVseSBjb25maW5lZCB0byB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZSkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIEludGVsIFBDSWUgTklDIGhhcmR3YXJlIChFODAwL0U4MTAgc2VyaWVzKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzozMDoxNy40NDgyMTE0MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA2OTE4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NDM2YWYyNzM5N2M4MDczYWYxZmNhZGU3MGIyNDYxOTE1MjMxNTY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDEzOjMwOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxcbmluZGV4IGY3MmJiMWFhNDA2NzQuLjQ4ZjQzMTJkZjRhNDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuQEAgLTMyOCw2ICszMjgsOCBAQCBlbnVtIGljZV92c2lfc3RhdGUge1xcbiBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyB7XFxuIFxcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7ICAvKiBUeCByaW5nIHN0YXRzIGFycmF5ICovXFxuIFxcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7ICAvKiBSeCByaW5nIHN0YXRzIGFycmF5ICovXFxuK1xcdHUxNiB0eF9yaW5nX3N0YXRzX2xlbjsgIC8qIExlbmd0aCBvZiB0aGUgVHggcmluZyBzdGF0cyBhcnJheSAqL1xcbitcXHR1MTYgcnhfcmluZ19zdGF0c19sZW47ICAvKiBMZW5ndGggb2YgdGhlIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cXG4gfTtcXG4gXFxuIC8qIHN0cnVjdCB0aGF0IGRlZmluZXMgYSBWU0ksIGFzc29jaWF0ZWQgd2l0aCBhIGRldiAqL1xcbkBAIC00MDEsOSArNDAzLDExIEBAIHN0cnVjdCBpY2VfdnNpIHtcXG4gXFx0dTggcnhfbWFwcGluZ19tb2RlO1xcdFxcdCAvKiBJQ0VfTUFQX01PREVfW0NPTlRJR3xTQ0FUVEVSXSAqL1xcbiBcXHR1MTYgKnR4cV9tYXA7XFx0XFx0XFx0IC8qIGluZGV4IGluIHBmLVxcdTAwM2VhdmFpbF90eHFzICovXFxuIFxcdHUxNiAqcnhxX21hcDtcXHRcXHRcXHQgLyogaW5kZXggaW4gcGYtXFx1MDAzZWF2YWlsX3J4cXMgKi9cXG4tXFx0dTE2IGFsbG9jX3R4cTtcXHRcXHRcXHQgLyogQWxsb2NhdGVkIFR4IHF1ZXVlcyAqL1xcbitcXHRzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtcywgYWxsb2NfdHhxX3J4cSxcXG4rXFx0XFx0dTE2IGFsbG9jX3R4cTtcXHRcXHQgLyogQWxsb2NhdGVkIFR4IHF1ZXVlcyAqL1xcbitcXHRcXHR1MTYgYWxsb2NfcnhxO1xcdFxcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXFxuK1xcdCk7XFxuIFxcdHUxNiBudW1fdHhxO1xcdFxcdFxcdCAvKiBVc2VkIFR4IHF1ZXVlcyAqL1xcbi1cXHR1MTYgYWxsb2NfcnhxO1xcdFxcdFxcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXFxuIFxcdHUxNiBudW1fcnhxO1xcdFxcdFxcdCAvKiBVc2VkIFJ4IHF1ZXVlcyAqL1xcbiBcXHR1MTYgcmVxX3R4cTtcXHRcXHRcXHQgLyogVXNlciByZXF1ZXN0ZWQgVHggcXVldWVzICovXFxuIFxcdHUxNiByZXFfcnhxO1xcdFxcdFxcdCAvKiBVc2VyIHJlcXVlc3RlZCBSeCBxdWV1ZXMgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5pbmRleCA4Y2RjNGZkYTg5ZTk3Li40OTQ5ZjI5ZTUzOGUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXFxuQEAgLTE1MywxNiArMTUzLDU2IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9kZXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHUxNiBpY2VfZ2V0X3J4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZilcXG4rc3RhdGljIHUxNiBpY2VfZ2V0X3J4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZiwgdTE2IGhlbGQpXFxuIHtcXG4tXFx0cmV0dXJuIG1pbihpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZiksXFxuLVxcdFxcdCAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpO1xcbitcXHRyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZikgKyBoZWxkLFxcbitcXHRcXHQgICAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTE2IGljZV9nZXRfdHhxX2NvdW50KHN0cnVjdCBpY2VfcGYgKnBmKVxcbitzdGF0aWMgdTE2IGljZV9nZXRfdHhxX2NvdW50KHN0cnVjdCBpY2VfcGYgKnBmLCB1MTYgaGVsZClcXG4ge1xcbi1cXHRyZXR1cm4gbWluKGljZV9nZXRfYXZhaWxfdHhxX2NvdW50KHBmKSxcXG4tXFx0XFx0ICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XFxuK1xcdHJldHVybiBtaW5fdCh1MTYsIGljZV9nZXRfYXZhaWxfdHhxX2NvdW50KHBmKSArIGhlbGQsXFxuK1xcdFxcdCAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XFxuK31cXG4rXFxuKy8qIEBoZWxkX3R4cSwgQGhlbGRfcnhxOiBxdWV1ZXMgdGhlIFZTSSBzdGlsbCBvd25zIGJ1dCBpcyBhYm91dCB0byByZXR1cm4gdG8gdGhlXFxuKyAqIFBGIHBvb2wsIHNvIHRoYXQgdGhlIHJlc3VsdCBtYXRjaGVzIHdoYXQgaXQgd2lsbCBiZSBvbmNlIHRoZXkgYXJlIGJhY2sgdGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtc1xcbitpY2VfdnNpX2dldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSwgdTE2IGhlbGRfdHhxLCB1MTYgaGVsZF9yeHEpXFxuK3tcXG4rXFx0c3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtcyBxcyA9IHt9O1xcbitcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4rXFxuK1xcdHN3aXRjaCAodnNpLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgSUNFX1ZTSV9QRjpcXG4rXFx0XFx0cXMuYWxsb2NfdHhxID0gdnNpLVxcdTAwM2VyZXFfdHhxID86IGljZV9nZXRfdHhxX2NvdW50KHBmLCBoZWxkX3R4cSk7XFxuK1xcbitcXHRcXHQvKiBvbmx5IDEgUnggcXVldWUgdW5sZXNzIFJTUyBpcyBlbmFibGVkICovXFxuK1xcdFxcdGlmICghdGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0cXMuYWxsb2NfcnhxID0gMTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRxcy5hbGxvY19yeHEgPSB2c2ktXFx1MDAzZXJlcV9yeHEgPzpcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGljZV9nZXRfcnhxX2NvdW50KHBmLCBoZWxkX3J4cSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIElDRV9WU0lfU0Y6XFxuK1xcdGNhc2UgSUNFX1ZTSV9DVFJMOlxcbitcXHRjYXNlIElDRV9WU0lfTEI6XFxuK1xcdFxcdHFzLmFsbG9jX3R4cSA9IDE7XFxuK1xcdFxcdHFzLmFsbG9jX3J4cSA9IDE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIElDRV9WU0lfVkY6XFxuK1xcdFxcdHFzLmFsbG9jX3R4cSA9IHZzaS1cXHUwMDNldmYtXFx1MDAzZW51bV9yZXFfcXMgPzogdnNpLVxcdTAwM2V2Zi1cXHUwMDNlbnVtX3ZmX3FzO1xcbitcXHRcXHRxcy5hbGxvY19yeHEgPSBxcy5hbGxvY190eHE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIElDRV9WU0lfQ0hOTDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcXFwiVW5rbm93biBWU0kgdHlwZSAlZFxcXFxuXFxcIiwgdnNpLVxcdTAwM2V0eXBlKTtcXG4rXFx0XFx0cmV0dXJuIHZzaS1cXHUwMDNlYWxsb2NfdHhxX3J4cTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHFzO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTgwLDQ0ICsyMjAsMjcgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9zZXRfbnVtX3FzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdGlmIChXQVJOX09OKHZzaV90eXBlID09IElDRV9WU0lfVkYgXFx1MDAyNlxcdTAwMjYgIXZmKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0dnNpLVxcdTAwM2VhbGxvY190eHFfcnhxID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgMCwgMCk7XFxuK1xcbiBcXHRzd2l0Y2ggKHZzaV90eXBlKSB7XFxuIFxcdGNhc2UgSUNFX1ZTSV9QRjpcXG4tXFx0XFx0aWYgKHZzaS1cXHUwMDNlcmVxX3R4cSkge1xcbi1cXHRcXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IHZzaS1cXHUwMDNlcmVxX3R4cTtcXG4rXFx0XFx0aWYgKHZzaS1cXHUwMDNlcmVxX3R4cSlcXG4gXFx0XFx0XFx0dnNpLVxcdTAwM2VudW1fdHhxID0gdnNpLVxcdTAwM2VyZXFfdHhxO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IGljZV9nZXRfdHhxX2NvdW50KHBmKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAodnNpLVxcdTAwM2VyZXFfcnhxIFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KElDRV9GTEFHX1JTU19FTkEsIHBmLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdFxcdHZzaS1cXHUwMDNlbnVtX3J4cSA9IHZzaS1cXHUwMDNlcmVxX3J4cTtcXG4gXFxuIFxcdFxcdHBmLVxcdTAwM2VudW1fbGFuX3R4ID0gdnNpLVxcdTAwM2VhbGxvY190eHE7XFxuLVxcbi1cXHRcXHQvKiBvbmx5IDEgUnggcXVldWUgdW5sZXNzIFJTUyBpcyBlbmFibGVkICovXFxuLVxcdFxcdGlmICghdGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3J4cSA9IDE7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmICh2c2ktXFx1MDAzZXJlcV9yeHEpIHtcXG4tXFx0XFx0XFx0XFx0dnNpLVxcdTAwM2VhbGxvY19yeHEgPSB2c2ktXFx1MDAzZXJlcV9yeHE7XFxuLVxcdFxcdFxcdFxcdHZzaS1cXHUwMDNlbnVtX3J4cSA9IHZzaS1cXHUwMDNlcmVxX3J4cTtcXG4tXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0dnNpLVxcdTAwM2VhbGxvY19yeHEgPSBpY2VfZ2V0X3J4cV9jb3VudChwZik7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXG4gXFx0XFx0cGYtXFx1MDAzZW51bV9sYW5fcnggPSB2c2ktXFx1MDAzZWFsbG9jX3J4cTtcXG4gXFxuIFxcdFxcdHZzaS1cXHUwMDNlbnVtX3FfdmVjdG9ycyA9IG1heCh2c2ktXFx1MDAzZWFsbG9jX3J4cSwgdnNpLVxcdTAwM2VhbGxvY190eHEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfVlNJX1NGOlxcbi1cXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IDE7XFxuLVxcdFxcdHZzaS1cXHUwMDNlYWxsb2NfcnhxID0gMTtcXG4gXFx0XFx0dnNpLVxcdTAwM2VudW1fcV92ZWN0b3JzID0gMTtcXG4gXFx0XFx0dnNpLVxcdTAwM2VpcnFfZHluX2FsbG9jID0gdHJ1ZTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX1ZTSV9WRjpcXG4gXFx0XFx0aWYgKHZmLVxcdTAwM2VudW1fcmVxX3FzKVxcbiBcXHRcXHRcXHR2Zi1cXHUwMDNlbnVtX3ZmX3FzID0gdmYtXFx1MDAzZW51bV9yZXFfcXM7XFxuLVxcdFxcdHZzaS1cXHUwMDNlYWxsb2NfdHhxID0gdmYtXFx1MDAzZW51bV92Zl9xcztcXG4tXFx0XFx0dnNpLVxcdTAwM2VhbGxvY19yeHEgPSB2Zi1cXHUwMDNlbnVtX3ZmX3FzO1xcbiBcXHRcXHQvKiBwZi1cXHUwMDNldmZzLm51bV9tc2l4X3BlciBpbmNsdWRlcyAoVkYgbWlzY2VsbGFuZW91cyB2ZWN0b3IgK1xcbiBcXHRcXHQgKiBkYXRhIHF1ZXVlIGludGVycnVwdHMpLiBTaW5jZSB2c2ktXFx1MDAzZW51bV9xX3ZlY3RvcnMgaXMgbnVtYmVyXFxuIFxcdFxcdCAqIG9mIHF1ZXVlcyB2ZWN0b3JzLCBzdWJ0cmFjdCAxIChJQ0VfTk9OUV9WRUNTX1ZGKSBmcm9tIHRoZVxcbkBAIC0yMjYsMjIgKzI0OSwxNSBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSlcXG4gXFx0XFx0dnNpLVxcdTAwM2VudW1fcV92ZWN0b3JzID0gdmYtXFx1MDAzZW51bV9tc2l4IC0gSUNFX05PTlFfVkVDU19WRjtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX1ZTSV9DVFJMOlxcbi1cXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IDE7XFxuLVxcdFxcdHZzaS1cXHUwMDNlYWxsb2NfcnhxID0gMTtcXG4gXFx0XFx0dnNpLVxcdTAwM2VudW1fcV92ZWN0b3JzID0gMTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX1ZTSV9DSE5MOlxcbi1cXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IDA7XFxuLVxcdFxcdHZzaS1cXHUwMDNlYWxsb2NfcnhxID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX1ZTSV9MQjpcXG4tXFx0XFx0dnNpLVxcdTAwM2VhbGxvY190eHEgPSAxO1xcbi1cXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3J4cSA9IDE7XFxuIFxcdFxcdC8qIEEgZHVtbXkgcV92ZWN0b3IsIG5vIGFjdHVhbCBJUlEuICovXFxuIFxcdFxcdHZzaS1cXHUwMDNlbnVtX3FfdmVjdG9ycyA9IDE7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlVua25vd24gVlNJIHR5cGUgJWRcXFxcblxcXCIsIHZzaV90eXBlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuQEAgLTMzMCw2ICszNDYsMzIgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHR2c2ktXFx1MDAzZXJ4cV9tYXAgPSBOVUxMO1xcbiB9XFxuIFxcbisvKiBmcmVlIHNpbmdsZSBzdGF0cyBtZW1vcnkgKi9cXG4rc3RhdGljIHZvaWQgX19pY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0LCBib29sIGZyZWVfZW50cmllcylcXG4re1xcbitcXHRpZiAoIXZzaV9zdGF0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoZnJlZV9lbnRyaWVzKSB7XFxuK1xcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XFxuK1xcdFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmICh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSkge1xcbitcXHRcXHRcXHRcXHRrZnJlZV9yY3UodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xcbitcXHRrZnJlZSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyk7XFxuK1xcdGtmcmVlKHZzaV9zdGF0KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV92c2lfZnJlZV9zdGF0cyAtIEZyZWUgdGhlIHJpbmcgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzXFxuICAqIEB2c2k6IFZTSSBwb2ludGVyXFxuQEAgLTMzOCw3ICszODAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVxcdTAwM2ViYWNrO1xcbi1cXHRpbnQgaTtcXG4gXFxuIFxcdGlmICh2c2ktXFx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTM0NiwyNiArMzg3LDcgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHZzaV9zdGF0ID0gcGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF07XFxuLVxcdGlmICghdnNpX3N0YXQpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGljZV9mb3JfZWFjaF9hbGxvY190eHEodnNpLCBpKSB7XFxuLVxcdFxcdGlmICh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xcbi1cXHRcXHRcXHRrZnJlZV9yY3UodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGljZV9mb3JfZWFjaF9hbGxvY19yeHEodnNpLCBpKSB7XFxuLVxcdFxcdGlmICh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSkge1xcbi1cXHRcXHRcXHRrZnJlZV9yY3UodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGtmcmVlKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKTtcXG4tXFx0a2ZyZWUodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMpO1xcbi1cXHRrZnJlZSh2c2lfc3RhdCk7XFxuK1xcdF9faWNlX3ZzaV9mcmVlX3N0YXRzKHZzaV9zdGF0LCB0cnVlKTtcXG4gXFx0cGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF0gPSBOVUxMO1xcbiB9XFxuIFxcbkBAIC01MTMsNiArNTM1LDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbXNpeF9jbGVhbl9yaW5ncyhpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGljZV92c2lfc3RhdHMgKmljZV92c2lfbmV3X3N0YXRfYXJyYXlzKGludCB0eHEsIGludCByeHEpXFxuK3tcXG4rXFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0cztcXG4rXFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0cztcXG4rXFx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xcbitcXG4rXFx0dnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpO1xcbitcXHR0eF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCp0eF9yaW5nX3N0YXRzLCB0eHEpO1xcbitcXHRyeF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCpyeF9yaW5nX3N0YXRzLCByeHEpO1xcbitcXHRpZiAoIXZzaV9zdGF0IHx8ICF0eF9yaW5nX3N0YXRzIHx8ICFyeF9yaW5nX3N0YXRzKSB7XFxuK1xcdFxcdGtmcmVlKHZzaV9zdGF0KTtcXG4rXFx0XFx0a2ZyZWUodHhfcmluZ19zdGF0cyk7XFxuK1xcdFxcdGtmcmVlKHJ4X3Jpbmdfc3RhdHMpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0dnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzO1xcbitcXHR2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XFxuK1xcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbiA9IHR4cTtcXG4rXFx0dnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuID0gcnhxO1xcbitcXG4rXFx0cmV0dXJuIHZzaV9zdGF0O1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX3ZzaV9hbGxvY19zdGF0X2FycmF5cyAtIEFsbG9jYXRlIHN0YXRpc3RpY3MgYXJyYXlzXFxuICAqIEB2c2k6IFZTSSBwb2ludGVyXFxuQEAgLTUzMSwzMSArNTc3LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9hbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHQvKiByZWFsbG9jIHdpbGwgaGFwcGVuIGluIHJlYnVpbGQgcGF0aCAqL1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcXG4rXFx0dnNpX3N0YXQgPSBpY2VfdnNpX25ld19zdGF0X2FycmF5cyh2c2ktXFx1MDAzZWFsbG9jX3R4cSwgdnNpLVxcdTAwM2VhbGxvY19yeHEpO1xcbiBcXHRpZiAoIXZzaV9zdGF0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzID1cXG4tXFx0XFx0a3phbGxvY19vYmpzKCp2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cywgdnNpLVxcdTAwM2VhbGxvY190eHEpO1xcbi1cXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKVxcbi1cXHRcXHRnb3RvIGVycl9hbGxvY190eDtcXG4tXFxuLVxcdHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzID1cXG4tXFx0XFx0a3phbGxvY19vYmpzKCp2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cywgdnNpLVxcdTAwM2VhbGxvY19yeHEpO1xcbi1cXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzKVxcbi1cXHRcXHRnb3RvIGVycl9hbGxvY19yeDtcXG4tXFxuIFxcdHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdID0gdnNpX3N0YXQ7XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4tXFxuLWVycl9hbGxvY19yeDpcXG4tXFx0a2ZyZWUodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMpO1xcbi1lcnJfYWxsb2NfdHg6XFxuLVxcdGtmcmVlKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKTtcXG4tXFx0a2ZyZWUodnNpX3N0YXQpO1xcbi1cXHRwZi1cXHUwMDNldnNpX3N0YXRzW3ZzaS1cXHUwMDNlaWR4XSA9IE5VTEw7XFxuLVxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjkyNiw2ICsyOTUzLDUxIEBAIGljZV92c2lfcmVidWlsZF9nZXRfY29hbGVzY2Uoc3RydWN0IGljZV92c2kgKnZzaSxcXG4gXFx0cmV0dXJuIHZzaS1cXHUwMDNlbnVtX3FfdmVjdG9ycztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3VudXNlZF9zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqbmV3X3ZzaV9zdGF0KVxcbit7XFxuK1xcdGludCBuZXdfdHhxID0gbmV3X3ZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcXG4rXFx0aW50IG5ld19yeHEgPSBuZXdfdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xcbitcXHRpbnQgcHJldl90eHEgPSB2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c19sZW47XFxuK1xcdGludCBwcmV2X3J4cSA9IHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSBuZXdfdHhxOyBpIFxcdTAwM2MgcHJldl90eHE7IGkrKykge1xcbitcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcXG4rXFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGZvciAoaW50IGkgPSBuZXdfcnhxOyBpIFxcdTAwM2MgcHJldl9yeHE7IGkrKykge1xcbitcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcXG4rXFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGljZV92c2lfc2V0X3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2ksXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqbmV3X3ZzaV9zdGF0KVxcbit7XFxuK1xcdHUxNiBuZXdfdHhxLCBuZXdfcnhxLCBwcmV2X3R4cSwgcHJldl9yeHE7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcXG4rXFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuK1xcbitcXHRuZXdfdHhxID0gbmV3X3ZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcXG4rXFx0bmV3X3J4cSA9IG5ld192c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c19sZW47XFxuK1xcdHZzaV9zdGF0ID0gcGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF07XFxuK1xcdHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdID0gbmV3X3ZzaV9zdGF0O1xcbitcXHRpZiAoIXZzaV9zdGF0KVxcbitcXHRcXHRyZXR1cm47IC8qIGRvbid0IGNvcHkgaWYgdGhlcmUgaXMgbm8gc291cmNlICovXFxuK1xcbitcXHRwcmV2X3R4cSA9IHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcXG4rXFx0cHJldl9yeHEgPSB2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c19sZW47XFxuK1xcbitcXHRtZW1jcHkobmV3X3ZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzLCB2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cyxcXG4rXFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpICogbWluKHByZXZfdHhxLCBuZXdfdHhxKSk7XFxuK1xcdG1lbWNweShuZXdfdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzLFxcbitcXHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cykgKiBtaW4ocHJldl9yeHEsIG5ld19yeHEpKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV92c2lfcmVidWlsZF9zZXRfY29hbGVzY2UgLSBzZXQgY29hbGVzY2UgZnJvbSBlYXJsaWVyIHNhdmVkIGFycmF5c1xcbiAgKiBAdnNpOiBWU0kgY29ubmVjdGVkIHdpdGggcV92ZWN0b3JzXFxuQEAgLTMwMTIsNjAgKzMwODQsMzcgQEAgaWNlX3ZzaV9yZWJ1aWxkX3NldF9jb2FsZXNjZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxcbiB9XFxuIFxcbiAvKipcXG4tICogaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzIC0gRnJlZXMgdW51c2VkIHN0YXQgc3RydWN0dXJlcyBvciBhbGxvYyBuZXcgb25lc1xcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxcbisgKiBpY2VfdnNpX3Jlc2l6ZV9zdGF0X2FycmF5cyAtIHJlc2l6ZSByaW5nIHN0YXRzIGFycmF5cyBmb3IgbmV3IHF1ZXVlIGNvdW50XFxuKyAqIEB2c2k6IFZTSSB0byBzd2FwIHRoZSByaW5nIHN0YXRzIGFycmF5cyBvZlxcbisgKlxcbisgKiBDYWxsIHdoaWxlIEB2c2kgc3RpbGwgb3ducyBpdHMgcXVldWVzIGFuZCBiZWZvcmUgaWNlX3ZzaV9kZWNmZygpIHJldHVybnMgdGhlbVxcbisgKiB0byB0aGUgUEYgcG9vbCwgc28gdGhhdCB0aGUgbmV3IHNpemUgaXMgd2hhdCBpY2VfdnNpX3NldF9udW1fcXMoKSB3aWxsIGNvbXB1dGVcXG4rICogYWZ0ZXJ3YXJkcy4gU3Vydml2aW5nIGVudHJpZXMgYXJlIGNhcnJpZWQgb3ZlciwgdGhlIHJlc3QgaXMgZnJlZWQuXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXFxuICAqL1xcbi1zdGF0aWMgaW50XFxuLWljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbitpbnQgaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcXG4ge1xcbi1cXHR1MTYgcmVxX3R4cSA9IHZzaS1cXHUwMDNlcmVxX3R4cSA/IHZzaS1cXHUwMDNlcmVxX3R4cSA6IHZzaS1cXHUwMDNlYWxsb2NfdHhxO1xcbi1cXHR1MTYgcmVxX3J4cSA9IHZzaS1cXHUwMDNlcmVxX3J4cSA/IHZzaS1cXHUwMDNlcmVxX3J4cSA6IHZzaS1cXHUwMDNlYWxsb2NfcnhxO1xcbi1cXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzO1xcbi1cXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzO1xcbi1cXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMgcXM7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICpvbGRfc3RhdDtcXG4rXFx0c3RydWN0IGljZV92c2lfc3RhdHMgKm5ld19zdGF0O1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4tXFx0dTE2IHByZXZfdHhxID0gdnNpLVxcdTAwM2VhbGxvY190eHE7XFxuLVxcdHUxNiBwcmV2X3J4cSA9IHZzaS1cXHUwMDNlYWxsb2NfcnhxO1xcbi1cXHRpbnQgaTtcXG4gXFxuLVxcdHZzaV9zdGF0ID0gcGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF07XFxuK1xcdGlmICh2c2ktXFx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChyZXFfdHhxIFxcdTAwM2MgcHJldl90eHEpIHtcXG4tXFx0XFx0Zm9yIChpID0gcmVxX3R4cTsgaSBcXHUwMDNjIHByZXZfdHhxOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XFxuLVxcdFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4tXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdHFzID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgdnNpLVxcdTAwM2VhbGxvY190eHEgKyB2c2ktXFx1MDAzZW51bV94ZHBfdHhxLFxcbitcXHRcXHRcXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3J4cSk7XFxuIFxcbi1cXHR0eF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHM7XFxuLVxcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzID1cXG4tXFx0XFx0a3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMsIHJlcV90eHEsXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKSxcXG4tXFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tXFx0aWYgKCF2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cykge1xcbi1cXHRcXHR2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XFxuK1xcdG5ld19zdGF0ID0gaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXMocXMuYWxsb2NfdHhxLCBxcy5hbGxvY19yeHEpO1xcbitcXHRpZiAoIW5ld19zdGF0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbiBcXG4tXFx0aWYgKHJlcV9yeHEgXFx1MDAzYyBwcmV2X3J4cSkge1xcbi1cXHRcXHRmb3IgKGkgPSByZXFfcnhxOyBpIFxcdTAwM2MgcHJldl9yeHE7IGkrKykge1xcbi1cXHRcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcXG4tXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHJ4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cztcXG4tXFx0dnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxcbi1cXHRcXHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cywgcmVxX3J4cSxcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMpLFxcbi1cXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi1cXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzKSB7XFxuLVxcdFxcdHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0cztcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdG9sZF9zdGF0ID0gcGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF07XFxuK1xcdGljZV92c2lfc2V0X3N0YXRfYXJyYXlzKHZzaSwgbmV3X3N0YXQpO1xcbitcXHRpZiAob2xkX3N0YXQpIHtcXG4rXFx0XFx0aWNlX3ZzaV9mcmVlX3VudXNlZF9zdGF0X2FycmF5cyhvbGRfc3RhdCwgbmV3X3N0YXQpO1xcbitcXHRcXHRfX2ljZV92c2lfZnJlZV9zdGF0cyhvbGRfc3RhdCwgZmFsc2UpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzA5OCw3ICszMTQ3LDcgQEAgaW50IGljZV92c2lfcmVidWlsZChzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MzIgdnNpX2ZsYWdzKVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnNpLVxcdTAwM2V4ZHBfc3RhdGVfbG9jayk7XFxuIFxcbi1cXHRyZXQgPSBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXModnNpKTtcXG4rXFx0cmV0ID0gaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXModnNpKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxcbmluZGV4IDQ5NDU0ZDk4ZGNmZWYuLjUyMzYwODhjMzIwYmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmhcXG5AQCAtNjcsNiArNjcsNyBAQCB2b2lkIGljZV92c2lfZGVjZmcoc3RydWN0IGljZV92c2kgKnZzaSk7XFxuIHZvaWQgaWNlX2Rpc192c2koc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBsb2NrZWQpO1xcbiBcXG4gaW50IGljZV92c2lfcmVidWlsZChzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MzIgdnNpX2ZsYWdzKTtcXG4raW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpO1xcbiBpbnQgaWNlX3ZzaV9jZmcoc3RydWN0IGljZV92c2kgKnZzaSk7XFxuIHN0cnVjdCBpY2VfdnNpICppY2VfdnNpX2FsbG9jKHN0cnVjdCBpY2VfcGYgKnBmKTtcXG4gdm9pZCBpY2VfdnNpX2ZyZWUoc3RydWN0IGljZV92c2kgKnZzaSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXFxuaW5kZXggMjdlNGFjYjE2MjBmMC4uZmQ3MGE5M2I5ODY5NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuY1xcbkBAIC0yNjgsNiArMjY4LDEwIEBAIHN0YXRpYyBpbnQgaWNlX3ZmX3JlY29uZmlnX3ZzaShzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4gXFxuIFxcdHZzaS1cXHUwMDNlZmxhZ3MgPSBJQ0VfVlNJX0ZMQUdfTk9fSU5JVDtcXG4gXFxuK1xcdGVyciA9IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHZzaSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRpY2VfdnNpX2RlY2ZnKHZzaSk7XFxuIFxcdGljZV9mbHRyX3JlbW92ZV9hbGwodnNpKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjE5LjE4OTg0MzkwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3OTc0OTMwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGVudGlyZWx5IGNvbmZpbmVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgUENJZSBOSUMgaGFyZHdhcmUgKEU4MDAvRTgxMCBzZXJpZXMpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTQzNmFmMjczOTdjODA3M2FmMWZjYWRlNzBiMjQ2MTkxNTIzMTU2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEzOjMwOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5pbmRleCBmNzJiYjFhYTQwNjc0Li40OGY0MzEyZGY0YTQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbkBAIC0zMjgsNiArMzI4LDggQEAgZW51bSBpY2VfdnNpX3N0YXRlIHtcbiBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyB7XG4gXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzOyAgLyogVHggcmluZyBzdGF0cyBhcnJheSAqL1xuIFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsgIC8qIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbitcdHUxNiB0eF9yaW5nX3N0YXRzX2xlbjsgIC8qIExlbmd0aCBvZiB0aGUgVHggcmluZyBzdGF0cyBhcnJheSAqL1xuK1x0dTE2IHJ4X3Jpbmdfc3RhdHNfbGVuOyAgLyogTGVuZ3RoIG9mIHRoZSBSeCByaW5nIHN0YXRzIGFycmF5ICovXG4gfTtcbiBcbiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi9cbkBAIC00MDEsOSArNDAzLDExIEBAIHN0cnVjdCBpY2VfdnNpIHtcbiBcdHU4IHJ4X21hcHBpbmdfbW9kZTtcdFx0IC8qIElDRV9NQVBfTU9ERV9bQ09OVElHfFNDQVRURVJdICovXG4gXHR1MTYgKnR4cV9tYXA7XHRcdFx0IC8qIGluZGV4IGluIHBmLVx1MDAzZWF2YWlsX3R4cXMgKi9cbiBcdHUxNiAqcnhxX21hcDtcdFx0XHQgLyogaW5kZXggaW4gcGYtXHUwMDNlYXZhaWxfcnhxcyAqL1xuLVx0dTE2IGFsbG9jX3R4cTtcdFx0XHQgLyogQWxsb2NhdGVkIFR4IHF1ZXVlcyAqL1xuK1x0c3RydWN0X2dyb3VwX3RhZ2dlZChpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMsIGFsbG9jX3R4cV9yeHEsXG4rXHRcdHUxNiBhbGxvY190eHE7XHRcdCAvKiBBbGxvY2F0ZWQgVHggcXVldWVzICovXG4rXHRcdHUxNiBhbGxvY19yeHE7XHRcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXG4rXHQpO1xuIFx0dTE2IG51bV90eHE7XHRcdFx0IC8qIFVzZWQgVHggcXVldWVzICovXG4tXHR1MTYgYWxsb2NfcnhxO1x0XHRcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXG4gXHR1MTYgbnVtX3J4cTtcdFx0XHQgLyogVXNlZCBSeCBxdWV1ZXMgKi9cbiBcdHUxNiByZXFfdHhxO1x0XHRcdCAvKiBVc2VyIHJlcXVlc3RlZCBUeCBxdWV1ZXMgKi9cbiBcdHUxNiByZXFfcnhxO1x0XHRcdCAvKiBVc2VyIHJlcXVlc3RlZCBSeCBxdWV1ZXMgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuaW5kZXggOGNkYzRmZGE4OWU5Ny4uNDk0OWYyOWU1MzhlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbkBAIC0xNTMsMTYgKzE1Myw1NiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9udW1fZGVzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdTE2IGljZV9nZXRfcnhxX2NvdW50KHN0cnVjdCBpY2VfcGYgKnBmKVxuK3N0YXRpYyB1MTYgaWNlX2dldF9yeHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYsIHUxNiBoZWxkKVxuIHtcbi1cdHJldHVybiBtaW4oaWNlX2dldF9hdmFpbF9yeHFfY291bnQocGYpLFxuLVx0XHQgICBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpKTtcbitcdHJldHVybiBtaW5fdCh1MTYsIGljZV9nZXRfYXZhaWxfcnhxX2NvdW50KHBmKSArIGhlbGQsXG4rXHRcdCAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XG4gfVxuIFxuLXN0YXRpYyB1MTYgaWNlX2dldF90eHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpXG4rc3RhdGljIHUxNiBpY2VfZ2V0X3R4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZiwgdTE2IGhlbGQpXG4ge1xuLVx0cmV0dXJuIG1pbihpY2VfZ2V0X2F2YWlsX3R4cV9jb3VudChwZiksXG4tXHRcdCAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpO1xuK1x0cmV0dXJuIG1pbl90KHUxNiwgaWNlX2dldF9hdmFpbF90eHFfY291bnQocGYpICsgaGVsZCxcbitcdFx0ICAgICBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpKTtcbit9XG4rXG4rLyogQGhlbGRfdHhxLCBAaGVsZF9yeHE6IHF1ZXVlcyB0aGUgVlNJIHN0aWxsIG93bnMgYnV0IGlzIGFib3V0IHRvIHJldHVybiB0byB0aGVcbisgKiBQRiBwb29sLCBzbyB0aGF0IHRoZSByZXN1bHQgbWF0Y2hlcyB3aGF0IGl0IHdpbGwgYmUgb25jZSB0aGV5IGFyZSBiYWNrIHRoZXJlLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgaWNlX3ZzaV9hbGxvY19xdWV1ZXNfcGFyYW1zXG4raWNlX3ZzaV9nZXRfbnVtX3FzKHN0cnVjdCBpY2VfdnNpICp2c2ksIHUxNiBoZWxkX3R4cSwgdTE2IGhlbGRfcnhxKVxuK3tcbitcdHN0cnVjdCBpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMgcXMgPSB7fTtcbitcdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVx1MDAzZWJhY2s7XG4rXG4rXHRzd2l0Y2ggKHZzaS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIElDRV9WU0lfUEY6XG4rXHRcdHFzLmFsbG9jX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID86IGljZV9nZXRfdHhxX2NvdW50KHBmLCBoZWxkX3R4cSk7XG4rXG4rXHRcdC8qIG9ubHkgMSBSeCBxdWV1ZSB1bmxlc3MgUlNTIGlzIGVuYWJsZWQgKi9cbitcdFx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4rXHRcdFx0cXMuYWxsb2NfcnhxID0gMTtcbitcdFx0ZWxzZVxuK1x0XHRcdHFzLmFsbG9jX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxID86XG4rXHRcdFx0XHQgICAgICAgaWNlX2dldF9yeHFfY291bnQocGYsIGhlbGRfcnhxKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElDRV9WU0lfU0Y6XG4rXHRjYXNlIElDRV9WU0lfQ1RSTDpcbitcdGNhc2UgSUNFX1ZTSV9MQjpcbitcdFx0cXMuYWxsb2NfdHhxID0gMTtcbitcdFx0cXMuYWxsb2NfcnhxID0gMTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElDRV9WU0lfVkY6XG4rXHRcdHFzLmFsbG9jX3R4cSA9IHZzaS1cdTAwM2V2Zi1cdTAwM2VudW1fcmVxX3FzID86IHZzaS1cdTAwM2V2Zi1cdTAwM2VudW1fdmZfcXM7XG4rXHRcdHFzLmFsbG9jX3J4cSA9IHFzLmFsbG9jX3R4cTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElDRV9WU0lfQ0hOTDpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXCJVbmtub3duIFZTSSB0eXBlICVkXFxuXCIsIHZzaS1cdTAwM2V0eXBlKTtcbitcdFx0cmV0dXJuIHZzaS1cdTAwM2VhbGxvY190eHFfcnhxO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHFzO1xuIH1cbiBcbiAvKipcbkBAIC0xODAsNDQgKzIyMCwyNyBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdGlmIChXQVJOX09OKHZzaV90eXBlID09IElDRV9WU0lfVkYgXHUwMDI2XHUwMDI2ICF2ZikpXG4gXHRcdHJldHVybjtcbiBcbitcdHZzaS1cdTAwM2VhbGxvY190eHFfcnhxID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgMCwgMCk7XG4rXG4gXHRzd2l0Y2ggKHZzaV90eXBlKSB7XG4gXHRjYXNlIElDRV9WU0lfUEY6XG4tXHRcdGlmICh2c2ktXHUwMDNlcmVxX3R4cSkge1xuLVx0XHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSB2c2ktXHUwMDNlcmVxX3R4cTtcbitcdFx0aWYgKHZzaS1cdTAwM2VyZXFfdHhxKVxuIFx0XHRcdHZzaS1cdTAwM2VudW1fdHhxID0gdnNpLVx1MDAzZXJlcV90eHE7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0dnNpLVx1MDAzZWFsbG9jX3R4cSA9IGljZV9nZXRfdHhxX2NvdW50KHBmKTtcbi1cdFx0fVxuK1x0XHRpZiAodnNpLVx1MDAzZXJlcV9yeHEgXHUwMDI2XHUwMDI2IHRlc3RfYml0KElDRV9GTEFHX1JTU19FTkEsIHBmLVx1MDAzZWZsYWdzKSlcbitcdFx0XHR2c2ktXHUwMDNlbnVtX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxO1xuIFxuIFx0XHRwZi1cdTAwM2VudW1fbGFuX3R4ID0gdnNpLVx1MDAzZWFsbG9jX3R4cTtcbi1cbi1cdFx0Lyogb25seSAxIFJ4IHF1ZXVlIHVubGVzcyBSU1MgaXMgZW5hYmxlZCAqL1xuLVx0XHRpZiAoIXRlc3RfYml0KElDRV9GTEFHX1JTU19FTkEsIHBmLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSAxO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGlmICh2c2ktXHUwMDNlcmVxX3J4cSkge1xuLVx0XHRcdFx0dnNpLVx1MDAzZWFsbG9jX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxO1xuLVx0XHRcdFx0dnNpLVx1MDAzZW51bV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dnNpLVx1MDAzZWFsbG9jX3J4cSA9IGljZV9nZXRfcnhxX2NvdW50KHBmKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0cGYtXHUwMDNlbnVtX2xhbl9yeCA9IHZzaS1cdTAwM2VhbGxvY19yeHE7XG4gXG4gXHRcdHZzaS1cdTAwM2VudW1fcV92ZWN0b3JzID0gbWF4KHZzaS1cdTAwM2VhbGxvY19yeHEsIHZzaS1cdTAwM2VhbGxvY190eHEpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX1ZTSV9TRjpcbi1cdFx0dnNpLVx1MDAzZWFsbG9jX3R4cSA9IDE7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSAxO1xuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IDE7XG4gXHRcdHZzaS1cdTAwM2VpcnFfZHluX2FsbG9jID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfVkY6XG4gXHRcdGlmICh2Zi1cdTAwM2VudW1fcmVxX3FzKVxuIFx0XHRcdHZmLVx1MDAzZW51bV92Zl9xcyA9IHZmLVx1MDAzZW51bV9yZXFfcXM7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSB2Zi1cdTAwM2VudW1fdmZfcXM7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSB2Zi1cdTAwM2VudW1fdmZfcXM7XG4gXHRcdC8qIHBmLVx1MDAzZXZmcy5udW1fbXNpeF9wZXIgaW5jbHVkZXMgKFZGIG1pc2NlbGxhbmVvdXMgdmVjdG9yICtcbiBcdFx0ICogZGF0YSBxdWV1ZSBpbnRlcnJ1cHRzKS4gU2luY2UgdnNpLVx1MDAzZW51bV9xX3ZlY3RvcnMgaXMgbnVtYmVyXG4gXHRcdCAqIG9mIHF1ZXVlcyB2ZWN0b3JzLCBzdWJ0cmFjdCAxIChJQ0VfTk9OUV9WRUNTX1ZGKSBmcm9tIHRoZVxuQEAgLTIyNiwyMiArMjQ5LDE1IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IHZmLVx1MDAzZW51bV9tc2l4IC0gSUNFX05PTlFfVkVDU19WRjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfQ1RSTDpcbi1cdFx0dnNpLVx1MDAzZWFsbG9jX3R4cSA9IDE7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSAxO1xuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfVlNJX0NITkw6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAwO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfTEI6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAxO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMTtcbiBcdFx0LyogQSBkdW1teSBxX3ZlY3Rvciwgbm8gYWN0dWFsIElSUS4gKi9cbiBcdFx0dnNpLVx1MDAzZW51bV9xX3ZlY3RvcnMgPSAxO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcIlVua25vd24gVlNJIHR5cGUgJWRcXG5cIiwgdnNpX3R5cGUpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbkBAIC0zMzAsNiArMzQ2LDMyIEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdHZzaS1cdTAwM2VyeHFfbWFwID0gTlVMTDtcbiB9XG4gXG4rLyogZnJlZSBzaW5nbGUgc3RhdHMgbWVtb3J5ICovXG4rc3RhdGljIHZvaWQgX19pY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0LCBib29sIGZyZWVfZW50cmllcylcbit7XG4rXHRpZiAoIXZzaV9zdGF0KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoZnJlZV9lbnRyaWVzKSB7XG4rXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjsgaSsrKSB7XG4rXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbitcdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuK1x0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcbitcdFx0XHRpZiAodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSkge1xuK1x0XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4rXHRcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0a2ZyZWUodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyk7XG4rXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKTtcbitcdGtmcmVlKHZzaV9zdGF0KTtcbit9XG4rXG4gLyoqXG4gICogaWNlX3ZzaV9mcmVlX3N0YXRzIC0gRnJlZSB0aGUgcmluZyBzdGF0aXN0aWNzIHN0cnVjdHVyZXNcbiAgKiBAdnNpOiBWU0kgcG9pbnRlclxuQEAgLTMzOCw3ICszODAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcbiB7XG4gXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0aW50IGk7XG4gXG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuIFx0XHRyZXR1cm47XG5AQCAtMzQ2LDI2ICszODcsNyBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dnNpX3N0YXQgPSBwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF07XG4tXHRpZiAoIXZzaV9zdGF0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpY2VfZm9yX2VhY2hfYWxsb2NfdHhxKHZzaSwgaSkge1xuLVx0XHRpZiAodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xuLVx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGljZV9mb3JfZWFjaF9hbGxvY19yeHEodnNpLCBpKSB7XG4tXHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4tXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyk7XG4tXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKTtcbi1cdGtmcmVlKHZzaV9zdGF0KTtcbitcdF9faWNlX3ZzaV9mcmVlX3N0YXRzKHZzaV9zdGF0LCB0cnVlKTtcbiBcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IE5VTEw7XG4gfVxuIFxuQEAgLTUxMyw2ICs1MzUsMzAgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9tc2l4X2NsZWFuX3JpbmdzKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGljZV92c2lfc3RhdHMgKmljZV92c2lfbmV3X3N0YXRfYXJyYXlzKGludCB0eHEsIGludCByeHEpXG4re1xuK1x0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0cztcbitcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XG4rXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4rXG4rXHR2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7XG4rXHR0eF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCp0eF9yaW5nX3N0YXRzLCB0eHEpO1xuK1x0cnhfcmluZ19zdGF0cyA9IGt6YWxsb2Nfb2JqcygqcnhfcmluZ19zdGF0cywgcnhxKTtcbitcdGlmICghdnNpX3N0YXQgfHwgIXR4X3Jpbmdfc3RhdHMgfHwgIXJ4X3Jpbmdfc3RhdHMpIHtcbitcdFx0a2ZyZWUodnNpX3N0YXQpO1xuK1x0XHRrZnJlZSh0eF9yaW5nX3N0YXRzKTtcbitcdFx0a2ZyZWUocnhfcmluZ19zdGF0cyk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XG4rXHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0cztcbitcdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuID0gdHhxO1xuK1x0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c19sZW4gPSByeHE7XG4rXG4rXHRyZXR1cm4gdnNpX3N0YXQ7XG4rfVxuK1xuIC8qKlxuICAqIGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMgLSBBbGxvY2F0ZSBzdGF0aXN0aWNzIGFycmF5c1xuICAqIEB2c2k6IFZTSSBwb2ludGVyXG5AQCAtNTMxLDMxICs1NzcsMTIgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHQvKiByZWFsbG9jIHdpbGwgaGFwcGVuIGluIHJlYnVpbGQgcGF0aCAqL1xuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcbitcdHZzaV9zdGF0ID0gaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXModnNpLVx1MDAzZWFsbG9jX3R4cSwgdnNpLVx1MDAzZWFsbG9jX3J4cSk7XG4gXHRpZiAoIXZzaV9zdGF0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxuLVx0XHRremFsbG9jX29ianMoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHZzaS1cdTAwM2VhbGxvY190eHEpO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKVxuLVx0XHRnb3RvIGVycl9hbGxvY190eDtcbi1cbi1cdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuLVx0XHRremFsbG9jX29ianMoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaS1cdTAwM2VhbGxvY19yeHEpO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKVxuLVx0XHRnb3RvIGVycl9hbGxvY19yeDtcbi1cbiBcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IHZzaV9zdGF0O1xuLVxuIFx0cmV0dXJuIDA7XG4tXG4tZXJyX2FsbG9jX3J4OlxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyk7XG4tZXJyX2FsbG9jX3R4OlxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyk7XG4tXHRrZnJlZSh2c2lfc3RhdCk7XG4tXHRwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0gPSBOVUxMO1xuLVx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuQEAgLTI5MjYsNiArMjk1Myw1MSBAQCBpY2VfdnNpX3JlYnVpbGRfZ2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gXHRyZXR1cm4gdnNpLVx1MDAzZW51bV9xX3ZlY3RvcnM7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGljZV92c2lfZnJlZV91bnVzZWRfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0LFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld192c2lfc3RhdClcbit7XG4rXHRpbnQgbmV3X3R4cSA9IG5ld192c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcbitcdGludCBuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuK1x0aW50IHByZXZfdHhxID0gdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW47XG4rXHRpbnQgcHJldl9yeHEgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcbitcbitcdGZvciAoaW50IGkgPSBuZXdfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSsrKSB7XG4rXHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4rXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4rXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbitcdFx0fVxuK1x0fVxuK1x0Zm9yIChpbnQgaSA9IG5ld19yeHE7IGkgXHUwMDNjIHByZXZfcnhxOyBpKyspIHtcbitcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbitcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbitcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGljZV92c2lfc2V0X3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2ksXG4rXHRcdFx0XHQgICAgc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld192c2lfc3RhdClcbit7XG4rXHR1MTYgbmV3X3R4cSwgbmV3X3J4cSwgcHJldl90eHEsIHByZXZfcnhxO1xuK1x0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuK1x0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbitcbitcdG5ld190eHEgPSBuZXdfdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW47XG4rXHRuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuK1x0dnNpX3N0YXQgPSBwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF07XG4rXHRwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0gPSBuZXdfdnNpX3N0YXQ7XG4rXHRpZiAoIXZzaV9zdGF0KVxuK1x0XHRyZXR1cm47IC8qIGRvbid0IGNvcHkgaWYgdGhlcmUgaXMgbm8gc291cmNlICovXG4rXG4rXHRwcmV2X3R4cSA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xuK1x0cHJldl9yeHEgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcbitcbitcdG1lbWNweShuZXdfdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cywgdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyxcbitcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpICogbWluKHByZXZfdHhxLCBuZXdfdHhxKSk7XG4rXHRtZW1jcHkobmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsXG4rXHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKSAqIG1pbihwcmV2X3J4cSwgbmV3X3J4cSkpO1xuK31cbitcbiAvKipcbiAgKiBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlIC0gc2V0IGNvYWxlc2NlIGZyb20gZWFybGllciBzYXZlZCBhcnJheXNcbiAgKiBAdnNpOiBWU0kgY29ubmVjdGVkIHdpdGggcV92ZWN0b3JzXG5AQCAtMzAxMiw2MCArMzA4NCwzNyBAQCBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gfVxuIFxuIC8qKlxuLSAqIGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyAtIEZyZWVzIHVudXNlZCBzdGF0IHN0cnVjdHVyZXMgb3IgYWxsb2MgbmV3IG9uZXNcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxuKyAqIGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzIC0gcmVzaXplIHJpbmcgc3RhdHMgYXJyYXlzIGZvciBuZXcgcXVldWUgY291bnRcbisgKiBAdnNpOiBWU0kgdG8gc3dhcCB0aGUgcmluZyBzdGF0cyBhcnJheXMgb2ZcbisgKlxuKyAqIENhbGwgd2hpbGUgQHZzaSBzdGlsbCBvd25zIGl0cyBxdWV1ZXMgYW5kIGJlZm9yZSBpY2VfdnNpX2RlY2ZnKCkgcmV0dXJucyB0aGVtXG4rICogdG8gdGhlIFBGIHBvb2wsIHNvIHRoYXQgdGhlIG5ldyBzaXplIGlzIHdoYXQgaWNlX3ZzaV9zZXRfbnVtX3FzKCkgd2lsbCBjb21wdXRlXG4rICogYWZ0ZXJ3YXJkcy4gU3Vydml2aW5nIGVudHJpZXMgYXJlIGNhcnJpZWQgb3ZlciwgdGhlIHJlc3QgaXMgZnJlZWQuXG4rICpcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZVxuICAqL1xuLXN0YXRpYyBpbnRcbi1pY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbitpbnQgaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiB7XG4tXHR1MTYgcmVxX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID8gdnNpLVx1MDAzZXJlcV90eHEgOiB2c2ktXHUwMDNlYWxsb2NfdHhxO1xuLVx0dTE2IHJlcV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cSA/IHZzaS1cdTAwM2VyZXFfcnhxIDogdnNpLVx1MDAzZWFsbG9jX3J4cTtcbi1cdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XG4tXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzO1xuLVx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuK1x0c3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtcyBxcztcbitcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICpvbGRfc3RhdDtcbitcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICpuZXdfc3RhdDtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVx1MDAzZWJhY2s7XG4tXHR1MTYgcHJldl90eHEgPSB2c2ktXHUwMDNlYWxsb2NfdHhxO1xuLVx0dTE2IHByZXZfcnhxID0gdnNpLVx1MDAzZWFsbG9jX3J4cTtcbi1cdGludCBpO1xuIFxuLVx0dnNpX3N0YXQgPSBwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF07XG4rXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChyZXFfdHhxIFx1MDAzYyBwcmV2X3R4cSkge1xuLVx0XHRmb3IgKGkgPSByZXFfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSsrKSB7XG4tXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbitcdHFzID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgdnNpLVx1MDAzZWFsbG9jX3R4cSArIHZzaS1cdTAwM2VudW1feGRwX3R4cSxcbitcdFx0XHRcdHZzaS1cdTAwM2VhbGxvY19yeHEpO1xuIFxuLVx0dHhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHM7XG4tXHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzID1cbi1cdFx0a3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cywgcmVxX3R4cSxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKSxcbi1cdFx0XHQgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKSB7XG4tXHRcdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzO1xuK1x0bmV3X3N0YXQgPSBpY2VfdnNpX25ld19zdGF0X2FycmF5cyhxcy5hbGxvY190eHEsIHFzLmFsbG9jX3J4cSk7XG4rXHRpZiAoIW5ld19zdGF0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbiBcbi1cdGlmIChyZXFfcnhxIFx1MDAzYyBwcmV2X3J4cSkge1xuLVx0XHRmb3IgKGkgPSByZXFfcnhxOyBpIFx1MDAzYyBwcmV2X3J4cTsgaSsrKSB7XG4tXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJ4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzO1xuLVx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9XG4tXHRcdGtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsXG4tXHRcdFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyksXG4tXHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cykge1xuLVx0XHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0cztcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRvbGRfc3RhdCA9IHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XTtcbitcdGljZV92c2lfc2V0X3N0YXRfYXJyYXlzKHZzaSwgbmV3X3N0YXQpO1xuK1x0aWYgKG9sZF9zdGF0KSB7XG4rXHRcdGljZV92c2lfZnJlZV91bnVzZWRfc3RhdF9hcnJheXMob2xkX3N0YXQsIG5ld19zdGF0KTtcbitcdFx0X19pY2VfdnNpX2ZyZWVfc3RhdHMob2xkX3N0YXQsIGZhbHNlKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTMwOTgsNyArMzE0Nyw3IEBAIGludCBpY2VfdnNpX3JlYnVpbGQoc3RydWN0IGljZV92c2kgKnZzaSwgdTMyIHZzaV9mbGFncylcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dnNpLVx1MDAzZXhkcF9zdGF0ZV9sb2NrKTtcbiBcbi1cdHJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpO1xuK1x0cmV0ID0gaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXModnNpKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5oXG5pbmRleCA0OTQ1NGQ5OGRjZmVmLi41MjM2MDg4YzMyMGJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxuQEAgLTY3LDYgKzY3LDcgQEAgdm9pZCBpY2VfdnNpX2RlY2ZnKHN0cnVjdCBpY2VfdnNpICp2c2kpO1xuIHZvaWQgaWNlX2Rpc192c2koc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBsb2NrZWQpO1xuIFxuIGludCBpY2VfdnNpX3JlYnVpbGQoc3RydWN0IGljZV92c2kgKnZzaSwgdTMyIHZzaV9mbGFncyk7XG4raW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpO1xuIGludCBpY2VfdnNpX2NmZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKTtcbiBzdHJ1Y3QgaWNlX3ZzaSAqaWNlX3ZzaV9hbGxvYyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfdnNpX2ZyZWUoc3RydWN0IGljZV92c2kgKnZzaSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbmluZGV4IDI3ZTRhY2IxNjIwZjAuLmZkNzBhOTNiOTg2OTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG5AQCAtMjY4LDYgKzI2OCwxMCBAQCBzdGF0aWMgaW50IGljZV92Zl9yZWNvbmZpZ192c2koc3RydWN0IGljZV92ZiAqdmYpXG4gXG4gXHR2c2ktXHUwMDNlZmxhZ3MgPSBJQ0VfVlNJX0ZMQUdfTk9fSU5JVDtcbiBcbitcdGVyciA9IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHZzaSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0aWNlX3ZzaV9kZWNmZyh2c2kpO1xuIFx0aWNlX2ZsdHJfcmVtb3ZlX2FsbCh2c2kpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTM6MzA6MTkuMTg5ODQ1ODQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ4NjAyMTc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhbmQgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxseS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIgRTgwMCBzZXJpZXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBpY2VgIGRyaXZlciwgYmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9uczogYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaGAsIGBpY2VfbGliLmNgLCBgaWNlX2xpYi5oYCwgYW5kIGBpY2VfdmZfbGliLmNgLlxuXG5Ob3csIGFjY29yZGluZyB0byBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGlmIHRoaXMgZHJpdmVyIGludm9sdmVzIFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIuIFRoaXMgbWVhbnMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcywgaXMgdGhlIEludGVsIGBpY2VgIGRyaXZlciByZWFjaGFibGUgd2l0aGluIHN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGVudmlyb25tZW50cywgb3IgZG9lcyBpdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24/XG5cbkkga25vdyB0aGUgYGljZWAgZHJpdmVyIGlzIHRoZSBkcml2ZXIgZm9yIEludGVsIEV0aGVybmV0IDgwMCBTZXJpZXMgTklDcy4gSXQgd29ya3Mgd2l0aCBJbnRlbCBOSUMgaGFyZHdhcmUgKFBDSSBkZXZpY2UpIGFuZCBmaXJtd2FyZSB0aHJvdWdoIGFkbWluIHF1ZXVlcyBhbmQgcmVnaXN0ZXJzLiBJJ20gcHJldHR5IGNlcnRhaW4gdGhhdCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGBpY2VgIGhhcmR3YXJlIGRpcmVjdGx5LiBRRU1VIGhhbmRsZXMgb3RoZXIgZHJpdmVycyBsaWtlIGUxMDAwLCBlMTAwMGUsIGlnYiwgYW5kIHZpcnRpby1uZXQsIGJ1dCBub3QgdGhlIEU4MDAgc2VyaWVzLiBTaW1pbGFybHksIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBzb2Z0d2FyZSBlbXVsYXRpb24gbWV0aG9kcyBsaWtlIG5ldGtpdCwgZHVtbXksIHZldGgsIHRhcC90dW4sIHZpcnRpbywgb3IgVVNCIGdhZGdldCwgZm9yIHRoZSBgaWNlYCBkcml2ZXIuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZvciBgSUNFYCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzozMDoyNS42NzU4NzE2NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxMzY0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjI1Ljc1NjAxMjI1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1MzAyODQyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSUNFIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgSW50ZWwgRXRoZXJuZXQgYElDRWAgZHJpdmVyLiBCZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgZHJpdmVyJ3MgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXJvdW5kIGxpbmUgMjkxIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnYC4gVGhpcyBmaWxlIHVzdWFsbHkgb3V0bGluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBzbyBpdCdzIHRoZSBpZGVhbCBwbGFjZSB0byBkZWNpcGhlciB3aGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgdGhlIGBJQ0VgIGRyaXZlciByZWxpZXMgdXBvbi4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIG5lZWRzIHRvIHN1Y2Nlc3NmdWxseSBpbmNsdWRlIHRoYXQgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjM0LjI4NjI5OTk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0Y29uZmlnIElDRVxcbiAyOTI6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFxcXCJcXG4gMjkzOlxcdFxcdGRlZmF1bHQgblxcbiAyOTQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuIDI5NTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIDI5NjpcXHRcXHRkZXBlbmRzIG9uIEdOU1MgfHwgR05TUyA9IG5cXG4gMjk3OlxcdFxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuIDI5ODpcXHRcXHRzZWxlY3QgRElNTElCXFxuIDI5OTpcXHRcXHRzZWxlY3QgTElCRVRIX1hEUFxcbiAzMDA6XFx0XFx0c2VsZWN0IExJQklFXFxuIDMwMTpcXHRcXHRzZWxlY3QgTElCSUVfQURNSU5RXFxuIDMwMjpcXHRcXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG4gMzAzOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAzMDQ6XFx0XFx0c2VsZWN0IFBBQ0tJTkdcXG4gMzA1OlxcdFxcdHNlbGVjdCBQTERNRldcXG4gMzA2OlxcdFxcdHNlbGVjdCBEUExMXFxuIDMwNzpcXHRcXHRoZWxwXFxuIDMwODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgb2ZcXG4gMzA5OlxcdFxcdCAgZGV2aWNlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvXFxuIDMxMDpcXHRcXHQgIHRvIHRoZSBBZGFwdGVyIFxcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXQgY2FuIGJlIGxvY2F0ZWQgYXQ6XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVxcdTAwM2VcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gMzE1OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcXHUwMDNlLlxcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gMzE4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgaWNlLlxcbiAzMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjM0LjI4NjQwNDE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwMDg5ODA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmc9ZmFsc2UgZm9yIEludGVsIEU4MDAgU2VyaWVzIERyaXZlcioqXG5cbk9rYXksIGxldCdzIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBndWlkZWxpbmVzIGNvcnJlY3RseS4gVGhlIGNvcmUgb2YgaXQgYWxsIGlzIGFib3V0IHdoZW4gKm5vdCogdG8gZnV6ei4gUnVsZSAyIHNlZW1zIHJlbGV2YW50IGhlcmUsIHNwZWNpZmljYWxseSB0aGUgcGFydCBhYm91dCBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzOyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYS5cblxuVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcywgb3IgYGljZWAuIEkga25vdyB0aGlzIGRyaXZlciBpbnRpbWF0ZWx5IOKAkyBpdCdzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBOSUMgZHJpdmVyLCBhbmQgaXQgKmFic29sdXRlbHkqIHJlbGllcyBvbiBwaHlzaWNhbCBJbnRlbCBFODEwL0U4MDAgUENJZSBoYXJkd2FyZSwgdGhlIEFTSUNzLiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSBhbmQgR0NFLCBzaW1wbHkgKmRvbid0KiBlbXVsYXRlIHRoaXMgaGFyZHdhcmUuIFRoaXMgaXMgYSBjcnVjaWFsIHBvaW50LCBhbmQgaXQncyB0aGUgZGVmaW5pbmcgZmFjdG9yLlxuXG5TbywgdGhpcyBmYWxscyBkaXJlY3RseSB1bmRlciBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBUaGVyZSdzIG5vIHdheSBzeXprYWxsZXIsIG9yIGFueSBzdGFuZGFyZCBmdXp6ZXIsIGNhbiBlZmZlY3RpdmVseSByZWFjaCBhbmQgdGVzdCB0aGlzIGNvZGUuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIG1vZGlmaWVkIGZpbGVzLiBMZXQgbWUgc2VlLi4uIHllcywgdGhlIGRpZmYgaW5jbHVkZXMgYGljZS5oYCwgYGljZV9saWIuY2AsIGBpY2VfbGliLmhgLCBhbmQgYGljZV92Zl9saWIuY2AuIEFsbCBvZiB0aGVzZSBmaWxlcyBhcmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCBkaXJlY3RvcnksIHdoaWNoIGlzICpleGNsdXNpdmVseSogdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciBjb2RlLiBDb25maXJtYXRpb24hXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyAqbXVzdCogYmUgc2V0IHRvIGBmYWxzZWAuIFNpbmNlIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBuZWVkZWQuIENvbnNlcXVlbnRseSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBhbHNvIGJlIGVtcHR5IChvciBhIG51bGwvZW1wdHkgYXJyYXkpIOKAkyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gdGVzdCB1bnJlYWNoYWJsZSBjb2RlLiBUaGUgcmVhc29uaW5nIHNob3VsZCBiZSBjb25jaXNlLCBidXQgY2xlYXI6IHRoaXMgY2hhbmdlIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIEludGVsIEU4MDAgRXRoZXJuZXQgZHJpdmVyIChgaWNlYCksIHdoaWNoIGRlcGVuZHMgb24gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyAoUUVNVS9zeXprYWxsZXIpLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4gSSBoYXZlIHdoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwNCwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzozMDozOC45ODczMDQ1OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGVudGlyZWx5IGNvbmZpbmVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgUENJZSBOSUMgaGFyZHdhcmUgKEU4MDAvRTgxMCBzZXJpZXMpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGVudGlyZWx5IGNvbmZpbmVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgUENJZSBOSUMgaGFyZHdhcmUgKEU4MDAvRTgxMCBzZXJpZXMpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjM4Ljk4NzM0MDY1N1oiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowgc5dt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 12:39:00 +0000 UTC FinishedAt: 2026-09-11 13:30:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBQQ0llIE5JQyBoYXJkd2FyZSAoRTgwMC9FODEwIHNlcmllcykgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk0MzZhZjI3Mzk3YzgwNzNhZjFmY2FkZTcwYjI0NjE5MTUyMzE1NjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxMzozMDoxNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbmluZGV4IGY3MmJiMWFhNDA2NzQuLjQ4ZjQzMTJkZjRhNDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuQEAgLTMyOCw2ICYjNDM7MzI4LDggQEAgZW51bSBpY2VfdnNpX3N0YXRlIHtcbiBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyB7XG4gXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzOyAgLyogVHggcmluZyBzdGF0cyBhcnJheSAqL1xuIFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsgIC8qIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbiYjNDM7XHR1MTYgdHhfcmluZ19zdGF0c19sZW47ICAvKiBMZW5ndGggb2YgdGhlIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbiYjNDM7XHR1MTYgcnhfcmluZ19zdGF0c19sZW47ICAvKiBMZW5ndGggb2YgdGhlIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbiB9O1xuIFxuIC8qIHN0cnVjdCB0aGF0IGRlZmluZXMgYSBWU0ksIGFzc29jaWF0ZWQgd2l0aCBhIGRldiAqL1xuQEAgLTQwMSw5ICYjNDM7NDAzLDExIEBAIHN0cnVjdCBpY2VfdnNpIHtcbiBcdHU4IHJ4X21hcHBpbmdfbW9kZTtcdFx0IC8qIElDRV9NQVBfTU9ERV9bQ09OVElHfFNDQVRURVJdICovXG4gXHR1MTYgKnR4cV9tYXA7XHRcdFx0IC8qIGluZGV4IGluIHBmLVx1MDAzZWF2YWlsX3R4cXMgKi9cbiBcdHUxNiAqcnhxX21hcDtcdFx0XHQgLyogaW5kZXggaW4gcGYtXHUwMDNlYXZhaWxfcnhxcyAqL1xuLVx0dTE2IGFsbG9jX3R4cTtcdFx0XHQgLyogQWxsb2NhdGVkIFR4IHF1ZXVlcyAqL1xuJiM0MztcdHN0cnVjdF9ncm91cF90YWdnZWQoaWNlX3ZzaV9hbGxvY19xdWV1ZXNfcGFyYW1zLCBhbGxvY190eHFfcnhxLFxuJiM0MztcdFx0dTE2IGFsbG9jX3R4cTtcdFx0IC8qIEFsbG9jYXRlZCBUeCBxdWV1ZXMgKi9cbiYjNDM7XHRcdHUxNiBhbGxvY19yeHE7XHRcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXG4mIzQzO1x0KTtcbiBcdHUxNiBudW1fdHhxO1x0XHRcdCAvKiBVc2VkIFR4IHF1ZXVlcyAqL1xuLVx0dTE2IGFsbG9jX3J4cTtcdFx0XHQgLyogQWxsb2NhdGVkIFJ4IHF1ZXVlcyAqL1xuIFx0dTE2IG51bV9yeHE7XHRcdFx0IC8qIFVzZWQgUnggcXVldWVzICovXG4gXHR1MTYgcmVxX3R4cTtcdFx0XHQgLyogVXNlciByZXF1ZXN0ZWQgVHggcXVldWVzICovXG4gXHR1MTYgcmVxX3J4cTtcdFx0XHQgLyogVXNlciByZXF1ZXN0ZWQgUnggcXVldWVzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbmluZGV4IDhjZGM0ZmRhODllOTcuLjQ5NDlmMjllNTM4ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5AQCAtMTUzLDE2ICYjNDM7MTUzLDU2IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9kZXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB1MTYgaWNlX2dldF9yeHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3N0YXRpYyB1MTYgaWNlX2dldF9yeHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYsIHUxNiBoZWxkKVxuIHtcbi1cdHJldHVybiBtaW4oaWNlX2dldF9hdmFpbF9yeHFfY291bnQocGYpLFxuLVx0XHQgICBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpKTtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZikgJiM0MzsgaGVsZCxcbiYjNDM7XHRcdCAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XG4gfVxuIFxuLXN0YXRpYyB1MTYgaWNlX2dldF90eHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpXG4mIzQzO3N0YXRpYyB1MTYgaWNlX2dldF90eHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYsIHUxNiBoZWxkKVxuIHtcbi1cdHJldHVybiBtaW4oaWNlX2dldF9hdmFpbF90eHFfY291bnQocGYpLFxuLVx0XHQgICBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpKTtcbiYjNDM7XHRyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3R4cV9jb3VudChwZikgJiM0MzsgaGVsZCxcbiYjNDM7XHRcdCAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEBoZWxkX3R4cSwgQGhlbGRfcnhxOiBxdWV1ZXMgdGhlIFZTSSBzdGlsbCBvd25zIGJ1dCBpcyBhYm91dCB0byByZXR1cm4gdG8gdGhlXG4mIzQzOyAqIFBGIHBvb2wsIHNvIHRoYXQgdGhlIHJlc3VsdCBtYXRjaGVzIHdoYXQgaXQgd2lsbCBiZSBvbmNlIHRoZXkgYXJlIGJhY2sgdGhlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtc1xuJiM0MztpY2VfdnNpX2dldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSwgdTE2IGhlbGRfdHhxLCB1MTYgaGVsZF9yeHEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9hbGxvY19xdWV1ZXNfcGFyYW1zIHFzID0ge307XG4mIzQzO1x0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh2c2ktXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgSUNFX1ZTSV9QRjpcbiYjNDM7XHRcdHFzLmFsbG9jX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID86IGljZV9nZXRfdHhxX2NvdW50KHBmLCBoZWxkX3R4cSk7XG4mIzQzO1xuJiM0MztcdFx0Lyogb25seSAxIFJ4IHF1ZXVlIHVubGVzcyBSU1MgaXMgZW5hYmxlZCAqL1xuJiM0MztcdFx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRcdHFzLmFsbG9jX3J4cSA9IDE7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHFzLmFsbG9jX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxID86XG4mIzQzO1x0XHRcdFx0ICAgICAgIGljZV9nZXRfcnhxX2NvdW50KHBmLCBoZWxkX3J4cSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIElDRV9WU0lfU0Y6XG4mIzQzO1x0Y2FzZSBJQ0VfVlNJX0NUUkw6XG4mIzQzO1x0Y2FzZSBJQ0VfVlNJX0xCOlxuJiM0MztcdFx0cXMuYWxsb2NfdHhxID0gMTtcbiYjNDM7XHRcdHFzLmFsbG9jX3J4cSA9IDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIElDRV9WU0lfVkY6XG4mIzQzO1x0XHRxcy5hbGxvY190eHEgPSB2c2ktXHUwMDNldmYtXHUwMDNlbnVtX3JlcV9xcyA/OiB2c2ktXHUwMDNldmYtXHUwMDNlbnVtX3ZmX3FzO1xuJiM0MztcdFx0cXMuYWxsb2NfcnhxID0gcXMuYWxsb2NfdHhxO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBJQ0VfVlNJX0NITkw6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1Vua25vd24gVlNJIHR5cGUgJWRcXG5cJiMzNDssIHZzaS1cdTAwM2V0eXBlKTtcbiYjNDM7XHRcdHJldHVybiB2c2ktXHUwMDNlYWxsb2NfdHhxX3J4cTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBxcztcbiB9XG4gXG4gLyoqXG5AQCAtMTgwLDQ0ICYjNDM7MjIwLDI3IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0aWYgKFdBUk5fT04odnNpX3R5cGUgPT0gSUNFX1ZTSV9WRiBcdTAwMjZcdTAwMjYgIXZmKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdHZzaS1cdTAwM2VhbGxvY190eHFfcnhxID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgMCwgMCk7XG4mIzQzO1xuIFx0c3dpdGNoICh2c2lfdHlwZSkge1xuIFx0Y2FzZSBJQ0VfVlNJX1BGOlxuLVx0XHRpZiAodnNpLVx1MDAzZXJlcV90eHEpIHtcbi1cdFx0XHR2c2ktXHUwMDNlYWxsb2NfdHhxID0gdnNpLVx1MDAzZXJlcV90eHE7XG4mIzQzO1x0XHRpZiAodnNpLVx1MDAzZXJlcV90eHEpXG4gXHRcdFx0dnNpLVx1MDAzZW51bV90eHEgPSB2c2ktXHUwMDNlcmVxX3R4cTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHR2c2ktXHUwMDNlYWxsb2NfdHhxID0gaWNlX2dldF90eHFfY291bnQocGYpO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAodnNpLVx1MDAzZXJlcV9yeHEgXHUwMDI2XHUwMDI2IHRlc3RfYml0KElDRV9GTEFHX1JTU19FTkEsIHBmLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdFx0dnNpLVx1MDAzZW51bV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cTtcbiBcbiBcdFx0cGYtXHUwMDNlbnVtX2xhbl90eCA9IHZzaS1cdTAwM2VhbGxvY190eHE7XG4tXG4tXHRcdC8qIG9ubHkgMSBSeCBxdWV1ZSB1bmxlc3MgUlNTIGlzIGVuYWJsZWQgKi9cbi1cdFx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cdTAwM2VmbGFncykpIHtcbi1cdFx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRpZiAodnNpLVx1MDAzZXJlcV9yeHEpIHtcbi1cdFx0XHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cTtcbi1cdFx0XHRcdHZzaS1cdTAwM2VudW1fcnhxID0gdnNpLVx1MDAzZXJlcV9yeHE7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSBpY2VfZ2V0X3J4cV9jb3VudChwZik7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4gXHRcdHBmLVx1MDAzZW51bV9sYW5fcnggPSB2c2ktXHUwMDNlYWxsb2NfcnhxO1xuIFxuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IG1heCh2c2ktXHUwMDNlYWxsb2NfcnhxLCB2c2ktXHUwMDNlYWxsb2NfdHhxKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfU0Y6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAxO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMTtcbiBcdFx0dnNpLVx1MDAzZW51bV9xX3ZlY3RvcnMgPSAxO1xuIFx0XHR2c2ktXHUwMDNlaXJxX2R5bl9hbGxvYyA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfVlNJX1ZGOlxuIFx0XHRpZiAodmYtXHUwMDNlbnVtX3JlcV9xcylcbiBcdFx0XHR2Zi1cdTAwM2VudW1fdmZfcXMgPSB2Zi1cdTAwM2VudW1fcmVxX3FzO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfdHhxID0gdmYtXHUwMDNlbnVtX3ZmX3FzO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gdmYtXHUwMDNlbnVtX3ZmX3FzO1xuIFx0XHQvKiBwZi1cdTAwM2V2ZnMubnVtX21zaXhfcGVyIGluY2x1ZGVzIChWRiBtaXNjZWxsYW5lb3VzIHZlY3RvciAmIzQzO1xuIFx0XHQgKiBkYXRhIHF1ZXVlIGludGVycnVwdHMpLiBTaW5jZSB2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyBpcyBudW1iZXJcbiBcdFx0ICogb2YgcXVldWVzIHZlY3RvcnMsIHN1YnRyYWN0IDEgKElDRV9OT05RX1ZFQ1NfVkYpIGZyb20gdGhlXG5AQCAtMjI2LDIyICYjNDM7MjQ5LDE1IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IHZmLVx1MDAzZW51bV9tc2l4IC0gSUNFX05PTlFfVkVDU19WRjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfQ1RSTDpcbi1cdFx0dnNpLVx1MDAzZWFsbG9jX3R4cSA9IDE7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSAxO1xuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfVlNJX0NITkw6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAwO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfTEI6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAxO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMTtcbiBcdFx0LyogQSBkdW1teSBxX3ZlY3Rvciwgbm8gYWN0dWFsIElSUS4gKi9cbiBcdFx0dnNpLVx1MDAzZW51bV9xX3ZlY3RvcnMgPSAxO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtVbmtub3duIFZTSSB0eXBlICVkXFxuXCYjMzQ7LCB2c2lfdHlwZSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuQEAgLTMzMCw2ICYjNDM7MzQ2LDMyIEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdHZzaS1cdTAwM2VyeHFfbWFwID0gTlVMTDtcbiB9XG4gXG4mIzQzOy8qIGZyZWUgc2luZ2xlIHN0YXRzIG1lbW9yeSAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2ljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQsIGJvb2wgZnJlZV9lbnRyaWVzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF2c2lfc3RhdClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZyZWVfZW50cmllcykge1xuJiM0MztcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xuJiM0MztcdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbiYjNDM7XHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKTtcbiYjNDM7XHRrZnJlZSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKTtcbiYjNDM7XHRrZnJlZSh2c2lfc3RhdCk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX3ZzaV9mcmVlX3N0YXRzIC0gRnJlZSB0aGUgcmluZyBzdGF0aXN0aWNzIHN0cnVjdHVyZXNcbiAgKiBAdnNpOiBWU0kgcG9pbnRlclxuQEAgLTMzOCw3ICYjNDM7MzgwLDYgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4ge1xuIFx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbi1cdGludCBpO1xuIFxuIFx0aWYgKHZzaS1cdTAwM2V0eXBlID09IElDRV9WU0lfQ0hOTClcbiBcdFx0cmV0dXJuO1xuQEAgLTM0NiwyNiAmIzQzOzM4Nyw3IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHR2c2lfc3RhdCA9IHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XTtcbi1cdGlmICghdnNpX3N0YXQpXG4tXHRcdHJldHVybjtcbi1cbi1cdGljZV9mb3JfZWFjaF9hbGxvY190eHEodnNpLCBpKSB7XG4tXHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4tXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0aWNlX2Zvcl9lYWNoX2FsbG9jX3J4cSh2c2ksIGkpIHtcbi1cdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbi1cdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKTtcbi1cdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpO1xuLVx0a2ZyZWUodnNpX3N0YXQpO1xuJiM0MztcdF9faWNlX3ZzaV9mcmVlX3N0YXRzKHZzaV9zdGF0LCB0cnVlKTtcbiBcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IE5VTEw7XG4gfVxuIFxuQEAgLTUxMyw2ICYjNDM7NTM1LDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbXNpeF9jbGVhbl9yaW5ncyhpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXMoaW50IHR4cSwgaW50IHJ4cSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0cztcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4mIzQzO1xuJiM0MztcdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcbiYjNDM7XHR0eF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCp0eF9yaW5nX3N0YXRzLCB0eHEpO1xuJiM0MztcdHJ4X3Jpbmdfc3RhdHMgPSBremFsbG9jX29ianMoKnJ4X3Jpbmdfc3RhdHMsIHJ4cSk7XG4mIzQzO1x0aWYgKCF2c2lfc3RhdCB8fCAhdHhfcmluZ19zdGF0cyB8fCAhcnhfcmluZ19zdGF0cykge1xuJiM0MztcdFx0a2ZyZWUodnNpX3N0YXQpO1xuJiM0MztcdFx0a2ZyZWUodHhfcmluZ19zdGF0cyk7XG4mIzQzO1x0XHRrZnJlZShyeF9yaW5nX3N0YXRzKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW4gPSB0eHE7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c19sZW4gPSByeHE7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2c2lfc3RhdDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzIC0gQWxsb2NhdGUgc3RhdGlzdGljcyBhcnJheXNcbiAgKiBAdnNpOiBWU0kgcG9pbnRlclxuQEAgLTUzMSwzMSAmIzQzOzU3NywxMiBAQCBzdGF0aWMgaW50IGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdC8qIHJlYWxsb2Mgd2lsbCBoYXBwZW4gaW4gcmVidWlsZCBwYXRoICovXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpO1xuJiM0MztcdHZzaV9zdGF0ID0gaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXModnNpLVx1MDAzZWFsbG9jX3R4cSwgdnNpLVx1MDAzZWFsbG9jX3J4cSk7XG4gXHRpZiAoIXZzaV9zdGF0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxuLVx0XHRremFsbG9jX29ianMoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHZzaS1cdTAwM2VhbGxvY190eHEpO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKVxuLVx0XHRnb3RvIGVycl9hbGxvY190eDtcbi1cbi1cdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuLVx0XHRremFsbG9jX29ianMoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaS1cdTAwM2VhbGxvY19yeHEpO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKVxuLVx0XHRnb3RvIGVycl9hbGxvY19yeDtcbi1cbiBcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IHZzaV9zdGF0O1xuLVxuIFx0cmV0dXJuIDA7XG4tXG4tZXJyX2FsbG9jX3J4OlxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyk7XG4tZXJyX2FsbG9jX3R4OlxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyk7XG4tXHRrZnJlZSh2c2lfc3RhdCk7XG4tXHRwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0gPSBOVUxMO1xuLVx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuQEAgLTI5MjYsNiAmIzQzOzI5NTMsNTEgQEAgaWNlX3ZzaV9yZWJ1aWxkX2dldF9jb2FsZXNjZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIFx0cmV0dXJuIHZzaS1cdTAwM2VudW1fcV92ZWN0b3JzO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3VudXNlZF9zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld192c2lfc3RhdClcbiYjNDM7e1xuJiM0MztcdGludCBuZXdfdHhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcdGludCBuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcdGludCBwcmV2X3R4cSA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcdGludCBwcmV2X3J4cSA9IHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gbmV3X3R4cTsgaSBcdTAwM2MgcHJldl90eHE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xuJiM0MztcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0Zm9yIChpbnQgaSA9IG5ld19yeHE7IGkgXHUwMDNjIHByZXZfcnhxOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbiYjNDM7XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqbmV3X3ZzaV9zdGF0KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG5ld190eHEsIG5ld19yeHEsIHByZXZfdHhxLCBwcmV2X3J4cTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4mIzQzO1x0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbiYjNDM7XG4mIzQzO1x0bmV3X3R4cSA9IG5ld192c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcbiYjNDM7XHRuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcdHZzaV9zdGF0ID0gcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdO1xuJiM0MztcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IG5ld192c2lfc3RhdDtcbiYjNDM7XHRpZiAoIXZzaV9zdGF0KVxuJiM0MztcdFx0cmV0dXJuOyAvKiBkb24mIzM5O3QgY29weSBpZiB0aGVyZSBpcyBubyBzb3VyY2UgKi9cbiYjNDM7XG4mIzQzO1x0cHJldl90eHEgPSB2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcbiYjNDM7XHRwcmV2X3J4cSA9IHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuJiM0MztcbiYjNDM7XHRtZW1jcHkobmV3X3ZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsXG4mIzQzO1x0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cykgKiBtaW4ocHJldl90eHEsIG5ld190eHEpKTtcbiYjNDM7XHRtZW1jcHkobmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsXG4mIzQzO1x0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cykgKiBtaW4ocHJldl9yeHEsIG5ld19yeHEpKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlIC0gc2V0IGNvYWxlc2NlIGZyb20gZWFybGllciBzYXZlZCBhcnJheXNcbiAgKiBAdnNpOiBWU0kgY29ubmVjdGVkIHdpdGggcV92ZWN0b3JzXG5AQCAtMzAxMiw2MCAmIzQzOzMwODQsMzcgQEAgaWNlX3ZzaV9yZWJ1aWxkX3NldF9jb2FsZXNjZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxuIH1cbiBcbiAvKipcbi0gKiBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMgLSBGcmVlcyB1bnVzZWQgc3RhdCBzdHJ1Y3R1cmVzIG9yIGFsbG9jIG5ldyBvbmVzXG4tICogQHZzaTogVlNJIHBvaW50ZXJcbiYjNDM7ICogaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXMgLSByZXNpemUgcmluZyBzdGF0cyBhcnJheXMgZm9yIG5ldyBxdWV1ZSBjb3VudFxuJiM0MzsgKiBAdnNpOiBWU0kgdG8gc3dhcCB0aGUgcmluZyBzdGF0cyBhcnJheXMgb2ZcbiYjNDM7ICpcbiYjNDM7ICogQ2FsbCB3aGlsZSBAdnNpIHN0aWxsIG93bnMgaXRzIHF1ZXVlcyBhbmQgYmVmb3JlIGljZV92c2lfZGVjZmcoKSByZXR1cm5zIHRoZW1cbiYjNDM7ICogdG8gdGhlIFBGIHBvb2wsIHNvIHRoYXQgdGhlIG5ldyBzaXplIGlzIHdoYXQgaWNlX3ZzaV9zZXRfbnVtX3FzKCkgd2lsbCBjb21wdXRlXG4mIzQzOyAqIGFmdGVyd2FyZHMuIFN1cnZpdmluZyBlbnRyaWVzIGFyZSBjYXJyaWVkIG92ZXIsIHRoZSByZXN0IGlzIGZyZWVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZVxuICAqL1xuLXN0YXRpYyBpbnRcbi1pY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiYjNDM7aW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4ge1xuLVx0dTE2IHJlcV90eHEgPSB2c2ktXHUwMDNlcmVxX3R4cSA/IHZzaS1cdTAwM2VyZXFfdHhxIDogdnNpLVx1MDAzZWFsbG9jX3R4cTtcbi1cdHUxNiByZXFfcnhxID0gdnNpLVx1MDAzZXJlcV9yeHEgPyB2c2ktXHUwMDNlcmVxX3J4cSA6IHZzaS1cdTAwM2VhbGxvY19yeHE7XG4tXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzO1xuLVx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0cztcbi1cdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9hbGxvY19xdWV1ZXNfcGFyYW1zIHFzO1xuJiM0MztcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICpvbGRfc3RhdDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqbmV3X3N0YXQ7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0dTE2IHByZXZfdHhxID0gdnNpLVx1MDAzZWFsbG9jX3R4cTtcbi1cdHUxNiBwcmV2X3J4cSA9IHZzaS1cdTAwM2VhbGxvY19yeHE7XG4tXHRpbnQgaTtcbiBcbi1cdHZzaV9zdGF0ID0gcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdO1xuJiM0MztcdGlmICh2c2ktXHUwMDNldHlwZSA9PSBJQ0VfVlNJX0NITkwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChyZXFfdHhxIFx1MDAzYyBwcmV2X3R4cSkge1xuLVx0XHRmb3IgKGkgPSByZXFfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRpZiAodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xuLVx0XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4tXHRcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuJiM0MztcdHFzID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgdnNpLVx1MDAzZWFsbG9jX3R4cSAmIzQzOyB2c2ktXHUwMDNlbnVtX3hkcF90eHEsXG4mIzQzO1x0XHRcdFx0dnNpLVx1MDAzZWFsbG9jX3J4cSk7XG4gXG4tXHR0eF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cztcbi1cdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxuLVx0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzLCByZXFfdHhxLFxuLVx0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpLFxuLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpIHtcbi1cdFx0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0bmV3X3N0YXQgPSBpY2VfdnNpX25ld19zdGF0X2FycmF5cyhxcy5hbGxvY190eHEsIHFzLmFsbG9jX3J4cSk7XG4mIzQzO1x0aWYgKCFuZXdfc3RhdClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4gXG4tXHRpZiAocmVxX3J4cSBcdTAwM2MgcHJldl9yeHEpIHtcbi1cdFx0Zm9yIChpID0gcmVxX3J4cTsgaSBcdTAwM2MgcHJldl9yeHE7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJ4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzO1xuLVx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9XG4tXHRcdGtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsXG4tXHRcdFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyksXG4tXHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cykge1xuLVx0XHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0cztcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0b2xkX3N0YXQgPSBwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF07XG4mIzQzO1x0aWNlX3ZzaV9zZXRfc3RhdF9hcnJheXModnNpLCBuZXdfc3RhdCk7XG4mIzQzO1x0aWYgKG9sZF9zdGF0KSB7XG4mIzQzO1x0XHRpY2VfdnNpX2ZyZWVfdW51c2VkX3N0YXRfYXJyYXlzKG9sZF9zdGF0LCBuZXdfc3RhdCk7XG4mIzQzO1x0XHRfX2ljZV92c2lfZnJlZV9zdGF0cyhvbGRfc3RhdCwgZmFsc2UpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzA5OCw3ICYjNDM7MzE0Nyw3IEBAIGludCBpY2VfdnNpX3JlYnVpbGQoc3RydWN0IGljZV92c2kgKnZzaSwgdTMyIHZzaV9mbGFncylcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dnNpLVx1MDAzZXhkcF9zdGF0ZV9sb2NrKTtcbiBcbi1cdHJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpO1xuJiM0MztcdHJldCA9IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHZzaSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxuaW5kZXggNDk0NTRkOThkY2ZlZi4uNTIzNjA4OGMzMjBiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmhcbkBAIC02Nyw2ICYjNDM7NjcsNyBAQCB2b2lkIGljZV92c2lfZGVjZmcoc3RydWN0IGljZV92c2kgKnZzaSk7XG4gdm9pZCBpY2VfZGlzX3ZzaShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCBib29sIGxvY2tlZCk7XG4gXG4gaW50IGljZV92c2lfcmVidWlsZChzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MzIgdnNpX2ZsYWdzKTtcbiYjNDM7aW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpO1xuIGludCBpY2VfdnNpX2NmZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKTtcbiBzdHJ1Y3QgaWNlX3ZzaSAqaWNlX3ZzaV9hbGxvYyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfdnNpX2ZyZWUoc3RydWN0IGljZV92c2kgKnZzaSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbmluZGV4IDI3ZTRhY2IxNjIwZjAuLmZkNzBhOTNiOTg2OTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG5AQCAtMjY4LDYgJiM0MzsyNjgsMTAgQEAgc3RhdGljIGludCBpY2VfdmZfcmVjb25maWdfdnNpKHN0cnVjdCBpY2VfdmYgKnZmKVxuIFxuIFx0dnNpLVx1MDAzZWZsYWdzID0gSUNFX1ZTSV9GTEFHX05PX0lOSVQ7XG4gXG4mIzQzO1x0ZXJyID0gaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXModnNpKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4gXHRpY2VfdnNpX2RlY2ZnKHZzaSk7XG4gXHRpY2VfZmx0cl9yZW1vdmVfYWxsKHZzaSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTM6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBQQ0llIE5JQyBoYXJkd2FyZSAoRTgwMC9FODEwIHNlcmllcykgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk0MzZhZjI3Mzk3YzgwNzNhZjFmY2FkZTcwYjI0NjE5MTUyMzE1NjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAxMzozMDoxNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAppbmRleCBmNzJiYjFhYTQwNjc0Li40OGY0MzEyZGY0YTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCkBAIC0zMjgsNiAmIzQzOzMyOCw4IEBAIGVudW0gaWNlX3ZzaV9zdGF0ZSB7CiBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyB7CiAJc3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0czsgIC8qIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi8KIAlzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzOyAgLyogUnggcmluZyBzdGF0cyBhcnJheSAqLwomIzQzOwl1MTYgdHhfcmluZ19zdGF0c19sZW47ICAvKiBMZW5ndGggb2YgdGhlIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi8KJiM0MzsJdTE2IHJ4X3Jpbmdfc3RhdHNfbGVuOyAgLyogTGVuZ3RoIG9mIHRoZSBSeCByaW5nIHN0YXRzIGFycmF5ICovCiB9OwogCiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi8KQEAgLTQwMSw5ICYjNDM7NDAzLDExIEBAIHN0cnVjdCBpY2VfdnNpIHsKIAl1OCByeF9tYXBwaW5nX21vZGU7CQkgLyogSUNFX01BUF9NT0RFX1tDT05USUd8U0NBVFRFUl0gKi8KIAl1MTYgKnR4cV9tYXA7CQkJIC8qIGluZGV4IGluIHBmLSZndDthdmFpbF90eHFzICovCiAJdTE2ICpyeHFfbWFwOwkJCSAvKiBpbmRleCBpbiBwZi0mZ3Q7YXZhaWxfcnhxcyAqLwotCXUxNiBhbGxvY190eHE7CQkJIC8qIEFsbG9jYXRlZCBUeCBxdWV1ZXMgKi8KJiM0MzsJc3RydWN0X2dyb3VwX3RhZ2dlZChpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMsIGFsbG9jX3R4cV9yeHEsCiYjNDM7CQl1MTYgYWxsb2NfdHhxOwkJIC8qIEFsbG9jYXRlZCBUeCBxdWV1ZXMgKi8KJiM0MzsJCXUxNiBhbGxvY19yeHE7CQkgLyogQWxsb2NhdGVkIFJ4IHF1ZXVlcyAqLwomIzQzOwkpOwogCXUxNiBudW1fdHhxOwkJCSAvKiBVc2VkIFR4IHF1ZXVlcyAqLwotCXUxNiBhbGxvY19yeHE7CQkJIC8qIEFsbG9jYXRlZCBSeCBxdWV1ZXMgKi8KIAl1MTYgbnVtX3J4cTsJCQkgLyogVXNlZCBSeCBxdWV1ZXMgKi8KIAl1MTYgcmVxX3R4cTsJCQkgLyogVXNlciByZXF1ZXN0ZWQgVHggcXVldWVzICovCiAJdTE2IHJlcV9yeHE7CQkJIC8qIFVzZXIgcmVxdWVzdGVkIFJ4IHF1ZXVlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKaW5kZXggOGNkYzRmZGE4OWU5Ny4uNDk0OWYyOWU1MzhlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jCkBAIC0xNTMsMTYgJiM0MzsxNTMsNTYgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9zZXRfbnVtX2Rlc2Moc3RydWN0IGljZV92c2kgKnZzaSkKIAl9CiB9CiAKLXN0YXRpYyB1MTYgaWNlX2dldF9yeHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7c3RhdGljIHUxNiBpY2VfZ2V0X3J4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZiwgdTE2IGhlbGQpCiB7Ci0JcmV0dXJuIG1pbihpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZiksCi0JCSAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpOwomIzQzOwlyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZikgJiM0MzsgaGVsZCwKJiM0MzsJCSAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7CiB9CiAKLXN0YXRpYyB1MTYgaWNlX2dldF90eHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7c3RhdGljIHUxNiBpY2VfZ2V0X3R4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZiwgdTE2IGhlbGQpCiB7Ci0JcmV0dXJuIG1pbihpY2VfZ2V0X2F2YWlsX3R4cV9jb3VudChwZiksCi0JCSAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpOwomIzQzOwlyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3R4cV9jb3VudChwZikgJiM0MzsgaGVsZCwKJiM0MzsJCSAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEBoZWxkX3R4cSwgQGhlbGRfcnhxOiBxdWV1ZXMgdGhlIFZTSSBzdGlsbCBvd25zIGJ1dCBpcyBhYm91dCB0byByZXR1cm4gdG8gdGhlCiYjNDM7ICogUEYgcG9vbCwgc28gdGhhdCB0aGUgcmVzdWx0IG1hdGNoZXMgd2hhdCBpdCB3aWxsIGJlIG9uY2UgdGhleSBhcmUgYmFjayB0aGVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtcwomIzQzO2ljZV92c2lfZ2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MTYgaGVsZF90eHEsIHUxNiBoZWxkX3J4cSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMgcXMgPSB7fTsKJiM0MzsJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7CiYjNDM7CiYjNDM7CXN3aXRjaCAodnNpLSZndDt0eXBlKSB7CiYjNDM7CWNhc2UgSUNFX1ZTSV9QRjoKJiM0MzsJCXFzLmFsbG9jX3R4cSA9IHZzaS0mZ3Q7cmVxX3R4cSA/OiBpY2VfZ2V0X3R4cV9jb3VudChwZiwgaGVsZF90eHEpOwomIzQzOwomIzQzOwkJLyogb25seSAxIFJ4IHF1ZXVlIHVubGVzcyBSU1MgaXMgZW5hYmxlZCAqLwomIzQzOwkJaWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCXFzLmFsbG9jX3J4cSA9IDE7CiYjNDM7CQllbHNlCiYjNDM7CQkJcXMuYWxsb2NfcnhxID0gdnNpLSZndDtyZXFfcnhxID86CiYjNDM7CQkJCSAgICAgICBpY2VfZ2V0X3J4cV9jb3VudChwZiwgaGVsZF9yeHEpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSUNFX1ZTSV9TRjoKJiM0MzsJY2FzZSBJQ0VfVlNJX0NUUkw6CiYjNDM7CWNhc2UgSUNFX1ZTSV9MQjoKJiM0MzsJCXFzLmFsbG9jX3R4cSA9IDE7CiYjNDM7CQlxcy5hbGxvY19yeHEgPSAxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSUNFX1ZTSV9WRjoKJiM0MzsJCXFzLmFsbG9jX3R4cSA9IHZzaS0mZ3Q7dmYtJmd0O251bV9yZXFfcXMgPzogdnNpLSZndDt2Zi0mZ3Q7bnVtX3ZmX3FzOwomIzQzOwkJcXMuYWxsb2NfcnhxID0gcXMuYWxsb2NfdHhxOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgSUNFX1ZTSV9DSE5MOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtVbmtub3duIFZTSSB0eXBlICVkXG4mIzM0OywgdnNpLSZndDt0eXBlKTsKJiM0MzsJCXJldHVybiB2c2ktJmd0O2FsbG9jX3R4cV9yeHE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHFzOwogfQogCiAvKioKQEAgLTE4MCw0NCAmIzQzOzIyMCwyNyBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSkKIAlpZiAoV0FSTl9PTih2c2lfdHlwZSA9PSBJQ0VfVlNJX1ZGICZhbXA7JmFtcDsgIXZmKSkKIAkJcmV0dXJuOwogCiYjNDM7CXZzaS0mZ3Q7YWxsb2NfdHhxX3J4cSA9IGljZV92c2lfZ2V0X251bV9xcyh2c2ksIDAsIDApOwomIzQzOwogCXN3aXRjaCAodnNpX3R5cGUpIHsKIAljYXNlIElDRV9WU0lfUEY6Ci0JCWlmICh2c2ktJmd0O3JlcV90eHEpIHsKLQkJCXZzaS0mZ3Q7YWxsb2NfdHhxID0gdnNpLSZndDtyZXFfdHhxOwomIzQzOwkJaWYgKHZzaS0mZ3Q7cmVxX3R4cSkKIAkJCXZzaS0mZ3Q7bnVtX3R4cSA9IHZzaS0mZ3Q7cmVxX3R4cTsKLQkJfSBlbHNlIHsKLQkJCXZzaS0mZ3Q7YWxsb2NfdHhxID0gaWNlX2dldF90eHFfY291bnQocGYpOwotCQl9CiYjNDM7CQlpZiAodnNpLSZndDtyZXFfcnhxICZhbXA7JmFtcDsgdGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtJmd0O2ZsYWdzKSkKJiM0MzsJCQl2c2ktJmd0O251bV9yeHEgPSB2c2ktJmd0O3JlcV9yeHE7CiAKIAkJcGYtJmd0O251bV9sYW5fdHggPSB2c2ktJmd0O2FsbG9jX3R4cTsKLQotCQkvKiBvbmx5IDEgUnggcXVldWUgdW5sZXNzIFJTUyBpcyBlbmFibGVkICovCi0JCWlmICghdGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtJmd0O2ZsYWdzKSkgewotCQkJdnNpLSZndDthbGxvY19yeHEgPSAxOwotCQl9IGVsc2UgewotCQkJaWYgKHZzaS0mZ3Q7cmVxX3J4cSkgewotCQkJCXZzaS0mZ3Q7YWxsb2NfcnhxID0gdnNpLSZndDtyZXFfcnhxOwotCQkJCXZzaS0mZ3Q7bnVtX3J4cSA9IHZzaS0mZ3Q7cmVxX3J4cTsKLQkJCX0gZWxzZSB7Ci0JCQkJdnNpLSZndDthbGxvY19yeHEgPSBpY2VfZ2V0X3J4cV9jb3VudChwZik7Ci0JCQl9Ci0JCX0KLQogCQlwZi0mZ3Q7bnVtX2xhbl9yeCA9IHZzaS0mZ3Q7YWxsb2NfcnhxOwogCiAJCXZzaS0mZ3Q7bnVtX3FfdmVjdG9ycyA9IG1heCh2c2ktJmd0O2FsbG9jX3J4cSwgdnNpLSZndDthbGxvY190eHEpOwogCQlicmVhazsKIAljYXNlIElDRV9WU0lfU0Y6Ci0JCXZzaS0mZ3Q7YWxsb2NfdHhxID0gMTsKLQkJdnNpLSZndDthbGxvY19yeHEgPSAxOwogCQl2c2ktJmd0O251bV9xX3ZlY3RvcnMgPSAxOwogCQl2c2ktJmd0O2lycV9keW5fYWxsb2MgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIElDRV9WU0lfVkY6CiAJCWlmICh2Zi0mZ3Q7bnVtX3JlcV9xcykKIAkJCXZmLSZndDtudW1fdmZfcXMgPSB2Zi0mZ3Q7bnVtX3JlcV9xczsKLQkJdnNpLSZndDthbGxvY190eHEgPSB2Zi0mZ3Q7bnVtX3ZmX3FzOwotCQl2c2ktJmd0O2FsbG9jX3J4cSA9IHZmLSZndDtudW1fdmZfcXM7CiAJCS8qIHBmLSZndDt2ZnMubnVtX21zaXhfcGVyIGluY2x1ZGVzIChWRiBtaXNjZWxsYW5lb3VzIHZlY3RvciAmIzQzOwogCQkgKiBkYXRhIHF1ZXVlIGludGVycnVwdHMpLiBTaW5jZSB2c2ktJmd0O251bV9xX3ZlY3RvcnMgaXMgbnVtYmVyCiAJCSAqIG9mIHF1ZXVlcyB2ZWN0b3JzLCBzdWJ0cmFjdCAxIChJQ0VfTk9OUV9WRUNTX1ZGKSBmcm9tIHRoZQpAQCAtMjI2LDIyICYjNDM7MjQ5LDE1IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQl2c2ktJmd0O251bV9xX3ZlY3RvcnMgPSB2Zi0mZ3Q7bnVtX21zaXggLSBJQ0VfTk9OUV9WRUNTX1ZGOwogCQlicmVhazsKIAljYXNlIElDRV9WU0lfQ1RSTDoKLQkJdnNpLSZndDthbGxvY190eHEgPSAxOwotCQl2c2ktJmd0O2FsbG9jX3J4cSA9IDE7CiAJCXZzaS0mZ3Q7bnVtX3FfdmVjdG9ycyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgSUNFX1ZTSV9DSE5MOgotCQl2c2ktJmd0O2FsbG9jX3R4cSA9IDA7Ci0JCXZzaS0mZ3Q7YWxsb2NfcnhxID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBJQ0VfVlNJX0xCOgotCQl2c2ktJmd0O2FsbG9jX3R4cSA9IDE7Ci0JCXZzaS0mZ3Q7YWxsb2NfcnhxID0gMTsKIAkJLyogQSBkdW1teSBxX3ZlY3Rvciwgbm8gYWN0dWFsIElSUS4gKi8KIAkJdnNpLSZndDtudW1fcV92ZWN0b3JzID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VW5rbm93biBWU0kgdHlwZSAlZFxuJiMzNDssIHZzaV90eXBlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zMzAsNiAmIzQzOzM0NiwzMiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJdnNpLSZndDtyeHFfbWFwID0gTlVMTDsKIH0KIAomIzQzOy8qIGZyZWUgc2luZ2xlIHN0YXRzIG1lbW9yeSAqLwomIzQzO3N0YXRpYyB2b2lkIF9faWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdCwgYm9vbCBmcmVlX2VudHJpZXMpCiYjNDM7ewomIzQzOwlpZiAoIXZzaV9zdGF0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZnJlZV9lbnRyaWVzKSB7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0pIHsKJiM0MzsJCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCByY3UpOwomIzQzOwkJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzX2xlbjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNbaV0pIHsKJiM0MzsJCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCByY3UpOwomIzQzOwkJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpOwomIzQzOwlrZnJlZSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyk7CiYjNDM7CWtmcmVlKHZzaV9zdGF0KTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV92c2lfZnJlZV9zdGF0cyAtIEZyZWUgdGhlIHJpbmcgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzCiAgKiBAdnNpOiBWU0kgcG9pbnRlcgpAQCAtMzM4LDcgJiM0MzszODAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSkKIHsKIAlzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7CiAJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7Ci0JaW50IGk7CiAKIAlpZiAodnNpLSZndDt0eXBlID09IElDRV9WU0lfQ0hOTCkKIAkJcmV0dXJuOwpAQCAtMzQ2LDI2ICYjNDM7Mzg3LDcgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJCXJldHVybjsKIAogCXZzaV9zdGF0ID0gcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF07Ci0JaWYgKCF2c2lfc3RhdCkKLQkJcmV0dXJuOwotCi0JaWNlX2Zvcl9lYWNoX2FsbG9jX3R4cSh2c2ksIGkpIHsKLQkJaWYgKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldKSB7Ci0JCQlrZnJlZV9yY3UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7Ci0JCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKLQkJfQotCX0KLQotCWljZV9mb3JfZWFjaF9hbGxvY19yeHEodnNpLCBpKSB7Ci0JCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewotCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCByY3UpOwotCQkJV1JJVEVfT05DRSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7Ci0JCX0KLQl9Ci0KLQlrZnJlZSh2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyk7Ci0Ja2ZyZWUodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpOwotCWtmcmVlKHZzaV9zdGF0KTsKJiM0MzsJX19pY2VfdnNpX2ZyZWVfc3RhdHModnNpX3N0YXQsIHRydWUpOwogCXBmLSZndDt2c2lfc3RhdHNbdnNpLSZndDtpZHhdID0gTlVMTDsKIH0KIApAQCAtNTEzLDYgJiM0Mzs1MzUsMzAgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9tc2l4X2NsZWFuX3JpbmdzKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXMoaW50IHR4cSwgaW50IHJ4cSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7CiYjNDM7CXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDsKJiM0MzsKJiM0MzsJdnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpOwomIzQzOwl0eF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCp0eF9yaW5nX3N0YXRzLCB0eHEpOwomIzQzOwlyeF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCpyeF9yaW5nX3N0YXRzLCByeHEpOwomIzQzOwlpZiAoIXZzaV9zdGF0IHx8ICF0eF9yaW5nX3N0YXRzIHx8ICFyeF9yaW5nX3N0YXRzKSB7CiYjNDM7CQlrZnJlZSh2c2lfc3RhdCk7CiYjNDM7CQlrZnJlZSh0eF9yaW5nX3N0YXRzKTsKJiM0MzsJCWtmcmVlKHJ4X3Jpbmdfc3RhdHMpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzOwomIzQzOwl2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7CiYjNDM7CXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbiA9IHR4cTsKJiM0MzsJdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNfbGVuID0gcnhxOwomIzQzOwomIzQzOwlyZXR1cm4gdnNpX3N0YXQ7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzIC0gQWxsb2NhdGUgc3RhdGlzdGljcyBhcnJheXMKICAqIEB2c2k6IFZTSSBwb2ludGVyCkBAIC01MzEsMzEgJiM0Mzs1NzcsMTIgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJLyogcmVhbGxvYyB3aWxsIGhhcHBlbiBpbiByZWJ1aWxkIHBhdGggKi8KIAkJcmV0dXJuIDA7CiAKLQl2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7CiYjNDM7CXZzaV9zdGF0ID0gaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXModnNpLSZndDthbGxvY190eHEsIHZzaS0mZ3Q7YWxsb2NfcnhxKTsKIAlpZiAoIXZzaV9zdGF0KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzID0KLQkJa3phbGxvY19vYmpzKCp2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cywgdnNpLSZndDthbGxvY190eHEpOwotCWlmICghdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpCi0JCWdvdG8gZXJyX2FsbG9jX3R4OwotCi0JdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMgPQotCQlremFsbG9jX29ianMoKnZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzLCB2c2ktJmd0O2FsbG9jX3J4cSk7Ci0JaWYgKCF2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cykKLQkJZ290byBlcnJfYWxsb2Nfcng7Ci0KIAlwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XSA9IHZzaV9zdGF0OwotCiAJcmV0dXJuIDA7Ci0KLWVycl9hbGxvY19yeDoKLQlrZnJlZSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyk7Ci1lcnJfYWxsb2NfdHg6Ci0Ja2ZyZWUodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpOwotCWtmcmVlKHZzaV9zdGF0KTsKLQlwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XSA9IE5VTEw7Ci0JcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qKgpAQCAtMjkyNiw2ICYjNDM7Mjk1Myw1MSBAQCBpY2VfdnNpX3JlYnVpbGRfZ2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksCiAJcmV0dXJuIHZzaS0mZ3Q7bnVtX3FfdmVjdG9yczsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGljZV92c2lfZnJlZV91bnVzZWRfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0LAomIzQzOwkJCQkJICAgIHN0cnVjdCBpY2VfdnNpX3N0YXRzICpuZXdfdnNpX3N0YXQpCiYjNDM7ewomIzQzOwlpbnQgbmV3X3R4cSA9IG5ld192c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0c19sZW47CiYjNDM7CWludCBuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJaW50IHByZXZfdHhxID0gdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNfbGVuOwomIzQzOwlpbnQgcHJldl9yeHEgPSB2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c19sZW47CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSBuZXdfdHhxOyBpICZsdDsgcHJldl90eHE7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0pIHsKJiM0MzsJCQlrZnJlZV9yY3UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7CiYjNDM7CQkJV1JJVEVfT05DRSh2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZm9yIChpbnQgaSA9IG5ld19yeHE7IGkgJmx0OyBwcmV2X3J4cTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewomIzQzOwkJCWtmcmVlX3JjdSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSwgcmN1KTsKJiM0MzsJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpLAomIzQzOwkJCQkgICAgc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld192c2lfc3RhdCkKJiM0Mzt7CiYjNDM7CXUxNiBuZXdfdHhxLCBuZXdfcnhxLCBwcmV2X3R4cSwgcHJldl9yeHE7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDsKJiM0MzsJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7CiYjNDM7CiYjNDM7CW5ld190eHEgPSBuZXdfdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNfbGVuOwomIzQzOwluZXdfcnhxID0gbmV3X3ZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJdnNpX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKJiM0MzsJcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0gPSBuZXdfdnNpX3N0YXQ7CiYjNDM7CWlmICghdnNpX3N0YXQpCiYjNDM7CQlyZXR1cm47IC8qIGRvbiYjMzk7dCBjb3B5IGlmIHRoZXJlIGlzIG5vIHNvdXJjZSAqLwomIzQzOwomIzQzOwlwcmV2X3R4cSA9IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJcHJldl9yeHEgPSB2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c19sZW47CiYjNDM7CiYjNDM7CW1lbWNweShuZXdfdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzLAomIzQzOwkgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cykgKiBtaW4ocHJldl90eHEsIG5ld190eHEpKTsKJiM0MzsJbWVtY3B5KG5ld192c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cywgdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMsCiYjNDM7CSAgICAgICBzaXplb2YoKnZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzKSAqIG1pbihwcmV2X3J4cSwgbmV3X3J4cSkpOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX3ZzaV9yZWJ1aWxkX3NldF9jb2FsZXNjZSAtIHNldCBjb2FsZXNjZSBmcm9tIGVhcmxpZXIgc2F2ZWQgYXJyYXlzCiAgKiBAdnNpOiBWU0kgY29ubmVjdGVkIHdpdGggcV92ZWN0b3JzCkBAIC0zMDEyLDYwICYjNDM7MzA4NCwzNyBAQCBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksCiB9CiAKIC8qKgotICogaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzIC0gRnJlZXMgdW51c2VkIHN0YXQgc3RydWN0dXJlcyBvciBhbGxvYyBuZXcgb25lcwotICogQHZzaTogVlNJIHBvaW50ZXIKJiM0MzsgKiBpY2VfdnNpX3Jlc2l6ZV9zdGF0X2FycmF5cyAtIHJlc2l6ZSByaW5nIHN0YXRzIGFycmF5cyBmb3IgbmV3IHF1ZXVlIGNvdW50CiYjNDM7ICogQHZzaTogVlNJIHRvIHN3YXAgdGhlIHJpbmcgc3RhdHMgYXJyYXlzIG9mCiYjNDM7ICoKJiM0MzsgKiBDYWxsIHdoaWxlIEB2c2kgc3RpbGwgb3ducyBpdHMgcXVldWVzIGFuZCBiZWZvcmUgaWNlX3ZzaV9kZWNmZygpIHJldHVybnMgdGhlbQomIzQzOyAqIHRvIHRoZSBQRiBwb29sLCBzbyB0aGF0IHRoZSBuZXcgc2l6ZSBpcyB3aGF0IGljZV92c2lfc2V0X251bV9xcygpIHdpbGwgY29tcHV0ZQomIzQzOyAqIGFmdGVyd2FyZHMuIFN1cnZpdmluZyBlbnRyaWVzIGFyZSBjYXJyaWVkIG92ZXIsIHRoZSByZXN0IGlzIGZyZWVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKICAqLwotc3RhdGljIGludAotaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiYjNDM7aW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCiB7Ci0JdTE2IHJlcV90eHEgPSB2c2ktJmd0O3JlcV90eHEgPyB2c2ktJmd0O3JlcV90eHEgOiB2c2ktJmd0O2FsbG9jX3R4cTsKLQl1MTYgcmVxX3J4cSA9IHZzaS0mZ3Q7cmVxX3J4cSA/IHZzaS0mZ3Q7cmVxX3J4cSA6IHZzaS0mZ3Q7YWxsb2NfcnhxOwotCXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7Ci0Jc3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsKLQlzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMgcXM7CiYjNDM7CXN0cnVjdCBpY2VfdnNpX3N0YXRzICpvbGRfc3RhdDsKJiM0MzsJc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld19zdGF0OwogCXN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLSZndDtiYWNrOwotCXUxNiBwcmV2X3R4cSA9IHZzaS0mZ3Q7YWxsb2NfdHhxOwotCXUxNiBwcmV2X3J4cSA9IHZzaS0mZ3Q7YWxsb2NfcnhxOwotCWludCBpOwogCi0JdnNpX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKJiM0MzsJaWYgKHZzaS0mZ3Q7dHlwZSA9PSBJQ0VfVlNJX0NITkwpCiYjNDM7CQlyZXR1cm4gMDsKIAotCWlmIChyZXFfdHhxICZsdDsgcHJldl90eHEpIHsKLQkJZm9yIChpID0gcmVxX3R4cTsgaSAmbHQ7IHByZXZfdHhxOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldKSB7Ci0JCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCByY3UpOwotCQkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwotCQkJfQotCQl9Ci0JfQomIzQzOwlxcyA9IGljZV92c2lfZ2V0X251bV9xcyh2c2ksIHZzaS0mZ3Q7YWxsb2NfdHhxICYjNDM7IHZzaS0mZ3Q7bnVtX3hkcF90eHEsCiYjNDM7CQkJCXZzaS0mZ3Q7YWxsb2NfcnhxKTsKIAotCXR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0czsKLQl2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyA9Ci0JCWtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzLCByZXFfdHhxLAotCQkJICAgICAgIHNpemVvZigqdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpLAotCQkJICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQlpZiAoIXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzKSB7Ci0JCXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0czsKJiM0MzsJbmV3X3N0YXQgPSBpY2VfdnNpX25ld19zdGF0X2FycmF5cyhxcy5hbGxvY190eHEsIHFzLmFsbG9jX3J4cSk7CiYjNDM7CWlmICghbmV3X3N0YXQpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCWlmIChyZXFfcnhxICZsdDsgcHJldl9yeHEpIHsKLQkJZm9yIChpID0gcmVxX3J4cTsgaSAmbHQ7IHByZXZfcnhxOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldKSB7Ci0JCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCByY3UpOwotCQkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwotCQkJfQotCQl9Ci0JfQotCi0JcnhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzOwotCXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzID0KLQkJa3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsCi0JCQkgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCWlmICghdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpIHsKLQkJdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMgPSByeF9yaW5nX3N0YXRzOwotCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJb2xkX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKJiM0MzsJaWNlX3ZzaV9zZXRfc3RhdF9hcnJheXModnNpLCBuZXdfc3RhdCk7CiYjNDM7CWlmIChvbGRfc3RhdCkgewomIzQzOwkJaWNlX3ZzaV9mcmVlX3VudXNlZF9zdGF0X2FycmF5cyhvbGRfc3RhdCwgbmV3X3N0YXQpOwomIzQzOwkJX19pY2VfdnNpX2ZyZWVfc3RhdHMob2xkX3N0YXQsIGZhbHNlKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMwOTgsNyAmIzQzOzMxNDcsNyBAQCBpbnQgaWNlX3ZzaV9yZWJ1aWxkKHN0cnVjdCBpY2VfdnNpICp2c2ksIHUzMiB2c2lfZmxhZ3MpCiAKIAltdXRleF9sb2NrKCZhbXA7dnNpLSZndDt4ZHBfc3RhdGVfbG9jayk7CiAKLQlyZXQgPSBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXModnNpKTsKJiM0MzsJcmV0ID0gaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXModnNpKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmgKaW5kZXggNDk0NTRkOThkY2ZlZi4uNTIzNjA4OGMzMjBiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5oCkBAIC02Nyw2ICYjNDM7NjcsNyBAQCB2b2lkIGljZV92c2lfZGVjZmcoc3RydWN0IGljZV92c2kgKnZzaSk7CiB2b2lkIGljZV9kaXNfdnNpKHN0cnVjdCBpY2VfdnNpICp2c2ksIGJvb2wgbG9ja2VkKTsKIAogaW50IGljZV92c2lfcmVidWlsZChzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MzIgdnNpX2ZsYWdzKTsKJiM0MztpbnQgaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSk7CiBpbnQgaWNlX3ZzaV9jZmcoc3RydWN0IGljZV92c2kgKnZzaSk7CiBzdHJ1Y3QgaWNlX3ZzaSAqaWNlX3ZzaV9hbGxvYyhzdHJ1Y3QgaWNlX3BmICpwZik7CiB2b2lkIGljZV92c2lfZnJlZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jCmluZGV4IDI3ZTRhY2IxNjIwZjAuLmZkNzBhOTNiOTg2OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYwpAQCAtMjY4LDYgJiM0MzsyNjgsMTAgQEAgc3RhdGljIGludCBpY2VfdmZfcmVjb25maWdfdnNpKHN0cnVjdCBpY2VfdmYgKnZmKQogCiAJdnNpLSZndDtmbGFncyA9IElDRV9WU0lfRkxBR19OT19JTklUOwogCiYjNDM7CWVyciA9IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHZzaSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWljZV92c2lfZGVjZmcodnNpKTsKIAlpY2VfZmx0cl9yZW1vdmVfYWxsKHZzaSk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGUgY29kZSBtb2RpZmljYXRpb25zIGFuZCBpbnN0cnVjdGlvbnMgY2FyZWZ1bGx5LiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIgRTgwMCBzZXJpZXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBpY2VgIGRyaXZlciwgYmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9uczogYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaGAsIGBpY2VfbGliLmNgLCBgaWNlX2xpYi5oYCwgYW5kIGBpY2VfdmZfbGliLmNgLgoKTm93LCBhY2NvcmRpbmcgdG8gU2VjdGlvbiAyIG9mIHRoZSB0cmlhZ2UgcGhpbG9zb3BoeSwgd2UgbmVlZCB0byBjb25zaWRlciBpZiB0aGlzIGRyaXZlciBpbnZvbHZlcyAmIzM0O3N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7LiBUaGlzIG1lYW5zIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzLCBpcyB0aGUgSW50ZWwgYGljZWAgZHJpdmVyIHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgZW52aXJvbm1lbnRzLCBvciBkb2VzIGl0ICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZSB0byBmdW5jdGlvbj8KCkkga25vdyB0aGUgYGljZWAgZHJpdmVyIGlzIHRoZSBkcml2ZXIgZm9yIEludGVsIEV0aGVybmV0IDgwMCBTZXJpZXMgTklDcy4gSXQgd29ya3Mgd2l0aCBJbnRlbCBOSUMgaGFyZHdhcmUgKFBDSSBkZXZpY2UpIGFuZCBmaXJtd2FyZSB0aHJvdWdoIGFkbWluIHF1ZXVlcyBhbmQgcmVnaXN0ZXJzLiBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgYGljZWAgaGFyZHdhcmUgZGlyZWN0bHkuIFFFTVUgaGFuZGxlcyBvdGhlciBkcml2ZXJzIGxpa2UgZTEwMDAsIGUxMDAwZSwgaWdiLCBhbmQgdmlydGlvLW5ldCwgYnV0IG5vdCB0aGUgRTgwMCBzZXJpZXMuIFNpbWlsYXJseSwgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBzb2Z0d2FyZSBlbXVsYXRpb24gbWV0aG9kcyBsaWtlIG5ldGtpdCwgZHVtbXksIHZldGgsIHRhcC90dW4sIHZpcnRpbywgb3IgVVNCIGdhZGdldCwgZm9yIHRoZSBgaWNlYCBkcml2ZXIuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgY29uZmlndXJhdGlvbiBmb3IgYElDRWAgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjY4PWNvbmZpZyBJNDBFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MjkxOmNvbmZpZyBJQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMyMS1cdGJvb2wgXCYjMzQ7SW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzMxOmNvbmZpZyBJQ0VfU1dJVENIREVWXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMi1cdGJvb2wgXCYjMzQ7U3dpdGNoZGV2IFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MzQ1OmNvbmZpZyBJQ0VfSFdUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1N1cHBvcnQgSFcgY3Jvc3MtdGltZXN0YW1wIG9uIHBsYXRmb3JtcyB3aXRoIFBUTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTM6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIElDRSBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBJbnRlbCBFdGhlcm5ldCBgSUNFYCBkcml2ZXIuIEJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBkcml2ZXImIzM5O3MgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXJvdW5kIGxpbmUgMjkxIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnYC4gVGhpcyBmaWxlIHVzdWFsbHkgb3V0bGluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBzbyBpdCYjMzk7cyB0aGUgaWRlYWwgcGxhY2UgdG8gZGVjaXBoZXIgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIHRoZSBgSUNFYCBkcml2ZXIgcmVsaWVzIHVwb24uIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBuZWVkcyB0byBzdWNjZXNzZnVsbHkgaW5jbHVkZSB0aGF0IGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFxuIDI5MTpcdGNvbmZpZyBJQ0VcbiAyOTI6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFwmIzM0O1xuIDI5MzpcdFx0ZGVmYXVsdCBuXG4gMjk0Olx0XHRkZXBlbmRzIG9uIFBDSV9NU0lcbiAyOTU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAyOTY6XHRcdGRlcGVuZHMgb24gR05TUyB8fCBHTlNTID0gblxuIDI5NzpcdFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbiAyOTg6XHRcdHNlbGVjdCBESU1MSUJcbiAyOTk6XHRcdHNlbGVjdCBMSUJFVEhfWERQXG4gMzAwOlx0XHRzZWxlY3QgTElCSUVcbiAzMDE6XHRcdHNlbGVjdCBMSUJJRV9BRE1JTlFcbiAzMDI6XHRcdHNlbGVjdCBMSUJJRV9GV0xPRyBpZiBERUJVR19GU1xuIDMwMzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gMzA0Olx0XHRzZWxlY3QgUEFDS0lOR1xuIDMwNTpcdFx0c2VsZWN0IFBMRE1GV1xuIDMwNjpcdFx0c2VsZWN0IERQTExcbiAzMDc6XHRcdGhlbHBcbiAzMDg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBvZlxuIDMwOTpcdFx0ICBkZXZpY2VzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ29cbiAzMTA6XHRcdCAgdG8gdGhlIEFkYXB0ZXIgXHUwMDI2IERyaXZlciBJRCBHdWlkZSB0aGF0IGNhbiBiZSBsb2NhdGVkIGF0OlxuIDMxMTpcdFxuIDMxMjpcdFx0ICBcdTAwM2NodHRwOi8vc3VwcG9ydC5pbnRlbC5jb21cdTAwM2VcbiAzMTM6XHRcbiAzMTQ6XHRcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG4gMzE1Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcdTAwM2UuXG4gMzE2Olx0XG4gMzE3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAzMTg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgaWNlLlxuIDMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA0CgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDQxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmc9ZmFsc2UgZm9yIEludGVsIEU4MDAgU2VyaWVzIERyaXZlcioqCgpPa2F5LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBndWlkZWxpbmVzIGNvcnJlY3RseS4gVGhlIGNvcmUgb2YgaXQgYWxsIGlzIGFib3V0IHdoZW4gKm5vdCogdG8gZnV6ei4gUnVsZSAyIHNlZW1zIHJlbGV2YW50IGhlcmUsIHNwZWNpZmljYWxseSB0aGUgcGFydCBhYm91dCAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhpczsgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLgoKVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcywgb3IgYGljZWAuIEkga25vdyB0aGlzIGRyaXZlciBpbnRpbWF0ZWx5IOKAkyBpdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgTklDIGRyaXZlciwgYW5kIGl0ICphYnNvbHV0ZWx5KiByZWxpZXMgb24gcGh5c2ljYWwgSW50ZWwgRTgxMC9FODAwIFBDSWUgaGFyZHdhcmUsIHRoZSBBU0lDcy4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgYW5kIEdDRSwgc2ltcGx5ICpkb24mIzM5O3QqIGVtdWxhdGUgdGhpcyBoYXJkd2FyZS4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQsIGFuZCBpdCYjMzk7cyB0aGUgZGVmaW5pbmcgZmFjdG9yLgoKU28sIHRoaXMgZmFsbHMgZGlyZWN0bHkgdW5kZXIgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgVGhlcmUmIzM5O3Mgbm8gd2F5IHN5emthbGxlciwgb3IgYW55IHN0YW5kYXJkIGZ1enplciwgY2FuIGVmZmVjdGl2ZWx5IHJlYWNoIGFuZCB0ZXN0IHRoaXMgY29kZS4KCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBtb2RpZmllZCBmaWxlcy4gTGV0IG1lIHNlZS4uLiB5ZXMsIHRoZSBkaWZmIGluY2x1ZGVzIGBpY2UuaGAsIGBpY2VfbGliLmNgLCBgaWNlX2xpYi5oYCwgYW5kIGBpY2VfdmZfbGliLmNgLiBBbGwgb2YgdGhlc2UgZmlsZXMgYXJlIGxvY2F0ZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LCB3aGljaCBpcyAqZXhjbHVzaXZlbHkqIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBkcml2ZXIgY29kZS4gQ29uZmlybWF0aW9uIQoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyAqbXVzdCogYmUgc2V0IHRvIGBmYWxzZWAuIFNpbmNlIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBuZWVkZWQuIENvbnNlcXVlbnRseSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBhbHNvIGJlIGVtcHR5IChvciBhIG51bGwvZW1wdHkgYXJyYXkpIOKAkyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gdGVzdCB1bnJlYWNoYWJsZSBjb2RlLiBUaGUgcmVhc29uaW5nIHNob3VsZCBiZSBjb25jaXNlLCBidXQgY2xlYXI6IHRoaXMgY2hhbmdlIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIEludGVsIEU4MDAgRXRoZXJuZXQgZHJpdmVyIChgaWNlYCksIHdoaWNoIGRlcGVuZHMgb24gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgKFFFTVUvc3l6a2FsbGVyKS4gVGhpcyBtZWFucyB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4gSSBoYXZlIHdoYXQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDEzOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBQQ0llIE5JQyBoYXJkd2FyZSAoRTgwMC9FODEwIHNlcmllcykgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgZW50aXJlbHkgY29uZmluZWQgdG8gdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBJbnRlbCBQQ0llIE5JQyBoYXJkd2FyZSAoRTgwMC9FODEwIHNlcmllcykgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoc3VjaCBhcyBRRU1VIG9yIEdDRSkgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxMzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMTM6MzA6MTcuNDQ4MjA2OTM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MzkxNDczMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSBlbnRpcmVseSBjb25maW5lZCB0byB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZSkuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIEludGVsIFBDSWUgTklDIGhhcmR3YXJlIChFODAwL0U4MTAgc2VyaWVzKSB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChzdWNoIGFzIFFFTVUgb3IgR0NFKSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzozMDoxNy40NDgyMTE0MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA2OTE4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NDM2YWYyNzM5N2M4MDczYWYxZmNhZGU3MGIyNDYxOTE1MjMxNTY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDEzOjMwOjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxcbmluZGV4IGY3MmJiMWFhNDA2NzQuLjQ4ZjQzMTJkZjRhNDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuQEAgLTMyOCw2ICszMjgsOCBAQCBlbnVtIGljZV92c2lfc3RhdGUge1xcbiBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyB7XFxuIFxcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7ICAvKiBUeCByaW5nIHN0YXRzIGFycmF5ICovXFxuIFxcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7ICAvKiBSeCByaW5nIHN0YXRzIGFycmF5ICovXFxuK1xcdHUxNiB0eF9yaW5nX3N0YXRzX2xlbjsgIC8qIExlbmd0aCBvZiB0aGUgVHggcmluZyBzdGF0cyBhcnJheSAqL1xcbitcXHR1MTYgcnhfcmluZ19zdGF0c19sZW47ICAvKiBMZW5ndGggb2YgdGhlIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cXG4gfTtcXG4gXFxuIC8qIHN0cnVjdCB0aGF0IGRlZmluZXMgYSBWU0ksIGFzc29jaWF0ZWQgd2l0aCBhIGRldiAqL1xcbkBAIC00MDEsOSArNDAzLDExIEBAIHN0cnVjdCBpY2VfdnNpIHtcXG4gXFx0dTggcnhfbWFwcGluZ19tb2RlO1xcdFxcdCAvKiBJQ0VfTUFQX01PREVfW0NPTlRJR3xTQ0FUVEVSXSAqL1xcbiBcXHR1MTYgKnR4cV9tYXA7XFx0XFx0XFx0IC8qIGluZGV4IGluIHBmLVxcdTAwM2VhdmFpbF90eHFzICovXFxuIFxcdHUxNiAqcnhxX21hcDtcXHRcXHRcXHQgLyogaW5kZXggaW4gcGYtXFx1MDAzZWF2YWlsX3J4cXMgKi9cXG4tXFx0dTE2IGFsbG9jX3R4cTtcXHRcXHRcXHQgLyogQWxsb2NhdGVkIFR4IHF1ZXVlcyAqL1xcbitcXHRzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtcywgYWxsb2NfdHhxX3J4cSxcXG4rXFx0XFx0dTE2IGFsbG9jX3R4cTtcXHRcXHQgLyogQWxsb2NhdGVkIFR4IHF1ZXVlcyAqL1xcbitcXHRcXHR1MTYgYWxsb2NfcnhxO1xcdFxcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXFxuK1xcdCk7XFxuIFxcdHUxNiBudW1fdHhxO1xcdFxcdFxcdCAvKiBVc2VkIFR4IHF1ZXVlcyAqL1xcbi1cXHR1MTYgYWxsb2NfcnhxO1xcdFxcdFxcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXFxuIFxcdHUxNiBudW1fcnhxO1xcdFxcdFxcdCAvKiBVc2VkIFJ4IHF1ZXVlcyAqL1xcbiBcXHR1MTYgcmVxX3R4cTtcXHRcXHRcXHQgLyogVXNlciByZXF1ZXN0ZWQgVHggcXVldWVzICovXFxuIFxcdHUxNiByZXFfcnhxO1xcdFxcdFxcdCAvKiBVc2VyIHJlcXVlc3RlZCBSeCBxdWV1ZXMgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5pbmRleCA4Y2RjNGZkYTg5ZTk3Li40OTQ5ZjI5ZTUzOGUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXFxuQEAgLTE1MywxNiArMTUzLDU2IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9kZXNjKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHUxNiBpY2VfZ2V0X3J4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZilcXG4rc3RhdGljIHUxNiBpY2VfZ2V0X3J4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZiwgdTE2IGhlbGQpXFxuIHtcXG4tXFx0cmV0dXJuIG1pbihpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZiksXFxuLVxcdFxcdCAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpO1xcbitcXHRyZXR1cm4gbWluX3QodTE2LCBpY2VfZ2V0X2F2YWlsX3J4cV9jb3VudChwZikgKyBoZWxkLFxcbitcXHRcXHQgICAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdTE2IGljZV9nZXRfdHhxX2NvdW50KHN0cnVjdCBpY2VfcGYgKnBmKVxcbitzdGF0aWMgdTE2IGljZV9nZXRfdHhxX2NvdW50KHN0cnVjdCBpY2VfcGYgKnBmLCB1MTYgaGVsZClcXG4ge1xcbi1cXHRyZXR1cm4gbWluKGljZV9nZXRfYXZhaWxfdHhxX2NvdW50KHBmKSxcXG4tXFx0XFx0ICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XFxuK1xcdHJldHVybiBtaW5fdCh1MTYsIGljZV9nZXRfYXZhaWxfdHhxX2NvdW50KHBmKSArIGhlbGQsXFxuK1xcdFxcdCAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XFxuK31cXG4rXFxuKy8qIEBoZWxkX3R4cSwgQGhlbGRfcnhxOiBxdWV1ZXMgdGhlIFZTSSBzdGlsbCBvd25zIGJ1dCBpcyBhYm91dCB0byByZXR1cm4gdG8gdGhlXFxuKyAqIFBGIHBvb2wsIHNvIHRoYXQgdGhlIHJlc3VsdCBtYXRjaGVzIHdoYXQgaXQgd2lsbCBiZSBvbmNlIHRoZXkgYXJlIGJhY2sgdGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtc1xcbitpY2VfdnNpX2dldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSwgdTE2IGhlbGRfdHhxLCB1MTYgaGVsZF9yeHEpXFxuK3tcXG4rXFx0c3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtcyBxcyA9IHt9O1xcbitcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4rXFxuK1xcdHN3aXRjaCAodnNpLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgSUNFX1ZTSV9QRjpcXG4rXFx0XFx0cXMuYWxsb2NfdHhxID0gdnNpLVxcdTAwM2VyZXFfdHhxID86IGljZV9nZXRfdHhxX2NvdW50KHBmLCBoZWxkX3R4cSk7XFxuK1xcbitcXHRcXHQvKiBvbmx5IDEgUnggcXVldWUgdW5sZXNzIFJTUyBpcyBlbmFibGVkICovXFxuK1xcdFxcdGlmICghdGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0cXMuYWxsb2NfcnhxID0gMTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRxcy5hbGxvY19yeHEgPSB2c2ktXFx1MDAzZXJlcV9yeHEgPzpcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGljZV9nZXRfcnhxX2NvdW50KHBmLCBoZWxkX3J4cSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIElDRV9WU0lfU0Y6XFxuK1xcdGNhc2UgSUNFX1ZTSV9DVFJMOlxcbitcXHRjYXNlIElDRV9WU0lfTEI6XFxuK1xcdFxcdHFzLmFsbG9jX3R4cSA9IDE7XFxuK1xcdFxcdHFzLmFsbG9jX3J4cSA9IDE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIElDRV9WU0lfVkY6XFxuK1xcdFxcdHFzLmFsbG9jX3R4cSA9IHZzaS1cXHUwMDNldmYtXFx1MDAzZW51bV9yZXFfcXMgPzogdnNpLVxcdTAwM2V2Zi1cXHUwMDNlbnVtX3ZmX3FzO1xcbitcXHRcXHRxcy5hbGxvY19yeHEgPSBxcy5hbGxvY190eHE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIElDRV9WU0lfQ0hOTDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcXFwiVW5rbm93biBWU0kgdHlwZSAlZFxcXFxuXFxcIiwgdnNpLVxcdTAwM2V0eXBlKTtcXG4rXFx0XFx0cmV0dXJuIHZzaS1cXHUwMDNlYWxsb2NfdHhxX3J4cTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHFzO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTgwLDQ0ICsyMjAsMjcgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9zZXRfbnVtX3FzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdGlmIChXQVJOX09OKHZzaV90eXBlID09IElDRV9WU0lfVkYgXFx1MDAyNlxcdTAwMjYgIXZmKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0dnNpLVxcdTAwM2VhbGxvY190eHFfcnhxID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgMCwgMCk7XFxuK1xcbiBcXHRzd2l0Y2ggKHZzaV90eXBlKSB7XFxuIFxcdGNhc2UgSUNFX1ZTSV9QRjpcXG4tXFx0XFx0aWYgKHZzaS1cXHUwMDNlcmVxX3R4cSkge1xcbi1cXHRcXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IHZzaS1cXHUwMDNlcmVxX3R4cTtcXG4rXFx0XFx0aWYgKHZzaS1cXHUwMDNlcmVxX3R4cSlcXG4gXFx0XFx0XFx0dnNpLVxcdTAwM2VudW1fdHhxID0gdnNpLVxcdTAwM2VyZXFfdHhxO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IGljZV9nZXRfdHhxX2NvdW50KHBmKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAodnNpLVxcdTAwM2VyZXFfcnhxIFxcdTAwMjZcXHUwMDI2IHRlc3RfYml0KElDRV9GTEFHX1JTU19FTkEsIHBmLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdFxcdHZzaS1cXHUwMDNlbnVtX3J4cSA9IHZzaS1cXHUwMDNlcmVxX3J4cTtcXG4gXFxuIFxcdFxcdHBmLVxcdTAwM2VudW1fbGFuX3R4ID0gdnNpLVxcdTAwM2VhbGxvY190eHE7XFxuLVxcbi1cXHRcXHQvKiBvbmx5IDEgUnggcXVldWUgdW5sZXNzIFJTUyBpcyBlbmFibGVkICovXFxuLVxcdFxcdGlmICghdGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3J4cSA9IDE7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGlmICh2c2ktXFx1MDAzZXJlcV9yeHEpIHtcXG4tXFx0XFx0XFx0XFx0dnNpLVxcdTAwM2VhbGxvY19yeHEgPSB2c2ktXFx1MDAzZXJlcV9yeHE7XFxuLVxcdFxcdFxcdFxcdHZzaS1cXHUwMDNlbnVtX3J4cSA9IHZzaS1cXHUwMDNlcmVxX3J4cTtcXG4tXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0dnNpLVxcdTAwM2VhbGxvY19yeHEgPSBpY2VfZ2V0X3J4cV9jb3VudChwZik7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXG4gXFx0XFx0cGYtXFx1MDAzZW51bV9sYW5fcnggPSB2c2ktXFx1MDAzZWFsbG9jX3J4cTtcXG4gXFxuIFxcdFxcdHZzaS1cXHUwMDNlbnVtX3FfdmVjdG9ycyA9IG1heCh2c2ktXFx1MDAzZWFsbG9jX3J4cSwgdnNpLVxcdTAwM2VhbGxvY190eHEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfVlNJX1NGOlxcbi1cXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IDE7XFxuLVxcdFxcdHZzaS1cXHUwMDNlYWxsb2NfcnhxID0gMTtcXG4gXFx0XFx0dnNpLVxcdTAwM2VudW1fcV92ZWN0b3JzID0gMTtcXG4gXFx0XFx0dnNpLVxcdTAwM2VpcnFfZHluX2FsbG9jID0gdHJ1ZTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX1ZTSV9WRjpcXG4gXFx0XFx0aWYgKHZmLVxcdTAwM2VudW1fcmVxX3FzKVxcbiBcXHRcXHRcXHR2Zi1cXHUwMDNlbnVtX3ZmX3FzID0gdmYtXFx1MDAzZW51bV9yZXFfcXM7XFxuLVxcdFxcdHZzaS1cXHUwMDNlYWxsb2NfdHhxID0gdmYtXFx1MDAzZW51bV92Zl9xcztcXG4tXFx0XFx0dnNpLVxcdTAwM2VhbGxvY19yeHEgPSB2Zi1cXHUwMDNlbnVtX3ZmX3FzO1xcbiBcXHRcXHQvKiBwZi1cXHUwMDNldmZzLm51bV9tc2l4X3BlciBpbmNsdWRlcyAoVkYgbWlzY2VsbGFuZW91cyB2ZWN0b3IgK1xcbiBcXHRcXHQgKiBkYXRhIHF1ZXVlIGludGVycnVwdHMpLiBTaW5jZSB2c2ktXFx1MDAzZW51bV9xX3ZlY3RvcnMgaXMgbnVtYmVyXFxuIFxcdFxcdCAqIG9mIHF1ZXVlcyB2ZWN0b3JzLCBzdWJ0cmFjdCAxIChJQ0VfTk9OUV9WRUNTX1ZGKSBmcm9tIHRoZVxcbkBAIC0yMjYsMjIgKzI0OSwxNSBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSlcXG4gXFx0XFx0dnNpLVxcdTAwM2VudW1fcV92ZWN0b3JzID0gdmYtXFx1MDAzZW51bV9tc2l4IC0gSUNFX05PTlFfVkVDU19WRjtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX1ZTSV9DVFJMOlxcbi1cXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IDE7XFxuLVxcdFxcdHZzaS1cXHUwMDNlYWxsb2NfcnhxID0gMTtcXG4gXFx0XFx0dnNpLVxcdTAwM2VudW1fcV92ZWN0b3JzID0gMTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX1ZTSV9DSE5MOlxcbi1cXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3R4cSA9IDA7XFxuLVxcdFxcdHZzaS1cXHUwMDNlYWxsb2NfcnhxID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX1ZTSV9MQjpcXG4tXFx0XFx0dnNpLVxcdTAwM2VhbGxvY190eHEgPSAxO1xcbi1cXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3J4cSA9IDE7XFxuIFxcdFxcdC8qIEEgZHVtbXkgcV92ZWN0b3IsIG5vIGFjdHVhbCBJUlEuICovXFxuIFxcdFxcdHZzaS1cXHUwMDNlbnVtX3FfdmVjdG9ycyA9IDE7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlVua25vd24gVlNJIHR5cGUgJWRcXFxcblxcXCIsIHZzaV90eXBlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuQEAgLTMzMCw2ICszNDYsMzIgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHR2c2ktXFx1MDAzZXJ4cV9tYXAgPSBOVUxMO1xcbiB9XFxuIFxcbisvKiBmcmVlIHNpbmdsZSBzdGF0cyBtZW1vcnkgKi9cXG4rc3RhdGljIHZvaWQgX19pY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0LCBib29sIGZyZWVfZW50cmllcylcXG4re1xcbitcXHRpZiAoIXZzaV9zdGF0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoZnJlZV9lbnRyaWVzKSB7XFxuK1xcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XFxuK1xcdFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmICh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSkge1xcbitcXHRcXHRcXHRcXHRrZnJlZV9yY3UodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xcbitcXHRrZnJlZSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyk7XFxuK1xcdGtmcmVlKHZzaV9zdGF0KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV92c2lfZnJlZV9zdGF0cyAtIEZyZWUgdGhlIHJpbmcgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzXFxuICAqIEB2c2k6IFZTSSBwb2ludGVyXFxuQEAgLTMzOCw3ICszODAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVxcdTAwM2ViYWNrO1xcbi1cXHRpbnQgaTtcXG4gXFxuIFxcdGlmICh2c2ktXFx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTM0NiwyNiArMzg3LDcgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHZzaV9zdGF0ID0gcGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF07XFxuLVxcdGlmICghdnNpX3N0YXQpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGljZV9mb3JfZWFjaF9hbGxvY190eHEodnNpLCBpKSB7XFxuLVxcdFxcdGlmICh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xcbi1cXHRcXHRcXHRrZnJlZV9yY3UodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGljZV9mb3JfZWFjaF9hbGxvY19yeHEodnNpLCBpKSB7XFxuLVxcdFxcdGlmICh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSkge1xcbi1cXHRcXHRcXHRrZnJlZV9yY3UodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdGtmcmVlKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKTtcXG4tXFx0a2ZyZWUodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMpO1xcbi1cXHRrZnJlZSh2c2lfc3RhdCk7XFxuK1xcdF9faWNlX3ZzaV9mcmVlX3N0YXRzKHZzaV9zdGF0LCB0cnVlKTtcXG4gXFx0cGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF0gPSBOVUxMO1xcbiB9XFxuIFxcbkBAIC01MTMsNiArNTM1LDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbXNpeF9jbGVhbl9yaW5ncyhpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGljZV92c2lfc3RhdHMgKmljZV92c2lfbmV3X3N0YXRfYXJyYXlzKGludCB0eHEsIGludCByeHEpXFxuK3tcXG4rXFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0cztcXG4rXFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0cztcXG4rXFx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xcbitcXG4rXFx0dnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpO1xcbitcXHR0eF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCp0eF9yaW5nX3N0YXRzLCB0eHEpO1xcbitcXHRyeF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCpyeF9yaW5nX3N0YXRzLCByeHEpO1xcbitcXHRpZiAoIXZzaV9zdGF0IHx8ICF0eF9yaW5nX3N0YXRzIHx8ICFyeF9yaW5nX3N0YXRzKSB7XFxuK1xcdFxcdGtmcmVlKHZzaV9zdGF0KTtcXG4rXFx0XFx0a2ZyZWUodHhfcmluZ19zdGF0cyk7XFxuK1xcdFxcdGtmcmVlKHJ4X3Jpbmdfc3RhdHMpO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0dnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzO1xcbitcXHR2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XFxuK1xcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbiA9IHR4cTtcXG4rXFx0dnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuID0gcnhxO1xcbitcXG4rXFx0cmV0dXJuIHZzaV9zdGF0O1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX3ZzaV9hbGxvY19zdGF0X2FycmF5cyAtIEFsbG9jYXRlIHN0YXRpc3RpY3MgYXJyYXlzXFxuICAqIEB2c2k6IFZTSSBwb2ludGVyXFxuQEAgLTUzMSwzMSArNTc3LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9hbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHQvKiByZWFsbG9jIHdpbGwgaGFwcGVuIGluIHJlYnVpbGQgcGF0aCAqL1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcXG4rXFx0dnNpX3N0YXQgPSBpY2VfdnNpX25ld19zdGF0X2FycmF5cyh2c2ktXFx1MDAzZWFsbG9jX3R4cSwgdnNpLVxcdTAwM2VhbGxvY19yeHEpO1xcbiBcXHRpZiAoIXZzaV9zdGF0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzID1cXG4tXFx0XFx0a3phbGxvY19vYmpzKCp2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cywgdnNpLVxcdTAwM2VhbGxvY190eHEpO1xcbi1cXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKVxcbi1cXHRcXHRnb3RvIGVycl9hbGxvY190eDtcXG4tXFxuLVxcdHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzID1cXG4tXFx0XFx0a3phbGxvY19vYmpzKCp2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cywgdnNpLVxcdTAwM2VhbGxvY19yeHEpO1xcbi1cXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzKVxcbi1cXHRcXHRnb3RvIGVycl9hbGxvY19yeDtcXG4tXFxuIFxcdHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdID0gdnNpX3N0YXQ7XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4tXFxuLWVycl9hbGxvY19yeDpcXG4tXFx0a2ZyZWUodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMpO1xcbi1lcnJfYWxsb2NfdHg6XFxuLVxcdGtmcmVlKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKTtcXG4tXFx0a2ZyZWUodnNpX3N0YXQpO1xcbi1cXHRwZi1cXHUwMDNldnNpX3N0YXRzW3ZzaS1cXHUwMDNlaWR4XSA9IE5VTEw7XFxuLVxcdHJldHVybiAtRU5PTUVNO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjkyNiw2ICsyOTUzLDUxIEBAIGljZV92c2lfcmVidWlsZF9nZXRfY29hbGVzY2Uoc3RydWN0IGljZV92c2kgKnZzaSxcXG4gXFx0cmV0dXJuIHZzaS1cXHUwMDNlbnVtX3FfdmVjdG9ycztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3VudXNlZF9zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqbmV3X3ZzaV9zdGF0KVxcbit7XFxuK1xcdGludCBuZXdfdHhxID0gbmV3X3ZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcXG4rXFx0aW50IG5ld19yeHEgPSBuZXdfdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xcbitcXHRpbnQgcHJldl90eHEgPSB2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c19sZW47XFxuK1xcdGludCBwcmV2X3J4cSA9IHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSBuZXdfdHhxOyBpIFxcdTAwM2MgcHJldl90eHE7IGkrKykge1xcbitcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcXG4rXFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGZvciAoaW50IGkgPSBuZXdfcnhxOyBpIFxcdTAwM2MgcHJldl9yeHE7IGkrKykge1xcbitcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcXG4rXFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGljZV92c2lfc2V0X3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2ksXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqbmV3X3ZzaV9zdGF0KVxcbit7XFxuK1xcdHUxNiBuZXdfdHhxLCBuZXdfcnhxLCBwcmV2X3R4cSwgcHJldl9yeHE7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcXG4rXFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuK1xcbitcXHRuZXdfdHhxID0gbmV3X3ZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcXG4rXFx0bmV3X3J4cSA9IG5ld192c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c19sZW47XFxuK1xcdHZzaV9zdGF0ID0gcGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF07XFxuK1xcdHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdID0gbmV3X3ZzaV9zdGF0O1xcbitcXHRpZiAoIXZzaV9zdGF0KVxcbitcXHRcXHRyZXR1cm47IC8qIGRvbid0IGNvcHkgaWYgdGhlcmUgaXMgbm8gc291cmNlICovXFxuK1xcbitcXHRwcmV2X3R4cSA9IHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcXG4rXFx0cHJldl9yeHEgPSB2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c19sZW47XFxuK1xcbitcXHRtZW1jcHkobmV3X3ZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzLCB2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cyxcXG4rXFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpICogbWluKHByZXZfdHhxLCBuZXdfdHhxKSk7XFxuK1xcdG1lbWNweShuZXdfdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzLFxcbitcXHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cykgKiBtaW4ocHJldl9yeHEsIG5ld19yeHEpKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV92c2lfcmVidWlsZF9zZXRfY29hbGVzY2UgLSBzZXQgY29hbGVzY2UgZnJvbSBlYXJsaWVyIHNhdmVkIGFycmF5c1xcbiAgKiBAdnNpOiBWU0kgY29ubmVjdGVkIHdpdGggcV92ZWN0b3JzXFxuQEAgLTMwMTIsNjAgKzMwODQsMzcgQEAgaWNlX3ZzaV9yZWJ1aWxkX3NldF9jb2FsZXNjZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxcbiB9XFxuIFxcbiAvKipcXG4tICogaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzIC0gRnJlZXMgdW51c2VkIHN0YXQgc3RydWN0dXJlcyBvciBhbGxvYyBuZXcgb25lc1xcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxcbisgKiBpY2VfdnNpX3Jlc2l6ZV9zdGF0X2FycmF5cyAtIHJlc2l6ZSByaW5nIHN0YXRzIGFycmF5cyBmb3IgbmV3IHF1ZXVlIGNvdW50XFxuKyAqIEB2c2k6IFZTSSB0byBzd2FwIHRoZSByaW5nIHN0YXRzIGFycmF5cyBvZlxcbisgKlxcbisgKiBDYWxsIHdoaWxlIEB2c2kgc3RpbGwgb3ducyBpdHMgcXVldWVzIGFuZCBiZWZvcmUgaWNlX3ZzaV9kZWNmZygpIHJldHVybnMgdGhlbVxcbisgKiB0byB0aGUgUEYgcG9vbCwgc28gdGhhdCB0aGUgbmV3IHNpemUgaXMgd2hhdCBpY2VfdnNpX3NldF9udW1fcXMoKSB3aWxsIGNvbXB1dGVcXG4rICogYWZ0ZXJ3YXJkcy4gU3Vydml2aW5nIGVudHJpZXMgYXJlIGNhcnJpZWQgb3ZlciwgdGhlIHJlc3QgaXMgZnJlZWQuXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXFxuICAqL1xcbi1zdGF0aWMgaW50XFxuLWljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbitpbnQgaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcXG4ge1xcbi1cXHR1MTYgcmVxX3R4cSA9IHZzaS1cXHUwMDNlcmVxX3R4cSA/IHZzaS1cXHUwMDNlcmVxX3R4cSA6IHZzaS1cXHUwMDNlYWxsb2NfdHhxO1xcbi1cXHR1MTYgcmVxX3J4cSA9IHZzaS1cXHUwMDNlcmVxX3J4cSA/IHZzaS1cXHUwMDNlcmVxX3J4cSA6IHZzaS1cXHUwMDNlYWxsb2NfcnhxO1xcbi1cXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzO1xcbi1cXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzO1xcbi1cXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMgcXM7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICpvbGRfc3RhdDtcXG4rXFx0c3RydWN0IGljZV92c2lfc3RhdHMgKm5ld19zdGF0O1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4tXFx0dTE2IHByZXZfdHhxID0gdnNpLVxcdTAwM2VhbGxvY190eHE7XFxuLVxcdHUxNiBwcmV2X3J4cSA9IHZzaS1cXHUwMDNlYWxsb2NfcnhxO1xcbi1cXHRpbnQgaTtcXG4gXFxuLVxcdHZzaV9zdGF0ID0gcGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF07XFxuK1xcdGlmICh2c2ktXFx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChyZXFfdHhxIFxcdTAwM2MgcHJldl90eHEpIHtcXG4tXFx0XFx0Zm9yIChpID0gcmVxX3R4cTsgaSBcXHUwMDNjIHByZXZfdHhxOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XFxuLVxcdFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4tXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdHFzID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgdnNpLVxcdTAwM2VhbGxvY190eHEgKyB2c2ktXFx1MDAzZW51bV94ZHBfdHhxLFxcbitcXHRcXHRcXHRcXHR2c2ktXFx1MDAzZWFsbG9jX3J4cSk7XFxuIFxcbi1cXHR0eF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHM7XFxuLVxcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzID1cXG4tXFx0XFx0a3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMsIHJlcV90eHEsXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKSxcXG4tXFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tXFx0aWYgKCF2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cykge1xcbi1cXHRcXHR2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XFxuK1xcdG5ld19zdGF0ID0gaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXMocXMuYWxsb2NfdHhxLCBxcy5hbGxvY19yeHEpO1xcbitcXHRpZiAoIW5ld19zdGF0KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbiBcXG4tXFx0aWYgKHJlcV9yeHEgXFx1MDAzYyBwcmV2X3J4cSkge1xcbi1cXHRcXHRmb3IgKGkgPSByZXFfcnhxOyBpIFxcdTAwM2MgcHJldl9yeHE7IGkrKykge1xcbi1cXHRcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcXG4tXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHJ4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cztcXG4tXFx0dnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxcbi1cXHRcXHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cywgcmVxX3J4cSxcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMpLFxcbi1cXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi1cXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzKSB7XFxuLVxcdFxcdHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0cztcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdG9sZF9zdGF0ID0gcGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF07XFxuK1xcdGljZV92c2lfc2V0X3N0YXRfYXJyYXlzKHZzaSwgbmV3X3N0YXQpO1xcbitcXHRpZiAob2xkX3N0YXQpIHtcXG4rXFx0XFx0aWNlX3ZzaV9mcmVlX3VudXNlZF9zdGF0X2FycmF5cyhvbGRfc3RhdCwgbmV3X3N0YXQpO1xcbitcXHRcXHRfX2ljZV92c2lfZnJlZV9zdGF0cyhvbGRfc3RhdCwgZmFsc2UpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzA5OCw3ICszMTQ3LDcgQEAgaW50IGljZV92c2lfcmVidWlsZChzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MzIgdnNpX2ZsYWdzKVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnNpLVxcdTAwM2V4ZHBfc3RhdGVfbG9jayk7XFxuIFxcbi1cXHRyZXQgPSBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXModnNpKTtcXG4rXFx0cmV0ID0gaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXModnNpKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxcbmluZGV4IDQ5NDU0ZDk4ZGNmZWYuLjUyMzYwODhjMzIwYmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmhcXG5AQCAtNjcsNiArNjcsNyBAQCB2b2lkIGljZV92c2lfZGVjZmcoc3RydWN0IGljZV92c2kgKnZzaSk7XFxuIHZvaWQgaWNlX2Rpc192c2koc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBsb2NrZWQpO1xcbiBcXG4gaW50IGljZV92c2lfcmVidWlsZChzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1MzIgdnNpX2ZsYWdzKTtcXG4raW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpO1xcbiBpbnQgaWNlX3ZzaV9jZmcoc3RydWN0IGljZV92c2kgKnZzaSk7XFxuIHN0cnVjdCBpY2VfdnNpICppY2VfdnNpX2FsbG9jKHN0cnVjdCBpY2VfcGYgKnBmKTtcXG4gdm9pZCBpY2VfdnNpX2ZyZWUoc3RydWN0IGljZV92c2kgKnZzaSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXFxuaW5kZXggMjdlNGFjYjE2MjBmMC4uZmQ3MGE5M2I5ODY5NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuY1xcbkBAIC0yNjgsNiArMjY4LDEwIEBAIHN0YXRpYyBpbnQgaWNlX3ZmX3JlY29uZmlnX3ZzaShzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4gXFxuIFxcdHZzaS1cXHUwMDNlZmxhZ3MgPSBJQ0VfVlNJX0ZMQUdfTk9fSU5JVDtcXG4gXFxuK1xcdGVyciA9IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHZzaSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRpY2VfdnNpX2RlY2ZnKHZzaSk7XFxuIFxcdGljZV9mbHRyX3JlbW92ZV9hbGwodnNpKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjE5LjE4OTg0MzkwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3OTc0OTMwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGVudGlyZWx5IGNvbmZpbmVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgUENJZSBOSUMgaGFyZHdhcmUgKEU4MDAvRTgxMCBzZXJpZXMpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTQzNmFmMjczOTdjODA3M2FmMWZjYWRlNzBiMjQ2MTkxNTIzMTU2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDEzOjMwOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5pbmRleCBmNzJiYjFhYTQwNjc0Li40OGY0MzEyZGY0YTQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcbkBAIC0zMjgsNiArMzI4LDggQEAgZW51bSBpY2VfdnNpX3N0YXRlIHtcbiBzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyB7XG4gXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzOyAgLyogVHggcmluZyBzdGF0cyBhcnJheSAqL1xuIFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsgIC8qIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbitcdHUxNiB0eF9yaW5nX3N0YXRzX2xlbjsgIC8qIExlbmd0aCBvZiB0aGUgVHggcmluZyBzdGF0cyBhcnJheSAqL1xuK1x0dTE2IHJ4X3Jpbmdfc3RhdHNfbGVuOyAgLyogTGVuZ3RoIG9mIHRoZSBSeCByaW5nIHN0YXRzIGFycmF5ICovXG4gfTtcbiBcbiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi9cbkBAIC00MDEsOSArNDAzLDExIEBAIHN0cnVjdCBpY2VfdnNpIHtcbiBcdHU4IHJ4X21hcHBpbmdfbW9kZTtcdFx0IC8qIElDRV9NQVBfTU9ERV9bQ09OVElHfFNDQVRURVJdICovXG4gXHR1MTYgKnR4cV9tYXA7XHRcdFx0IC8qIGluZGV4IGluIHBmLVx1MDAzZWF2YWlsX3R4cXMgKi9cbiBcdHUxNiAqcnhxX21hcDtcdFx0XHQgLyogaW5kZXggaW4gcGYtXHUwMDNlYXZhaWxfcnhxcyAqL1xuLVx0dTE2IGFsbG9jX3R4cTtcdFx0XHQgLyogQWxsb2NhdGVkIFR4IHF1ZXVlcyAqL1xuK1x0c3RydWN0X2dyb3VwX3RhZ2dlZChpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMsIGFsbG9jX3R4cV9yeHEsXG4rXHRcdHUxNiBhbGxvY190eHE7XHRcdCAvKiBBbGxvY2F0ZWQgVHggcXVldWVzICovXG4rXHRcdHUxNiBhbGxvY19yeHE7XHRcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXG4rXHQpO1xuIFx0dTE2IG51bV90eHE7XHRcdFx0IC8qIFVzZWQgVHggcXVldWVzICovXG4tXHR1MTYgYWxsb2NfcnhxO1x0XHRcdCAvKiBBbGxvY2F0ZWQgUnggcXVldWVzICovXG4gXHR1MTYgbnVtX3J4cTtcdFx0XHQgLyogVXNlZCBSeCBxdWV1ZXMgKi9cbiBcdHUxNiByZXFfdHhxO1x0XHRcdCAvKiBVc2VyIHJlcXVlc3RlZCBUeCBxdWV1ZXMgKi9cbiBcdHUxNiByZXFfcnhxO1x0XHRcdCAvKiBVc2VyIHJlcXVlc3RlZCBSeCBxdWV1ZXMgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuaW5kZXggOGNkYzRmZGE4OWU5Ny4uNDk0OWYyOWU1MzhlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbkBAIC0xNTMsMTYgKzE1Myw1NiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9udW1fZGVzYyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdTE2IGljZV9nZXRfcnhxX2NvdW50KHN0cnVjdCBpY2VfcGYgKnBmKVxuK3N0YXRpYyB1MTYgaWNlX2dldF9yeHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYsIHUxNiBoZWxkKVxuIHtcbi1cdHJldHVybiBtaW4oaWNlX2dldF9hdmFpbF9yeHFfY291bnQocGYpLFxuLVx0XHQgICBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpKTtcbitcdHJldHVybiBtaW5fdCh1MTYsIGljZV9nZXRfYXZhaWxfcnhxX2NvdW50KHBmKSArIGhlbGQsXG4rXHRcdCAgICAgbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSk7XG4gfVxuIFxuLXN0YXRpYyB1MTYgaWNlX2dldF90eHFfY291bnQoc3RydWN0IGljZV9wZiAqcGYpXG4rc3RhdGljIHUxNiBpY2VfZ2V0X3R4cV9jb3VudChzdHJ1Y3QgaWNlX3BmICpwZiwgdTE2IGhlbGQpXG4ge1xuLVx0cmV0dXJuIG1pbihpY2VfZ2V0X2F2YWlsX3R4cV9jb3VudChwZiksXG4tXHRcdCAgIG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpO1xuK1x0cmV0dXJuIG1pbl90KHUxNiwgaWNlX2dldF9hdmFpbF90eHFfY291bnQocGYpICsgaGVsZCxcbitcdFx0ICAgICBuZXRpZl9nZXRfbnVtX2RlZmF1bHRfcnNzX3F1ZXVlcygpKTtcbit9XG4rXG4rLyogQGhlbGRfdHhxLCBAaGVsZF9yeHE6IHF1ZXVlcyB0aGUgVlNJIHN0aWxsIG93bnMgYnV0IGlzIGFib3V0IHRvIHJldHVybiB0byB0aGVcbisgKiBQRiBwb29sLCBzbyB0aGF0IHRoZSByZXN1bHQgbWF0Y2hlcyB3aGF0IGl0IHdpbGwgYmUgb25jZSB0aGV5IGFyZSBiYWNrIHRoZXJlLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgaWNlX3ZzaV9hbGxvY19xdWV1ZXNfcGFyYW1zXG4raWNlX3ZzaV9nZXRfbnVtX3FzKHN0cnVjdCBpY2VfdnNpICp2c2ksIHUxNiBoZWxkX3R4cSwgdTE2IGhlbGRfcnhxKVxuK3tcbitcdHN0cnVjdCBpY2VfdnNpX2FsbG9jX3F1ZXVlc19wYXJhbXMgcXMgPSB7fTtcbitcdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVx1MDAzZWJhY2s7XG4rXG4rXHRzd2l0Y2ggKHZzaS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIElDRV9WU0lfUEY6XG4rXHRcdHFzLmFsbG9jX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID86IGljZV9nZXRfdHhxX2NvdW50KHBmLCBoZWxkX3R4cSk7XG4rXG4rXHRcdC8qIG9ubHkgMSBSeCBxdWV1ZSB1bmxlc3MgUlNTIGlzIGVuYWJsZWQgKi9cbitcdFx0aWYgKCF0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4rXHRcdFx0cXMuYWxsb2NfcnhxID0gMTtcbitcdFx0ZWxzZVxuK1x0XHRcdHFzLmFsbG9jX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxID86XG4rXHRcdFx0XHQgICAgICAgaWNlX2dldF9yeHFfY291bnQocGYsIGhlbGRfcnhxKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElDRV9WU0lfU0Y6XG4rXHRjYXNlIElDRV9WU0lfQ1RSTDpcbitcdGNhc2UgSUNFX1ZTSV9MQjpcbitcdFx0cXMuYWxsb2NfdHhxID0gMTtcbitcdFx0cXMuYWxsb2NfcnhxID0gMTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElDRV9WU0lfVkY6XG4rXHRcdHFzLmFsbG9jX3R4cSA9IHZzaS1cdTAwM2V2Zi1cdTAwM2VudW1fcmVxX3FzID86IHZzaS1cdTAwM2V2Zi1cdTAwM2VudW1fdmZfcXM7XG4rXHRcdHFzLmFsbG9jX3J4cSA9IHFzLmFsbG9jX3R4cTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIElDRV9WU0lfQ0hOTDpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXCJVbmtub3duIFZTSSB0eXBlICVkXFxuXCIsIHZzaS1cdTAwM2V0eXBlKTtcbitcdFx0cmV0dXJuIHZzaS1cdTAwM2VhbGxvY190eHFfcnhxO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHFzO1xuIH1cbiBcbiAvKipcbkBAIC0xODAsNDQgKzIyMCwyNyBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX3NldF9udW1fcXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdGlmIChXQVJOX09OKHZzaV90eXBlID09IElDRV9WU0lfVkYgXHUwMDI2XHUwMDI2ICF2ZikpXG4gXHRcdHJldHVybjtcbiBcbitcdHZzaS1cdTAwM2VhbGxvY190eHFfcnhxID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgMCwgMCk7XG4rXG4gXHRzd2l0Y2ggKHZzaV90eXBlKSB7XG4gXHRjYXNlIElDRV9WU0lfUEY6XG4tXHRcdGlmICh2c2ktXHUwMDNlcmVxX3R4cSkge1xuLVx0XHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSB2c2ktXHUwMDNlcmVxX3R4cTtcbitcdFx0aWYgKHZzaS1cdTAwM2VyZXFfdHhxKVxuIFx0XHRcdHZzaS1cdTAwM2VudW1fdHhxID0gdnNpLVx1MDAzZXJlcV90eHE7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0dnNpLVx1MDAzZWFsbG9jX3R4cSA9IGljZV9nZXRfdHhxX2NvdW50KHBmKTtcbi1cdFx0fVxuK1x0XHRpZiAodnNpLVx1MDAzZXJlcV9yeHEgXHUwMDI2XHUwMDI2IHRlc3RfYml0KElDRV9GTEFHX1JTU19FTkEsIHBmLVx1MDAzZWZsYWdzKSlcbitcdFx0XHR2c2ktXHUwMDNlbnVtX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxO1xuIFxuIFx0XHRwZi1cdTAwM2VudW1fbGFuX3R4ID0gdnNpLVx1MDAzZWFsbG9jX3R4cTtcbi1cbi1cdFx0Lyogb25seSAxIFJ4IHF1ZXVlIHVubGVzcyBSU1MgaXMgZW5hYmxlZCAqL1xuLVx0XHRpZiAoIXRlc3RfYml0KElDRV9GTEFHX1JTU19FTkEsIHBmLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSAxO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGlmICh2c2ktXHUwMDNlcmVxX3J4cSkge1xuLVx0XHRcdFx0dnNpLVx1MDAzZWFsbG9jX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxO1xuLVx0XHRcdFx0dnNpLVx1MDAzZW51bV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dnNpLVx1MDAzZWFsbG9jX3J4cSA9IGljZV9nZXRfcnhxX2NvdW50KHBmKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbiBcdFx0cGYtXHUwMDNlbnVtX2xhbl9yeCA9IHZzaS1cdTAwM2VhbGxvY19yeHE7XG4gXG4gXHRcdHZzaS1cdTAwM2VudW1fcV92ZWN0b3JzID0gbWF4KHZzaS1cdTAwM2VhbGxvY19yeHEsIHZzaS1cdTAwM2VhbGxvY190eHEpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX1ZTSV9TRjpcbi1cdFx0dnNpLVx1MDAzZWFsbG9jX3R4cSA9IDE7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSAxO1xuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IDE7XG4gXHRcdHZzaS1cdTAwM2VpcnFfZHluX2FsbG9jID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfVkY6XG4gXHRcdGlmICh2Zi1cdTAwM2VudW1fcmVxX3FzKVxuIFx0XHRcdHZmLVx1MDAzZW51bV92Zl9xcyA9IHZmLVx1MDAzZW51bV9yZXFfcXM7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSB2Zi1cdTAwM2VudW1fdmZfcXM7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSB2Zi1cdTAwM2VudW1fdmZfcXM7XG4gXHRcdC8qIHBmLVx1MDAzZXZmcy5udW1fbXNpeF9wZXIgaW5jbHVkZXMgKFZGIG1pc2NlbGxhbmVvdXMgdmVjdG9yICtcbiBcdFx0ICogZGF0YSBxdWV1ZSBpbnRlcnJ1cHRzKS4gU2luY2UgdnNpLVx1MDAzZW51bV9xX3ZlY3RvcnMgaXMgbnVtYmVyXG4gXHRcdCAqIG9mIHF1ZXVlcyB2ZWN0b3JzLCBzdWJ0cmFjdCAxIChJQ0VfTk9OUV9WRUNTX1ZGKSBmcm9tIHRoZVxuQEAgLTIyNiwyMiArMjQ5LDE1IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfc2V0X251bV9xcyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IHZmLVx1MDAzZW51bV9tc2l4IC0gSUNFX05PTlFfVkVDU19WRjtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfQ1RSTDpcbi1cdFx0dnNpLVx1MDAzZWFsbG9jX3R4cSA9IDE7XG4tXHRcdHZzaS1cdTAwM2VhbGxvY19yeHEgPSAxO1xuIFx0XHR2c2ktXHUwMDNlbnVtX3FfdmVjdG9ycyA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfVlNJX0NITkw6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAwO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9WU0lfTEI6XG4tXHRcdHZzaS1cdTAwM2VhbGxvY190eHEgPSAxO1xuLVx0XHR2c2ktXHUwMDNlYWxsb2NfcnhxID0gMTtcbiBcdFx0LyogQSBkdW1teSBxX3ZlY3Rvciwgbm8gYWN0dWFsIElSUS4gKi9cbiBcdFx0dnNpLVx1MDAzZW51bV9xX3ZlY3RvcnMgPSAxO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcIlVua25vd24gVlNJIHR5cGUgJWRcXG5cIiwgdnNpX3R5cGUpO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbkBAIC0zMzAsNiArMzQ2LDMyIEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdHZzaS1cdTAwM2VyeHFfbWFwID0gTlVMTDtcbiB9XG4gXG4rLyogZnJlZSBzaW5nbGUgc3RhdHMgbWVtb3J5ICovXG4rc3RhdGljIHZvaWQgX19pY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0LCBib29sIGZyZWVfZW50cmllcylcbit7XG4rXHRpZiAoIXZzaV9zdGF0KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoZnJlZV9lbnRyaWVzKSB7XG4rXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjsgaSsrKSB7XG4rXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbitcdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuK1x0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcbitcdFx0XHRpZiAodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSkge1xuK1x0XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4rXHRcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0a2ZyZWUodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyk7XG4rXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKTtcbitcdGtmcmVlKHZzaV9zdGF0KTtcbit9XG4rXG4gLyoqXG4gICogaWNlX3ZzaV9mcmVlX3N0YXRzIC0gRnJlZSB0aGUgcmluZyBzdGF0aXN0aWNzIHN0cnVjdHVyZXNcbiAgKiBAdnNpOiBWU0kgcG9pbnRlclxuQEAgLTMzOCw3ICszODAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcbiB7XG4gXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0aW50IGk7XG4gXG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuIFx0XHRyZXR1cm47XG5AQCAtMzQ2LDI2ICszODcsNyBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0dnNpX3N0YXQgPSBwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF07XG4tXHRpZiAoIXZzaV9zdGF0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpY2VfZm9yX2VhY2hfYWxsb2NfdHhxKHZzaSwgaSkge1xuLVx0XHRpZiAodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSkge1xuLVx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGljZV9mb3JfZWFjaF9hbGxvY19yeHEodnNpLCBpKSB7XG4tXHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4tXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyk7XG4tXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKTtcbi1cdGtmcmVlKHZzaV9zdGF0KTtcbitcdF9faWNlX3ZzaV9mcmVlX3N0YXRzKHZzaV9zdGF0LCB0cnVlKTtcbiBcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IE5VTEw7XG4gfVxuIFxuQEAgLTUxMyw2ICs1MzUsMzAgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9tc2l4X2NsZWFuX3JpbmdzKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IGljZV92c2lfc3RhdHMgKmljZV92c2lfbmV3X3N0YXRfYXJyYXlzKGludCB0eHEsIGludCByeHEpXG4re1xuK1x0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0cztcbitcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XG4rXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4rXG4rXHR2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7XG4rXHR0eF9yaW5nX3N0YXRzID0ga3phbGxvY19vYmpzKCp0eF9yaW5nX3N0YXRzLCB0eHEpO1xuK1x0cnhfcmluZ19zdGF0cyA9IGt6YWxsb2Nfb2JqcygqcnhfcmluZ19zdGF0cywgcnhxKTtcbitcdGlmICghdnNpX3N0YXQgfHwgIXR4X3Jpbmdfc3RhdHMgfHwgIXJ4X3Jpbmdfc3RhdHMpIHtcbitcdFx0a2ZyZWUodnNpX3N0YXQpO1xuK1x0XHRrZnJlZSh0eF9yaW5nX3N0YXRzKTtcbitcdFx0a2ZyZWUocnhfcmluZ19zdGF0cyk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XG4rXHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0cztcbitcdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuID0gdHhxO1xuK1x0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c19sZW4gPSByeHE7XG4rXG4rXHRyZXR1cm4gdnNpX3N0YXQ7XG4rfVxuK1xuIC8qKlxuICAqIGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMgLSBBbGxvY2F0ZSBzdGF0aXN0aWNzIGFycmF5c1xuICAqIEB2c2k6IFZTSSBwb2ludGVyXG5AQCAtNTMxLDMxICs1NzcsMTIgQEAgc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHQvKiByZWFsbG9jIHdpbGwgaGFwcGVuIGluIHJlYnVpbGQgcGF0aCAqL1xuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcbitcdHZzaV9zdGF0ID0gaWNlX3ZzaV9uZXdfc3RhdF9hcnJheXModnNpLVx1MDAzZWFsbG9jX3R4cSwgdnNpLVx1MDAzZWFsbG9jX3J4cSk7XG4gXHRpZiAoIXZzaV9zdGF0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxuLVx0XHRremFsbG9jX29ianMoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHZzaS1cdTAwM2VhbGxvY190eHEpO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKVxuLVx0XHRnb3RvIGVycl9hbGxvY190eDtcbi1cbi1cdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuLVx0XHRremFsbG9jX29ianMoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaS1cdTAwM2VhbGxvY19yeHEpO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKVxuLVx0XHRnb3RvIGVycl9hbGxvY19yeDtcbi1cbiBcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IHZzaV9zdGF0O1xuLVxuIFx0cmV0dXJuIDA7XG4tXG4tZXJyX2FsbG9jX3J4OlxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyk7XG4tZXJyX2FsbG9jX3R4OlxuLVx0a2ZyZWUodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyk7XG4tXHRrZnJlZSh2c2lfc3RhdCk7XG4tXHRwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0gPSBOVUxMO1xuLVx0cmV0dXJuIC1FTk9NRU07XG4gfVxuIFxuIC8qKlxuQEAgLTI5MjYsNiArMjk1Myw1MSBAQCBpY2VfdnNpX3JlYnVpbGRfZ2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gXHRyZXR1cm4gdnNpLVx1MDAzZW51bV9xX3ZlY3RvcnM7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGljZV92c2lfZnJlZV91bnVzZWRfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0LFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld192c2lfc3RhdClcbit7XG4rXHRpbnQgbmV3X3R4cSA9IG5ld192c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbjtcbitcdGludCBuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuK1x0aW50IHByZXZfdHhxID0gdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW47XG4rXHRpbnQgcHJldl9yeHEgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcbitcbitcdGZvciAoaW50IGkgPSBuZXdfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSsrKSB7XG4rXHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4rXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4rXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbitcdFx0fVxuK1x0fVxuK1x0Zm9yIChpbnQgaSA9IG5ld19yeHE7IGkgXHUwMDNjIHByZXZfcnhxOyBpKyspIHtcbitcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbitcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbitcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGljZV92c2lfc2V0X3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2ksXG4rXHRcdFx0XHQgICAgc3RydWN0IGljZV92c2lfc3RhdHMgKm5ld192c2lfc3RhdClcbit7XG4rXHR1MTYgbmV3X3R4cSwgbmV3X3J4cSwgcHJldl90eHEsIHByZXZfcnhxO1xuK1x0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuK1x0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbitcbitcdG5ld190eHEgPSBuZXdfdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW47XG4rXHRuZXdfcnhxID0gbmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuO1xuK1x0dnNpX3N0YXQgPSBwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF07XG4rXHRwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0gPSBuZXdfdnNpX3N0YXQ7XG4rXHRpZiAoIXZzaV9zdGF0KVxuK1x0XHRyZXR1cm47IC8qIGRvbid0IGNvcHkgaWYgdGhlcmUgaXMgbm8gc291cmNlICovXG4rXG4rXHRwcmV2X3R4cSA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xuK1x0cHJldl9yeHEgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcbitcbitcdG1lbWNweShuZXdfdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cywgdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyxcbitcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpICogbWluKHByZXZfdHhxLCBuZXdfdHhxKSk7XG4rXHRtZW1jcHkobmV3X3ZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsXG4rXHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKSAqIG1pbihwcmV2X3J4cSwgbmV3X3J4cSkpO1xuK31cbitcbiAvKipcbiAgKiBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlIC0gc2V0IGNvYWxlc2NlIGZyb20gZWFybGllciBzYXZlZCBhcnJheXNcbiAgKiBAdnNpOiBWU0kgY29ubmVjdGVkIHdpdGggcV92ZWN0b3JzXG5AQCAtMzAxMiw2MCArMzA4NCwzNyBAQCBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gfVxuIFxuIC8qKlxuLSAqIGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyAtIEZyZWVzIHVudXNlZCBzdGF0IHN0cnVjdHVyZXMgb3IgYWxsb2MgbmV3IG9uZXNcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxuKyAqIGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzIC0gcmVzaXplIHJpbmcgc3RhdHMgYXJyYXlzIGZvciBuZXcgcXVldWUgY291bnRcbisgKiBAdnNpOiBWU0kgdG8gc3dhcCB0aGUgcmluZyBzdGF0cyBhcnJheXMgb2ZcbisgKlxuKyAqIENhbGwgd2hpbGUgQHZzaSBzdGlsbCBvd25zIGl0cyBxdWV1ZXMgYW5kIGJlZm9yZSBpY2VfdnNpX2RlY2ZnKCkgcmV0dXJucyB0aGVtXG4rICogdG8gdGhlIFBGIHBvb2wsIHNvIHRoYXQgdGhlIG5ldyBzaXplIGlzIHdoYXQgaWNlX3ZzaV9zZXRfbnVtX3FzKCkgd2lsbCBjb21wdXRlXG4rICogYWZ0ZXJ3YXJkcy4gU3Vydml2aW5nIGVudHJpZXMgYXJlIGNhcnJpZWQgb3ZlciwgdGhlIHJlc3QgaXMgZnJlZWQuXG4rICpcbisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZVxuICAqL1xuLXN0YXRpYyBpbnRcbi1pY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbitpbnQgaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiB7XG4tXHR1MTYgcmVxX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID8gdnNpLVx1MDAzZXJlcV90eHEgOiB2c2ktXHUwMDNlYWxsb2NfdHhxO1xuLVx0dTE2IHJlcV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cSA/IHZzaS1cdTAwM2VyZXFfcnhxIDogdnNpLVx1MDAzZWFsbG9jX3J4cTtcbi1cdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XG4tXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzO1xuLVx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuK1x0c3RydWN0IGljZV92c2lfYWxsb2NfcXVldWVzX3BhcmFtcyBxcztcbitcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICpvbGRfc3RhdDtcbitcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICpuZXdfc3RhdDtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVx1MDAzZWJhY2s7XG4tXHR1MTYgcHJldl90eHEgPSB2c2ktXHUwMDNlYWxsb2NfdHhxO1xuLVx0dTE2IHByZXZfcnhxID0gdnNpLVx1MDAzZWFsbG9jX3J4cTtcbi1cdGludCBpO1xuIFxuLVx0dnNpX3N0YXQgPSBwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF07XG4rXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChyZXFfdHhxIFx1MDAzYyBwcmV2X3R4cSkge1xuLVx0XHRmb3IgKGkgPSByZXFfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSsrKSB7XG4tXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbitcdHFzID0gaWNlX3ZzaV9nZXRfbnVtX3FzKHZzaSwgdnNpLVx1MDAzZWFsbG9jX3R4cSArIHZzaS1cdTAwM2VudW1feGRwX3R4cSxcbitcdFx0XHRcdHZzaS1cdTAwM2VhbGxvY19yeHEpO1xuIFxuLVx0dHhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHM7XG4tXHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzID1cbi1cdFx0a3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cywgcmVxX3R4cSxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKSxcbi1cdFx0XHQgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuLVx0aWYgKCF2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKSB7XG4tXHRcdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzO1xuK1x0bmV3X3N0YXQgPSBpY2VfdnNpX25ld19zdGF0X2FycmF5cyhxcy5hbGxvY190eHEsIHFzLmFsbG9jX3J4cSk7XG4rXHRpZiAoIW5ld19zdGF0KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbiBcbi1cdGlmIChyZXFfcnhxIFx1MDAzYyBwcmV2X3J4cSkge1xuLVx0XHRmb3IgKGkgPSByZXFfcnhxOyBpIFx1MDAzYyBwcmV2X3J4cTsgaSsrKSB7XG4tXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHJ4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzO1xuLVx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9XG4tXHRcdGtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsXG4tXHRcdFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyksXG4tXHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cykge1xuLVx0XHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0cztcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRvbGRfc3RhdCA9IHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XTtcbitcdGljZV92c2lfc2V0X3N0YXRfYXJyYXlzKHZzaSwgbmV3X3N0YXQpO1xuK1x0aWYgKG9sZF9zdGF0KSB7XG4rXHRcdGljZV92c2lfZnJlZV91bnVzZWRfc3RhdF9hcnJheXMob2xkX3N0YXQsIG5ld19zdGF0KTtcbitcdFx0X19pY2VfdnNpX2ZyZWVfc3RhdHMob2xkX3N0YXQsIGZhbHNlKTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTMwOTgsNyArMzE0Nyw3IEBAIGludCBpY2VfdnNpX3JlYnVpbGQoc3RydWN0IGljZV92c2kgKnZzaSwgdTMyIHZzaV9mbGFncylcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dnNpLVx1MDAzZXhkcF9zdGF0ZV9sb2NrKTtcbiBcbi1cdHJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpO1xuK1x0cmV0ID0gaWNlX3ZzaV9yZXNpemVfc3RhdF9hcnJheXModnNpKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5oXG5pbmRleCA0OTQ1NGQ5OGRjZmVmLi41MjM2MDg4YzMyMGJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuaFxuQEAgLTY3LDYgKzY3LDcgQEAgdm9pZCBpY2VfdnNpX2RlY2ZnKHN0cnVjdCBpY2VfdnNpICp2c2kpO1xuIHZvaWQgaWNlX2Rpc192c2koc3RydWN0IGljZV92c2kgKnZzaSwgYm9vbCBsb2NrZWQpO1xuIFxuIGludCBpY2VfdnNpX3JlYnVpbGQoc3RydWN0IGljZV92c2kgKnZzaSwgdTMyIHZzaV9mbGFncyk7XG4raW50IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpO1xuIGludCBpY2VfdnNpX2NmZyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKTtcbiBzdHJ1Y3QgaWNlX3ZzaSAqaWNlX3ZzaV9hbGxvYyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gdm9pZCBpY2VfdnNpX2ZyZWUoc3RydWN0IGljZV92c2kgKnZzaSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmNcbmluZGV4IDI3ZTRhY2IxNjIwZjAuLmZkNzBhOTNiOTg2OTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jXG5AQCAtMjY4LDYgKzI2OCwxMCBAQCBzdGF0aWMgaW50IGljZV92Zl9yZWNvbmZpZ192c2koc3RydWN0IGljZV92ZiAqdmYpXG4gXG4gXHR2c2ktXHUwMDNlZmxhZ3MgPSBJQ0VfVlNJX0ZMQUdfTk9fSU5JVDtcbiBcbitcdGVyciA9IGljZV92c2lfcmVzaXplX3N0YXRfYXJyYXlzKHZzaSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0aWNlX3ZzaV9kZWNmZyh2c2kpO1xuIFx0aWNlX2ZsdHJfcmVtb3ZlX2FsbCh2c2kpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTM6MzA6MTkuMTg5ODQ1ODQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ4NjAyMTc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhbmQgaW5zdHJ1Y3Rpb25zIGNhcmVmdWxseS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIEludGVsIEV0aGVybmV0IENvbnRyb2xsZXIgRTgwMCBzZXJpZXMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBpY2VgIGRyaXZlciwgYmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9uczogYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaGAsIGBpY2VfbGliLmNgLCBgaWNlX2xpYi5oYCwgYW5kIGBpY2VfdmZfbGliLmNgLlxuXG5Ob3csIGFjY29yZGluZyB0byBTZWN0aW9uIDIgb2YgdGhlIHRyaWFnZSBwaGlsb3NvcGh5LCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGlmIHRoaXMgZHJpdmVyIGludm9sdmVzIFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIuIFRoaXMgbWVhbnMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcywgaXMgdGhlIEludGVsIGBpY2VgIGRyaXZlciByZWFjaGFibGUgd2l0aGluIHN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIGVudmlyb25tZW50cywgb3IgZG9lcyBpdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24/XG5cbkkga25vdyB0aGUgYGljZWAgZHJpdmVyIGlzIHRoZSBkcml2ZXIgZm9yIEludGVsIEV0aGVybmV0IDgwMCBTZXJpZXMgTklDcy4gSXQgd29ya3Mgd2l0aCBJbnRlbCBOSUMgaGFyZHdhcmUgKFBDSSBkZXZpY2UpIGFuZCBmaXJtd2FyZSB0aHJvdWdoIGFkbWluIHF1ZXVlcyBhbmQgcmVnaXN0ZXJzLiBJJ20gcHJldHR5IGNlcnRhaW4gdGhhdCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGBpY2VgIGhhcmR3YXJlIGRpcmVjdGx5LiBRRU1VIGhhbmRsZXMgb3RoZXIgZHJpdmVycyBsaWtlIGUxMDAwLCBlMTAwMGUsIGlnYiwgYW5kIHZpcnRpby1uZXQsIGJ1dCBub3QgdGhlIEU4MDAgc2VyaWVzLiBTaW1pbGFybHksIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBzb2Z0d2FyZSBlbXVsYXRpb24gbWV0aG9kcyBsaWtlIG5ldGtpdCwgZHVtbXksIHZldGgsIHRhcC90dW4sIHZpcnRpbywgb3IgVVNCIGdhZGdldCwgZm9yIHRoZSBgaWNlYCBkcml2ZXIuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZvciBgSUNFYCB0byBzZWUgaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzozMDoyNS42NzU4NzE2NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxMzY0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjI1Ljc1NjAxMjI1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg1MzAyODQyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSUNFIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgSW50ZWwgRXRoZXJuZXQgYElDRWAgZHJpdmVyLiBCZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgZHJpdmVyJ3MgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgYXJvdW5kIGxpbmUgMjkxIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnYC4gVGhpcyBmaWxlIHVzdWFsbHkgb3V0bGluZXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBzbyBpdCdzIHRoZSBpZGVhbCBwbGFjZSB0byBkZWNpcGhlciB3aGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgdGhlIGBJQ0VgIGRyaXZlciByZWxpZXMgdXBvbi4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIG5lZWRzIHRvIHN1Y2Nlc3NmdWxseSBpbmNsdWRlIHRoYXQgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU2OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjM0LjI4NjI5OTk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0Y29uZmlnIElDRVxcbiAyOTI6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFxcXCJcXG4gMjkzOlxcdFxcdGRlZmF1bHQgblxcbiAyOTQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuIDI5NTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuIDI5NjpcXHRcXHRkZXBlbmRzIG9uIEdOU1MgfHwgR05TUyA9IG5cXG4gMjk3OlxcdFxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuIDI5ODpcXHRcXHRzZWxlY3QgRElNTElCXFxuIDI5OTpcXHRcXHRzZWxlY3QgTElCRVRIX1hEUFxcbiAzMDA6XFx0XFx0c2VsZWN0IExJQklFXFxuIDMwMTpcXHRcXHRzZWxlY3QgTElCSUVfQURNSU5RXFxuIDMwMjpcXHRcXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG4gMzAzOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAzMDQ6XFx0XFx0c2VsZWN0IFBBQ0tJTkdcXG4gMzA1OlxcdFxcdHNlbGVjdCBQTERNRldcXG4gMzA2OlxcdFxcdHNlbGVjdCBEUExMXFxuIDMwNzpcXHRcXHRoZWxwXFxuIDMwODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgb2ZcXG4gMzA5OlxcdFxcdCAgZGV2aWNlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvXFxuIDMxMDpcXHRcXHQgIHRvIHRoZSBBZGFwdGVyIFxcdTAwMjYgRHJpdmVyIElEIEd1aWRlIHRoYXQgY2FuIGJlIGxvY2F0ZWQgYXQ6XFxuIDMxMTpcXHRcXG4gMzEyOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly9zdXBwb3J0LmludGVsLmNvbVxcdTAwM2VcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG4gMzE1OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2ludGVsL2ljZS5yc3RcXHUwMDNlLlxcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcXG4gMzE4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgaWNlLlxcbiAzMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjM0LjI4NjQwNDE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwMDg5ODA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmc9ZmFsc2UgZm9yIEludGVsIEU4MDAgU2VyaWVzIERyaXZlcioqXG5cbk9rYXksIGxldCdzIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBndWlkZWxpbmVzIGNvcnJlY3RseS4gVGhlIGNvcmUgb2YgaXQgYWxsIGlzIGFib3V0IHdoZW4gKm5vdCogdG8gZnV6ei4gUnVsZSAyIHNlZW1zIHJlbGV2YW50IGhlcmUsIHNwZWNpZmljYWxseSB0aGUgcGFydCBhYm91dCBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBJJ3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGlzOyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYS5cblxuVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcywgb3IgYGljZWAuIEkga25vdyB0aGlzIGRyaXZlciBpbnRpbWF0ZWx5IOKAkyBpdCdzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBOSUMgZHJpdmVyLCBhbmQgaXQgKmFic29sdXRlbHkqIHJlbGllcyBvbiBwaHlzaWNhbCBJbnRlbCBFODEwL0U4MDAgUENJZSBoYXJkd2FyZSwgdGhlIEFTSUNzLiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSBhbmQgR0NFLCBzaW1wbHkgKmRvbid0KiBlbXVsYXRlIHRoaXMgaGFyZHdhcmUuIFRoaXMgaXMgYSBjcnVjaWFsIHBvaW50LCBhbmQgaXQncyB0aGUgZGVmaW5pbmcgZmFjdG9yLlxuXG5TbywgdGhpcyBmYWxscyBkaXJlY3RseSB1bmRlciBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBUaGVyZSdzIG5vIHdheSBzeXprYWxsZXIsIG9yIGFueSBzdGFuZGFyZCBmdXp6ZXIsIGNhbiBlZmZlY3RpdmVseSByZWFjaCBhbmQgdGVzdCB0aGlzIGNvZGUuXG5cbkknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIG1vZGlmaWVkIGZpbGVzLiBMZXQgbWUgc2VlLi4uIHllcywgdGhlIGRpZmYgaW5jbHVkZXMgYGljZS5oYCwgYGljZV9saWIuY2AsIGBpY2VfbGliLmhgLCBhbmQgYGljZV92Zl9saWIuY2AuIEFsbCBvZiB0aGVzZSBmaWxlcyBhcmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvYCBkaXJlY3RvcnksIHdoaWNoIGlzICpleGNsdXNpdmVseSogdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGRyaXZlciBjb2RlLiBDb25maXJtYXRpb24hXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyAqbXVzdCogYmUgc2V0IHRvIGBmYWxzZWAuIFNpbmNlIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLCB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgZm9jdXMgc3ltYm9scyBuZWVkZWQuIENvbnNlcXVlbnRseSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBhbHNvIGJlIGVtcHR5IChvciBhIG51bGwvZW1wdHkgYXJyYXkpIOKAkyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgdG8gdGVzdCB1bnJlYWNoYWJsZSBjb2RlLiBUaGUgcmVhc29uaW5nIHNob3VsZCBiZSBjb25jaXNlLCBidXQgY2xlYXI6IHRoaXMgY2hhbmdlIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIEludGVsIEU4MDAgRXRoZXJuZXQgZHJpdmVyIChgaWNlYCksIHdoaWNoIGRlcGVuZHMgb24gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyAoUUVNVS9zeXprYWxsZXIpLiBUaGlzIG1lYW5zIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cblxuTm93LCBsZXQncyBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4gSSBoYXZlIHdoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwNCwiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxMzozMDozOC45ODczMDQ1OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGVudGlyZWx5IGNvbmZpbmVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgUENJZSBOSUMgaGFyZHdhcmUgKEU4MDAvRTgxMCBzZXJpZXMpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGVudGlyZWx5IGNvbmZpbmVkIHRvIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgSW50ZWwgUENJZSBOSUMgaGFyZHdhcmUgKEU4MDAvRTgxMCBzZXJpZXMpIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgUUVNVSBvciBHQ0UpIHVzZWQgYnkgc3l6a2FsbGVyLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDEzOjMwOjM4Ljk4NzM0MDY1N1oiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowgc5dt[1] Phase: Running StartedAt: 2026-09-11 13:30:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgc5dt[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 13:30:50 +0000 UTC FinishedAt: 2026-09-11 13:30:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}