From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: usb: dwc2: Revert "usb: dwc2: Disable all EP's on disconnect" From: Dan Carpenter Message-Id: <20181207101532.GR3073@unbuntlaptop> Date: Fri, 7 Dec 2018 13:15:32 +0300 To: Minas Harutyunyan Cc: Marek Szyprowski , Maynard CABIENTE , "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" , Greg Kroah-Hartman , Felipe Balbi , Geert Uytterhoeven , Bartlomiej Zolnierkiewicz List-ID: T24gV2VkLCBEZWMgMDUsIDIwMTggYXQgMTI6NTI6MjJQTSArMDAwMCwgTWluYXMgSGFydXR5dW55 YW4gd3JvdGU6Cj4gSGksCj4gCj4gT24gMTIvNC8yMDE4IDU6MjkgUE0sIERhbiBDYXJwZW50ZXIg d3JvdGU6Cj4gPiBPbiBUdWUsIERlYyAwNCwgMjAxOCBhdCAxMjozNDowOFBNICswMDAwLCBNaW5h cyBIYXJ1dHl1bnlhbiB3cm90ZToKPiA+PiBAQCAtMzE4NSwxMiArMzE4MywxMyBAQCB2b2lkIGR3 YzJfaHNvdGdfZGlzY29ubmVjdChzdHJ1Y3QgZHdjMl9oc290ZyAqaHNvdGcpCj4gPj4gICAgICAg ICAgIGhzb3RnLT5jb25uZWN0ZWQgPSAwOwo+ID4+ICAgICAgICAgICBoc290Zy0+dGVzdF9tb2Rl ID0gMDsKPiA+Pgo+ID4+IC0gICAgICAgLyogYWxsIGVuZHBvaW50cyBzaG91bGQgYmUgc2h1dGRv d24gKi8KPiA+PiAgICAgICAgICAgZm9yIChlcCA9IDA7IGVwIDwgaHNvdGctPm51bV9vZl9lcHM7 IGVwKyspIHsKPiA+PiAgICAgICAgICAgICAgICAgICBpZiAoaHNvdGctPmVwc19pbltlcF0pCj4g Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgZHdjMl9oc290Z19lcF9kaXNhYmxlKCZoc290Zy0+ ZXBzX2luW2VwXS0+ZXApOwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgIGtpbGxfYWxsX3Jl cXVlc3RzKGhzb3RnLCBoc290Zy0+ZXBzX2luW2VwXSwKPiA+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUVTSFVURE9XTik7Cj4gPj4g ICAgICAgICAgICAgICAgICAgaWYgKGhzb3RnLT5lcHNfb3V0W2VwXSkKPiA+PiAtICAgICAgICAg ICAgICAgICAgICAgICBkd2MyX2hzb3RnX2VwX2Rpc2FibGUoJmhzb3RnLT5lcHNfb3V0W2VwXS0+ ZXApOwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgIGtpbGxfYWxsX3JlcXVlc3RzKGhzb3Rn LCBoc290Zy0+ZXBzX291dFtlcF0sCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FU0hVVERPV04pOwo+ID4gCj4gPiAKPiA+IFNo b3VsZCB0aGlzIHBhcnQgYmUgaW4gYSBzZXBhcmF0ZSBwYXRjaD8KPiA+IAo+ID4gSSdtIG5vdCB0 cnlpbmcgdG8gYmUgcmhldG9yaWNhbCBhdCBhbGwuICBJIGxpdGVyYWxseSBkb24ndCBrbm93IHRo ZQo+ID4gY29kZSB2ZXJ5IHdlbGwuICBIb3BlZnVsbHkgdGhlIGZ1bGwgY29tbWl0IG1lc3NhZ2Ug d2lsbCBleHBsYWluIGl0Lgo+ID4gCj4gCj4gQWN0dWFsbHksIHRoaXMgZnJhZ21lbnQgb2YgcGF0 Y2ggcmV2ZXJ0IGNoYW5nZXMgZnJvbSBWMiBhbmQga2VlcCAKPiB1bnRvdWNoZWQgZHdjMl9oc290 Z19kaXNjb25uZWN0KCkgZnVuY3Rpb24uCj4gCgpUbyBtZSBpdCBmZWVscyBsaWtlIHRoZXJlIGFy ZSB0d28gaXNzdWVzLiAgVGhlIGZpcnN0IGlzIHRoaXMgY2hhbmdlLCBhbmQKdGhlIHNlY29uZCBp cyBmaXhpbmcgdGhlIGxvY2tkZXAgd2FybmluZy4KCgo+ID4+ICAgICAgICAgICB9Cj4gPj4KPiA+ PiAgICAgICAgICAgY2FsbF9nYWRnZXQoaHNvdGcsIGRpc2Nvbm5lY3QpOwo+ID4+IEBAIC0zMjM0 LDYgKzMyMzMsOCBAQCBzdGF0aWMgdm9pZCBkd2MyX2hzb3RnX2lycV9maWZvZW1wdHkoc3RydWN0 Cj4gPj4gZHdjMl9oc290ZyAqaHNvdGcsIGJvb2wgcGVyaW9kaWMpCj4gPj4gICAgICAgICAgICAg ICAgICAgICAgICAgICBHSU5UU1RTX1BUWEZFTVAgfCAgXAo+ID4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0lOVFNUU19SWEZMVkwpCj4gPj4KPiA+PiArc3RhdGljIGludCBkd2MyX2hzb3Rn X2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqZXApOwo+ID4+ICsKPiA+PiAgICAvKioKPiA+PiAg ICAgKiBkd2MyX2hzb3RnX2NvcmVfaW5pdCAtIGlzc3VlIHNvZnRyZXNldCB0byB0aGUgY29yZQo+ ID4+ICAgICAqIEBoc290ZzogVGhlIGRldmljZSBzdGF0ZQo+ID4+IEBAIC0zMjU4LDEyICszMjU5 LDE0IEBAIHZvaWQgZHdjMl9oc290Z19jb3JlX2luaXRfZGlzY29ubmVjdGVkKHN0cnVjdAo+ID4+ IGR3YzJfaHNvdGcgKmhzb3RnLAo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu Owo+ID4+ICAgICAgICAgICB9IGVsc2Ugewo+ID4+ICAgICAgICAgICAgICAgICAgIC8qIGFsbCBl bmRwb2ludHMgc2hvdWxkIGJlIHNodXRkb3duICovCj4gPj4gKyAgICAgICAgICAgICAgIHNwaW5f dW5sb2NrKCZoc290Zy0+bG9jayk7Cj4gPj4gICAgICAgICAgICAgICAgICAgZm9yIChlcCA9IDE7 IGVwIDwgaHNvdGctPm51bV9vZl9lcHM7IGVwKyspIHsKPiA+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChoc290Zy0+ZXBzX2luW2VwXSkKPiA+PiAgIAo+ID4+IGR3YzJfaHNvdGdfZXBf ZGlzYWJsZSgmaHNvdGctPmVwc19pbltlcF0tPmVwKTsKPiA+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChoc290Zy0+ZXBzX291dFtlcF0pCj4gPj4gICAKPiA+PiBkd2MyX2hzb3RnX2Vw X2Rpc2FibGUoJmhzb3RnLT5lcHNfb3V0W2VwXS0+ZXApOwo+ID4+ICAgICAgICAgICAgICAgICAg IH0KPiA+PiArICAgICAgICAgICAgICAgc3Bpbl9sb2NrKCZoc290Zy0+bG9jayk7Cj4gPj4gICAg ICAgICAgIH0KPiA+Pgo+ID4+ICAgICAgICAgICAvKgo+ID4gCj4gPiBUaGUgaWRlYSBoZXJlIGlz IHRoYXQgdGhpcyBpcyB0aGUgb25seSBjYWxsZXIgd2hpY2ggaXMgaG9sZGluZyB0aGUKPiA+IGxv Y2sgYW5kIHdlIGRyb3AgaXQgaGVyZSBhbmQgdGFrZSBpdCBhZ2FpbiBpbnNpZGUgZHdjMl9oc290 Z19lcF9kaXNhYmxlKCkuCj4gPiBJIGRvbid0IGtub3cgdGhlIGNvZGUgdmVyeSB3ZWxsIGFuZCBj YW4ndCB0b3RhbGx5IHN3ZWFyIHRoYXQgdGhpcwo+ID4gZG9lc24ndCBpbnRyb2R1Y2UgYSBzbWFs bCByYWNlIGNvbmRpdGlvbi4uLgo+ID4gCj4gQWJvdmUgZnJhZ21lbnQgb2YgcGF0Y2ggYWxsb3cg dG8ga2VlcCB1bnRvdWNoZWQgZHdjMl9oc290Z19lcF9kaXNibGUoKSAKPiBmdW5jdGlvbiBhbHNv LCB3aXRob3V0IGNoYW5naW5nIHNwaW5fbG9jay9fdW5sb2NrIHN0dWZmIGluc2lkZSBmdW5jdGlv bi4KPiAKPiBNeSBhcHByb2FjaCBoZXJlIG1pbmltYWxseSB1cGRhdGUgY29kZSB0byBhZGQgYW55 IHJhY2VzLiBKdXN0IGluIAo+IGR3YzJfaHNvdGdfY29yZV9pbml0X2Rpc2Nvbm5lY3RlZCgpIGZ1 bmN0aW9uIG9uIFVTQiByZXNldCBpbnRlcnJ1cHQgCj4gcGVyZm9ybSBkaXNhYmxpbmcgYWxsIEVQ J3MuIEJlY2F1c2Ugb24gVVNCIHJlc2V0IGludGVycnVwdCwgY2FsbGVkIGZyb20gaW50ZXJydXB0 IAo+IGhhbmRsZXIgd2l0aCBhY3F1aXJlZCBsb2NrIGFuZCBkd2MyX2hzb3RnX2VwX2Rpc2JsZSgp IGZ1bmN0aW9uICh3aXRob3V0IAo+IGNoYW5nZXMpIGFjcXVpcmUgbG9jaywganVzdCBuZWVkIHRv IHVubG9jayBsb2NrIHRvIGF2b2lkIGFueSB0cm91Ymxlcy4KPiAKClllcy4gIEkgdW5kZXJzdGFu ZCB0aGF0LiAgSSBqdXN0IGRvbid0IGxpa2UgaXQuCgpBbHRob3VnaCB5b3VyIHBhdGNoIGlzIG1v cmUgIm1pbmltYWwiIGluIHRoYXQgaXQgdG91Y2hlcyBmZXdlciBsaW5lcyBvZgpjb2RlIGl0J3Mg YWN0dWFsbHkgbW9yZSBjb21wbGljYXRlZCBiZWNhdXNlIHdlIGhhdmUgdG8gdmVyaWZ5IHRoYXQg aXQncwpzYWZlIHRvIGRyb3AgdGhlIGxvY2suCgoKPiA+IEFub3RoZXIgb3B0aW9uIHdvdWxkIGJl IHRvIGludHJvZHVjZSBhIG5ldyBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbG9jawo+ID4gYW5k IGNoYW5nZSBhbGwgdGhlIG90aGVyIGNhbGxlcnMgaW5zdGVhZC4gIFRvIG1lIHRoYXQgd291bGQg YmUgZWFzaWVyIHRvCj4gPiByZXZpZXcuLi4gIFNlZSBiZWxvdyBmb3IgaG93IGl0IG1pZ2h0IGxv b2s6Cj4gPiAKPiA+IHJlZ2FyZHMsCj4gPiBkYW4gY2FycGVudGVyCj4gPiAKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jIGIvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQu Ywo+ID4gaW5kZXggOTRmM2JhOTk1NTgwLi5iMTdhNWRiZWZkNWYgMTAwNjQ0Cj4gPiAtLS0gYS9k cml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jCj4gPiArKysgYi9kcml2ZXJzL3VzYi9kd2MyL2dhZGdl dC5jCj4gPiBAQCAtMzE2Niw2ICszMTY2LDcgQEAgc3RhdGljIHZvaWQga2lsbF9hbGxfcmVxdWVz dHMoc3RydWN0IGR3YzJfaHNvdGcgKmhzb3RnLAo+ID4gICB9Cj4gPiAgIAo+ID4gICBzdGF0aWMg aW50IGR3YzJfaHNvdGdfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICplcCk7Cj4gPiArc3RhdGlj IGludCBkd2MyX2hzb3RnX2VwX2Rpc2FibGVfbG9jayhzdHJ1Y3QgdXNiX2VwICplcCk7Cj4gPiAg IAo+ID4gICAvKioKPiA+ICAgICogZHdjMl9oc290Z19kaXNjb25uZWN0IC0gZGlzY29ubmVjdCBz ZXJ2aWNlCj4gPiBAQCAtMzE4OCw5ICszMTg5LDkgQEAgdm9pZCBkd2MyX2hzb3RnX2Rpc2Nvbm5l Y3Qoc3RydWN0IGR3YzJfaHNvdGcgKmhzb3RnKQo+ID4gICAJLyogYWxsIGVuZHBvaW50cyBzaG91 bGQgYmUgc2h1dGRvd24gKi8KPiA+ICAgCWZvciAoZXAgPSAwOyBlcCA8IGhzb3RnLT5udW1fb2Zf ZXBzOyBlcCsrKSB7Cj4gPiAgIAkJaWYgKGhzb3RnLT5lcHNfaW5bZXBdKQo+ID4gLQkJCWR3YzJf aHNvdGdfZXBfZGlzYWJsZSgmaHNvdGctPmVwc19pbltlcF0tPmVwKTsKPiA+ICsJCQlkd2MyX2hz b3RnX2VwX2Rpc2FibGVfbG9jaygmaHNvdGctPmVwc19pbltlcF0tPmVwKTsKPiA+ICAgCQlpZiAo aHNvdGctPmVwc19vdXRbZXBdKQo+ID4gLQkJCWR3YzJfaHNvdGdfZXBfZGlzYWJsZSgmaHNvdGct PmVwc19vdXRbZXBdLT5lcCk7Cj4gPiArCQkJZHdjMl9oc290Z19lcF9kaXNhYmxlX2xvY2soJmhz b3RnLT5lcHNfb3V0W2VwXS0+ZXApOwo+ID4gICAJfQo+ID4gICAKPiA+ICAgCWNhbGxfZ2FkZ2V0 KGhzb3RnLCBkaXNjb25uZWN0KTsKPiA+IEBAIC00MDY5LDEwICs0MDcwLDggQEAgc3RhdGljIGlu dCBkd2MyX2hzb3RnX2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqZXApCj4gPiAgIAlzdHJ1Y3Qg ZHdjMl9oc290ZyAqaHNvdGcgPSBoc19lcC0+cGFyZW50Owo+ID4gICAJaW50IGRpcl9pbiA9IGhz X2VwLT5kaXJfaW47Cj4gPiAgIAlpbnQgaW5kZXggPSBoc19lcC0+aW5kZXg7Cj4gPiAtCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4gPiAgIAl1MzIgZXBjdHJsX3JlZzsKPiA+ICAgCXUzMiBjdHJsOwo+ ID4gLQlpbnQgbG9ja2VkOwo+ID4gICAKPiA+ICAgCWRldl9kYmcoaHNvdGctPmRldiwgIiVzKGVw ICVwKVxuIiwgX19mdW5jX18sIGVwKTsKPiA+ICAgCj4gPiBAQCAtNDA4OCwxMCArNDA4Nyw2IEBA IHN0YXRpYyBpbnQgZHdjMl9oc290Z19lcF9kaXNhYmxlKHN0cnVjdCB1c2JfZXAgKmVwKQo+ID4g ICAKPiA+ICAgCWVwY3RybF9yZWcgPSBkaXJfaW4gPyBESUVQQ1RMKGluZGV4KSA6IERPRVBDVEwo aW5kZXgpOwo+ID4gICAKPiA+IC0JbG9ja2VkID0gc3Bpbl9pc19sb2NrZWQoJmhzb3RnLT5sb2Nr KTsKPiA+IC0JaWYgKCFsb2NrZWQpCj4gPiAtCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHNvdGctPmxv Y2ssIGZsYWdzKTsKPiA+IC0KPiA+ICAgCWN0cmwgPSBkd2MyX3JlYWRsKGhzb3RnLCBlcGN0cmxf cmVnKTsKPiA+ICAgCj4gPiAgIAlpZiAoY3RybCAmIERYRVBDVExfRVBFTkEpCj4gPiBAQCAtNDEx NCwxMiArNDEwOSwyMyBAQCBzdGF0aWMgaW50IGR3YzJfaHNvdGdfZXBfZGlzYWJsZShzdHJ1Y3Qg dXNiX2VwICplcCkKPiA+ICAgCWhzX2VwLT5maWZvX2luZGV4ID0gMDsKPiA+ICAgCWhzX2VwLT5m aWZvX3NpemUgPSAwOwo+ID4gICAKPiA+IC0JaWYgKCFsb2NrZWQpCj4gPiAtCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZoc290Zy0+bG9jaywgZmxhZ3MpOwo+ID4gLQo+ID4gICAJcmV0dXJuIDA7 Cj4gPiAgIH0KPiA+ICAgCj4gPiArc3RhdGljIGludCBkd2MyX2hzb3RnX2VwX2Rpc2FibGVfbG9j ayhzdHJ1Y3QgdXNiX2VwICplcCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkd2MyX2hzb3RnX2VwICpo c19lcCA9IG91cl9lcChlcCk7Cj4gPiArCXN0cnVjdCBkd2MyX2hzb3RnICpoc290ZyA9IGhzX2Vw LT5wYXJlbnQ7Cj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiArCWludCByZXQ7Cj4gPiAr Cj4gPiArCXNwaW5fbG9ja19pcnFzYXZlKCZoc290Zy0+bG9jaywgZmxhZ3MpOwo+ID4gKwlyZXQg PSBkd2MyX2hzb3RnX2VwX2Rpc2FibGUoZXApOwo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZoc290Zy0+bG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ ICsKPiA+ICAgLyoqCj4gPiAgICAqIG9uX2xpc3QgLSBjaGVjayByZXF1ZXN0IGlzIG9uIHRoZSBn aXZlbiBlbmRwb2ludAo+ID4gICAgKiBAZXA6IFRoZSBlbmRwb2ludCB0byBjaGVjay4KPiA+IEBA IC00MjY3LDcgKzQyNzMsNyBAQCBzdGF0aWMgaW50IGR3YzJfaHNvdGdfZXBfc2V0aGFsdF9sb2Nr KHN0cnVjdCB1c2JfZXAgKmVwLCBpbnQgdmFsdWUpCj4gPiAgIAo+ID4gICBzdGF0aWMgY29uc3Qg c3RydWN0IHVzYl9lcF9vcHMgZHdjMl9oc290Z19lcF9vcHMgPSB7Cj4gPiAgIAkuZW5hYmxlCQk9 IGR3YzJfaHNvdGdfZXBfZW5hYmxlLAo+ID4gLQkuZGlzYWJsZQk9IGR3YzJfaHNvdGdfZXBfZGlz YWJsZSwKPiA+ICsJLmRpc2FibGUJPSBkd2MyX2hzb3RnX2VwX2Rpc2FibGVfbG9jaywKPiA+ICAg CS5hbGxvY19yZXF1ZXN0CT0gZHdjMl9oc290Z19lcF9hbGxvY19yZXF1ZXN0LAo+ID4gICAJLmZy ZWVfcmVxdWVzdAk9IGR3YzJfaHNvdGdfZXBfZnJlZV9yZXF1ZXN0LAo+ID4gICAJLnF1ZXVlCQk9 IGR3YzJfaHNvdGdfZXBfcXVldWVfbG9jaywKPiA+IEBAIC00NDA3LDkgKzQ0MTMsOSBAQCBzdGF0 aWMgaW50IGR3YzJfaHNvdGdfdWRjX3N0b3Aoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKPiA+ ICAgCS8qIGFsbCBlbmRwb2ludHMgc2hvdWxkIGJlIHNodXRkb3duICovCj4gPiAgIAlmb3IgKGVw ID0gMTsgZXAgPCBoc290Zy0+bnVtX29mX2VwczsgZXArKykgewo+ID4gICAJCWlmIChoc290Zy0+ ZXBzX2luW2VwXSkKPiA+IC0JCQlkd2MyX2hzb3RnX2VwX2Rpc2FibGUoJmhzb3RnLT5lcHNfaW5b ZXBdLT5lcCk7Cj4gPiArCQkJZHdjMl9oc290Z19lcF9kaXNhYmxlX2xvY2soJmhzb3RnLT5lcHNf aW5bZXBdLT5lcCk7Cj4gPiAgIAkJaWYgKGhzb3RnLT5lcHNfb3V0W2VwXSkKPiA+IC0JCQlkd2My X2hzb3RnX2VwX2Rpc2FibGUoJmhzb3RnLT5lcHNfb3V0W2VwXS0+ZXApOwo+ID4gKwkJCWR3YzJf aHNvdGdfZXBfZGlzYWJsZV9sb2NrKCZoc290Zy0+ZXBzX291dFtlcF0tPmVwKTsKPiA+ICAgCX0K PiA+ICAgCj4gPiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHNvdGctPmxvY2ssIGZsYWdzKTsKPiA+ IEBAIC00ODU3LDkgKzQ4NjMsOSBAQCBpbnQgZHdjMl9oc290Z19zdXNwZW5kKHN0cnVjdCBkd2My X2hzb3RnICpoc290ZykKPiA+ICAgCj4gPiAgIAkJZm9yIChlcCA9IDA7IGVwIDwgaHNvdGctPm51 bV9vZl9lcHM7IGVwKyspIHsKPiA+ICAgCQkJaWYgKGhzb3RnLT5lcHNfaW5bZXBdKQo+ID4gLQkJ CQlkd2MyX2hzb3RnX2VwX2Rpc2FibGUoJmhzb3RnLT5lcHNfaW5bZXBdLT5lcCk7Cj4gPiArCQkJ CWR3YzJfaHNvdGdfZXBfZGlzYWJsZV9sb2NrKCZoc290Zy0+ZXBzX2luW2VwXS0+ZXApOwo+ID4g ICAJCQlpZiAoaHNvdGctPmVwc19vdXRbZXBdKQo+ID4gLQkJCQlkd2MyX2hzb3RnX2VwX2Rpc2Fi bGUoJmhzb3RnLT5lcHNfb3V0W2VwXS0+ZXApOwo+ID4gKwkJCQlkd2MyX2hzb3RnX2VwX2Rpc2Fi bGVfbG9jaygmaHNvdGctPmVwc19vdXRbZXBdLT5lcCk7Cj4gPiAgIAkJfQo+ID4gICAJfQo+ID4g ICAKPiA+IAo+IAo+IFlvdXIgY29kZSBkb2Vzbid0IHRha2UgY2FyZSBhYm91dCBmaWZvX21hcCB3 YXJuaW5ncyBmcm9tIAo+IGR3YzJfaHNvdGdfaW5pdF9maWZvKCkgZnVuY3Rpb24uIEJlZm9yZSBj YWxsaW5nIGR3YzJfaHNvdGdfaW5pdF9maWZvKCkgCj4gZnJvbSBkd2MyX2hzb3RnX2NvcmVfaW5p dF9kaXNjb25uZWN0ZWQoKSBmdW5jdGlvbiBhbGwgRXAncyBzaG91bGQgCj4gZGlzYWJsZWQgYW5k IGZpZm8gYml0bWFwIHNob3VsZCBiZSBjbGVhcmVkLgo+IAoKQ29ycmVjdC4gIEkgYW0gb25seSB0 cnlpbmcgdG8gZml4IHRoZSBsb2NraW5nLiAgSSBob3BlIHlvdSBjYW4gZml4IHRoZQpyZXN0IGlu IGEgc2VwYXJhdGUgcGF0Y2guCgpyZWdhcmRzLApkYW4gY2FycGVudGVyCg==