Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBUb25lIG1hcHBpbmcgb3BlcmF0b3IgKFJlaW5oYXJkLCAyMDA1KQovLwovLyBEZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIGJ5Ci8vIC0gSGVydukgRHJvbG9uIChkcm9sb25AaW5mb25pZS5mcikKLy8gLSBNaWhhaWwgTmF5ZGVub3YgKG1uYXlkZW5vdkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCi8vCi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZyZWVJbWFnZSAzCi8vCi8vIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWQovLyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUwovLyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLy8gT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQKLy8gQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVAovLyBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWQovLyBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMCi8vIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIKLy8gVEhJUyBESVNDTEFJTUVSLgovLwovLyBVc2UgYXQgeW91ciBvd24gcmlzayEKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKI2luY2x1ZGUgIkZyZWVJbWFnZS5oIgojaW5jbHVkZSAiVXRpbGl0aWVzLmgiCiNpbmNsdWRlICJUb25lTWFwcGluZy5oIgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBHbG9iYWwgYW5kL29yIGxvY2FsIHRvbmUgbWFwcGluZyBvcGVyYXRvcgovLyBSZWZlcmVuY2VzOiAKLy8gWzFdIEVyaWsgUmVpbmhhcmQgYW5kIEthdGUgRGV2bGluLCAnRHluYW1pYyBSYW5nZSBSZWR1Y3Rpb24gSW5zcGlyZWQgYnkgUGhvdG9yZWNlcHRvciBQaHlzaW9sb2d5JywgCi8vICAgICBJRUVFIFRyYW5zYWN0aW9ucyBvbiBWaXN1YWxpemF0aW9uIGFuZCBDb21wdXRlciBHcmFwaGljcywgMTEoMSksIEphbi9GZWIgMjAwNS4gCi8vIFsyXSBFcmlrIFJlaW5oYXJkLCAnUGFyYW1ldGVyIGVzdGltYXRpb24gZm9yIHBob3RvZ3JhcGhpYyB0b25lIHJlcHJvZHVjdGlvbicsCi8vICAgICBKb3VybmFsIG9mIEdyYXBoaWNzIFRvb2xzLCB2b2wuIDcsIG5vLiAxLCBwcC4gNDWWNTEsIDIwMDMuCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8qKgpUb25lIG1hcHBpbmcgb3BlcmF0b3IKQHBhcmFtIGRpYiBJbnB1dCAvIE91dHB1dCBSR0JGIGltYWdlCkBwYXJhbSBZIElucHV0IGx1bWluYW5jZSBpbWFnZSB2ZXJzaW9uIG9mIGRpYgpAcGFyYW0gZiBPdmVyYWxsIGludGVuc2l0eSBpbiByYW5nZSBbLTg6OF0gOiBkZWZhdWx0IHRvIDAKQHBhcmFtIG0gQ29udHJhc3QgaW4gcmFuZ2UgWzAuMzoxKSA6IGRlZmF1bHQgdG8gMApAcGFyYW0gYSBBZGFwdGF0aW9uIGluIHJhbmdlIFswOjFdIDogZGVmYXVsdCB0byAxCkBwYXJhbSBjIENvbG9yIGNvcnJlY3Rpb24gaW4gcmFuZ2UgWzA6MV0gOiBkZWZhdWx0IHRvIDAKQHJldHVybiBSZXR1cm5zIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgcmV0dXJucyBGQUxTRSBvdGhlcndpc2UKQHNlZSBMdW1pbmFuY2VGcm9tWQoqLwpzdGF0aWMgQk9PTCAKVG9uZU1hcHBpbmdSZWluaGFyZDA1KEZJQklUTUFQICpkaWIsIEZJQklUTUFQICpZLCBmbG9hdCBmLCBmbG9hdCBtLCBmbG9hdCBhLCBmbG9hdCBjKSB7CglmbG9hdCBDYXZbM107CQkvLyBjaGFubmVsIGF2ZXJhZ2UKCWZsb2F0IExhdiA9IDA7CQkvLyBhdmVyYWdlIGx1bWluYW5jZQoJZmxvYXQgTGxhdiA9IDA7CQkvLyBsb2cgYXZlcmFnZSBsdW1pbmFuY2UKCWZsb2F0IG1pbkx1bSA9IDE7CS8vIG1pbiBsdW1pbmFuY2UKCWZsb2F0IG1heEx1bSA9IDE7CS8vIG1heCBsdW1pbmFuY2UKCglmbG9hdCBMOwkJLy8gcGl4ZWwgbHVtaW5hbmNlCglmbG9hdCBJX2csIElfbDsgLy8gZ2xvYmFsIGFuZCBsb2NhbCBsaWdodCBhZGFwdGF0aW9uCglmbG9hdCBJX2E7CQkvLyBpbnRlcnBvbGF0ZWQgcGl4ZWwgbGlnaHQgYWRhcHRhdGlvbgoJZmxvYXQgazsJCS8vIGtleSAobG93LWtleSBtZWFucyBvdmVyYWxsIGRhcmsgaW1hZ2UsIGhpZ2gta2V5IG1lYW5zIG92ZXJhbGwgbGlnaHQgaW1hZ2UpCgoJLy8gY2hlY2sgaW5wdXQgcGFyYW1ldGVycyAKCglpZigoRnJlZUltYWdlX0dldEltYWdlVHlwZShkaWIpICE9IEZJVF9SR0JGKSB8fCAoRnJlZUltYWdlX0dldEltYWdlVHlwZShZKSAhPSBGSVRfRkxPQVQpKSB7CgkJcmV0dXJuIEZBTFNFOwoJfQoKCWlmKGYgPCAtOCkgZiA9IC04OyBpZihmID4gOCkgZiA9IDg7CiAgICBpZihtIDwgMCkgIG0gPSAwOyAgaWYobSA+IDEpIG0gPSAxOwogICAgaWYoYSA8IDApICBhID0gMDsgIGlmKGEgPiAxKSBhID0gMTsKICAgIGlmKGMgPCAwKSAgYyA9IDA7ICBpZihjID4gMSkgYyA9IDE7CgoJY29uc3QgdW5zaWduZWQgd2lkdGggID0gRnJlZUltYWdlX0dldFdpZHRoKGRpYik7Cgljb25zdCB1bnNpZ25lZCBoZWlnaHQgPSBGcmVlSW1hZ2VfR2V0SGVpZ2h0KGRpYik7CgoJY29uc3QgdW5zaWduZWQgZGliX3BpdGNoICA9IEZyZWVJbWFnZV9HZXRQaXRjaChkaWIpOwoJY29uc3QgdW5zaWduZWQgeV9waXRjaCAgICA9IEZyZWVJbWFnZV9HZXRQaXRjaChZKTsKCglpbnQgaTsKCXVuc2lnbmVkIHgsIHk7CglCWVRFICpiaXRzID0gTlVMTCwgKlliaXRzID0gTlVMTDsKCgkvLyBnZXQgc3RhdGlzdGljcyBhYm91dCB0aGUgZGF0YSAoYnV0IG9ubHkgaWYgaXRzIHJlYWxseSBuZWVkZWQpCgoJZiA9IGV4cCgtZik7CglpZigobSA9PSAwKSB8fCAoYSAhPSAxKSAmJiAoYyAhPSAxKSkgewoJCS8vIGF2b2lkIHRoZXNlIGNhbGN1bGF0aW9ucyBpZiBpdHMgbm90IG5lZWRlZCBhZnRlciAuLi4KCQlMdW1pbmFuY2VGcm9tWShZLCAmbWF4THVtLCAmbWluTHVtLCAmTGF2LCAmTGxhdik7CgkJayA9IChsb2cobWF4THVtKSAtIExsYXYpIC8gKGxvZyhtYXhMdW0pIC0gbG9nKG1pbkx1bSkpOwoJCWlmKGsgPCAwKSB7CgkJCS8vIHBvdyhrLCAxLjRGKSBpcyB1bmRlZmluZWQgLi4uCgkJCS8vIHRoZXJlJ3MgYW4gYW1iaWd1aXR5IGFib3V0IHRoZSBjYWxjdWxhdGlvbiBvZiBMbGF2IGJldHdlZW4gUmVpbmhhcmQgcGFwZXJzIGFuZCB0aGUgdmFyaW91cyBpbXBsZW1lbnRhdGlvbnMgIC4uLgoJCQkvLyB0cnkgYW5vdGhlciB3b3JsZCBhZGFwdGF0aW9uIGx1bWluYW5jZSBmb3JtdWxhIHVzaW5nIGluc3RlYWQgJ3dvcmxkTHVtID0gbG9nKExsYXYpJwoJCQlrID0gKGxvZyhtYXhMdW0pIC0gbG9nKExsYXYpKSAvIChsb2cobWF4THVtKSAtIGxvZyhtaW5MdW0pKTsKCQkJaWYoayA8IDApIG0gPSAwLjNGOwoJCX0KCX0KCW0gPSAobSA+IDApID8gbSA6IChmbG9hdCkoMC4zICsgMC43ICogcG93KGssIDEuNEYpKTsKCglmbG9hdCBtYXhfY29sb3IgPSAtMWU2RjsKCWZsb2F0IG1pbl9jb2xvciA9ICsxZTZGOwoKCS8vIHRvbmUgbWFwIGltYWdlCgoJYml0cyAgPSAoQllURSopRnJlZUltYWdlX0dldEJpdHMoZGliKTsKCVliaXRzID0gKEJZVEUqKUZyZWVJbWFnZV9HZXRCaXRzKFkpOwoKCWlmKChhID09IDEpICYmIChjID09IDApKSB7CgkJLy8gd2hlbiB1c2luZyBkZWZhdWx0IHZhbHVlcywgdXNlIGEgZmFzdGVzdCBjb2RlCgoJCWZvcih5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CgkJCWZsb2F0ICpZICAgICA9IChmbG9hdCopWWJpdHM7CgkJCWZsb2F0ICpjb2xvciA9IChmbG9hdCopYml0czsKCgkJCWZvcih4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKCQkJCUlfYSA9IFlbeF07CS8vIGx1bWluYW5jZSh4LCB5KQoJCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewoJCQkJCSpjb2xvciAvPSAoICpjb2xvciArIHBvdyhmICogSV9hLCBtKSApOwoJCQkJCQoJCQkJCW1heF9jb2xvciA9ICgqY29sb3IgPiBtYXhfY29sb3IpID8gKmNvbG9yIDogbWF4X2NvbG9yOwoJCQkJCW1pbl9jb2xvciA9ICgqY29sb3IgPCBtaW5fY29sb3IpID8gKmNvbG9yIDogbWluX2NvbG9yOwoKCQkJCQljb2xvcisrOwoJCQkJfQoJCQl9CgkJCS8vIG5leHQgbGluZQoJCQliaXRzICArPSBkaWJfcGl0Y2g7CgkJCVliaXRzICs9IHlfcGl0Y2g7CgkJfQoJfSBlbHNlIHsKCQkvLyBjb21wbGV0ZSBhbGdvcml0aG0KCgkJLy8gY2hhbm5lbCBhdmVyYWdlcwoKCQlDYXZbMF0gPSBDYXZbMV0gPSBDYXZbMl0gPSAwOwoJCWlmKChhICE9IDEpICYmIChjICE9IDApKSB7CgkJCS8vIGNoYW5uZWwgYXZlcmFnZXMgYXJlIG5vdCBuZWVkZWQgd2hlbiAoYSA9PSAxKSBvciAoYyA9PSAwKQoJCQliaXRzID0gKEJZVEUqKUZyZWVJbWFnZV9HZXRCaXRzKGRpYik7CgkJCWZvcih5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CgkJCQlmbG9hdCAqY29sb3IgPSAoZmxvYXQqKWJpdHM7CgkJCQlmb3IoeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CgkJCQkJZm9yKGkgPSAwOyBpIDwgMzsgaSsrKSB7CgkJCQkJCUNhdltpXSArPSAqY29sb3I7CgkJCQkJCWNvbG9yKys7CgkJCQkJfQoJCQkJfQoJCQkJLy8gbmV4dCBsaW5lCgkJCQliaXRzICs9IGRpYl9waXRjaDsKCQkJfQoJCQljb25zdCBmbG9hdCBpbWFnZV9zaXplID0gKGZsb2F0KXdpZHRoICogaGVpZ2h0OwoJCQlmb3IoaSA9IDA7IGkgPCAzOyBpKyspIHsKCQkJCUNhdltpXSAvPSBpbWFnZV9zaXplOwoJCQl9CgkJfQoKCQkvLyBwZXJmb3JtIHRvbmUgbWFwcGluZwoKCQliaXRzID0gKEJZVEUqKUZyZWVJbWFnZV9HZXRCaXRzKGRpYik7CgkJZm9yKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKCQkJY29uc3QgZmxvYXQgKlkgICAgID0gKGZsb2F0KilZYml0czsKCQkJZmxvYXQgKmNvbG9yID0gKGZsb2F0KiliaXRzOwoKCQkJZm9yKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewoJCQkJTCA9IFlbeF07CS8vIGx1bWluYW5jZSh4LCB5KQoJCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewoJCQkJCUlfbCA9IGMgKiAqY29sb3IgKyAoMS1jKSAqIEw7CgkJCQkJSV9nID0gYyAqIENhdltpXSArICgxLWMpICogTGF2OwoJCQkJCUlfYSA9IGEgKiBJX2wgKyAoMS1hKSAqIElfZzsKCQkJCQkqY29sb3IgLz0gKCAqY29sb3IgKyBwb3coZiAqIElfYSwgbSkgKTsKCQkJCQkKCQkJCQltYXhfY29sb3IgPSAoKmNvbG9yID4gbWF4X2NvbG9yKSA/ICpjb2xvciA6IG1heF9jb2xvcjsKCQkJCQltaW5fY29sb3IgPSAoKmNvbG9yIDwgbWluX2NvbG9yKSA/ICpjb2xvciA6IG1pbl9jb2xvcjsKCgkJCQkJY29sb3IrKzsKCQkJCX0KCQkJfQoJCQkvLyBuZXh0IGxpbmUKCQkJYml0cyAgKz0gZGliX3BpdGNoOwoJCQlZYml0cyArPSB5X3BpdGNoOwoJCX0KCX0KCgkvLyBub3JtYWxpemUgaW50ZW5zaXRpZXMKCglpZihtYXhfY29sb3IgIT0gbWluX2NvbG9yKSB7CgkJYml0cyA9IChCWVRFKilGcmVlSW1hZ2VfR2V0Qml0cyhkaWIpOwoJCWNvbnN0IGZsb2F0IHJhbmdlID0gbWF4X2NvbG9yIC0gbWluX2NvbG9yOwoJCWZvcih5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CgkJCWZsb2F0ICpjb2xvciA9IChmbG9hdCopYml0czsKCQkJZm9yKHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewoJCQkJZm9yKGkgPSAwOyBpIDwgMzsgaSsrKSB7CgkJCQkJKmNvbG9yID0gKCpjb2xvciAtIG1pbl9jb2xvcikgLyByYW5nZTsKCQkJCQljb2xvcisrOwoJCQkJfQoJCQl9CgkJCS8vIG5leHQgbGluZQoJCQliaXRzICs9IGRpYl9waXRjaDsKCQl9Cgl9CgoJcmV0dXJuIFRSVUU7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIE1haW4gYWxnb3JpdGhtCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8qKgpBcHBseSB0aGUgZ2xvYmFsL2xvY2FsIHRvbmUgbWFwcGluZyBvcGVyYXRvciB0byBhIFJHQkYgaW1hZ2UgYW5kIGNvbnZlcnQgdG8gMjQtYml0IFJHQjxicj4KVXNlciBwYXJhbWV0ZXJzIGNvbnRyb2wgaW50ZW5zaXR5LCBjb250cmFzdCwgYW5kIGxldmVsIG9mIGFkYXB0YXRpb24KQHBhcmFtIHNyYyBJbnB1dCBSR0JGIGltYWdlCkBwYXJhbSBpbnRlbnNpdHkgT3ZlcmFsbCBpbnRlbnNpdHkgaW4gcmFuZ2UgWy04OjhdIDogZGVmYXVsdCB0byAwCkBwYXJhbSBjb250cmFzdCBDb250cmFzdCBpbiByYW5nZSBbMC4zOjEpIDogZGVmYXVsdCB0byAwCkBwYXJhbSBhZGFwdGF0aW9uIEFkYXB0YXRpb24gaW4gcmFuZ2UgWzA6MV0gOiBkZWZhdWx0IHRvIDEKQHBhcmFtIGNvbG9yX2NvcnJlY3Rpb24gQ29sb3IgY29ycmVjdGlvbiBpbiByYW5nZSBbMDoxXSA6IGRlZmF1bHQgdG8gMApAcmV0dXJuIFJldHVybnMgYSAyNC1iaXQgUkdCIGltYWdlIGlmIHN1Y2Nlc3NmdWwsIHJldHVybnMgTlVMTCBvdGhlcndpc2UKKi8KRklCSVRNQVAqIERMTF9DQUxMQ09OViAKRnJlZUltYWdlX1Rtb1JlaW5oYXJkMDVFeChGSUJJVE1BUCAqc3JjLCBkb3VibGUgaW50ZW5zaXR5LCBkb3VibGUgY29udHJhc3QsIGRvdWJsZSBhZGFwdGF0aW9uLCBkb3VibGUgY29sb3JfY29ycmVjdGlvbikgewoJaWYoIXNyYykgcmV0dXJuIE5VTEw7CgoJLy8gd29ya2luZyBSR0JGIHZhcmlhYmxlCglGSUJJVE1BUCAqZGliID0gTlVMTCwgKlkgPSBOVUxMOwoKCWRpYiA9IEZyZWVJbWFnZV9Db252ZXJ0VG9SR0JGKHNyYyk7CglpZighZGliKSByZXR1cm4gTlVMTDsKCgkvLyBnZXQgdGhlIEx1bWluYW5jZSBjaGFubmVsCglZID0gQ29udmVydFJHQkZUb1koZGliKTsKCWlmKCFZKSB7CgkJRnJlZUltYWdlX1VubG9hZChkaWIpOwoJCXJldHVybiBOVUxMOwoJfQoKCS8vIHBlcmZvcm0gdGhlIHRvbmUgbWFwcGluZwoJVG9uZU1hcHBpbmdSZWluaGFyZDA1KGRpYiwgWSwgKGZsb2F0KWludGVuc2l0eSwgKGZsb2F0KWNvbnRyYXN0LCAoZmxvYXQpYWRhcHRhdGlvbiwgKGZsb2F0KWNvbG9yX2NvcnJlY3Rpb24pOwoJLy8gbm90IG5lZWRlZCBhbnltb3JlCglGcmVlSW1hZ2VfVW5sb2FkKFkpOwoJLy8gY2xhbXAgaW1hZ2UgaGlnaGVzdCB2YWx1ZXMgdG8gZGlzcGxheSB3aGl0ZSwgdGhlbiBjb252ZXJ0IHRvIDI0LWJpdCBSR0IKCUZJQklUTUFQICpkc3QgPSBDbGFtcENvbnZlcnRSR0JGVG8yNChkaWIpOwoKCS8vIGNsZWFuLXVwIGFuZCByZXR1cm4KCUZyZWVJbWFnZV9VbmxvYWQoZGliKTsKCgkvLyBjb3B5IG1ldGFkYXRhIGZyb20gc3JjIHRvIGRzdAoJRnJlZUltYWdlX0Nsb25lTWV0YWRhdGEoZHN0LCBzcmMpOwoKCXJldHVybiBkc3Q7Cn0KCi8qKgpBcHBseSB0aGUgZ2xvYmFsIHRvbmUgbWFwcGluZyBvcGVyYXRvciB0byBhIFJHQkYgaW1hZ2UgYW5kIGNvbnZlcnQgdG8gMjQtYml0IFJHQjxicj4KVXNlciBwYXJhbWV0ZXJzIGNvbnRyb2wgaW50ZW5zaXR5IGFuZCBjb250cmFzdApAcGFyYW0gc3JjIElucHV0IFJHQkYgaW1hZ2UKQHBhcmFtIGludGVuc2l0eSBPdmVyYWxsIGludGVuc2l0eSBpbiByYW5nZSBbLTg6OF0gOiBkZWZhdWx0IHRvIDAKQHBhcmFtIGNvbnRyYXN0IENvbnRyYXN0IGluIHJhbmdlIFswLjM6MSkgOiBkZWZhdWx0IHRvIDAKQHJldHVybiBSZXR1cm5zIGEgMjQtYml0IFJHQiBpbWFnZSBpZiBzdWNjZXNzZnVsLCByZXR1cm5zIE5VTEwgb3RoZXJ3aXNlCiovCkZJQklUTUFQKiBETExfQ0FMTENPTlYgCkZyZWVJbWFnZV9UbW9SZWluaGFyZDA1KEZJQklUTUFQICpzcmMsIGRvdWJsZSBpbnRlbnNpdHksIGRvdWJsZSBjb250cmFzdCkgewoJcmV0dXJuIEZyZWVJbWFnZV9UbW9SZWluaGFyZDA1RXgoc3JjLCBpbnRlbnNpdHksIGNvbnRyYXN0LCAxLCAwKTsKfQo=