From: authorNari Date: 2008-06-29T02:15:30+09:00 Subject: [ruby-dev:35268] Re: Improvement of lazy sweep patch ------=_Part_2423_15429198.1214673482896 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Content-Disposition: inline nariです。 パッチ内にまたバグを見つけましたので、それを取り除きました。 その修正摘要後、ベンチマークを取ったら、以前に比べていい数字が でましたので、ご報告させていただきます。 http://d.hatena.ne.jp/authorNari/20080628/1214671865 よろしくお願いします。 --- nari ------=_Part_2423_15429198.1214673482896 Content-Type: text/x-diff; name=rb_gc_lazy_improve.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fi0h28bn0 Content-Disposition: attachment; filename=rb_gc_lazy_improve.diff SW5kZXg6IGdjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2MuYwko44Oq44OT44K444On44OzIDE3NjM3KQor KysgZ2MuYwko5L2c5qWt44Kz44OU44O8KQpAQCAtMTI5LDEwICsxMjksMTcgQEAKICNwcmFnbWEg cGFjayhwb3ApCiAjZW5kaWYKIAorZW51bSBzbG90X2NvbG9yIHsKKyAgICBXSElURSA9IDB4MDAs ICAvKiBnYXJiYWdlICovCisgICAgQkxBQ0sgPSAweDAxLCAgLyogdXNlZCAqLworICAgIEdSQVkg ID0gMHgwMiwgIC8qIG5vdCBzd2VlcCAqLworfTsKKwogc3RydWN0IGhlYXBzX3Nsb3QgewogICAg IHZvaWQgKm1lbWJhc2U7CiAgICAgUlZBTFVFICpzbG90OwogICAgIGludCBsaW1pdDsKKyAgICBl bnVtIHNsb3RfY29sb3IgY29sb3I7CiB9OwogCiAjZGVmaW5lIEhFQVBfTUlOX1NMT1RTIDEwMDAw CkBAIC0xNjIsMTAgKzE2OSwxNiBAQAogCVJWQUxVRSAqZnJlZWxpc3Q7CiAJUlZBTFVFICpyYW5n ZVsyXTsKIAlSVkFMVUUgKmZyZWVkOworCXNpemVfdCBsaXZlOworCXNpemVfdCBkZWFkOworCXNp emVfdCBkb19oZWFwX2ZyZWU7CisJc2l6ZV90IHN3ZWVwX2luZGV4OworCXNpemVfdCBzd2VlcF9p bmNyZW1lbnQ7CiAgICAgfSBoZWFwOwogICAgIHN0cnVjdCB7CiAJaW50IGRvbnRfZ2M7CiAJaW50 IGR1cmluZ19nYzsKKwlpbnQgZHVyaW5nX3N3ZWVwOwogICAgIH0gZmxhZ3M7CiAgICAgc3RydWN0 IHsKIAlpbnQgbmVlZF9jYWxsOwpAQCAtMjAxLDggKzIxNCwxNCBAQAogI2RlZmluZSBoaW1lbQkJ CW9ianNwYWNlLT5oZWFwLnJhbmdlWzFdCiAjZGVmaW5lIGhlYXBzX2luYwkJb2Jqc3BhY2UtPmhl YXAuaW5jcmVtZW50CiAjZGVmaW5lIGhlYXBzX2ZyZWVkCQlvYmpzcGFjZS0+aGVhcC5mcmVlZAor I2RlZmluZSBsaXZlCQkJb2Jqc3BhY2UtPmhlYXAubGl2ZQorI2RlZmluZSBkZWFkCQkJb2Jqc3Bh Y2UtPmhlYXAuZGVhZAorI2RlZmluZSBkb19oZWFwX2ZyZWUJCW9ianNwYWNlLT5oZWFwLmRvX2hl YXBfZnJlZQorI2RlZmluZSBoZWFwc19zd2VlcF9pbmRleAlvYmpzcGFjZS0+aGVhcC5zd2VlcF9p bmRleAorI2RlZmluZSBoZWFwc19zd2VlcF9pbmMgCW9ianNwYWNlLT5oZWFwLnN3ZWVwX2luY3Jl bWVudAogI2RlZmluZSBkb250X2djIAkJb2Jqc3BhY2UtPmZsYWdzLmRvbnRfZ2MKICNkZWZpbmUg ZHVyaW5nX2djCQlvYmpzcGFjZS0+ZmxhZ3MuZHVyaW5nX2djCisjZGVmaW5lIGR1cmluZ19zd2Vl cAkJb2Jqc3BhY2UtPmZsYWdzLmR1cmluZ19zd2VlcAogI2RlZmluZSBuZWVkX2NhbGxfZmluYWwg CW9ianNwYWNlLT5maW5hbC5uZWVkX2NhbGwKICNkZWZpbmUgZmluYWxpemVyX3RhYmxlIAlvYmpz cGFjZS0+ZmluYWwudGFibGUKICNkZWZpbmUgZGVmZXJyZWRfZmluYWxfbGlzdAlvYmpzcGFjZS0+ ZmluYWwuZGVmZXJyZWQKQEAgLTI0OSw2ICsyNjgsNyBAQAogCiBzdGF0aWMgdm9pZCBydW5fZmlu YWwocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIFZBTFVFIG9iaik7CiBzdGF0aWMgaW50IGdhcmJh Z2VfY29sbGVjdChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSk7CitzdGF0aWMgaW50IGdhcmJhZ2Vf Y29sbGVjdF9mb3JjZShyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSk7CiAKIHZvaWQKIHJiX2dsb2Jh bF92YXJpYWJsZShWQUxVRSAqdmFyKQpAQCAtMzI1LDExICszNDUsMTEgQEAKIAogICAgIGlmICgo cnVieV9nY19zdHJlc3MgJiYgIXJ1YnlfZGlzYWJsZV9nY19zdHJlc3MpIHx8CiAJKG1hbGxvY19p bmNyZWFzZStzaXplKSA+IG1hbGxvY19saW1pdCkgewotCWdhcmJhZ2VfY29sbGVjdChvYmpzcGFj ZSk7CisJZ2FyYmFnZV9jb2xsZWN0X2ZvcmNlKG9ianNwYWNlKTsKICAgICB9CiAgICAgUlVCWV9D UklUSUNBTChtZW0gPSBtYWxsb2Moc2l6ZSkpOwogICAgIGlmICghbWVtKSB7Ci0JaWYgKGdhcmJh Z2VfY29sbGVjdChvYmpzcGFjZSkpIHsKKwlpZiAoZ2FyYmFnZV9jb2xsZWN0X2ZvcmNlKG9ianNw YWNlKSkgewogCSAgICBSVUJZX0NSSVRJQ0FMKG1lbSA9IG1hbGxvYyhzaXplKSk7CiAJfQogCWlm ICghbWVtKSB7CkBAIC0zNjUsMTAgKzM4NSw5IEBACiAgICAgb2Jqc3BhY2UtPm1hbGxvY19wYXJh bXMuYWxsb2NhdGVkX3NpemUgLT0gc2l6ZTsKICAgICBwdHIgPSAoc2l6ZV90ICopcHRyIC0gMTsK ICNlbmRpZgotCiAgICAgUlVCWV9DUklUSUNBTChtZW0gPSByZWFsbG9jKHB0ciwgc2l6ZSkpOwog ICAgIGlmICghbWVtKSB7Ci0JaWYgKGdhcmJhZ2VfY29sbGVjdChvYmpzcGFjZSkpIHsKKwlpZiAo Z2FyYmFnZV9jb2xsZWN0X2ZvcmNlKG9ianNwYWNlKSkgewogCSAgICBSVUJZX0NSSVRJQ0FMKG1l bSA9IHJlYWxsb2MocHRyLCBzaXplKSk7CiAJfQogCWlmICghbWVtKSB7CkBAIC01NTksNiArNTc4 LDggQEAKICAgICBoZWFwc19sZW5ndGggPSBuZXh0X2hlYXBzX2xlbmd0aDsKIH0KIAorI2RlZmlu ZSBSQU5ZKG8pICgoUlZBTFVFKikobykpCisKIHN0YXRpYyB2b2lkCiBhc3NpZ25faGVhcF9zbG90 KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQogewpAQCAtNjAyLDYgKzYyMyw3IEBACiAgICAgaGVh cHNbaGldLm1lbWJhc2UgPSBtZW1iYXNlOwogICAgIGhlYXBzW2hpXS5zbG90ID0gcDsKICAgICBo ZWFwc1toaV0ubGltaXQgPSBvYmpzOworICAgIGhlYXBzW2hpXS5jb2xvciA9IEJMQUNLOwogICAg IHBlbmQgPSBwICsgb2JqczsKICAgICBpZiAobG9tZW0gPT0gMCB8fCBsb21lbSA+IHApIGxvbWVt ID0gcDsKICAgICBpZiAoaGltZW0gPCBwZW5kKSBoaW1lbSA9IHBlbmQ7CkBAIC02MTMsNiArNjM1 LDkgQEAKIAlmcmVlbGlzdCA9IHA7CiAJcCsrOwogICAgIH0KKyAgICBpZiAoaGkgPCBoZWFwc19z d2VlcF9pbmRleCkgeworCWhlYXBzX3N3ZWVwX2luZGV4Kys7CisgICAgfQogfQogCiBzdGF0aWMg dm9pZApAQCAtNjU1LDE1ICs2ODAsMTMgQEAKICAgICByZXR1cm4gUWZhbHNlOwogfQogCi0jZGVm aW5lIFJBTlkobykgKChSVkFMVUUqKShvKSkKLQogc3RhdGljIFZBTFVFCiByYl9uZXdvYmpfZnJv bV9oZWFwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQogewogICAgIFZBTFVFIG9iajsKIAkKICAg ICBpZiAoKHJ1YnlfZ2Nfc3RyZXNzICYmICFydWJ5X2Rpc2FibGVfZ2Nfc3RyZXNzKSB8fCAhZnJl ZWxpc3QpIHsKLSAgICAJaWYgKCFoZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpICYmICFnYXJiYWdl X2NvbGxlY3Qob2Jqc3BhY2UpKSB7CisgICAJaWYgKCFnYXJiYWdlX2NvbGxlY3Qob2Jqc3BhY2Up KSB7CiAJICAgIHJiX21lbWVycm9yKCk7CiAJfQogICAgIH0KQEAgLTEwMjcsNiArMTA1MCw3IEBA CiAgICAgaWYgKG9iai0+YXMuYmFzaWMuZmxhZ3MgPT0gMCkgcmV0dXJuOyAgICAgICAvKiBmcmVl IGNlbGwgKi8KICAgICBpZiAob2JqLT5hcy5iYXNpYy5mbGFncyAmIEZMX01BUkspIHJldHVybjsg IC8qIGFscmVhZHkgbWFya2VkICovCiAgICAgb2JqLT5hcy5iYXNpYy5mbGFncyB8PSBGTF9NQVJL OworICAgIGxpdmUrKzsKIAogICAgIGlmIChsZXYgPiBHQ19MRVZFTF9NQVggfHwgKGxldiA9PSAw ICYmIHJ1Ynlfc3RhY2tfY2hlY2soKSkpIHsKIAlpZiAoIW1hcmtfc3RhY2tfb3ZlcmZsb3cpIHsK QEAgLTEwNjIsNiArMTA4Niw3IEBACiAgICAgaWYgKG9iai0+YXMuYmFzaWMuZmxhZ3MgPT0gMCkg cmV0dXJuOyAgICAgICAvKiBmcmVlIGNlbGwgKi8KICAgICBpZiAob2JqLT5hcy5iYXNpYy5mbGFn cyAmIEZMX01BUkspIHJldHVybjsgIC8qIGFscmVhZHkgbWFya2VkICovCiAgICAgb2JqLT5hcy5i YXNpYy5mbGFncyB8PSBGTF9NQVJLOworICAgIGxpdmUrKzsKIAogICBtYXJraW5nOgogICAgIGlm IChGTF9URVNUKG9iaiwgRkxfRVhJVkFSKSkgewpAQCAtMTMyOCwxMzQgKzEzNTMsMTEwIEBACiAg ICAgfQogfQogCi1zdGF0aWMgdm9pZAotZnJlZV91bnVzZWRfaGVhcHMocmJfb2Jqc3BhY2VfdCAq b2Jqc3BhY2UpCit2b2lkIHJiX2djX2Fib3J0X3RocmVhZHModm9pZCk7CisKK3N0YXRpYyBpbnQK K3Nsb3Rfc3dlZXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHN0cnVjdCBoZWFwc19zbG90ICp0 YXJnZXQpCiB7Ci0gICAgc2l6ZV90IGksIGo7Ci0gICAgUlZBTFVFICpsYXN0ID0gMDsKKyAgICBS VkFMVUUgKnAsICpwZW5kLCAqZnJlZTsKKyAgICBSVkFMVUUgKmZpbmFsOworICAgIGludCBmcmVl ZCA9IDA7CiAKLSAgICBmb3IgKGkgPSBqID0gMTsgaiA8IGhlYXBzX3VzZWQ7IGkrKykgewotCWlm IChoZWFwc1tpXS5saW1pdCA9PSAwKSB7Ci0JICAgIGlmICghbGFzdCkgewotCQlsYXN0ID0gaGVh cHNbaV0ubWVtYmFzZTsKKyAgICBpZiAodGFyZ2V0LT5jb2xvciA9PSBCTEFDSyB8fCB0YXJnZXQt PmNvbG9yID09IFdISVRFKSB7CisJcmV0dXJuIFFmYWxzZTsKKyAgICB9CisKKyAgICBmaW5hbCA9 IGRlZmVycmVkX2ZpbmFsX2xpc3Q7CisgICAgZnJlZSA9IGZyZWVsaXN0OworICAgIHAgPSB0YXJn ZXQtPnNsb3Q7IHBlbmQgPSBwICsgdGFyZ2V0LT5saW1pdDsKKyAgICB3aGlsZSAocCA8IHBlbmQp IHsKKwlpZiAoIShwLT5hcy5iYXNpYy5mbGFncyAmIEZMX01BUkspKSB7CisJICAgIGlmIChwLT5h cy5iYXNpYy5mbGFncykgeworCQlvYmpfZnJlZShvYmpzcGFjZSwgKFZBTFVFKXApOwogCSAgICB9 CisJICAgIGlmIChuZWVkX2NhbGxfZmluYWwgJiYgRkxfVEVTVChwLCBGTF9GSU5BTElaRSkpIHsK KwkJcC0+YXMuZnJlZS5mbGFncyA9IEZMX01BUks7IC8qIHJlbWFpbiBtYXJrZWQgKi8KKwkJcC0+ YXMuZnJlZS5uZXh0ID0gZGVmZXJyZWRfZmluYWxfbGlzdDsKKwkJZGVmZXJyZWRfZmluYWxfbGlz dCA9IHA7CisJICAgIH0KIAkgICAgZWxzZSB7Ci0JCWZyZWUoaGVhcHNbaV0ubWVtYmFzZSk7CisJ CVZBTEdSSU5EX01BS0VfTUVNX1VOREVGSU5FRCgodm9pZCopcCwgc2l6ZW9mKFJWQUxVRSkpOwor CQlwLT5hcy5mcmVlLmZsYWdzID0gMDsKKwkJcC0+YXMuZnJlZS5uZXh0ID0gZnJlZWxpc3Q7CisJ CWZyZWVsaXN0ID0gcDsKIAkgICAgfQotCSAgICBoZWFwc191c2VkLS07CisJICAgIGZyZWVkKys7 CiAJfQorCWVsc2UgaWYgKFJCQVNJQyhwKS0+ZmxhZ3MgPT0gRkxfTUFSSykgeworCSAgICAvKiBv YmplY3RzIHRvIGJlIGZpbmFsaXplZCAqLworCSAgICAvKiBkbyBub3RoaW5nIHJlbWFpbiBtYXJr ZWQgKi8KKwl9CiAJZWxzZSB7Ci0JICAgIGlmIChpICE9IGopIHsKLQkJaGVhcHNbal0gPSBoZWFw c1tpXTsKLQkgICAgfQotCSAgICBqKys7CisJICAgIHAtPmFzLmJhc2ljLmZsYWdzICY9IH5GTF9N QVJLOwogCX0KKwlwKys7CiAgICAgfQotICAgIGlmIChsYXN0KSB7Ci0JaWYgKGxhc3QgPCBoZWFw c19mcmVlZCkgewotCSAgICBmcmVlKGhlYXBzX2ZyZWVkKTsKLQkgICAgaGVhcHNfZnJlZWQgPSBs YXN0OworICAgIGRlYWQgKz0gZnJlZWQ7CisgICAgaWYgKGZyZWVkID09IHRhcmdldC0+bGltaXQg JiYgZGVhZCA+IGRvX2hlYXBfZnJlZSkgeworCVJWQUxVRSAqcHA7CisKKwl0YXJnZXQtPmxpbWl0 ID0gMDsKKwl0YXJnZXQtPmNvbG9yID0gV0hJVEU7CisJZm9yIChwcCA9IGRlZmVycmVkX2ZpbmFs X2xpc3Q7IHBwICE9IGZpbmFsOyBwcCA9IHBwLT5hcy5mcmVlLm5leHQpIHsKKwkgICAgcHAtPmFz LmZyZWUuZmxhZ3MgfD0gRkxfU0lOR0xFVE9OOyAvKiBmcmVlaW5nIHBhZ2UgbWFyayAqLwogCX0K LQllbHNlIHsKLQkgICAgZnJlZShsYXN0KTsKLQl9CisJZnJlZWxpc3QgPSBmcmVlOwkvKiBjYW5j ZWwgdGhpcyBwYWdlIGZyb20gZnJlZWxpc3QgKi8KICAgICB9CisgICAgZWxzZSB7CisJdGFyZ2V0 LT5jb2xvciA9IEJMQUNLOworICAgIH0KKyAgICByZXR1cm4gUXRydWU7CiB9CiAKLXZvaWQgcmJf Z2NfYWJvcnRfdGhyZWFkcyh2b2lkKTsKLQogc3RhdGljIHZvaWQKLWdjX3N3ZWVwKHJiX29ianNw YWNlX3QgKm9ianNwYWNlKQoraGVhcF9zd2VlcF9pbmNyZW1lbnQocmJfb2Jqc3BhY2VfdCAqb2Jq c3BhY2UpCiB7Ci0gICAgUlZBTFVFICpwLCAqcGVuZCwgKmZpbmFsX2xpc3Q7Ci0gICAgc2l6ZV90 IGZyZWVkID0gMDsKLSAgICBzaXplX3QgaTsKLSAgICBzaXplX3QgbGl2ZSA9IDAsIGZyZWVfbWlu ID0gMCwgZG9faGVhcF9mcmVlID0gMDsKKyAgICBpbnQgaSA9IDA7CiAKLSAgICBkb19oZWFwX2Zy ZWUgPSAoaGVhcHNfdXNlZCAqIEhFQVBfT0JKX0xJTUlUKSAqIDAuNjU7Ci0gICAgZnJlZV9taW4g PSAoaGVhcHNfdXNlZCAqIEhFQVBfT0JKX0xJTUlUKSAgKiAwLjI7Ci0gICAgaWYgKGZyZWVfbWlu IDwgRlJFRV9NSU4pIHsKLQlkb19oZWFwX2ZyZWUgPSBoZWFwc191c2VkICogSEVBUF9PQkpfTElN SVQ7Ci0gICAgICAgIGZyZWVfbWluID0gRlJFRV9NSU47CisgICAgd2hpbGUgKGkgPCBoZWFwc19z d2VlcF9pbmMgJiYgaGVhcHNfc3dlZXBfaW5kZXggPCBoZWFwc191c2VkKSB7CisJaWYgKHNsb3Rf c3dlZXAob2Jqc3BhY2UsICZoZWFwc1toZWFwc19zd2VlcF9pbmRleF0pKSB7CisJICAgIGkrKzsK Kwl9CisJaGVhcHNfc3dlZXBfaW5kZXgrKzsKICAgICB9Cit9CiAKLSAgICBmcmVlbGlzdCA9IDA7 Ci0gICAgZmluYWxfbGlzdCA9IGRlZmVycmVkX2ZpbmFsX2xpc3Q7Ci0gICAgZGVmZXJyZWRfZmlu YWxfbGlzdCA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlYXBzX3VzZWQ7IGkrKykgewotCWlu dCBuID0gMDsKLQlSVkFMVUUgKmZyZWUgPSBmcmVlbGlzdDsKLQlSVkFMVUUgKmZpbmFsID0gZmlu YWxfbGlzdDsKK3N0YXRpYyB2b2lkCitoZWFwX3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNl KQoreworICAgIHdoaWxlICghZnJlZWxpc3QgJiYgaGVhcHNfc3dlZXBfaW5kZXggPCBoZWFwc191 c2VkKSB7CisJc2xvdF9zd2VlcChvYmpzcGFjZSwgJmhlYXBzW2hlYXBzX3N3ZWVwX2luZGV4XSk7 CisJaGVhcHNfc3dlZXBfaW5kZXgrKzsKKyAgICB9Cit9CiAKLQlwID0gaGVhcHNbaV0uc2xvdDsg cGVuZCA9IHAgKyBoZWFwc1tpXS5saW1pdDsKLQl3aGlsZSAocCA8IHBlbmQpIHsKLQkgICAgaWYg KCEocC0+YXMuYmFzaWMuZmxhZ3MgJiBGTF9NQVJLKSkgewotCQlpZiAocC0+YXMuYmFzaWMuZmxh Z3MpIHsKLQkJICAgIG9ial9mcmVlKG9ianNwYWNlLCAoVkFMVUUpcCk7Ci0JCX0KLQkJaWYgKG5l ZWRfY2FsbF9maW5hbCAmJiBGTF9URVNUKHAsIEZMX0ZJTkFMSVpFKSkgewotCQkgICAgcC0+YXMu ZnJlZS5mbGFncyA9IEZMX01BUks7IC8qIHJlbWFpbiBtYXJrZWQgKi8KLQkJICAgIHAtPmFzLmZy ZWUubmV4dCA9IGZpbmFsX2xpc3Q7Ci0JCSAgICBmaW5hbF9saXN0ID0gcDsKLQkJfQotCQllbHNl IHsKLSAgICAgICAgICAgICAgICAgICAgVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEKCh2b2lk KilwLCBzaXplb2YoUlZBTFVFKSk7Ci0JCSAgICBwLT5hcy5mcmVlLmZsYWdzID0gMDsKLQkJICAg IHAtPmFzLmZyZWUubmV4dCA9IGZyZWVsaXN0OwotCQkgICAgZnJlZWxpc3QgPSBwOwotCQl9Ci0J CW4rKzsKLQkgICAgfQotCSAgICBlbHNlIGlmIChSQkFTSUMocCktPmZsYWdzID09IEZMX01BUksp IHsKLQkJLyogb2JqZWN0cyB0byBiZSBmaW5hbGl6ZWQgKi8KLQkJLyogZG8gbm90aGluZyByZW1h aW4gbWFya2VkICovCi0JICAgIH0KLQkgICAgZWxzZSB7Ci0JCVJCQVNJQyhwKS0+ZmxhZ3MgJj0g fkZMX01BUks7Ci0JCWxpdmUrKzsKLQkgICAgfQotCSAgICBwKys7Ci0JfQotCWlmIChuID09IGhl YXBzW2ldLmxpbWl0ICYmIGZyZWVkID4gZG9faGVhcF9mcmVlKSB7Ci0JICAgIFJWQUxVRSAqcHA7 Ci0KLQkgICAgaGVhcHNbaV0ubGltaXQgPSAwOwotCSAgICBmb3IgKHBwID0gZmluYWxfbGlzdDsg cHAgIT0gZmluYWw7IHBwID0gcHAtPmFzLmZyZWUubmV4dCkgewotCQlwLT5hcy5mcmVlLmZsYWdz IHw9IEZMX1NJTkdMRVRPTjsgLyogZnJlZWluZyBwYWdlIG1hcmsgKi8KLQkgICAgfQotCSAgICBm cmVlbGlzdCA9IGZyZWU7CS8qIGNhbmNlbCB0aGlzIHBhZ2UgZnJvbSBmcmVlbGlzdCAqLwotCX0K LQllbHNlIHsKLQkgICAgZnJlZWQgKz0gbjsKLQl9CitzdGF0aWMgaW50CitnY19sYXp5X3N3ZWVw KHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCByYl90aHJlYWRfdCAqdGgpCit7CisgICAgaWYgKGhl YXBzX2luY3JlbWVudChvYmpzcGFjZSkpIHsKKwloZWFwX3N3ZWVwX2luY3JlbWVudChvYmpzcGFj ZSk7CiAgICAgfQotICAgIGlmIChtYWxsb2NfaW5jcmVhc2UgPiBtYWxsb2NfbGltaXQpIHsKLQlt YWxsb2NfbGltaXQgKz0gKG1hbGxvY19pbmNyZWFzZSAtIG1hbGxvY19saW1pdCkgKiAoZG91Ymxl KWxpdmUgLyAobGl2ZSArIGZyZWVkKTsKLQlpZiAobWFsbG9jX2xpbWl0IDwgR0NfTUFMTE9DX0xJ TUlUKSBtYWxsb2NfbGltaXQgPSBHQ19NQUxMT0NfTElNSVQ7CisgICAgZWxzZSB7CisJaGVhcF9z d2VlcChvYmpzcGFjZSk7CiAgICAgfQotICAgIG1hbGxvY19pbmNyZWFzZSA9IDA7Ci0gICAgaWYg KGZyZWVkIDwgZnJlZV9taW4pIHsKLSAgICAJc2V0X2hlYXBzX2luY3JlbWVudChvYmpzcGFjZSk7 Ci0JaGVhcHNfaW5jcmVtZW50KG9ianNwYWNlKTsKKworICAgIGlmICghZnJlZWxpc3QpIHsKKwly ZXR1cm4gUWZhbHNlOwogICAgIH0KLSAgICBkdXJpbmdfZ2MgPSAwOwogCi0gICAgLyogY2xlYXIg ZmluYWxpemF0aW9uIGxpc3QgKi8KLSAgICBpZiAoZmluYWxfbGlzdCkgewotCWRlZmVycmVkX2Zp bmFsX2xpc3QgPSBmaW5hbF9saXN0OwotCXJldHVybjsKLSAgICB9Ci0gICAgZnJlZV91bnVzZWRf aGVhcHMob2Jqc3BhY2UpOworICAgIHJldHVybiBRdHJ1ZTsKIH0KIAogdm9pZAogcmJfZ2NfZm9y Y2VfcmVjeWNsZShWQUxVRSBwKQogewotICAgIHJiX29ianNwYWNlX3QgKm9ianNwYWNlID0gJnJi X29ianNwYWNlOwogICAgIFZBTEdSSU5EX01BS0VfTUVNX1VOREVGSU5FRCgodm9pZCopcCwgc2l6 ZW9mKFJWQUxVRSkpOwogICAgIFJBTlkocCktPmFzLmZyZWUuZmxhZ3MgPSAwOwotICAgIFJBTlko cCktPmFzLmZyZWUubmV4dCA9IGZyZWVsaXN0OwotICAgIGZyZWVsaXN0ID0gUkFOWShwKTsKIH0K IAogc3RhdGljIHZvaWQKQEAgLTE2NTYsMzAgKzE2NTcsNzEgQEAKIAogdm9pZCByYl9nY19tYXJr X2VuY29kaW5ncyh2b2lkKTsKIAotc3RhdGljIGludAotZ2FyYmFnZV9jb2xsZWN0KHJiX29ianNw YWNlX3QgKm9ianNwYWNlKQorc3RhdGljIHZvaWQKK2djX21hcmtfYWxsX2NsZWFyKHJiX29ianNw YWNlX3QgKm9ianNwYWNlKQogeworICAgIFJWQUxVRSAqbGFzdCA9IDA7CisgICAgc2l6ZV90IGks IGo7CisgICAgCisgICAgZm9yIChpID0gaiA9IDA7IGogPCBoZWFwc191c2VkOyBpKyspIHsKKwlp ZiAoaGVhcHNbaV0uY29sb3IgPT0gV0hJVEUgJiYgIWRlZmVycmVkX2ZpbmFsX2xpc3QpIHsKKwkg ICAgaWYgKCFsYXN0KSB7CisJCWxhc3QgPSBoZWFwc1tpXS5tZW1iYXNlOworCSAgICB9CisJICAg IGVsc2UgeworCQlmcmVlKGhlYXBzW2ldLm1lbWJhc2UpOworCSAgICB9CisJICAgIGhlYXBzX3Vz ZWQtLTsKKwl9CisJZWxzZSB7CisJICAgIGlmIChoZWFwc1tpXS5jb2xvciA9PSBHUkFZKSB7CisJ CVJWQUxVRSAqcCwgKnBlbmQ7CisJCXAgPSBoZWFwc1tpXS5zbG90OyBwZW5kID0gcCArIGhlYXBz W2ldLmxpbWl0OworCQl3aGlsZSAocCA8IHBlbmQpIHsKKwkJICAgIGlmICghKFJCQVNJQyhwKS0+ ZmxhZ3MgJiBGTF9NQVJLKSkgeworCQkJaWYgKHAtPmFzLmJhc2ljLmZsYWdzICYmICFGTF9URVNU KHAsIEZMX0ZJTkFMSVpFKSkgeworCQkJICAgIG9ial9mcmVlKG9ianNwYWNlLCAoVkFMVUUpcCk7 CisJCQkgICAgVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVEKCh2b2lkKilwLCBzaXplb2YoUlZB TFVFKSk7CisJCQkgICAgcC0+YXMuZnJlZS5mbGFncyA9IDA7CisJCQl9CisJCSAgICB9CisJCSAg ICBlbHNlIGlmIChSQkFTSUMocCktPmZsYWdzICE9IEZMX01BUkspIHsKKwkJCXAtPmFzLmJhc2lj LmZsYWdzICY9IH5GTF9NQVJLOworCQkgICAgfQorCQkgICAgcCsrOworCQl9CisJICAgIH0KKwkg ICAgZWxzZSB7CisJCWhlYXBzW2ldLmNvbG9yID0gR1JBWTsKKwkgICAgfQorCSAgICBpZiAoaSAh PSBqKSB7CisJCWhlYXBzW2pdID0gaGVhcHNbaV07CisJICAgIH0KKwkgICAgaisrOworCX0KKyAg ICB9CisgICAgaWYgKGxhc3QpIHsKKwlpZiAobGFzdCA8IGhlYXBzX2ZyZWVkKSB7CisJICAgIGZy ZWUoaGVhcHNfZnJlZWQpOworCSAgICBoZWFwc19mcmVlZCA9IGxhc3Q7CisJfQorCWVsc2Ugewor CSAgICBmcmVlKGxhc3QpOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitnY19tYXJrcyhy Yl9vYmpzcGFjZV90ICpvYmpzcGFjZSwgcmJfdGhyZWFkX3QgKnRoKQorewogICAgIHN0cnVjdCBn Y19saXN0ICpsaXN0OwotICAgIHJiX3RocmVhZF90ICp0aCA9IEdFVF9USFJFQUQoKTsKKyAgICBz aXplX3QgZnJlZV9taW4gPSAwOwogCi0gICAgaWYgKEdDX05PVElGWSkgcHJpbnRmKCJzdGFydCBn YXJiYWdlX2NvbGxlY3QoKVxuIik7CisgICAgbGl2ZSA9IDA7CisgICAgZnJlZWxpc3QgPSAwOwog Ci0gICAgaWYgKCFoZWFwcykgewotCXJldHVybiBRZmFsc2U7Ci0gICAgfQorICAgIGdjX21hcmtf YWxsX2NsZWFyKG9ianNwYWNlKTsKIAotICAgIGlmIChkb250X2djIHx8IGR1cmluZ19nYykgewot CWlmICghZnJlZWxpc3QpIHsKLSAgICAgICAgICAgIGlmICghaGVhcHNfaW5jcmVtZW50KG9ianNw YWNlKSkgewotICAgICAgICAgICAgICAgIHNldF9oZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpOwot ICAgICAgICAgICAgICAgIGhlYXBzX2luY3JlbWVudChvYmpzcGFjZSk7Ci0gICAgICAgICAgICB9 Ci0JfQotCXJldHVybiBRdHJ1ZTsKLSAgICB9Ci0gICAgZHVyaW5nX2djKys7Ci0gICAgb2Jqc3Bh Y2UtPmNvdW50Kys7Ci0KICAgICBTRVRfU1RBQ0tfRU5EOwogCiAgICAgaW5pdF9tYXJrX3N0YWNr KG9ianNwYWNlKTsKQEAgLTE2OTYsNiArMTczOCw3IEBACiAgICAgcmJfZ2NfbWFya19zeW1ib2xz KCk7CiAgICAgcmJfZ2NfbWFya19lbmNvZGluZ3MoKTsKIAorCiAgICAgLyogbWFyayBwcm90ZWN0 ZWQgZ2xvYmFsIHZhcmlhYmxlcyAqLwogICAgIGZvciAobGlzdCA9IGdsb2JhbF9MaXN0OyBsaXN0 OyBsaXN0ID0gbGlzdC0+bmV4dCkgewogCXJiX2djX21hcmtfbWF5YmUoKmxpc3QtPnZhcnB0cik7 CkBAIC0xNzIxLDkgKzE3NjQsNjAgQEAKIAl9CiAgICAgfQogCi0gICAgZ2Nfc3dlZXAob2Jqc3Bh Y2UpOworICAgIGRlYWQgPSAwOworICAgIGhlYXBzX3N3ZWVwX2luZGV4ID0gMDsKKyAgICBoZWFw c19zd2VlcF9pbmMgPSAoaGVhcHNfdXNlZCAvIDEwKSArIDE7CisgICAgZG9faGVhcF9mcmVlID0g KGhlYXBzX3VzZWQgKiBIRUFQX09CSl9MSU1JVCkgKiAwLjY1OworICAgIGZyZWVfbWluID0gKGhl YXBzX3VzZWQgKiBIRUFQX09CSl9MSU1JVCkgICogMC4yOworICAgIGlmIChmcmVlX21pbiA8IEZS RUVfTUlOKSBmcmVlX21pbiA9IEZSRUVfTUlOOworICAgIGlmIChmcmVlX21pbiA+IChoZWFwc191 c2VkICogSEVBUF9PQkpfTElNSVQgLSBsaXZlKSkgeworCXNldF9oZWFwc19pbmNyZW1lbnQob2Jq c3BhY2UpOworCWhlYXBzX3N3ZWVwX2luYyA9IChoZWFwc191c2VkICsgaGVhcHNfc3dlZXBfaW5j KSAvIGhlYXBzX3N3ZWVwX2luYyArIDE7CisgICAgfQorfQogCitzdGF0aWMgaW50CitnYXJiYWdl X2NvbGxlY3RfZm9yY2UocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCit7CisgICAgaWYgKG1hbGxv Y19pbmNyZWFzZSA+IG1hbGxvY19saW1pdCkgeworCW1hbGxvY19saW1pdCArPSAobWFsbG9jX2lu Y3JlYXNlIC0gbWFsbG9jX2xpbWl0KSAqIChkb3VibGUpbGl2ZSAvIChoZWFwc191c2VkICogSEVB UF9PQkpfTElNSVQpOworCWlmIChtYWxsb2NfbGltaXQgPCBHQ19NQUxMT0NfTElNSVQpIG1hbGxv Y19saW1pdCA9IEdDX01BTExPQ19MSU1JVDsKKyAgICB9CisgICAgbWFsbG9jX2luY3JlYXNlID0g MDsKKyAgICBnY19tYXJrcyhvYmpzcGFjZSwgR0VUX1RIUkVBRCgpKTsKKyAgICByZXR1cm4gZ2Fy YmFnZV9jb2xsZWN0KG9ianNwYWNlKTsKK30KKworc3RhdGljIGludAorZ2FyYmFnZV9jb2xsZWN0 KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQoreworICAgIHJiX3RocmVhZF90ICp0aCA9IEdFVF9U SFJFQUQoKTsKKworICAgIGlmIChHQ19OT1RJRlkpIHByaW50Zigic3RhcnQgZ2FyYmFnZV9jb2xs ZWN0KClcbiIpOworCisgICAgaWYgKCFoZWFwcykgeworCXJldHVybiBRZmFsc2U7CisgICAgfQor CisgICAgaWYgKGRvbnRfZ2MgfHwgZHVyaW5nX2djKSB7CisJaWYgKCFmcmVlbGlzdCkgeworICAg ICAgICAgICAgaWYgKCFoZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpKSB7CisgICAgICAgICAgICAg ICAgc2V0X2hlYXBzX2luY3JlbWVudChvYmpzcGFjZSk7CisgICAgICAgICAgICAgICAgaGVhcHNf aW5jcmVtZW50KG9ianNwYWNlKTsKKyAgICAgICAgICAgIH0KKwl9CisJcmV0dXJuIFF0cnVlOwor ICAgIH0KKyAgICBkdXJpbmdfZ2MrKzsKKyAgICBvYmpzcGFjZS0+Y291bnQrKzsKKworICAgIHdo aWxlICghZ2NfbGF6eV9zd2VlcChvYmpzcGFjZSwgdGgpKSB7CisgICAgICAgIGdjX21hcmtzKG9i anNwYWNlLCB0aCk7CisgICAgfQorCiAgICAgaWYgKEdDX05PVElGWSkgcHJpbnRmKCJlbmQgZ2Fy YmFnZV9jb2xsZWN0KClcbiIpOworICAgIGR1cmluZ19nYyA9IDA7CisKICAgICByZXR1cm4gUXRy dWU7CiB9CiAKQEAgLTIwMjUsNyArMjExOSw2IEBACiAgICAgaWYgKHApIHsKIAlmaW5hbGl6ZV9s aXN0KG9ianNwYWNlLCBwKTsKICAgICB9Ci0gICAgZnJlZV91bnVzZWRfaGVhcHMob2Jqc3BhY2Up OwogICAgIGR1cmluZ19nYyA9IDA7CiB9CiAKQEAgLTIwOTMsOCArMjE4Niw4IEBACiByYl9nYyh2 b2lkKQogewogICAgIHJiX29ianNwYWNlX3QgKm9ianNwYWNlID0gJnJiX29ianNwYWNlOworICAg IGdjX2ZpbmFsaXplX2RlZmVycmVkKG9ianNwYWNlKTsKICAgICBnYXJiYWdlX2NvbGxlY3Qob2Jq c3BhY2UpOwotICAgIGdjX2ZpbmFsaXplX2RlZmVycmVkKG9ianNwYWNlKTsKIH0KIAogLyoK ------=_Part_2423_15429198.1214673482896--