ZGlmZiAtLWdpdCBhL0luY2x1ZGUvbG9uZ2ludHJlcHIuaCBiL0luY2x1ZGUvbG9uZ2ludHJlcHIuaAppbmRleCA1NzU1YWRiLi45ZWQxZmU3IDEwMDY0NAotLS0gYS9JbmNsdWRlL2xvbmdpbnRyZXByLmgKKysrIGIvSW5jbHVkZS9sb25naW50cmVwci5oCkBAIC0xMiw3ICsxMiw3IEBACiAgICBjb250YWlucyBhdCBsZWFzdCAxNiBiaXRzLCBidXQgaXQncyBtYWRlIGNoYW5nZWFibGUgYW55d2F5LgogICAgTm90ZTogJ2RpZ2l0JyBzaG91bGQgYmUgYWJsZSB0byBob2xkIDIqTUFTSysxLCBhbmQgJ3R3b2RpZ2l0cycKICAgIHNob3VsZCBiZSBhYmxlIHRvIGhvbGQgdGhlIGludGVybWVkaWF0ZSByZXN1bHRzIGluICdtdWwnCi0gICAoYXQgbW9zdCBNQVNLIDw8IFNISUZUKS4KKyAgIChhdCBtb3N0IChCQVNFLTEpKigyKkJBU0UrMSkgPT0gTUFTSyooMipNQVNLKzMpKS4KICAgIEFsc28sIHhfc3ViIGFzc3VtZXMgdGhhdCAnZGlnaXQnIGlzIGFuIHVuc2lnbmVkIHR5cGUsIGFuZCBvdmVyZmxvdwogICAgaXMgaGFuZGxlZCBieSB0YWtpbmcgdGhlIHJlc3VsdCBtb2QgMioqTiBmb3Igc29tZSBOID4gU0hJRlQuCiAgICBBbmQsIGF0IHNvbWUgcGxhY2VzIGl0IGlzIGFzc3VtZWQgdGhhdCBNQVNLIGZpdHMgaW4gYW4gaW50LCBhcyB3ZWxsLiAqLwpkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IDZlYjBmNjQuLmRmZGYwMDUgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTQ0Miw2ICs0NDIsNyBAQAogRWR1YXJkbyBQ6XJlegogRmVybmFuZG8gUOlyZXoKIE1hcmsgUGVycmVnbworVHJldm9yIFBlcnJpbgogVGltIFBldGVycwogQ2hyaXMgUGV0cmlsbGkKIEJqb3JuIFBldHRlcnNlbgpkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IDQ2NTZmYTIuLjQzMWIzNDMgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTEyLDYgKzEyLDE2IEBACiBDb3JlIGFuZCBidWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBTb21lIHNwZWVkdXBzIGZvciBsb25nIGFyaXRobWV0aWMsIHRoYW5rcyB0byBUcmV2b3IgUGVycmluLiAgR3JhZGVzY2hvb2wKKyAgbXVsdGlwbGljYXRpb24gd2FzIHNwZWQgYSBsaXR0bGUgYnkgb3B0aW1pemluZyB0aGUgQyBjb2RlLiAgR3JhZGVzY2hvb2wKKyAgc3F1YXJpbmcgd2FzIHNwZWQgYnkgYWJvdXQgYSBmYWN0b3Igb2YgMiwgYnkgZXhwbG9pdGluZyB0aGF0IGFib3V0IGhhbGYKKyAgdGhlIGRpZ2l0IHByb2R1Y3RzIGFyZSBkdXBsaWNhdGVzIGluIGEgc3F1YXJlLiAgQmVjYXVzZSBleHBvbmVudGlhdGlvbgorICB1c2VzIHNxdWFyaW5nIG9mdGVuLCB0aGlzIGFsc28gc3BlZWRzIGxvbmcgcG93ZXIuICBGb3IgZXhhbXBsZSwgdGhlIHRpbWUKKyAgdG8gY29tcHV0ZSAxNyoqMTAwMDAwMCBkcm9wcGVkIGZyb20gYWJvdXQgMTQgc2Vjb25kcyB0byA5IG9uIG15IGJveCBkdWUKKyAgdG8gdGhpcyBtdWNoLiAgVGhlIGN1dG9mZiBmb3IgS2FyYXRzdWJhIG11bHRpcGxpY2F0aW9uIHdhcyByYWlzZWQsCisgIHNpbmNlIGdyYWRlc2Nob29sIG11bHRpcGxpY2F0aW9uIGdvdCBxdWlja2VyLCBhbmQgdGhlIGN1dG9mZiB3YXMKKyAgYWdncmVzc2l2ZWx5IHNtYWxsIHJlZ2FyZGxlc3MuCisKIC0gT3ZlcmZsb3dXYXJuaW5nIGlzIG5vIGxvbmdlciBnZW5lcmF0ZWQuICBQRVAgMjM3IHNjaGVkdWxlZCB0aGlzIHRvCiAgIG9jY3VyIGluIFB5dGhvbiAyLjMsIGJ1dCBzaW5jZSBPdmVyZmxvd1dhcm5pbmcgd2FzIGRpc2FibGVkIGJ5IGRlZmF1bHQsCiAgIG5vYm9keSByZWFsaXplZCBpdCB3YXMgc3RpbGwgYmVpbmcgZ2VuZXJhdGVkLiAgT24gdGhlIGNoYW5jZSB0aGF0IHVzZXIKZGlmZiAtLWdpdCBhL09iamVjdHMvbG9uZ29iamVjdC5jIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKaW5kZXggZjI0NmJkMi4uMmY2ZDEwMyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9sb25nb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKQEAgLTEyLDcgKzEyLDggQEAKICAqIGJvdGggb3BlcmFuZHMgY29udGFpbiBtb3JlIHRoYW4gS0FSQVRTVUJBX0NVVE9GRiBkaWdpdHMgKHRoaXMKICAqIGJlaW5nIGFuIGludGVybmFsIFB5dGhvbiBsb25nIGRpZ2l0LCBpbiBiYXNlIEJBU0UpLgogICovCi0jZGVmaW5lIEtBUkFUU1VCQV9DVVRPRkYgMzUKKyNkZWZpbmUgS0FSQVRTVUJBX0NVVE9GRiA3MAorI2RlZmluZSBLQVJBVFNVQkFfU1FVQVJFX0NVVE9GRiAoMiAqIEtBUkFUU1VCQV9DVVRPRkYpCiAKICNkZWZpbmUgQUJTKHgpICgoeCkgPCAwID8gLSh4KSA6ICh4KSkKIApAQCAtMTcxNywyNiArMTcxOCw3MiBAQAogCQlyZXR1cm4gTlVMTDsKIAogCW1lbXNldCh6LT5vYl9kaWdpdCwgMCwgei0+b2Jfc2l6ZSAqIHNpemVvZihkaWdpdCkpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplX2E7ICsraSkgewotCQl0d29kaWdpdHMgY2FycnkgPSAwOwotCQl0d29kaWdpdHMgZiA9IGEtPm9iX2RpZ2l0W2ldOwotCQlpbnQgajsKLQkJZGlnaXQgKnB6ID0gei0+b2JfZGlnaXQgKyBpOworCWlmIChhID09IGIpIHsKKwkJLyogRWZmaWNpZW50IHNxdWFyaW5nIHBlciBIQUMsIEFsZ29yaXRobSAxNC4xNjoKKwkJICogaHR0cDovL3d3dy5jYWNyLm1hdGgudXdhdGVybG9vLmNhL2hhYy9hYm91dC9jaGFwMTQucGRmCisJCSAqIEdpdmVzIHNsaWdodGx5IGxlc3MgdGhhbiBhIDJ4IHNwZWVkdXAgd2hlbiBhID09IGIsCisJCSAqIHZpYSBleHBsb2l0aW5nIHRoYXQgZWFjaCBlbnRyeSBpbiB0aGUgbXVsdGlwbGljYXRpb24KKwkJICogcHlyYW1pZCBhcHBlYXJzIHR3aWNlIChleGNlcHQgZm9yIHRoZSBzaXplX2Egc3F1YXJlcykuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZV9hOyArK2kpIHsKKwkJCXR3b2RpZ2l0cyBjYXJyeTsKKwkJCXR3b2RpZ2l0cyBmID0gYS0+b2JfZGlnaXRbaV07CisJCQlkaWdpdCAqcHogPSB6LT5vYl9kaWdpdCArIChpIDw8IDEpOworCQkJZGlnaXQgKnBhID0gYS0+b2JfZGlnaXQgKyBpICsgMTsKKwkJCWRpZ2l0ICpwYWVuZCA9IGEtPm9iX2RpZ2l0ICsgc2l6ZV9hOwogCi0JCVNJR0NIRUNLKHsKLQkJCVB5X0RFQ1JFRih6KTsKLQkJCXJldHVybiBOVUxMOwotCQl9KQotCQlmb3IgKGogPSAwOyBqIDwgc2l6ZV9iOyArK2opIHsKLQkJCWNhcnJ5ICs9ICpweiArIGItPm9iX2RpZ2l0W2pdICogZjsKLQkJCSpweisrID0gKGRpZ2l0KSAoY2FycnkgJiBNQVNLKTsKKwkJCVNJR0NIRUNLKHsKKwkJCQlQeV9ERUNSRUYoeik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9KQorCisJCQljYXJyeSA9ICpweiArIGYgKiBmOworCQkJKnB6KysgPSAoZGlnaXQpKGNhcnJ5ICYgTUFTSyk7CiAJCQljYXJyeSA+Pj0gU0hJRlQ7CisJCQlhc3NlcnQoY2FycnkgPD0gTUFTSyk7CisKKwkJCS8qIE5vdyBmIGlzIGFkZGVkIGluIHR3aWNlIGluIGVhY2ggY29sdW1uIG9mIHRoZQorCQkJICogcHlyYW1pZCBpdCBhcHBlYXJzLiAgU2FtZSBhcyBhZGRpbmcgZjw8MSBvbmNlLgorCQkJICovCisJCQlmIDw8PSAxOworCQkJd2hpbGUgKHBhIDwgcGFlbmQpIHsKKwkJCQljYXJyeSArPSAqcHogKyAqcGErKyAqIGY7CisJCQkJKnB6KysgPSAoZGlnaXQpKGNhcnJ5ICYgTUFTSyk7CisJCQkJY2FycnkgPj49IFNISUZUOworCQkJCWFzc2VydChjYXJyeSA8PSAoTUFTSyA8PCAxKSk7CisJCQl9CisJCQlpZiAoY2FycnkpIHsKKwkJCQljYXJyeSArPSAqcHo7CisJCQkJKnB6KysgPSAoZGlnaXQpKGNhcnJ5ICYgTUFTSyk7CisJCQkJY2FycnkgPj49IFNISUZUOworCQkJfQorCQkJaWYgKGNhcnJ5KQorCQkJCSpweiArPSAoZGlnaXQpKGNhcnJ5ICYgTUFTSyk7CisJCQlhc3NlcnQoKGNhcnJ5ID4+IFNISUZUKSA9PSAwKTsKIAkJfQotCQlmb3IgKDsgY2FycnkgIT0gMDsgKytqKSB7Ci0JCQlhc3NlcnQoaStqIDwgei0+b2Jfc2l6ZSk7Ci0JCQljYXJyeSArPSAqcHo7Ci0JCQkqcHorKyA9IChkaWdpdCkgKGNhcnJ5ICYgTUFTSyk7Ci0JCQljYXJyeSA+Pj0gU0hJRlQ7CisJfQorCWVsc2UgewkvKiBhIGlzIG5vdCB0aGUgc2FtZSBhcyBiIC0tIGdyYWRlc2Nob29sIGxvbmcgbXVsdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZV9hOyArK2kpIHsKKwkJCXR3b2RpZ2l0cyBjYXJyeSA9IDA7CisJCQl0d29kaWdpdHMgZiA9IGEtPm9iX2RpZ2l0W2ldOworCQkJZGlnaXQgKnB6ID0gei0+b2JfZGlnaXQgKyBpOworCQkJZGlnaXQgKnBiID0gYi0+b2JfZGlnaXQ7CisJCQlkaWdpdCAqcGJlbmQgPSBiLT5vYl9kaWdpdCArIHNpemVfYjsKKworCQkJU0lHQ0hFQ0soeworCQkJCVB5X0RFQ1JFRih6KTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0pCisKKwkJCXdoaWxlIChwYiA8IHBiZW5kKSB7CisJCQkJY2FycnkgKz0gKnB6ICsgKnBiKysgKiBmOworCQkJCSpweisrID0gKGRpZ2l0KShjYXJyeSAmIE1BU0spOworCQkJCWNhcnJ5ID4+PSBTSElGVDsKKwkJCQlhc3NlcnQoY2FycnkgPD0gTUFTSyk7CisJCQl9CisJCQlpZiAoY2FycnkpCisJCQkJKnB6ICs9IChkaWdpdCkoY2FycnkgJiBNQVNLKTsKKwkJCWFzc2VydCgoY2FycnkgPj4gU0hJRlQpID09IDApOwogCQl9CiAJfQogCXJldHVybiBsb25nX25vcm1hbGl6ZSh6KTsKQEAgLTE4MTYsNyArMTg2Myw4IEBACiAJfQogCiAJLyogVXNlIGdyYWRlc2Nob29sIG1hdGggd2hlbiBlaXRoZXIgbnVtYmVyIGlzIHRvbyBzbWFsbC4gKi8KLQlpZiAoYXNpemUgPD0gS0FSQVRTVUJBX0NVVE9GRikgeworCWkgPSBhID09IGIgPyBLQVJBVFNVQkFfU1FVQVJFX0NVVE9GRiA6IEtBUkFUU1VCQV9DVVRPRkY7CisJaWYgKGFzaXplIDw9IGkpIHsKIAkJaWYgKGFzaXplID09IDApCiAJCQlyZXR1cm4gX1B5TG9uZ19OZXcoMCk7CiAJCWVsc2UKQEAgLTE4MzcsNyArMTg4NSwxMyBAQAogCWlmIChrbXVsX3NwbGl0KGEsIHNoaWZ0LCAmYWgsICZhbCkgPCAwKSBnb3RvIGZhaWw7CiAJYXNzZXJ0KGFoLT5vYl9zaXplID4gMCk7CS8qIHRoZSBzcGxpdCBpc24ndCBkZWdlbmVyYXRlICovCiAKLQlpZiAoa211bF9zcGxpdChiLCBzaGlmdCwgJmJoLCAmYmwpIDwgMCkgZ290byBmYWlsOworCWlmIChhID09IGIpIHsKKwkJYmggPSBhaDsKKwkJYmwgPSBhbDsKKwkJUHlfSU5DUkVGKGJoKTsKKwkJUHlfSU5DUkVGKGJsKTsKKwl9CisJZWxzZSBpZiAoa211bF9zcGxpdChiLCBzaGlmdCwgJmJoLCAmYmwpIDwgMCkgZ290byBmYWlsOwogCiAJLyogVGhlIHBsYW46CiAJICogMS4gQWxsb2NhdGUgcmVzdWx0IHNwYWNlIChhc2l6ZSArIGJzaXplIGRpZ2l0czogIHRoYXQncyBhbHdheXMKQEAgLTE5MDYsNyArMTk2MCwxMSBAQAogCVB5X0RFQ1JFRihhbCk7CiAJYWggPSBhbCA9IE5VTEw7CiAKLQlpZiAoKHQyID0geF9hZGQoYmgsIGJsKSkgPT0gTlVMTCkgeworCWlmIChhID09IGIpIHsKKwkJdDIgPSB0MTsKKwkJUHlfSU5DUkVGKHQyKTsKKwl9CisJZWxzZSBpZiAoKHQyID0geF9hZGQoYmgsIGJsKSkgPT0gTlVMTCkgewogCQlQeV9ERUNSRUYodDEpOwogCQlnb3RvIGZhaWw7CiAJfQo=