ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3ZTU4N2M3Li4yMzJlYjEyIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOCBAQAorV2VkIE1heSAgMiAxNDozOTo1NyBDRVNUIDIwMDEgRGFuaWVsIFZlaWxsYXJkIDxEYW5pZWwuVmVpbGxhcmRAaW1hZy5mcj4KKworCSogRE9DQnBhcnNlci5jOiBwYXRjaGUgZnJvbSAgTOFzemzzIEtvduFjcywgZml4ZWQgZW50aXRpZXMgcmVmcworCSAgaW4gYXR0cmlidXRlcyBoYW5kbGluZworCiBXZWQgTWF5ICAyIDEyOjU2OjA0IENFU1QgMjAwMSBEYW5pZWwgVmVpbGxhcmQgPERhbmllbC5WZWlsbGFyZEBpbWFnLmZyPgogCiAJKiB4bWxJTy5jOiBCam9ybiBSZWVzZSBwcm92aWRlZCBhIGZpeCBmb3IgYSBwcm9ibGVtIG9uIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvRE9DQnBhcnNlci5jIGIvRE9DQnBhcnNlci5jCmluZGV4IGQxYjE3NmQuLjc3OWU3YWIgMTAwNjQ0Ci0tLSBhL0RPQ0JwYXJzZXIuYworKysgYi9ET0NCcGFyc2VyLmMKQEAgLTUwMyw2ICs1MDMsNyBAQAogeyAiZGF0ZSIsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgNCwgICAgICAwLCAiIiB9LCAvKiBkb2NpbmZvICovCiB7ICJkZWRpY2F0aW9uIiwgICAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDksICAgICAgMCwgIiIgfSwgLyogc2VjdC50aXRsZS5jb250ZW50ICovCiB7ICJkZXN0cnVjdG9yc3lub3BzaXMiLDAsMCwgICAgMCwgICAgICA5LCAgICAgIDAsICIiIH0sIC8qIG1vZGlmaWVyICovCit7ICJkb2NpbmZvIiwgICAwLCAgICAgIDAsICAgICAgMCwgICAgICA5LCAgICAgIDAsICIiIH0sCiB7ICJlZGl0aW9uIiwgICAwLCAgICAgIDAsICAgICAgMCwgICAgICA0LCAgICAgIDAsICIiIH0sIC8qIGRvY2luZm8gKi8KIHsgImVkaXRvciIsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDksICAgICAgMCwgIiIgfSwgLyogcGVyc29uLmlkZW50Lm1peCAqLwogeyAiZW1haWwiLCAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgNCwgICAgICAwLCAiIiB9LCAvKiBkb2NpbmZvICovCkBAIC01MzksOCArNTQwLDggQEAKIHsgImdsb3NzZGl2IiwgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDksICAgICAgMCwgIiIgfSwgLyogc2VjdC50aXRsZS5jb250ZW50ICovCiB7ICJnbG9zc2VudHJ5IiwgICAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDksICAgICAgMCwgIiIgfSwgLyogZ2xvc3N0ZXJtICovCiB7ICJnbG9zc2xpc3QiLCAwLCAgICAgIDAsICAgICAgMCwgICAgICA5LCAgICAgIDAsICIiIH0sIC8qIGdsb3NzZW50cnkgKi8KLXsgImdsb3Nzc2VlYWxzbyIsMCwgICAgMCwgICAgICAwLCAgICAgIDIsICAgICAgMCwgIiIgfSwgLyogcGFyYSAqLwoteyAiZ2xvc3NzZWUiLCAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMiwgICAgICAwLCAiIiB9LCAvKiBwYXJhICovCit7ICJnbG9zc3NlZWFsc28iLDAsICAgIDAsICAgICAgMSwgICAgICAyLCAgICAgIDAsICIiIH0sIC8qIHBhcmEgKi8KK3sgImdsb3Nzc2VlIiwgIDAsICAgICAgMCwgICAgICAxLCAgICAgIDIsICAgICAgMCwgIiIgfSwgLyogcGFyYSAqLwogeyAiZ2xvc3N0ZXJtIiwgMCwgICAgICAwLCAgICAgIDAsICAgICAgMiwgICAgICAwLCAiIiB9LCAvKiBwYXJhICovCiB7ICJncmFwaGljIiwgICAwLCAgICAgIDAsICAgICAgMCwgICAgICA5LCAgICAgIDAsICIiIH0sCiB7ICJncmFwaGljY28iLCAwLCAgICAgIDAsICAgICAgMCwgICAgICA5LCAgICAgIDAsICIiIH0sIC8qIGFyZWFzcGVjICovCkBAIC02NTAsNyArNjUxLDcgQEAKIHsgInByZWZhY2VpbmZvIiwwLCAgICAgMCwgICAgICAwLCAgICAgIDksICAgICAgMCwgIiIgfSwgLyogZ3JhcGhpYyAqLwogeyAicHJlZmFjZSIsICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgOSwgICAgICAwLCAiIiB9LCAvKiBwcmVmYWNlaW5mbyAqLwogeyAicHJpbWFyeWllIiwgMCwgICAgICAwLCAgICAgIDAsICAgICAgNCwgICAgICAwLCAiIiB9LCAvKiBuZHh0ZXJtICovCi17ICJwcmltYXJ5ICAiLCAwLCAgICAgIDAsICAgICAgMCwgICAgICA0LCAgICAgIDAsICIiIH0sIC8qIG5keHRlcm0gKi8KK3sgInByaW1hcnkiLCAwLCAgICAgIDAsICAgICAgMCwgICAgICA5LCAgICAgIDAsICIiIH0sIC8qIG5keHRlcm0gKi8KIHsgInByaW50aGlzdG9yeSIsMCwgICAgMCwgICAgICAwLCAgICAgIDksICAgICAgMCwgIiIgfSwgLyogcGFyYS5jbGFzcyAqLwogeyAicHJvY2VkdXJlIiwgMCwgICAgICAwLCAgICAgIDAsICAgICAgOSwgICAgICAwLCAiIiB9LCAvKiBmb3JtYWxvYmplY3QudGl0bGUuY29udGVudCAqLwogeyAicHJvZHVjdG5hbWUiLDAsICAgICAwLCAgICAgIDAsICAgICAgMiwgICAgICAwLCAiIiB9LCAvKiBwYXJhICovCkBAIC0yNzY3LDcgKzI3NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICpvdXQrKyAgPSAoKGMgPj4gYml0cykgJiAweDNGKSB8IDB4ODA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICBlbnQgPSBkb2NiUGFyc2VFbnRpdHlSZWYoY3R4dCwgJm5hbWUpOworICAgICAgICAgICAgICAgeGVudCA9IGRvY2JQYXJzZUVudGl0eVJlZihjdHh0LCAmbmFtZSk7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gJyYnOwogICAgICAgICAgICAgICAgICAgIGlmIChvdXQgLSBidWZmZXIgPiBidWZmZXJfc2l6ZSAtIDEwMCkgewpAQCAtMjc3Niw0NCArMjc3Nyw0OCBAQAogICAgICAgICAgICAgICAgICAgICAgICBncm93QnVmZmVyKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9ICZidWZmZXJbaW5keF07CiAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICcmJzsKLSAgICAgICAgICAgICAgICAgICBjdXIgPSBuYW1lOwotICAgICAgICAgICAgICAgICAgIHdoaWxlICgqY3VyICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dCAtIGJ1ZmZlciA+IGJ1ZmZlcl9zaXplIC0gMTAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5keCA9IG91dCAtIGJ1ZmZlcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Jvd0J1ZmZlcihidWZmZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gJmJ1ZmZlcltpbmR4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAqY3VyKys7Ci0gICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgIHhtbEZyZWUobmFtZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjOwotICAgICAgICAgICAgICAgICAgIGludCBiaXRzOworCQkgICBlbnQgPSBkb2NiRW50aXR5TG9va3VwKG5hbWUpOworCQkgICBpZiAoZW50ID09IE5VTEwpIHsKKwkJICAgICAgICpvdXQrKyA9ICcmJzsKKwkJICAgICAgIGN1ciA9IG5hbWU7CisJCSAgICAgICB3aGlsZSAoKmN1ciAhPSAwKSB7CisJCQkgICBpZiAob3V0IC0gYnVmZmVyID4gYnVmZmVyX3NpemUgLSAxMDApIHsKKwkJCSAgICAgICBpbnQgaW5keCA9IG91dCAtIGJ1ZmZlcjsKIAotICAgICAgICAgICAgICAgICAgIGlmIChvdXQgLSBidWZmZXIgPiBidWZmZXJfc2l6ZSAtIDEwMCkgewotICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5keCA9IG91dCAtIGJ1ZmZlcjsKKwkJCSAgICAgICBncm93QnVmZmVyKGJ1ZmZlcik7CisJCQkgICAgICAgb3V0ID0gJmJ1ZmZlcltpbmR4XTsKKwkJCSAgIH0KKwkJCSAgICpvdXQrKyA9ICpjdXIrKzsKKwkJICAgICAgIH0KKwkJICAgICAgIHhtbEZyZWUobmFtZSk7CisJCSAgIH0gZWxzZSB7CisJCSAgICAgICB1bnNpZ25lZCBpbnQgYzsKKwkJICAgICAgIGludCBiaXRzOwogCi0gICAgICAgICAgICAgICAgICAgICAgIGdyb3dCdWZmZXIoYnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gJmJ1ZmZlcltpbmR4XTsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgYyA9ICh4bWxDaGFyKWVudC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgaWYgICAgICAoYyA8ICAgIDB4ODApCi0gICAgICAgICAgICAgICAgICAgICAgIHsgKm91dCsrICA9IGM7ICAgICAgICAgICAgICAgIGJpdHM9IC02OyB9Ci0gICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA8ICAgMHg4MDApCi0gICAgICAgICAgICAgICAgICAgICAgIHsgKm91dCsrICA9KChjID4+ICA2KSAmIDB4MUYpIHwgMHhDMDsgIGJpdHM9ICAwOyB9Ci0gICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA8IDB4MTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgIHsgKm91dCsrICA9KChjID4+IDEyKSAmIDB4MEYpIHwgMHhFMDsgIGJpdHM9ICA2OyB9Ci0gICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgIHsgKm91dCsrICA9KChjID4+IDE4KSAmIDB4MDcpIHwgMHhGMDsgIGJpdHM9IDEyOyB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGJpdHMgPj0gMDsgYml0cy09IDYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgKm91dCsrICA9ICgoYyA+PiBiaXRzKSAmIDB4M0YpIHwgMHg4MDsKLSAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgeG1sRnJlZShuYW1lKTsKLSAgICAgICAgICAgICAgIH0KKwkJICAgICAgIGlmIChvdXQgLSBidWZmZXIgPiBidWZmZXJfc2l6ZSAtIDEwMCkgeworCQkJICAgaW50IGluZHggPSBvdXQgLSBidWZmZXI7CisKKwkJCSAgIGdyb3dCdWZmZXIoYnVmZmVyKTsKKwkJCSAgIG91dCA9ICZidWZmZXJbaW5keF07CisJCSAgICAgICB9CisJCSAgICAgICBjID0gKHhtbENoYXIpZW50LT52YWx1ZTsKKwkJICAgICAgIGlmICAgICAgKGMgPCAgICAweDgwKQorCQkJICAgeyAqb3V0KysgID0gYzsgICAgICAgICAgICAgICAgYml0cz0gLTY7IH0KKwkJICAgICAgIGVsc2UgaWYgKGMgPCAgIDB4ODAwKQorCQkJICAgeyAqb3V0KysgID0oKGMgPj4gIDYpICYgMHgxRikgfCAweEMwOyAgYml0cz0gIDA7IH0KKwkJICAgICAgIGVsc2UgaWYgKGMgPCAweDEwMDAwKQorCQkJICAgeyAqb3V0KysgID0oKGMgPj4gMTIpICYgMHgwRikgfCAweEUwOyAgYml0cz0gIDY7IH0KKwkJICAgICAgIGVsc2UgICAgICAgICAgICAgICAgIAorCQkJICAgeyAqb3V0KysgID0oKGMgPj4gMTgpICYgMHgwNykgfCAweEYwOyAgYml0cz0gMTI7IH0KKwkJCisJCSAgICAgICBmb3IgKCA7IGJpdHMgPj0gMDsgYml0cy09IDYpIHsKKwkJCSAgICpvdXQrKyAgPSAoKGMgPj4gYml0cykgJiAweDNGKSB8IDB4ODA7CisJCSAgICAgICB9CisJCSAgICAgICB4bWxGcmVlKG5hbWUpOworCQkgICB9CisJICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBjOwo=