Name: series-workflowp5775 Phase: Failed StartedAt: 2026-06-30 07:27:34 +0000 UTC FinishedAt: 2026-06-30 07:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5775[0] Phase: Succeeded StartedAt: 2026-06-30 07:27:34 +0000 UTC FinishedAt: 2026-06-30 07:38:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5775[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 07:27:34 +0000 UTC FinishedAt: 2026-06-30 07:38:34 +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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjhlMTgxMzMzMTU3NWM2ZjIyODEyNGJiYzhkMGQzNmJhMzBkYzhlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA3OjM2OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5pbmRleCBlZmE2NjEwYWNiYzc5Ny4uZjg0MDRiYzc3NzNjMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5AQCAtNTMsNyAmIzQzOzUzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKVxuICAqL1xuICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZylcdFx0XHRcdFx0XFxcbiAoe1x0Y29uc3Qgc3RydWN0IHBhZ2UgKl9fcGcgPSAocGcpO1x0XHRcdFx0XFxcbi1cdGludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihfX3BnLVx1MDAzZWZsYWdzKTtcdFx0XFxcbiYjNDM7XHRpbnQgX19zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2X19wZy1cdTAwM2VmbGFncyk7XHRcdFxcXG4gXHQodW5zaWduZWQgbG9uZykoX19wZyAtIF9fc2VjdGlvbl9tZW1fbWFwX2FkZHIoX19ucl90b19zZWN0aW9uKF9fc2VjKSkpO1x0XFxcbiB9KVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjMxNWQ4OTE3ZjhlNzc0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zNyw2ICYjNDM7MzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS1kZWJ1Zy1wYWdlYWxsb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY3Nhbi1jaGVja3MuaFx1MDAzZVxuIFxuIHN0cnVjdCBtZW1wb2xpY3k7XG4gc3RydWN0IGFub25fdm1hO1xuQEAgLTIyODYsMjMgJiM0MzsyMjg3LDQ1IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB9XG4gXG4gI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1Ncbi1pbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZik7XG4mIzQzO2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MzsjaWZkZWYgQ09ORklHX05VTUFcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuLVx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgTk9ERVNfUEdTSElGVCkgXHUwMDI2IE5PREVTX01BU0s7XG4mIzQzO1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbiYjNDM7XHRyZXR1cm4gKG1kZi1cdTAwM2VmIFx1MDAzZVx1MDAzZSBOT0RFU19QR1NISUZUKSBcdTAwMjYgTk9ERVNfTUFTSztcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiAjZW5kaWZcbiYjNDM7I2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTlVNQVxuIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnAgPSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2NfbmlkKFx1MDAyNnAtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiAvKiBwYWdlIGFjY2VzcyB0aW1lIGJpdHMgbmVlZHMgdG8gaG9sZCBhdCBsZWFzdCA0IHNlY29uZHMgKi9cbkBAIC0yNTQxLDEyICYjNDM7MjU2NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbi1cdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuJiM0MztcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtXHUwMDNlZiwgU0VDVElPTlNfTUFTSyBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVCk7XG4mIzQzO1x0cmV0dXJuIChtZGYtXHUwMDNlZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCBhODQzMGE3YWUwNTQ0Ny4uZWZjZGRiOTkyNWFkZDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtNjUwLDcgJiM0Mzs2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqY3VyX3BhZ2UgPSBwYWdlc1swXTtcbi1cdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzZWN0aW9uID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNmN1cl9wYWdlLVx1MDAzZWZsYWdzKTtcbiBcdHNpemVfdCBpO1xuIFxuIFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG5AQCAtNjYwLDcgJiM0Mzs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXG4gXHRcdCAqIEluIHVucHJvYmxlbWF0aWMga2VybmVsIGNvbmZpZ3MsIHBhZ2VfdG9fc2VjdGlvbigpID09IDAgYW5kXG4gXHRcdCAqIHRoZSB3aG9sZSBjaGVjayB3aWxsIGdldCBvcHRpbWl6ZWQgb3V0LlxuIFx0XHQgKi9cbi1cdFx0aWYgKG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cdTAwM2VmbGFncykgIT0gc2VjdGlvbilcbiYjNDM7XHRcdGlmIChtZW1kZXNjX3NlY3Rpb24oXHUwMDI2Y3VyX3BhZ2UtXHUwMDNlZmxhZ3MpICE9IHNlY3Rpb24pXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi5lNjBkYWQ1NDZjYTY4ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC0xMjcyLDMxICYjNDM7MTI3MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiAjZGVmaW5lIEtBU0FOX1RBR19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBLQVNBTl9UQUdfV0lEVEgpIC0gMSlcbiAjZGVmaW5lIFpPTkVJRF9NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBaT05FSURfU0hJRlQpIC0gMSlcbiBcbi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXG4ge1xuLVx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuLVx0cmV0dXJuIChmbGFncy5mIFx1MDAzZVx1MDAzZSBaT05FU19QR1NISUZUKSBcdTAwMjYgWk9ORVNfTUFTSztcbiYjNDM7I2lmIFpPTkVTX1dJRFRIICE9IDBcbiYjNDM7XHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MtXHUwMDNlZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAoZmxhZ3MtXHUwMDNlZiBcdTAwM2VcdTAwM2UgWk9ORVNfUEdTSElGVCkgXHUwMDI2IFpPTkVTX01BU0s7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX3pvbmVudW0ocGFnZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBmb2xpb196b25lbnVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKG1kZikgPT0gWk9ORV9ERVZJQ0U7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdFZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXHUwMDNlZmxhZ3MpLCBwYWdlKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKSwgcGFnZSk7XG4gXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcDtcbiB9XG4gXG5AQCAtMTMxMSw5ICYjNDM7MTMxMyw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4gXHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcGFnZSAqYilcbiB7XG4tXHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShhLVx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGItXHUwMDNlZmxhZ3MpKVxuJiM0MztcdGlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmEtXHUwMDNlZmxhZ3MpICE9IG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2Yi1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmICghbWVtZGVzY19pc196b25lX2RldmljZShhLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2YS1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0cmV0dXJuIHBhZ2VfcGdtYXAoYSkgPT0gcGFnZV9wZ21hcChiKTtcbiB9XG5AQCAtMTMyMSw3ICYjNDM7MTMyMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4gZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTEzMzgsMTIgJiM0MzsxMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX2RldmljZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShmb2xpby1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfem9uZV9tb3ZhYmxlX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uMDIwYTk3Y2EwMThlOTkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTY5MDQsMTUgJiM0Mzs2OTA0LDE1IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHN0YXJ0IFx1MDAyNlx1MDAyNiBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cdTAwM2VmbGFncykgIT0gc3RhcnRfc2VjKSB7XG4mIzQzO1x0XHRpZiAoc3RhcnQgXHUwMDI2XHUwMDI2IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKSAhPSBzdGFydF9zZWMpIHtcbiBcdFx0XHRmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdGFydCwgaSAtIG5yX3N0YXJ0KTtcbiBcdFx0XHRzdGFydCA9IHBhZ2U7XG4gXHRcdFx0bnJfc3RhcnQgPSBpO1xuLVx0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIFx0XHR9IGVsc2UgaWYgKCFzdGFydCkge1xuIFx0XHRcdHN0YXJ0ID0gcGFnZTtcbiBcdFx0XHRucl9zdGFydCA9IGk7XG4tXHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gXHRcdH1cbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcbmluZGV4IDI4MWE2NTIzMzc5NWQ2Li45ZGVkMzE5NDk1YTA3MCAxMDA2NDRcbi0tLSBhL21tL3NsYWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYi5oXG5AQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNsYWJfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcbiBzdGF0aWMgaW5saW5lIGludCBzbGFiX25pZChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoc2xhYi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2NfbmlkKFx1MDAyNnNsYWItXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHBnX2RhdGFfdCAqc2xhYl9wZ2RhdChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbmRpZmYgLS1naXQgYS9tbS9zcGFyc2UuYyBiL21tL3NwYXJzZS5jXG5pbmRleCAxNmFjNmRmM2M4OWZhMi4uOGUzODQ3NzY0NTEzMTkgMTAwNjQ0XG4tLS0gYS9tbS9zcGFyc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3BhcnNlLmNcbkBAIC00Myw3ICYjNDM7NDMsNyBAQCBzdGF0aWMgdTggc2VjdGlvbl90b19ub2RlX3RhYmxlW05SX01FTV9TRUNUSU9OU10gX19jYWNoZWxpbmVfYWxpZ25lZDtcbiBzdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4gI2VuZGlmXG4gXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4mIzQzO2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gc2VjdGlvbl90b19ub2RlX3RhYmxlW21lbWRlc2Nfc2VjdGlvbihtZGYpXTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIHNldmVyYWwgaW5saW5lIG1lbW9yeSBkZXNjcmlwdG9yIGFjY2Vzc29ycyAoZS5nLiwgbWVtZGVzY19uaWQsIG1lbWRlc2Nfc2VjdGlvbikgdG8gdGFrZSBhIHBvaW50ZXIgdG8gbWVtZGVzY19mbGFnc190IGluc3RlYWQgb2YgcGFzc2luZyBpdCBieSB2YWx1ZS4gVGhpcyBmaXhlcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgS0NTQU4gYW5ub3RhdGlvbnMgc28gdGhleSBjb3JyZWN0bHkgbW9uaXRvciB0aGUgYWN0dWFsIHBhZ2UgZmxhZ3MgaW4gbWVtb3J5IHJhdGhlciB0aGFuIGEgbG9jYWwgc3RhY2sgY29weS4gSXQgYWxzbyBhZGRzICNpZmRlZiBDT05GSUdfTlVNQSB0byByZXR1cm4gMCBkaXJlY3RseSB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBhbmQgS0NTQU4gYW5ub3RhdGlvbiBmaXhlcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgdGFyZ2V0ZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4ZTE4MTMzMzE1NzVjNmYyMjgxMjRiYmM4ZDBkMzZiYTMwZGM4ZTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwNzozNjo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCmluZGV4IGVmYTY2MTBhY2JjNzk3Li5mODQwNGJjNzc3M2MyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCkBAIC01Myw3ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pCiAgKi8KICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZykJCQkJCVwKICh7CWNvbnN0IHN0cnVjdCBwYWdlICpfX3BnID0gKHBnKTsJCQkJXAotCWludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihfX3BnLSZndDtmbGFncyk7CQlcCiYjNDM7CWludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbigmYW1wO19fcGctJmd0O2ZsYWdzKTsJCVwKIAkodW5zaWduZWQgbG9uZykoX19wZyAtIF9fc2VjdGlvbl9tZW1fbWFwX2FkZHIoX19ucl90b19zZWN0aW9uKF9fc2VjKSkpOwlcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjMxNWQ4OTE3ZjhlNzc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11LWRlYnVnLXBhZ2VhbGxvYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rY3Nhbi1jaGVja3MuaCZndDsKIAogc3RydWN0IG1lbXBvbGljeTsKIHN0cnVjdCBhbm9uX3ZtYTsKQEAgLTIyODYsMjMgJiM0MzsyMjg3LDQ1IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIH0KIAogI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1MKLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTsKJiM0MztpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7I2lmZGVmIENPTkZJR19OVU1BCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7Ci0JcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBOT0RFU19QR1NISUZUKSAmYW1wOyBOT0RFU19NQVNLOwomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLSZndDtmLCBOT0RFU19NQVNLICZsdDsmbHQ7IE5PREVTX1BHU0hJRlQpOwomIzQzOwlyZXR1cm4gKG1kZi0mZ3Q7ZiAmZ3Q7Jmd0OyBOT0RFU19QR1NISUZUKSAmYW1wOyBOT0RFU19NQVNLOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiB9CiAjZW5kaWYKJiM0MzsjZW5kaWYKIAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQogc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLSZndDtmbGFncyk7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYWdlICpwID0gUEZfUE9JU09ORURfQ0hFQ0socGFnZSk7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO3AtJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO2ZvbGlvLSZndDtmbGFncyk7CiB9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZW5kaWYKIAogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwogLyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovCkBAIC0yNTQxLDEyICYjNDM7MjU2NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKQogCXBhZ2UtJmd0O2ZsYWdzLmYgfD0gKHNlY3Rpb24gJmFtcDsgU0VDVElPTlNfTUFTSykgJmx0OyZsdDsgU0VDVElPTlNfUEdTSElGVDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7Ci0JcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBTRUNUSU9OU19QR1NISUZUKSAmYW1wOyBTRUNUSU9OU19NQVNLOwomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLSZndDtmLCBTRUNUSU9OU19NQVNLICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQpOwomIzQzOwlyZXR1cm4gKG1kZi0mZ3Q7ZiAmZ3Q7Jmd0OyBTRUNUSU9OU19QR1NISUZUKSAmYW1wOyBTRUNUSU9OU19NQVNLOwogfQogI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCBhODQzMGE3YWUwNTQ0Ny4uZWZjZGRiOTkyNWFkZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtNjUwLDcgJiM0Mzs2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogc3RhdGljIGlubGluZSBzaXplX3QgbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG5yX3BhZ2VzKQogewogCXN0cnVjdCBwYWdlICpjdXJfcGFnZSA9IHBhZ2VzWzBdOwotCXVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS0mZ3Q7ZmxhZ3MpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oJmFtcDtjdXJfcGFnZS0mZ3Q7ZmxhZ3MpOwogCXNpemVfdCBpOwogCiAJZm9yIChpID0gMTsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewpAQCAtNjYwLDcgJiM0Mzs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpCiAJCSAqIEluIHVucHJvYmxlbWF0aWMga2VybmVsIGNvbmZpZ3MsIHBhZ2VfdG9fc2VjdGlvbigpID09IDAgYW5kCiAJCSAqIHRoZSB3aG9sZSBjaGVjayB3aWxsIGdldCBvcHRpbWl6ZWQgb3V0LgogCQkgKi8KLQkJaWYgKG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS0mZ3Q7ZmxhZ3MpICE9IHNlY3Rpb24pCiYjNDM7CQlpZiAobWVtZGVzY19zZWN0aW9uKCZhbXA7Y3VyX3BhZ2UtJmd0O2ZsYWdzKSAhPSBzZWN0aW9uKQogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBjYTI3MTIxODcxNDc1Yy4uZTYwZGFkNTQ2Y2E2OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMTI3MiwzMSAmIzQzOzEyNzIsMzMgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpCiAjZGVmaW5lIEtBU0FOX1RBR19NQVNLCQkoKDFVTCAmbHQ7Jmx0OyBLQVNBTl9UQUdfV0lEVEgpIC0gMSkKICNkZWZpbmUgWk9ORUlEX01BU0sJCSgoMVVMICZsdDsmbHQ7IFpPTkVJRF9TSElGVCkgLSAxKQogCi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpCiYjNDM7c3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0oY29uc3QgbWVtZGVzY19mbGFnc190ICpmbGFncykKIHsKLQlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyAmbHQ7Jmx0OyBaT05FU19QR1NISUZUKTsKLQlyZXR1cm4gKGZsYWdzLmYgJmd0OyZndDsgWk9ORVNfUEdTSElGVCkgJmFtcDsgWk9ORVNfTUFTSzsKJiM0MzsjaWYgWk9ORVNfV0lEVEggIT0gMAomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MtJmd0O2YsIFpPTkVTX01BU0sgJmx0OyZsdDsgWk9ORVNfUEdTSElGVCk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAoZmxhZ3MtJmd0O2YgJmd0OyZndDsgWk9ORVNfUEdTSElGVCkgJmFtcDsgWk9ORVNfTUFTSzsKIH0KIAogc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBwYWdlX3pvbmVudW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX3pvbmVudW0oJmFtcDtwYWdlLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tJmd0O2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG1lbWRlc2Nfem9uZW51bSgmYW1wO2ZvbGlvLSZndDtmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0UKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7CiAJcmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLSZndDtmbGFncyksIHBhZ2UpOwomIzQzOwlWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZSgmYW1wO3BhZ2UtJmd0O2ZsYWdzKSwgcGFnZSk7CiAJcmV0dXJuIHBhZ2VfZm9saW8ocGFnZSktJmd0O3BnbWFwOwogfQogCkBAIC0xMzExLDkgJiM0MzsxMzEzLDkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLAogCQkJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGFnZSAqYikKIHsKLQlpZiAobWVtZGVzY19pc196b25lX2RldmljZShhLSZndDtmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShiLSZndDtmbGFncykpCiYjNDM7CWlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKCZhbXA7YS0mZ3Q7ZmxhZ3MpICE9IG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoJmFtcDtiLSZndDtmbGFncykpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYS0mZ3Q7ZmxhZ3MpKQomIzQzOwlpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoJmFtcDthLSZndDtmbGFncykpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBwYWdlX3BnbWFwKGEpID09IHBhZ2VfcGdtYXAoYik7CiB9CkBAIC0xMzIxLDcgJiM0MzsxMzIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSwKIGV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEzMzgsMTIgJiM0MzsxMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfem9uZV9kZXZpY2VfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKCZhbXA7cGFnZS0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShmb2xpby0mZ3Q7ZmxhZ3MpOwomIzQzOwlyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZSgmYW1wO2ZvbGlvLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX21vdmFibGVfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBlZTkwMmE0NjhjMmY1Yi4uMDIwYTk3Y2EwMThlOTkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTY5MDQsMTUgJiM0Mzs2OTA0LDE1IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzdGFydCAmYW1wOyZhbXA7IG1lbWRlc2Nfc2VjdGlvbihwYWdlLSZndDtmbGFncykgIT0gc3RhcnRfc2VjKSB7CiYjNDM7CQlpZiAoc3RhcnQgJmFtcDsmYW1wOyBtZW1kZXNjX3NlY3Rpb24oJmFtcDtwYWdlLSZndDtmbGFncykgIT0gc3RhcnRfc2VjKSB7CiAJCQlmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdGFydCwgaSAtIG5yX3N0YXJ0KTsKIAkJCXN0YXJ0ID0gcGFnZTsKIAkJCW5yX3N0YXJ0ID0gaTsKLQkJCXN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLSZndDtmbGFncyk7CiYjNDM7CQkJc3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKCZhbXA7cGFnZS0mZ3Q7ZmxhZ3MpOwogCQl9IGVsc2UgaWYgKCFzdGFydCkgewogCQkJc3RhcnQgPSBwYWdlOwogCQkJbnJfc3RhcnQgPSBpOwotCQkJc3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtJmd0O2ZsYWdzKTsKJiM0MzsJCQlzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oJmFtcDtwYWdlLSZndDtmbGFncyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaAppbmRleCAyODFhNjUyMzM3OTVkNi4uOWRlZDMxOTQ5NWEwNzAgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiLmgKQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpzbGFiX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHNsYWJfbmlkKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKQogewotCXJldHVybiBtZW1kZXNjX25pZChzbGFiLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO3NsYWItJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBwZ19kYXRhX3QgKnNsYWJfcGdkYXQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpCmRpZmYgLS1naXQgYS9tbS9zcGFyc2UuYyBiL21tL3NwYXJzZS5jCmluZGV4IDE2YWM2ZGYzYzg5ZmEyLi44ZTM4NDc3NjQ1MTMxOSAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3BhcnNlLmMKQEAgLTQzLDcgJiM0Mzs0Myw3IEBAIHN0YXRpYyB1OCBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkOwogc3RhdGljIHUxNiBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkOwogI2VuZGlmCiAKLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzO2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlyZXR1cm4gc2VjdGlvbl90b19ub2RlX3RhYmxlW21lbWRlc2Nfc2VjdGlvbihtZGYpXTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg2OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyB0aGUgYG1lbWRlc2NfZmxhZ3NfdGAgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBhIHJlZmFjdG9yaW5nIG9mIGhvdyB3ZSBoYW5kbGUgdGhlIGBtZW1kZXNjX2ZsYWdzX3RgIHN0cnVjdHVyZSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgbWVtb3J5IGRlc2NyaXB0b3IgKG1lbWRlc2MpIGZ1bmN0aW9ucy4gVGhlIGtleSBjaGFuZ2UgaXMgdG8gbW9kaWZ5IHRoZSBzaWduYXR1cmVzIG9mIHNldmVyYWwgZnVuY3Rpb25zOiBgbWVtZGVzY19uaWRgLCBgbWVtZGVzY19zZWN0aW9uYCwgYG1lbWRlc2Nfem9uZW51bWAsIGFuZCBgbWVtZGVzY19pc196b25lX2RldmljZWAuIEluc3RlYWQgb2YgcGFzc2luZyBgbWVtZGVzY19mbGFnc190YCBieSB2YWx1ZSwgdGhleSYjMzk7cmUgbm93IHRha2luZyBhIHBvaW50ZXIgdG8gaXQsIHNvIGBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKWAgaXMgbm93IGBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilgLgoKQmV5b25kIHRoYXQsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHVwZGF0aW5nIHRoZSBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBtYWNybyBjYWxscyB0byByZWZsZWN0IHRoaXMgY2hhbmdlIOKAkyBzaGlmdGluZyBmcm9tIGBtZGYuZmAgdG8gYG1kZi0mZ3Q7ZmAuIEl0IHNlZW1zIGxpa2UgYSBjb25zaXN0ZW50IHBhdHRlcm4uIFRoZXJlJiMzOTtzIGFsc28gc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoYXBwZW5pbmcgd2l0aCBgI2lmZGVmIENPTkZJR19OVU1BYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgdGhlc2UgY29uZGl0aW9uYWxzIGFyb3VuZCB0aGUgYG1lbWRlc2NfbmlkYCBmdW5jdGlvbiwgYWxvbmcgd2l0aCBgcGFnZV90b19uaWRgIGFuZCBgZm9saW9fbmlkYCwgdG8gcmV0dXJuIDAgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBTbyB3aGVuIE5VTUEgaXMgZGlzYWJsZWQsIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHNpbXBseSByZXR1cm4gMC4gVGhlIHBhdGNoIGFsc28gYWRkcyBgI2lmIFpPTkVTX1dJRFRIICE9IDBgIGFyb3VuZCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBpbiBgbWVtZGVzY196b25lbnVtYC4KCkZyb20gYSBjdXJzb3J5IGdsYW5jZSBhdCB0aGUgY2hhbmdlZCBmaWxlcyDigJMgYGluY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAsIGBtbS9wYWdlX2FsbG9jLmNgLCBgbW0vc2xhYi5oYCwgYW5kIGBtbS9zcGFyc2UuY2Ag4oCTIGl0IGFwcGVhcnMgdG8gYmUgYSBtYWNybyBmaXggYW5kIGEgcG9pbnRlciBvcHRpbWl6YXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJlZmFjdG9yaW5nIGFzcGVjdCBvZiBwYXNzaW5nIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIHRoZSBgI2lmZGVmIENPTkZJR19OVU1BYCBjb25kaXRpb25hbCBsb2dpYy4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgcHVyZWx5IGEgcmVmYWN0b3JpbmcuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IGZ1bmN0aW9uYWwgbG9naWMgaGFzIGNoYW5nZWQsIGJ1dCBhdCB0aGlzIHN0YWdlLCBpdCBzZWVtcyB1bmxpa2VseSBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgcHJpbWFyeSBnb2FsIGlzIGxpa2VseSB0byBpbXByb3ZlIGVmZmljaWVuY3kgKGVzcGVjaWFsbHkgbWVtb3J5IGNvcGllcyksIG9yIHBvdGVudGlhbGx5IHJlZHVjZSBzdGFjayB1c2FnZSB3aXRoIHRoZSBwb2ludGVyIHBhcmFtZXRlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGBtZW1kZXNjX2ZsYWdzX3RgIGFjdHVhbGx5IGlzIHVuZGVyIHRoZSBob29kLi4uIGl0JiMzOTtzIHByb2JhYmx5IGEgc3RydWN0IG9yIHR5cGVkZWYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0eXBlZGVmLiptZW1kZXNjX2ZsYWdzX3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDoKCioqRGl2aW5nIGludG8gYG1lbWRlc2NfZmxhZ3NfdGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBtZW1kZXNjX2ZsYWdzX3RgIGlzIGFsbCBhYm91dC4gVGhlIGZpcnN0IHN0ZXAgaXMgY2xlYXJseSB0byBmaW5kIGl0cyBkZWZpbml0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIHN0cnVjdCBvciB0eXBlIGlzIGRlZmluZWQgaW4gdGhlIHByb2plY3QmIzM5O3Mgc291cmNlIGNvZGUuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgc28gdW5kZXJzdGFuZGluZyBpdHMgc3RydWN0dXJlIHdpbGwgcHJvYmFibHkgdW5sb2NrIGEgZ29vZCBjaHVuayBvZiB1bmRlcnN0YW5kaW5nIGFib3V0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciB0aGUgbGl0ZXJhbCBzdHJpbmcgYG1lbWRlc2NfZmxhZ3NfdGAuIEhvcGVmdWxseSwgdGhlIHRvb2xpbmcgY2FuIG5hdmlnYXRlIG1lIGRpcmVjdGx5IHRvIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZSBvciBzb3VyY2UgY29kZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSBpdHMgbWVtYmVycyBhbmQgZGF0YSB0eXBlcywgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCBzb21lIGV4cGxhbmF0b3J5IGNvbW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG1lbWRlc2NfZmxhZ3NfdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqUG9zc2libGUgRGF0YSBTdHJ1Y3R1cmUgZm9yIE1lbW9yeSBEZXNjcmlwdG9yIEZsYWdzKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHN0cnVjdHVyZSB0byBob2xkIG1lbW9yeSBkZXNjcmlwdG9yIGZsYWdzLCBwcm9iYWJseSBmb3Igc29tZSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHNvbWV0aGluZyB2ZXJ5IGJhc2ljIGJ1dCBlZmZpY2llbnQ6IGEgYHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBmOyB9IG1lbWRlc2NfZmxhZ3NfdDtgLiBUaGlzIGlzIGxpa2VseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIGB1bnNpZ25lZCBsb25nYCBiZWNhdXNlIGl0IGdpdmVzIHVzIGEgZGVjZW50IG51bWJlciBvZiBiaXRzIHRvIHdvcmsgd2l0aCBmb3IgdmFyaW91cyBmbGFncyB3aXRob3V0IGV4Y2Vzc2l2ZSBtZW1vcnkgb3ZlcmhlYWQgb24gbW9zdCBtb2Rlcm4gYXJjaGl0ZWN0dXJlcy4gSXQmIzM5O3MgYSBwcmFnbWF0aWMgY2hvaWNlIGZvciBzdG9yaW5nIGEgY29sbGVjdGlvbiBvZiBib29sZWFuIHZhbHVlcyAodGhlIGluZGl2aWR1YWwgZmxhZ3MpLiBPZiBjb3Vyc2UsIHRoaXMgaXMganVzdCBhIHF1aWNrIGFuZCBkaXJ0eSBjb25jZXB0dWFsIHN0cnVjdHVyZS4gSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIGFsaWdubWVudCBpc3N1ZXMsIHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLCBhbmQgZXhhY3RseSAqd2hhdCogZmxhZ3MgYXJlIG5lZWRlZCBiZWZvcmUgc2V0dGxpbmcgb24gdGhpcyBhcyB0aGUgZGVmaW5pdGl2ZSBzb2x1dGlvbi4gSSYjMzk7ZCBhbHNvIGxvb2sgYXQgY29tcGlsZXItc3BlY2lmaWMgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBsYXlvdXQuIFRoZSBrZXkgaXMgdG8ga2VlcCBpdCBzaW1wbGUsIGZhc3QsIGFuZCBlYXN5IHRvIHVuZGVyc3RhbmQgYXQgdGhpcyBwb2ludC4gSSYjMzk7ZCBtb3ZlIG9uIHRvIHJlZmluaW5nIGl0IGJhc2VkIG9uIHRoZSBleGFjdCB1c2FnZSByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZGVzY19mbGFnc190JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD0yMjg0PXN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI4OS0jaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xuaW5jbHVkZS9saW51eC9tbS5oOjIyOTA6aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKTtcbmluY2x1ZGUvbGludXgvbW0uaC0yMjkxLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5Mi0jaWZkZWYgQ09ORklHX05VTUFcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkzOnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTQte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMjk4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5OTpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yMzAwLXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MjU2MT1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yNTY2LVxuaW5jbHVkZS9saW51eC9tbS5oOjI1Njc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yNTY4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU3Mi0jZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MjU3MzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuaW5jbHVkZS9saW51eC9tbS5oLTI1NzQte1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0zOT10eXBlZGVmIHN0cnVjdCB7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDAtXHR1bnNpZ25lZCBsb25nIGY7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NDE6fSBtZW1kZXNjX2ZsYWdzX3Q7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDItXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTgwPXN0cnVjdCBwYWdlIHtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo4MTpcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcdFx0LyogQXRvbWljIGZsYWdzLCBzb21lIHBvc3NpYmx5XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODItXHRcdFx0XHRcdCAqIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NDAyPXN0cnVjdCBmb2xpbyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwNi1cdC8qIHB1YmxpYzogKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo0MDc6XHRcdFx0bWVtZGVzY19mbGFnc190IGZsYWdzO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwOC1cdFx0XHR1bmlvbiB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTU3Mz1zdHJ1Y3QgcHRkZXNjIHtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1NzQ6XHRtZW1kZXNjX2ZsYWdzX3QgcHRfZmxhZ3M7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNTc1LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTIyND1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzQtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyNzU6c3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0oY29uc3QgbWVtZGVzY19mbGFnc190ICpmbGFncylcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI3Ni17XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMjg4PXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5My0jaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyOTQ6c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyOTUte1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTMyMz1leHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyNS0jZWxzZVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMzI2OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzI3LXtcbi0tXG5tbS9zbGFiLmg9OTg9c3RydWN0IHNsYWIge1xubW0vc2xhYi5oOjk5Olx0bWVtZGVzY19mbGFnc190IGZsYWdzO1xubW0vc2xhYi5oLTEwMC1cbi0tXG5tbS9zcGFyc2UuYz00Mz1zdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4tLVxubW0vc3BhcnNlLmMtNDUtXG5tbS9zcGFyc2UuYzo0NjppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG5tbS9zcGFyc2UuYy00Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzNQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gdGhlIG1haW4gY2hhbmdlIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgYG1lbWRlc2NfZmxhZ3NfdGAuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgc3VnZ2VzdGluZyBwYXNzaW5nIGl0IGJ5IHBvaW50ZXIgbm93IGluc3RlYWQgb2YgYnkgdmFsdWUuIEhtbW0sIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBQYXNzaW5nIGJ5IHBvaW50ZXIgaW1wbGllcyB0aGUgcG9zc2liaWxpdHkgb2YgbW9kaWZpY2F0aW9uIGluIHBsYWNlLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGJlbmVmaXQgY291bGQgYmUgcmVkdWNlZCBjb3B5aW5nLCBlc3BlY2lhbGx5IGlmIHRoZSBzdHJ1Y3R1cmUgaXMgbGFyZ2UuIExldCYjMzk7cyBkaWcgZGVlcGVyIHRvIGFzc2VzcyB0aGUgdHJhZGUtb2Zmcy4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYEFTU0VSVF9FWENMVVNJVkVfQklUU2AuIFRoYXQmIzM5O3MgYSBLQ1NBTiBtYWNybywgaXNuJiMzOTt0IGl0PyBNeSBzcGlkZXIgc2Vuc2VzIGFyZSB0aW5nbGluZy4gS0NTQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyBkYXRhIHJhY2VzLCBhbmQgdGhpcyBtYWNybyBpcyBwcm9iYWJseSBjcnVjaWFsIGZvciBlbmZvcmNpbmcgZXhjbHVzaXZlIGFjY2VzcyB0byBzcGVjaWZpYyBiaXRmaWVsZHMgd2l0aGluIHRoaXMgc3RydWN0dXJlLCByaWdodD8gSXQgY291bGQgYmUgcHJvdGVjdGluZyBhZ2FpbnN0IHNpbXVsdGFuZW91cyByZWFkcyBhbmQgd3JpdGVzIGZyb20gZGlmZmVyZW50IHRocmVhZHMsIG9yIG1heWJlIGV2ZW4gd2l0aGluIGludGVycnVwdCBjb250ZXh0cy4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIHVuZGVyc3RhbmQgaG93IHRoaXMgbWFjcm8gd29ya3MgaW4gcmVsYXRpb24gdG8gdGhpcyBjaGFuZ2UuIFdlIG5lZWQgdG8ga25vdyB3aGF0IGl0IGRvZXMgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGZsYWcgc3RydWN0dXJlLCBiZWNhdXNlIHRoZSBLQ1NBTiBhc3BlY3QgaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0byBlbnN1cmUgd2UgaGF2ZSBub3QgY3JlYXRlZCBhIGxhdGVudCBjb25jdXJyZW5jeSBidWcuIEkgYmV0dGVyIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVNTRVJUX0VYQ0xVU0lWRV9CSVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdD0yMzY9cHJvcGVydGllcyBvZiBjb25jdXJyZW50IGNvZGUgd2hlcmUgYnVncyB3b3VsZCBub3QgbWFuaWZlc3QgYXMgZGF0YSByYWNlcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY3Nhbi5yc3QtMjQwLSAgICAgICAgICAgICAgICBBU1NFUlRfRVhDTFVTSVZFX0FDQ0VTUyBBU1NFUlRfRVhDTFVTSVZFX0FDQ0VTU19TQ09QRURcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdDoyNDE6ICAgICAgICAgICAgICAgIEFTU0VSVF9FWENMVVNJVkVfQklUU1xuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2NzYW4ucnN0LTI0Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oPTIzMj1zdGF0aWMgaW5saW5lIHZvaWQgX19rY3Nhbl9kaXNhYmxlX2N1cnJlbnQodm9pZCkgeyB9XG4tLVxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00NzAtLyoqXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjQ3MTogKiBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgLSBhc3NlcnQgbm8gY29uY3VycmVudCB3cml0ZXMgdG8gc3Vic2V0IG9mIGJpdHMgaW4gQHZhclxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00NzItICpcbi0tXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTQ5MC0gKlxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo0OTE6ICpcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncywgUkVBRF9PTkxZX01BU0spO1xuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00OTItICpcdGZvbyA9IChSRUFEX09OQ0UoZmxhZ3MpIFx1MDAyNiBSRUFEX09OTFlfTUFTSykgXHUwMDNlXHUwMDNlIFJFQURfT05MWV9TSElGVDtcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNDkzLSAqXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjQ5NDogKiBOb3RlOiBUaGUgYWNjZXNzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMoKSBpcyBhc3N1bWVkXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTQ5NS0gKiB0byBhY2Nlc3MgdGhlIG1hc2tlZCBiaXRzIG9ubHksIGFuZCBLQ1NBTiBvcHRpbWlzdGljYWxseSBhc3N1bWVzIGl0IGlzXG4tLVxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC01MDQtICpcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmg6NTA1OiAqXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MsIFJFQURfT05MWV9NQVNLKTtcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTA2LSAqXHRmb28gPSAoZmxhZ3MgXHUwMDI2IFJFQURfT05MWV9NQVNLKSBcdTAwM2VcdTAwM2UgUkVBRF9PTkxZX1NISUZUO1xuLS1cbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTE1LSAqXHRzcGluX2xvY2soXHUwMDI2Zm9vX2xvY2spO1xuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo1MTY6ICpcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncywgRk9PX01BU0spO1xuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC01MTctICpcdG9sZF9mbGFncyA9IGZsYWdzO1xuLS1cbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTI0LSAqL1xuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo1MjU6I2RlZmluZSBBU1NFUlRfRVhDTFVTSVZFX0JJVFModmFyLCBtYXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTUyNi1cdGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MjI5Mz1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk0LXtcbmluY2x1ZGUvbGludXgvbW0uaDoyMjk1Olx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk2LVx0cmV0dXJuIChtZGYtXHUwMDNlZiBcdTAwM2VcdTAwM2UgTk9ERVNfUEdTSElGVCkgXHUwMDI2IE5PREVTX01BU0s7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI1Njc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yNTY4LXtcbmluY2x1ZGUvbGludXgvbW0uaDoyNTY5Olx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBTRUNUSU9OU19NQVNLIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcbmluY2x1ZGUvbGludXgvbW0uaC0yNTcwLVx0cmV0dXJuIChtZGYtXHUwMDNlZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMjc1PXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjc3LSNpZiBaT05FU19XSURUSCAhPSAwXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyNzg6XHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MtXHUwMDNlZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzktI2VuZGlmXG4tLVxua2VybmVsL2tjc2FuL2tjc2FuX3Rlc3QuYz0zOTA9c3RhdGljIG5vaW5saW5lIHZvaWQgdGVzdF9rZXJuZWxfYXNzZXJ0X2JpdHNfY2hhbmdlKHZvaWQpXG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jLTM5MS17XG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jOjM5MjpcdEFTU0VSVF9FWENMVVNJVkVfQklUUyh0ZXN0X3ZhciwgVEVTVF9DSEFOR0VfQklUUyk7XG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jLTM5My19XG4tLVxua2VybmVsL2tjc2FuL2tjc2FuX3Rlc3QuYz0zOTU9c3RhdGljIG5vaW5saW5lIHZvaWQgdGVzdF9rZXJuZWxfYXNzZXJ0X2JpdHNfbm9jaGFuZ2Uodm9pZClcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmMtMzk2LXtcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmM6Mzk3Olx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHRlc3RfdmFyLCB+VEVTVF9DSEFOR0VfQklUUyk7XG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jLTM5OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwOTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5kZXJzdGFuZGluZyB0aGUgSW1wbGljYXRpb25zIG9mIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFModmFyLCBtYXNrKWAgbWFjcm8gYW5kIHRyeWluZyB0byBncmFzcCBpdHMgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3YXMgc2ltcGx5IGNoZWNraW5nIHRoZSB2YWx1ZSBvZiBgdmFyYCBhZ2FpbnN0IHRoZSBtYXNrLiBCdXQgaG9sZCBvbiwgaXQgYXBwZWFycyB0aGF0IHRoZSBtYWNybyBkb2VzbiYjMzk7dCBqdXN0IHJlYWQgYHZhcmA7IGl0ICpjcmVhdGVzKiBhIHJlYWQvd3JpdGUgYWNjZXNzLiBJbnRyaWd1aW5nIQoKVGhpcyBicmluZ3MgbWUgdG8gdGhlIGNvcmUgaXNzdWUuIElmIEkgcGFzc2VkIGBtZGZgIGJ5IHZhbHVlLCB0aGUgYG1kZi5mYCBtZW1iZXIgd291bGQgYmUgYSBsb2NhbCBzdGFjayB2YXJpYWJsZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBjYWxsIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLmYsIC4uLilgIHdvdWxkIGJlIHZlcmlmeWluZyBjb25jdXJyZW50IHdyaXRlcyB0byAqdGhhdCBsb2NhbCBjb3B5KiBvbiB0aGUgc3RhY2ssIG5vdCB0aGUgYWN0dWFsIGBwYWdlLSZndDtmbGFnc2AgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQhIEFic29sdXRlbHkgdXNlbGVzcy4gQSBjb21wbGV0ZSB3YXN0ZSBvZiB0aW1lLgoKSG93ZXZlciwgd2hlbiBgbWRmYCBpcyBhIHBvaW50ZXIsIGBtZGYtJmd0O2ZgIGNvcnJlY3RseSBkZXJlZmVyZW5jZXMgdGhlIHBvaW50ZXIsIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgbWVtb3J5IGxvY2F0aW9uIG9mIHRoZSAqYWN0dWFsKiBgcGFnZS0mZ3Q7ZmxhZ3NgLiBUaHVzLCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB3aWxsIGNvcnJlY3RseSBjaGVjayBmb3IgY29uY3VycmVudCB3cml0ZXMgdG8gdGhlIHRhcmdldCBtZW1vcnkuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIG1hY3JvIGl0c2VsZi4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0ICpcdHNwaW5fdW5sb2NrKFx1MDAyNmZvb19sb2NrKTtcbiA1MjE6XHQgKlxuIDUyMjpcdCAqIEB2YXI6IHZhcmlhYmxlIHRvIGFzc2VydCBvblxuIDUyMzpcdCAqIEBtYXNrOiBvbmx5IGNoZWNrIGZvciBtb2RpZmljYXRpb25zIHRvIGJpdHMgc2V0IGluIEBtYXNrXG4gNTI0Olx0ICovXG4gNTI1Olx0I2RlZmluZSBBU1NFUlRfRVhDTFVTSVZFX0JJVFModmFyLCBtYXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gNTI2Olx0XHRkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gNTI3Olx0XHRcdGtjc2FuX3NldF9hY2Nlc3NfbWFzayhtYXNrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gNTI4Olx0XHRcdF9fa2NzYW5fY2hlY2tfYWNjZXNzKFx1MDAyNih2YXIpLCBzaXplb2YodmFyKSwgS0NTQU5fQUNDRVNTX0FTU0VSVCk7XFxcbiA1Mjk6XHRcdFx0a2NzYW5fc2V0X2FjY2Vzc19tYXNrKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiA1MzA6XHRcdFx0a2NzYW5fYXRvbWljX25leHQoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiA1MzE6XHRcdH0gd2hpbGUgKDApXG4gNTMyOlx0XG4gNTMzOlx0I2VuZGlmIC8qIF9MSU5VWF9LQ1NBTl9DSEVDS1NfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODUzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktDU0FOIEZpeCBhbmQgTlVNQSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCB5ZXMhIFRoZSBsaW5lIGBfX2tjc2FuX2NoZWNrX2FjY2VzcygmYW1wOyh2YXIpLCBzaXplb2YodmFyKSwgS0NTQU5fQUNDRVNTX0FTU0VSVCk7YCBpcyB0aGUga2V5LiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBpZiBgdmFyYCB3YXMgc29tZXRoaW5nIGxpa2UgYG1kZi5mYCB3aGVyZSBgbWRmYCB3YXMgcGFzc2VkIGJ5IHZhbHVlLCB0aGVuIGAmYW1wOyhtZGYuZilgIHdvdWxkIGJlIHRoZSBhZGRyZXNzIG9mIHRoZSAqbG9jYWwqIGNvcHkgb24gdGhlIHN0YWNrLiBLQ1NBTiB3b3VsZCBpbmNvcnJlY3RseSBtb25pdG9yIHRoZSBzdGFjayB2YXJpYWJsZSBmb3IgY29uY3VycmVudCB3cml0ZXMuIFRoYXQmIzM5O3MgY2xlYXJseSB3cm9uZy4KClRoZSBmaXgsIGNoYW5naW5nIHRoZSBzaWduYXR1cmUgdG8gYGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmYCwgaXMgYnJpbGxpYW50LiBOb3csIGBtZGYtJmd0O2ZgIGlzIHBhc3NlZCB0byBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCwgYW5kIGAmYW1wOyhtZGYtJmd0O2YpYCBiZWNvbWVzIHRoZSAqYWN0dWFsKiBhZGRyZXNzIG9mIGBwYWdlLSZndDtmbGFnc2AuICBUaGlzIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50ZWQhIFRoaXMgbWVhbnMgS0NTQU4gd2lsbCBjb3JyZWN0bHkgbW9uaXRvciBgcGFnZS0mZ3Q7ZmxhZ3NgIGZvciBjb25jdXJyZW50IHdyaXRlcywgZmluYWxseSBlbnN1cmluZyBwcm9wZXIgY29uY3VycmVuY3kgY2hlY2tpbmcgb24gdGhvc2UgYml0cy4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQgKnNob3VsZG4mIzM5O3QqIGJlY2F1c2UgS0NTQU4gaXMgYSBkeW5hbWljIGFuYWx5c2lzIHRvb2wsIHJpZ2h0PyBUaGUgcGF0Y2ggaXMgb25seSBzdXBwb3NlZCB0byBmaXggS0NTQU4gY2hlY2tzLiBCdXQgaXQgKmFsc28qIGFkZHMgYCNpZmRlZiBDT05GSUdfTlVNQWAgdG8gYG1lbWRlc2NfbmlkYCBhbmQgYHBhZ2VfdG9fbmlkYC9gZm9saW9fbmlkYCB0byByZXR1cm4gMCB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSWYgTlVNQSBpcyBkaXNhYmxlZCwgZG9lcyBgbWVtZGVzY19uaWRgIHJldHVybmluZyAwIGFjdHVhbGx5ICpjaGFuZ2UqIGhvdyB0aGluZ3Mgd29yaz8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIG9yaWdpbmFsIGNvZGU6CgpgYGBjCnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCnsKCXJldHVybiAobWRmLmYgJmd0OyZndDsgTk9ERVNfUEdTSElGVCkgJmFtcDsgTk9ERVNfTUFTSzsKfQpgYGAKCk9rYXksIGlmIE5VTUEgKmlzKiBkaXNhYmxlZCwgdGhlbiBgTk9ERVNfUEdTSElGVGAgaXMgKnByb2JhYmx5KiAwLCBhbmQgYE5PREVTX01BU0tgIGlzIGxpa2VseSBhbHNvIDAuIExldCBtZSBqdXN0IGNoZWNrIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBOT0RFU19NQVNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MTIyND1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNjgtI2RlZmluZSBaT05FU19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBaT05FU19XSURUSCkgLSAxKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjY5OiNkZWZpbmUgTk9ERVNfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgTk9ERVNfV0lEVEgpIC0gMSlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI3MC0jZGVmaW5lIFNFQ1RJT05TX01BU0tcdFx0KCgxVUwgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1dJRFRIKSAtIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogVmFyaWFibGUgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGVlcGVyIGFuYWx5c2lzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgYSBzcGVjaWZpYywgbGlrZWx5IGNydWNpYWwsIHBhcmFtZXRlci4gVGhlIHBocmFzZSAmIzM0O0xldCYjMzk7cyBjaGVjayBgTk9ERVNfV0lEVEhgJiMzNDsgdHJpZ2dlcnMgYSBtZW50YWwgc2Nhbi4gTXkgYnJhaW4gaXMgaW1tZWRpYXRlbHkgYXNzZXNzaW5nIHRoZSBjb250ZXh0LCBhc3N1bWluZyBpdCByZWxhdGVzIHRvIGEgY29kZWJhc2Ugb3Igc3lzdGVtIGRlc2lnbiB3aGVyZSBgTk9ERVNfV0lEVEhgIGlzIGEgZGVmaW5lZCBjb25zdGFudCBvciB2YXJpYWJsZS4gSXMgdGhpcyByZWxhdGVkIHRvIGEgdXNlciBpbnRlcmZhY2U/IENvbXB1dGF0aW9uYWwgZ2VvbWV0cnk/IE5ldHdvcmsgYXJjaGl0ZWN0dXJlPyBUaGUgc3BlY2lmaWMgZmllbGQgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZGVmaW5lZCwgYnV0IHRoZSBwcmVjaXNpb24gaW5kaWNhdGVzIGl0cyBwb3RlbnRpYWxseSBjZW50cmFsIGltcG9ydGFuY2UgdG8gc29tZSBwcm9jZXNzLiBNeSBmb2N1cyBub3cgaXMgb24gd2hhdCB0aGlzIHZhcmlhYmxlIHJlcHJlc2VudHMgYW5kIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIHRoaXMgYnJvYWRlciBjb250ZXh0LiBJIG5lZWQgdG8gZW5zdXJlIGl0cyB2YWx1ZSBpcyB3aGF0IEkgZXhwZWN0LCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIGlzbiYjMzk7dCBiZWluZyBvdmVyd3JpdHRlbiBhbnl3aGVyZSBpbmFkdmVydGVudGx5LiBUaGUgdXJnZW5jeSBzdWdnZXN0cyB0aGF0IGEgcG90ZW50aWFsIHByb2JsZW0gbWlnaHQgaGluZ2Ugb24gdGhpcyBzcGVjaWZpYyB3aWR0aCBwYXJhbWV0ZXIgYW5kIGl0IG11c3QgYmUgdmVyaWZpZWQgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBOT0RFU19XSURUSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0LmgtNTktXHRcdTAwM2M9IEJJVFNfUEVSX0xPTkcgLSBOUl9QQUdFRkxBR1NcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy1sYXlvdXQuaDo2MDojZGVmaW5lIE5PREVTX1dJRFRIXHRcdE5PREVTX1NISUZUXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0LmgtNjEtI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVApXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTYzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0Lmg6NjQ6I2RlZmluZSBOT0RFU19XSURUSFx0XHQwXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0LmgtNjUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjE0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogSXMgdGhpcyBXb3J0aCBGdXp6aW5nPyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpZiBgTk9ERVNfV0lEVEhgIGlzIHplcm8sIHRoZSBtYXNrIGlzIGFsc28gemVybywgc28gdGhlIHJlc3VsdCBpcyBhbHJlYWR5IHplcm8uIFRoZSBwYXRjaCBqdXN0IHNlZW1zIHRvIHNob3J0LWNpcmN1aXQgdGhlIGNhbGwgYW5kIGF2b2lkIGEgcG90ZW50aWFsIHJlYWQuIEJ1dCB3YWl0LCBpdCBhbHNvIGFkZHMgYCNpZmRlZiBDT05GSUdfTlVNQWAgYW5kIHJldHVybnMgMCBkaXJlY3RseSwgd2hpY2ggY291bGQgYmUgYW4gb3B0aW1pemF0aW9uIG9yIGF2b2lkIHRoZSBLQ1NBTiBjaGVjayB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoZSBrZXkgaXMgdGhhdCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBub3cgY29ycmVjdGx5IGNoZWNrcyBmb3IgY29uY3VycmVudCB3cml0ZXMgdG8gcGFnZSBmbGFncywgYW5kIHRoZSBgUEZfUE9JU09ORURfQ0hFQ0tgIGNhbGwgaXMgYnlwYXNzZWQgd2hlbiBOVU1BIGlzIGRpc2FibGVkLgoKQmVmb3JlIHRoZSBwYXRjaCwgZXZlbiB3aXRoIE5VTUEgZGlzYWJsZWQsIGBwYWdlX3RvX25pZGAgY2FsbGVkIGBQRl9QT0lTT05FRF9DSEVDS2AsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBwYW5pYyBvbiBhIHBvaXNvbmVkIHBhZ2UuIE5vdywgaXQganVzdCByZXR1cm5zIDAuIFNvLCBpdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXMgaXQgcmVtb3ZlcyBhIHBvaXNvbiBjaGVjaywgYnV0IGlzIGl0IHdvcnRoIGZ1enppbmc/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBGdXp6aW5nIHdvdWxkbiYjMzk7dCBmaW5kIGFueXRoaW5nIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoaXMgcmVtb3ZhbC4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgZml4aW5nIHRoZSBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBjaGVjayBmb3IgS0NTQU4uIFRoaXMgaXMgYSBLQ1NBTiBhbm5vdGF0aW9uLCBhIGRlYnVnZ2luZyB0b29sLCBhbmQgaXQgZG9lc24mIzM5O3QgY2hhbmdlIHRoZSBmdW5jdGlvbmFsIGZsb3cgb2YgdGhlIGtlcm5lbCB1bmxlc3MgS0NTQU4gaXMgZW5hYmxlZC4gIElmIEtDU0FOIGlzIGVuYWJsZWQsIGl0ICpkb2VzKiBhbHRlciB0aGUgZmxvdyBieSBjYWxsaW5nIGBfX2tjc2FuX2NoZWNrX2FjY2Vzc2AsIGJ1dCB0aGUgcHJvbXB0IHNheXMgdG8gaWdub3JlIHRoaW5ncyB0aGF0ICYjMzQ7ZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyYjMzQ7LiBGaXhlcyB0byBLQ1NBTiBjaGVja3MgYXJlIG5vdCBjb25zaWRlcmVkIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBiZSBmdXp6ZWQuCgpIb3dldmVyLCB0aGUgcGF0Y2ggKmRvZXMqIG1vZGlmeSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBtZW1kZXNjX25pZGAsIGBtZW1kZXNjX3NlY3Rpb25gLCBgbWVtZGVzY196b25lbnVtYCwgYW5kIGBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlYC4gIFRoZXNlIGFyZSBhbGwgYHN0YXRpYyBpbmxpbmVgIChleGNlcHQgZm9yIGBtZW1kZXNjX25pZGAgaW4gYG1tL3NwYXJzZS5jYCksIGFuZCBpdCBjaGFuZ2VzIHRoZW0gdG8gdGFrZSBhIHBvaW50ZXIgaW5zdGVhZCBvZiBhIHZhbHVlLiAgRG9lcyB0aGlzIGNoYW5nZSBhbHRlciBmbG93PyBOb3BlLCBqdXN0IGF2b2lkcyBhIGNvcHkgYW5kIGFsbG93cyBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB0byBjaGVjayB0aGUgYWN0dWFsIGZsYWcgYml0cyBpbnN0ZWFkIG9mIGEgbG9jYWwgY29weS4KClNvLCBpbiBlc3NlbmNlLCB0aGUgcGF0Y2ggaXMgZml4aW5nIEtDU0FOIGFubm90YXRpb25zIGFuZCBtYWtpbmcgYSBtaW5vciBvcHRpbWl6YXRpb24vY2xlYW51cC4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGxvZ2ljIG9yIGZpeCBhIHJlYWwgYnVnLCBmcm9tIHdoYXQgSSBjYW4gdGVsbC4gIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJvbXB0LCBzbyBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1kZXNjX25pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NwYXJzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NwYXJzZS5jPTQzPXN0YXRpYyB1MTYgc2VjdGlvbl90b19ub2RlX3RhYmxlW05SX01FTV9TRUNUSU9OU10gX19jYWNoZWxpbmVfYWxpZ25lZDtcbi0tXG5tbS9zcGFyc2UuYy00NS1cbm1tL3NwYXJzZS5jOjQ2OmludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbm1tL3NwYXJzZS5jLTQ3LXtcbi0tXG5tbS9zcGFyc2UuYy00OS19XG5tbS9zcGFyc2UuYzo1MDpFWFBPUlRfU1lNQk9MKG1lbWRlc2NfbmlkKTtcbm1tL3NwYXJzZS5jLTUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTaWduYXR1cmUgQ2hhbmdlKioKCk9rYXksIHNvIEkganVzdCBub3RpY2VkIGEgY2hhbmdlIGluIHRoZSBgbWVtZGVzY19uaWRgIGZ1bmN0aW9uJiMzOTtzIHNpZ25hdHVyZS4gSXQmIzM5O3Mgc3VidGxlLCBidXQgc2lnbmlmaWNhbnQg4oCTIGl0IG5vdyBhY2NlcHRzIGEgcG9pbnRlciB0byBhIGBtZW1kZXNjX2ZsYWdzX3RgIChgY29uc3QgbWVtZGVzY19mbGFnc190ICptZGZgKSBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmIChgbWVtZGVzY19mbGFnc190IG1kZmApLiBUaGlzIGlzIGNsZWFybHkgYSBzaWduYXR1cmUgYWRqdXN0bWVudCwgbGlrZWx5IGRvbmUgdG8gYWxpZ24gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZS4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKQnV0IG5vdyBJJiMzOTttIGN1cmlvdXMuIFdoZXJlIGVsc2UgbWlnaHQgd2UgZmluZCBzdWNoIGEgc2lnbmF0dXJlIG1pc21hdGNoPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByaXBwbGUgZWZmZWN0IG9yIG92ZXJsb29rZWQgaW5zdGFuY2VzLiBNaWdodCBhcyB3ZWxsIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9Njg0Nj1zdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjg3MS1cbm1tL3BhZ2VfYWxsb2MuYzo2ODcyOnN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vcGFnZV9hbGxvYy5jLTY4NzMtXHRcdGJvb2wgaXNfZnJvemVuKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz02OTQwPXZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbm1tL3BhZ2VfYWxsb2MuYy02OTQxLXtcbm1tL3BhZ2VfYWxsb2MuYzo2OTQyOlx0X19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb24ocGZuLCBucl9wYWdlcywgLyogaXNfZnJvemVuPSAqLyBmYWxzZSk7XG5tbS9wYWdlX2FsbG9jLmMtNjk0My19XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcwODA9c3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5tbS9wYWdlX2FsbG9jLmMtNzA4MS17XG5tbS9wYWdlX2FsbG9jLmM6NzA4MjpcdF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHBmbiwgbnJfcGFnZXMsIC8qIGlzX2Zyb3plbj0gKi8gdHJ1ZSk7XG5tbS9wYWdlX2FsbG9jLmMtNzA4My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODEzCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDc2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwIGFuZCBvcHRpbWl6YXRpb24gZWZmb3J0LiBMZXQmIzM5O3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3M6CgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGNoYW5naW5nIGhvdyB0aGUgYG1lbWRlc2NfZmxhZ3NfdGAgaXMgYWNjZXNzZWQuIEl0JiMzOTtzIG5vdyBiZWluZyBwYXNzZWQgYXMgYSBgY29uc3QgbWVtZGVzY19mbGFnc190ICpgIGluc3RlYWQgb2YgYnkgdmFsdWUuIFRoaXMgbWVhbnMgdGhlIGZ1bmN0aW9ucyBhcmUgbm93IHRha2luZyB0aGUgKmFkZHJlc3MqIG9mIHRoZSBmbGFncywgbm90IGEgY29weS4gSSBzcG90dGVkIHRoaXMgY2hhbmdlIGltbWVkaWF0ZWx5IGFjcm9zcyB2YXJpb3VzIGlubGluZSBhY2Nlc3NvcnMgbGlrZSBgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb25gLCBgbnVtX3BhZ2VzX2NvbnRpZ3VvdXNgLCBgc2xhYl9uaWRgLCBgX19wYWdlX3RvX3BmbmAsIGFuZCBgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwYC4KCkVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIEtDU0FOIGFubm90YXRpb25zIGFyZSBub3cgd29ya2luZyBjb3JyZWN0bHk7IHRoZSBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBjYWxscyB3aWxsIG5vdyBjaGVjayB0aGUgYWN0dWFsIG1lbW9yeSBsb2NhdGlvbiBvZiB0aGUgcGFnZSBmbGFncywgYW5kIG5vdCBzb21lIHN0YWNrIGNvcHkuIFRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLgoKQmV5b25kIHRoYXQsIHRoZSBjaGFuZ2VzIHNlZW0gcHJldHR5IGNvbnRhaW5lZC4gVGhleSYjMzk7cmUgbWFraW5nIGEgY291cGxlIG9mIGNvbmRpdGlvbmFsIGFkZGl0aW9uczogYCNpZmRlZiBDT05GSUdfTlVNQWAgYXJvdW5kIHRoZSBgbWVtZGVzY19uaWRgIGFuZCBgcGFnZV90b19uaWRgL2Bmb2xpb19uaWRgIGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiByZXR1cm4gMCBkaXJlY3RseSB3aGVuIE5VTUEgaXMgZGlzYWJsZWQsIGF2b2lkaW5nIGEgYFBGX1BPSVNPTkVEX0NIRUNLYCBpbiBub24tTlVNQSBidWlsZHMuIFRoZW4sIGAjaWYgWk9ORVNfV0lEVEggIT0gMGAgaXMgYWRkZWQgYXJvdW5kIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGluIGBtZW1kZXNjX3pvbmVudW1gLgoKT3ZlcmFsbCwgdGhlcmUmIzM5O3Mgbm8gYWRkaXRpb24gb2YgbmV3IGZ1bmN0aW9uYWxpdHksIGNvbXBsZXggbG9naWMsIG9yIGFueSBwb3RlbnRpYWxseSB0cmlja3kgaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUgdG8gZnV6emluZy4gSXQmIzM5O3MgYSBidW5jaCBvZiBzbWFsbCwgbG93LXJpc2sgY2hhbmdlcyBmb2N1c2VkIG9uIGNsYXJpdHksIGNvcnJlY3RuZXNzLCBhbmQgYSBiaXQgb2Ygb3B0aW1pemF0aW9uLiBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24mIzM5O3Qgd2FycmFudCBkZWRpY2F0ZWQgZnV6emluZyBlZmZvcnQuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIHJlY29tbWVuZCBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIHNldmVyYWwgaW5saW5lIG1lbW9yeSBkZXNjcmlwdG9yIGFjY2Vzc29ycyAoZS5nLiwgbWVtZGVzY19uaWQsIG1lbWRlc2Nfc2VjdGlvbikgdG8gdGFrZSBhIHBvaW50ZXIgdG8gbWVtZGVzY19mbGFnc190IGluc3RlYWQgb2YgcGFzc2luZyBpdCBieSB2YWx1ZS4gVGhpcyBmaXhlcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgS0NTQU4gYW5ub3RhdGlvbnMgc28gdGhleSBjb3JyZWN0bHkgbW9uaXRvciB0aGUgYWN0dWFsIHBhZ2UgZmxhZ3MgaW4gbWVtb3J5IHJhdGhlciB0aGFuIGEgbG9jYWwgc3RhY2sgY29weS4gSXQgYWxzbyBhZGRzICNpZmRlZiBDT05GSUdfTlVNQSB0byByZXR1cm4gMCBkaXJlY3RseSB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBhbmQgS0NTQU4gYW5ub3RhdGlvbiBmaXhlcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgdGFyZ2V0ZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6MzY6NTYuNTc1ODkyOTI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyNjQxMzQ4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNjo1Ni41NzU5MDA3NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTAzNDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY4ZTE4MTMzMzE1NzVjNmYyMjgxMjRiYmM4ZDBkMzZiYTMwZGM4ZTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDc6MzY6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcXG5pbmRleCBlZmE2NjEwYWNiYzc5Ny4uZjg0MDRiYzc3NzNjMmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaFxcbisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcXG5AQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pXFxuICAqL1xcbiAjZGVmaW5lIF9fcGFnZV90b19wZm4ocGcpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAoe1xcdGNvbnN0IHN0cnVjdCBwYWdlICpfX3BnID0gKHBnKTtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdGludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihfX3BnLVxcdTAwM2VmbGFncyk7XFx0XFx0XFxcXFxcbitcXHRpbnQgX19zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXFx1MDAyNl9fcGctXFx1MDAzZWZsYWdzKTtcXHRcXHRcXFxcXFxuIFxcdCh1bnNpZ25lZCBsb25nKShfX3BnIC0gX19zZWN0aW9uX21lbV9tYXBfYWRkcihfX25yX3RvX3NlY3Rpb24oX19zZWMpKSk7XFx0XFxcXFxcbiB9KVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjMxNWQ4OTE3ZjhlNzc0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC0zNyw2ICszNyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tbXUtZGVidWctcGFnZWFsbG9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rY3Nhbi1jaGVja3MuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBtZW1wb2xpY3k7XFxuIHN0cnVjdCBhbm9uX3ZtYTtcXG5AQCAtMjI4NiwyMyArMjI4Nyw0NSBAQCBzdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIH1cXG4gXFxuICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXFxuLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcXG4raW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcXG4rI2lmZGVmIENPTkZJR19OVU1BXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuLVxcdHJldHVybiAobWRmLmYgXFx1MDAzZVxcdTAwM2UgTk9ERVNfUEdTSElGVCkgXFx1MDAyNiBOT0RFU19NQVNLO1xcbitcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVxcdTAwM2VmLCBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbitcXHRyZXR1cm4gKG1kZi1cXHUwMDNlZiBcXHUwMDNlXFx1MDAzZSBOT0RFU19QR1NISUZUKSBcXHUwMDI2IE5PREVTX01BU0s7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gI2VuZGlmXFxuKyNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19OVU1BXFxuIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcCA9IFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpO1xcbitcXG4rXFx0cmV0dXJuIG1lbWRlc2NfbmlkKFxcdTAwMjZwLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX25pZChmb2xpby1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY19uaWQoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbiAvKiBwYWdlIGFjY2VzcyB0aW1lIGJpdHMgbmVlZHMgdG8gaG9sZCBhdCBsZWFzdCA0IHNlY29uZHMgKi9cXG5AQCAtMjU0MSwxMiArMjU2NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbiBcXHRwYWdlLVxcdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFxcdTAwMjYgU0VDVElPTlNfTUFTSykgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuLVxcdHJldHVybiAobWRmLmYgXFx1MDAzZVxcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXFx1MDAyNiBTRUNUSU9OU19NQVNLO1xcbitcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVxcdTAwM2VmLCBTRUNUSU9OU19NQVNLIFxcdTAwM2NcXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQpO1xcbitcXHRyZXR1cm4gKG1kZi1cXHUwMDNlZiBcXHUwMDNlXFx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcXHUwMDI2IFNFQ1RJT05TX01BU0s7XFxuIH1cXG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5pbmRleCBhODQzMGE3YWUwNTQ0Ny4uZWZjZGRiOTkyNWFkZDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtNjUwLDcgKzY1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqY3VyX3BhZ2UgPSBwYWdlc1swXTtcXG4tXFx0dW5zaWduZWQgbG9uZyBzZWN0aW9uID0gbWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLVxcdTAwM2VmbGFncyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2Y3VyX3BhZ2UtXFx1MDAzZWZsYWdzKTtcXG4gXFx0c2l6ZV90IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbkBAIC02NjAsNyArNjYwLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG5yX3BhZ2VzKVxcbiBcXHRcXHQgKiBJbiB1bnByb2JsZW1hdGljIGtlcm5lbCBjb25maWdzLCBwYWdlX3RvX3NlY3Rpb24oKSA9PSAwIGFuZFxcbiBcXHRcXHQgKiB0aGUgd2hvbGUgY2hlY2sgd2lsbCBnZXQgb3B0aW1pemVkIG91dC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChtZW1kZXNjX3NlY3Rpb24oY3VyX3BhZ2UtXFx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxcbitcXHRcXHRpZiAobWVtZGVzY19zZWN0aW9uKFxcdTAwMjZjdXJfcGFnZS1cXHUwMDNlZmxhZ3MpICE9IHNlY3Rpb24pXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi5lNjBkYWQ1NDZjYTY4ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC0xMjcyLDMxICsxMjcyLDMzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxcbiAjZGVmaW5lIEtBU0FOX1RBR19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXFxuICNkZWZpbmUgWk9ORUlEX01BU0tcXHRcXHQoKDFVTCBcXHUwMDNjXFx1MDAzYyBaT05FSURfU0hJRlQpIC0gMSlcXG4gXFxuLXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcXG4rc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0oY29uc3QgbWVtZGVzY19mbGFnc190ICpmbGFncylcXG4ge1xcbi1cXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBaT05FU19QR1NISUZUKTtcXG4tXFx0cmV0dXJuIChmbGFncy5mIFxcdTAwM2VcXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFxcdTAwMjYgWk9ORVNfTUFTSztcXG4rI2lmIFpPTkVTX1dJRFRIICE9IDBcXG4rXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLVxcdTAwM2VmLCBaT05FU19NQVNLIFxcdTAwM2NcXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIChmbGFncy1cXHUwMDNlZiBcXHUwMDNlXFx1MDAzZSBaT05FU19QR1NISUZUKSBcXHUwMDI2IFpPTkVTX01BU0s7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0ocGFnZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4ge1xcbiBcXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKG1kZikgPT0gWk9ORV9ERVZJQ0U7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdFZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXFx1MDAzZWZsYWdzKSwgcGFnZSk7XFxuK1xcdFZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyksIHBhZ2UpO1xcbiBcXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKS1cXHUwMDNlcGdtYXA7XFxuIH1cXG4gXFxuQEAgLTEzMTEsOSArMTMxMyw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBwYWdlICpiKVxcbiB7XFxuLVxcdGlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtXFx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGItXFx1MDAzZWZsYWdzKSlcXG4rXFx0aWYgKG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXFx1MDAyNmEtXFx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFxcdTAwMjZiLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtXFx1MDAzZWZsYWdzKSlcXG4rXFx0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFxcdTAwMjZhLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRyZXR1cm4gcGFnZV9wZ21hcChhKSA9PSBwYWdlX3BnbWFwKGIpO1xcbiB9XFxuQEAgLTEzMjEsNyArMTMyMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXFxuIGV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsXFxuIFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XFxuICNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0xMzM4LDEyICsxMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfZGV2aWNlX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UocGFnZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShmb2xpby1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfbW92YWJsZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uMDIwYTk3Y2EwMThlOTkgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTY5MDQsMTUgKzY5MDQsMTUgQEAgc3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb24odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXNcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChzdGFydCBcXHUwMDI2XFx1MDAyNiBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xcbitcXHRcXHRpZiAoc3RhcnQgXFx1MDAyNlxcdTAwMjYgbWVtZGVzY19zZWN0aW9uKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncykgIT0gc3RhcnRfc2VjKSB7XFxuIFxcdFxcdFxcdGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0YXJ0LCBpIC0gbnJfc3RhcnQpO1xcbiBcXHRcXHRcXHRzdGFydCA9IHBhZ2U7XFxuIFxcdFxcdFxcdG5yX3N0YXJ0ID0gaTtcXG4tXFx0XFx0XFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoIXN0YXJ0KSB7XFxuIFxcdFxcdFxcdHN0YXJ0ID0gcGFnZTtcXG4gXFx0XFx0XFx0bnJfc3RhcnQgPSBpO1xcbi1cXHRcXHRcXHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXFx1MDAyNnBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcXG5pbmRleCAyODFhNjUyMzM3OTVkNi4uOWRlZDMxOTQ5NWEwNzAgMTAwNjQ0XFxuLS0tIGEvbW0vc2xhYi5oXFxuKysrIGIvbW0vc2xhYi5oXFxuQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNsYWJfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNsYWJfbmlkKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX25pZChzbGFiLVxcdTAwM2VmbGFncyk7XFxuK1xcdHJldHVybiBtZW1kZXNjX25pZChcXHUwMDI2c2xhYi1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHBnX2RhdGFfdCAqc2xhYl9wZ2RhdChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5kaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLmMgYi9tbS9zcGFyc2UuY1xcbmluZGV4IDE2YWM2ZGYzYzg5ZmEyLi44ZTM4NDc3NjQ1MTMxOSAxMDA2NDRcXG4tLS0gYS9tbS9zcGFyc2UuY1xcbisrKyBiL21tL3NwYXJzZS5jXFxuQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHU4IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuIHN0YXRpYyB1MTYgc2VjdGlvbl90b19ub2RlX3RhYmxlW05SX01FTV9TRUNUSU9OU10gX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gI2VuZGlmXFxuIFxcbi1pbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcXG4raW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuIFxcdHJldHVybiBzZWN0aW9uX3RvX25vZGVfdGFibGVbbWVtZGVzY19zZWN0aW9uKG1kZildO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjM2OjU2Ljk0NzY2MDY2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4OTIzNTc1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY4ZTE4MTMzMzE1NzVjNmYyMjgxMjRiYmM4ZDBkMzZiYTMwZGM4ZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwNzozNjo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5pbmRleCBlZmE2NjEwYWNiYzc5Ny4uZjg0MDRiYzc3NzNjMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5AQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pXG4gICovXG4gI2RlZmluZSBfX3BhZ2VfdG9fcGZuKHBnKVx0XHRcdFx0XHRcXFxuICh7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7XHRcdFx0XHRcXFxuLVx0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKF9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuK1x0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNl9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuIFx0KHVuc2lnbmVkIGxvbmcpKF9fcGcgLSBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKF9fbnJfdG9fc2VjdGlvbihfX3NlYykpKTtcdFxcXG4gfSlcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIzLi4zMTVkODkxN2Y4ZTc3NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzcsNiArMzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS1kZWJ1Zy1wYWdlYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjc2FuLWNoZWNrcy5oXHUwMDNlXG4gXG4gc3RydWN0IG1lbXBvbGljeTtcbiBzdHJ1Y3QgYW5vbl92bWE7XG5AQCAtMjI4NiwyMyArMjI4Nyw0NSBAQCBzdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuIFxuICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuKyNpZmRlZiBDT05GSUdfTlVNQVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbi1cdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbitcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuK3tcbitcdHJldHVybiAwO1xuIH1cbiAjZW5kaWZcbisjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX05VTUFcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnAgPSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTtcbitcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZwLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4gLyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXG5AQCAtMjU0MSwxMiArMjU2NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuLVx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVx1MDAzZWYsIFNFQ1RJT05TX01BU0sgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQpO1xuK1x0cmV0dXJuIChtZGYtXHUwMDNlZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IGE4NDMwYTdhZTA1NDQ3Li5lZmNkZGI5OTI1YWRkNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC02NTAsNyArNjUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV9oYXNfcmVjZW5jeShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKmN1cl9wYWdlID0gcGFnZXNbMF07XG4tXHR1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oY3VyX3BhZ2UtXHUwMDNlZmxhZ3MpO1xuK1x0dW5zaWduZWQgbG9uZyBzZWN0aW9uID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNmN1cl9wYWdlLVx1MDAzZWZsYWdzKTtcbiBcdHNpemVfdCBpO1xuIFxuIFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuQEAgLTY2MCw3ICs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXG4gXHRcdCAqIEluIHVucHJvYmxlbWF0aWMga2VybmVsIGNvbmZpZ3MsIHBhZ2VfdG9fc2VjdGlvbigpID09IDAgYW5kXG4gXHRcdCAqIHRoZSB3aG9sZSBjaGVjayB3aWxsIGdldCBvcHRpbWl6ZWQgb3V0LlxuIFx0XHQgKi9cbi1cdFx0aWYgKG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cdTAwM2VmbGFncykgIT0gc2VjdGlvbilcbitcdFx0aWYgKG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZjdXJfcGFnZS1cdTAwM2VmbGFncykgIT0gc2VjdGlvbilcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLmU2MGRhZDU0NmNhNjhkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTEyNzIsMzEgKzEyNzIsMzMgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4gI2RlZmluZSBLQVNBTl9UQUdfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXG4gI2RlZmluZSBaT05FSURfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXG4gXG4tc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0obWVtZGVzY19mbGFnc190IGZsYWdzKVxuK3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXG4ge1xuLVx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuLVx0cmV0dXJuIChmbGFncy5mIFx1MDAzZVx1MDAzZSBaT05FU19QR1NISUZUKSBcdTAwMjYgWk9ORVNfTUFTSztcbisjaWYgWk9ORVNfV0lEVEggIT0gMFxuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLVx1MDAzZWYsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIChmbGFncy1cdTAwM2VmIFx1MDAzZVx1MDAzZSBaT05FU19QR1NISUZUKSBcdTAwMjYgWk9ORVNfTUFTSztcbiB9XG4gXG4gc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBwYWdlX3pvbmVudW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXHUwMDNlZmxhZ3MpO1xuK1x0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiBtZW1kZXNjX3pvbmVudW0obWRmKSA9PSBaT05FX0RFVklDRTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UocGFnZS1cdTAwM2VmbGFncyksIHBhZ2UpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2cGFnZS1cdTAwM2VmbGFncyksIHBhZ2UpO1xuIFx0cmV0dXJuIHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXA7XG4gfVxuIFxuQEAgLTEzMTEsOSArMTMxMyw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4gXHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcGFnZSAqYilcbiB7XG4tXHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShhLVx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGItXHUwMDNlZmxhZ3MpKVxuK1x0aWYgKG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2YS1cdTAwM2VmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZiLVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtXHUwMDNlZmxhZ3MpKVxuK1x0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmEtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBwYWdlX3BnbWFwKGEpID09IHBhZ2VfcGdtYXAoYik7XG4gfVxuQEAgLTEzMjEsNyArMTMyMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4gZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTMzOCwxMiArMTM0MCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfem9uZV9kZXZpY2VfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShmb2xpby1cdTAwM2VmbGFncyk7XG4rXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX21vdmFibGVfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi4wMjBhOTdjYTAxOGU5OSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNjkwNCwxNSArNjkwNCwxNSBAQCBzdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChzdGFydCBcdTAwMjZcdTAwMjYgbWVtZGVzY19zZWN0aW9uKHBhZ2UtXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xuK1x0XHRpZiAoc3RhcnQgXHUwMDI2XHUwMDI2IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKSAhPSBzdGFydF9zZWMpIHtcbiBcdFx0XHRmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdGFydCwgaSAtIG5yX3N0YXJ0KTtcbiBcdFx0XHRzdGFydCA9IHBhZ2U7XG4gXHRcdFx0bnJfc3RhcnQgPSBpO1xuLVx0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gXHRcdH0gZWxzZSBpZiAoIXN0YXJ0KSB7XG4gXHRcdFx0c3RhcnQgPSBwYWdlO1xuIFx0XHRcdG5yX3N0YXJ0ID0gaTtcbi1cdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cdTAwM2VmbGFncyk7XG4rXHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIFx0XHR9XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCAyODFhNjUyMzM3OTVkNi4uOWRlZDMxOTQ5NWEwNzAgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbisrKyBiL21tL3NsYWIuaFxuQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNsYWJfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcbiBzdGF0aWMgaW5saW5lIGludCBzbGFiX25pZChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoc2xhYi1cdTAwM2VmbGFncyk7XG4rXHRyZXR1cm4gbWVtZGVzY19uaWQoXHUwMDI2c2xhYi1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgcGdfZGF0YV90ICpzbGFiX3BnZGF0KGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxuZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmNcbmluZGV4IDE2YWM2ZGYzYzg5ZmEyLi44ZTM4NDc3NjQ1MTMxOSAxMDA2NDRcbi0tLSBhL21tL3NwYXJzZS5jXG4rKysgYi9tbS9zcGFyc2UuY1xuQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHU4IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4gc3RhdGljIHUxNiBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkO1xuICNlbmRpZlxuIFxuLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gc2VjdGlvbl90b19ub2RlX3RhYmxlW21lbWRlc2Nfc2VjdGlvbihtZGYpXTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNjo1Ni45NDc2NjM0MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzA3MDA3MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIHRoZSBgbWVtZGVzY19mbGFnc190YCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBhIHJlZmFjdG9yaW5nIG9mIGhvdyB3ZSBoYW5kbGUgdGhlIGBtZW1kZXNjX2ZsYWdzX3RgIHN0cnVjdHVyZSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgbWVtb3J5IGRlc2NyaXB0b3IgKG1lbWRlc2MpIGZ1bmN0aW9ucy4gVGhlIGtleSBjaGFuZ2UgaXMgdG8gbW9kaWZ5IHRoZSBzaWduYXR1cmVzIG9mIHNldmVyYWwgZnVuY3Rpb25zOiBgbWVtZGVzY19uaWRgLCBgbWVtZGVzY19zZWN0aW9uYCwgYG1lbWRlc2Nfem9uZW51bWAsIGFuZCBgbWVtZGVzY19pc196b25lX2RldmljZWAuIEluc3RlYWQgb2YgcGFzc2luZyBgbWVtZGVzY19mbGFnc190YCBieSB2YWx1ZSwgdGhleSdyZSBub3cgdGFraW5nIGEgcG9pbnRlciB0byBpdCwgc28gYG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpYCBpcyBub3cgYG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKWAuXG5cbkJleW9uZCB0aGF0LCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSB1cGRhdGluZyB0aGUgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgbWFjcm8gY2FsbHMgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZSDigJMgc2hpZnRpbmcgZnJvbSBgbWRmLmZgIHRvIGBtZGYtXHUwMDNlZmAuIEl0IHNlZW1zIGxpa2UgYSBjb25zaXN0ZW50IHBhdHRlcm4uIFRoZXJlJ3MgYWxzbyBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhhcHBlbmluZyB3aXRoIGAjaWZkZWYgQ09ORklHX05VTUFgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIHRoZXNlIGNvbmRpdGlvbmFscyBhcm91bmQgdGhlIGBtZW1kZXNjX25pZGAgZnVuY3Rpb24sIGFsb25nIHdpdGggYHBhZ2VfdG9fbmlkYCBhbmQgYGZvbGlvX25pZGAsIHRvIHJldHVybiAwIHdoZW4gTlVNQSBpcyBkaXNhYmxlZC4gU28gd2hlbiBOVU1BIGlzIGRpc2FibGVkLCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBzaW1wbHkgcmV0dXJuIDAuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYCNpZiBaT05FU19XSURUSCAhPSAwYCBhcm91bmQgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgaW4gYG1lbWRlc2Nfem9uZW51bWAuXG5cbkZyb20gYSBjdXJzb3J5IGdsYW5jZSBhdCB0aGUgY2hhbmdlZCBmaWxlcyDigJMgYGluY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAsIGBtbS9wYWdlX2FsbG9jLmNgLCBgbW0vc2xhYi5oYCwgYW5kIGBtbS9zcGFyc2UuY2Ag4oCTIGl0IGFwcGVhcnMgdG8gYmUgYSBtYWNybyBmaXggYW5kIGEgcG9pbnRlciBvcHRpbWl6YXRpb24uIEknbSBmb2N1c2luZyBvbiB0aGUgcmVmYWN0b3JpbmcgYXNwZWN0IG9mIHBhc3NpbmcgYnkgcG9pbnRlciBpbnN0ZWFkIG9mIGJ5IHZhbHVlLCBhbmQgdGhlIGAjaWZkZWYgQ09ORklHX05VTUFgIGNvbmRpdGlvbmFsIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0IHNob3VsZCBiZSBwdXJlbHkgYSByZWZhY3RvcmluZy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgZnVuY3Rpb25hbCBsb2dpYyBoYXMgY2hhbmdlZCwgYnV0IGF0IHRoaXMgc3RhZ2UsIGl0IHNlZW1zIHVubGlrZWx5IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwcmltYXJ5IGdvYWwgaXMgbGlrZWx5IHRvIGltcHJvdmUgZWZmaWNpZW5jeSAoZXNwZWNpYWxseSBtZW1vcnkgY29waWVzKSwgb3IgcG90ZW50aWFsbHkgcmVkdWNlIHN0YWNrIHVzYWdlIHdpdGggdGhlIHBvaW50ZXIgcGFyYW1ldGVyLiBMZXQncyBzZWUgd2hhdCBgbWVtZGVzY19mbGFnc190YCBhY3R1YWxseSBpcyB1bmRlciB0aGUgaG9vZC4uLiBpdCdzIHByb2JhYmx5IGEgc3RydWN0IG9yIHR5cGVkZWYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzowNC42NTQ2NzMwNDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzNzc1NTM5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHlwZWRlZi4qbWVtZGVzY19mbGFnc190XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzowNy45OTI0NDI5MjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI5ODMxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBzZWFyY2g6XG5cbioqRGl2aW5nIGludG8gYG1lbWRlc2NfZmxhZ3NfdGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG1lbWRlc2NfZmxhZ3NfdGAgaXMgYWxsIGFib3V0LiBUaGUgZmlyc3Qgc3RlcCBpcyBjbGVhcmx5IHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEknbGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhpcyBzdHJ1Y3Qgb3IgdHlwZSBpcyBkZWZpbmVkIGluIHRoZSBwcm9qZWN0J3Mgc291cmNlIGNvZGUuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgc28gdW5kZXJzdGFuZGluZyBpdHMgc3RydWN0dXJlIHdpbGwgcHJvYmFibHkgdW5sb2NrIGEgZ29vZCBjaHVuayBvZiB1bmRlcnN0YW5kaW5nIGFib3V0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggZm9yIHRoZSBsaXRlcmFsIHN0cmluZyBgbWVtZGVzY19mbGFnc190YC4gSG9wZWZ1bGx5LCB0aGUgdG9vbGluZyBjYW4gbmF2aWdhdGUgbWUgZGlyZWN0bHkgdG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlIG9yIHNvdXJjZSBjb2RlLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIGl0cyBtZW1iZXJzIGFuZCBkYXRhIHR5cGVzLCBhbmQgaG9wZWZ1bGx5LCBJJ2xsIGZpbmQgc29tZSBleHBsYW5hdG9yeSBjb21tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjM3OjExLjAyMjI3NzczN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAzMDU0MjUyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbWVtZGVzY19mbGFnc190XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzoxMy4xMjUzNDQ4MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU5MjQ4ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlBvc3NpYmxlIERhdGEgU3RydWN0dXJlIGZvciBNZW1vcnkgRGVzY3JpcHRvciBGbGFncyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgc3RydWN0dXJlIHRvIGhvbGQgbWVtb3J5IGRlc2NyaXB0b3IgZmxhZ3MsIHByb2JhYmx5IGZvciBzb21lIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgc29tZXRoaW5nIHZlcnkgYmFzaWMgYnV0IGVmZmljaWVudDogYSBgdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGY7IH0gbWVtZGVzY19mbGFnc190O2AuIFRoaXMgaXMgbGlrZWx5IGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSdtIGxlYW5pbmcgdG93YXJkcyBgdW5zaWduZWQgbG9uZ2AgYmVjYXVzZSBpdCBnaXZlcyB1cyBhIGRlY2VudCBudW1iZXIgb2YgYml0cyB0byB3b3JrIHdpdGggZm9yIHZhcmlvdXMgZmxhZ3Mgd2l0aG91dCBleGNlc3NpdmUgbWVtb3J5IG92ZXJoZWFkIG9uIG1vc3QgbW9kZXJuIGFyY2hpdGVjdHVyZXMuIEl0J3MgYSBwcmFnbWF0aWMgY2hvaWNlIGZvciBzdG9yaW5nIGEgY29sbGVjdGlvbiBvZiBib29sZWFuIHZhbHVlcyAodGhlIGluZGl2aWR1YWwgZmxhZ3MpLiBPZiBjb3Vyc2UsIHRoaXMgaXMganVzdCBhIHF1aWNrIGFuZCBkaXJ0eSBjb25jZXB0dWFsIHN0cnVjdHVyZS4gSSdkIG5lZWQgdG8gY29uc2lkZXIgYWxpZ25tZW50IGlzc3VlcywgcG90ZW50aWFsIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGFuZCBleGFjdGx5ICp3aGF0KiBmbGFncyBhcmUgbmVlZGVkIGJlZm9yZSBzZXR0bGluZyBvbiB0aGlzIGFzIHRoZSBkZWZpbml0aXZlIHNvbHV0aW9uLiBJJ2QgYWxzbyBsb29rIGF0IGNvbXBpbGVyLXNwZWNpZmljIGF0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBtZW1vcnkgbGF5b3V0LiBUaGUga2V5IGlzIHRvIGtlZXAgaXQgc2ltcGxlLCBmYXN0LCBhbmQgZWFzeSB0byB1bmRlcnN0YW5kIGF0IHRoaXMgcG9pbnQuIEknZCBtb3ZlIG9uIHRvIHJlZmluaW5nIGl0IGJhc2VkIG9uIHRoZSBleGFjdCB1c2FnZSByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwODgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzoxNi41ODQ1OTYzOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMjA0MjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1kZXNjX2ZsYWdzX3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oPTIyODQ9c3RhdGljIGlubGluZSBpbnQgcGFnZV96b25lX2lkKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyODktI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5MDppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMjkxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTItI2lmZGVmIENPTkZJR19OVU1BXFxuaW5jbHVkZS9saW51eC9tbS5oOjIyOTM6c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5OTpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MjU2MT1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI1NjYtXFxuaW5jbHVkZS9saW51eC9tbS5oOjI1Njc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU2OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU3Mi0jZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjI1NzM6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU3NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9Mzk9dHlwZWRlZiBzdHJ1Y3Qge1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MC1cXHR1bnNpZ25lZCBsb25nIGY7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQxOn0gbWVtZGVzY19mbGFnc190O1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD04MD1zdHJ1Y3QgcGFnZSB7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjgxOlxcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcXHRcXHQvKiBBdG9taWMgZmxhZ3MsIHNvbWUgcG9zc2libHlcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODItXFx0XFx0XFx0XFx0XFx0ICogdXBkYXRlZCBhc3luY2hyb25vdXNseSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTQwMj1zdHJ1Y3QgZm9saW8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwNi1cXHQvKiBwdWJsaWM6ICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQwNzpcXHRcXHRcXHRtZW1kZXNjX2ZsYWdzX3QgZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwOC1cXHRcXHRcXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTczPXN0cnVjdCBwdGRlc2Mge1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1NzQ6XFx0bWVtZGVzY19mbGFnc190IHB0X2ZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC01NzUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzQtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjc1OnN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjc2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTI4OD1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5My0jaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjk0OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMjM9ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyNS0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyNjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjcte1xcbi0tXFxubW0vc2xhYi5oPTk4PXN0cnVjdCBzbGFiIHtcXG5tbS9zbGFiLmg6OTk6XFx0bWVtZGVzY19mbGFnc190IGZsYWdzO1xcbm1tL3NsYWIuaC0xMDAtXFxuLS1cXG5tbS9zcGFyc2UuYz00Mz1zdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5tbS9zcGFyc2UuYy00NS1cXG5tbS9zcGFyc2UuYzo0NjppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxubW0vc3BhcnNlLmMtNDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzoxOC42MDY2NDU4ODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg2ODM5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgbWFpbiBjaGFuZ2UgaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSBgbWVtZGVzY19mbGFnc190YC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHN1Z2dlc3RpbmcgcGFzc2luZyBpdCBieSBwb2ludGVyIG5vdyBpbnN0ZWFkIG9mIGJ5IHZhbHVlLiBIbW1tLCBsZXQncyB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBQYXNzaW5nIGJ5IHBvaW50ZXIgaW1wbGllcyB0aGUgcG9zc2liaWxpdHkgb2YgbW9kaWZpY2F0aW9uIGluIHBsYWNlLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGJlbmVmaXQgY291bGQgYmUgcmVkdWNlZCBjb3B5aW5nLCBlc3BlY2lhbGx5IGlmIHRoZSBzdHJ1Y3R1cmUgaXMgbGFyZ2UuIExldCdzIGRpZyBkZWVwZXIgdG8gYXNzZXNzIHRoZSB0cmFkZS1vZmZzLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgLiBUaGF0J3MgYSBLQ1NBTiBtYWNybywgaXNuJ3QgaXQ/IE15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLiBLQ1NBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIGRhdGEgcmFjZXMsIGFuZCB0aGlzIG1hY3JvIGlzIHByb2JhYmx5IGNydWNpYWwgZm9yIGVuZm9yY2luZyBleGNsdXNpdmUgYWNjZXNzIHRvIHNwZWNpZmljIGJpdGZpZWxkcyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUsIHJpZ2h0PyBJdCBjb3VsZCBiZSBwcm90ZWN0aW5nIGFnYWluc3Qgc2ltdWx0YW5lb3VzIHJlYWRzIGFuZCB3cml0ZXMgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcywgb3IgbWF5YmUgZXZlbiB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHRzLiBMZXQncyBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSB1bmRlcnN0YW5kIGhvdyB0aGlzIG1hY3JvIHdvcmtzIGluIHJlbGF0aW9uIHRvIHRoaXMgY2hhbmdlLiBXZSBuZWVkIHRvIGtub3cgd2hhdCBpdCBkb2VzIHdpdGggYSBwb2ludGVyIHRvIHRoZSBmbGFnIHN0cnVjdHVyZSwgYmVjYXVzZSB0aGUgS0NTQU4gYXNwZWN0IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQgdG8gZW5zdXJlIHdlIGhhdmUgbm90IGNyZWF0ZWQgYSBsYXRlbnQgY29uY3VycmVuY3kgYnVnLiBJIGJldHRlciBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzoyMi4yOTM0ODg1ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzUwNjYyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVNTRVJUX0VYQ0xVU0lWRV9CSVRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdD0yMzY9cHJvcGVydGllcyBvZiBjb25jdXJyZW50IGNvZGUgd2hlcmUgYnVncyB3b3VsZCBub3QgbWFuaWZlc3QgYXMgZGF0YSByYWNlcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdC0yNDAtICAgICAgICAgICAgICAgIEFTU0VSVF9FWENMVVNJVkVfQUNDRVNTIEFTU0VSVF9FWENMVVNJVkVfQUNDRVNTX1NDT1BFRFxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdDoyNDE6ICAgICAgICAgICAgICAgIEFTU0VSVF9FWENMVVNJVkVfQklUU1xcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdC0yNDItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oPTIzMj1zdGF0aWMgaW5saW5lIHZvaWQgX19rY3Nhbl9kaXNhYmxlX2N1cnJlbnQodm9pZCkgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTQ3MC0vKipcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjQ3MTogKiBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgLSBhc3NlcnQgbm8gY29uY3VycmVudCB3cml0ZXMgdG8gc3Vic2V0IG9mIGJpdHMgaW4gQHZhclxcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNDcyLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTQ5MC0gKlxcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmg6NDkxOiAqXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLCBSRUFEX09OTFlfTUFTSyk7XFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00OTItICpcXHRmb28gPSAoUkVBRF9PTkNFKGZsYWdzKSBcXHUwMDI2IFJFQURfT05MWV9NQVNLKSBcXHUwMDNlXFx1MDAzZSBSRUFEX09OTFlfU0hJRlQ7XFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00OTMtICpcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjQ5NDogKiBOb3RlOiBUaGUgYWNjZXNzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMoKSBpcyBhc3N1bWVkXFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00OTUtICogdG8gYWNjZXNzIHRoZSBtYXNrZWQgYml0cyBvbmx5LCBhbmQgS0NTQU4gb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyBpdCBpc1xcbi0tXFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC01MDQtICpcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjUwNTogKlxcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncywgUkVBRF9PTkxZX01BU0spO1xcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTA2LSAqXFx0Zm9vID0gKGZsYWdzIFxcdTAwMjYgUkVBRF9PTkxZX01BU0spIFxcdTAwM2VcXHUwMDNlIFJFQURfT05MWV9TSElGVDtcXG4tLVxcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTE1LSAqXFx0c3Bpbl9sb2NrKFxcdTAwMjZmb29fbG9jayk7XFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo1MTY6ICpcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MsIEZPT19NQVNLKTtcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTUxNy0gKlxcdG9sZF9mbGFncyA9IGZsYWdzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC01MjQtICovXFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo1MjU6I2RlZmluZSBBU1NFUlRfRVhDTFVTSVZFX0JJVFModmFyLCBtYXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTUyNi1cXHRkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yMjkzPXN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk0LXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5NTpcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVxcdTAwM2VmLCBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk2LVxcdHJldHVybiAobWRmLVxcdTAwM2VmIFxcdTAwM2VcXHUwMDNlIE5PREVTX1BHU0hJRlQpIFxcdTAwMjYgTk9ERVNfTUFTSztcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yNTY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTI1Njgte1xcbmluY2x1ZGUvbGludXgvbW0uaDoyNTY5OlxcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtXFx1MDAzZWYsIFNFQ1RJT05TX01BU0sgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVCk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTI1NzAtXFx0cmV0dXJuIChtZGYtXFx1MDAzZWYgXFx1MDAzZVxcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXFx1MDAyNiBTRUNUSU9OU19NQVNLO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMjc1PXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzctI2lmIFpPTkVTX1dJRFRIICE9IDBcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyNzg6XFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLVxcdTAwM2VmLCBaT05FU19NQVNLIFxcdTAwM2NcXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI3OS0jZW5kaWZcXG4tLVxcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmM9MzkwPXN0YXRpYyBub2lubGluZSB2b2lkIHRlc3Rfa2VybmVsX2Fzc2VydF9iaXRzX2NoYW5nZSh2b2lkKVxcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmMtMzkxLXtcXG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jOjM5MjpcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFModGVzdF92YXIsIFRFU1RfQ0hBTkdFX0JJVFMpO1xcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmMtMzkzLX1cXG4tLVxcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmM9Mzk1PXN0YXRpYyBub2lubGluZSB2b2lkIHRlc3Rfa2VybmVsX2Fzc2VydF9iaXRzX25vY2hhbmdlKHZvaWQpXFxua2VybmVsL2tjc2FuL2tjc2FuX3Rlc3QuYy0zOTYte1xcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmM6Mzk3OlxcdEFTU0VSVF9FWENMVVNJVkVfQklUUyh0ZXN0X3ZhciwgflRFU1RfQ0hBTkdFX0JJVFMpO1xcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmMtMzk4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzc6MjQuMjI4NTYzODY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTk1NTU5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5kZXJzdGFuZGluZyB0aGUgSW1wbGljYXRpb25zIG9mIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHZhciwgbWFzaylgIG1hY3JvIGFuZCB0cnlpbmcgdG8gZ3Jhc3AgaXRzIGJlaGF2aW9yLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIHNpbXBseSBjaGVja2luZyB0aGUgdmFsdWUgb2YgYHZhcmAgYWdhaW5zdCB0aGUgbWFzay4gQnV0IGhvbGQgb24sIGl0IGFwcGVhcnMgdGhhdCB0aGUgbWFjcm8gZG9lc24ndCBqdXN0IHJlYWQgYHZhcmA7IGl0ICpjcmVhdGVzKiBhIHJlYWQvd3JpdGUgYWNjZXNzLiBJbnRyaWd1aW5nIVxuXG5UaGlzIGJyaW5ncyBtZSB0byB0aGUgY29yZSBpc3N1ZS4gSWYgSSBwYXNzZWQgYG1kZmAgYnkgdmFsdWUsIHRoZSBgbWRmLmZgIG1lbWJlciB3b3VsZCBiZSBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNhbGwgYEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYuZiwgLi4uKWAgd291bGQgYmUgdmVyaWZ5aW5nIGNvbmN1cnJlbnQgd3JpdGVzIHRvICp0aGF0IGxvY2FsIGNvcHkqIG9uIHRoZSBzdGFjaywgbm90IHRoZSBhY3R1YWwgYHBhZ2UtXHUwMDNlZmxhZ3NgIEknbSBjb25jZXJuZWQgYWJvdXQhIEFic29sdXRlbHkgdXNlbGVzcy4gQSBjb21wbGV0ZSB3YXN0ZSBvZiB0aW1lLlxuXG5Ib3dldmVyLCB3aGVuIGBtZGZgIGlzIGEgcG9pbnRlciwgYG1kZi1cdTAwM2VmYCBjb3JyZWN0bHkgZGVyZWZlcmVuY2VzIHRoZSBwb2ludGVyLCBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBsb2NhdGlvbiBvZiB0aGUgKmFjdHVhbCogYHBhZ2UtXHUwMDNlZmxhZ3NgLiBUaHVzLCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB3aWxsIGNvcnJlY3RseSBjaGVjayBmb3IgY29uY3VycmVudCB3cml0ZXMgdG8gdGhlIHRhcmdldCBtZW1vcnkuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBtYWNybyBpdHNlbGYuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzc6MjkuNDg4MTIzMDI0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdCAqXFx0c3Bpbl91bmxvY2soXFx1MDAyNmZvb19sb2NrKTtcXG4gNTIxOlxcdCAqXFxuIDUyMjpcXHQgKiBAdmFyOiB2YXJpYWJsZSB0byBhc3NlcnQgb25cXG4gNTIzOlxcdCAqIEBtYXNrOiBvbmx5IGNoZWNrIGZvciBtb2RpZmljYXRpb25zIHRvIGJpdHMgc2V0IGluIEBtYXNrXFxuIDUyNDpcXHQgKi9cXG4gNTI1OlxcdCNkZWZpbmUgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHZhciwgbWFzaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuIDUyNjpcXHRcXHRkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gNTI3OlxcdFxcdFxcdGtjc2FuX3NldF9hY2Nlc3NfbWFzayhtYXNrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gNTI4OlxcdFxcdFxcdF9fa2NzYW5fY2hlY2tfYWNjZXNzKFxcdTAwMjYodmFyKSwgc2l6ZW9mKHZhciksIEtDU0FOX0FDQ0VTU19BU1NFUlQpO1xcXFxcXG4gNTI5OlxcdFxcdFxcdGtjc2FuX3NldF9hY2Nlc3NfbWFzaygwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gNTMwOlxcdFxcdFxcdGtjc2FuX2F0b21pY19uZXh0KDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gNTMxOlxcdFxcdH0gd2hpbGUgKDApXFxuIDUzMjpcXHRcXG4gNTMzOlxcdCNlbmRpZiAvKiBfTElOVVhfS0NTQU5fQ0hFQ0tTX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzc6MjkuNDg4MjE2MjI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzc5Mjg0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS0NTQU4gRml4IGFuZCBOVU1BIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgeWVzISBUaGUgbGluZSBgX19rY3Nhbl9jaGVja19hY2Nlc3MoXHUwMDI2KHZhciksIHNpemVvZih2YXIpLCBLQ1NBTl9BQ0NFU1NfQVNTRVJUKTtgIGlzIHRoZSBrZXkuIFRoZSBwcm9ibGVtIHdhcyB0aGF0IGlmIGB2YXJgIHdhcyBzb21ldGhpbmcgbGlrZSBgbWRmLmZgIHdoZXJlIGBtZGZgIHdhcyBwYXNzZWQgYnkgdmFsdWUsIHRoZW4gYFx1MDAyNihtZGYuZilgIHdvdWxkIGJlIHRoZSBhZGRyZXNzIG9mIHRoZSAqbG9jYWwqIGNvcHkgb24gdGhlIHN0YWNrLiBLQ1NBTiB3b3VsZCBpbmNvcnJlY3RseSBtb25pdG9yIHRoZSBzdGFjayB2YXJpYWJsZSBmb3IgY29uY3VycmVudCB3cml0ZXMuIFRoYXQncyBjbGVhcmx5IHdyb25nLlxuXG5UaGUgZml4LCBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIHRvIGBjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZmAsIGlzIGJyaWxsaWFudC4gTm93LCBgbWRmLVx1MDAzZWZgIGlzIHBhc3NlZCB0byBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCwgYW5kIGBcdTAwMjYobWRmLVx1MDAzZWYpYCBiZWNvbWVzIHRoZSAqYWN0dWFsKiBhZGRyZXNzIG9mIGBwYWdlLVx1MDAzZWZsYWdzYC4gIFRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIHdhbnRlZCEgVGhpcyBtZWFucyBLQ1NBTiB3aWxsIGNvcnJlY3RseSBtb25pdG9yIGBwYWdlLVx1MDAzZWZsYWdzYCBmb3IgY29uY3VycmVudCB3cml0ZXMsIGZpbmFsbHkgZW5zdXJpbmcgcHJvcGVyIGNvbmN1cnJlbmN5IGNoZWNraW5nIG9uIHRob3NlIGJpdHMuXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQgKnNob3VsZG4ndCogYmVjYXVzZSBLQ1NBTiBpcyBhIGR5bmFtaWMgYW5hbHlzaXMgdG9vbCwgcmlnaHQ/IFRoZSBwYXRjaCBpcyBvbmx5IHN1cHBvc2VkIHRvIGZpeCBLQ1NBTiBjaGVja3MuIEJ1dCBpdCAqYWxzbyogYWRkcyBgI2lmZGVmIENPTkZJR19OVU1BYCB0byBgbWVtZGVzY19uaWRgIGFuZCBgcGFnZV90b19uaWRgL2Bmb2xpb19uaWRgIHRvIHJldHVybiAwIHdoZW4gTlVNQSBpcyBkaXNhYmxlZC4gVGhhdCdzIGEgcmVkIGZsYWcuIElmIE5VTUEgaXMgZGlzYWJsZWQsIGRvZXMgYG1lbWRlc2NfbmlkYCByZXR1cm5pbmcgMCBhY3R1YWxseSAqY2hhbmdlKiBob3cgdGhpbmdzIHdvcms/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0LlxuXG5MZXQncyBsb29rIGF0IHRoZSBvcmlnaW5hbCBjb2RlOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxue1xuXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBOT0RFU19QR1NISUZUKSBcdTAwMjYgTk9ERVNfTUFTSztcbn1cbmBgYFxuXG5Pa2F5LCBpZiBOVU1BICppcyogZGlzYWJsZWQsIHRoZW4gYE5PREVTX1BHU0hJRlRgIGlzICpwcm9iYWJseSogMCwgYW5kIGBOT0RFU19NQVNLYCBpcyBsaWtlbHkgYWxzbyAwLiBMZXQgbWUganVzdCBjaGVjayB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzozNi44MjYxNDg3NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODUwNDc1MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBOT0RFU19NQVNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9MTIyND1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI2OC0jZGVmaW5lIFpPTkVTX01BU0tcXHRcXHQoKDFVTCBcXHUwMDNjXFx1MDAzYyBaT05FU19XSURUSCkgLSAxKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTI2OTojZGVmaW5lIE5PREVTX01BU0tcXHRcXHQoKDFVTCBcXHUwMDNjXFx1MDAzYyBOT0RFU19XSURUSCkgLSAxKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI3MC0jZGVmaW5lIFNFQ1RJT05TX01BU0tcXHRcXHQoKDFVTCBcXHUwMDNjXFx1MDAzYyBTRUNUSU9OU19XSURUSCkgLSAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzozOC44MTEyMDM4NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NzkyODgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVmFyaWFibGUgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBkZWVwZXIgYW5hbHlzaXMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBhIHNwZWNpZmljLCBsaWtlbHkgY3J1Y2lhbCwgcGFyYW1ldGVyLiBUaGUgcGhyYXNlIFwiTGV0J3MgY2hlY2sgYE5PREVTX1dJRFRIYFwiIHRyaWdnZXJzIGEgbWVudGFsIHNjYW4uIE15IGJyYWluIGlzIGltbWVkaWF0ZWx5IGFzc2Vzc2luZyB0aGUgY29udGV4dCwgYXNzdW1pbmcgaXQgcmVsYXRlcyB0byBhIGNvZGViYXNlIG9yIHN5c3RlbSBkZXNpZ24gd2hlcmUgYE5PREVTX1dJRFRIYCBpcyBhIGRlZmluZWQgY29uc3RhbnQgb3IgdmFyaWFibGUuIElzIHRoaXMgcmVsYXRlZCB0byBhIHVzZXIgaW50ZXJmYWNlPyBDb21wdXRhdGlvbmFsIGdlb21ldHJ5PyBOZXR3b3JrIGFyY2hpdGVjdHVyZT8gVGhlIHNwZWNpZmljIGZpZWxkIGlzbid0IGV4cGxpY2l0bHkgZGVmaW5lZCwgYnV0IHRoZSBwcmVjaXNpb24gaW5kaWNhdGVzIGl0cyBwb3RlbnRpYWxseSBjZW50cmFsIGltcG9ydGFuY2UgdG8gc29tZSBwcm9jZXNzLiBNeSBmb2N1cyBub3cgaXMgb24gd2hhdCB0aGlzIHZhcmlhYmxlIHJlcHJlc2VudHMgYW5kIHdoZXJlIGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhpcyBicm9hZGVyIGNvbnRleHQuIEkgbmVlZCB0byBlbnN1cmUgaXRzIHZhbHVlIGlzIHdoYXQgSSBleHBlY3QsIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgaXNuJ3QgYmVpbmcgb3ZlcndyaXR0ZW4gYW55d2hlcmUgaW5hZHZlcnRlbnRseS4gVGhlIHVyZ2VuY3kgc3VnZ2VzdHMgdGhhdCBhIHBvdGVudGlhbCBwcm9ibGVtIG1pZ2h0IGhpbmdlIG9uIHRoaXMgc3BlY2lmaWMgd2lkdGggcGFyYW1ldGVyIGFuZCBpdCBtdXN0IGJlIHZlcmlmaWVkIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzc6NDIuODA5MTM3MzE5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc2MDExODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgTk9ERVNfV0lEVEhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTU5LVxcdFxcdTAwM2M9IEJJVFNfUEVSX0xPTkcgLSBOUl9QQUdFRkxBR1NcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0Lmg6NjA6I2RlZmluZSBOT0RFU19XSURUSFxcdFxcdE5PREVTX1NISUZUXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTYxLSNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTYzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oOjY0OiNkZWZpbmUgTk9ERVNfV0lEVEhcXHRcXHQwXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTY1LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzo0NC43ODUxNTc0OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwMDA4NDYxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IElzIHRoaXMgV29ydGggRnV6emluZz8qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGlmIGBOT0RFU19XSURUSGAgaXMgemVybywgdGhlIG1hc2sgaXMgYWxzbyB6ZXJvLCBzbyB0aGUgcmVzdWx0IGlzIGFscmVhZHkgemVyby4gVGhlIHBhdGNoIGp1c3Qgc2VlbXMgdG8gc2hvcnQtY2lyY3VpdCB0aGUgY2FsbCBhbmQgYXZvaWQgYSBwb3RlbnRpYWwgcmVhZC4gQnV0IHdhaXQsIGl0IGFsc28gYWRkcyBgI2lmZGVmIENPTkZJR19OVU1BYCBhbmQgcmV0dXJucyAwIGRpcmVjdGx5LCB3aGljaCBjb3VsZCBiZSBhbiBvcHRpbWl6YXRpb24gb3IgYXZvaWQgdGhlIEtDU0FOIGNoZWNrIHdoZW4gTlVNQSBpcyBkaXNhYmxlZC4gVGhlIGtleSBpcyB0aGF0IGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIG5vdyBjb3JyZWN0bHkgY2hlY2tzIGZvciBjb25jdXJyZW50IHdyaXRlcyB0byBwYWdlIGZsYWdzLCBhbmQgdGhlIGBQRl9QT0lTT05FRF9DSEVDS2AgY2FsbCBpcyBieXBhc3NlZCB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIGV2ZW4gd2l0aCBOVU1BIGRpc2FibGVkLCBgcGFnZV90b19uaWRgIGNhbGxlZCBgUEZfUE9JU09ORURfQ0hFQ0tgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgcGFuaWMgb24gYSBwb2lzb25lZCBwYWdlLiBOb3csIGl0IGp1c3QgcmV0dXJucyAwLiBTbywgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFzIGl0IHJlbW92ZXMgYSBwb2lzb24gY2hlY2ssIGJ1dCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBJIGRvbid0IHRoaW5rIHNvLiBGdXp6aW5nIHdvdWxkbid0IGZpbmQgYW55dGhpbmcgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhpcyByZW1vdmFsLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZpeGluZyB0aGUgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgY2hlY2sgZm9yIEtDU0FOLiBUaGlzIGlzIGEgS0NTQU4gYW5ub3RhdGlvbiwgYSBkZWJ1Z2dpbmcgdG9vbCwgYW5kIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBmdW5jdGlvbmFsIGZsb3cgb2YgdGhlIGtlcm5lbCB1bmxlc3MgS0NTQU4gaXMgZW5hYmxlZC4gIElmIEtDU0FOIGlzIGVuYWJsZWQsIGl0ICpkb2VzKiBhbHRlciB0aGUgZmxvdyBieSBjYWxsaW5nIGBfX2tjc2FuX2NoZWNrX2FjY2Vzc2AsIGJ1dCB0aGUgcHJvbXB0IHNheXMgdG8gaWdub3JlIHRoaW5ncyB0aGF0IFwiZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvd1wiLiBGaXhlcyB0byBLQ1NBTiBjaGVja3MgYXJlIG5vdCBjb25zaWRlcmVkIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBiZSBmdXp6ZWQuXG5cbkhvd2V2ZXIsIHRoZSBwYXRjaCAqZG9lcyogbW9kaWZ5IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgYG1lbWRlc2NfbmlkYCwgYG1lbWRlc2Nfc2VjdGlvbmAsIGBtZW1kZXNjX3pvbmVudW1gLCBhbmQgYG1lbWRlc2NfaXNfem9uZV9kZXZpY2VgLiAgVGhlc2UgYXJlIGFsbCBgc3RhdGljIGlubGluZWAgKGV4Y2VwdCBmb3IgYG1lbWRlc2NfbmlkYCBpbiBgbW0vc3BhcnNlLmNgKSwgYW5kIGl0IGNoYW5nZXMgdGhlbSB0byB0YWtlIGEgcG9pbnRlciBpbnN0ZWFkIG9mIGEgdmFsdWUuICBEb2VzIHRoaXMgY2hhbmdlIGFsdGVyIGZsb3c/IE5vcGUsIGp1c3QgYXZvaWRzIGEgY29weSBhbmQgYWxsb3dzIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIHRvIGNoZWNrIHRoZSBhY3R1YWwgZmxhZyBiaXRzIGluc3RlYWQgb2YgYSBsb2NhbCBjb3B5LlxuXG5TbywgaW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGZpeGluZyBLQ1NBTiBhbm5vdGF0aW9ucyBhbmQgbWFraW5nIGEgbWlub3Igb3B0aW1pemF0aW9uL2NsZWFudXAuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGxvZ2ljIG9yIGZpeCBhIHJlYWwgYnVnLCBmcm9tIHdoYXQgSSBjYW4gdGVsbC4gIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJvbXB0LCBzbyBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzg6MDcuNzg2MDA4Mjg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjcwMzkyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1kZXNjX25pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zcGFyc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zcGFyc2UuYz00Mz1zdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5tbS9zcGFyc2UuYy00NS1cXG5tbS9zcGFyc2UuYzo0NjppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxubW0vc3BhcnNlLmMtNDcte1xcbi0tXFxubW0vc3BhcnNlLmMtNDktfVxcbm1tL3NwYXJzZS5jOjUwOkVYUE9SVF9TWU1CT0wobWVtZGVzY19uaWQpO1xcbm1tL3NwYXJzZS5jLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozODowNy44NTg3MTk1MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMDY5MDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTaWduYXR1cmUgQ2hhbmdlKipcblxuT2theSwgc28gSSBqdXN0IG5vdGljZWQgYSBjaGFuZ2UgaW4gdGhlIGBtZW1kZXNjX25pZGAgZnVuY3Rpb24ncyBzaWduYXR1cmUuIEl0J3Mgc3VidGxlLCBidXQgc2lnbmlmaWNhbnQg4oCTIGl0IG5vdyBhY2NlcHRzIGEgcG9pbnRlciB0byBhIGBtZW1kZXNjX2ZsYWdzX3RgIChgY29uc3QgbWVtZGVzY19mbGFnc190ICptZGZgKSBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmIChgbWVtZGVzY19mbGFnc190IG1kZmApLiBUaGlzIGlzIGNsZWFybHkgYSBzaWduYXR1cmUgYWRqdXN0bWVudCwgbGlrZWx5IGRvbmUgdG8gYWxpZ24gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZS4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbkJ1dCBub3cgSSdtIGN1cmlvdXMuIFdoZXJlIGVsc2UgbWlnaHQgd2UgZmluZCBzdWNoIGEgc2lnbmF0dXJlIG1pc21hdGNoPyBMZXQncyB0YWtlIGEgbG9vayBhdCBgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb25gIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBJdCdzIGFsd2F5cyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSByaXBwbGUgZWZmZWN0IG9yIG92ZXJsb29rZWQgaW5zdGFuY2VzLiBNaWdodCBhcyB3ZWxsIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozODoxMi4xNzk0MTM1MTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODgyNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9Njg0Nj1zdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02ODcxLVxcbm1tL3BhZ2VfYWxsb2MuYzo2ODcyOnN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL3BhZ2VfYWxsb2MuYy02ODczLVxcdFxcdGJvb2wgaXNfZnJvemVuKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY5NDA9dm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL3BhZ2VfYWxsb2MuYy02OTQxLXtcXG5tbS9wYWdlX2FsbG9jLmM6Njk0MjpcXHRfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTtcXG5tbS9wYWdlX2FsbG9jLmMtNjk0My19XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzA4MD1zdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX2Zyb3plbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG5tbS9wYWdlX2FsbG9jLmMtNzA4MS17XFxubW0vcGFnZV9hbGxvYy5jOjcwODI6XFx0X19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb24ocGZuLCBucl9wYWdlcywgLyogaXNfZnJvemVuPSAqLyB0cnVlKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzA4My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjM4OjEyLjI1NTMwNTY4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU4NDY0ODk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwIGFuZCBvcHRpbWl6YXRpb24gZWZmb3J0LiBMZXQncyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2VzczpcblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBjaGFuZ2luZyBob3cgdGhlIGBtZW1kZXNjX2ZsYWdzX3RgIGlzIGFjY2Vzc2VkLiBJdCdzIG5vdyBiZWluZyBwYXNzZWQgYXMgYSBgY29uc3QgbWVtZGVzY19mbGFnc190ICpgIGluc3RlYWQgb2YgYnkgdmFsdWUuIFRoaXMgbWVhbnMgdGhlIGZ1bmN0aW9ucyBhcmUgbm93IHRha2luZyB0aGUgKmFkZHJlc3MqIG9mIHRoZSBmbGFncywgbm90IGEgY29weS4gSSBzcG90dGVkIHRoaXMgY2hhbmdlIGltbWVkaWF0ZWx5IGFjcm9zcyB2YXJpb3VzIGlubGluZSBhY2Nlc3NvcnMgbGlrZSBgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb25gLCBgbnVtX3BhZ2VzX2NvbnRpZ3VvdXNgLCBgc2xhYl9uaWRgLCBgX19wYWdlX3RvX3BmbmAsIGFuZCBgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwYC5cblxuRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgS0NTQU4gYW5ub3RhdGlvbnMgYXJlIG5vdyB3b3JraW5nIGNvcnJlY3RseTsgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGxzIHdpbGwgbm93IGNoZWNrIHRoZSBhY3R1YWwgbWVtb3J5IGxvY2F0aW9uIG9mIHRoZSBwYWdlIGZsYWdzLCBhbmQgbm90IHNvbWUgc3RhY2sgY29weS4gVGhhdCdzIGEgZ29vZCB0aGluZy5cblxuQmV5b25kIHRoYXQsIHRoZSBjaGFuZ2VzIHNlZW0gcHJldHR5IGNvbnRhaW5lZC4gVGhleSdyZSBtYWtpbmcgYSBjb3VwbGUgb2YgY29uZGl0aW9uYWwgYWRkaXRpb25zOiBgI2lmZGVmIENPTkZJR19OVU1BYCBhcm91bmQgdGhlIGBtZW1kZXNjX25pZGAgYW5kIGBwYWdlX3RvX25pZGAvYGZvbGlvX25pZGAgZnVuY3Rpb25zIHNvIHRoZXkgY2FuIHJldHVybiAwIGRpcmVjdGx5IHdoZW4gTlVNQSBpcyBkaXNhYmxlZCwgYXZvaWRpbmcgYSBgUEZfUE9JU09ORURfQ0hFQ0tgIGluIG5vbi1OVU1BIGJ1aWxkcy4gVGhlbiwgYCNpZiBaT05FU19XSURUSCAhPSAwYCBpcyBhZGRlZCBhcm91bmQgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgaW4gYG1lbWRlc2Nfem9uZW51bWAuXG5cbk92ZXJhbGwsIHRoZXJlJ3Mgbm8gYWRkaXRpb24gb2YgbmV3IGZ1bmN0aW9uYWxpdHksIGNvbXBsZXggbG9naWMsIG9yIGFueSBwb3RlbnRpYWxseSB0cmlja3kgaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUgdG8gZnV6emluZy4gSXQncyBhIGJ1bmNoIG9mIHNtYWxsLCBsb3ctcmlzayBjaGFuZ2VzIGZvY3VzZWQgb24gY2xhcml0eSwgY29ycmVjdG5lc3MsIGFuZCBhIGJpdCBvZiBvcHRpbWl6YXRpb24uIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGRvZXNuJ3Qgd2FycmFudCBkZWRpY2F0ZWQgZnV6emluZyBlZmZvcnQuXG5cblRoZXJlZm9yZSwgSSdsbCByZWNvbW1lbmQgV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgxMywiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzg6MjIuODM5OTU4MTI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIHNldmVyYWwgaW5saW5lIG1lbW9yeSBkZXNjcmlwdG9yIGFjY2Vzc29ycyAoZS5nLiwgbWVtZGVzY19uaWQsIG1lbWRlc2Nfc2VjdGlvbikgdG8gdGFrZSBhIHBvaW50ZXIgdG8gbWVtZGVzY19mbGFnc190IGluc3RlYWQgb2YgcGFzc2luZyBpdCBieSB2YWx1ZS4gVGhpcyBmaXhlcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgS0NTQU4gYW5ub3RhdGlvbnMgc28gdGhleSBjb3JyZWN0bHkgbW9uaXRvciB0aGUgYWN0dWFsIHBhZ2UgZmxhZ3MgaW4gbWVtb3J5IHJhdGhlciB0aGFuIGEgbG9jYWwgc3RhY2sgY29weS4gSXQgYWxzbyBhZGRzICNpZmRlZiBDT05GSUdfTlVNQSB0byByZXR1cm4gMCBkaXJlY3RseSB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBhbmQgS0NTQU4gYW5ub3RhdGlvbiBmaXhlcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgdGFyZ2V0ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5775[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 07:27:34 +0000 UTC FinishedAt: 2026-06-30 07:38:24 +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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjhlMTgxMzMzMTU3NWM2ZjIyODEyNGJiYzhkMGQzNmJhMzBkYzhlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA3OjM2OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5pbmRleCBlZmE2NjEwYWNiYzc5Ny4uZjg0MDRiYzc3NzNjMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5AQCAtNTMsNyAmIzQzOzUzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKVxuICAqL1xuICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZylcdFx0XHRcdFx0XFxcbiAoe1x0Y29uc3Qgc3RydWN0IHBhZ2UgKl9fcGcgPSAocGcpO1x0XHRcdFx0XFxcbi1cdGludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihfX3BnLVx1MDAzZWZsYWdzKTtcdFx0XFxcbiYjNDM7XHRpbnQgX19zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2X19wZy1cdTAwM2VmbGFncyk7XHRcdFxcXG4gXHQodW5zaWduZWQgbG9uZykoX19wZyAtIF9fc2VjdGlvbl9tZW1fbWFwX2FkZHIoX19ucl90b19zZWN0aW9uKF9fc2VjKSkpO1x0XFxcbiB9KVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjMxNWQ4OTE3ZjhlNzc0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0zNyw2ICYjNDM7MzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS1kZWJ1Zy1wYWdlYWxsb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY3Nhbi1jaGVja3MuaFx1MDAzZVxuIFxuIHN0cnVjdCBtZW1wb2xpY3k7XG4gc3RydWN0IGFub25fdm1hO1xuQEAgLTIyODYsMjMgJiM0MzsyMjg3LDQ1IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB9XG4gXG4gI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1Ncbi1pbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZik7XG4mIzQzO2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MzsjaWZkZWYgQ09ORklHX05VTUFcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuLVx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgTk9ERVNfUEdTSElGVCkgXHUwMDI2IE5PREVTX01BU0s7XG4mIzQzO1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbiYjNDM7XHRyZXR1cm4gKG1kZi1cdTAwM2VmIFx1MDAzZVx1MDAzZSBOT0RFU19QR1NISUZUKSBcdTAwMjYgTk9ERVNfTUFTSztcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiAjZW5kaWZcbiYjNDM7I2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTlVNQVxuIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnAgPSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2NfbmlkKFx1MDAyNnAtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoZm9saW8tXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiAvKiBwYWdlIGFjY2VzcyB0aW1lIGJpdHMgbmVlZHMgdG8gaG9sZCBhdCBsZWFzdCA0IHNlY29uZHMgKi9cbkBAIC0yNTQxLDEyICYjNDM7MjU2NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbi1cdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIFNFQ1RJT05TX1BHU0hJRlQpIFx1MDAyNiBTRUNUSU9OU19NQVNLO1xuJiM0MztcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtXHUwMDNlZiwgU0VDVElPTlNfTUFTSyBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVCk7XG4mIzQzO1x0cmV0dXJuIChtZGYtXHUwMDNlZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCBhODQzMGE3YWUwNTQ0Ny4uZWZjZGRiOTkyNWFkZDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtNjUwLDcgJiM0Mzs2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqY3VyX3BhZ2UgPSBwYWdlc1swXTtcbi1cdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzZWN0aW9uID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNmN1cl9wYWdlLVx1MDAzZWZsYWdzKTtcbiBcdHNpemVfdCBpO1xuIFxuIFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG5AQCAtNjYwLDcgJiM0Mzs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXG4gXHRcdCAqIEluIHVucHJvYmxlbWF0aWMga2VybmVsIGNvbmZpZ3MsIHBhZ2VfdG9fc2VjdGlvbigpID09IDAgYW5kXG4gXHRcdCAqIHRoZSB3aG9sZSBjaGVjayB3aWxsIGdldCBvcHRpbWl6ZWQgb3V0LlxuIFx0XHQgKi9cbi1cdFx0aWYgKG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cdTAwM2VmbGFncykgIT0gc2VjdGlvbilcbiYjNDM7XHRcdGlmIChtZW1kZXNjX3NlY3Rpb24oXHUwMDI2Y3VyX3BhZ2UtXHUwMDNlZmxhZ3MpICE9IHNlY3Rpb24pXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi5lNjBkYWQ1NDZjYTY4ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC0xMjcyLDMxICYjNDM7MTI3MiwzMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiAjZGVmaW5lIEtBU0FOX1RBR19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBLQVNBTl9UQUdfV0lEVEgpIC0gMSlcbiAjZGVmaW5lIFpPTkVJRF9NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBaT05FSURfU0hJRlQpIC0gMSlcbiBcbi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXG4ge1xuLVx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuLVx0cmV0dXJuIChmbGFncy5mIFx1MDAzZVx1MDAzZSBaT05FU19QR1NISUZUKSBcdTAwMjYgWk9ORVNfTUFTSztcbiYjNDM7I2lmIFpPTkVTX1dJRFRIICE9IDBcbiYjNDM7XHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MtXHUwMDNlZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiAoZmxhZ3MtXHUwMDNlZiBcdTAwM2VcdTAwM2UgWk9ORVNfUEdTSElGVCkgXHUwMDI2IFpPTkVTX01BU0s7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX3pvbmVudW0ocGFnZS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBmb2xpb196b25lbnVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShmb2xpby1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKG1kZikgPT0gWk9ORV9ERVZJQ0U7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdFZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXHUwMDNlZmxhZ3MpLCBwYWdlKTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKSwgcGFnZSk7XG4gXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcDtcbiB9XG4gXG5AQCAtMTMxMSw5ICYjNDM7MTMxMyw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4gXHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcGFnZSAqYilcbiB7XG4tXHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShhLVx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGItXHUwMDNlZmxhZ3MpKVxuJiM0MztcdGlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmEtXHUwMDNlZmxhZ3MpICE9IG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2Yi1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmICghbWVtZGVzY19pc196b25lX2RldmljZShhLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2YS1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0cmV0dXJuIHBhZ2VfcGdtYXAoYSkgPT0gcGFnZV9wZ21hcChiKTtcbiB9XG5AQCAtMTMyMSw3ICYjNDM7MTMyMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4gZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTEzMzgsMTIgJiM0MzsxMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX2RldmljZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShmb2xpby1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfem9uZV9tb3ZhYmxlX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uMDIwYTk3Y2EwMThlOTkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTY5MDQsMTUgJiM0Mzs2OTA0LDE1IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHN0YXJ0IFx1MDAyNlx1MDAyNiBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cdTAwM2VmbGFncykgIT0gc3RhcnRfc2VjKSB7XG4mIzQzO1x0XHRpZiAoc3RhcnQgXHUwMDI2XHUwMDI2IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKSAhPSBzdGFydF9zZWMpIHtcbiBcdFx0XHRmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdGFydCwgaSAtIG5yX3N0YXJ0KTtcbiBcdFx0XHRzdGFydCA9IHBhZ2U7XG4gXHRcdFx0bnJfc3RhcnQgPSBpO1xuLVx0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIFx0XHR9IGVsc2UgaWYgKCFzdGFydCkge1xuIFx0XHRcdHN0YXJ0ID0gcGFnZTtcbiBcdFx0XHRucl9zdGFydCA9IGk7XG4tXHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gXHRcdH1cbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcbmluZGV4IDI4MWE2NTIzMzc5NWQ2Li45ZGVkMzE5NDk1YTA3MCAxMDA2NDRcbi0tLSBhL21tL3NsYWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2xhYi5oXG5AQCAtMTc5LDcgJiM0MzsxNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNsYWJfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcbiBzdGF0aWMgaW5saW5lIGludCBzbGFiX25pZChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoc2xhYi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0cmV0dXJuIG1lbWRlc2NfbmlkKFx1MDAyNnNsYWItXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHBnX2RhdGFfdCAqc2xhYl9wZ2RhdChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbmRpZmYgLS1naXQgYS9tbS9zcGFyc2UuYyBiL21tL3NwYXJzZS5jXG5pbmRleCAxNmFjNmRmM2M4OWZhMi4uOGUzODQ3NzY0NTEzMTkgMTAwNjQ0XG4tLS0gYS9tbS9zcGFyc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3BhcnNlLmNcbkBAIC00Myw3ICYjNDM7NDMsNyBAQCBzdGF0aWMgdTggc2VjdGlvbl90b19ub2RlX3RhYmxlW05SX01FTV9TRUNUSU9OU10gX19jYWNoZWxpbmVfYWxpZ25lZDtcbiBzdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4gI2VuZGlmXG4gXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4mIzQzO2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gc2VjdGlvbl90b19ub2RlX3RhYmxlW21lbWRlc2Nfc2VjdGlvbihtZGYpXTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIHNldmVyYWwgaW5saW5lIG1lbW9yeSBkZXNjcmlwdG9yIGFjY2Vzc29ycyAoZS5nLiwgbWVtZGVzY19uaWQsIG1lbWRlc2Nfc2VjdGlvbikgdG8gdGFrZSBhIHBvaW50ZXIgdG8gbWVtZGVzY19mbGFnc190IGluc3RlYWQgb2YgcGFzc2luZyBpdCBieSB2YWx1ZS4gVGhpcyBmaXhlcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgS0NTQU4gYW5ub3RhdGlvbnMgc28gdGhleSBjb3JyZWN0bHkgbW9uaXRvciB0aGUgYWN0dWFsIHBhZ2UgZmxhZ3MgaW4gbWVtb3J5IHJhdGhlciB0aGFuIGEgbG9jYWwgc3RhY2sgY29weS4gSXQgYWxzbyBhZGRzICNpZmRlZiBDT05GSUdfTlVNQSB0byByZXR1cm4gMCBkaXJlY3RseSB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBhbmQgS0NTQU4gYW5ub3RhdGlvbiBmaXhlcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgdGFyZ2V0ZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4ZTE4MTMzMzE1NzVjNmYyMjgxMjRiYmM4ZDBkMzZiYTMwZGM4ZTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwNzozNjo1NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCmluZGV4IGVmYTY2MTBhY2JjNzk3Li5mODQwNGJjNzc3M2MyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCkBAIC01Myw3ICYjNDM7NTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pCiAgKi8KICNkZWZpbmUgX19wYWdlX3RvX3BmbihwZykJCQkJCVwKICh7CWNvbnN0IHN0cnVjdCBwYWdlICpfX3BnID0gKHBnKTsJCQkJXAotCWludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihfX3BnLSZndDtmbGFncyk7CQlcCiYjNDM7CWludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbigmYW1wO19fcGctJmd0O2ZsYWdzKTsJCVwKIAkodW5zaWduZWQgbG9uZykoX19wZyAtIF9fc2VjdGlvbl9tZW1fbWFwX2FkZHIoX19ucl90b19zZWN0aW9uKF9fc2VjKSkpOwlcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjMxNWQ4OTE3ZjhlNzc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbW11LWRlYnVnLXBhZ2VhbGxvYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rY3Nhbi1jaGVja3MuaCZndDsKIAogc3RydWN0IG1lbXBvbGljeTsKIHN0cnVjdCBhbm9uX3ZtYTsKQEAgLTIyODYsMjMgJiM0MzsyMjg3LDQ1IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIH0KIAogI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1MKLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTsKJiM0MztpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7I2lmZGVmIENPTkZJR19OVU1BCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7Ci0JcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBOT0RFU19QR1NISUZUKSAmYW1wOyBOT0RFU19NQVNLOwomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLSZndDtmLCBOT0RFU19NQVNLICZsdDsmbHQ7IE5PREVTX1BHU0hJRlQpOwomIzQzOwlyZXR1cm4gKG1kZi0mZ3Q7ZiAmZ3Q7Jmd0OyBOT0RFU19QR1NISUZUKSAmYW1wOyBOT0RFU19NQVNLOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiB9CiAjZW5kaWYKJiM0MzsjZW5kaWYKIAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQQogc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpLSZndDtmbGFncyk7CiYjNDM7CWNvbnN0IHN0cnVjdCBwYWdlICpwID0gUEZfUE9JU09ORURfQ0hFQ0socGFnZSk7CiYjNDM7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO3AtJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JcmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO2ZvbGlvLSZndDtmbGFncyk7CiB9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19uaWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZW5kaWYKIAogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwogLyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovCkBAIC0yNTQxLDEyICYjNDM7MjU2NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKQogCXBhZ2UtJmd0O2ZsYWdzLmYgfD0gKHNlY3Rpb24gJmFtcDsgU0VDVElPTlNfTUFTSykgJmx0OyZsdDsgU0VDVElPTlNfUEdTSElGVDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7Ci0JcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBTRUNUSU9OU19QR1NISUZUKSAmYW1wOyBTRUNUSU9OU19NQVNLOwomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLSZndDtmLCBTRUNUSU9OU19NQVNLICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQpOwomIzQzOwlyZXR1cm4gKG1kZi0mZ3Q7ZiAmZ3Q7Jmd0OyBTRUNUSU9OU19QR1NISUZUKSAmYW1wOyBTRUNUSU9OU19NQVNLOwogfQogI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCBhODQzMGE3YWUwNTQ0Ny4uZWZjZGRiOTkyNWFkZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtNjUwLDcgJiM0Mzs2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2hhc19yZWNlbmN5KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogc3RhdGljIGlubGluZSBzaXplX3QgbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG5yX3BhZ2VzKQogewogCXN0cnVjdCBwYWdlICpjdXJfcGFnZSA9IHBhZ2VzWzBdOwotCXVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS0mZ3Q7ZmxhZ3MpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oJmFtcDtjdXJfcGFnZS0mZ3Q7ZmxhZ3MpOwogCXNpemVfdCBpOwogCiAJZm9yIChpID0gMTsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewpAQCAtNjYwLDcgJiM0Mzs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpCiAJCSAqIEluIHVucHJvYmxlbWF0aWMga2VybmVsIGNvbmZpZ3MsIHBhZ2VfdG9fc2VjdGlvbigpID09IDAgYW5kCiAJCSAqIHRoZSB3aG9sZSBjaGVjayB3aWxsIGdldCBvcHRpbWl6ZWQgb3V0LgogCQkgKi8KLQkJaWYgKG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS0mZ3Q7ZmxhZ3MpICE9IHNlY3Rpb24pCiYjNDM7CQlpZiAobWVtZGVzY19zZWN0aW9uKCZhbXA7Y3VyX3BhZ2UtJmd0O2ZsYWdzKSAhPSBzZWN0aW9uKQogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBjYTI3MTIxODcxNDc1Yy4uZTYwZGFkNTQ2Y2E2OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMTI3MiwzMSAmIzQzOzEyNzIsMzMgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpCiAjZGVmaW5lIEtBU0FOX1RBR19NQVNLCQkoKDFVTCAmbHQ7Jmx0OyBLQVNBTl9UQUdfV0lEVEgpIC0gMSkKICNkZWZpbmUgWk9ORUlEX01BU0sJCSgoMVVMICZsdDsmbHQ7IFpPTkVJRF9TSElGVCkgLSAxKQogCi1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIG1lbWRlc2Nfem9uZW51bShtZW1kZXNjX2ZsYWdzX3QgZmxhZ3MpCiYjNDM7c3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0oY29uc3QgbWVtZGVzY19mbGFnc190ICpmbGFncykKIHsKLQlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyAmbHQ7Jmx0OyBaT05FU19QR1NISUZUKTsKLQlyZXR1cm4gKGZsYWdzLmYgJmd0OyZndDsgWk9ORVNfUEdTSElGVCkgJmFtcDsgWk9ORVNfTUFTSzsKJiM0MzsjaWYgWk9ORVNfV0lEVEggIT0gMAomIzQzOwlBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MtJmd0O2YsIFpPTkVTX01BU0sgJmx0OyZsdDsgWk9ORVNfUEdTSElGVCk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAoZmxhZ3MtJmd0O2YgJmd0OyZndDsgWk9ORVNfUEdTSElGVCkgJmFtcDsgWk9ORVNfTUFTSzsKIH0KIAogc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBwYWdlX3pvbmVudW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX3pvbmVudW0oJmFtcDtwYWdlLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tJmd0O2ZsYWdzKTsKJiM0MzsJcmV0dXJuIG1lbWRlc2Nfem9uZW51bSgmYW1wO2ZvbGlvLSZndDtmbGFncyk7CiB9CiAKICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0UKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpCiB7CiAJcmV0dXJuIG1lbWRlc2Nfem9uZW51bShtZGYpID09IFpPTkVfREVWSUNFOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLSZndDtmbGFncyksIHBhZ2UpOwomIzQzOwlWTV9XQVJOX09OX09OQ0VfUEFHRSghbWVtZGVzY19pc196b25lX2RldmljZSgmYW1wO3BhZ2UtJmd0O2ZsYWdzKSwgcGFnZSk7CiAJcmV0dXJuIHBhZ2VfZm9saW8ocGFnZSktJmd0O3BnbWFwOwogfQogCkBAIC0xMzExLDkgJiM0MzsxMzEzLDkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLAogCQkJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGFnZSAqYikKIHsKLQlpZiAobWVtZGVzY19pc196b25lX2RldmljZShhLSZndDtmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShiLSZndDtmbGFncykpCiYjNDM7CWlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKCZhbXA7YS0mZ3Q7ZmxhZ3MpICE9IG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoJmFtcDtiLSZndDtmbGFncykpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoYS0mZ3Q7ZmxhZ3MpKQomIzQzOwlpZiAoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoJmFtcDthLSZndDtmbGFncykpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBwYWdlX3BnbWFwKGEpID09IHBhZ2VfcGdtYXAoYik7CiB9CkBAIC0xMzIxLDcgJiM0MzsxMzIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSwKIGV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKQogewogCXJldHVybiBmYWxzZTsKIH0KQEAgLTEzMzgsMTIgJiM0MzsxMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfem9uZV9kZXZpY2VfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKCZhbXA7cGFnZS0mZ3Q7ZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShmb2xpby0mZ3Q7ZmxhZ3MpOwomIzQzOwlyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZSgmYW1wO2ZvbGlvLSZndDtmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX21vdmFibGVfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBlZTkwMmE0NjhjMmY1Yi4uMDIwYTk3Y2EwMThlOTkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTY5MDQsMTUgJiM0Mzs2OTA0LDE1IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzdGFydCAmYW1wOyZhbXA7IG1lbWRlc2Nfc2VjdGlvbihwYWdlLSZndDtmbGFncykgIT0gc3RhcnRfc2VjKSB7CiYjNDM7CQlpZiAoc3RhcnQgJmFtcDsmYW1wOyBtZW1kZXNjX3NlY3Rpb24oJmFtcDtwYWdlLSZndDtmbGFncykgIT0gc3RhcnRfc2VjKSB7CiAJCQlmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdGFydCwgaSAtIG5yX3N0YXJ0KTsKIAkJCXN0YXJ0ID0gcGFnZTsKIAkJCW5yX3N0YXJ0ID0gaTsKLQkJCXN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLSZndDtmbGFncyk7CiYjNDM7CQkJc3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKCZhbXA7cGFnZS0mZ3Q7ZmxhZ3MpOwogCQl9IGVsc2UgaWYgKCFzdGFydCkgewogCQkJc3RhcnQgPSBwYWdlOwogCQkJbnJfc3RhcnQgPSBpOwotCQkJc3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtJmd0O2ZsYWdzKTsKJiM0MzsJCQlzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oJmFtcDtwYWdlLSZndDtmbGFncyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaAppbmRleCAyODFhNjUyMzM3OTVkNi4uOWRlZDMxOTQ5NWEwNzAgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zbGFiLmgKQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICpzbGFiX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHNsYWJfbmlkKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKQogewotCXJldHVybiBtZW1kZXNjX25pZChzbGFiLSZndDtmbGFncyk7CiYjNDM7CXJldHVybiBtZW1kZXNjX25pZCgmYW1wO3NsYWItJmd0O2ZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBwZ19kYXRhX3QgKnNsYWJfcGdkYXQoY29uc3Qgc3RydWN0IHNsYWIgKnNsYWIpCmRpZmYgLS1naXQgYS9tbS9zcGFyc2UuYyBiL21tL3NwYXJzZS5jCmluZGV4IDE2YWM2ZGYzYzg5ZmEyLi44ZTM4NDc3NjQ1MTMxOSAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3BhcnNlLmMKQEAgLTQzLDcgJiM0Mzs0Myw3IEBAIHN0YXRpYyB1OCBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkOwogc3RhdGljIHUxNiBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkOwogI2VuZGlmCiAKLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKQomIzQzO2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZikKIHsKIAlyZXR1cm4gc2VjdGlvbl90b19ub2RlX3RhYmxlW21lbWRlc2Nfc2VjdGlvbihtZGYpXTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg2OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyB0aGUgYG1lbWRlc2NfZmxhZ3NfdGAgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBhIHJlZmFjdG9yaW5nIG9mIGhvdyB3ZSBoYW5kbGUgdGhlIGBtZW1kZXNjX2ZsYWdzX3RgIHN0cnVjdHVyZSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgbWVtb3J5IGRlc2NyaXB0b3IgKG1lbWRlc2MpIGZ1bmN0aW9ucy4gVGhlIGtleSBjaGFuZ2UgaXMgdG8gbW9kaWZ5IHRoZSBzaWduYXR1cmVzIG9mIHNldmVyYWwgZnVuY3Rpb25zOiBgbWVtZGVzY19uaWRgLCBgbWVtZGVzY19zZWN0aW9uYCwgYG1lbWRlc2Nfem9uZW51bWAsIGFuZCBgbWVtZGVzY19pc196b25lX2RldmljZWAuIEluc3RlYWQgb2YgcGFzc2luZyBgbWVtZGVzY19mbGFnc190YCBieSB2YWx1ZSwgdGhleSYjMzk7cmUgbm93IHRha2luZyBhIHBvaW50ZXIgdG8gaXQsIHNvIGBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKWAgaXMgbm93IGBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilgLgoKQmV5b25kIHRoYXQsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHVwZGF0aW5nIHRoZSBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBtYWNybyBjYWxscyB0byByZWZsZWN0IHRoaXMgY2hhbmdlIOKAkyBzaGlmdGluZyBmcm9tIGBtZGYuZmAgdG8gYG1kZi0mZ3Q7ZmAuIEl0IHNlZW1zIGxpa2UgYSBjb25zaXN0ZW50IHBhdHRlcm4uIFRoZXJlJiMzOTtzIGFsc28gc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoYXBwZW5pbmcgd2l0aCBgI2lmZGVmIENPTkZJR19OVU1BYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgdGhlc2UgY29uZGl0aW9uYWxzIGFyb3VuZCB0aGUgYG1lbWRlc2NfbmlkYCBmdW5jdGlvbiwgYWxvbmcgd2l0aCBgcGFnZV90b19uaWRgIGFuZCBgZm9saW9fbmlkYCwgdG8gcmV0dXJuIDAgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBTbyB3aGVuIE5VTUEgaXMgZGlzYWJsZWQsIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHNpbXBseSByZXR1cm4gMC4gVGhlIHBhdGNoIGFsc28gYWRkcyBgI2lmIFpPTkVTX1dJRFRIICE9IDBgIGFyb3VuZCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBpbiBgbWVtZGVzY196b25lbnVtYC4KCkZyb20gYSBjdXJzb3J5IGdsYW5jZSBhdCB0aGUgY2hhbmdlZCBmaWxlcyDigJMgYGluY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAsIGBtbS9wYWdlX2FsbG9jLmNgLCBgbW0vc2xhYi5oYCwgYW5kIGBtbS9zcGFyc2UuY2Ag4oCTIGl0IGFwcGVhcnMgdG8gYmUgYSBtYWNybyBmaXggYW5kIGEgcG9pbnRlciBvcHRpbWl6YXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJlZmFjdG9yaW5nIGFzcGVjdCBvZiBwYXNzaW5nIGJ5IHBvaW50ZXIgaW5zdGVhZCBvZiBieSB2YWx1ZSwgYW5kIHRoZSBgI2lmZGVmIENPTkZJR19OVU1BYCBjb25kaXRpb25hbCBsb2dpYy4gSXQgbG9va3MgbGlrZSBpdCBzaG91bGQgYmUgcHVyZWx5IGEgcmVmYWN0b3JpbmcuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IGZ1bmN0aW9uYWwgbG9naWMgaGFzIGNoYW5nZWQsIGJ1dCBhdCB0aGlzIHN0YWdlLCBpdCBzZWVtcyB1bmxpa2VseSBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLiBUaGUgcHJpbWFyeSBnb2FsIGlzIGxpa2VseSB0byBpbXByb3ZlIGVmZmljaWVuY3kgKGVzcGVjaWFsbHkgbWVtb3J5IGNvcGllcyksIG9yIHBvdGVudGlhbGx5IHJlZHVjZSBzdGFjayB1c2FnZSB3aXRoIHRoZSBwb2ludGVyIHBhcmFtZXRlci4gTGV0JiMzOTtzIHNlZSB3aGF0IGBtZW1kZXNjX2ZsYWdzX3RgIGFjdHVhbGx5IGlzIHVuZGVyIHRoZSBob29kLi4uIGl0JiMzOTtzIHByb2JhYmx5IGEgc3RydWN0IG9yIHR5cGVkZWYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0eXBlZGVmLiptZW1kZXNjX2ZsYWdzX3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NjAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHNlYXJjaDoKCioqRGl2aW5nIGludG8gYG1lbWRlc2NfZmxhZ3NfdGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBtZW1kZXNjX2ZsYWdzX3RgIGlzIGFsbCBhYm91dC4gVGhlIGZpcnN0IHN0ZXAgaXMgY2xlYXJseSB0byBmaW5kIGl0cyBkZWZpbml0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSB0aGlzIHN0cnVjdCBvciB0eXBlIGlzIGRlZmluZWQgaW4gdGhlIHByb2plY3QmIzM5O3Mgc291cmNlIGNvZGUuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgc28gdW5kZXJzdGFuZGluZyBpdHMgc3RydWN0dXJlIHdpbGwgcHJvYmFibHkgdW5sb2NrIGEgZ29vZCBjaHVuayBvZiB1bmRlcnN0YW5kaW5nIGFib3V0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciB0aGUgbGl0ZXJhbCBzdHJpbmcgYG1lbWRlc2NfZmxhZ3NfdGAuIEhvcGVmdWxseSwgdGhlIHRvb2xpbmcgY2FuIG5hdmlnYXRlIG1lIGRpcmVjdGx5IHRvIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZSBvciBzb3VyY2UgY29kZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSBpdHMgbWVtYmVycyBhbmQgZGF0YSB0eXBlcywgYW5kIGhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCBzb21lIGV4cGxhbmF0b3J5IGNvbW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IG1lbWRlc2NfZmxhZ3NfdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqUG9zc2libGUgRGF0YSBTdHJ1Y3R1cmUgZm9yIE1lbW9yeSBEZXNjcmlwdG9yIEZsYWdzKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHN0cnVjdHVyZSB0byBob2xkIG1lbW9yeSBkZXNjcmlwdG9yIGZsYWdzLCBwcm9iYWJseSBmb3Igc29tZSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHNvbWV0aGluZyB2ZXJ5IGJhc2ljIGJ1dCBlZmZpY2llbnQ6IGEgYHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBmOyB9IG1lbWRlc2NfZmxhZ3NfdDtgLiBUaGlzIGlzIGxpa2VseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIGB1bnNpZ25lZCBsb25nYCBiZWNhdXNlIGl0IGdpdmVzIHVzIGEgZGVjZW50IG51bWJlciBvZiBiaXRzIHRvIHdvcmsgd2l0aCBmb3IgdmFyaW91cyBmbGFncyB3aXRob3V0IGV4Y2Vzc2l2ZSBtZW1vcnkgb3ZlcmhlYWQgb24gbW9zdCBtb2Rlcm4gYXJjaGl0ZWN0dXJlcy4gSXQmIzM5O3MgYSBwcmFnbWF0aWMgY2hvaWNlIGZvciBzdG9yaW5nIGEgY29sbGVjdGlvbiBvZiBib29sZWFuIHZhbHVlcyAodGhlIGluZGl2aWR1YWwgZmxhZ3MpLiBPZiBjb3Vyc2UsIHRoaXMgaXMganVzdCBhIHF1aWNrIGFuZCBkaXJ0eSBjb25jZXB0dWFsIHN0cnVjdHVyZS4gSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIGFsaWdubWVudCBpc3N1ZXMsIHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zLCBhbmQgZXhhY3RseSAqd2hhdCogZmxhZ3MgYXJlIG5lZWRlZCBiZWZvcmUgc2V0dGxpbmcgb24gdGhpcyBhcyB0aGUgZGVmaW5pdGl2ZSBzb2x1dGlvbi4gSSYjMzk7ZCBhbHNvIGxvb2sgYXQgY29tcGlsZXItc3BlY2lmaWMgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBsYXlvdXQuIFRoZSBrZXkgaXMgdG8ga2VlcCBpdCBzaW1wbGUsIGZhc3QsIGFuZCBlYXN5IHRvIHVuZGVyc3RhbmQgYXQgdGhpcyBwb2ludC4gSSYjMzk7ZCBtb3ZlIG9uIHRvIHJlZmluaW5nIGl0IGJhc2VkIG9uIHRoZSBleGFjdCB1c2FnZSByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZGVzY19mbGFnc190JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD0yMjg0PXN0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfem9uZV9pZChzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI4OS0jaWZkZWYgTk9ERV9OT1RfSU5fUEFHRV9GTEFHU1xuaW5jbHVkZS9saW51eC9tbS5oOjIyOTA6aW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKTtcbmluY2x1ZGUvbGludXgvbW0uaC0yMjkxLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tLmgtMjI5Mi0jaWZkZWYgQ09ORklHX05VTUFcbmluY2x1ZGUvbGludXgvbW0uaDoyMjkzOnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTQte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMjk4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5OTpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yMzAwLXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MjU2MT1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yNTY2LVxuaW5jbHVkZS9saW51eC9tbS5oOjI1Njc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yNTY4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU3Mi0jZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MjU3MzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuaW5jbHVkZS9saW51eC9tbS5oLTI1NzQte1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0zOT10eXBlZGVmIHN0cnVjdCB7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDAtXHR1bnNpZ25lZCBsb25nIGY7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6NDE6fSBtZW1kZXNjX2ZsYWdzX3Q7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNDItXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTgwPXN0cnVjdCBwYWdlIHtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo4MTpcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcdFx0LyogQXRvbWljIGZsYWdzLCBzb21lIHBvc3NpYmx5XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODItXHRcdFx0XHRcdCAqIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NDAyPXN0cnVjdCBmb2xpbyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwNi1cdC8qIHB1YmxpYzogKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo0MDc6XHRcdFx0bWVtZGVzY19mbGFnc190IGZsYWdzO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwOC1cdFx0XHR1bmlvbiB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTU3Mz1zdHJ1Y3QgcHRkZXNjIHtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1NzQ6XHRtZW1kZXNjX2ZsYWdzX3QgcHRfZmxhZ3M7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtNTc1LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTIyND1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzQtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyNzU6c3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0oY29uc3QgbWVtZGVzY19mbGFnc190ICpmbGFncylcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI3Ni17XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMjg4PXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5My0jaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyOTQ6c3RhdGljIGlubGluZSBib29sIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyOTUte1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTMyMz1leHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqLCB1bnNpZ25lZCBsb25nLFxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyNS0jZWxzZVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMzI2OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMzI3LXtcbi0tXG5tbS9zbGFiLmg9OTg9c3RydWN0IHNsYWIge1xubW0vc2xhYi5oOjk5Olx0bWVtZGVzY19mbGFnc190IGZsYWdzO1xubW0vc2xhYi5oLTEwMC1cbi0tXG5tbS9zcGFyc2UuYz00Mz1zdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4tLVxubW0vc3BhcnNlLmMtNDUtXG5tbS9zcGFyc2UuYzo0NjppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG5tbS9zcGFyc2UuYy00Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzNQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gdGhlIG1haW4gY2hhbmdlIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgYG1lbWRlc2NfZmxhZ3NfdGAuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgc3VnZ2VzdGluZyBwYXNzaW5nIGl0IGJ5IHBvaW50ZXIgbm93IGluc3RlYWQgb2YgYnkgdmFsdWUuIEhtbW0sIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBQYXNzaW5nIGJ5IHBvaW50ZXIgaW1wbGllcyB0aGUgcG9zc2liaWxpdHkgb2YgbW9kaWZpY2F0aW9uIGluIHBsYWNlLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGJlbmVmaXQgY291bGQgYmUgcmVkdWNlZCBjb3B5aW5nLCBlc3BlY2lhbGx5IGlmIHRoZSBzdHJ1Y3R1cmUgaXMgbGFyZ2UuIExldCYjMzk7cyBkaWcgZGVlcGVyIHRvIGFzc2VzcyB0aGUgdHJhZGUtb2Zmcy4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYEFTU0VSVF9FWENMVVNJVkVfQklUU2AuIFRoYXQmIzM5O3MgYSBLQ1NBTiBtYWNybywgaXNuJiMzOTt0IGl0PyBNeSBzcGlkZXIgc2Vuc2VzIGFyZSB0aW5nbGluZy4gS0NTQU4gaXMgYWxsIGFib3V0IGRldGVjdGluZyBkYXRhIHJhY2VzLCBhbmQgdGhpcyBtYWNybyBpcyBwcm9iYWJseSBjcnVjaWFsIGZvciBlbmZvcmNpbmcgZXhjbHVzaXZlIGFjY2VzcyB0byBzcGVjaWZpYyBiaXRmaWVsZHMgd2l0aGluIHRoaXMgc3RydWN0dXJlLCByaWdodD8gSXQgY291bGQgYmUgcHJvdGVjdGluZyBhZ2FpbnN0IHNpbXVsdGFuZW91cyByZWFkcyBhbmQgd3JpdGVzIGZyb20gZGlmZmVyZW50IHRocmVhZHMsIG9yIG1heWJlIGV2ZW4gd2l0aGluIGludGVycnVwdCBjb250ZXh0cy4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIHVuZGVyc3RhbmQgaG93IHRoaXMgbWFjcm8gd29ya3MgaW4gcmVsYXRpb24gdG8gdGhpcyBjaGFuZ2UuIFdlIG5lZWQgdG8ga25vdyB3aGF0IGl0IGRvZXMgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGZsYWcgc3RydWN0dXJlLCBiZWNhdXNlIHRoZSBLQ1NBTiBhc3BlY3QgaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0byBlbnN1cmUgd2UgaGF2ZSBub3QgY3JlYXRlZCBhIGxhdGVudCBjb25jdXJyZW5jeSBidWcuIEkgYmV0dGVyIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVNTRVJUX0VYQ0xVU0lWRV9CSVRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdD0yMzY9cHJvcGVydGllcyBvZiBjb25jdXJyZW50IGNvZGUgd2hlcmUgYnVncyB3b3VsZCBub3QgbWFuaWZlc3QgYXMgZGF0YSByYWNlcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY3Nhbi5yc3QtMjQwLSAgICAgICAgICAgICAgICBBU1NFUlRfRVhDTFVTSVZFX0FDQ0VTUyBBU1NFUlRfRVhDTFVTSVZFX0FDQ0VTU19TQ09QRURcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdDoyNDE6ICAgICAgICAgICAgICAgIEFTU0VSVF9FWENMVVNJVkVfQklUU1xuRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2NzYW4ucnN0LTI0Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oPTIzMj1zdGF0aWMgaW5saW5lIHZvaWQgX19rY3Nhbl9kaXNhYmxlX2N1cnJlbnQodm9pZCkgeyB9XG4tLVxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00NzAtLyoqXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjQ3MTogKiBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgLSBhc3NlcnQgbm8gY29uY3VycmVudCB3cml0ZXMgdG8gc3Vic2V0IG9mIGJpdHMgaW4gQHZhclxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00NzItICpcbi0tXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTQ5MC0gKlxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo0OTE6ICpcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncywgUkVBRF9PTkxZX01BU0spO1xuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00OTItICpcdGZvbyA9IChSRUFEX09OQ0UoZmxhZ3MpIFx1MDAyNiBSRUFEX09OTFlfTUFTSykgXHUwMDNlXHUwMDNlIFJFQURfT05MWV9TSElGVDtcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNDkzLSAqXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjQ5NDogKiBOb3RlOiBUaGUgYWNjZXNzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMoKSBpcyBhc3N1bWVkXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTQ5NS0gKiB0byBhY2Nlc3MgdGhlIG1hc2tlZCBiaXRzIG9ubHksIGFuZCBLQ1NBTiBvcHRpbWlzdGljYWxseSBhc3N1bWVzIGl0IGlzXG4tLVxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC01MDQtICpcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmg6NTA1OiAqXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MsIFJFQURfT05MWV9NQVNLKTtcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTA2LSAqXHRmb28gPSAoZmxhZ3MgXHUwMDI2IFJFQURfT05MWV9NQVNLKSBcdTAwM2VcdTAwM2UgUkVBRF9PTkxZX1NISUZUO1xuLS1cbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTE1LSAqXHRzcGluX2xvY2soXHUwMDI2Zm9vX2xvY2spO1xuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo1MTY6ICpcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncywgRk9PX01BU0spO1xuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC01MTctICpcdG9sZF9mbGFncyA9IGZsYWdzO1xuLS1cbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTI0LSAqL1xuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo1MjU6I2RlZmluZSBBU1NFUlRfRVhDTFVTSVZFX0JJVFModmFyLCBtYXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTUyNi1cdGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MjI5Mz1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk0LXtcbmluY2x1ZGUvbGludXgvbW0uaDoyMjk1Olx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk2LVx0cmV0dXJuIChtZGYtXHUwMDNlZiBcdTAwM2VcdTAwM2UgTk9ERVNfUEdTSElGVCkgXHUwMDI2IE5PREVTX01BU0s7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI1Njc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbmluY2x1ZGUvbGludXgvbW0uaC0yNTY4LXtcbmluY2x1ZGUvbGludXgvbW0uaDoyNTY5Olx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBTRUNUSU9OU19NQVNLIFx1MDAzY1x1MDAzYyBTRUNUSU9OU19QR1NISUZUKTtcbmluY2x1ZGUvbGludXgvbW0uaC0yNTcwLVx0cmV0dXJuIChtZGYtXHUwMDNlZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMjc1PXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjc3LSNpZiBaT05FU19XSURUSCAhPSAwXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyNzg6XHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MtXHUwMDNlZiwgWk9ORVNfTUFTSyBcdTAwM2NcdTAwM2MgWk9ORVNfUEdTSElGVCk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzktI2VuZGlmXG4tLVxua2VybmVsL2tjc2FuL2tjc2FuX3Rlc3QuYz0zOTA9c3RhdGljIG5vaW5saW5lIHZvaWQgdGVzdF9rZXJuZWxfYXNzZXJ0X2JpdHNfY2hhbmdlKHZvaWQpXG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jLTM5MS17XG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jOjM5MjpcdEFTU0VSVF9FWENMVVNJVkVfQklUUyh0ZXN0X3ZhciwgVEVTVF9DSEFOR0VfQklUUyk7XG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jLTM5My19XG4tLVxua2VybmVsL2tjc2FuL2tjc2FuX3Rlc3QuYz0zOTU9c3RhdGljIG5vaW5saW5lIHZvaWQgdGVzdF9rZXJuZWxfYXNzZXJ0X2JpdHNfbm9jaGFuZ2Uodm9pZClcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmMtMzk2LXtcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmM6Mzk3Olx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHRlc3RfdmFyLCB+VEVTVF9DSEFOR0VfQklUUyk7XG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jLTM5OC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwOTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5kZXJzdGFuZGluZyB0aGUgSW1wbGljYXRpb25zIG9mIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFModmFyLCBtYXNrKWAgbWFjcm8gYW5kIHRyeWluZyB0byBncmFzcCBpdHMgYmVoYXZpb3IuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCB3YXMgc2ltcGx5IGNoZWNraW5nIHRoZSB2YWx1ZSBvZiBgdmFyYCBhZ2FpbnN0IHRoZSBtYXNrLiBCdXQgaG9sZCBvbiwgaXQgYXBwZWFycyB0aGF0IHRoZSBtYWNybyBkb2VzbiYjMzk7dCBqdXN0IHJlYWQgYHZhcmA7IGl0ICpjcmVhdGVzKiBhIHJlYWQvd3JpdGUgYWNjZXNzLiBJbnRyaWd1aW5nIQoKVGhpcyBicmluZ3MgbWUgdG8gdGhlIGNvcmUgaXNzdWUuIElmIEkgcGFzc2VkIGBtZGZgIGJ5IHZhbHVlLCB0aGUgYG1kZi5mYCBtZW1iZXIgd291bGQgYmUgYSBsb2NhbCBzdGFjayB2YXJpYWJsZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBjYWxsIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLmYsIC4uLilgIHdvdWxkIGJlIHZlcmlmeWluZyBjb25jdXJyZW50IHdyaXRlcyB0byAqdGhhdCBsb2NhbCBjb3B5KiBvbiB0aGUgc3RhY2ssIG5vdCB0aGUgYWN0dWFsIGBwYWdlLSZndDtmbGFnc2AgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQhIEFic29sdXRlbHkgdXNlbGVzcy4gQSBjb21wbGV0ZSB3YXN0ZSBvZiB0aW1lLgoKSG93ZXZlciwgd2hlbiBgbWRmYCBpcyBhIHBvaW50ZXIsIGBtZGYtJmd0O2ZgIGNvcnJlY3RseSBkZXJlZmVyZW5jZXMgdGhlIHBvaW50ZXIsIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgbWVtb3J5IGxvY2F0aW9uIG9mIHRoZSAqYWN0dWFsKiBgcGFnZS0mZ3Q7ZmxhZ3NgLiBUaHVzLCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB3aWxsIGNvcnJlY3RseSBjaGVjayBmb3IgY29uY3VycmVudCB3cml0ZXMgdG8gdGhlIHRhcmdldCBtZW1vcnkuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGxvb2sgYXQgdGhlIG1hY3JvIGl0c2VsZi4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0ICpcdHNwaW5fdW5sb2NrKFx1MDAyNmZvb19sb2NrKTtcbiA1MjE6XHQgKlxuIDUyMjpcdCAqIEB2YXI6IHZhcmlhYmxlIHRvIGFzc2VydCBvblxuIDUyMzpcdCAqIEBtYXNrOiBvbmx5IGNoZWNrIGZvciBtb2RpZmljYXRpb25zIHRvIGJpdHMgc2V0IGluIEBtYXNrXG4gNTI0Olx0ICovXG4gNTI1Olx0I2RlZmluZSBBU1NFUlRfRVhDTFVTSVZFX0JJVFModmFyLCBtYXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gNTI2Olx0XHRkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gNTI3Olx0XHRcdGtjc2FuX3NldF9hY2Nlc3NfbWFzayhtYXNrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gNTI4Olx0XHRcdF9fa2NzYW5fY2hlY2tfYWNjZXNzKFx1MDAyNih2YXIpLCBzaXplb2YodmFyKSwgS0NTQU5fQUNDRVNTX0FTU0VSVCk7XFxcbiA1Mjk6XHRcdFx0a2NzYW5fc2V0X2FjY2Vzc19tYXNrKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiA1MzA6XHRcdFx0a2NzYW5fYXRvbWljX25leHQoMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiA1MzE6XHRcdH0gd2hpbGUgKDApXG4gNTMyOlx0XG4gNTMzOlx0I2VuZGlmIC8qIF9MSU5VWF9LQ1NBTl9DSEVDS1NfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODUzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktDU0FOIEZpeCBhbmQgTlVNQSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCB5ZXMhIFRoZSBsaW5lIGBfX2tjc2FuX2NoZWNrX2FjY2VzcygmYW1wOyh2YXIpLCBzaXplb2YodmFyKSwgS0NTQU5fQUNDRVNTX0FTU0VSVCk7YCBpcyB0aGUga2V5LiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBpZiBgdmFyYCB3YXMgc29tZXRoaW5nIGxpa2UgYG1kZi5mYCB3aGVyZSBgbWRmYCB3YXMgcGFzc2VkIGJ5IHZhbHVlLCB0aGVuIGAmYW1wOyhtZGYuZilgIHdvdWxkIGJlIHRoZSBhZGRyZXNzIG9mIHRoZSAqbG9jYWwqIGNvcHkgb24gdGhlIHN0YWNrLiBLQ1NBTiB3b3VsZCBpbmNvcnJlY3RseSBtb25pdG9yIHRoZSBzdGFjayB2YXJpYWJsZSBmb3IgY29uY3VycmVudCB3cml0ZXMuIFRoYXQmIzM5O3MgY2xlYXJseSB3cm9uZy4KClRoZSBmaXgsIGNoYW5naW5nIHRoZSBzaWduYXR1cmUgdG8gYGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmYCwgaXMgYnJpbGxpYW50LiBOb3csIGBtZGYtJmd0O2ZgIGlzIHBhc3NlZCB0byBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCwgYW5kIGAmYW1wOyhtZGYtJmd0O2YpYCBiZWNvbWVzIHRoZSAqYWN0dWFsKiBhZGRyZXNzIG9mIGBwYWdlLSZndDtmbGFnc2AuICBUaGlzIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50ZWQhIFRoaXMgbWVhbnMgS0NTQU4gd2lsbCBjb3JyZWN0bHkgbW9uaXRvciBgcGFnZS0mZ3Q7ZmxhZ3NgIGZvciBjb25jdXJyZW50IHdyaXRlcywgZmluYWxseSBlbnN1cmluZyBwcm9wZXIgY29uY3VycmVuY3kgY2hlY2tpbmcgb24gdGhvc2UgYml0cy4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQgKnNob3VsZG4mIzM5O3QqIGJlY2F1c2UgS0NTQU4gaXMgYSBkeW5hbWljIGFuYWx5c2lzIHRvb2wsIHJpZ2h0PyBUaGUgcGF0Y2ggaXMgb25seSBzdXBwb3NlZCB0byBmaXggS0NTQU4gY2hlY2tzLiBCdXQgaXQgKmFsc28qIGFkZHMgYCNpZmRlZiBDT05GSUdfTlVNQWAgdG8gYG1lbWRlc2NfbmlkYCBhbmQgYHBhZ2VfdG9fbmlkYC9gZm9saW9fbmlkYCB0byByZXR1cm4gMCB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gSWYgTlVNQSBpcyBkaXNhYmxlZCwgZG9lcyBgbWVtZGVzY19uaWRgIHJldHVybmluZyAwIGFjdHVhbGx5ICpjaGFuZ2UqIGhvdyB0aGluZ3Mgd29yaz8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIG9yaWdpbmFsIGNvZGU6CgpgYGBjCnN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCnsKCXJldHVybiAobWRmLmYgJmd0OyZndDsgTk9ERVNfUEdTSElGVCkgJmFtcDsgTk9ERVNfTUFTSzsKfQpgYGAKCk9rYXksIGlmIE5VTUEgKmlzKiBkaXNhYmxlZCwgdGhlbiBgTk9ERVNfUEdTSElGVGAgaXMgKnByb2JhYmx5KiAwLCBhbmQgYE5PREVTX01BU0tgIGlzIGxpa2VseSBhbHNvIDAuIExldCBtZSBqdXN0IGNoZWNrIHRoYXQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBOT0RFU19NQVNLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9MTIyND1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNjgtI2RlZmluZSBaT05FU19NQVNLXHRcdCgoMVVMIFx1MDAzY1x1MDAzYyBaT05FU19XSURUSCkgLSAxKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjY5OiNkZWZpbmUgTk9ERVNfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgTk9ERVNfV0lEVEgpIC0gMSlcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI3MC0jZGVmaW5lIFNFQ1RJT05TX01BU0tcdFx0KCgxVUwgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1dJRFRIKSAtIDEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODE3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogVmFyaWFibGUgVmVyaWZpY2F0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnkgZGVlcGVyIGFuYWx5c2lzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgYSBzcGVjaWZpYywgbGlrZWx5IGNydWNpYWwsIHBhcmFtZXRlci4gVGhlIHBocmFzZSAmIzM0O0xldCYjMzk7cyBjaGVjayBgTk9ERVNfV0lEVEhgJiMzNDsgdHJpZ2dlcnMgYSBtZW50YWwgc2Nhbi4gTXkgYnJhaW4gaXMgaW1tZWRpYXRlbHkgYXNzZXNzaW5nIHRoZSBjb250ZXh0LCBhc3N1bWluZyBpdCByZWxhdGVzIHRvIGEgY29kZWJhc2Ugb3Igc3lzdGVtIGRlc2lnbiB3aGVyZSBgTk9ERVNfV0lEVEhgIGlzIGEgZGVmaW5lZCBjb25zdGFudCBvciB2YXJpYWJsZS4gSXMgdGhpcyByZWxhdGVkIHRvIGEgdXNlciBpbnRlcmZhY2U/IENvbXB1dGF0aW9uYWwgZ2VvbWV0cnk/IE5ldHdvcmsgYXJjaGl0ZWN0dXJlPyBUaGUgc3BlY2lmaWMgZmllbGQgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZGVmaW5lZCwgYnV0IHRoZSBwcmVjaXNpb24gaW5kaWNhdGVzIGl0cyBwb3RlbnRpYWxseSBjZW50cmFsIGltcG9ydGFuY2UgdG8gc29tZSBwcm9jZXNzLiBNeSBmb2N1cyBub3cgaXMgb24gd2hhdCB0aGlzIHZhcmlhYmxlIHJlcHJlc2VudHMgYW5kIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIHRoaXMgYnJvYWRlciBjb250ZXh0LiBJIG5lZWQgdG8gZW5zdXJlIGl0cyB2YWx1ZSBpcyB3aGF0IEkgZXhwZWN0LCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIGlzbiYjMzk7dCBiZWluZyBvdmVyd3JpdHRlbiBhbnl3aGVyZSBpbmFkdmVydGVudGx5LiBUaGUgdXJnZW5jeSBzdWdnZXN0cyB0aGF0IGEgcG90ZW50aWFsIHByb2JsZW0gbWlnaHQgaGluZ2Ugb24gdGhpcyBzcGVjaWZpYyB3aWR0aCBwYXJhbWV0ZXIgYW5kIGl0IG11c3QgYmUgdmVyaWZpZWQgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBOT0RFU19XSURUSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0LmgtNTktXHRcdTAwM2M9IEJJVFNfUEVSX0xPTkcgLSBOUl9QQUdFRkxBR1NcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy1sYXlvdXQuaDo2MDojZGVmaW5lIE5PREVTX1dJRFRIXHRcdE5PREVTX1NISUZUXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0LmgtNjEtI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVApXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTYzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0Lmg6NjQ6I2RlZmluZSBOT0RFU19XSURUSFx0XHQwXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0LmgtNjUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjE0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogSXMgdGhpcyBXb3J0aCBGdXp6aW5nPyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzOiBpZiBgTk9ERVNfV0lEVEhgIGlzIHplcm8sIHRoZSBtYXNrIGlzIGFsc28gemVybywgc28gdGhlIHJlc3VsdCBpcyBhbHJlYWR5IHplcm8uIFRoZSBwYXRjaCBqdXN0IHNlZW1zIHRvIHNob3J0LWNpcmN1aXQgdGhlIGNhbGwgYW5kIGF2b2lkIGEgcG90ZW50aWFsIHJlYWQuIEJ1dCB3YWl0LCBpdCBhbHNvIGFkZHMgYCNpZmRlZiBDT05GSUdfTlVNQWAgYW5kIHJldHVybnMgMCBkaXJlY3RseSwgd2hpY2ggY291bGQgYmUgYW4gb3B0aW1pemF0aW9uIG9yIGF2b2lkIHRoZSBLQ1NBTiBjaGVjayB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoZSBrZXkgaXMgdGhhdCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBub3cgY29ycmVjdGx5IGNoZWNrcyBmb3IgY29uY3VycmVudCB3cml0ZXMgdG8gcGFnZSBmbGFncywgYW5kIHRoZSBgUEZfUE9JU09ORURfQ0hFQ0tgIGNhbGwgaXMgYnlwYXNzZWQgd2hlbiBOVU1BIGlzIGRpc2FibGVkLgoKQmVmb3JlIHRoZSBwYXRjaCwgZXZlbiB3aXRoIE5VTUEgZGlzYWJsZWQsIGBwYWdlX3RvX25pZGAgY2FsbGVkIGBQRl9QT0lTT05FRF9DSEVDS2AsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBwYW5pYyBvbiBhIHBvaXNvbmVkIHBhZ2UuIE5vdywgaXQganVzdCByZXR1cm5zIDAuIFNvLCBpdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXMgaXQgcmVtb3ZlcyBhIHBvaXNvbiBjaGVjaywgYnV0IGlzIGl0IHdvcnRoIGZ1enppbmc/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLiBGdXp6aW5nIHdvdWxkbiYjMzk7dCBmaW5kIGFueXRoaW5nIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoaXMgcmVtb3ZhbC4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgZml4aW5nIHRoZSBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBjaGVjayBmb3IgS0NTQU4uIFRoaXMgaXMgYSBLQ1NBTiBhbm5vdGF0aW9uLCBhIGRlYnVnZ2luZyB0b29sLCBhbmQgaXQgZG9lc24mIzM5O3QgY2hhbmdlIHRoZSBmdW5jdGlvbmFsIGZsb3cgb2YgdGhlIGtlcm5lbCB1bmxlc3MgS0NTQU4gaXMgZW5hYmxlZC4gIElmIEtDU0FOIGlzIGVuYWJsZWQsIGl0ICpkb2VzKiBhbHRlciB0aGUgZmxvdyBieSBjYWxsaW5nIGBfX2tjc2FuX2NoZWNrX2FjY2Vzc2AsIGJ1dCB0aGUgcHJvbXB0IHNheXMgdG8gaWdub3JlIHRoaW5ncyB0aGF0ICYjMzQ7ZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdyYjMzQ7LiBGaXhlcyB0byBLQ1NBTiBjaGVja3MgYXJlIG5vdCBjb25zaWRlcmVkIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBiZSBmdXp6ZWQuCgpIb3dldmVyLCB0aGUgcGF0Y2ggKmRvZXMqIG1vZGlmeSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBtZW1kZXNjX25pZGAsIGBtZW1kZXNjX3NlY3Rpb25gLCBgbWVtZGVzY196b25lbnVtYCwgYW5kIGBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlYC4gIFRoZXNlIGFyZSBhbGwgYHN0YXRpYyBpbmxpbmVgIChleGNlcHQgZm9yIGBtZW1kZXNjX25pZGAgaW4gYG1tL3NwYXJzZS5jYCksIGFuZCBpdCBjaGFuZ2VzIHRoZW0gdG8gdGFrZSBhIHBvaW50ZXIgaW5zdGVhZCBvZiBhIHZhbHVlLiAgRG9lcyB0aGlzIGNoYW5nZSBhbHRlciBmbG93PyBOb3BlLCBqdXN0IGF2b2lkcyBhIGNvcHkgYW5kIGFsbG93cyBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB0byBjaGVjayB0aGUgYWN0dWFsIGZsYWcgYml0cyBpbnN0ZWFkIG9mIGEgbG9jYWwgY29weS4KClNvLCBpbiBlc3NlbmNlLCB0aGUgcGF0Y2ggaXMgZml4aW5nIEtDU0FOIGFubm90YXRpb25zIGFuZCBtYWtpbmcgYSBtaW5vciBvcHRpbWl6YXRpb24vY2xlYW51cC4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGxvZ2ljIG9yIGZpeCBhIHJlYWwgYnVnLCBmcm9tIHdoYXQgSSBjYW4gdGVsbC4gIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJvbXB0LCBzbyBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1kZXNjX25pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NwYXJzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NwYXJzZS5jPTQzPXN0YXRpYyB1MTYgc2VjdGlvbl90b19ub2RlX3RhYmxlW05SX01FTV9TRUNUSU9OU10gX19jYWNoZWxpbmVfYWxpZ25lZDtcbi0tXG5tbS9zcGFyc2UuYy00NS1cbm1tL3NwYXJzZS5jOjQ2OmludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbm1tL3NwYXJzZS5jLTQ3LXtcbi0tXG5tbS9zcGFyc2UuYy00OS19XG5tbS9zcGFyc2UuYzo1MDpFWFBPUlRfU1lNQk9MKG1lbWRlc2NfbmlkKTtcbm1tL3NwYXJzZS5jLTUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTaWduYXR1cmUgQ2hhbmdlKioKCk9rYXksIHNvIEkganVzdCBub3RpY2VkIGEgY2hhbmdlIGluIHRoZSBgbWVtZGVzY19uaWRgIGZ1bmN0aW9uJiMzOTtzIHNpZ25hdHVyZS4gSXQmIzM5O3Mgc3VidGxlLCBidXQgc2lnbmlmaWNhbnQg4oCTIGl0IG5vdyBhY2NlcHRzIGEgcG9pbnRlciB0byBhIGBtZW1kZXNjX2ZsYWdzX3RgIChgY29uc3QgbWVtZGVzY19mbGFnc190ICptZGZgKSBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmIChgbWVtZGVzY19mbGFnc190IG1kZmApLiBUaGlzIGlzIGNsZWFybHkgYSBzaWduYXR1cmUgYWRqdXN0bWVudCwgbGlrZWx5IGRvbmUgdG8gYWxpZ24gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZS4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKQnV0IG5vdyBJJiMzOTttIGN1cmlvdXMuIFdoZXJlIGVsc2UgbWlnaHQgd2UgZmluZCBzdWNoIGEgc2lnbmF0dXJlIG1pc21hdGNoPyBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uYCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSXQmIzM5O3MgYWx3YXlzIHdvcnRoIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSByaXBwbGUgZWZmZWN0IG9yIG92ZXJsb29rZWQgaW5zdGFuY2VzLiBNaWdodCBhcyB3ZWxsIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9Njg0Nj1zdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjg3MS1cbm1tL3BhZ2VfYWxsb2MuYzo2ODcyOnN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vcGFnZV9hbGxvYy5jLTY4NzMtXHRcdGJvb2wgaXNfZnJvemVuKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz02OTQwPXZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbm1tL3BhZ2VfYWxsb2MuYy02OTQxLXtcbm1tL3BhZ2VfYWxsb2MuYzo2OTQyOlx0X19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb24ocGZuLCBucl9wYWdlcywgLyogaXNfZnJvemVuPSAqLyBmYWxzZSk7XG5tbS9wYWdlX2FsbG9jLmMtNjk0My19XG4tLVxubW0vcGFnZV9hbGxvYy5jPTcwODA9c3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19mcm96ZW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5tbS9wYWdlX2FsbG9jLmMtNzA4MS17XG5tbS9wYWdlX2FsbG9jLmM6NzA4MjpcdF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHBmbiwgbnJfcGFnZXMsIC8qIGlzX2Zyb3plbj0gKi8gdHJ1ZSk7XG5tbS9wYWdlX2FsbG9jLmMtNzA4My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODEzCgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDc2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwIGFuZCBvcHRpbWl6YXRpb24gZWZmb3J0LiBMZXQmIzM5O3MgYnJlYWsgZG93biBteSB0aG91Z2h0IHByb2Nlc3M6CgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29yZSBvZiB0aGUgcGF0Y2ggcmV2b2x2ZXMgYXJvdW5kIGNoYW5naW5nIGhvdyB0aGUgYG1lbWRlc2NfZmxhZ3NfdGAgaXMgYWNjZXNzZWQuIEl0JiMzOTtzIG5vdyBiZWluZyBwYXNzZWQgYXMgYSBgY29uc3QgbWVtZGVzY19mbGFnc190ICpgIGluc3RlYWQgb2YgYnkgdmFsdWUuIFRoaXMgbWVhbnMgdGhlIGZ1bmN0aW9ucyBhcmUgbm93IHRha2luZyB0aGUgKmFkZHJlc3MqIG9mIHRoZSBmbGFncywgbm90IGEgY29weS4gSSBzcG90dGVkIHRoaXMgY2hhbmdlIGltbWVkaWF0ZWx5IGFjcm9zcyB2YXJpb3VzIGlubGluZSBhY2Nlc3NvcnMgbGlrZSBgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb25gLCBgbnVtX3BhZ2VzX2NvbnRpZ3VvdXNgLCBgc2xhYl9uaWRgLCBgX19wYWdlX3RvX3BmbmAsIGFuZCBgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwYC4KCkVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIEtDU0FOIGFubm90YXRpb25zIGFyZSBub3cgd29ya2luZyBjb3JyZWN0bHk7IHRoZSBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBjYWxscyB3aWxsIG5vdyBjaGVjayB0aGUgYWN0dWFsIG1lbW9yeSBsb2NhdGlvbiBvZiB0aGUgcGFnZSBmbGFncywgYW5kIG5vdCBzb21lIHN0YWNrIGNvcHkuIFRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLgoKQmV5b25kIHRoYXQsIHRoZSBjaGFuZ2VzIHNlZW0gcHJldHR5IGNvbnRhaW5lZC4gVGhleSYjMzk7cmUgbWFraW5nIGEgY291cGxlIG9mIGNvbmRpdGlvbmFsIGFkZGl0aW9uczogYCNpZmRlZiBDT05GSUdfTlVNQWAgYXJvdW5kIHRoZSBgbWVtZGVzY19uaWRgIGFuZCBgcGFnZV90b19uaWRgL2Bmb2xpb19uaWRgIGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiByZXR1cm4gMCBkaXJlY3RseSB3aGVuIE5VTUEgaXMgZGlzYWJsZWQsIGF2b2lkaW5nIGEgYFBGX1BPSVNPTkVEX0NIRUNLYCBpbiBub24tTlVNQSBidWlsZHMuIFRoZW4sIGAjaWYgWk9ORVNfV0lEVEggIT0gMGAgaXMgYWRkZWQgYXJvdW5kIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGluIGBtZW1kZXNjX3pvbmVudW1gLgoKT3ZlcmFsbCwgdGhlcmUmIzM5O3Mgbm8gYWRkaXRpb24gb2YgbmV3IGZ1bmN0aW9uYWxpdHksIGNvbXBsZXggbG9naWMsIG9yIGFueSBwb3RlbnRpYWxseSB0cmlja3kgaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUgdG8gZnV6emluZy4gSXQmIzM5O3MgYSBidW5jaCBvZiBzbWFsbCwgbG93LXJpc2sgY2hhbmdlcyBmb2N1c2VkIG9uIGNsYXJpdHksIGNvcnJlY3RuZXNzLCBhbmQgYSBiaXQgb2Ygb3B0aW1pemF0aW9uLiBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24mIzM5O3Qgd2FycmFudCBkZWRpY2F0ZWQgZnV6emluZyBlZmZvcnQuCgpUaGVyZWZvcmUsIEkmIzM5O2xsIHJlY29tbWVuZCBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIHNldmVyYWwgaW5saW5lIG1lbW9yeSBkZXNjcmlwdG9yIGFjY2Vzc29ycyAoZS5nLiwgbWVtZGVzY19uaWQsIG1lbWRlc2Nfc2VjdGlvbikgdG8gdGFrZSBhIHBvaW50ZXIgdG8gbWVtZGVzY19mbGFnc190IGluc3RlYWQgb2YgcGFzc2luZyBpdCBieSB2YWx1ZS4gVGhpcyBmaXhlcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgS0NTQU4gYW5ub3RhdGlvbnMgc28gdGhleSBjb3JyZWN0bHkgbW9uaXRvciB0aGUgYWN0dWFsIHBhZ2UgZmxhZ3MgaW4gbWVtb3J5IHJhdGhlciB0aGFuIGEgbG9jYWwgc3RhY2sgY29weS4gSXQgYWxzbyBhZGRzICNpZmRlZiBDT05GSUdfTlVNQSB0byByZXR1cm4gMCBkaXJlY3RseSB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBhbmQgS0NTQU4gYW5ub3RhdGlvbiBmaXhlcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgdGFyZ2V0ZWQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6MzY6NTYuNTc1ODkyOTI1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyNjQxMzQ4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNjo1Ni41NzU5MDA3NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTAzNDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY4ZTE4MTMzMzE1NzVjNmYyMjgxMjRiYmM4ZDBkMzZiYTMwZGM4ZTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDc6MzY6NTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcXG5pbmRleCBlZmE2NjEwYWNiYzc5Ny4uZjg0MDRiYzc3NzNjMmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaFxcbisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhcXG5AQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pXFxuICAqL1xcbiAjZGVmaW5lIF9fcGFnZV90b19wZm4ocGcpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAoe1xcdGNvbnN0IHN0cnVjdCBwYWdlICpfX3BnID0gKHBnKTtcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdGludCBfX3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihfX3BnLVxcdTAwM2VmbGFncyk7XFx0XFx0XFxcXFxcbitcXHRpbnQgX19zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXFx1MDAyNl9fcGctXFx1MDAzZWZsYWdzKTtcXHRcXHRcXFxcXFxuIFxcdCh1bnNpZ25lZCBsb25nKShfX3BnIC0gX19zZWN0aW9uX21lbV9tYXBfYWRkcihfX25yX3RvX3NlY3Rpb24oX19zZWMpKSk7XFx0XFxcXFxcbiB9KVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjMxNWQ4OTE3ZjhlNzc0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxcbkBAIC0zNyw2ICszNyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tbXUtZGVidWctcGFnZWFsbG9jLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rY3Nhbi1jaGVja3MuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBtZW1wb2xpY3k7XFxuIHN0cnVjdCBhbm9uX3ZtYTtcXG5AQCAtMjI4NiwyMyArMjI4Nyw0NSBAQCBzdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIH1cXG4gXFxuICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXFxuLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKTtcXG4raW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcXG4rI2lmZGVmIENPTkZJR19OVU1BXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuLVxcdHJldHVybiAobWRmLmYgXFx1MDAzZVxcdTAwM2UgTk9ERVNfUEdTSElGVCkgXFx1MDAyNiBOT0RFU19NQVNLO1xcbitcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVxcdTAwM2VmLCBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbitcXHRyZXR1cm4gKG1kZi1cXHUwMDNlZiBcXHUwMDNlXFx1MDAzZSBOT0RFU19QR1NISUZUKSBcXHUwMDI2IE5PREVTX01BU0s7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gI2VuZGlmXFxuKyNlbmRpZlxcbiBcXG4rI2lmZGVmIENPTkZJR19OVU1BXFxuIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdG9fbmlkKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX25pZChQRl9QT0lTT05FRF9DSEVDSyhwYWdlKS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRjb25zdCBzdHJ1Y3QgcGFnZSAqcCA9IFBGX1BPSVNPTkVEX0NIRUNLKHBhZ2UpO1xcbitcXG4rXFx0cmV0dXJuIG1lbWRlc2NfbmlkKFxcdTAwMjZwLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX25pZChmb2xpby1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY19uaWQoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbiAvKiBwYWdlIGFjY2VzcyB0aW1lIGJpdHMgbmVlZHMgdG8gaG9sZCBhdCBsZWFzdCA0IHNlY29uZHMgKi9cXG5AQCAtMjU0MSwxMiArMjU2NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbiBcXHRwYWdlLVxcdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFxcdTAwMjYgU0VDVElPTlNfTUFTSykgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuLVxcdHJldHVybiAobWRmLmYgXFx1MDAzZVxcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXFx1MDAyNiBTRUNUSU9OU19NQVNLO1xcbitcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVxcdTAwM2VmLCBTRUNUSU9OU19NQVNLIFxcdTAwM2NcXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQpO1xcbitcXHRyZXR1cm4gKG1kZi1cXHUwMDNlZiBcXHUwMDNlXFx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcXHUwMDI2IFNFQ1RJT05TX01BU0s7XFxuIH1cXG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5pbmRleCBhODQzMGE3YWUwNTQ0Ny4uZWZjZGRiOTkyNWFkZDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtNjUwLDcgKzY1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaGFzX3JlY2VuY3koY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG51bV9wYWdlc19jb250aWd1b3VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqY3VyX3BhZ2UgPSBwYWdlc1swXTtcXG4tXFx0dW5zaWduZWQgbG9uZyBzZWN0aW9uID0gbWVtZGVzY19zZWN0aW9uKGN1cl9wYWdlLVxcdTAwM2VmbGFncyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2VjdGlvbiA9IG1lbWRlc2Nfc2VjdGlvbihcXHUwMDI2Y3VyX3BhZ2UtXFx1MDAzZWZsYWdzKTtcXG4gXFx0c2l6ZV90IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbkBAIC02NjAsNyArNjYwLDcgQEAgc3RhdGljIGlubGluZSBzaXplX3QgbnVtX3BhZ2VzX2NvbnRpZ3VvdXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG5yX3BhZ2VzKVxcbiBcXHRcXHQgKiBJbiB1bnByb2JsZW1hdGljIGtlcm5lbCBjb25maWdzLCBwYWdlX3RvX3NlY3Rpb24oKSA9PSAwIGFuZFxcbiBcXHRcXHQgKiB0aGUgd2hvbGUgY2hlY2sgd2lsbCBnZXQgb3B0aW1pemVkIG91dC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChtZW1kZXNjX3NlY3Rpb24oY3VyX3BhZ2UtXFx1MDAzZWZsYWdzKSAhPSBzZWN0aW9uKVxcbitcXHRcXHRpZiAobWVtZGVzY19zZWN0aW9uKFxcdTAwMjZjdXJfcGFnZS1cXHUwMDNlZmxhZ3MpICE9IHNlY3Rpb24pXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IGNhMjcxMjE4NzE0NzVjLi5lNjBkYWQ1NDZjYTY4ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC0xMjcyLDMxICsxMjcyLDMzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2VtcHR5KGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxcbiAjZGVmaW5lIEtBU0FOX1RBR19NQVNLXFx0XFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXFxuICNkZWZpbmUgWk9ORUlEX01BU0tcXHRcXHQoKDFVTCBcXHUwMDNjXFx1MDAzYyBaT05FSURfU0hJRlQpIC0gMSlcXG4gXFxuLXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKG1lbWRlc2NfZmxhZ3NfdCBmbGFncylcXG4rc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0oY29uc3QgbWVtZGVzY19mbGFnc190ICpmbGFncylcXG4ge1xcbi1cXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MuZiwgWk9ORVNfTUFTSyBcXHUwMDNjXFx1MDAzYyBaT05FU19QR1NISUZUKTtcXG4tXFx0cmV0dXJuIChmbGFncy5mIFxcdTAwM2VcXHUwMDNlIFpPTkVTX1BHU0hJRlQpIFxcdTAwMjYgWk9ORVNfTUFTSztcXG4rI2lmIFpPTkVTX1dJRFRIICE9IDBcXG4rXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLVxcdTAwM2VmLCBaT05FU19NQVNLIFxcdTAwM2NcXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xcbisjZW5kaWZcXG4rXFx0cmV0dXJuIChmbGFncy1cXHUwMDNlZiBcXHUwMDNlXFx1MDAzZSBaT05FU19QR1NISUZUKSBcXHUwMDI2IFpPTkVTX01BU0s7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgcGFnZV96b25lbnVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0ocGFnZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXFx1MDAzZWZsYWdzKTtcXG4rXFx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG4ge1xcbiBcXHRyZXR1cm4gbWVtZGVzY196b25lbnVtKG1kZikgPT0gWk9ORV9ERVZJQ0U7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdFZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKHBhZ2UtXFx1MDAzZWZsYWdzKSwgcGFnZSk7XFxuK1xcdFZNX1dBUk5fT05fT05DRV9QQUdFKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyksIHBhZ2UpO1xcbiBcXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKS1cXHUwMDNlcGdtYXA7XFxuIH1cXG4gXFxuQEAgLTEzMTEsOSArMTMxMyw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICphLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBwYWdlICpiKVxcbiB7XFxuLVxcdGlmIChtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtXFx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGItXFx1MDAzZWZsYWdzKSlcXG4rXFx0aWYgKG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXFx1MDAyNmEtXFx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFxcdTAwMjZiLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtXFx1MDAzZWZsYWdzKSlcXG4rXFx0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFxcdTAwMjZhLVxcdTAwM2VmbGFncykpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRyZXR1cm4gcGFnZV9wZ21hcChhKSA9PSBwYWdlX3BnbWFwKGIpO1xcbiB9XFxuQEAgLTEzMjEsNyArMTMyMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXFxuIGV4dGVybiB2b2lkIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICosIHVuc2lnbmVkIGxvbmcsXFxuIFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XFxuICNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0xMzM4LDEyICsxMzQwLDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfZGV2aWNlX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4tXFx0cmV0dXJuIG1lbWRlc2NfaXNfem9uZV9kZXZpY2UocGFnZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2cGFnZS1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShmb2xpby1cXHUwMDNlZmxhZ3MpO1xcbitcXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGlzX3pvbmVfbW92YWJsZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCBlZTkwMmE0NjhjMmY1Yi4uMDIwYTk3Y2EwMThlOTkgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTY5MDQsMTUgKzY5MDQsMTUgQEAgc3RhdGljIHZvaWQgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb24odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXNcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChzdGFydCBcXHUwMDI2XFx1MDAyNiBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xcbitcXHRcXHRpZiAoc3RhcnQgXFx1MDAyNlxcdTAwMjYgbWVtZGVzY19zZWN0aW9uKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncykgIT0gc3RhcnRfc2VjKSB7XFxuIFxcdFxcdFxcdGZyZWVfcHJlcGFyZWRfY29udGlnX3JhbmdlKHN0YXJ0LCBpIC0gbnJfc3RhcnQpO1xcbiBcXHRcXHRcXHRzdGFydCA9IHBhZ2U7XFxuIFxcdFxcdFxcdG5yX3N0YXJ0ID0gaTtcXG4tXFx0XFx0XFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKHBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0XFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFxcdTAwMjZwYWdlLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoIXN0YXJ0KSB7XFxuIFxcdFxcdFxcdHN0YXJ0ID0gcGFnZTtcXG4gXFx0XFx0XFx0bnJfc3RhcnQgPSBpO1xcbi1cXHRcXHRcXHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXFx1MDAyNnBhZ2UtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9zbGFiLmggYi9tbS9zbGFiLmhcXG5pbmRleCAyODFhNjUyMzM3OTVkNi4uOWRlZDMxOTQ5NWEwNzAgMTAwNjQ0XFxuLS0tIGEvbW0vc2xhYi5oXFxuKysrIGIvbW0vc2xhYi5oXFxuQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNsYWJfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNsYWJfbmlkKGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxcbiB7XFxuLVxcdHJldHVybiBtZW1kZXNjX25pZChzbGFiLVxcdTAwM2VmbGFncyk7XFxuK1xcdHJldHVybiBtZW1kZXNjX25pZChcXHUwMDI2c2xhYi1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHBnX2RhdGFfdCAqc2xhYl9wZ2RhdChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5kaWZmIC0tZ2l0IGEvbW0vc3BhcnNlLmMgYi9tbS9zcGFyc2UuY1xcbmluZGV4IDE2YWM2ZGYzYzg5ZmEyLi44ZTM4NDc3NjQ1MTMxOSAxMDA2NDRcXG4tLS0gYS9tbS9zcGFyc2UuY1xcbisrKyBiL21tL3NwYXJzZS5jXFxuQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHU4IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuIHN0YXRpYyB1MTYgc2VjdGlvbl90b19ub2RlX3RhYmxlW05SX01FTV9TRUNUSU9OU10gX19jYWNoZWxpbmVfYWxpZ25lZDtcXG4gI2VuZGlmXFxuIFxcbi1pbnQgbWVtZGVzY19uaWQobWVtZGVzY19mbGFnc190IG1kZilcXG4raW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbiB7XFxuIFxcdHJldHVybiBzZWN0aW9uX3RvX25vZGVfdGFibGVbbWVtZGVzY19zZWN0aW9uKG1kZildO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjM2OjU2Ljk0NzY2MDY2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU4OTIzNTc1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY4ZTE4MTMzMzE1NzVjNmYyMjgxMjRiYmM4ZDBkMzZiYTMwZGM4ZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwNzozNjo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5pbmRleCBlZmE2NjEwYWNiYzc5Ny4uZjg0MDRiYzc3NzNjMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oXG5AQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyBwZm4pXG4gICovXG4gI2RlZmluZSBfX3BhZ2VfdG9fcGZuKHBnKVx0XHRcdFx0XHRcXFxuICh7XHRjb25zdCBzdHJ1Y3QgcGFnZSAqX19wZyA9IChwZyk7XHRcdFx0XHRcXFxuLVx0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKF9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuK1x0aW50IF9fc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNl9fcGctXHUwMDNlZmxhZ3MpO1x0XHRcXFxuIFx0KHVuc2lnbmVkIGxvbmcpKF9fcGcgLSBfX3NlY3Rpb25fbWVtX21hcF9hZGRyKF9fbnJfdG9fc2VjdGlvbihfX3NlYykpKTtcdFxcXG4gfSlcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDQ4NWRmOWMyZGJkZGIzLi4zMTVkODkxN2Y4ZTc3NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtMzcsNiArMzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdS1kZWJ1Zy1wYWdlYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjc2FuLWNoZWNrcy5oXHUwMDNlXG4gXG4gc3RydWN0IG1lbXBvbGljeTtcbiBzdHJ1Y3QgYW5vbl92bWE7XG5AQCAtMjI4NiwyMyArMjI4Nyw0NSBAQCBzdGF0aWMgaW5saW5lIGludCBwYWdlX3pvbmVfaWQoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuIFxuICNpZmRlZiBOT0RFX05PVF9JTl9QQUdFX0ZMQUdTXG4taW50IG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpO1xuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuKyNpZmRlZiBDT05GSUdfTlVNQVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbi1cdHJldHVybiAobWRmLmYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKG1kZi1cdTAwM2VmLCBOT0RFU19NQVNLIFx1MDAzY1x1MDAzYyBOT0RFU19QR1NISUZUKTtcbitcdHJldHVybiAobWRmLVx1MDAzZWYgXHUwMDNlXHUwMDNlIE5PREVTX1BHU0hJRlQpIFx1MDAyNiBOT0RFU19NQVNLO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuK3tcbitcdHJldHVybiAwO1xuIH1cbiAjZW5kaWZcbisjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX05VTUFcbiBzdGF0aWMgaW5saW5lIGludCBwYWdlX3RvX25pZChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoUEZfUE9JU09ORURfQ0hFQ0socGFnZSktXHUwMDNlZmxhZ3MpO1xuK1x0Y29uc3Qgc3RydWN0IHBhZ2UgKnAgPSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTtcbitcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZwLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fbmlkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2NfbmlkKGZvbGlvLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX25pZChcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgcGFnZV90b19uaWQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX25pZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiAwO1xuK31cbisjZW5kaWZcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4gLyogcGFnZSBhY2Nlc3MgdGltZSBiaXRzIG5lZWRzIHRvIGhvbGQgYXQgbGVhc3QgNCBzZWNvbmRzICovXG5AQCAtMjU0MSwxMiArMjU2NCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXG4ge1xuLVx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4rXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVx1MDAzZWYsIFNFQ1RJT05TX01BU0sgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQpO1xuK1x0cmV0dXJuIChtZGYtXHUwMDNlZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IGE4NDMwYTdhZTA1NDQ3Li5lZmNkZGI5OTI1YWRkNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC02NTAsNyArNjUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV9oYXNfcmVjZW5jeShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IHBhZ2UgKmN1cl9wYWdlID0gcGFnZXNbMF07XG4tXHR1bnNpZ25lZCBsb25nIHNlY3Rpb24gPSBtZW1kZXNjX3NlY3Rpb24oY3VyX3BhZ2UtXHUwMDNlZmxhZ3MpO1xuK1x0dW5zaWduZWQgbG9uZyBzZWN0aW9uID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNmN1cl9wYWdlLVx1MDAzZWZsYWdzKTtcbiBcdHNpemVfdCBpO1xuIFxuIFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuQEAgLTY2MCw3ICs2NjAsNyBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBudW1fcGFnZXNfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnJfcGFnZXMpXG4gXHRcdCAqIEluIHVucHJvYmxlbWF0aWMga2VybmVsIGNvbmZpZ3MsIHBhZ2VfdG9fc2VjdGlvbigpID09IDAgYW5kXG4gXHRcdCAqIHRoZSB3aG9sZSBjaGVjayB3aWxsIGdldCBvcHRpbWl6ZWQgb3V0LlxuIFx0XHQgKi9cbi1cdFx0aWYgKG1lbWRlc2Nfc2VjdGlvbihjdXJfcGFnZS1cdTAwM2VmbGFncykgIT0gc2VjdGlvbilcbitcdFx0aWYgKG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZjdXJfcGFnZS1cdTAwM2VmbGFncykgIT0gc2VjdGlvbilcbiBcdFx0XHRicmVhaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggY2EyNzEyMTg3MTQ3NWMuLmU2MGRhZDU0NmNhNjhkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTEyNzIsMzEgKzEyNzIsMzMgQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXG4gI2RlZmluZSBLQVNBTl9UQUdfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgS0FTQU5fVEFHX1dJRFRIKSAtIDEpXG4gI2RlZmluZSBaT05FSURfTUFTS1x0XHQoKDFVTCBcdTAwM2NcdTAwM2MgWk9ORUlEX1NISUZUKSAtIDEpXG4gXG4tc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBtZW1kZXNjX3pvbmVudW0obWVtZGVzY19mbGFnc190IGZsYWdzKVxuK3N0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXG4ge1xuLVx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLmYsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuLVx0cmV0dXJuIChmbGFncy5mIFx1MDAzZVx1MDAzZSBaT05FU19QR1NISUZUKSBcdTAwMjYgWk9ORVNfTUFTSztcbisjaWYgWk9ORVNfV0lEVEggIT0gMFxuK1x0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLVx1MDAzZWYsIFpPTkVTX01BU0sgXHUwMDNjXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIChmbGFncy1cdTAwM2VmIFx1MDAzZVx1MDAzZSBaT05FU19QR1NISUZUKSBcdTAwMjYgWk9ORVNfTUFTSztcbiB9XG4gXG4gc3RhdGljIGlubGluZSBlbnVtIHpvbmVfdHlwZSBwYWdlX3pvbmVudW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShwYWdlLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX3pvbmVudW0oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgZm9saW9fem9uZW51bShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiBtZW1kZXNjX3pvbmVudW0oZm9saW8tXHUwMDNlZmxhZ3MpO1xuK1x0cmV0dXJuIG1lbWRlc2Nfem9uZW51bShcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWk9ORV9ERVZJQ0Vcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiBtZW1kZXNjX3pvbmVudW0obWRmKSA9PSBaT05FX0RFVklDRTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBhZ2VfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuLVx0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UocGFnZS1cdTAwM2VmbGFncyksIHBhZ2UpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFX1BBR0UoIW1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2cGFnZS1cdTAwM2VmbGFncyksIHBhZ2UpO1xuIFx0cmV0dXJuIHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXA7XG4gfVxuIFxuQEAgLTEzMTEsOSArMTMxMyw5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRldl9wYWdlbWFwICpwYWdlX3BnbWFwKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4gXHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcGFnZSAqYilcbiB7XG4tXHRpZiAobWVtZGVzY19pc196b25lX2RldmljZShhLVx1MDAzZWZsYWdzKSAhPSBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGItXHUwMDNlZmxhZ3MpKVxuK1x0aWYgKG1lbWRlc2NfaXNfem9uZV9kZXZpY2UoXHUwMDI2YS1cdTAwM2VmbGFncykgIT0gbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZiLVx1MDAzZWZsYWdzKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGEtXHUwMDNlZmxhZ3MpKVxuK1x0aWYgKCFtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNmEtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdHJldHVybiBwYWdlX3BnbWFwKGEpID09IHBhZ2VfcGdtYXAoYik7XG4gfVxuQEAgLTEzMjEsNyArMTMyMyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2RldmljZV9wYWdlc19oYXZlX3NhbWVfcGdtYXAoY29uc3Qgc3RydWN0IHBhZ2UgKmEsXG4gZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbiBcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTMzOCwxMiArMTM0MCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGFnZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfem9uZV9kZXZpY2VfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShwYWdlLVx1MDAzZWZsYWdzKTtcbitcdHJldHVybiBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShmb2xpby1cdTAwM2VmbGFncyk7XG4rXHRyZXR1cm4gbWVtZGVzY19pc196b25lX2RldmljZShcdTAwMjZmb2xpby1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpc196b25lX21vdmFibGVfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IGVlOTAyYTQ2OGMyZjViLi4wMjBhOTdjYTAxOGU5OSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNjkwNCwxNSArNjkwNCwxNSBAQCBzdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlc1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChzdGFydCBcdTAwMjZcdTAwMjYgbWVtZGVzY19zZWN0aW9uKHBhZ2UtXHUwMDNlZmxhZ3MpICE9IHN0YXJ0X3NlYykge1xuK1x0XHRpZiAoc3RhcnQgXHUwMDI2XHUwMDI2IG1lbWRlc2Nfc2VjdGlvbihcdTAwMjZwYWdlLVx1MDAzZWZsYWdzKSAhPSBzdGFydF9zZWMpIHtcbiBcdFx0XHRmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdGFydCwgaSAtIG5yX3N0YXJ0KTtcbiBcdFx0XHRzdGFydCA9IHBhZ2U7XG4gXHRcdFx0bnJfc3RhcnQgPSBpO1xuLVx0XHRcdHN0YXJ0X3NlYyA9IG1lbWRlc2Nfc2VjdGlvbihwYWdlLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24oXHUwMDI2cGFnZS1cdTAwM2VmbGFncyk7XG4gXHRcdH0gZWxzZSBpZiAoIXN0YXJ0KSB7XG4gXHRcdFx0c3RhcnQgPSBwYWdlO1xuIFx0XHRcdG5yX3N0YXJ0ID0gaTtcbi1cdFx0XHRzdGFydF9zZWMgPSBtZW1kZXNjX3NlY3Rpb24ocGFnZS1cdTAwM2VmbGFncyk7XG4rXHRcdFx0c3RhcnRfc2VjID0gbWVtZGVzY19zZWN0aW9uKFx1MDAyNnBhZ2UtXHUwMDNlZmxhZ3MpO1xuIFx0XHR9XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc2xhYi5oIGIvbW0vc2xhYi5oXG5pbmRleCAyODFhNjUyMzM3OTVkNi4uOWRlZDMxOTQ5NWEwNzAgMTAwNjQ0XG4tLS0gYS9tbS9zbGFiLmhcbisrKyBiL21tL3NsYWIuaFxuQEAgLTE3OSw3ICsxNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKnNsYWJfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiBcbiBzdGF0aWMgaW5saW5lIGludCBzbGFiX25pZChjb25zdCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB7XG4tXHRyZXR1cm4gbWVtZGVzY19uaWQoc2xhYi1cdTAwM2VmbGFncyk7XG4rXHRyZXR1cm4gbWVtZGVzY19uaWQoXHUwMDI2c2xhYi1cdTAwM2VmbGFncyk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgcGdfZGF0YV90ICpzbGFiX3BnZGF0KGNvbnN0IHN0cnVjdCBzbGFiICpzbGFiKVxuZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmNcbmluZGV4IDE2YWM2ZGYzYzg5ZmEyLi44ZTM4NDc3NjQ1MTMxOSAxMDA2NDRcbi0tLSBhL21tL3NwYXJzZS5jXG4rKysgYi9tbS9zcGFyc2UuY1xuQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHU4IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XG4gc3RhdGljIHUxNiBzZWN0aW9uX3RvX25vZGVfdGFibGVbTlJfTUVNX1NFQ1RJT05TXSBfX2NhY2hlbGluZV9hbGlnbmVkO1xuICNlbmRpZlxuIFxuLWludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuK2ludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcbiB7XG4gXHRyZXR1cm4gc2VjdGlvbl90b19ub2RlX3RhYmxlW21lbWRlc2Nfc2VjdGlvbihtZGYpXTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNjo1Ni45NDc2NjM0MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzA3MDA3MDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIHRoZSBgbWVtZGVzY19mbGFnc190YCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBmb2N1cyBpcyBhIHJlZmFjdG9yaW5nIG9mIGhvdyB3ZSBoYW5kbGUgdGhlIGBtZW1kZXNjX2ZsYWdzX3RgIHN0cnVjdHVyZSwgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgbWVtb3J5IGRlc2NyaXB0b3IgKG1lbWRlc2MpIGZ1bmN0aW9ucy4gVGhlIGtleSBjaGFuZ2UgaXMgdG8gbW9kaWZ5IHRoZSBzaWduYXR1cmVzIG9mIHNldmVyYWwgZnVuY3Rpb25zOiBgbWVtZGVzY19uaWRgLCBgbWVtZGVzY19zZWN0aW9uYCwgYG1lbWRlc2Nfem9uZW51bWAsIGFuZCBgbWVtZGVzY19pc196b25lX2RldmljZWAuIEluc3RlYWQgb2YgcGFzc2luZyBgbWVtZGVzY19mbGFnc190YCBieSB2YWx1ZSwgdGhleSdyZSBub3cgdGFraW5nIGEgcG9pbnRlciB0byBpdCwgc28gYG1lbWRlc2NfbmlkKG1lbWRlc2NfZmxhZ3NfdCBtZGYpYCBpcyBub3cgYG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKWAuXG5cbkJleW9uZCB0aGF0LCB0aGUgcGF0Y2ggYXBwZWFycyB0byBiZSB1cGRhdGluZyB0aGUgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgbWFjcm8gY2FsbHMgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZSDigJMgc2hpZnRpbmcgZnJvbSBgbWRmLmZgIHRvIGBtZGYtXHUwMDNlZmAuIEl0IHNlZW1zIGxpa2UgYSBjb25zaXN0ZW50IHBhdHRlcm4uIFRoZXJlJ3MgYWxzbyBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhhcHBlbmluZyB3aXRoIGAjaWZkZWYgQ09ORklHX05VTUFgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkaW5nIHRoZXNlIGNvbmRpdGlvbmFscyBhcm91bmQgdGhlIGBtZW1kZXNjX25pZGAgZnVuY3Rpb24sIGFsb25nIHdpdGggYHBhZ2VfdG9fbmlkYCBhbmQgYGZvbGlvX25pZGAsIHRvIHJldHVybiAwIHdoZW4gTlVNQSBpcyBkaXNhYmxlZC4gU28gd2hlbiBOVU1BIGlzIGRpc2FibGVkLCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBzaW1wbHkgcmV0dXJuIDAuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYCNpZiBaT05FU19XSURUSCAhPSAwYCBhcm91bmQgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgaW4gYG1lbWRlc2Nfem9uZW51bWAuXG5cbkZyb20gYSBjdXJzb3J5IGdsYW5jZSBhdCB0aGUgY2hhbmdlZCBmaWxlcyDigJMgYGluY2x1ZGUvYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmhgLCBgaW5jbHVkZS9saW51eC9tbS5oYCwgYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAsIGBtbS9wYWdlX2FsbG9jLmNgLCBgbW0vc2xhYi5oYCwgYW5kIGBtbS9zcGFyc2UuY2Ag4oCTIGl0IGFwcGVhcnMgdG8gYmUgYSBtYWNybyBmaXggYW5kIGEgcG9pbnRlciBvcHRpbWl6YXRpb24uIEknbSBmb2N1c2luZyBvbiB0aGUgcmVmYWN0b3JpbmcgYXNwZWN0IG9mIHBhc3NpbmcgYnkgcG9pbnRlciBpbnN0ZWFkIG9mIGJ5IHZhbHVlLCBhbmQgdGhlIGAjaWZkZWYgQ09ORklHX05VTUFgIGNvbmRpdGlvbmFsIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGl0IHNob3VsZCBiZSBwdXJlbHkgYSByZWZhY3RvcmluZy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgZnVuY3Rpb25hbCBsb2dpYyBoYXMgY2hhbmdlZCwgYnV0IGF0IHRoaXMgc3RhZ2UsIGl0IHNlZW1zIHVubGlrZWx5IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwcmltYXJ5IGdvYWwgaXMgbGlrZWx5IHRvIGltcHJvdmUgZWZmaWNpZW5jeSAoZXNwZWNpYWxseSBtZW1vcnkgY29waWVzKSwgb3IgcG90ZW50aWFsbHkgcmVkdWNlIHN0YWNrIHVzYWdlIHdpdGggdGhlIHBvaW50ZXIgcGFyYW1ldGVyLiBMZXQncyBzZWUgd2hhdCBgbWVtZGVzY19mbGFnc190YCBhY3R1YWxseSBpcyB1bmRlciB0aGUgaG9vZC4uLiBpdCdzIHByb2JhYmx5IGEgc3RydWN0IG9yIHR5cGVkZWYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzowNC42NTQ2NzMwNDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzNzc1NTM5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHlwZWRlZi4qbWVtZGVzY19mbGFnc190XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzowNy45OTI0NDI5MjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI5ODMxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBzZWFyY2g6XG5cbioqRGl2aW5nIGludG8gYG1lbWRlc2NfZmxhZ3NfdGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG1lbWRlc2NfZmxhZ3NfdGAgaXMgYWxsIGFib3V0LiBUaGUgZmlyc3Qgc3RlcCBpcyBjbGVhcmx5IHRvIGZpbmQgaXRzIGRlZmluaXRpb24uIEknbGwgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGhpcyBzdHJ1Y3Qgb3IgdHlwZSBpcyBkZWZpbmVkIGluIHRoZSBwcm9qZWN0J3Mgc291cmNlIGNvZGUuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jaywgc28gdW5kZXJzdGFuZGluZyBpdHMgc3RydWN0dXJlIHdpbGwgcHJvYmFibHkgdW5sb2NrIGEgZ29vZCBjaHVuayBvZiB1bmRlcnN0YW5kaW5nIGFib3V0IGhvdyBtZW1vcnkgaXMgbWFuYWdlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggZm9yIHRoZSBsaXRlcmFsIHN0cmluZyBgbWVtZGVzY19mbGFnc190YC4gSG9wZWZ1bGx5LCB0aGUgdG9vbGluZyBjYW4gbmF2aWdhdGUgbWUgZGlyZWN0bHkgdG8gdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlIG9yIHNvdXJjZSBjb2RlLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIGl0cyBtZW1iZXJzIGFuZCBkYXRhIHR5cGVzLCBhbmQgaG9wZWZ1bGx5LCBJJ2xsIGZpbmQgc29tZSBleHBsYW5hdG9yeSBjb21tZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjM3OjExLjAyMjI3NzczN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTAzMDU0MjUyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbWVtZGVzY19mbGFnc190XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzoxMy4xMjUzNDQ4MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU5MjQ4ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlBvc3NpYmxlIERhdGEgU3RydWN0dXJlIGZvciBNZW1vcnkgRGVzY3JpcHRvciBGbGFncyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgc3RydWN0dXJlIHRvIGhvbGQgbWVtb3J5IGRlc2NyaXB0b3IgZmxhZ3MsIHByb2JhYmx5IGZvciBzb21lIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgc29tZXRoaW5nIHZlcnkgYmFzaWMgYnV0IGVmZmljaWVudDogYSBgdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGY7IH0gbWVtZGVzY19mbGFnc190O2AuIFRoaXMgaXMgbGlrZWx5IGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSdtIGxlYW5pbmcgdG93YXJkcyBgdW5zaWduZWQgbG9uZ2AgYmVjYXVzZSBpdCBnaXZlcyB1cyBhIGRlY2VudCBudW1iZXIgb2YgYml0cyB0byB3b3JrIHdpdGggZm9yIHZhcmlvdXMgZmxhZ3Mgd2l0aG91dCBleGNlc3NpdmUgbWVtb3J5IG92ZXJoZWFkIG9uIG1vc3QgbW9kZXJuIGFyY2hpdGVjdHVyZXMuIEl0J3MgYSBwcmFnbWF0aWMgY2hvaWNlIGZvciBzdG9yaW5nIGEgY29sbGVjdGlvbiBvZiBib29sZWFuIHZhbHVlcyAodGhlIGluZGl2aWR1YWwgZmxhZ3MpLiBPZiBjb3Vyc2UsIHRoaXMgaXMganVzdCBhIHF1aWNrIGFuZCBkaXJ0eSBjb25jZXB0dWFsIHN0cnVjdHVyZS4gSSdkIG5lZWQgdG8gY29uc2lkZXIgYWxpZ25tZW50IGlzc3VlcywgcG90ZW50aWFsIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMsIGFuZCBleGFjdGx5ICp3aGF0KiBmbGFncyBhcmUgbmVlZGVkIGJlZm9yZSBzZXR0bGluZyBvbiB0aGlzIGFzIHRoZSBkZWZpbml0aXZlIHNvbHV0aW9uLiBJJ2QgYWxzbyBsb29rIGF0IGNvbXBpbGVyLXNwZWNpZmljIGF0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBtZW1vcnkgbGF5b3V0LiBUaGUga2V5IGlzIHRvIGtlZXAgaXQgc2ltcGxlLCBmYXN0LCBhbmQgZWFzeSB0byB1bmRlcnN0YW5kIGF0IHRoaXMgcG9pbnQuIEknZCBtb3ZlIG9uIHRvIHJlZmluaW5nIGl0IGJhc2VkIG9uIHRoZSBleGFjdCB1c2FnZSByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwODgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzoxNi41ODQ1OTYzOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMjA0MjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1kZXNjX2ZsYWdzX3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbS5oPTIyODQ9c3RhdGljIGlubGluZSBpbnQgcGFnZV96b25lX2lkKHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyODktI2lmZGVmIE5PREVfTk9UX0lOX1BBR0VfRkxBR1NcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5MDppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMjkxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTItI2lmZGVmIENPTkZJR19OVU1BXFxuaW5jbHVkZS9saW51eC9tbS5oOjIyOTM6c3RhdGljIGlubGluZSBpbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyOTgtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5OTpzdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjMwMC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MjU2MT1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI1NjYtXFxuaW5jbHVkZS9saW51eC9tbS5oOjI1Njc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU2OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU3Mi0jZWxzZSAvKiAhU0VDVElPTl9JTl9QQUdFX0ZMQUdTICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjI1NzM6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMjU3NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9Mzk9dHlwZWRlZiBzdHJ1Y3Qge1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00MC1cXHR1bnNpZ25lZCBsb25nIGY7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQxOn0gbWVtZGVzY19mbGFnc190O1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC00Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD04MD1zdHJ1Y3QgcGFnZSB7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjgxOlxcdG1lbWRlc2NfZmxhZ3NfdCBmbGFncztcXHRcXHQvKiBBdG9taWMgZmxhZ3MsIHNvbWUgcG9zc2libHlcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODItXFx0XFx0XFx0XFx0XFx0ICogdXBkYXRlZCBhc3luY2hyb25vdXNseSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTQwMj1zdHJ1Y3QgZm9saW8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwNi1cXHQvKiBwdWJsaWM6ICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjQwNzpcXHRcXHRcXHRtZW1kZXNjX2ZsYWdzX3QgZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTQwOC1cXHRcXHRcXHR1bmlvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9NTczPXN0cnVjdCBwdGRlc2Mge1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo1NzQ6XFx0bWVtZGVzY19mbGFnc190IHB0X2ZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC01NzUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEyMjQ9c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfZW1wdHkoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzQtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjc1OnN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMjc2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTI4OD1zdGF0aWMgaW5saW5lIGVudW0gem9uZV90eXBlIGZvbGlvX3pvbmVudW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5My0jaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMjk0OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1kZXNjX2lzX3pvbmVfZGV2aWNlKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI5NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMjM9ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyNS0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTMyNjpzdGF0aWMgaW5saW5lIGJvb2wgbWVtZGVzY19pc196b25lX2RldmljZShjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZilcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjcte1xcbi0tXFxubW0vc2xhYi5oPTk4PXN0cnVjdCBzbGFiIHtcXG5tbS9zbGFiLmg6OTk6XFx0bWVtZGVzY19mbGFnc190IGZsYWdzO1xcbm1tL3NsYWIuaC0xMDAtXFxuLS1cXG5tbS9zcGFyc2UuYz00Mz1zdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5tbS9zcGFyc2UuYy00NS1cXG5tbS9zcGFyc2UuYzo0NjppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxubW0vc3BhcnNlLmMtNDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzoxOC42MDY2NDU4ODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg2ODM5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGUgbWFpbiBjaGFuZ2UgaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSBgbWVtZGVzY19mbGFnc190YC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHN1Z2dlc3RpbmcgcGFzc2luZyBpdCBieSBwb2ludGVyIG5vdyBpbnN0ZWFkIG9mIGJ5IHZhbHVlLiBIbW1tLCBsZXQncyB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBQYXNzaW5nIGJ5IHBvaW50ZXIgaW1wbGllcyB0aGUgcG9zc2liaWxpdHkgb2YgbW9kaWZpY2F0aW9uIGluIHBsYWNlLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIGNvbnNpZGVyIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbi4gVGhlIGJlbmVmaXQgY291bGQgYmUgcmVkdWNlZCBjb3B5aW5nLCBlc3BlY2lhbGx5IGlmIHRoZSBzdHJ1Y3R1cmUgaXMgbGFyZ2UuIExldCdzIGRpZyBkZWVwZXIgdG8gYXNzZXNzIHRoZSB0cmFkZS1vZmZzLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgLiBUaGF0J3MgYSBLQ1NBTiBtYWNybywgaXNuJ3QgaXQ/IE15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLiBLQ1NBTiBpcyBhbGwgYWJvdXQgZGV0ZWN0aW5nIGRhdGEgcmFjZXMsIGFuZCB0aGlzIG1hY3JvIGlzIHByb2JhYmx5IGNydWNpYWwgZm9yIGVuZm9yY2luZyBleGNsdXNpdmUgYWNjZXNzIHRvIHNwZWNpZmljIGJpdGZpZWxkcyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUsIHJpZ2h0PyBJdCBjb3VsZCBiZSBwcm90ZWN0aW5nIGFnYWluc3Qgc2ltdWx0YW5lb3VzIHJlYWRzIGFuZCB3cml0ZXMgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcywgb3IgbWF5YmUgZXZlbiB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHRzLiBMZXQncyBtYWtlIGFic29sdXRlbHkgc3VyZSB3ZSB1bmRlcnN0YW5kIGhvdyB0aGlzIG1hY3JvIHdvcmtzIGluIHJlbGF0aW9uIHRvIHRoaXMgY2hhbmdlLiBXZSBuZWVkIHRvIGtub3cgd2hhdCBpdCBkb2VzIHdpdGggYSBwb2ludGVyIHRvIHRoZSBmbGFnIHN0cnVjdHVyZSwgYmVjYXVzZSB0aGUgS0NTQU4gYXNwZWN0IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQgdG8gZW5zdXJlIHdlIGhhdmUgbm90IGNyZWF0ZWQgYSBsYXRlbnQgY29uY3VycmVuY3kgYnVnLiBJIGJldHRlciBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzoyMi4yOTM0ODg1ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzUwNjYyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVNTRVJUX0VYQ0xVU0lWRV9CSVRTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdD0yMzY9cHJvcGVydGllcyBvZiBjb25jdXJyZW50IGNvZGUgd2hlcmUgYnVncyB3b3VsZCBub3QgbWFuaWZlc3QgYXMgZGF0YSByYWNlcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdC0yNDAtICAgICAgICAgICAgICAgIEFTU0VSVF9FWENMVVNJVkVfQUNDRVNTIEFTU0VSVF9FWENMVVNJVkVfQUNDRVNTX1NDT1BFRFxcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdDoyNDE6ICAgICAgICAgICAgICAgIEFTU0VSVF9FWENMVVNJVkVfQklUU1xcbkRvY3VtZW50YXRpb24vZGV2LXRvb2xzL2tjc2FuLnJzdC0yNDItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oPTIzMj1zdGF0aWMgaW5saW5lIHZvaWQgX19rY3Nhbl9kaXNhYmxlX2N1cnJlbnQodm9pZCkgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTQ3MC0vKipcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjQ3MTogKiBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgLSBhc3NlcnQgbm8gY29uY3VycmVudCB3cml0ZXMgdG8gc3Vic2V0IG9mIGJpdHMgaW4gQHZhclxcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNDcyLSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTQ5MC0gKlxcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmg6NDkxOiAqXFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLCBSRUFEX09OTFlfTUFTSyk7XFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00OTItICpcXHRmb28gPSAoUkVBRF9PTkNFKGZsYWdzKSBcXHUwMDI2IFJFQURfT05MWV9NQVNLKSBcXHUwMDNlXFx1MDAzZSBSRUFEX09OTFlfU0hJRlQ7XFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00OTMtICpcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjQ5NDogKiBOb3RlOiBUaGUgYWNjZXNzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMoKSBpcyBhc3N1bWVkXFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC00OTUtICogdG8gYWNjZXNzIHRoZSBtYXNrZWQgYml0cyBvbmx5LCBhbmQgS0NTQU4gb3B0aW1pc3RpY2FsbHkgYXNzdW1lcyBpdCBpc1xcbi0tXFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC01MDQtICpcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oOjUwNTogKlxcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhmbGFncywgUkVBRF9PTkxZX01BU0spO1xcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTA2LSAqXFx0Zm9vID0gKGZsYWdzIFxcdTAwMjYgUkVBRF9PTkxZX01BU0spIFxcdTAwM2VcXHUwMDNlIFJFQURfT05MWV9TSElGVDtcXG4tLVxcbmluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmgtNTE1LSAqXFx0c3Bpbl9sb2NrKFxcdTAwMjZmb29fbG9jayk7XFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo1MTY6ICpcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMoZmxhZ3MsIEZPT19NQVNLKTtcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTUxNy0gKlxcdG9sZF9mbGFncyA9IGZsYWdzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaC01MjQtICovXFxuaW5jbHVkZS9saW51eC9rY3Nhbi1jaGVja3MuaDo1MjU6I2RlZmluZSBBU1NFUlRfRVhDTFVTSVZFX0JJVFModmFyLCBtYXNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2tjc2FuLWNoZWNrcy5oLTUyNi1cXHRkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yMjkzPXN0YXRpYyBpbmxpbmUgaW50IG1lbWRlc2NfbmlkKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqbWRmKVxcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk0LXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjI5NTpcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFMobWRmLVxcdTAwM2VmLCBOT0RFU19NQVNLIFxcdTAwM2NcXHUwMDNjIE5PREVTX1BHU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMjk2LVxcdHJldHVybiAobWRmLVxcdTAwM2VmIFxcdTAwM2VcXHUwMDNlIE5PREVTX1BHU0hJRlQpIFxcdTAwMjYgTk9ERVNfTUFTSztcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yNTY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24oY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxuaW5jbHVkZS9saW51eC9tbS5oLTI1Njgte1xcbmluY2x1ZGUvbGludXgvbW0uaDoyNTY5OlxcdEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYtXFx1MDAzZWYsIFNFQ1RJT05TX01BU0sgXFx1MDAzY1xcdTAwM2MgU0VDVElPTlNfUEdTSElGVCk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTI1NzAtXFx0cmV0dXJuIChtZGYtXFx1MDAzZWYgXFx1MDAzZVxcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXFx1MDAyNiBTRUNUSU9OU19NQVNLO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xMjc1PXN0YXRpYyBpbmxpbmUgZW51bSB6b25lX3R5cGUgbWVtZGVzY196b25lbnVtKGNvbnN0IG1lbWRlc2NfZmxhZ3NfdCAqZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEyNzctI2lmIFpPTkVTX1dJRFRIICE9IDBcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEyNzg6XFx0QVNTRVJUX0VYQ0xVU0lWRV9CSVRTKGZsYWdzLVxcdTAwM2VmLCBaT05FU19NQVNLIFxcdTAwM2NcXHUwMDNjIFpPTkVTX1BHU0hJRlQpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI3OS0jZW5kaWZcXG4tLVxcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmM9MzkwPXN0YXRpYyBub2lubGluZSB2b2lkIHRlc3Rfa2VybmVsX2Fzc2VydF9iaXRzX2NoYW5nZSh2b2lkKVxcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmMtMzkxLXtcXG5rZXJuZWwva2NzYW4va2NzYW5fdGVzdC5jOjM5MjpcXHRBU1NFUlRfRVhDTFVTSVZFX0JJVFModGVzdF92YXIsIFRFU1RfQ0hBTkdFX0JJVFMpO1xcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmMtMzkzLX1cXG4tLVxcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmM9Mzk1PXN0YXRpYyBub2lubGluZSB2b2lkIHRlc3Rfa2VybmVsX2Fzc2VydF9iaXRzX25vY2hhbmdlKHZvaWQpXFxua2VybmVsL2tjc2FuL2tjc2FuX3Rlc3QuYy0zOTYte1xcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmM6Mzk3OlxcdEFTU0VSVF9FWENMVVNJVkVfQklUUyh0ZXN0X3ZhciwgflRFU1RfQ0hBTkdFX0JJVFMpO1xcbmtlcm5lbC9rY3Nhbi9rY3Nhbl90ZXN0LmMtMzk4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzc6MjQuMjI4NTYzODY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNTk1NTU5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5kZXJzdGFuZGluZyB0aGUgSW1wbGljYXRpb25zIG9mIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHZhciwgbWFzaylgIG1hY3JvIGFuZCB0cnlpbmcgdG8gZ3Jhc3AgaXRzIGJlaGF2aW9yLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIHNpbXBseSBjaGVja2luZyB0aGUgdmFsdWUgb2YgYHZhcmAgYWdhaW5zdCB0aGUgbWFzay4gQnV0IGhvbGQgb24sIGl0IGFwcGVhcnMgdGhhdCB0aGUgbWFjcm8gZG9lc24ndCBqdXN0IHJlYWQgYHZhcmA7IGl0ICpjcmVhdGVzKiBhIHJlYWQvd3JpdGUgYWNjZXNzLiBJbnRyaWd1aW5nIVxuXG5UaGlzIGJyaW5ncyBtZSB0byB0aGUgY29yZSBpc3N1ZS4gSWYgSSBwYXNzZWQgYG1kZmAgYnkgdmFsdWUsIHRoZSBgbWRmLmZgIG1lbWJlciB3b3VsZCBiZSBhIGxvY2FsIHN0YWNrIHZhcmlhYmxlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNhbGwgYEFTU0VSVF9FWENMVVNJVkVfQklUUyhtZGYuZiwgLi4uKWAgd291bGQgYmUgdmVyaWZ5aW5nIGNvbmN1cnJlbnQgd3JpdGVzIHRvICp0aGF0IGxvY2FsIGNvcHkqIG9uIHRoZSBzdGFjaywgbm90IHRoZSBhY3R1YWwgYHBhZ2UtXHUwMDNlZmxhZ3NgIEknbSBjb25jZXJuZWQgYWJvdXQhIEFic29sdXRlbHkgdXNlbGVzcy4gQSBjb21wbGV0ZSB3YXN0ZSBvZiB0aW1lLlxuXG5Ib3dldmVyLCB3aGVuIGBtZGZgIGlzIGEgcG9pbnRlciwgYG1kZi1cdTAwM2VmYCBjb3JyZWN0bHkgZGVyZWZlcmVuY2VzIHRoZSBwb2ludGVyLCBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIG1lbW9yeSBsb2NhdGlvbiBvZiB0aGUgKmFjdHVhbCogYHBhZ2UtXHUwMDNlZmxhZ3NgLiBUaHVzLCBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB3aWxsIGNvcnJlY3RseSBjaGVjayBmb3IgY29uY3VycmVudCB3cml0ZXMgdG8gdGhlIHRhcmdldCBtZW1vcnkuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBtYWNybyBpdHNlbGYuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzc6MjkuNDg4MTIzMDI0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgva2NzYW4tY2hlY2tzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdCAqXFx0c3Bpbl91bmxvY2soXFx1MDAyNmZvb19sb2NrKTtcXG4gNTIxOlxcdCAqXFxuIDUyMjpcXHQgKiBAdmFyOiB2YXJpYWJsZSB0byBhc3NlcnQgb25cXG4gNTIzOlxcdCAqIEBtYXNrOiBvbmx5IGNoZWNrIGZvciBtb2RpZmljYXRpb25zIHRvIGJpdHMgc2V0IGluIEBtYXNrXFxuIDUyNDpcXHQgKi9cXG4gNTI1OlxcdCNkZWZpbmUgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTKHZhciwgbWFzaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuIDUyNjpcXHRcXHRkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gNTI3OlxcdFxcdFxcdGtjc2FuX3NldF9hY2Nlc3NfbWFzayhtYXNrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gNTI4OlxcdFxcdFxcdF9fa2NzYW5fY2hlY2tfYWNjZXNzKFxcdTAwMjYodmFyKSwgc2l6ZW9mKHZhciksIEtDU0FOX0FDQ0VTU19BU1NFUlQpO1xcXFxcXG4gNTI5OlxcdFxcdFxcdGtjc2FuX3NldF9hY2Nlc3NfbWFzaygwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gNTMwOlxcdFxcdFxcdGtjc2FuX2F0b21pY19uZXh0KDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4gNTMxOlxcdFxcdH0gd2hpbGUgKDApXFxuIDUzMjpcXHRcXG4gNTMzOlxcdCNlbmRpZiAvKiBfTElOVVhfS0NTQU5fQ0hFQ0tTX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzc6MjkuNDg4MjE2MjI0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzc5Mjg0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS0NTQU4gRml4IGFuZCBOVU1BIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgeWVzISBUaGUgbGluZSBgX19rY3Nhbl9jaGVja19hY2Nlc3MoXHUwMDI2KHZhciksIHNpemVvZih2YXIpLCBLQ1NBTl9BQ0NFU1NfQVNTRVJUKTtgIGlzIHRoZSBrZXkuIFRoZSBwcm9ibGVtIHdhcyB0aGF0IGlmIGB2YXJgIHdhcyBzb21ldGhpbmcgbGlrZSBgbWRmLmZgIHdoZXJlIGBtZGZgIHdhcyBwYXNzZWQgYnkgdmFsdWUsIHRoZW4gYFx1MDAyNihtZGYuZilgIHdvdWxkIGJlIHRoZSBhZGRyZXNzIG9mIHRoZSAqbG9jYWwqIGNvcHkgb24gdGhlIHN0YWNrLiBLQ1NBTiB3b3VsZCBpbmNvcnJlY3RseSBtb25pdG9yIHRoZSBzdGFjayB2YXJpYWJsZSBmb3IgY29uY3VycmVudCB3cml0ZXMuIFRoYXQncyBjbGVhcmx5IHdyb25nLlxuXG5UaGUgZml4LCBjaGFuZ2luZyB0aGUgc2lnbmF0dXJlIHRvIGBjb25zdCBtZW1kZXNjX2ZsYWdzX3QgKm1kZmAsIGlzIGJyaWxsaWFudC4gTm93LCBgbWRmLVx1MDAzZWZgIGlzIHBhc3NlZCB0byBgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTYCwgYW5kIGBcdTAwMjYobWRmLVx1MDAzZWYpYCBiZWNvbWVzIHRoZSAqYWN0dWFsKiBhZGRyZXNzIG9mIGBwYWdlLVx1MDAzZWZsYWdzYC4gIFRoaXMgaXMgZXhhY3RseSB3aGF0IHdlIHdhbnRlZCEgVGhpcyBtZWFucyBLQ1NBTiB3aWxsIGNvcnJlY3RseSBtb25pdG9yIGBwYWdlLVx1MDAzZWZsYWdzYCBmb3IgY29uY3VycmVudCB3cml0ZXMsIGZpbmFsbHkgZW5zdXJpbmcgcHJvcGVyIGNvbmN1cnJlbmN5IGNoZWNraW5nIG9uIHRob3NlIGJpdHMuXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYSBmdW5jdGlvbmFsIGNoYW5nZT8gSXQgKnNob3VsZG4ndCogYmVjYXVzZSBLQ1NBTiBpcyBhIGR5bmFtaWMgYW5hbHlzaXMgdG9vbCwgcmlnaHQ/IFRoZSBwYXRjaCBpcyBvbmx5IHN1cHBvc2VkIHRvIGZpeCBLQ1NBTiBjaGVja3MuIEJ1dCBpdCAqYWxzbyogYWRkcyBgI2lmZGVmIENPTkZJR19OVU1BYCB0byBgbWVtZGVzY19uaWRgIGFuZCBgcGFnZV90b19uaWRgL2Bmb2xpb19uaWRgIHRvIHJldHVybiAwIHdoZW4gTlVNQSBpcyBkaXNhYmxlZC4gVGhhdCdzIGEgcmVkIGZsYWcuIElmIE5VTUEgaXMgZGlzYWJsZWQsIGRvZXMgYG1lbWRlc2NfbmlkYCByZXR1cm5pbmcgMCBhY3R1YWxseSAqY2hhbmdlKiBob3cgdGhpbmdzIHdvcms/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBmaWd1cmUgb3V0LlxuXG5MZXQncyBsb29rIGF0IHRoZSBvcmlnaW5hbCBjb2RlOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIGludCBtZW1kZXNjX25pZChtZW1kZXNjX2ZsYWdzX3QgbWRmKVxue1xuXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBOT0RFU19QR1NISUZUKSBcdTAwMjYgTk9ERVNfTUFTSztcbn1cbmBgYFxuXG5Pa2F5LCBpZiBOVU1BICppcyogZGlzYWJsZWQsIHRoZW4gYE5PREVTX1BHU0hJRlRgIGlzICpwcm9iYWJseSogMCwgYW5kIGBOT0RFU19NQVNLYCBpcyBsaWtlbHkgYWxzbyAwLiBMZXQgbWUganVzdCBjaGVjayB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzozNi44MjYxNDg3NjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODUwNDc1MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBOT0RFU19NQVNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9MTIyND1zdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19lbXB0eShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI2OC0jZGVmaW5lIFpPTkVTX01BU0tcXHRcXHQoKDFVTCBcXHUwMDNjXFx1MDAzYyBaT05FU19XSURUSCkgLSAxKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTI2OTojZGVmaW5lIE5PREVTX01BU0tcXHRcXHQoKDFVTCBcXHUwMDNjXFx1MDAzYyBOT0RFU19XSURUSCkgLSAxKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTI3MC0jZGVmaW5lIFNFQ1RJT05TX01BU0tcXHRcXHQoKDFVTCBcXHUwMDNjXFx1MDAzYyBTRUNUSU9OU19XSURUSCkgLSAxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzozOC44MTEyMDM4NDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NzkyODgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVmFyaWFibGUgVmVyaWZpY2F0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBkZWVwZXIgYW5hbHlzaXMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHZlcmlmeSBhIHNwZWNpZmljLCBsaWtlbHkgY3J1Y2lhbCwgcGFyYW1ldGVyLiBUaGUgcGhyYXNlIFwiTGV0J3MgY2hlY2sgYE5PREVTX1dJRFRIYFwiIHRyaWdnZXJzIGEgbWVudGFsIHNjYW4uIE15IGJyYWluIGlzIGltbWVkaWF0ZWx5IGFzc2Vzc2luZyB0aGUgY29udGV4dCwgYXNzdW1pbmcgaXQgcmVsYXRlcyB0byBhIGNvZGViYXNlIG9yIHN5c3RlbSBkZXNpZ24gd2hlcmUgYE5PREVTX1dJRFRIYCBpcyBhIGRlZmluZWQgY29uc3RhbnQgb3IgdmFyaWFibGUuIElzIHRoaXMgcmVsYXRlZCB0byBhIHVzZXIgaW50ZXJmYWNlPyBDb21wdXRhdGlvbmFsIGdlb21ldHJ5PyBOZXR3b3JrIGFyY2hpdGVjdHVyZT8gVGhlIHNwZWNpZmljIGZpZWxkIGlzbid0IGV4cGxpY2l0bHkgZGVmaW5lZCwgYnV0IHRoZSBwcmVjaXNpb24gaW5kaWNhdGVzIGl0cyBwb3RlbnRpYWxseSBjZW50cmFsIGltcG9ydGFuY2UgdG8gc29tZSBwcm9jZXNzLiBNeSBmb2N1cyBub3cgaXMgb24gd2hhdCB0aGlzIHZhcmlhYmxlIHJlcHJlc2VudHMgYW5kIHdoZXJlIGl0J3MgZGVmaW5lZCB3aXRoaW4gdGhpcyBicm9hZGVyIGNvbnRleHQuIEkgbmVlZCB0byBlbnN1cmUgaXRzIHZhbHVlIGlzIHdoYXQgSSBleHBlY3QsIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgaXNuJ3QgYmVpbmcgb3ZlcndyaXR0ZW4gYW55d2hlcmUgaW5hZHZlcnRlbnRseS4gVGhlIHVyZ2VuY3kgc3VnZ2VzdHMgdGhhdCBhIHBvdGVudGlhbCBwcm9ibGVtIG1pZ2h0IGhpbmdlIG9uIHRoaXMgc3BlY2lmaWMgd2lkdGggcGFyYW1ldGVyIGFuZCBpdCBtdXN0IGJlIHZlcmlmaWVkIGJlZm9yZSBwcm9jZWVkaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzc6NDIuODA5MTM3MzE5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc2MDExODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgTk9ERVNfV0lEVEhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTU5LVxcdFxcdTAwM2M9IEJJVFNfUEVSX0xPTkcgLSBOUl9QQUdFRkxBR1NcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0Lmg6NjA6I2RlZmluZSBOT0RFU19XSURUSFxcdFxcdE5PREVTX1NISUZUXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTYxLSNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTYzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oOjY0OiNkZWZpbmUgTk9ERVNfV0lEVEhcXHRcXHQwXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLWxheW91dC5oLTY1LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozNzo0NC43ODUxNTc0OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMwMDA4NDYxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IElzIHRoaXMgV29ydGggRnV6emluZz8qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IGlmIGBOT0RFU19XSURUSGAgaXMgemVybywgdGhlIG1hc2sgaXMgYWxzbyB6ZXJvLCBzbyB0aGUgcmVzdWx0IGlzIGFscmVhZHkgemVyby4gVGhlIHBhdGNoIGp1c3Qgc2VlbXMgdG8gc2hvcnQtY2lyY3VpdCB0aGUgY2FsbCBhbmQgYXZvaWQgYSBwb3RlbnRpYWwgcmVhZC4gQnV0IHdhaXQsIGl0IGFsc28gYWRkcyBgI2lmZGVmIENPTkZJR19OVU1BYCBhbmQgcmV0dXJucyAwIGRpcmVjdGx5LCB3aGljaCBjb3VsZCBiZSBhbiBvcHRpbWl6YXRpb24gb3IgYXZvaWQgdGhlIEtDU0FOIGNoZWNrIHdoZW4gTlVNQSBpcyBkaXNhYmxlZC4gVGhlIGtleSBpcyB0aGF0IGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIG5vdyBjb3JyZWN0bHkgY2hlY2tzIGZvciBjb25jdXJyZW50IHdyaXRlcyB0byBwYWdlIGZsYWdzLCBhbmQgdGhlIGBQRl9QT0lTT05FRF9DSEVDS2AgY2FsbCBpcyBieXBhc3NlZCB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIGV2ZW4gd2l0aCBOVU1BIGRpc2FibGVkLCBgcGFnZV90b19uaWRgIGNhbGxlZCBgUEZfUE9JU09ORURfQ0hFQ0tgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgcGFuaWMgb24gYSBwb2lzb25lZCBwYWdlLiBOb3csIGl0IGp1c3QgcmV0dXJucyAwLiBTbywgaXQgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFzIGl0IHJlbW92ZXMgYSBwb2lzb24gY2hlY2ssIGJ1dCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBJIGRvbid0IHRoaW5rIHNvLiBGdXp6aW5nIHdvdWxkbid0IGZpbmQgYW55dGhpbmcgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhpcyByZW1vdmFsLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGZpeGluZyB0aGUgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgY2hlY2sgZm9yIEtDU0FOLiBUaGlzIGlzIGEgS0NTQU4gYW5ub3RhdGlvbiwgYSBkZWJ1Z2dpbmcgdG9vbCwgYW5kIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBmdW5jdGlvbmFsIGZsb3cgb2YgdGhlIGtlcm5lbCB1bmxlc3MgS0NTQU4gaXMgZW5hYmxlZC4gIElmIEtDU0FOIGlzIGVuYWJsZWQsIGl0ICpkb2VzKiBhbHRlciB0aGUgZmxvdyBieSBjYWxsaW5nIGBfX2tjc2FuX2NoZWNrX2FjY2Vzc2AsIGJ1dCB0aGUgcHJvbXB0IHNheXMgdG8gaWdub3JlIHRoaW5ncyB0aGF0IFwiZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvd1wiLiBGaXhlcyB0byBLQ1NBTiBjaGVja3MgYXJlIG5vdCBjb25zaWRlcmVkIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBiZSBmdXp6ZWQuXG5cbkhvd2V2ZXIsIHRoZSBwYXRjaCAqZG9lcyogbW9kaWZ5IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgYG1lbWRlc2NfbmlkYCwgYG1lbWRlc2Nfc2VjdGlvbmAsIGBtZW1kZXNjX3pvbmVudW1gLCBhbmQgYG1lbWRlc2NfaXNfem9uZV9kZXZpY2VgLiAgVGhlc2UgYXJlIGFsbCBgc3RhdGljIGlubGluZWAgKGV4Y2VwdCBmb3IgYG1lbWRlc2NfbmlkYCBpbiBgbW0vc3BhcnNlLmNgKSwgYW5kIGl0IGNoYW5nZXMgdGhlbSB0byB0YWtlIGEgcG9pbnRlciBpbnN0ZWFkIG9mIGEgdmFsdWUuICBEb2VzIHRoaXMgY2hhbmdlIGFsdGVyIGZsb3c/IE5vcGUsIGp1c3QgYXZvaWRzIGEgY29weSBhbmQgYWxsb3dzIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIHRvIGNoZWNrIHRoZSBhY3R1YWwgZmxhZyBiaXRzIGluc3RlYWQgb2YgYSBsb2NhbCBjb3B5LlxuXG5TbywgaW4gZXNzZW5jZSwgdGhlIHBhdGNoIGlzIGZpeGluZyBLQ1NBTiBhbm5vdGF0aW9ucyBhbmQgbWFraW5nIGEgbWlub3Igb3B0aW1pemF0aW9uL2NsZWFudXAuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcga2VybmVsIGxvZ2ljIG9yIGZpeCBhIHJlYWwgYnVnLCBmcm9tIHdoYXQgSSBjYW4gdGVsbC4gIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcHJvbXB0LCBzbyBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzg6MDcuNzg2MDA4Mjg5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjcwMzkyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1kZXNjX25pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zcGFyc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zcGFyc2UuYz00Mz1zdGF0aWMgdTE2IHNlY3Rpb25fdG9fbm9kZV90YWJsZVtOUl9NRU1fU0VDVElPTlNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7XFxuLS1cXG5tbS9zcGFyc2UuYy00NS1cXG5tbS9zcGFyc2UuYzo0NjppbnQgbWVtZGVzY19uaWQoY29uc3QgbWVtZGVzY19mbGFnc190ICptZGYpXFxubW0vc3BhcnNlLmMtNDcte1xcbi0tXFxubW0vc3BhcnNlLmMtNDktfVxcbm1tL3NwYXJzZS5jOjUwOkVYUE9SVF9TWU1CT0wobWVtZGVzY19uaWQpO1xcbm1tL3NwYXJzZS5jLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozODowNy44NTg3MTk1MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyMDY5MDcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTaWduYXR1cmUgQ2hhbmdlKipcblxuT2theSwgc28gSSBqdXN0IG5vdGljZWQgYSBjaGFuZ2UgaW4gdGhlIGBtZW1kZXNjX25pZGAgZnVuY3Rpb24ncyBzaWduYXR1cmUuIEl0J3Mgc3VidGxlLCBidXQgc2lnbmlmaWNhbnQg4oCTIGl0IG5vdyBhY2NlcHRzIGEgcG9pbnRlciB0byBhIGBtZW1kZXNjX2ZsYWdzX3RgIChgY29uc3QgbWVtZGVzY19mbGFnc190ICptZGZgKSBpbnN0ZWFkIG9mIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmIChgbWVtZGVzY19mbGFnc190IG1kZmApLiBUaGlzIGlzIGNsZWFybHkgYSBzaWduYXR1cmUgYWRqdXN0bWVudCwgbGlrZWx5IGRvbmUgdG8gYWxpZ24gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZS4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbkJ1dCBub3cgSSdtIGN1cmlvdXMuIFdoZXJlIGVsc2UgbWlnaHQgd2UgZmluZCBzdWNoIGEgc2lnbmF0dXJlIG1pc21hdGNoPyBMZXQncyB0YWtlIGEgbG9vayBhdCBgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb25gIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LiBJdCdzIGFsd2F5cyB3b3J0aCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSByaXBwbGUgZWZmZWN0IG9yIG92ZXJsb29rZWQgaW5zdGFuY2VzLiBNaWdodCBhcyB3ZWxsIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNzozODoxMi4xNzk0MTM1MTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1ODgyNjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9Njg0Nj1zdGF0aWMgdm9pZCBmcmVlX3ByZXBhcmVkX2NvbnRpZ19yYW5nZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy02ODcxLVxcbm1tL3BhZ2VfYWxsb2MuYzo2ODcyOnN0YXRpYyB2b2lkIF9fZnJlZV9jb250aWdfcmFuZ2VfY29tbW9uKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL3BhZ2VfYWxsb2MuYy02ODczLVxcdFxcdGJvb2wgaXNfZnJvemVuKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY5NDA9dm9pZCBfX2ZyZWVfY29udGlnX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL3BhZ2VfYWxsb2MuYy02OTQxLXtcXG5tbS9wYWdlX2FsbG9jLmM6Njk0MjpcXHRfX2ZyZWVfY29udGlnX3JhbmdlX2NvbW1vbihwZm4sIG5yX3BhZ2VzLCAvKiBpc19mcm96ZW49ICovIGZhbHNlKTtcXG5tbS9wYWdlX2FsbG9jLmMtNjk0My19XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzA4MD1zdGF0aWMgdm9pZCBfX2ZyZWVfY29udGlnX2Zyb3plbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG5tbS9wYWdlX2FsbG9jLmMtNzA4MS17XFxubW0vcGFnZV9hbGxvYy5jOjcwODI6XFx0X19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb24ocGZuLCBucl9wYWdlcywgLyogaXNfZnJvemVuPSAqLyB0cnVlKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzA4My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA3OjM4OjEyLjI1NTMwNTY4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDU4NDY0ODk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBlc3NlbnRpYWxseSBhIHN0cmFpZ2h0Zm9yd2FyZCBjbGVhbnVwIGFuZCBvcHRpbWl6YXRpb24gZWZmb3J0LiBMZXQncyBicmVhayBkb3duIG15IHRob3VnaHQgcHJvY2VzczpcblxuRmlyc3QsIEkgc2VlIHRoYXQgdGhlIGNvcmUgb2YgdGhlIHBhdGNoIHJldm9sdmVzIGFyb3VuZCBjaGFuZ2luZyBob3cgdGhlIGBtZW1kZXNjX2ZsYWdzX3RgIGlzIGFjY2Vzc2VkLiBJdCdzIG5vdyBiZWluZyBwYXNzZWQgYXMgYSBgY29uc3QgbWVtZGVzY19mbGFnc190ICpgIGluc3RlYWQgb2YgYnkgdmFsdWUuIFRoaXMgbWVhbnMgdGhlIGZ1bmN0aW9ucyBhcmUgbm93IHRha2luZyB0aGUgKmFkZHJlc3MqIG9mIHRoZSBmbGFncywgbm90IGEgY29weS4gSSBzcG90dGVkIHRoaXMgY2hhbmdlIGltbWVkaWF0ZWx5IGFjcm9zcyB2YXJpb3VzIGlubGluZSBhY2Nlc3NvcnMgbGlrZSBgX19mcmVlX2NvbnRpZ19yYW5nZV9jb21tb25gLCBgbnVtX3BhZ2VzX2NvbnRpZ3VvdXNgLCBgc2xhYl9uaWRgLCBgX19wYWdlX3RvX3BmbmAsIGFuZCBgem9uZV9kZXZpY2VfcGFnZXNfaGF2ZV9zYW1lX3BnbWFwYC5cblxuRXNzZW50aWFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgS0NTQU4gYW5ub3RhdGlvbnMgYXJlIG5vdyB3b3JraW5nIGNvcnJlY3RseTsgdGhlIGBBU1NFUlRfRVhDTFVTSVZFX0JJVFNgIGNhbGxzIHdpbGwgbm93IGNoZWNrIHRoZSBhY3R1YWwgbWVtb3J5IGxvY2F0aW9uIG9mIHRoZSBwYWdlIGZsYWdzLCBhbmQgbm90IHNvbWUgc3RhY2sgY29weS4gVGhhdCdzIGEgZ29vZCB0aGluZy5cblxuQmV5b25kIHRoYXQsIHRoZSBjaGFuZ2VzIHNlZW0gcHJldHR5IGNvbnRhaW5lZC4gVGhleSdyZSBtYWtpbmcgYSBjb3VwbGUgb2YgY29uZGl0aW9uYWwgYWRkaXRpb25zOiBgI2lmZGVmIENPTkZJR19OVU1BYCBhcm91bmQgdGhlIGBtZW1kZXNjX25pZGAgYW5kIGBwYWdlX3RvX25pZGAvYGZvbGlvX25pZGAgZnVuY3Rpb25zIHNvIHRoZXkgY2FuIHJldHVybiAwIGRpcmVjdGx5IHdoZW4gTlVNQSBpcyBkaXNhYmxlZCwgYXZvaWRpbmcgYSBgUEZfUE9JU09ORURfQ0hFQ0tgIGluIG5vbi1OVU1BIGJ1aWxkcy4gVGhlbiwgYCNpZiBaT05FU19XSURUSCAhPSAwYCBpcyBhZGRlZCBhcm91bmQgYEFTU0VSVF9FWENMVVNJVkVfQklUU2AgaW4gYG1lbWRlc2Nfem9uZW51bWAuXG5cbk92ZXJhbGwsIHRoZXJlJ3Mgbm8gYWRkaXRpb24gb2YgbmV3IGZ1bmN0aW9uYWxpdHksIGNvbXBsZXggbG9naWMsIG9yIGFueSBwb3RlbnRpYWxseSB0cmlja3kgaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgYmUgc3VzY2VwdGlibGUgdG8gZnV6emluZy4gSXQncyBhIGJ1bmNoIG9mIHNtYWxsLCBsb3ctcmlzayBjaGFuZ2VzIGZvY3VzZWQgb24gY2xhcml0eSwgY29ycmVjdG5lc3MsIGFuZCBhIGJpdCBvZiBvcHRpbWl6YXRpb24uIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGRvZXNuJ3Qgd2FycmFudCBkZWRpY2F0ZWQgZnV6emluZyBlZmZvcnQuXG5cblRoZXJlZm9yZSwgSSdsbCByZWNvbW1lbmQgV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgxMywiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDc6Mzg6MjIuODM5OTU4MTI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIHNldmVyYWwgaW5saW5lIG1lbW9yeSBkZXNjcmlwdG9yIGFjY2Vzc29ycyAoZS5nLiwgbWVtZGVzY19uaWQsIG1lbWRlc2Nfc2VjdGlvbikgdG8gdGFrZSBhIHBvaW50ZXIgdG8gbWVtZGVzY19mbGFnc190IGluc3RlYWQgb2YgcGFzc2luZyBpdCBieSB2YWx1ZS4gVGhpcyBmaXhlcyBBU1NFUlRfRVhDTFVTSVZFX0JJVFMgS0NTQU4gYW5ub3RhdGlvbnMgc28gdGhleSBjb3JyZWN0bHkgbW9uaXRvciB0aGUgYWN0dWFsIHBhZ2UgZmxhZ3MgaW4gbWVtb3J5IHJhdGhlciB0aGFuIGEgbG9jYWwgc3RhY2sgY29weS4gSXQgYWxzbyBhZGRzICNpZmRlZiBDT05GSUdfTlVNQSB0byByZXR1cm4gMCBkaXJlY3RseSB3aGVuIE5VTUEgaXMgZGlzYWJsZWQuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWZhY3RvcmluZyBhbmQgS0NTQU4gYW5ub3RhdGlvbiBmaXhlcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGNvcmUga2VybmVsIGV4ZWN1dGlvbiBmbG93IGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgdGFyZ2V0ZWQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBzZXZlcmFsIGlubGluZSBtZW1vcnkgZGVzY3JpcHRvciBhY2Nlc3NvcnMgKGUuZy4sIG1lbWRlc2NfbmlkLCBtZW1kZXNjX3NlY3Rpb24pIHRvIHRha2UgYSBwb2ludGVyIHRvIG1lbWRlc2NfZmxhZ3NfdCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgYnkgdmFsdWUuIFRoaXMgZml4ZXMgQVNTRVJUX0VYQ0xVU0lWRV9CSVRTIEtDU0FOIGFubm90YXRpb25zIHNvIHRoZXkgY29ycmVjdGx5IG1vbml0b3IgdGhlIGFjdHVhbCBwYWdlIGZsYWdzIGluIG1lbW9yeSByYXRoZXIgdGhhbiBhIGxvY2FsIHN0YWNrIGNvcHkuIEl0IGFsc28gYWRkcyAjaWZkZWYgQ09ORklHX05VTUEgdG8gcmV0dXJuIDAgZGlyZWN0bHkgd2hlbiBOVU1BIGlzIGRpc2FibGVkLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVmYWN0b3JpbmcgYW5kIEtDU0FOIGFubm90YXRpb24gZml4ZXMgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBjb3JlIGtlcm5lbCBleGVjdXRpb24gZmxvdyBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRhcmdldGVkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowp5775[1] Phase: Running StartedAt: 2026-06-30 07:38:34 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp5775[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-30 07:38:34 +0000 UTC FinishedAt: 2026-06-30 07:38:41 +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,}