From: Narihiro Nakamura Date: 2009-05-11T00:20:38+09:00 Subject: [ruby-dev:38423] longlife gc --001636457d9e47a9ba04699067b3 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit nariと申します. GW中にGCの改良を行いましたので,報告いたします. = Railsのヒープ調査 2ヶ月ほど前に,ふと気になってRailsがどんな風にヒープを使用しているか調査してみました. 以下のグラフはscaffoldしたRailsアプリを動かした際のものです. http://www.narihiro.info/resource/image/gc_count_statistic_from_rails.png 調査前は漠然と「文字列が一番多いんじゃないかなぁ」と考えていたのですが,実際に は構文木オブジェクトがヒープの半分を占めているようです. その構文木オブジェクトを更に詳しく調べたグラフが以下です. http://www.narihiro.info/resource/image/gc_count_statistic_for_node_from_rails.png このグラフにあるNODE_METHODやNODE_CFUNC,NODE_FBODYはメソッド定義の際に 使用され,NODE_WHILEやNODE_BLOCKはVMの内部で使用されているようです. = 長寿命GC 更に調査をすると,これらのオブジェクトはとても長生きな事が分かりました. そこで,これらを長寿命領域に隔離してしまおう,という改善を今回行いました. 部分的な世代別GCというイメージです. このアイデアは,まつもとさんからアドバイスしていただいたものです. = 実装メモ major gcを行うタイミングはヒープが拡張される時とGC.startの時にしています. ライトバリアの手法にはremembered_setを使いました.オブジェクトがライト バリアにあることを示す為に FL_RESERVED フラグを使用しています. = ベンチマーク scaffoldしただけのRailsアプリでGCのプロファイルを取りました. GC回数 改善前 : 35 改善後 : 31 総GC時間(ms) 改善前 : 332.02 改善後 : 284.01 平均GC時間(ms) 改善前 : 9.48 改善後 : 9.16 また,Railsアプリのヒープの状態を作り出すようなベンチマークコードを書い て,そのプロファイルも取りました. GC回数 改善前 : 7 改善後 : 6 総GC時間(ms) 改善前 : 1452.09 改善後 : 1208.07 平均GC時間(ms) 改善前 : 207.44 改善後 : 201.34 使用したコードは本メールに添付しております. = パッチ 現在の最新のrevisionへのパッチとruby1.9.1-p0へのパッチを作成しました. 本メールに添付しております. よろしくお願いいたします. -- Narihiro Nakamura --001636457d9e47a9ba04699067b3 Content-Type: text/x-patch; charset=US-ASCII; name="gc_partial_longlife_1_9_0_p0.patch" Content-Disposition: attachment; filename="gc_partial_longlife_1_9_0_p0.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fujv50h10 ZGlmZiAtLWdpdCBhL2NsYXNzLmMgYi9jbGFzcy5jCmluZGV4IDg5YmVjY2MuLjZlMmFmOGIgMTAw NjQ0Ci0tLSBhL2NsYXNzLmMKKysrIGIvY2xhc3MuYwpAQCAtODgsMTEgKzg4LDEzIEBAIGNsb25l X21ldGhvZChJRCBtaWQsIE5PREUgKmJvZHksIHN0cnVjdCBjbG9uZV9tZXRob2RfZGF0YSAqZGF0 YSkKIAl9CiAJc3RfaW5zZXJ0KGRhdGEtPnRibCwgbWlkLAogCQkgIChzdF9kYXRhX3QpCi0JCSAg TkVXX0ZCT0RZKAotCQkgICAgICBORVdfTUVUSE9EKGZib2R5LAotCQkJCSBkYXRhLT5rbGFzcywg LyogVE9ETyAqLwotCQkJCSBib2R5LT5uZF9ib2R5LT5uZF9ub2V4KSwKLQkJICAgICAgMCkpOwor ICAgICAgICAgICAgICAgICAgTkVXX05PREVfTE9OR0xJRkUoCisgICAgICAgICAgICAgICAgICAg ICAgTk9ERV9GQk9EWSwKKyAgICAgICAgICAgICAgICAgICAgICAwLAorCQkgICAgICBORVdfTk9E RV9MT05HTElGRShOT0RFX01FVEhPRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByYl9nY193cml0ZV9iYXJyaWVyKGRhdGEtPmtsYXNzKSwgLyogVE9ETyAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX2djX3dyaXRlX2JhcnJpZXIo ZmJvZHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHktPm5k X2JvZHktPm5kX25vZXgpLCAwKSk7CiAgICAgfQogICAgIHJldHVybiBTVF9DT05USU5VRTsKIH0K QEAgLTgwNywyNSArODA5LDI1IEBAIHJiX29ial9zaW5nbGV0b25fbWV0aG9kcyhpbnQgYXJnYywg VkFMVUUgKmFyZ3YsIFZBTFVFIG9iaikKIHZvaWQKIHJiX2RlZmluZV9tZXRob2RfaWQoVkFMVUUg a2xhc3MsIElEIG5hbWUsIFZBTFVFICgqZnVuYykoQU5ZQVJHUyksIGludCBhcmdjKQogewotICAg IHJiX2FkZF9tZXRob2Qoa2xhc3MsIG5hbWUsIE5FV19DRlVOQyhmdW5jLGFyZ2MpLCBOT0VYX1BV QkxJQyk7CisgICAgcmJfYWRkX21ldGhvZChrbGFzcywgbmFtZSwgTkVXX05PREVfTE9OR0xJRkUo Tk9ERV9DRlVOQywgZnVuYywgYXJnYywgMCksIE5PRVhfUFVCTElDKTsKIH0KIAogdm9pZAogcmJf ZGVmaW5lX21ldGhvZChWQUxVRSBrbGFzcywgY29uc3QgY2hhciAqbmFtZSwgVkFMVUUgKCpmdW5j KShBTllBUkdTKSwgaW50IGFyZ2MpCiB7Ci0gICAgcmJfYWRkX21ldGhvZChrbGFzcywgcmJfaW50 ZXJuKG5hbWUpLCBORVdfQ0ZVTkMoZnVuYywgYXJnYyksIE5PRVhfUFVCTElDKTsKKyAgICByYl9h ZGRfbWV0aG9kKGtsYXNzLCByYl9pbnRlcm4obmFtZSksIE5FV19OT0RFX0xPTkdMSUZFKE5PREVf Q0ZVTkMsIGZ1bmMsIGFyZ2MsIDApLCBOT0VYX1BVQkxJQyk7CiB9CiAKIHZvaWQKIHJiX2RlZmlu ZV9wcm90ZWN0ZWRfbWV0aG9kKFZBTFVFIGtsYXNzLCBjb25zdCBjaGFyICpuYW1lLCBWQUxVRSAo KmZ1bmMpKEFOWUFSR1MpLCBpbnQgYXJnYykKIHsKLSAgICByYl9hZGRfbWV0aG9kKGtsYXNzLCBy Yl9pbnRlcm4obmFtZSksIE5FV19DRlVOQyhmdW5jLCBhcmdjKSwgTk9FWF9QUk9URUNURUQpOwor ICAgIHJiX2FkZF9tZXRob2Qoa2xhc3MsIHJiX2ludGVybihuYW1lKSwgTkVXX05PREVfTE9OR0xJ RkUoTk9ERV9DRlVOQywgZnVuYywgYXJnYywgMCksIE5PRVhfUFJPVEVDVEVEKTsKIH0KIAogdm9p ZAogcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKFZBTFVFIGtsYXNzLCBjb25zdCBjaGFyICpuYW1l LCBWQUxVRSAoKmZ1bmMpKEFOWUFSR1MpLCBpbnQgYXJnYykKIHsKLSAgICByYl9hZGRfbWV0aG9k KGtsYXNzLCByYl9pbnRlcm4obmFtZSksIE5FV19DRlVOQyhmdW5jLCBhcmdjKSwgTk9FWF9QUklW QVRFKTsKKyAgICByYl9hZGRfbWV0aG9kKGtsYXNzLCByYl9pbnRlcm4obmFtZSksIE5FV19OT0RF X0xPTkdMSUZFKE5PREVfQ0ZVTkMsIGZ1bmMsIGFyZ2MsIDApLCBOT0VYX1BSSVZBVEUpOwogfQog CiB2b2lkCmRpZmYgLS1naXQgYS9kZWJ1Zy5jIGIvZGVidWcuYwppbmRleCAyNjVlODY0Li5jNjc3 NTYwIDEwMDY0NAotLS0gYS9kZWJ1Zy5jCisrKyBiL2RlYnVnLmMKQEAgLTMyLDcgKzMyLDcgQEAg c3RhdGljIGNvbnN0IHVuaW9uIHsKICAgICAgICAgUlVCWV9FTkNfQ09ERVJBTkdFX1ZBTElEICAg PSBFTkNfQ09ERVJBTkdFX1ZBTElELAogICAgICAgICBSVUJZX0VOQ19DT0RFUkFOR0VfQlJPS0VO ICA9IEVOQ19DT0RFUkFOR0VfQlJPS0VOLCAKICAgICAgICAgUlVCWV9GTF9NQVJLICAgICAgICA9 IEZMX01BUkssCi0gICAgICAgIFJVQllfRkxfUkVTRVJWRUQgICAgPSBGTF9SRVNFUlZFRCwKKyAg ICAgICAgUlVCWV9GTF9SRU1FTkJFUkVEX1NFVCAgICAgPSBGTF9SRU1FTUJFUkVEX1NFVCwKICAg ICAgICAgUlVCWV9GTF9GSU5BTElaRSAgICA9IEZMX0ZJTkFMSVpFLAogICAgICAgICBSVUJZX0ZM X1RBSU5UICAgICAgID0gRkxfVEFJTlQsCiAgICAgICAgIFJVQllfRkxfVU5UUlVTVEVEICAgPSBG TF9VTlRSVVNURUQsCmRpZmYgLS1naXQgYS9nYy5jIGIvZ2MuYwppbmRleCA3ODQ5NDljLi4zYWJj N2MxIDEwMDY0NAotLS0gYS9nYy5jCisrKyBiL2djLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNs dWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5o PgorI2luY2x1ZGUgPGFzc2VydC5oPgogCiAjaWZkZWYgSEFWRV9TWVNfVElNRV9ICiAjaW5jbHVk ZSA8c3lzL3RpbWUuaD4KQEAgLTkzLDEzICs5NCwxOCBAQCB0eXBlZGVmIHN0cnVjdCBnY19wcm9m aWxlX3JlY29yZCB7CiAgICAgZG91YmxlIGdjX21hcmtfdGltZTsKICAgICBkb3VibGUgZ2Nfc3dl ZXBfdGltZTsKICAgICBkb3VibGUgZ2NfaW52b2tlX3RpbWU7CisKICAgICBzaXplX3QgaGVhcF91 c2Vfc2xvdHM7CisgICAgc2l6ZV90IGhlYXBfbG9uZ2xpZmVfdXNlX3Nsb3RzOwogICAgIHNpemVf dCBoZWFwX2xpdmVfb2JqZWN0czsKICAgICBzaXplX3QgaGVhcF9mcmVlX29iamVjdHM7CiAgICAg c2l6ZV90IGhlYXBfdG90YWxfb2JqZWN0czsKICAgICBzaXplX3QgaGVhcF91c2Vfc2l6ZTsKICAg ICBzaXplX3QgaGVhcF90b3RhbF9zaXplOworCiAgICAgaW50IGhhdmVfZmluYWxpemU7CisgICAg aW50IGxvbmdsaWZlX2NvbGxlY3Rpb247CisKICAgICBzaXplX3QgYWxsb2NhdGVfaW5jcmVhc2U7 CiAgICAgc2l6ZV90IGFsbG9jYXRlX2xpbWl0OwogfSBnY19wcm9maWxlX3JlY29yZDsKQEAgLTE1 Niw2ICsxNjIsNyBAQCBnZXRydXNhZ2VfdGltZSh2b2lkKQogCSAgICBNRU1aRVJPKCZvYmpzcGFj ZS0+cHJvZmlsZS5yZWNvcmRbY291bnRdLCBnY19wcm9maWxlX3JlY29yZCwgMSk7XAogCSAgICBn Y190aW1lID0gZ2V0cnVzYWdlX3RpbWUoKTtcCiAJICAgIG9ianNwYWNlLT5wcm9maWxlLnJlY29y ZFtjb3VudF0uZ2NfaW52b2tlX3RpbWUgPSBnY190aW1lIC0gb2Jqc3BhY2UtPnByb2ZpbGUuaW52 b2tlX3RpbWU7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbY291bnRdLmxvbmdsaWZl X2NvbGxlY3Rpb24gPSBvYmpzcGFjZS0+ZmxhZ3MubG9uZ2xpZmVfY29sbGVjdGlvbjtcCiAJfVwK ICAgICB9IHdoaWxlKDApCiAKQEAgLTIxMCwxNSArMjE3LDE1IEBAIGdldHJ1c2FnZV90aW1lKHZv aWQpCiAJaWYgKG9ianNwYWNlLT5wcm9maWxlLnJ1bikge1wKIAkgICAgc2l6ZV90IGNvdW50ID0g b2Jqc3BhY2UtPnByb2ZpbGUuY291bnQ7XAogCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRb Y291bnRdLmhlYXBfdXNlX3Nsb3RzID0gaGVhcHNfdXNlZDtcCi0JICAgIG9ianNwYWNlLT5wcm9m aWxlLnJlY29yZFtjb3VudF0uaGVhcF9saXZlX29iamVjdHMgPSBsaXZlO1wKLQkgICAgb2Jqc3Bh Y2UtPnByb2ZpbGUucmVjb3JkW2NvdW50XS5oZWFwX2ZyZWVfb2JqZWN0cyA9IGZyZWVkO1wKKwkg ICAgb2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2NvdW50XS5oZWFwX2xvbmdsaWZlX3VzZV9zbG90 cyA9IG9ianNwYWNlLT5oZWFwLmxvbmdsaWZlX3VzZWQ7XAorCSAgICBvYmpzcGFjZS0+cHJvZmls ZS5yZWNvcmRbY291bnRdLmhlYXBfbGl2ZV9vYmplY3RzID0gbGl2ZSArIG9ianNwYWNlLT5wcm9m aWxlLmxvbmdsaWZlX29iamVjdHM7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbY291 bnRdLmhlYXBfZnJlZV9vYmplY3RzID0gZnJlZWQgKyAob2Jqc3BhY2UtPmhlYXAubG9uZ2xpZmVf dXNlZCAqIEhFQVBfT0JKX0xJTUlUIC0gb2Jqc3BhY2UtPnByb2ZpbGUubG9uZ2xpZmVfb2JqZWN0 cyk7IFwKIAkgICAgb2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2NvdW50XS5oZWFwX3RvdGFsX29i amVjdHMgPSBoZWFwc191c2VkICogSEVBUF9PQkpfTElNSVQ7XAogCSAgICBvYmpzcGFjZS0+cHJv ZmlsZS5yZWNvcmRbY291bnRdLmhhdmVfZmluYWxpemUgPSBmaW5hbF9saXN0ID8gUXRydWUgOiBR ZmFsc2U7XAotCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbY291bnRdLmhlYXBfdXNlX3Np emUgPSBsaXZlICogc2l6ZW9mKFJWQUxVRSk7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNv cmRbY291bnRdLmhlYXBfdXNlX3NpemUgPSAobGl2ZSArIG9ianNwYWNlLT5wcm9maWxlLmxvbmds aWZlX29iamVjdHMpICogc2l6ZW9mKFJWQUxVRSk7IFwKIAkgICAgb2Jqc3BhY2UtPnByb2ZpbGUu cmVjb3JkW2NvdW50XS5oZWFwX3RvdGFsX3NpemUgPSBoZWFwc191c2VkICogKEhFQVBfT0JKX0xJ TUlUICogc2l6ZW9mKFJWQUxVRSkpO1wKIAl9XAogICAgIH0gd2hpbGUoMCkKLQogI2Vsc2UKICNk ZWZpbmUgSU5JVF9HQ19QUk9GX1BBUkFNUyBkb3VibGUgZ2NfdGltZSA9IDA7XAogICAgIHNpemVf dCBjb3VudCA9IG9ianNwYWNlLT5wcm9maWxlLmNvdW50CkBAIC0yMzEsNyArMjM4LDcgQEAgZ2V0 cnVzYWdlX3RpbWUodm9pZCkKIAlpZiAob2Jqc3BhY2UtPnByb2ZpbGUucnVuKSB7XAogCSAgICBz aXplX3QgY291bnQgPSBvYmpzcGFjZS0+cHJvZmlsZS5jb3VudDtcCiAJICAgIG9ianNwYWNlLT5w cm9maWxlLnJlY29yZFtjb3VudF0uaGVhcF90b3RhbF9vYmplY3RzID0gaGVhcHNfdXNlZCAqIEhF QVBfT0JKX0xJTUlUO1wKLQkgICAgb2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2NvdW50XS5oZWFw X3VzZV9zaXplID0gbGl2ZSAqIHNpemVvZihSVkFMVUUpO1wKKwkgICAgb2Jqc3BhY2UtPnByb2Zp bGUucmVjb3JkW2NvdW50XS5oZWFwX3VzZV9zaXplID0gKGxpdmUgKyBvYmpzcGFjZS0+cHJvZmls ZS5sb25nbGlmZV9vYmplY3RzKSAqIHNpemVvZihSVkFMVUUpOyBcCiAJICAgIG9ianNwYWNlLT5w cm9maWxlLnJlY29yZFtjb3VudF0uaGVhcF90b3RhbF9zaXplID0gaGVhcHNfdXNlZCAqIEhFQVBf U0laRTtcCiAJfVwKICAgICB9IHdoaWxlKDApCkBAIC0yNzUsMTAgKzI4MiwxNiBAQCB0eXBlZGVm IHN0cnVjdCBSVkFMVUUgewogI3ByYWdtYSBwYWNrKHBvcCkKICNlbmRpZgogCitlbnVtIGxpZmV0 aW1lIHsKKyAgICBsaWZldGltZV9ub3JtYWwsCisgICAgbGlmZXRpbWVfbG9uZ2xpZmUKK307CisK IHN0cnVjdCBoZWFwc19zbG90IHsKICAgICB2b2lkICptZW1iYXNlOwogICAgIFJWQUxVRSAqc2xv dDsKICAgICBpbnQgbGltaXQ7CisgICAgZW51bSBsaWZldGltZSBsaWZldGltZTsKIH07CiAKICNk ZWZpbmUgSEVBUF9NSU5fU0xPVFMgMTAwMDAKQEAgLTI5MSw2ICszMDQsMTEgQEAgc3RydWN0IGdj X2xpc3QgewogCiAjZGVmaW5lIENBTENfRVhBQ1RfTUFMTE9DX1NJWkUgMAogCit0eXBlZGVmIHN0 cnVjdCByZW1lbWJlcmVkX3NldCB7CisgICAgUlZBTFVFICpvYmo7CisgICAgc3RydWN0IHJlbWVt YmVyZWRfc2V0ICpuZXh0OworfSByZW1lbWJlcmVkX3NldF90OworCiB0eXBlZGVmIHN0cnVjdCBy Yl9vYmpzcGFjZSB7CiAgICAgc3RydWN0IHsKIAlzaXplX3QgbGltaXQ7CkBAIC0zMDUsMTMgKzMy MywyMCBAQCB0eXBlZGVmIHN0cnVjdCByYl9vYmpzcGFjZSB7CiAJc3RydWN0IGhlYXBzX3Nsb3Qg KnB0cjsKIAlzaXplX3QgbGVuZ3RoOwogCXNpemVfdCB1c2VkOworCXNpemVfdCBsb25nbGlmZV91 c2VkOwogCVJWQUxVRSAqZnJlZWxpc3Q7CisJUlZBTFVFICpsb25nbGlmZV9mcmVlbGlzdDsKIAlS VkFMVUUgKnJhbmdlWzJdOwogCVJWQUxVRSAqZnJlZWQ7CiAgICAgfSBoZWFwOwogICAgIHN0cnVj dCB7CisgICAgICAgIHJlbWVtYmVyZWRfc2V0X3QgKnB0cjsKKyAgICAgICAgcmVtZW1iZXJlZF9z ZXRfdCAqZnJlZWQ7CisgICAgfSByZW1lbWJlcmVkX3NldDsKKyAgICBzdHJ1Y3QgewogCWludCBk b250X2djOwogCWludCBkdXJpbmdfZ2M7CisgICAgICAgIGludCBsb25nbGlmZV9jb2xsZWN0aW9u OwogICAgIH0gZmxhZ3M7CiAgICAgc3RydWN0IHsKIAlzdF90YWJsZSAqdGFibGU7CkBAIC0zMjcs NiArMzUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcmJfb2Jqc3BhY2UgewogCWdjX3Byb2ZpbGVfcmVj b3JkICpyZWNvcmQ7CiAJc2l6ZV90IGNvdW50OwogCXNpemVfdCBzaXplOworCXNpemVfdCBsb25n bGlmZV9vYmplY3RzOwogCWRvdWJsZSBpbnZva2VfdGltZTsKICAgICB9IHByb2ZpbGU7CiAgICAg c3RydWN0IGdjX2xpc3QgKmdsb2JhbF9saXN0OwpAQCAtMzk1LDYgKzQyMSw3IEBAIHJiX29ianNw YWNlX2FsbG9jKHZvaWQpCiAvKiNkZWZpbmUgSEVBUF9TSVpFIDB4ODAwICovCiAKICNkZWZpbmUg SEVBUF9PQkpfTElNSVQgKEhFQVBfU0laRSAvIHNpemVvZihzdHJ1Y3QgUlZBTFVFKSkKKyNkZWZp bmUgTk9STUFMX0hFQVBTX1VTRUQgKG9ianNwYWNlLT5oZWFwLnVzZWQgLSBvYmpzcGFjZS0+aGVh cC5sb25nbGlmZV91c2VkKQogCiBleHRlcm4gVkFMVUUgcmJfY011dGV4OwogZXh0ZXJuIHN0X3Rh YmxlICpyYl9jbGFzc190Ymw7CkBAIC04NTgsNyArODg1LDcgQEAgYWxsb2NhdGVfaGVhcHMocmJf b2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHNpemVfdCBuZXh0X2hlYXBzX2xlbmd0aCkKIH0KIAogc3Rh dGljIHZvaWQKLWFzc2lnbl9oZWFwX3Nsb3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCithc3Np Z25faGVhcF9zbG90KHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCBSVkFMVUUgKipsaXN0LCBlbnVt IGxpZmV0aW1lIGxpZmV0aW1lKQogewogICAgIFJWQUxVRSAqcCwgKnBlbmQsICptZW1iYXNlOwog ICAgIHNpemVfdCBoaSwgbG8sIG1pZDsKQEAgLTkwMiwxNSArOTI5LDE3IEBAIGFzc2lnbl9oZWFw X3Nsb3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAgICAgaGVhcHNbaGldLm1lbWJhc2UgPSBt ZW1iYXNlOwogICAgIGhlYXBzW2hpXS5zbG90ID0gcDsKICAgICBoZWFwc1toaV0ubGltaXQgPSBv YmpzOworICAgIGhlYXBzW2hpXS5saWZldGltZSA9IGxpZmV0aW1lOwogICAgIHBlbmQgPSBwICsg b2JqczsKICAgICBpZiAobG9tZW0gPT0gMCB8fCBsb21lbSA+IHApIGxvbWVtID0gcDsKICAgICBp ZiAoaGltZW0gPCBwZW5kKSBoaW1lbSA9IHBlbmQ7CisgICAgaWYgKGxpZmV0aW1lID09IGxpZmV0 aW1lX2xvbmdsaWZlKSBvYmpzcGFjZS0+aGVhcC5sb25nbGlmZV91c2VkKys7CiAgICAgaGVhcHNf dXNlZCsrOwogCiAgICAgd2hpbGUgKHAgPCBwZW5kKSB7CiAJcC0+YXMuZnJlZS5mbGFncyA9IDA7 Ci0JcC0+YXMuZnJlZS5uZXh0ID0gZnJlZWxpc3Q7Ci0JZnJlZWxpc3QgPSBwOworCXAtPmFzLmZy ZWUubmV4dCA9ICpsaXN0OworCSpsaXN0ID0gcDsKIAlwKys7CiAgICAgfQogfQpAQCAtOTI3LDcg Kzk1Niw3IEBAIGluaXRfaGVhcChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKICAgICB9CiAKICAg ICBmb3IgKGkgPSAwOyBpIDwgYWRkOyBpKyspIHsKLSAgICAJYXNzaWduX2hlYXBfc2xvdChvYmpz cGFjZSk7CisgICAgCWFzc2lnbl9oZWFwX3Nsb3Qob2Jqc3BhY2UsICZmcmVlbGlzdCwgbGlmZXRp bWVfbm9ybWFsKTsKICAgICB9CiAgICAgaGVhcHNfaW5jID0gMDsKICAgICBvYmpzcGFjZS0+cHJv ZmlsZS5pbnZva2VfdGltZSA9IGdldHJ1c2FnZV90aW1lKCk7CkBAIC05NDksMTYgKzk3OCw0NSBA QCBzdGF0aWMgaW50CiBoZWFwc19pbmNyZW1lbnQocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiB7 CiAgICAgaWYgKGhlYXBzX2luYyA+IDApIHsKLQlhc3NpZ25faGVhcF9zbG90KG9ianNwYWNlKTsK KyAgICAgICAgYXNzaWduX2hlYXBfc2xvdChvYmpzcGFjZSwgJmZyZWVsaXN0LCBsaWZldGltZV9u b3JtYWwpOwogCWhlYXBzX2luYy0tOwogCXJldHVybiBRdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu IFFmYWxzZTsKIH0KIAorI2RlZmluZSBMT05HTElGRV9BTExPQ0FURV9IRUFQU19NSU4gMTAKKwor c3RhdGljIHZvaWQKK2FkZF9sb25nbGlmZV9oZWFwc19zbG90KHJiX29ianNwYWNlX3QgKm9ianNw YWNlKQoreworICAgIGlmICgoaGVhcHNfdXNlZCArIGhlYXBzX2luYykgPj0gaGVhcHNfbGVuZ3Ro KSB7CisgICAgICAgIGFsbG9jYXRlX2hlYXBzKG9ianNwYWNlLCAoaGVhcHNfbGVuZ3RoICsgTE9O R0xJRkVfQUxMT0NBVEVfSEVBUFNfTUlOKSk7CisgICAgfQorICAgIGFzc2lnbl9oZWFwX3Nsb3Qo b2Jqc3BhY2UsICZvYmpzcGFjZS0+aGVhcC5sb25nbGlmZV9mcmVlbGlzdCwgbGlmZXRpbWVfbG9u Z2xpZmUpOworfQorCiAjZGVmaW5lIFJBTlkobykgKChSVkFMVUUqKShvKSkKIAogc3RhdGljIFZB TFVFCityYl9uZXdvYmpfZnJvbV9sb25nbGlmZV9oZWFwKHJiX29ianNwYWNlX3QgKm9ianNwYWNl KQoreworICAgIFZBTFVFIG9iajsKKyAgICBpZiAoIW9ianNwYWNlLT5oZWFwLmxvbmdsaWZlX2Zy ZWVsaXN0KSB7CisgICAgICAgIGFkZF9sb25nbGlmZV9oZWFwc19zbG90KG9ianNwYWNlKTsKKyAg ICB9CisKKyAgICBvYmogPSAoVkFMVUUpb2Jqc3BhY2UtPmhlYXAubG9uZ2xpZmVfZnJlZWxpc3Q7 CisgICAgb2Jqc3BhY2UtPmhlYXAubG9uZ2xpZmVfZnJlZWxpc3QgPSBvYmpzcGFjZS0+aGVhcC5s b25nbGlmZV9mcmVlbGlzdC0+YXMuZnJlZS5uZXh0OworCisgICAgTUVNWkVSTygodm9pZCopb2Jq LCBSVkFMVUUsIDEpOworICAgIEZMX1NFVChSQU5ZKG9iaiksIEZMX01BUkspOworICAgIG9ianNw YWNlLT5wcm9maWxlLmxvbmdsaWZlX29iamVjdHMrKzsKKworICAgIHJldHVybiBvYmo7Cit9CisK K3N0YXRpYyBWQUxVRQogcmJfbmV3b2JqX2Zyb21faGVhcChyYl9vYmpzcGFjZV90ICpvYmpzcGFj ZSkKIHsKICAgICBWQUxVRSBvYmo7CkBAIC0xMDUxLDYgKzExMDksMjIgQEAgcmJfbmV3b2JqKHZv aWQpCiAjZW5kaWYKIH0KIAorVkFMVUUKK3JiX25ld29ial9sb25nbGlmZSh2b2lkKQoreworI2lm IGRlZmluZWQoRU5BQkxFX1ZNX09CSlNQQUNFKSAmJiBFTkFCTEVfVk1fT0JKU1BBQ0UKKyAgICBy Yl9vYmpzcGFjZV90ICpvYmpzcGFjZSA9IHRoLT52bS0+b2Jqc3BhY2U7CisjZWxzZQorICAgIHJi X29ianNwYWNlX3QgKm9ianNwYWNlID0gJnJiX29ianNwYWNlOworI2VuZGlmCisgICAgaWYgKGR1 cmluZ19nYykgeworCWRvbnRfZ2MgPSAxOworCWR1cmluZ19nYyA9IDA7CisJcmJfYnVnKCJvYmpl Y3QgYWxsb2NhdGlvbiBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIHBoYXNlIik7CisgICAgfQor ICAgIHJldHVybiByYl9uZXdvYmpfZnJvbV9sb25nbGlmZV9oZWFwKG9ianNwYWNlKTsKK30KKwog Tk9ERSoKIHJiX25vZGVfbmV3bm9kZShlbnVtIG5vZGVfdHlwZSB0eXBlLCBWQUxVRSBhMCwgVkFM VUUgYTEsIFZBTFVFIGEyKQogewpAQCAtMTA2Niw2ICsxMTQwLDIxIEBAIHJiX25vZGVfbmV3bm9k ZShlbnVtIG5vZGVfdHlwZSB0eXBlLCBWQUxVRSBhMCwgVkFMVUUgYTEsIFZBTFVFIGEyKQogICAg IHJldHVybiBuOwogfQogCitOT0RFKgorcmJfbm9kZV9uZXdub2RlX2xvbmdsaWZlKGVudW0gbm9k ZV90eXBlIHR5cGUsIFZBTFVFIGEwLCBWQUxVRSBhMSwgVkFMVUUgYTIpCit7CisgICAgTk9ERSAq biA9IChOT0RFKilyYl9uZXdvYmpfbG9uZ2xpZmUoKTsKKworICAgIG4tPmZsYWdzIHw9IFRfTk9E RTsKKyAgICBuZF9zZXRfdHlwZShuLCB0eXBlKTsKKworICAgIG4tPnUxLnZhbHVlID0gYTA7Cisg ICAgbi0+dTIudmFsdWUgPSBhMTsKKyAgICBuLT51My52YWx1ZSA9IGEyOworCisgICAgcmV0dXJu IG47Cit9CisKIFZBTFVFCiByYl9kYXRhX29iamVjdF9hbGxvYyhWQUxVRSBrbGFzcywgdm9pZCAq ZGF0YXAsIFJVQllfREFUQV9GVU5DIGRtYXJrLCBSVUJZX0RBVEFfRlVOQyBkZnJlZSkKIHsKQEAg LTEyMjIsNiArMTMxMSwzMCBAQCBpc19wb2ludGVyX3RvX2hlYXAocmJfb2Jqc3BhY2VfdCAqb2Jq c3BhY2UsIHZvaWQgKnB0cikKICAgICByZXR1cm4gUWZhbHNlOwogfQogCitWQUxVRQorcmJfZ2Nf d3JpdGVfYmFycmllcihWQUxVRSBwdHIpCit7CisgICAgcmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2Ug PSAmcmJfb2Jqc3BhY2U7CisgICAgcmVtZW1iZXJlZF9zZXRfdCAqdG1wOworICAgIFJWQUxVRSAq b2JqID0gUkFOWShwdHIpOworCisgICAgaWYgKCFTUEVDSUFMX0NPTlNUX1AocHRyKSAmJgorICAg ICAgICAhKFJCQVNJQyhwdHIpLT5mbGFncyAmIEZMX01BUksgfHwgUkJBU0lDKHB0ciktPmZsYWdz ICYgRkxfUkVNRU1CRVJFRF9TRVQpKSB7CisgICAgICAgIGlmIChvYmpzcGFjZS0+cmVtZW1iZXJl ZF9zZXQuZnJlZWQpIHsKKyAgICAgICAgICAgIHRtcCA9IG9ianNwYWNlLT5yZW1lbWJlcmVkX3Nl dC5mcmVlZDsKKyAgICAgICAgICAgIG9ianNwYWNlLT5yZW1lbWJlcmVkX3NldC5mcmVlZCA9IG9i anNwYWNlLT5yZW1lbWJlcmVkX3NldC5mcmVlZC0+bmV4dDsKKyAgICAgICAgfQorICAgICAgICBl bHNlIHsKKyAgICAgICAgICAgIHRtcCA9IEFMTE9DKHJlbWVtYmVyZWRfc2V0X3QpOworICAgICAg ICB9CisgICAgICAgIHRtcC0+bmV4dCA9IG9ianNwYWNlLT5yZW1lbWJlcmVkX3NldC5wdHI7Cisg ICAgICAgIHRtcC0+b2JqID0gb2JqOworICAgICAgICBvYmotPmFzLmJhc2ljLmZsYWdzIHw9IEZM X1JFTUVNQkVSRURfU0VUOworICAgICAgICBvYmpzcGFjZS0+cmVtZW1iZXJlZF9zZXQucHRyID0g dG1wOworICAgIH0KKyAgICByZXR1cm4gcHRyOworfQorCiBzdGF0aWMgdm9pZAogbWFya19sb2Nh dGlvbnNfYXJyYXkocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHJlZ2lzdGVyIFZBTFVFICp4LCBy ZWdpc3RlciBsb25nIG4pCiB7CkBAIC0xNjQ1LDEyICsxNzU4LDEyIEBAIGdjX21hcmtfY2hpbGRy ZW4ocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIFZBTFVFIHB0ciwgaW50IGxldikKIHN0YXRpYyBp bnQgb2JqX2ZyZWUocmJfb2Jqc3BhY2VfdCAqLCBWQUxVRSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9p ZAotYWRkX2ZyZWVsaXN0KHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCBSVkFMVUUgKnApCithZGRf ZnJlZWxpc3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIFJWQUxVRSAqKmxpc3QsIFJWQUxVRSAq cCkKIHsKICAgICBWQUxHUklORF9NQUtFX01FTV9VTkRFRklORUQoKHZvaWQqKXAsIHNpemVvZihS VkFMVUUpKTsKICAgICBwLT5hcy5mcmVlLmZsYWdzID0gMDsKLSAgICBwLT5hcy5mcmVlLm5leHQg PSBmcmVlbGlzdDsKLSAgICBmcmVlbGlzdCA9IHA7CisgICAgcC0+YXMuZnJlZS5uZXh0ID0gKmxp c3Q7CisgICAgKmxpc3QgPSBwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTY2MCw3ICsxNzczLDcg QEAgZmluYWxpemVfbGlzdChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSwgUlZBTFVFICpwKQogCVJW QUxVRSAqdG1wID0gcC0+YXMuZnJlZS5uZXh0OwogCXJ1bl9maW5hbChvYmpzcGFjZSwgKFZBTFVF KXApOwogCWlmICghRkxfVEVTVChwLCBGTF9TSU5HTEVUT04pKSB7IC8qIG5vdCBmcmVlaW5nIHBh Z2UgKi8KLQkgICAgYWRkX2ZyZWVsaXN0KG9ianNwYWNlLCBwKTsKKwkgICAgYWRkX2ZyZWVsaXN0 KG9ianNwYWNlLCAmZnJlZWxpc3QsIHApOwogCX0KIAllbHNlIHsKIAkgICAgc3RydWN0IGhlYXBz X3Nsb3QgKnNsb3QgPSAoc3RydWN0IGhlYXBzX3Nsb3QgKilSREFUQShwKS0+ZG1hcms7CkBAIC0x Njg0LDYgKzE3OTcsOSBAQCBmcmVlX3VudXNlZF9oZWFwcyhyYl9vYmpzcGFjZV90ICpvYmpzcGFj ZSkKIAkgICAgZWxzZSB7CiAJCWZyZWUoaGVhcHNbaV0ubWVtYmFzZSk7CiAJICAgIH0KKyAgICAg ICAgICAgIGlmIChoZWFwc1tpXS5saWZldGltZSA9PSBsaWZldGltZV9sb25nbGlmZSkgeworICAg ICAgICAgICAgICAgIG9ianNwYWNlLT5oZWFwLmxvbmdsaWZlX3VzZWQtLTsKKyAgICAgICAgICAg IH0KIAkgICAgaGVhcHNfdXNlZC0tOwogCX0KIAllbHNlIHsKQEAgLTE3MjksNiArMTg0NSw3IEBA IGdjX3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQogCVJWQUxVRSAqZmluYWwgPSBmaW5h bF9saXN0OwogCWludCBkZWZlcnJlZDsKIAorICAgICAgICBpZiAoaGVhcHNbaV0ubGlmZXRpbWUg PT0gbGlmZXRpbWVfbG9uZ2xpZmUpIGNvbnRpbnVlOwogCXAgPSBoZWFwc1tpXS5zbG90OyBwZW5k ID0gcCArIGhlYXBzW2ldLmxpbWl0OwogCXdoaWxlIChwIDwgcGVuZCkgewogCSAgICBpZiAoIShw LT5hcy5iYXNpYy5mbGFncyAmIEZMX01BUkspKSB7CkBAIC0xNzQ1LDcgKzE4NjIsNyBAQCBnY19z d2VlcChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKIAkJICAgIGZpbmFsX251bSsrOwogCQl9CiAJ CWVsc2UgewotCQkgICAgYWRkX2ZyZWVsaXN0KG9ianNwYWNlLCBwKTsKKwkJICAgIGFkZF9mcmVl bGlzdChvYmpzcGFjZSwgJmZyZWVsaXN0LCBwKTsKIAkJICAgIGZyZWVfbnVtKys7CiAJCX0KIAkg ICAgfQpAQCAtMTc4MSw4ICsxODk4LDEwIEBAIGdjX3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNw YWNlKQogICAgIH0KICAgICBtYWxsb2NfaW5jcmVhc2UgPSAwOwogICAgIGlmIChmcmVlZCA8IGZy ZWVfbWluKSB7Ci0gICAgCXNldF9oZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpOwotCWhlYXBzX2lu Y3JlbWVudChvYmpzcGFjZSk7CisgICAgICAgIGlmICghaGVhcHNfaW5jICYmIG9ianNwYWNlLT5o ZWFwLmxvbmdsaWZlX3VzZWQpCisgICAgICAgICAgICBvYmpzcGFjZS0+ZmxhZ3MubG9uZ2xpZmVf Y29sbGVjdGlvbiA9IFF0cnVlOworICAgICAgICBzZXRfaGVhcHNfaW5jcmVtZW50KG9ianNwYWNl KTsKKyAgICAgICAgaGVhcHNfaW5jcmVtZW50KG9ianNwYWNlKTsKICAgICB9CiAgICAgZHVyaW5n X2djID0gMDsKIApAQCAtMTc5OCwxMSArMTkxNyw2NyBAQCBnY19zd2VlcChyYl9vYmpzcGFjZV90 ICpvYmpzcGFjZSkKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkCityZW1lbWJlcmVkX3NldF9yZWN5 Y2xlKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQoreworICAgIHJlbWVtYmVyZWRfc2V0X3QgKnRv cCA9IDAsICpyZW0sICpuZXh0OworCisgICAgcmVtID0gb2Jqc3BhY2UtPnJlbWVtYmVyZWRfc2V0 LnB0cjsKKyAgICB3aGlsZSAocmVtKSB7CisgICAgICAgIG5leHQgPSByZW0tPm5leHQ7CisgICAg ICAgIGlmIChSQkFTSUMocmVtLT5vYmopLT5mbGFncyAmIEZMX01BUkspIHsKKyAgICAgICAgICAg IHRvcCA9IHJlbTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0 b3ApIHsKKyAgICAgICAgICAgICAgICB0b3AtPm5leHQgPSBuZXh0OworICAgICAgICAgICAgfQor ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgb2Jqc3BhY2UtPnJlbWVtYmVyZWRf c2V0LnB0ciA9IG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZW0tPm9iaiA9IDA7 CisgICAgICAgICAgICByZW0tPm5leHQgPSBvYmpzcGFjZS0+cmVtZW1iZXJlZF9zZXQuZnJlZWQ7 CisgICAgICAgICAgICBvYmpzcGFjZS0+cmVtZW1iZXJlZF9zZXQuZnJlZWQgPSByZW07CisgICAg ICAgIH0KKyAgICAgICAgcmVtID0gbmV4dDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitnY19z d2VlcF9mb3JfbG9uZ2xpZmUocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCit7CisgICAgUlZBTFVF ICpwLCAqcGVuZDsKKyAgICBzaXplX3QgaSwgZnJlZWQgPSAwOworCisgICAgb2Jqc3BhY2UtPmhl YXAubG9uZ2xpZmVfZnJlZWxpc3QgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBoZWFwc191c2Vk OyBpKyspIHsKKworICAgICAgICBpZiAoaGVhcHNbaV0ubGlmZXRpbWUgPT0gbGlmZXRpbWVfbm9y bWFsKSBjb250aW51ZTsKKwlwID0gaGVhcHNbaV0uc2xvdDsgcGVuZCA9IHAgKyBoZWFwc1tpXS5s aW1pdDsKKwl3aGlsZSAocCA8IHBlbmQpIHsKKwkgICAgaWYgKCEocC0+YXMuYmFzaWMuZmxhZ3Mg JiBGTF9NQVJLKSkgeworICAgICAgICAgICAgICAgIGlmIChwLT5hcy5iYXNpYy5mbGFncykgewor ICAgICAgICAgICAgICAgICAgICBvYmpfZnJlZShvYmpzcGFjZSwgKFZBTFVFKXApOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhZGRfZnJlZWxpc3Qob2Jqc3BhY2UsICZvYmpz cGFjZS0+aGVhcC5sb25nbGlmZV9mcmVlbGlzdCwgcCk7CisgICAgICAgICAgICAgICAgZnJlZWQr KzsKKwkgICAgfQorCSAgICBwKys7CisJfQorICAgIH0KKworICAgIHJlbWVtYmVyZWRfc2V0X3Jl Y3ljbGUob2Jqc3BhY2UpOworICAgIG9ianNwYWNlLT5mbGFncy5sb25nbGlmZV9jb2xsZWN0aW9u ID0gUWZhbHNlOworICAgIG9ianNwYWNlLT5wcm9maWxlLmxvbmdsaWZlX29iamVjdHMgPSBvYmpz cGFjZS0+cHJvZmlsZS5sb25nbGlmZV9vYmplY3RzIC0gZnJlZWQ7Cit9CisKIHZvaWQKIHJiX2dj X2ZvcmNlX3JlY3ljbGUoVkFMVUUgcCkKIHsKICAgICByYl9vYmpzcGFjZV90ICpvYmpzcGFjZSA9 ICZyYl9vYmpzcGFjZTsKLSAgICBhZGRfZnJlZWxpc3Qob2Jqc3BhY2UsIChSVkFMVUUgKilwKTsK KyAgICBpZiAoIShSQkFTSUMocCktPmZsYWdzICYgRkxfTUFSSyB8fCBSQkFTSUMocCktPmZsYWdz ICYgRkxfUkVNRU1CRVJFRF9TRVQpKSB7CisgICAgICAgIGFkZF9mcmVlbGlzdChvYmpzcGFjZSwg JmZyZWVsaXN0LCAoUlZBTFVFICopcCk7CisgICAgfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQK QEAgLTE5ODgsNiArMjE2MywzNyBAQCBtYXJrX2N1cnJlbnRfbWFjaGluZV9jb250ZXh0KHJiX29i anNwYWNlX3QgKm9ianNwYWNlLCByYl90aHJlYWRfdCAqdGgpCiAKIHZvaWQgcmJfZ2NfbWFya19l bmNvZGluZ3Modm9pZCk7CiAKK3N0YXRpYyB2b2lkCityYl9nY19tYXJrX3JlbWVtYmVyZWRfc2V0 KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQoreworICAgIHJlbWVtYmVyZWRfc2V0X3QgKnJlbTsK KworICAgIHJlbSA9IG9ianNwYWNlLT5yZW1lbWJlcmVkX3NldC5wdHI7CisgICAgd2hpbGUgKHJl bSkgeworICAgICAgICByYl9nY19tYXJrKChWQUxVRSlyZW0tPm9iaik7CisgICAgICAgIHJlbSA9 IHJlbS0+bmV4dDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhcl9tYXJrX2xvbmdsaWZl X2hlYXBzKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQoreworICAgIGludCBpOworCisgICAgZm9y IChpID0gMDsgaSA8IGhlYXBzX3VzZWQ7IGkrKykgeworICAgICAgICBSVkFMVUUgKnAsICpwZW5k OworCisgICAgICAgIGlmIChoZWFwc1tpXS5saWZldGltZSA9PSBsaWZldGltZV9sb25nbGlmZSkg eworICAgICAgICAgICAgcCA9IGhlYXBzW2ldLnNsb3Q7IHBlbmQgPSBwICsgaGVhcHNbaV0ubGlt aXQ7CisgICAgICAgICAgICBmb3IgKDtwIDwgcGVuZDsgcCsrKSB7CisgICAgICAgICAgICAgICAg aWYgKHAtPmFzLmJhc2ljLmZsYWdzICYgRkxfTUFSSykgeworICAgICAgICAgICAgICAgICAgICBS QkFTSUMocCktPmZsYWdzICY9IH5GTF9NQVJLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogc3RhdGljIGludAogZ2FyYmFnZV9jb2xsZWN0 KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQogewpAQCAtMjAxOSw2ICsyMjI1LDEzIEBAIGdhcmJh Z2VfY29sbGVjdChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKIAogICAgIGluaXRfbWFya19zdGFj ayhvYmpzcGFjZSk7CiAKKyAgICBpZiAob2Jqc3BhY2UtPmZsYWdzLmxvbmdsaWZlX2NvbGxlY3Rp b24pIHsKKyAgICAgICAgY2xlYXJfbWFya19sb25nbGlmZV9oZWFwcyhvYmpzcGFjZSk7CisgICAg fQorICAgIGVsc2UgeworICAgICAgICByYl9nY19tYXJrX3JlbWVtYmVyZWRfc2V0KG9ianNwYWNl KTsKKyAgICB9CisKICAgICB0aC0+dm0tPnNlbGYgPyByYl9nY19tYXJrKHRoLT52bS0+c2VsZikg OiByYl92bV9tYXJrKHRoLT52bSk7CiAKICAgICBpZiAoZmluYWxpemVyX3RhYmxlKSB7CkBAIC0y MDU3LDYgKzIyNzAsOSBAQCBnYXJiYWdlX2NvbGxlY3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2Up CiAgICAgR0NfUFJPRl9NQVJLX1RJTUVSX1NUT1A7CiAKICAgICBHQ19QUk9GX1NXRUVQX1RJTUVS X1NUQVJUOworICAgIGlmIChvYmpzcGFjZS0+ZmxhZ3MubG9uZ2xpZmVfY29sbGVjdGlvbikgewor ICAgICAgICBnY19zd2VlcF9mb3JfbG9uZ2xpZmUob2Jqc3BhY2UpOworICAgIH0KICAgICBnY19z d2VlcChvYmpzcGFjZSk7CiAgICAgR0NfUFJPRl9TV0VFUF9USU1FUl9TVE9QOwogCkBAIC0yMTA2 LDYgKzIzMjIsMTAgQEAgcmJfZ2NfbWFya19tYWNoaW5lX3N0YWNrKHJiX3RocmVhZF90ICp0aCkK IFZBTFVFCiByYl9nY19zdGFydCh2b2lkKQogeworICAgIHJiX29ianNwYWNlX3QgKm9ianNwYWNl ID0gJnJiX29ianNwYWNlOworICAgIGlmIChvYmpzcGFjZS0+aGVhcC5sb25nbGlmZV91c2VkKSB7 CisgICAgICAgIG9ianNwYWNlLT5mbGFncy5sb25nbGlmZV9jb2xsZWN0aW9uID0gUXRydWU7Cisg ICAgfQogICAgIHJiX2djKCk7CiAgICAgcmV0dXJuIFFuaWw7CiB9CkBAIC0yNzcxLDExICsyOTkx LDEzIEBAIGdjX3Byb2ZpbGVfcmVjb3JkX2dldCh2b2lkKQogICAgICAgICByYl9oYXNoX2FzZXQo cHJvZiwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9UT1RBTF9TSVpFIikpLCByYl91aW50MmludW0o b2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2ldLmhlYXBfdG90YWxfc2l6ZSkpOwogICAgICAgICBy Yl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9UT1RBTF9PQkpFQ1RTIikp LCByYl91aW50MmludW0ob2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2ldLmhlYXBfdG90YWxfb2Jq ZWN0cykpOwogI2lmIEdDX1BST0ZJTEVfTU9SRV9ERVRBSUwKKyAgICAgICAgcmJfaGFzaF9hc2V0 KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkxPTkdMSUZFX0NPTExFQ1RJT04iKSksIG9ianNwYWNl LT5wcm9maWxlLnJlY29yZFtpXS5sb25nbGlmZV9jb2xsZWN0aW9uKTsKICAgICAgICAgcmJfaGFz aF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkdDX01BUktfVElNRSIpKSwgREJMMk5VTShv YmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbaV0uZ2NfbWFya190aW1lKSk7CiAgICAgICAgIHJiX2hh c2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJHQ19TV0VFUF9USU1FIikpLCBEQkwyTlVN KG9ianNwYWNlLT5wcm9maWxlLnJlY29yZFtpXS5nY19zd2VlcF90aW1lKSk7CiAgICAgICAgIHJi X2hhc2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJBTExPQ0FURV9JTkNSRUFTRSIpKSwg cmJfdWludDJpbnVtKG9ianNwYWNlLT5wcm9maWxlLnJlY29yZFtpXS5hbGxvY2F0ZV9pbmNyZWFz ZSkpOwogICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiQUxMT0NB VEVfTElNSVQiKSksIHJiX3VpbnQyaW51bShvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbaV0uYWxs b2NhdGVfbGltaXQpKTsKICAgICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRl cm4oIkhFQVBfVVNFX1NMT1RTIikpLCByYl91aW50MmludW0ob2Jqc3BhY2UtPnByb2ZpbGUucmVj b3JkW2ldLmhlYXBfdXNlX3Nsb3RzKSk7CisgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJT WU0ocmJfaW50ZXJuKCJIRUFQX0xPTkdMSUZFX1VTRV9TTE9UUyIpKSwgcmJfdWludDJpbnVtKG9i anNwYWNlLT5wcm9maWxlLnJlY29yZFtpXS5oZWFwX2xvbmdsaWZlX3VzZV9zbG90cykpOwogICAg ICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9MSVZFX09CSkVD VFMiKSksIHJiX3VpbnQyaW51bShvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbaV0uaGVhcF9saXZl X29iamVjdHMpKTsKICAgICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4o IkhFQVBfRlJFRV9PQkpFQ1RTIikpLCByYl91aW50MmludW0ob2Jqc3BhY2UtPnByb2ZpbGUucmVj b3JkW2ldLmhlYXBfZnJlZV9vYmplY3RzKSk7CiAgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJ RDJTWU0ocmJfaW50ZXJuKCJIQVZFX0ZJTkFMSVpFIikpLCBvYmpzcGFjZS0+cHJvZmlsZS5yZWNv cmRbaV0uaGF2ZV9maW5hbGl6ZSk7CkBAIC0yODE3LDIxICszMDM5LDI1IEBAIGdjX3Byb2ZpbGVf cmVzdWx0KHZvaWQpCiAJCQlOVU0ySU5UKHJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50ZXJu KCJIRUFQX1VTRV9TSVpFIikpKSksCiAJCQlOVU0ySU5UKHJiX2hhc2hfYXJlZihyLCBJRDJTWU0o cmJfaW50ZXJuKCJIRUFQX1RPVEFMX1NJWkUiKSkpKSwKIAkJCU5VTTJJTlQocmJfaGFzaF9hcmVm KHIsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfVE9UQUxfT0JKRUNUUyIpKSkpLAotCQkJTlVNMkRC TChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiR0NfVElNRSIpKSkpKjEwMDApOwor CQkJTlVNMkRCTChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiR0NfVElNRSIpKSkp KjEwMDAKKyAgICAgICAgICAgICAgICApOwogCX0KICNpZiBHQ19QUk9GSUxFX01PUkVfREVUQUlM CiAJcmJfc3RyX2NhdDIocmVzdWx0LCAiXG5cbiIpOwogCXJiX3N0cl9jYXQyKHJlc3VsdCwgIk1v cmUgZGV0YWlsLlxuIik7Ci0JcmJfc3RyX2NhdDIocmVzdWx0LCAiSW5kZXggQWxsb2NhdGUgSW5j cmVhc2UgICAgQWxsb2NhdGUgTGltaXQgIFVzZSBTbG90ICBIYXZlIEZpbmFsaXplICAgICAgICAg ICAgIE1hcmsgVGltZShtcykgICAgICAgICAgICBTd2VlcCBUaW1lKG1zKVxuIik7CisJcmJfc3Ry X2NhdDIocmVzdWx0LCAiSW5kZXggQWxsb2NhdGUgSW5jcmVhc2UgICAgQWxsb2NhdGUgTGltaXQg IFVzZSBTbG90ICBMb25nbGlmZSBTbG90ICBIYXZlIEZpbmFsaXplICBDb2xsZWN0aW9uICAgICAg ICAgICAgIE1hcmsgVGltZShtcykgICAgICAgICAgICBTd2VlcCBUaW1lKG1zKVxuIik7CiAJZm9y IChpID0gMDsgaSA8IChpbnQpUkFSUkFZX0xFTihyZWNvcmQpOyBpKyspIHsKIAkgICAgVkFMVUUg ciA9IFJBUlJBWV9QVFIocmVjb3JkKVtpXTsKLQkgICAgcmJfc3RyX2NhdGYocmVzdWx0LCAiJTVk ICUxN2QgJTE3ZCAlOWQgJTE0cyAlMjUuMjBmICUyNS4yMGZcbiIsCisJICAgIHJiX3N0cl9jYXRm KHJlc3VsdCwgIiU1ZCAlMTdkICUxN2QgJTlkICUxNGQgJTE0cyAlMTFzICUyNS4yMGYgJTI1LjIw ZlxuIiwKIAkJCWkrMSwgTlVNMklOVChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigi QUxMT0NBVEVfSU5DUkVBU0UiKSkpKSwKIAkJCU5VTTJJTlQocmJfaGFzaF9hcmVmKHIsIElEMlNZ TShyYl9pbnRlcm4oIkFMTE9DQVRFX0xJTUlUIikpKSksCiAJCQlOVU0ySU5UKHJiX2hhc2hfYXJl ZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJIRUFQX1VTRV9TTE9UUyIpKSkpLAorCQkJTlVNMklOVChy Yl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9MT05HTElGRV9VU0VfU0xPVFMi KSkpKSwKIAkJCXJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJIQVZFX0ZJTkFMSVpF IikpKT8gInRydWUiIDogImZhbHNlIiwKKwkJCXJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50 ZXJuKCJMT05HTElGRV9DT0xMRUNUSU9OIikpKT8gImxvbmdsaWZlIiA6ICJub3JtYWwiLAogCQkJ TlVNMkRCTChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiR0NfTUFSS19USU1FIikp KSkqMTAwMCwKLQkJCU5VTTJEQkwocmJfaGFzaF9hcmVmKHIsIElEMlNZTShyYl9pbnRlcm4oIkdD X1NXRUVQX1RJTUUiKSkpKSoxMDAwKTsKKwkJCU5VTTJEQkwocmJfaGFzaF9hcmVmKHIsIElEMlNZ TShyYl9pbnRlcm4oIkdDX1NXRUVQX1RJTUUiKSkpKSoxMDAwCisgICAgICAgICAgICAgICAgKTsK IAl9CiAjZW5kaWYKICAgICB9CkBAIC0yODY2LDcgKzMwOTIsNiBAQCBnY19wcm9maWxlX3JlcG9y dChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIHNlbGYpCiAgICAgcmV0dXJuIFFuaWw7CiB9 CiAKLQogLyoKICAqICBUaGUgPGNvZGU+R0M8L2NvZGU+IG1vZHVsZSBwcm92aWRlcyBhbiBpbnRl cmZhY2UgdG8gUnVieSdzIG1hcmsgYW5kCiAgKiAgc3dlZXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG1l Y2hhbmlzbS4gU29tZSBvZiB0aGUgdW5kZXJseWluZyBtZXRob2RzCmRpZmYgLS1naXQgYS9pZC5o IGIvaWQuaAppbmRleCA5N2ZhYWY0Li5hOGM0YzNhIDEwMDY0NAotLS0gYS9pZC5oCisrKyBiL2lk LmgKQEAgLTMsNyArMyw3IEBACiAKICAgaWQuaCAtCiAKLSAgJEF1dGhvcjogbm9idSAkCisgICRB dXRob3IkCiAgIGNyZWF0ZWQgYXQ6IFN1biBPY3QgMTkgMjE6MTI6NTEgMjAwOAogCiAgIENvcHly aWdodCAoQykgMjAwNyBLb2ljaGkgU2FzYWRhCmRpZmYgLS1naXQgYS9pbmNsdWRlL3J1YnkvaW50 ZXJuLmggYi9pbmNsdWRlL3J1YnkvaW50ZXJuLmgKaW5kZXggN2NlNzM5NS4uNjBhZWRjNCAxMDA2 NDQKLS0tIGEvaW5jbHVkZS9ydWJ5L2ludGVybi5oCisrKyBiL2luY2x1ZGUvcnVieS9pbnRlcm4u aApAQCAtMzYyLDYgKzM2Miw3IEBAIHZvaWQgcmJfZ2NfbWFya19tYXliZShWQUxVRSk7CiB2b2lk IHJiX2djX21hcmsoVkFMVUUpOwogdm9pZCByYl9nY19mb3JjZV9yZWN5Y2xlKFZBTFVFKTsKIHZv aWQgcmJfZ2Modm9pZCk7CitWQUxVRSByYl9nY193cml0ZV9iYXJyaWVyKFZBTFVFKTsKIHZvaWQg cmJfZ2NfY29weV9maW5hbGl6ZXIoVkFMVUUsVkFMVUUpOwogdm9pZCByYl9nY19maW5hbGl6ZV9k ZWZlcnJlZCh2b2lkKTsKIHZvaWQgcmJfZ2NfY2FsbF9maW5hbGl6ZXJfYXRfZXhpdCh2b2lkKTsK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvcnVieS9ydWJ5LmggYi9pbmNsdWRlL3J1YnkvcnVieS5oCmlu ZGV4IGI4ODczNzguLjY4NDM2YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcnVieS9ydWJ5LmgKKysr IGIvaW5jbHVkZS9ydWJ5L3J1YnkuaApAQCAtODA0LDcgKzgwNCw3IEBAIHN0cnVjdCBSQmlnbnVt IHsKIAogI2RlZmluZSBGTF9TSU5HTEVUT04gRkxfVVNFUjAKICNkZWZpbmUgRkxfTUFSSyAgICAg ICgoKFZBTFVFKTEpPDw1KQotI2RlZmluZSBGTF9SRVNFUlZFRCAgKCgoVkFMVUUpMSk8PDYpIC8q IHdpbGwgYmUgdXNlZCBpbiB0aGUgZnV0dXJlIEdDICovCisjZGVmaW5lIEZMX1JFTUVNQkVSRURf U0VUICAoKChWQUxVRSkxKTw8NikKICNkZWZpbmUgRkxfRklOQUxJWkUgICgoKFZBTFVFKTEpPDw3 KQogI2RlZmluZSBGTF9UQUlOVCAgICAgKCgoVkFMVUUpMSk8PDgpCiAjZGVmaW5lIEZMX1VOVFJV U1RFRCAoKChWQUxVRSkxKTw8OSkKZGlmZiAtLWdpdCBhL2luc25zLmRlZiBiL2luc25zLmRlZgpp bmRleCAyZmZkMGVhLi41ZWFhZDUyIDEwMDY0NAotLS0gYS9pbnNucy5kZWYKKysrIGIvaW5zbnMu ZGVmCkBAIC0xMjIxLDcgKzEyMjEsNyBAQCBzZXRpbmxpbmVjYWNoZQogewogICAgIElDIGljID0g R0VUX0NPTlNUX0lOTElORV9DQUNIRShkc3QpOwogCi0gICAgaWMtPmljX3ZhbHVlID0gdmFsOwor ICAgIGljLT5pY192YWx1ZSA9IHJiX2djX3dyaXRlX2JhcnJpZXIodmFsKTsKICAgICBpYy0+aWNf dm1zdGF0ID0gR0VUX1ZNX1NUQVRFX1ZFUlNJT04oKSAtIHJ1Ynlfdm1fY29uc3RfbWlzc2luZ19j b3VudDsKICAgICBydWJ5X3ZtX2NvbnN0X21pc3NpbmdfY291bnQgPSAwOwogfQpkaWZmIC0tZ2l0 IGEvaXNlcS5jIGIvaXNlcS5jCmluZGV4IDI4YzFhMzkuLmViOTZjYjUgMTAwNjQ0Ci0tLSBhL2lz ZXEuYworKysgYi9pc2VxLmMKQEAgLTExMywxMiArMTEzLDEyIEBAIHNldF9yZWxhdGlvbihyYl9p c2VxX3QgKmlzZXEsIGNvbnN0IFZBTFVFIHBhcmVudCkKICAgICAvKiBzZXQgY2xhc3MgbmVzdCBz dGFjayAqLwogICAgIGlmICh0eXBlID09IElTRVFfVFlQRV9UT1ApIHsKIAkvKiB0b3BsZXZlbCBp cyBwcml2YXRlICovCi0JaXNlcS0+Y3JlZl9zdGFjayA9IE5FV19CTE9DSyh0aC0+dG9wX3dyYXBw ZXIgPyB0aC0+dG9wX3dyYXBwZXIgOiByYl9jT2JqZWN0KTsKKwlpc2VxLT5jcmVmX3N0YWNrID0g TkVXX05PREVfTE9OR0xJRkUoTk9ERV9CTE9DSywgdGgtPnRvcF93cmFwcGVyID8gdGgtPnRvcF93 cmFwcGVyIDogcmJfY09iamVjdCwgMCwgMCk7CiAJaXNlcS0+Y3JlZl9zdGFjay0+bmRfZmlsZSA9 IDA7CiAJaXNlcS0+Y3JlZl9zdGFjay0+bmRfdmlzaSA9IE5PRVhfUFJJVkFURTsKICAgICB9CiAg ICAgZWxzZSBpZiAodHlwZSA9PSBJU0VRX1RZUEVfTUVUSE9EIHx8IHR5cGUgPT0gSVNFUV9UWVBF X0NMQVNTKSB7Ci0JaXNlcS0+Y3JlZl9zdGFjayA9IE5FV19CTE9DSygwKTsgLyogcGxhY2UgaG9s ZGVyICovCisJaXNlcS0+Y3JlZl9zdGFjayA9IE5FV19OT0RFX0xPTkdMSUZFKE5PREVfQkxPQ0ss MCwwLDApOyAvKiBwbGFjZSBob2xkZXIgKi8KIAlpc2VxLT5jcmVmX3N0YWNrLT5uZF9maWxlID0g MDsKICAgICB9CiAgICAgZWxzZSBpZiAoUlRFU1QocGFyZW50KSkgewpkaWZmIC0tZ2l0IGEvbm9k ZS5oIGIvbm9kZS5oCmluZGV4IDM1OGJiY2EuLjhjMzBmMWMgMTAwNjQ0Ci0tLSBhL25vZGUuaAor KysgYi9ub2RlLmgKQEAgLTM1NCw2ICszNTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBSTm9kZSB7CiAj ZGVmaW5lIG5kX3Zpc2kgIHUyLmFyZ2MKIAogI2RlZmluZSBORVdfTk9ERSh0LGEwLGExLGEyKSBy Yl9ub2RlX25ld25vZGUoKHQpLChWQUxVRSkoYTApLChWQUxVRSkoYTEpLChWQUxVRSkoYTIpKQor I2RlZmluZSBORVdfTk9ERV9MT05HTElGRSh0LGEwLGExLGEyKSByYl9ub2RlX25ld25vZGVfbG9u Z2xpZmUoKHQpLChWQUxVRSkoYTApLChWQUxVRSkoYTEpLChWQUxVRSkoYTIpKQogCiAjZGVmaW5l IE5FV19NRVRIT0Qobix4LHYpIE5FV19OT0RFKE5PREVfTUVUSE9ELHgsbix2KQogI2RlZmluZSBO RVdfRkJPRFkobixpKSBORVdfTk9ERShOT0RFX0ZCT0RZLGksbiwwKQpAQCAtNDk3LDYgKzQ5OCw3 IEBAIE5PREUgKnJiX2NvbXBpbGVfZmlsZShjb25zdCBjaGFyKiwgVkFMVUUsIGludCk7CiAKIHZv aWQgcmJfYWRkX21ldGhvZChWQUxVRSwgSUQsIE5PREUgKiwgaW50KTsKIE5PREUgKnJiX25vZGVf bmV3bm9kZShlbnVtIG5vZGVfdHlwZSxWQUxVRSxWQUxVRSxWQUxVRSk7CitOT0RFICpyYl9ub2Rl X25ld25vZGVfbG9uZ2xpZmUoZW51bSBub2RlX3R5cGUsVkFMVUUsVkFMVUUsVkFMVUUpOwogCiBO T0RFKiByYl9tZXRob2Rfbm9kZShWQUxVRSBrbGFzcywgSUQgaWQpOwogaW50IHJiX25vZGVfYXJp dHkoTk9ERSogbm9kZSk7CmRpZmYgLS1naXQgYS92bS5jIGIvdm0uYwppbmRleCBhNTQ5ZjAyLi5k YzdiMDg4IDEwMDY0NAotLS0gYS92bS5jCisrKyBiL3ZtLmMKQEAgLTE3MDIsNyArMTcwMiw3IEBA IHZtX2RlZmluZV9tZXRob2QocmJfdGhyZWFkX3QgKnRoLCBWQUxVRSBvYmosIElEIGlkLCBWQUxV RSBpc2VxdmFsLAogICAgIENPUFlfQ1JFRihtaXNlcS0+Y3JlZl9zdGFjaywgY3JlZik7CiAgICAg bWlzZXEtPmtsYXNzID0ga2xhc3M7CiAgICAgbWlzZXEtPmRlZmluZWRfbWV0aG9kX2lkID0gaWQ7 Ci0gICAgbmV3Ym9keSA9IE5FV19OT0RFKFJVQllfVk1fTUVUSE9EX05PREUsIDAsIG1pc2VxLT5z ZWxmLCAwKTsKKyAgICBuZXdib2R5ID0gTkVXX05PREVfTE9OR0xJRkUoUlVCWV9WTV9NRVRIT0Rf Tk9ERSwgMCwgcmJfZ2Nfd3JpdGVfYmFycmllcihtaXNlcS0+c2VsZiksIDApOwogICAgIHJiX2Fk ZF9tZXRob2Qoa2xhc3MsIGlkLCBuZXdib2R5LCBub2V4KTsKIAogICAgIGlmICghaXNfc2luZ2xl dG9uICYmIG5vZXggPT0gTk9FWF9NT0RGVU5DKSB7CmRpZmYgLS1naXQgYS92bV9jb3JlLmggYi92 bV9jb3JlLmgKaW5kZXggNjhmODNmZi4uNWI1NmU1ZSAxMDA2NDQKLS0tIGEvdm1fY29yZS5oCisr KyBiL3ZtX2NvcmUuaApAQCAtNTIzLDcgKzUyMyw3IEBAIHR5cGVkZWYgc3RydWN0IHsKIAogCiAv KiBpbmxpbmUgKG1ldGhvZHxjb25zdCkgY2FjaGUgKi8KLSNkZWZpbmUgTkVXX0lOTElORV9DQUNI RV9FTlRSWSgpIE5FV19XSElMRShRdW5kZWYsIDAsIDApCisjZGVmaW5lIE5FV19JTkxJTkVfQ0FD SEVfRU5UUlkoKSBORVdfTk9ERV9MT05HTElGRShOT0RFX1dISUxFLCBRdW5kZWYsIDAsIDApCiAj ZGVmaW5lIGljX2NsYXNzICB1MS52YWx1ZQogI2RlZmluZSBpY19tZXRob2QgdTIubm9kZQogI2Rl ZmluZSBpY192YWx1ZSAgdTIudmFsdWUKZGlmZiAtLWdpdCBhL3ZtX2luc25oZWxwZXIuYyBiL3Zt X2luc25oZWxwZXIuYwppbmRleCA3YjRmZDM3Li45ZTkxNTNjIDEwMDY0NAotLS0gYS92bV9pbnNu aGVscGVyLmMKKysrIGIvdm1faW5zbmhlbHBlci5jCkBAIC0xMTYwLDggKzExNjAsOCBAQCB2bV9t ZXRob2Rfc2VhcmNoKFZBTFVFIGlkLCBWQUxVRSBrbGFzcywgSUMgaWMpCiAJfQogCWVsc2Ugewog CSAgICBtbiA9IHJiX21ldGhvZF9ub2RlKGtsYXNzLCBpZCk7Ci0JICAgIGljLT5pY19jbGFzcyA9 IGtsYXNzOwotCSAgICBpYy0+aWNfbWV0aG9kID0gbW47CisJICAgIGljLT5pY19jbGFzcyA9IHJi X2djX3dyaXRlX2JhcnJpZXIoa2xhc3MpOworCSAgICBpYy0+aWNfbWV0aG9kID0gKE5PREUgKily Yl9nY193cml0ZV9iYXJyaWVyKChWQUxVRSltbik7CiAJICAgIGljLT5pY192bXN0YXQgPSBHRVRf Vk1fU1RBVEVfVkVSU0lPTigpOwogCX0KICAgICB9CmRpZmYgLS1naXQgYS92bV9tZXRob2QuYyBi L3ZtX21ldGhvZC5jCmluZGV4IDc3NGZhMWUuLjQ1OTY1MmIgMTAwNjQ0Ci0tLSBhL3ZtX21ldGhv ZC5jCisrKyBiL3ZtX21ldGhvZC5jCkBAIC0xNDAsOSArMTQwLDEyIEBAIHJiX2FkZF9tZXRob2Qo VkFMVUUga2xhc3MsIElEIG1pZCwgTk9ERSAqIG5vZGUsIGludCBub2V4KQogICAgICAqICAgbmRf Y250ICA6IGFsaWFzIGNvdW50ICAgICAgICAgICAvLyAoMykKICAgICAgKi8KICAgICBpZiAobm9k ZSkgewotCU5PREUgKm1ldGhvZCA9IE5FV19NRVRIT0Qobm9kZSwga2xhc3MsIE5PRVhfV0lUSF9T QUZFKG5vZXgpKTsKKyAgICAgICAgTk9ERSAqbWV0aG9kID0gTkVXX05PREVfTE9OR0xJRkUoTk9E RV9NRVRIT0QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX2dj X3dyaXRlX2JhcnJpZXIoa2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByYl9nY193cml0ZV9iYXJyaWVyKChWQUxVRSlub2RlKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9FWF9XSVRIX1NBRkUobm9leCkpOwogCW1ldGhv ZC0+bmRfZmlsZSA9ICh2b2lkICopbWlkOwotCWJvZHkgPSBORVdfRkJPRFkobWV0aG9kLCBtaWQp OworCWJvZHkgPSBORVdfTk9ERV9MT05HTElGRShOT0RFX0ZCT0RZLCBtaWQsIG1ldGhvZCwgMCk7 CiAgICAgfQogICAgIGVsc2UgewogCWJvZHkgPSAwOwpAQCAtMTkzLDcgKzE5Niw4IEBAIHZvaWQK IHJiX2RlZmluZV9hbGxvY19mdW5jKFZBTFVFIGtsYXNzLCBWQUxVRSAoKmZ1bmMpKFZBTFVFKSkK IHsKICAgICBDaGVja19UeXBlKGtsYXNzLCBUX0NMQVNTKTsKLSAgICByYl9hZGRfbWV0aG9kKHJi X3NpbmdsZXRvbl9jbGFzcyhrbGFzcyksIElEX0FMTE9DQVRPUiwgTkVXX0NGVU5DKGZ1bmMsIDAp LAorICAgIHJiX2FkZF9tZXRob2QocmJfc2luZ2xldG9uX2NsYXNzKGtsYXNzKSwgSURfQUxMT0NB VE9SLAorICAgICAgICAgICAgICAgICAgTkVXX05PREVfTE9OR0xJRkUoTk9ERV9DRlVOQywgZnVu YywgMCwgMCksCiAJCSAgTk9FWF9QUklWQVRFKTsKIH0KIApAQCAtNzY0LDEwICs3NjgsMTQgQEAg cmJfYWxpYXMoVkFMVUUga2xhc3MsIElEIG5hbWUsIElEIGRlZikKICAgICB9CiAKICAgICBzdF9p bnNlcnQoUkNMQVNTX01fVEJMKGtsYXNzKSwgbmFtZSwKLQkgICAgICAoc3RfZGF0YV90KSBORVdf RkJPRFkoCi0JCSAgbWV0aG9kID0gTkVXX01FVEhPRChvcmlnX2Zib2R5LT5uZF9ib2R5LT5uZF9i b2R5LAotCQkJICAgICBvcmlnX2Zib2R5LT5uZF9ib2R5LT5uZF9jbHNzLAotCQkJICAgICBOT0VY X1dJVEhfU0FGRShvcmlnX2Zib2R5LT5uZF9ib2R5LT5uZF9ub2V4KSksIGRlZikpOworCSAgICAg IChzdF9kYXRhX3QpIE5FV19OT0RFX0xPTkdMSUZFKAorICAgICAgICAgICAgICAgICAgTk9ERV9G Qk9EWSwKKyAgICAgICAgICAgICAgICAgIGRlZiwKKyAgICAgICAgICAgICAgICAgIG1ldGhvZCA9 IE5FV19OT0RFX0xPTkdMSUZFKE5PREVfTUVUSE9ELAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmJfZ2Nfd3JpdGVfYmFycmllcigoVkFMVUUpb3JpZ19mYm9k eS0+bmRfYm9keS0+bmRfY2xzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByYl9nY193cml0ZV9iYXJyaWVyKChWQUxVRSlvcmlnX2Zib2R5LT5uZF9ib2R5 LT5uZF9ib2R5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5PRVhfV0lUSF9TQUZFKG9yaWdfZmJvZHktPm5kX2JvZHktPm5kX25vZXgpKSwKKyAgICAgICAg ICAgICAgICAgIDApKTsKICAgICBtZXRob2QtPm5kX2ZpbGUgPSAodm9pZCAqKWRlZjsKIAogICAg IHJiX2NsZWFyX2NhY2hlX2J5X2lkKG5hbWUpOwo= --001636457d9e47a9ba04699067b3 Content-Type: text/x-patch; charset=US-ASCII; name="gc_partial_longlife_r23386.patch" Content-Disposition: attachment; filename="gc_partial_longlife_r23386.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fujv62m31 ZGlmZiAtLWdpdCBhL2NsYXNzLmMgYi9jbGFzcy5jCmluZGV4IDJhNWRjNjEuLjM4NjE4OGQgMTAw NjQ0Ci0tLSBhL2NsYXNzLmMKKysrIGIvY2xhc3MuYwpAQCAtODgsMTEgKzg4LDEzIEBAIGNsb25l X21ldGhvZChJRCBtaWQsIE5PREUgKmJvZHksIHN0cnVjdCBjbG9uZV9tZXRob2RfZGF0YSAqZGF0 YSkKIAl9CiAJc3RfaW5zZXJ0KGRhdGEtPnRibCwgbWlkLAogCQkgIChzdF9kYXRhX3QpCi0JCSAg TkVXX0ZCT0RZKAotCQkgICAgICBORVdfTUVUSE9EKGZib2R5LAotCQkJCSBkYXRhLT5rbGFzcywg LyogVE9ETyAqLwotCQkJCSBib2R5LT5uZF9ib2R5LT5uZF9ub2V4KSwKLQkJICAgICAgMCkpOwor ICAgICAgICAgICAgICAgICAgTkVXX05PREVfTE9OR0xJRkUoCisgICAgICAgICAgICAgICAgICAg ICAgTk9ERV9GQk9EWSwKKyAgICAgICAgICAgICAgICAgICAgICAwLAorCQkgICAgICBORVdfTk9E RV9MT05HTElGRShOT0RFX01FVEhPRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByYl9nY193cml0ZV9iYXJyaWVyKGRhdGEtPmtsYXNzKSwgLyogVE9ETyAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJiX2djX3dyaXRlX2JhcnJpZXIo ZmJvZHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHktPm5k X2JvZHktPm5kX25vZXgpLCAwKSk7CiAgICAgfQogICAgIHJldHVybiBTVF9DT05USU5VRTsKIH0K QEAgLTgxMCw3ICs4MTIsNyBAQCByYl9kZWZpbmVfbWV0aG9kX2lkKFZBTFVFIGtsYXNzLCBJRCBu YW1lLCBWQUxVRSAoKmZ1bmMpKEFOWUFSR1MpLCBpbnQgYXJnYykKICAgICBpZiAoZnVuYyA9PSBy Yl9mX25vdGltcGxlbWVudCkKICAgICAgICAgcmJfZGVmaW5lX25vdGltcGxlbWVudF9tZXRob2Rf aWQoa2xhc3MsIG5hbWUsIE5PRVhfUFVCTElDKTsKICAgICBlbHNlCi0gICAgICAgIHJiX2FkZF9t ZXRob2Qoa2xhc3MsIG5hbWUsIE5FV19DRlVOQyhmdW5jLGFyZ2MpLCBOT0VYX1BVQkxJQyk7Cisg ICAgICAgIHJiX2FkZF9tZXRob2Qoa2xhc3MsIG5hbWUsIE5FV19OT0RFX0xPTkdMSUZFKE5PREVf Q0ZVTkMsIGZ1bmMsIGFyZ2MsIDApLCBOT0VYX1BVQkxJQyk7CiB9CiAKIHZvaWQKQEAgLTgyNiw3 ICs4MjgsNyBAQCByYl9kZWZpbmVfcHJvdGVjdGVkX21ldGhvZChWQUxVRSBrbGFzcywgY29uc3Qg Y2hhciAqbmFtZSwgVkFMVUUgKCpmdW5jKShBTllBUkdTKQogICAgIGlmIChmdW5jID09IHJiX2Zf bm90aW1wbGVtZW50KQogICAgICAgICByYl9kZWZpbmVfbm90aW1wbGVtZW50X21ldGhvZF9pZChr bGFzcywgaWQsIE5PRVhfUFJPVEVDVEVEKTsKICAgICBlbHNlCi0gICAgICAgIHJiX2FkZF9tZXRo b2Qoa2xhc3MsIGlkLCBORVdfQ0ZVTkMoZnVuYywgYXJnYyksIE5PRVhfUFJPVEVDVEVEKTsKKyAg ICAgICAgcmJfYWRkX21ldGhvZChrbGFzcywgaWQsIE5FV19OT0RFX0xPTkdMSUZFKE5PREVfQ0ZV TkMsIGZ1bmMsIGFyZ2MsIDApLCBOT0VYX1BST1RFQ1RFRCk7CiB9CiAKIHZvaWQKQEAgLTgzNiw3 ICs4MzgsNyBAQCByYl9kZWZpbmVfcHJpdmF0ZV9tZXRob2QoVkFMVUUga2xhc3MsIGNvbnN0IGNo YXIgKm5hbWUsIFZBTFVFICgqZnVuYykoQU5ZQVJHUyksCiAgICAgaWYgKGZ1bmMgPT0gcmJfZl9u b3RpbXBsZW1lbnQpCiAgICAgICAgIHJiX2RlZmluZV9ub3RpbXBsZW1lbnRfbWV0aG9kX2lkKGts YXNzLCBpZCwgTk9FWF9QUklWQVRFKTsKICAgICBlbHNlCi0gICAgICAgIHJiX2FkZF9tZXRob2Qo a2xhc3MsIGlkLCBORVdfQ0ZVTkMoZnVuYywgYXJnYyksIE5PRVhfUFJJVkFURSk7CisgICAgICAg IHJiX2FkZF9tZXRob2Qoa2xhc3MsIGlkLCBORVdfTk9ERV9MT05HTElGRShOT0RFX0NGVU5DLCBm dW5jLCBhcmdjLCAwKSwgTk9FWF9QUklWQVRFKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZGVi dWcuYyBiL2RlYnVnLmMKaW5kZXggM2I0Yjc2ZS4uYjVmMjgwNSAxMDA2NDQKLS0tIGEvZGVidWcu YworKysgYi9kZWJ1Zy5jCkBAIC0zMiw3ICszMiw3IEBAIHN0YXRpYyBjb25zdCB1bmlvbiB7CiAg ICAgICAgIFJVQllfRU5DX0NPREVSQU5HRV9WQUxJRCAgID0gRU5DX0NPREVSQU5HRV9WQUxJRCwK ICAgICAgICAgUlVCWV9FTkNfQ09ERVJBTkdFX0JST0tFTiAgPSBFTkNfQ09ERVJBTkdFX0JST0tF TiwKICAgICAgICAgUlVCWV9GTF9NQVJLICAgICAgICA9IEZMX01BUkssCi0gICAgICAgIFJVQllf RkxfUkVTRVJWRUQgICAgPSBGTF9SRVNFUlZFRCwKKyAgICAgICAgUlVCWV9GTF9SRU1FTkJFUkVE X1NFVCAgICAgPSBGTF9SRU1FTUJFUkVEX1NFVCwKICAgICAgICAgUlVCWV9GTF9GSU5BTElaRSAg ICA9IEZMX0ZJTkFMSVpFLAogICAgICAgICBSVUJZX0ZMX1RBSU5UICAgICAgID0gRkxfVEFJTlQs CiAgICAgICAgIFJVQllfRkxfVU5UUlVTVEVEICAgPSBGTF9VTlRSVVNURUQsCmRpZmYgLS1naXQg YS9nYy5jIGIvZ2MuYwppbmRleCA4YTQwNzVhLi40MzRkYmQ0IDEwMDY0NAotLS0gYS9nYy5jCisr KyBiL2djLmMKQEAgLTkzLDEzICs5MywxOCBAQCB0eXBlZGVmIHN0cnVjdCBnY19wcm9maWxlX3Jl Y29yZCB7CiAgICAgZG91YmxlIGdjX21hcmtfdGltZTsKICAgICBkb3VibGUgZ2Nfc3dlZXBfdGlt ZTsKICAgICBkb3VibGUgZ2NfaW52b2tlX3RpbWU7CisKICAgICBzaXplX3QgaGVhcF91c2Vfc2xv dHM7CisgICAgc2l6ZV90IGhlYXBfbG9uZ2xpZmVfdXNlX3Nsb3RzOwogICAgIHNpemVfdCBoZWFw X2xpdmVfb2JqZWN0czsKICAgICBzaXplX3QgaGVhcF9mcmVlX29iamVjdHM7CiAgICAgc2l6ZV90 IGhlYXBfdG90YWxfb2JqZWN0czsKICAgICBzaXplX3QgaGVhcF91c2Vfc2l6ZTsKICAgICBzaXpl X3QgaGVhcF90b3RhbF9zaXplOworCiAgICAgaW50IGhhdmVfZmluYWxpemU7CisgICAgaW50IGxv bmdsaWZlX2NvbGxlY3Rpb247CisKICAgICBzaXplX3QgYWxsb2NhdGVfaW5jcmVhc2U7CiAgICAg c2l6ZV90IGFsbG9jYXRlX2xpbWl0OwogfSBnY19wcm9maWxlX3JlY29yZDsKQEAgLTE1Niw2ICsx NjEsNyBAQCBnZXRydXNhZ2VfdGltZSh2b2lkKQogCSAgICBNRU1aRVJPKCZvYmpzcGFjZS0+cHJv ZmlsZS5yZWNvcmRbY291bnRdLCBnY19wcm9maWxlX3JlY29yZCwgMSk7XAogCSAgICBnY190aW1l ID0gZ2V0cnVzYWdlX3RpbWUoKTtcCiAJICAgIG9ianNwYWNlLT5wcm9maWxlLnJlY29yZFtjb3Vu dF0uZ2NfaW52b2tlX3RpbWUgPSBnY190aW1lIC0gb2Jqc3BhY2UtPnByb2ZpbGUuaW52b2tlX3Rp bWU7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbY291bnRdLmxvbmdsaWZlX2NvbGxl Y3Rpb24gPSBvYmpzcGFjZS0+ZmxhZ3MubG9uZ2xpZmVfY29sbGVjdGlvbjtcCiAJfVwKICAgICB9 IHdoaWxlKDApCiAKQEAgLTIxMCwxNSArMjE2LDE1IEBAIGdldHJ1c2FnZV90aW1lKHZvaWQpCiAJ aWYgKG9ianNwYWNlLT5wcm9maWxlLnJ1bikge1wKIAkgICAgc2l6ZV90IGNvdW50ID0gb2Jqc3Bh Y2UtPnByb2ZpbGUuY291bnQ7XAogCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbY291bnRd LmhlYXBfdXNlX3Nsb3RzID0gaGVhcHNfdXNlZDtcCi0JICAgIG9ianNwYWNlLT5wcm9maWxlLnJl Y29yZFtjb3VudF0uaGVhcF9saXZlX29iamVjdHMgPSBsaXZlO1wKLQkgICAgb2Jqc3BhY2UtPnBy b2ZpbGUucmVjb3JkW2NvdW50XS5oZWFwX2ZyZWVfb2JqZWN0cyA9IGZyZWVkO1wKKwkgICAgb2Jq c3BhY2UtPnByb2ZpbGUucmVjb3JkW2NvdW50XS5oZWFwX2xvbmdsaWZlX3VzZV9zbG90cyA9IG9i anNwYWNlLT5oZWFwLmxvbmdsaWZlX3VzZWQ7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNv cmRbY291bnRdLmhlYXBfbGl2ZV9vYmplY3RzID0gbGl2ZSArIG9ianNwYWNlLT5wcm9maWxlLmxv bmdsaWZlX29iamVjdHM7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbY291bnRdLmhl YXBfZnJlZV9vYmplY3RzID0gZnJlZWQgKyAob2Jqc3BhY2UtPmhlYXAubG9uZ2xpZmVfdXNlZCAq IEhFQVBfT0JKX0xJTUlUIC0gb2Jqc3BhY2UtPnByb2ZpbGUubG9uZ2xpZmVfb2JqZWN0cyk7IFwK IAkgICAgb2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2NvdW50XS5oZWFwX3RvdGFsX29iamVjdHMg PSBoZWFwc191c2VkICogSEVBUF9PQkpfTElNSVQ7XAogCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5y ZWNvcmRbY291bnRdLmhhdmVfZmluYWxpemUgPSBmaW5hbF9saXN0ID8gUXRydWUgOiBRZmFsc2U7 XAotCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbY291bnRdLmhlYXBfdXNlX3NpemUgPSBs aXZlICogc2l6ZW9mKFJWQUxVRSk7XAorCSAgICBvYmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbY291 bnRdLmhlYXBfdXNlX3NpemUgPSAobGl2ZSArIG9ianNwYWNlLT5wcm9maWxlLmxvbmdsaWZlX29i amVjdHMpICogc2l6ZW9mKFJWQUxVRSk7IFwKIAkgICAgb2Jqc3BhY2UtPnByb2ZpbGUucmVjb3Jk W2NvdW50XS5oZWFwX3RvdGFsX3NpemUgPSBoZWFwc191c2VkICogKEhFQVBfT0JKX0xJTUlUICog c2l6ZW9mKFJWQUxVRSkpO1wKIAl9XAogICAgIH0gd2hpbGUoMCkKLQogI2Vsc2UKICNkZWZpbmUg SU5JVF9HQ19QUk9GX1BBUkFNUyBkb3VibGUgZ2NfdGltZSA9IDA7XAogICAgIHNpemVfdCBjb3Vu dCA9IG9ianNwYWNlLT5wcm9maWxlLmNvdW50CkBAIC0yMzEsNyArMjM3LDcgQEAgZ2V0cnVzYWdl X3RpbWUodm9pZCkKIAlpZiAob2Jqc3BhY2UtPnByb2ZpbGUucnVuKSB7XAogCSAgICBzaXplX3Qg Y291bnQgPSBvYmpzcGFjZS0+cHJvZmlsZS5jb3VudDtcCiAJICAgIG9ianNwYWNlLT5wcm9maWxl LnJlY29yZFtjb3VudF0uaGVhcF90b3RhbF9vYmplY3RzID0gaGVhcHNfdXNlZCAqIEhFQVBfT0JK X0xJTUlUO1wKLQkgICAgb2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2NvdW50XS5oZWFwX3VzZV9z aXplID0gbGl2ZSAqIHNpemVvZihSVkFMVUUpO1wKKwkgICAgb2Jqc3BhY2UtPnByb2ZpbGUucmVj b3JkW2NvdW50XS5oZWFwX3VzZV9zaXplID0gKGxpdmUgKyBvYmpzcGFjZS0+cHJvZmlsZS5sb25n bGlmZV9vYmplY3RzKSAqIHNpemVvZihSVkFMVUUpOyBcCiAJICAgIG9ianNwYWNlLT5wcm9maWxl LnJlY29yZFtjb3VudF0uaGVhcF90b3RhbF9zaXplID0gaGVhcHNfdXNlZCAqIEhFQVBfU0laRTtc CiAJfVwKICAgICB9IHdoaWxlKDApCkBAIC0yNzUsMTAgKzI4MSwxNiBAQCB0eXBlZGVmIHN0cnVj dCBSVkFMVUUgewogI3ByYWdtYSBwYWNrKHBvcCkKICNlbmRpZgogCitlbnVtIGxpZmV0aW1lIHsK KyAgICBsaWZldGltZV9ub3JtYWwsCisgICAgbGlmZXRpbWVfbG9uZ2xpZmUKK307CisKIHN0cnVj dCBoZWFwc19zbG90IHsKICAgICB2b2lkICptZW1iYXNlOwogICAgIFJWQUxVRSAqc2xvdDsKICAg ICBpbnQgbGltaXQ7CisgICAgZW51bSBsaWZldGltZSBsaWZldGltZTsKIH07CiAKICNkZWZpbmUg SEVBUF9NSU5fU0xPVFMgMTAwMDAKQEAgLTI5MSw2ICszMDMsMTEgQEAgc3RydWN0IGdjX2xpc3Qg ewogCiAjZGVmaW5lIENBTENfRVhBQ1RfTUFMTE9DX1NJWkUgMAogCit0eXBlZGVmIHN0cnVjdCBy ZW1lbWJlcmVkX3NldCB7CisgICAgUlZBTFVFICpvYmo7CisgICAgc3RydWN0IHJlbWVtYmVyZWRf c2V0ICpuZXh0OworfSByZW1lbWJlcmVkX3NldF90OworCiB0eXBlZGVmIHN0cnVjdCByYl9vYmpz cGFjZSB7CiAgICAgc3RydWN0IHsKIAlzaXplX3QgbGltaXQ7CkBAIC0zMDUsMTMgKzMyMiwyMCBA QCB0eXBlZGVmIHN0cnVjdCByYl9vYmpzcGFjZSB7CiAJc3RydWN0IGhlYXBzX3Nsb3QgKnB0cjsK IAlzaXplX3QgbGVuZ3RoOwogCXNpemVfdCB1c2VkOworCXNpemVfdCBsb25nbGlmZV91c2VkOwog CVJWQUxVRSAqZnJlZWxpc3Q7CisJUlZBTFVFICpsb25nbGlmZV9mcmVlbGlzdDsKIAlSVkFMVUUg KnJhbmdlWzJdOwogCVJWQUxVRSAqZnJlZWQ7CiAgICAgfSBoZWFwOwogICAgIHN0cnVjdCB7Cisg ICAgICAgIHJlbWVtYmVyZWRfc2V0X3QgKnB0cjsKKyAgICAgICAgcmVtZW1iZXJlZF9zZXRfdCAq ZnJlZWQ7CisgICAgfSByZW1lbWJlcmVkX3NldDsKKyAgICBzdHJ1Y3QgewogCWludCBkb250X2dj OwogCWludCBkdXJpbmdfZ2M7CisgICAgICAgIGludCBsb25nbGlmZV9jb2xsZWN0aW9uOwogICAg IH0gZmxhZ3M7CiAgICAgc3RydWN0IHsKIAlzdF90YWJsZSAqdGFibGU7CkBAIC0zMjcsNiArMzUx LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcmJfb2Jqc3BhY2UgewogCWdjX3Byb2ZpbGVfcmVjb3JkICpy ZWNvcmQ7CiAJc2l6ZV90IGNvdW50OwogCXNpemVfdCBzaXplOworCXNpemVfdCBsb25nbGlmZV9v YmplY3RzOwogCWRvdWJsZSBpbnZva2VfdGltZTsKICAgICB9IHByb2ZpbGU7CiAgICAgc3RydWN0 IGdjX2xpc3QgKmdsb2JhbF9saXN0OwpAQCAtMzk1LDYgKzQyMCw3IEBAIHJiX29ianNwYWNlX2Fs bG9jKHZvaWQpCiAvKiNkZWZpbmUgSEVBUF9TSVpFIDB4ODAwICovCiAKICNkZWZpbmUgSEVBUF9P QkpfTElNSVQgKEhFQVBfU0laRSAvIHNpemVvZihzdHJ1Y3QgUlZBTFVFKSkKKyNkZWZpbmUgTk9S TUFMX0hFQVBTX1VTRUQgKG9ianNwYWNlLT5oZWFwLnVzZWQgLSBvYmpzcGFjZS0+aGVhcC5sb25n bGlmZV91c2VkKQogCiBleHRlcm4gVkFMVUUgcmJfY011dGV4OwogZXh0ZXJuIHN0X3RhYmxlICpy Yl9jbGFzc190Ymw7CkBAIC04NTgsNyArODg0LDcgQEAgYWxsb2NhdGVfaGVhcHMocmJfb2Jqc3Bh Y2VfdCAqb2Jqc3BhY2UsIHNpemVfdCBuZXh0X2hlYXBzX2xlbmd0aCkKIH0KIAogc3RhdGljIHZv aWQKLWFzc2lnbl9oZWFwX3Nsb3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCithc3NpZ25faGVh cF9zbG90KHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCBSVkFMVUUgKipsaXN0LCBlbnVtIGxpZmV0 aW1lIGxpZmV0aW1lKQogewogICAgIFJWQUxVRSAqcCwgKnBlbmQsICptZW1iYXNlOwogICAgIHNp emVfdCBoaSwgbG8sIG1pZDsKQEAgLTkwMiwxNSArOTI4LDE3IEBAIGFzc2lnbl9oZWFwX3Nsb3Qo cmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAgICAgaGVhcHNbaGldLm1lbWJhc2UgPSBtZW1iYXNl OwogICAgIGhlYXBzW2hpXS5zbG90ID0gcDsKICAgICBoZWFwc1toaV0ubGltaXQgPSBvYmpzOwor ICAgIGhlYXBzW2hpXS5saWZldGltZSA9IGxpZmV0aW1lOwogICAgIHBlbmQgPSBwICsgb2JqczsK ICAgICBpZiAobG9tZW0gPT0gMCB8fCBsb21lbSA+IHApIGxvbWVtID0gcDsKICAgICBpZiAoaGlt ZW0gPCBwZW5kKSBoaW1lbSA9IHBlbmQ7CisgICAgaWYgKGxpZmV0aW1lID09IGxpZmV0aW1lX2xv bmdsaWZlKSBvYmpzcGFjZS0+aGVhcC5sb25nbGlmZV91c2VkKys7CiAgICAgaGVhcHNfdXNlZCsr OwogCiAgICAgd2hpbGUgKHAgPCBwZW5kKSB7CiAJcC0+YXMuZnJlZS5mbGFncyA9IDA7Ci0JcC0+ YXMuZnJlZS5uZXh0ID0gZnJlZWxpc3Q7Ci0JZnJlZWxpc3QgPSBwOworCXAtPmFzLmZyZWUubmV4 dCA9ICpsaXN0OworCSpsaXN0ID0gcDsKIAlwKys7CiAgICAgfQogfQpAQCAtOTI3LDExICs5NTUs MTEgQEAgaW5pdF9oZWFwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQogICAgIH0KIAogICAgIGlm ICgoaGVhcHNfdXNlZCArIGFkZCkgPiBoZWFwc19sZW5ndGgpIHsKLSAgICAJYWxsb2NhdGVfaGVh cHMob2Jqc3BhY2UsIGhlYXBzX3VzZWQgKyBhZGQpOworICAgICAgICBhbGxvY2F0ZV9oZWFwcyhv YmpzcGFjZSwgaGVhcHNfdXNlZCArIGFkZCk7CiAgICAgfQogCiAgICAgZm9yIChpID0gMDsgaSA8 IGFkZDsgaSsrKSB7Ci0gICAgCWFzc2lnbl9oZWFwX3Nsb3Qob2Jqc3BhY2UpOworICAgICAgICBh c3NpZ25faGVhcF9zbG90KG9ianNwYWNlLCAmZnJlZWxpc3QsIGxpZmV0aW1lX25vcm1hbCk7CiAg ICAgfQogICAgIGhlYXBzX2luYyA9IDA7CiAgICAgb2Jqc3BhY2UtPnByb2ZpbGUuaW52b2tlX3Rp bWUgPSBnZXRydXNhZ2VfdGltZSgpOwpAQCAtOTU4LDE2ICs5ODYsNDUgQEAgc3RhdGljIGludAog aGVhcHNfaW5jcmVtZW50KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQogewogICAgIGlmIChoZWFw c19pbmMgPiAwKSB7Ci0JYXNzaWduX2hlYXBfc2xvdChvYmpzcGFjZSk7CisgICAgICAgIGFzc2ln bl9oZWFwX3Nsb3Qob2Jqc3BhY2UsICZmcmVlbGlzdCwgbGlmZXRpbWVfbm9ybWFsKTsKIAloZWFw c19pbmMtLTsKIAlyZXR1cm4gUXRydWU7CiAgICAgfQogICAgIHJldHVybiBRZmFsc2U7CiB9CiAK KyNkZWZpbmUgTE9OR0xJRkVfQUxMT0NBVEVfSEVBUFNfTUlOIDEwCisKK3N0YXRpYyB2b2lkCith ZGRfbG9uZ2xpZmVfaGVhcHNfc2xvdChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKK3sKKyAgICBp ZiAoKGhlYXBzX3VzZWQgKyBoZWFwc19pbmMpID49IGhlYXBzX2xlbmd0aCkgeworICAgICAgICBh bGxvY2F0ZV9oZWFwcyhvYmpzcGFjZSwgKGhlYXBzX2xlbmd0aCArIExPTkdMSUZFX0FMTE9DQVRF X0hFQVBTX01JTikpOworICAgIH0KKyAgICBhc3NpZ25faGVhcF9zbG90KG9ianNwYWNlLCAmb2Jq c3BhY2UtPmhlYXAubG9uZ2xpZmVfZnJlZWxpc3QsIGxpZmV0aW1lX2xvbmdsaWZlKTsKK30KKwog I2RlZmluZSBSQU5ZKG8pICgoUlZBTFVFKikobykpCiAKIHN0YXRpYyBWQUxVRQorcmJfbmV3b2Jq X2Zyb21fbG9uZ2xpZmVfaGVhcChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKK3sKKyAgICBWQUxV RSBvYmo7CisgICAgaWYgKCFvYmpzcGFjZS0+aGVhcC5sb25nbGlmZV9mcmVlbGlzdCkgeworICAg ICAgICBhZGRfbG9uZ2xpZmVfaGVhcHNfc2xvdChvYmpzcGFjZSk7CisgICAgfQorCisgICAgb2Jq ID0gKFZBTFVFKW9ianNwYWNlLT5oZWFwLmxvbmdsaWZlX2ZyZWVsaXN0OworICAgIG9ianNwYWNl LT5oZWFwLmxvbmdsaWZlX2ZyZWVsaXN0ID0gb2Jqc3BhY2UtPmhlYXAubG9uZ2xpZmVfZnJlZWxp c3QtPmFzLmZyZWUubmV4dDsKKworICAgIE1FTVpFUk8oKHZvaWQqKW9iaiwgUlZBTFVFLCAxKTsK KyAgICBGTF9TRVQoUkFOWShvYmopLCBGTF9NQVJLKTsKKyAgICBvYmpzcGFjZS0+cHJvZmlsZS5s b25nbGlmZV9vYmplY3RzKys7CisKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgVkFMVUUK IHJiX25ld29ial9mcm9tX2hlYXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiB7CiAgICAgVkFM VUUgb2JqOwpAQCAtMTA2MCw2ICsxMTE3LDIyIEBAIHJiX25ld29iaih2b2lkKQogI2VuZGlmCiB9 CiAKK1ZBTFVFCityYl9uZXdvYmpfbG9uZ2xpZmUodm9pZCkKK3sKKyNpZiBkZWZpbmVkKEVOQUJM RV9WTV9PQkpTUEFDRSkgJiYgRU5BQkxFX1ZNX09CSlNQQUNFCisgICAgcmJfb2Jqc3BhY2VfdCAq b2Jqc3BhY2UgPSB0aC0+dm0tPm9ianNwYWNlOworI2Vsc2UKKyAgICByYl9vYmpzcGFjZV90ICpv YmpzcGFjZSA9ICZyYl9vYmpzcGFjZTsKKyNlbmRpZgorICAgIGlmIChkdXJpbmdfZ2MpIHsKKwlk b250X2djID0gMTsKKwlkdXJpbmdfZ2MgPSAwOworCXJiX2J1Zygib2JqZWN0IGFsbG9jYXRpb24g ZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBwaGFzZSIpOworICAgIH0KKyAgICByZXR1cm4gcmJf bmV3b2JqX2Zyb21fbG9uZ2xpZmVfaGVhcChvYmpzcGFjZSk7Cit9CisKIE5PREUqCiByYl9ub2Rl X25ld25vZGUoZW51bSBub2RlX3R5cGUgdHlwZSwgVkFMVUUgYTAsIFZBTFVFIGExLCBWQUxVRSBh MikKIHsKQEAgLTEwNzUsNiArMTE0OCwyMSBAQCByYl9ub2RlX25ld25vZGUoZW51bSBub2RlX3R5 cGUgdHlwZSwgVkFMVUUgYTAsIFZBTFVFIGExLCBWQUxVRSBhMikKICAgICByZXR1cm4gbjsKIH0K IAorTk9ERSoKK3JiX25vZGVfbmV3bm9kZV9sb25nbGlmZShlbnVtIG5vZGVfdHlwZSB0eXBlLCBW QUxVRSBhMCwgVkFMVUUgYTEsIFZBTFVFIGEyKQoreworICAgIE5PREUgKm4gPSAoTk9ERSopcmJf bmV3b2JqX2xvbmdsaWZlKCk7CisKKyAgICBuLT5mbGFncyB8PSBUX05PREU7CisgICAgbmRfc2V0 X3R5cGUobiwgdHlwZSk7CisKKyAgICBuLT51MS52YWx1ZSA9IGEwOworICAgIG4tPnUyLnZhbHVl ID0gYTE7CisgICAgbi0+dTMudmFsdWUgPSBhMjsKKworICAgIHJldHVybiBuOworfQorCiBWQUxV RQogcmJfZGF0YV9vYmplY3RfYWxsb2MoVkFMVUUga2xhc3MsIHZvaWQgKmRhdGFwLCBSVUJZX0RB VEFfRlVOQyBkbWFyaywgUlVCWV9EQVRBX0ZVTkMgZGZyZWUpCiB7CkBAIC0xMjMxLDYgKzEzMTks MzAgQEAgaXNfcG9pbnRlcl90b19oZWFwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCB2b2lkICpw dHIpCiAgICAgcmV0dXJuIFFmYWxzZTsKIH0KIAorVkFMVUUKK3JiX2djX3dyaXRlX2JhcnJpZXIo VkFMVUUgcHRyKQoreworICAgIHJiX29ianNwYWNlX3QgKm9ianNwYWNlID0gJnJiX29ianNwYWNl OworICAgIHJlbWVtYmVyZWRfc2V0X3QgKnRtcDsKKyAgICBSVkFMVUUgKm9iaiA9IFJBTlkocHRy KTsKKworICAgIGlmICghU1BFQ0lBTF9DT05TVF9QKHB0cikgJiYKKyAgICAgICAgIShSQkFTSUMo cHRyKS0+ZmxhZ3MgJiBGTF9NQVJLIHx8IFJCQVNJQyhwdHIpLT5mbGFncyAmIEZMX1JFTUVNQkVS RURfU0VUKSkgeworICAgICAgICBpZiAob2Jqc3BhY2UtPnJlbWVtYmVyZWRfc2V0LmZyZWVkKSB7 CisgICAgICAgICAgICB0bXAgPSBvYmpzcGFjZS0+cmVtZW1iZXJlZF9zZXQuZnJlZWQ7CisgICAg ICAgICAgICBvYmpzcGFjZS0+cmVtZW1iZXJlZF9zZXQuZnJlZWQgPSBvYmpzcGFjZS0+cmVtZW1i ZXJlZF9zZXQuZnJlZWQtPm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICB0bXAgPSBBTExPQyhyZW1lbWJlcmVkX3NldF90KTsKKyAgICAgICAgfQorICAgICAgICB0 bXAtPm5leHQgPSBvYmpzcGFjZS0+cmVtZW1iZXJlZF9zZXQucHRyOworICAgICAgICB0bXAtPm9i aiA9IG9iajsKKyAgICAgICAgb2JqLT5hcy5iYXNpYy5mbGFncyB8PSBGTF9SRU1FTUJFUkVEX1NF VDsKKyAgICAgICAgb2Jqc3BhY2UtPnJlbWVtYmVyZWRfc2V0LnB0ciA9IHRtcDsKKyAgICB9Cisg ICAgcmV0dXJuIHB0cjsKK30KKwogc3RhdGljIHZvaWQKIG1hcmtfbG9jYXRpb25zX2FycmF5KHJi X29ianNwYWNlX3QgKm9ianNwYWNlLCByZWdpc3RlciBWQUxVRSAqeCwgcmVnaXN0ZXIgbG9uZyBu KQogewpAQCAtMTY1NCwxMiArMTc2NiwxMiBAQCBnY19tYXJrX2NoaWxkcmVuKHJiX29ianNwYWNl X3QgKm9ianNwYWNlLCBWQUxVRSBwdHIsIGludCBsZXYpCiBzdGF0aWMgaW50IG9ial9mcmVlKHJi X29ianNwYWNlX3QgKiwgVkFMVUUpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWFkZF9mcmVlbGlz dChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSwgUlZBTFVFICpwKQorYWRkX2ZyZWVsaXN0KHJiX29i anNwYWNlX3QgKm9ianNwYWNlLCBSVkFMVUUgKipsaXN0LCBSVkFMVUUgKnApCiB7CiAgICAgVkFM R1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEKCh2b2lkKilwLCBzaXplb2YoUlZBTFVFKSk7CiAgICAg cC0+YXMuZnJlZS5mbGFncyA9IDA7Ci0gICAgcC0+YXMuZnJlZS5uZXh0ID0gZnJlZWxpc3Q7Ci0g ICAgZnJlZWxpc3QgPSBwOworICAgIHAtPmFzLmZyZWUubmV4dCA9ICpsaXN0OworICAgICpsaXN0 ID0gcDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE2NjksNyArMTc4MSw3IEBAIGZpbmFsaXplX2xp c3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIFJWQUxVRSAqcCkKIAlSVkFMVUUgKnRtcCA9IHAt PmFzLmZyZWUubmV4dDsKIAlydW5fZmluYWwob2Jqc3BhY2UsIChWQUxVRSlwKTsKIAlpZiAoIUZM X1RFU1QocCwgRkxfU0lOR0xFVE9OKSkgeyAvKiBub3QgZnJlZWluZyBwYWdlICovCi0JICAgIGFk ZF9mcmVlbGlzdChvYmpzcGFjZSwgcCk7CisJICAgIGFkZF9mcmVlbGlzdChvYmpzcGFjZSwgJmZy ZWVsaXN0LCBwKTsKIAl9CiAJZWxzZSB7CiAJICAgIHN0cnVjdCBoZWFwc19zbG90ICpzbG90ID0g KHN0cnVjdCBoZWFwc19zbG90ICopUkRBVEEocCktPmRtYXJrOwpAQCAtMTY5Myw2ICsxODA1LDkg QEAgZnJlZV91bnVzZWRfaGVhcHMocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAJICAgIGVsc2Ug ewogCQlmcmVlKGhlYXBzW2ldLm1lbWJhc2UpOwogCSAgICB9CisgICAgICAgICAgICBpZiAoaGVh cHNbaV0ubGlmZXRpbWUgPT0gbGlmZXRpbWVfbG9uZ2xpZmUpIHsKKyAgICAgICAgICAgICAgICBv YmpzcGFjZS0+aGVhcC5sb25nbGlmZV91c2VkLS07CisgICAgICAgICAgICB9CiAJICAgIGhlYXBz X3VzZWQtLTsKIAl9CiAJZWxzZSB7CkBAIC0xNzM4LDYgKzE4NTMsNyBAQCBnY19zd2VlcChyYl9v YmpzcGFjZV90ICpvYmpzcGFjZSkKIAlSVkFMVUUgKmZpbmFsID0gZmluYWxfbGlzdDsKIAlpbnQg ZGVmZXJyZWQ7CiAKKyAgICAgICAgaWYgKGhlYXBzW2ldLmxpZmV0aW1lID09IGxpZmV0aW1lX2xv bmdsaWZlKSBjb250aW51ZTsKIAlwID0gaGVhcHNbaV0uc2xvdDsgcGVuZCA9IHAgKyBoZWFwc1tp XS5saW1pdDsKIAl3aGlsZSAocCA8IHBlbmQpIHsKIAkgICAgaWYgKCEocC0+YXMuYmFzaWMuZmxh Z3MgJiBGTF9NQVJLKSkgewpAQCAtMTc1NCw3ICsxODcwLDcgQEAgZ2Nfc3dlZXAocmJfb2Jqc3Bh Y2VfdCAqb2Jqc3BhY2UpCiAJCSAgICBmaW5hbF9udW0rKzsKIAkJfQogCQllbHNlIHsKLQkJICAg IGFkZF9mcmVlbGlzdChvYmpzcGFjZSwgcCk7CisJCSAgICBhZGRfZnJlZWxpc3Qob2Jqc3BhY2Us ICZmcmVlbGlzdCwgcCk7CiAJCSAgICBmcmVlX251bSsrOwogCQl9CiAJICAgIH0KQEAgLTE3OTAs OCArMTkwNiwxMCBAQCBnY19zd2VlcChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKICAgICB9CiAg ICAgbWFsbG9jX2luY3JlYXNlID0gMDsKICAgICBpZiAoZnJlZWQgPCBmcmVlX21pbikgewotICAg IAlzZXRfaGVhcHNfaW5jcmVtZW50KG9ianNwYWNlKTsKLQloZWFwc19pbmNyZW1lbnQob2Jqc3Bh Y2UpOworICAgICAgICBpZiAoIWhlYXBzX2luYyAmJiBvYmpzcGFjZS0+aGVhcC5sb25nbGlmZV91 c2VkKQorICAgICAgICAgICAgb2Jqc3BhY2UtPmZsYWdzLmxvbmdsaWZlX2NvbGxlY3Rpb24gPSBR dHJ1ZTsKKyAgICAgICAgc2V0X2hlYXBzX2luY3JlbWVudChvYmpzcGFjZSk7CisgICAgICAgIGhl YXBzX2luY3JlbWVudChvYmpzcGFjZSk7CiAgICAgfQogICAgIGR1cmluZ19nYyA9IDA7CiAKQEAg LTE4MDcsMTEgKzE5MjUsNjcgQEAgZ2Nfc3dlZXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAg ICAgfQogfQogCitzdGF0aWMgdm9pZAorcmVtZW1iZXJlZF9zZXRfcmVjeWNsZShyYl9vYmpzcGFj ZV90ICpvYmpzcGFjZSkKK3sKKyAgICByZW1lbWJlcmVkX3NldF90ICp0b3AgPSAwLCAqcmVtLCAq bmV4dDsKKworICAgIHJlbSA9IG9ianNwYWNlLT5yZW1lbWJlcmVkX3NldC5wdHI7CisgICAgd2hp bGUgKHJlbSkgeworICAgICAgICBuZXh0ID0gcmVtLT5uZXh0OworICAgICAgICBpZiAoUkJBU0lD KHJlbS0+b2JqKS0+ZmxhZ3MgJiBGTF9NQVJLKSB7CisgICAgICAgICAgICB0b3AgPSByZW07Cisg ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAodG9wKSB7CisgICAgICAg ICAgICAgICAgdG9wLT5uZXh0ID0gbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs c2UgeworICAgICAgICAgICAgICAgIG9ianNwYWNlLT5yZW1lbWJlcmVkX3NldC5wdHIgPSBuZXh0 OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVtLT5vYmogPSAwOworICAgICAgICAgICAg cmVtLT5uZXh0ID0gb2Jqc3BhY2UtPnJlbWVtYmVyZWRfc2V0LmZyZWVkOworICAgICAgICAgICAg b2Jqc3BhY2UtPnJlbWVtYmVyZWRfc2V0LmZyZWVkID0gcmVtOworICAgICAgICB9CisgICAgICAg IHJlbSA9IG5leHQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZ2Nfc3dlZXBfZm9yX2xvbmds aWZlKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQoreworICAgIFJWQUxVRSAqcCwgKnBlbmQ7Cisg ICAgc2l6ZV90IGksIGZyZWVkID0gMDsKKworICAgIG9ianNwYWNlLT5oZWFwLmxvbmdsaWZlX2Zy ZWVsaXN0ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaGVhcHNfdXNlZDsgaSsrKSB7CisKKyAg ICAgICAgaWYgKGhlYXBzW2ldLmxpZmV0aW1lID09IGxpZmV0aW1lX25vcm1hbCkgY29udGludWU7 CisJcCA9IGhlYXBzW2ldLnNsb3Q7IHBlbmQgPSBwICsgaGVhcHNbaV0ubGltaXQ7CisJd2hpbGUg KHAgPCBwZW5kKSB7CisJICAgIGlmICghKHAtPmFzLmJhc2ljLmZsYWdzICYgRkxfTUFSSykpIHsK KyAgICAgICAgICAgICAgICBpZiAocC0+YXMuYmFzaWMuZmxhZ3MpIHsKKyAgICAgICAgICAgICAg ICAgICAgb2JqX2ZyZWUob2Jqc3BhY2UsIChWQUxVRSlwKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgYWRkX2ZyZWVsaXN0KG9ianNwYWNlLCAmb2Jqc3BhY2UtPmhlYXAubG9u Z2xpZmVfZnJlZWxpc3QsIHApOworICAgICAgICAgICAgICAgIGZyZWVkKys7CisJICAgIH0KKwkg ICAgcCsrOworCX0KKyAgICB9CisKKyAgICByZW1lbWJlcmVkX3NldF9yZWN5Y2xlKG9ianNwYWNl KTsKKyAgICBvYmpzcGFjZS0+ZmxhZ3MubG9uZ2xpZmVfY29sbGVjdGlvbiA9IFFmYWxzZTsKKyAg ICBvYmpzcGFjZS0+cHJvZmlsZS5sb25nbGlmZV9vYmplY3RzID0gb2Jqc3BhY2UtPnByb2ZpbGUu bG9uZ2xpZmVfb2JqZWN0cyAtIGZyZWVkOworfQorCiB2b2lkCiByYl9nY19mb3JjZV9yZWN5Y2xl KFZBTFVFIHApCiB7CiAgICAgcmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UgPSAmcmJfb2Jqc3BhY2U7 Ci0gICAgYWRkX2ZyZWVsaXN0KG9ianNwYWNlLCAoUlZBTFVFICopcCk7CisgICAgaWYgKCEoUkJB U0lDKHApLT5mbGFncyAmIEZMX01BUksgfHwgUkJBU0lDKHApLT5mbGFncyAmIEZMX1JFTUVNQkVS RURfU0VUKSkgeworICAgICAgICBhZGRfZnJlZWxpc3Qob2Jqc3BhY2UsICZmcmVlbGlzdCwgKFJW QUxVRSAqKXApOworICAgIH0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0xOTk3LDYgKzIx NzEsMzcgQEAgbWFya19jdXJyZW50X21hY2hpbmVfY29udGV4dChyYl9vYmpzcGFjZV90ICpvYmpz cGFjZSwgcmJfdGhyZWFkX3QgKnRoKQogCiB2b2lkIHJiX2djX21hcmtfZW5jb2RpbmdzKHZvaWQp OwogCitzdGF0aWMgdm9pZAorcmJfZ2NfbWFya19yZW1lbWJlcmVkX3NldChyYl9vYmpzcGFjZV90 ICpvYmpzcGFjZSkKK3sKKyAgICByZW1lbWJlcmVkX3NldF90ICpyZW07CisKKyAgICByZW0gPSBv YmpzcGFjZS0+cmVtZW1iZXJlZF9zZXQucHRyOworICAgIHdoaWxlIChyZW0pIHsKKyAgICAgICAg cmJfZ2NfbWFyaygoVkFMVUUpcmVtLT5vYmopOworICAgICAgICByZW0gPSByZW0tPm5leHQ7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZAorY2xlYXJfbWFya19sb25nbGlmZV9oZWFwcyhyYl9vYmpz cGFjZV90ICpvYmpzcGFjZSkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBo ZWFwc191c2VkOyBpKyspIHsKKyAgICAgICAgUlZBTFVFICpwLCAqcGVuZDsKKworICAgICAgICBp ZiAoaGVhcHNbaV0ubGlmZXRpbWUgPT0gbGlmZXRpbWVfbG9uZ2xpZmUpIHsKKyAgICAgICAgICAg IHAgPSBoZWFwc1tpXS5zbG90OyBwZW5kID0gcCArIGhlYXBzW2ldLmxpbWl0OworICAgICAgICAg ICAgZm9yICg7cCA8IHBlbmQ7IHArKykgeworICAgICAgICAgICAgICAgIGlmIChwLT5hcy5iYXNp Yy5mbGFncyAmIEZMX01BUkspIHsKKyAgICAgICAgICAgICAgICAgICAgUkJBU0lDKHApLT5mbGFn cyAmPSB+RkxfTUFSSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9Cit9CisKIHN0YXRpYyBpbnQKIGdhcmJhZ2VfY29sbGVjdChyYl9vYmpzcGFjZV90 ICpvYmpzcGFjZSkKIHsKQEAgLTIwMjgsNiArMjIzMywxMyBAQCBnYXJiYWdlX2NvbGxlY3QocmJf b2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiAKICAgICBpbml0X21hcmtfc3RhY2sob2Jqc3BhY2UpOwog CisgICAgaWYgKG9ianNwYWNlLT5mbGFncy5sb25nbGlmZV9jb2xsZWN0aW9uKSB7CisgICAgICAg IGNsZWFyX21hcmtfbG9uZ2xpZmVfaGVhcHMob2Jqc3BhY2UpOworICAgIH0KKyAgICBlbHNlIHsK KyAgICAgICAgcmJfZ2NfbWFya19yZW1lbWJlcmVkX3NldChvYmpzcGFjZSk7CisgICAgfQorCiAg ICAgdGgtPnZtLT5zZWxmID8gcmJfZ2NfbWFyayh0aC0+dm0tPnNlbGYpIDogcmJfdm1fbWFyayh0 aC0+dm0pOwogCiAgICAgaWYgKGZpbmFsaXplcl90YWJsZSkgewpAQCAtMjA2Niw2ICsyMjc4LDkg QEAgZ2FyYmFnZV9jb2xsZWN0KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQogICAgIEdDX1BST0Zf TUFSS19USU1FUl9TVE9QOwogCiAgICAgR0NfUFJPRl9TV0VFUF9USU1FUl9TVEFSVDsKKyAgICBp ZiAob2Jqc3BhY2UtPmZsYWdzLmxvbmdsaWZlX2NvbGxlY3Rpb24pIHsKKyAgICAgICAgZ2Nfc3dl ZXBfZm9yX2xvbmdsaWZlKG9ianNwYWNlKTsKKyAgICB9CiAgICAgZ2Nfc3dlZXAob2Jqc3BhY2Up OwogICAgIEdDX1BST0ZfU1dFRVBfVElNRVJfU1RPUDsKIApAQCAtMjExNSw2ICsyMzMwLDEwIEBA IHJiX2djX21hcmtfbWFjaGluZV9zdGFjayhyYl90aHJlYWRfdCAqdGgpCiBWQUxVRQogcmJfZ2Nf c3RhcnQodm9pZCkKIHsKKyAgICByYl9vYmpzcGFjZV90ICpvYmpzcGFjZSA9ICZyYl9vYmpzcGFj ZTsKKyAgICBpZiAob2Jqc3BhY2UtPmhlYXAubG9uZ2xpZmVfdXNlZCkgeworICAgICAgICBvYmpz cGFjZS0+ZmxhZ3MubG9uZ2xpZmVfY29sbGVjdGlvbiA9IFF0cnVlOworICAgIH0KICAgICByYl9n YygpOwogICAgIHJldHVybiBRbmlsOwogfQpAQCAtMjc4MywxMSArMzAwMiwxMyBAQCBnY19wcm9m aWxlX3JlY29yZF9nZXQodm9pZCkKICAgICAgICAgcmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShy Yl9pbnRlcm4oIkhFQVBfVE9UQUxfU0laRSIpKSwgcmJfdWludDJpbnVtKG9ianNwYWNlLT5wcm9m aWxlLnJlY29yZFtpXS5oZWFwX3RvdGFsX3NpemUpKTsKICAgICAgICAgcmJfaGFzaF9hc2V0KHBy b2YsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfVE9UQUxfT0JKRUNUUyIpKSwgcmJfdWludDJpbnVt KG9ianNwYWNlLT5wcm9maWxlLnJlY29yZFtpXS5oZWFwX3RvdGFsX29iamVjdHMpKTsKICNpZiBH Q19QUk9GSUxFX01PUkVfREVUQUlMCisgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJTWU0o cmJfaW50ZXJuKCJMT05HTElGRV9DT0xMRUNUSU9OIikpLCBvYmpzcGFjZS0+cHJvZmlsZS5yZWNv cmRbaV0ubG9uZ2xpZmVfY29sbGVjdGlvbik7CiAgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJ RDJTWU0ocmJfaW50ZXJuKCJHQ19NQVJLX1RJTUUiKSksIERCTDJOVU0ob2Jqc3BhY2UtPnByb2Zp bGUucmVjb3JkW2ldLmdjX21hcmtfdGltZSkpOwogICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwg SUQyU1lNKHJiX2ludGVybigiR0NfU1dFRVBfVElNRSIpKSwgREJMMk5VTShvYmpzcGFjZS0+cHJv ZmlsZS5yZWNvcmRbaV0uZ2Nfc3dlZXBfdGltZSkpOwogICAgICAgICByYl9oYXNoX2FzZXQocHJv ZiwgSUQyU1lNKHJiX2ludGVybigiQUxMT0NBVEVfSU5DUkVBU0UiKSksIHJiX3VpbnQyaW51bShv YmpzcGFjZS0+cHJvZmlsZS5yZWNvcmRbaV0uYWxsb2NhdGVfaW5jcmVhc2UpKTsKICAgICAgICAg cmJfaGFzaF9hc2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkFMTE9DQVRFX0xJTUlUIikpLCBy Yl91aW50MmludW0ob2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2ldLmFsbG9jYXRlX2xpbWl0KSk7 CiAgICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJIRUFQX1VTRV9T TE9UUyIpKSwgcmJfdWludDJpbnVtKG9ianNwYWNlLT5wcm9maWxlLnJlY29yZFtpXS5oZWFwX3Vz ZV9zbG90cykpOworICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVybigi SEVBUF9MT05HTElGRV9VU0VfU0xPVFMiKSksIHJiX3VpbnQyaW51bShvYmpzcGFjZS0+cHJvZmls ZS5yZWNvcmRbaV0uaGVhcF9sb25nbGlmZV91c2Vfc2xvdHMpKTsKICAgICAgICAgcmJfaGFzaF9h c2V0KHByb2YsIElEMlNZTShyYl9pbnRlcm4oIkhFQVBfTElWRV9PQkpFQ1RTIikpLCByYl91aW50 MmludW0ob2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2ldLmhlYXBfbGl2ZV9vYmplY3RzKSk7CiAg ICAgICAgIHJiX2hhc2hfYXNldChwcm9mLCBJRDJTWU0ocmJfaW50ZXJuKCJIRUFQX0ZSRUVfT0JK RUNUUyIpKSwgcmJfdWludDJpbnVtKG9ianNwYWNlLT5wcm9maWxlLnJlY29yZFtpXS5oZWFwX2Zy ZWVfb2JqZWN0cykpOwogICAgICAgICByYl9oYXNoX2FzZXQocHJvZiwgSUQyU1lNKHJiX2ludGVy bigiSEFWRV9GSU5BTElaRSIpKSwgb2Jqc3BhY2UtPnByb2ZpbGUucmVjb3JkW2ldLmhhdmVfZmlu YWxpemUpOwpAQCAtMjgyOSwyMSArMzA1MCwyNSBAQCBnY19wcm9maWxlX3Jlc3VsdCh2b2lkKQog CQkJTlVNMklOVChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiSEVBUF9VU0VfU0la RSIpKSkpLAogCQkJTlVNMklOVChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiSEVB UF9UT1RBTF9TSVpFIikpKSksCiAJCQlOVU0ySU5UKHJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJf aW50ZXJuKCJIRUFQX1RPVEFMX09CSkVDVFMiKSkpKSwKLQkJCU5VTTJEQkwocmJfaGFzaF9hcmVm KHIsIElEMlNZTShyYl9pbnRlcm4oIkdDX1RJTUUiKSkpKSoxMDAwKTsKKwkJCU5VTTJEQkwocmJf aGFzaF9hcmVmKHIsIElEMlNZTShyYl9pbnRlcm4oIkdDX1RJTUUiKSkpKSoxMDAwCisgICAgICAg ICAgICAgICAgKTsKIAl9CiAjaWYgR0NfUFJPRklMRV9NT1JFX0RFVEFJTAogCXJiX3N0cl9jYXQy KHJlc3VsdCwgIlxuXG4iKTsKIAlyYl9zdHJfY2F0MihyZXN1bHQsICJNb3JlIGRldGFpbC5cbiIp OwotCXJiX3N0cl9jYXQyKHJlc3VsdCwgIkluZGV4IEFsbG9jYXRlIEluY3JlYXNlICAgIEFsbG9j YXRlIExpbWl0ICBVc2UgU2xvdCAgSGF2ZSBGaW5hbGl6ZSAgICAgICAgICAgICBNYXJrIFRpbWUo bXMpICAgICAgICAgICAgU3dlZXAgVGltZShtcylcbiIpOworCXJiX3N0cl9jYXQyKHJlc3VsdCwg IkluZGV4IEFsbG9jYXRlIEluY3JlYXNlICAgIEFsbG9jYXRlIExpbWl0ICBVc2UgU2xvdCAgTG9u Z2xpZmUgU2xvdCAgSGF2ZSBGaW5hbGl6ZSAgQ29sbGVjdGlvbiAgICAgICAgICAgICBNYXJrIFRp bWUobXMpICAgICAgICAgICAgU3dlZXAgVGltZShtcylcbiIpOwogCWZvciAoaSA9IDA7IGkgPCAo aW50KVJBUlJBWV9MRU4ocmVjb3JkKTsgaSsrKSB7CiAJICAgIFZBTFVFIHIgPSBSQVJSQVlfUFRS KHJlY29yZClbaV07Ci0JICAgIHJiX3N0cl9jYXRmKHJlc3VsdCwgIiU1ZCAlMTdkICUxN2QgJTlk ICUxNHMgJTI1LjIwZiAlMjUuMjBmXG4iLAorCSAgICByYl9zdHJfY2F0ZihyZXN1bHQsICIlNWQg JTE3ZCAlMTdkICU5ZCAlMTRkICUxNHMgJTExcyAlMjUuMjBmICUyNS4yMGZcbiIsCiAJCQlpKzEs IE5VTTJJTlQocmJfaGFzaF9hcmVmKHIsIElEMlNZTShyYl9pbnRlcm4oIkFMTE9DQVRFX0lOQ1JF QVNFIikpKSksCiAJCQlOVU0ySU5UKHJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJB TExPQ0FURV9MSU1JVCIpKSkpLAogCQkJTlVNMklOVChyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJi X2ludGVybigiSEVBUF9VU0VfU0xPVFMiKSkpKSwKKwkJCU5VTTJJTlQocmJfaGFzaF9hcmVmKHIs IElEMlNZTShyYl9pbnRlcm4oIkhFQVBfTE9OR0xJRkVfVVNFX1NMT1RTIikpKSksCiAJCQlyYl9o YXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiSEFWRV9GSU5BTElaRSIpKSk/ICJ0cnVlIiA6 ICJmYWxzZSIsCisJCQlyYl9oYXNoX2FyZWYociwgSUQyU1lNKHJiX2ludGVybigiTE9OR0xJRkVf Q09MTEVDVElPTiIpKSk/ICJsb25nbGlmZSIgOiAibm9ybWFsIiwKIAkJCU5VTTJEQkwocmJfaGFz aF9hcmVmKHIsIElEMlNZTShyYl9pbnRlcm4oIkdDX01BUktfVElNRSIpKSkpKjEwMDAsCi0JCQlO VU0yREJMKHJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJHQ19TV0VFUF9USU1FIikp KSkqMTAwMCk7CisJCQlOVU0yREJMKHJiX2hhc2hfYXJlZihyLCBJRDJTWU0ocmJfaW50ZXJuKCJH Q19TV0VFUF9USU1FIikpKSkqMTAwMAorICAgICAgICAgICAgICAgICk7CiAJfQogI2VuZGlmCiAg ICAgfQpAQCAtMjg3OCw3ICszMTAzLDYgQEAgZ2NfcHJvZmlsZV9yZXBvcnQoaW50IGFyZ2MsIFZB TFVFICphcmd2LCBWQUxVRSBzZWxmKQogICAgIHJldHVybiBRbmlsOwogfQogCi0KIC8qCiAgKiAg VGhlIDxjb2RlPkdDPC9jb2RlPiBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIFJ1Ynkn cyBtYXJrIGFuZAogICogIHN3ZWVwIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20uIFNvbWUg b2YgdGhlIHVuZGVybHlpbmcgbWV0aG9kcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ydWJ5L2ludGVy bi5oIGIvaW5jbHVkZS9ydWJ5L2ludGVybi5oCmluZGV4IDg5OWE3YjMuLmFlNDQzODUgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvcnVieS9pbnRlcm4uaAorKysgYi9pbmNsdWRlL3J1YnkvaW50ZXJuLmgK QEAgLTM2Nyw2ICszNjcsNyBAQCB2b2lkIHJiX2djX21hcmtfbWF5YmUoVkFMVUUpOwogdm9pZCBy Yl9nY19tYXJrKFZBTFVFKTsKIHZvaWQgcmJfZ2NfZm9yY2VfcmVjeWNsZShWQUxVRSk7CiB2b2lk IHJiX2djKHZvaWQpOworVkFMVUUgcmJfZ2Nfd3JpdGVfYmFycmllcihWQUxVRSk7CiB2b2lkIHJi X2djX2NvcHlfZmluYWxpemVyKFZBTFVFLFZBTFVFKTsKIHZvaWQgcmJfZ2NfZmluYWxpemVfZGVm ZXJyZWQodm9pZCk7CiB2b2lkIHJiX2djX2NhbGxfZmluYWxpemVyX2F0X2V4aXQodm9pZCk7CmRp ZmYgLS1naXQgYS9pbmNsdWRlL3J1YnkvcnVieS5oIGIvaW5jbHVkZS9ydWJ5L3J1YnkuaAppbmRl eCA3YTgzODg3Li5hMjc3YmIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3J1YnkvcnVieS5oCisrKyBi L2luY2x1ZGUvcnVieS9ydWJ5LmgKQEAgLTgwOSw3ICs4MDksNyBAQCBzdHJ1Y3QgUkJpZ251bSB7 CiAKICNkZWZpbmUgRkxfU0lOR0xFVE9OIEZMX1VTRVIwCiAjZGVmaW5lIEZMX01BUksgICAgICAo KChWQUxVRSkxKTw8NSkKLSNkZWZpbmUgRkxfUkVTRVJWRUQgICgoKFZBTFVFKTEpPDw2KSAvKiB3 aWxsIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSBHQyAqLworI2RlZmluZSBGTF9SRU1FTUJFUkVEX1NF VCAgKCgoVkFMVUUpMSk8PDYpCiAjZGVmaW5lIEZMX0ZJTkFMSVpFICAoKChWQUxVRSkxKTw8NykK ICNkZWZpbmUgRkxfVEFJTlQgICAgICgoKFZBTFVFKTEpPDw4KQogI2RlZmluZSBGTF9VTlRSVVNU RUQgKCgoVkFMVUUpMSk8PDkpCmRpZmYgLS1naXQgYS9pbnNucy5kZWYgYi9pbnNucy5kZWYKaW5k ZXggYmM5MzAxMC4uZTFlNzdjNiAxMDA2NDQKLS0tIGEvaW5zbnMuZGVmCisrKyBiL2luc25zLmRl ZgpAQCAtMTIyMiw3ICsxMjIyLDcgQEAgc2V0aW5saW5lY2FjaGUKIHsKICAgICBJQyBpYyA9IEdF VF9DT05TVF9JTkxJTkVfQ0FDSEUoZHN0KTsKIAotICAgIGljLT5pY192YWx1ZSA9IHZhbDsKKyAg ICBpYy0+aWNfdmFsdWUgPSByYl9nY193cml0ZV9iYXJyaWVyKHZhbCk7CiAgICAgaWMtPmljX3Zt c3RhdCA9IEdFVF9WTV9TVEFURV9WRVJTSU9OKCkgLSBydWJ5X3ZtX2NvbnN0X21pc3NpbmdfY291 bnQ7CiAgICAgcnVieV92bV9jb25zdF9taXNzaW5nX2NvdW50ID0gMDsKIH0KZGlmZiAtLWdpdCBh L2lzZXEuYyBiL2lzZXEuYwppbmRleCBjYzJmZmFhLi5hMTAyOTQxIDEwMDY0NAotLS0gYS9pc2Vx LmMKKysrIGIvaXNlcS5jCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCBzZXRfcmVsYXRpb24ocmJfaXNl cV90ICppc2VxLCBjb25zdCBWQUxVRSBwYXJlbnQpCiAgICAgLyogc2V0IGNsYXNzIG5lc3Qgc3Rh Y2sgKi8KICAgICBpZiAodHlwZSA9PSBJU0VRX1RZUEVfVE9QKSB7CiAJLyogdG9wbGV2ZWwgaXMg cHJpdmF0ZSAqLwotCWlzZXEtPmNyZWZfc3RhY2sgPSBORVdfQkxPQ0sodGgtPnRvcF93cmFwcGVy ID8gdGgtPnRvcF93cmFwcGVyIDogcmJfY09iamVjdCk7CisJaXNlcS0+Y3JlZl9zdGFjayA9IE5F V19OT0RFX0xPTkdMSUZFKE5PREVfQkxPQ0ssIHRoLT50b3Bfd3JhcHBlciA/IHRoLT50b3Bfd3Jh cHBlciA6IHJiX2NPYmplY3QsIDAsIDApOwogCWlzZXEtPmNyZWZfc3RhY2stPm5kX2ZpbGUgPSAw OwogCWlzZXEtPmNyZWZfc3RhY2stPm5kX3Zpc2kgPSBOT0VYX1BSSVZBVEU7CiAgICAgfQogICAg IGVsc2UgaWYgKHR5cGUgPT0gSVNFUV9UWVBFX01FVEhPRCB8fCB0eXBlID09IElTRVFfVFlQRV9D TEFTUykgewotCWlzZXEtPmNyZWZfc3RhY2sgPSBORVdfQkxPQ0soMCk7IC8qIHBsYWNlIGhvbGRl ciAqLworCWlzZXEtPmNyZWZfc3RhY2sgPSBORVdfTk9ERV9MT05HTElGRShOT0RFX0JMT0NLLDAs MCwwKTsgLyogcGxhY2UgaG9sZGVyICovCiAJaXNlcS0+Y3JlZl9zdGFjay0+bmRfZmlsZSA9IDA7 CiAgICAgfQogICAgIGVsc2UgaWYgKFJURVNUKHBhcmVudCkpIHsKZGlmZiAtLWdpdCBhL25vZGUu aCBiL25vZGUuaAppbmRleCA4ZGUyMDgyLi5jNmEwZmJiIDEwMDY0NAotLS0gYS9ub2RlLmgKKysr IGIvbm9kZS5oCkBAIC0zNTQsNiArMzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUk5vZGUgewogI2Rl ZmluZSBuZF92aXNpICB1Mi5hcmdjCiAKICNkZWZpbmUgTkVXX05PREUodCxhMCxhMSxhMikgcmJf bm9kZV9uZXdub2RlKCh0KSwoVkFMVUUpKGEwKSwoVkFMVUUpKGExKSwoVkFMVUUpKGEyKSkKKyNk ZWZpbmUgTkVXX05PREVfTE9OR0xJRkUodCxhMCxhMSxhMikgcmJfbm9kZV9uZXdub2RlX2xvbmds aWZlKCh0KSwoVkFMVUUpKGEwKSwoVkFMVUUpKGExKSwoVkFMVUUpKGEyKSkKIAogI2RlZmluZSBO RVdfTUVUSE9EKG4seCx2KSBORVdfTk9ERShOT0RFX01FVEhPRCx4LG4sdikKICNkZWZpbmUgTkVX X0ZCT0RZKG4saSkgTkVXX05PREUoTk9ERV9GQk9EWSxpLG4sMCkKQEAgLTQ5Nyw2ICs0OTgsNyBA QCBOT0RFICpyYl9jb21waWxlX2ZpbGUoY29uc3QgY2hhciosIFZBTFVFLCBpbnQpOwogCiB2b2lk IHJiX2FkZF9tZXRob2QoVkFMVUUsIElELCBOT0RFICosIGludCk7CiBOT0RFICpyYl9ub2RlX25l d25vZGUoZW51bSBub2RlX3R5cGUsVkFMVUUsVkFMVUUsVkFMVUUpOworTk9ERSAqcmJfbm9kZV9u ZXdub2RlX2xvbmdsaWZlKGVudW0gbm9kZV90eXBlLFZBTFVFLFZBTFVFLFZBTFVFKTsKIAogTk9E RSogcmJfbWV0aG9kX25vZGUoVkFMVUUga2xhc3MsIElEIGlkKTsKIGludCByYl9ub2RlX2FyaXR5 KE5PREUqIG5vZGUpOwpkaWZmIC0tZ2l0IGEvdm0uYyBiL3ZtLmMKaW5kZXggMTdjMjY5Ny4uMGIw NWRlMSAxMDA2NDQKLS0tIGEvdm0uYworKysgYi92bS5jCkBAIC0xNzAyLDcgKzE3MDIsNyBAQCB2 bV9kZWZpbmVfbWV0aG9kKHJiX3RocmVhZF90ICp0aCwgVkFMVUUgb2JqLCBJRCBpZCwgVkFMVUUg aXNlcXZhbCwKICAgICBDT1BZX0NSRUYobWlzZXEtPmNyZWZfc3RhY2ssIGNyZWYpOwogICAgIG1p c2VxLT5rbGFzcyA9IGtsYXNzOwogICAgIG1pc2VxLT5kZWZpbmVkX21ldGhvZF9pZCA9IGlkOwot ICAgIG5ld2JvZHkgPSBORVdfTk9ERShSVUJZX1ZNX01FVEhPRF9OT0RFLCAwLCBtaXNlcS0+c2Vs ZiwgMCk7CisgICAgbmV3Ym9keSA9IE5FV19OT0RFX0xPTkdMSUZFKFJVQllfVk1fTUVUSE9EX05P REUsIDAsIHJiX2djX3dyaXRlX2JhcnJpZXIobWlzZXEtPnNlbGYpLCAwKTsKICAgICByYl9hZGRf bWV0aG9kKGtsYXNzLCBpZCwgbmV3Ym9keSwgbm9leCk7CiAKICAgICBpZiAoIWlzX3NpbmdsZXRv biAmJiBub2V4ID09IE5PRVhfTU9ERlVOQykgewpkaWZmIC0tZ2l0IGEvdm1fY29yZS5oIGIvdm1f Y29yZS5oCmluZGV4IDUxMWMxZTMuLmVkOTYzOTIgMTAwNjQ0Ci0tLSBhL3ZtX2NvcmUuaAorKysg Yi92bV9jb3JlLmgKQEAgLTUyMyw3ICs1MjMsNyBAQCB0eXBlZGVmIHN0cnVjdCB7CiAKIAogLyog aW5saW5lIChtZXRob2R8Y29uc3QpIGNhY2hlICovCi0jZGVmaW5lIE5FV19JTkxJTkVfQ0FDSEVf RU5UUlkoKSBORVdfV0hJTEUoUXVuZGVmLCAwLCAwKQorI2RlZmluZSBORVdfSU5MSU5FX0NBQ0hF X0VOVFJZKCkgTkVXX05PREVfTE9OR0xJRkUoTk9ERV9XSElMRSwgUXVuZGVmLCAwLCAwKQogI2Rl ZmluZSBpY19jbGFzcyAgdTEudmFsdWUKICNkZWZpbmUgaWNfbWV0aG9kIHUyLm5vZGUKICNkZWZp bmUgaWNfdmFsdWUgIHUyLnZhbHVlCmRpZmYgLS1naXQgYS92bV9pbnNuaGVscGVyLmMgYi92bV9p bnNuaGVscGVyLmMKaW5kZXggNTI5M2FmMy4uMTNiYmNmNyAxMDA2NDQKLS0tIGEvdm1faW5zbmhl bHBlci5jCisrKyBiL3ZtX2luc25oZWxwZXIuYwpAQCAtMTE3MCw4ICsxMTcwLDggQEAgdm1fbWV0 aG9kX3NlYXJjaChWQUxVRSBpZCwgVkFMVUUga2xhc3MsIElDIGljKQogCX0KIAllbHNlIHsKIAkg ICAgbW4gPSByYl9tZXRob2Rfbm9kZShrbGFzcywgaWQpOwotCSAgICBpYy0+aWNfY2xhc3MgPSBr bGFzczsKLQkgICAgaWMtPmljX21ldGhvZCA9IG1uOworCSAgICBpYy0+aWNfY2xhc3MgPSByYl9n Y193cml0ZV9iYXJyaWVyKGtsYXNzKTsKKwkgICAgaWMtPmljX21ldGhvZCA9IChOT0RFICopcmJf Z2Nfd3JpdGVfYmFycmllcigoVkFMVUUpbW4pOwogCSAgICBpYy0+aWNfdm1zdGF0ID0gR0VUX1ZN X1NUQVRFX1ZFUlNJT04oKTsKIAl9CiAgICAgfQpkaWZmIC0tZ2l0IGEvdm1fbWV0aG9kLmMgYi92 bV9tZXRob2QuYwppbmRleCBhYWJlNzVkLi4yNWQyZTZkIDEwMDY0NAotLS0gYS92bV9tZXRob2Qu YworKysgYi92bV9tZXRob2QuYwpAQCAtMTQyLDkgKzE0MiwxMiBAQCByYl9hZGRfbWV0aG9kKFZB TFVFIGtsYXNzLCBJRCBtaWQsIE5PREUgKiBub2RlLCBpbnQgbm9leCkKICAgICAgKiAgIG5kX2Nu dCAgOiBhbGlhcyBjb3VudCAgICAgICAgICAgLy8gKDMpCiAgICAgICovCiAgICAgaWYgKG5vZGUp IHsKLQlOT0RFICptZXRob2QgPSBORVdfTUVUSE9EKG5vZGUsIGtsYXNzLCBOT0VYX1dJVEhfU0FG RShub2V4KSk7CisgICAgICAgIE5PREUgKm1ldGhvZCA9IE5FV19OT0RFX0xPTkdMSUZFKE5PREVf TUVUSE9ELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYl9nY193 cml0ZV9iYXJyaWVyKGtsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmJfZ2Nfd3JpdGVfYmFycmllcigoVkFMVUUpbm9kZSksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5PRVhfV0lUSF9TQUZFKG5vZXgpKTsKIAltZXRob2Qt Pm5kX2ZpbGUgPSAodm9pZCAqKW1pZDsKLQlib2R5ID0gTkVXX0ZCT0RZKG1ldGhvZCwgbWlkKTsK Kwlib2R5ID0gTkVXX05PREVfTE9OR0xJRkUoTk9ERV9GQk9EWSwgbWlkLCBtZXRob2QsIDApOwog ICAgIH0KICAgICBlbHNlIHsKIAlib2R5ID0gMDsKQEAgLTE5NSw3ICsxOTgsOCBAQCB2b2lkCiBy Yl9kZWZpbmVfYWxsb2NfZnVuYyhWQUxVRSBrbGFzcywgVkFMVUUgKCpmdW5jKShWQUxVRSkpCiB7 CiAgICAgQ2hlY2tfVHlwZShrbGFzcywgVF9DTEFTUyk7Ci0gICAgcmJfYWRkX21ldGhvZChyYl9z aW5nbGV0b25fY2xhc3Moa2xhc3MpLCBJRF9BTExPQ0FUT1IsIE5FV19DRlVOQyhmdW5jLCAwKSwK KyAgICByYl9hZGRfbWV0aG9kKHJiX3NpbmdsZXRvbl9jbGFzcyhrbGFzcyksIElEX0FMTE9DQVRP UiwKKyAgICAgICAgICAgICAgICAgIE5FV19OT0RFX0xPTkdMSUZFKE5PREVfQ0ZVTkMsIGZ1bmMs IDAsIDApLAogCQkgIE5PRVhfUFJJVkFURSk7CiB9CiAKQEAgLTc3NCwxMCArNzc4LDE0IEBAIHJi X2FsaWFzKFZBTFVFIGtsYXNzLCBJRCBuYW1lLCBJRCBkZWYpCiAgICAgfQogCiAgICAgc3RfaW5z ZXJ0KFJDTEFTU19NX1RCTChrbGFzcyksIG5hbWUsCi0JICAgICAgKHN0X2RhdGFfdCkgTkVXX0ZC T0RZKAotCQkgIG1ldGhvZCA9IE5FV19NRVRIT0Qob3JpZ19mYm9keS0+bmRfYm9keS0+bmRfYm9k eSwKLQkJCSAgICAgb3JpZ19mYm9keS0+bmRfYm9keS0+bmRfY2xzcywKLQkJCSAgICAgTk9FWF9X SVRIX1NBRkUob3JpZ19mYm9keS0+bmRfYm9keS0+bmRfbm9leCkpLCBkZWYpKTsKKwkgICAgICAo c3RfZGF0YV90KSBORVdfTk9ERV9MT05HTElGRSgKKyAgICAgICAgICAgICAgICAgIE5PREVfRkJP RFksCisgICAgICAgICAgICAgICAgICBkZWYsCisgICAgICAgICAgICAgICAgICBtZXRob2QgPSBO RVdfTk9ERV9MT05HTElGRShOT0RFX01FVEhPRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJiX2djX3dyaXRlX2JhcnJpZXIoKFZBTFVFKW9yaWdfZmJvZHkt Pm5kX2JvZHktPm5kX2Nsc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmJfZ2Nfd3JpdGVfYmFycmllcigoVkFMVUUpb3JpZ19mYm9keS0+bmRfYm9keS0+ bmRfYm9keSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO T0VYX1dJVEhfU0FGRShvcmlnX2Zib2R5LT5uZF9ib2R5LT5uZF9ub2V4KSksCisgICAgICAgICAg ICAgICAgICAwKSk7CiAgICAgbWV0aG9kLT5uZF9maWxlID0gKHZvaWQgKilkZWY7CiAKICAgICBy Yl9jbGVhcl9jYWNoZV9ieV9pZChuYW1lKTsK --001636457d9e47a9ba04699067b3 Content-Type: application/octet-stream; name="bm_gc_app_heapstyle_maker.rb" Content-Disposition: attachment; filename="bm_gc_app_heapstyle_maker.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fujv7fg42 cmVxdWlyZSAnZXJiJwoKY2xhc3NfY250ID0gMTAwMDAKbWV0aG9kX2NudCA9IDUKCnB1dHMgRVJC Lm5ldyhEQVRBLnJlYWQpLnJlc3VsdChiaW5kaW5nKQoKX19FTkRfXwokOiA8PCBGaWxlLmRpcm5h bWUoX19GSUxFX18pCgpZT1VOR19PQkpfQ05UID0gNTAwCkxPTkdMSUZFX09CSl9DTlQgPSAzCkxP TkdMSUZFX09CSlMgPSBbXQoKPCUgY2xhc3NfY250LnRpbWVzIGRvIHxpfCAlPgpjbGFzcyBBcHBI ZWFwU3R5bGU8JT0gaSAlPgoKICA8JSBtZXRob2RfY250LnRpbWVzIGRvIHxqfCAlPgogIGRlZiBz ZWxmLm1ldGhvZF88JT0gaiAlPgogICAgWU9VTkdfT0JKX0NOVC50aW1lc3t8aXwgaS50b19zfQog ICAgTE9OR0xJRkVfT0JKX0NOVC50aW1lc3t8aXwgTE9OR0xJRkVfT0JKUyA8PCBpLnRvX3N9CiAg ICByZXR1cm4gImNsYXNzXzwlPSBpICU+X21ldGhvZF88JT0gaiAlPiIKICBlbmQKICA8JSBlbmQg JT4KZW5kCjwlIGVuZCAlPgoKR0M6OlByb2ZpbGVyLmVuYWJsZQoKPCUgY2xhc3NfY250LnRpbWVz IGRvIHxpfCAlPgogIDwlIG1ldGhvZF9jbnQudGltZXMgZG8gfGp8ICU+CkFwcEhlYXBTdHlsZTwl PSBpICU+Lm1ldGhvZF88JT0gaiAlPgogIDwlIGVuZCAlPgo8JSBlbmQgJT4KCkdDOjpQcm9maWxl ci5yZXBvcnQK --001636457d9e47a9ba04699067b3--