ZG5sIEZyb20gaHR0cDovL2F1dG9jb25mLWFyY2hpdmUuY3J5cC50by8KCmRubCBAc3lub3BzaXMgQUNfRlVOQ19TTlBSSU5URgpkbmwKZG5sIENoZWNrcyBmb3IgYSBmdWxseSBDOTkgY29tcGxpYW50IHNucHJpbnRmLCBpbiBwYXJ0aWN1bGFyIGNoZWNrcwpkbmwgd2hldGhlciBpdCBkb2VzIGJvdW5kcyBjaGVja2luZyBhbmQgcmV0dXJucyB0aGUgY29ycmVjdCBzdHJpbmcKZG5sIGxlbmd0aDsgZG9lcyB0aGUgc2FtZSBjaGVjayBmb3IgdnNucHJpbnRmLiBJZiBubyB3b3JraW5nIHNucHJpbnRmCmRubCBvciB2c25wcmludGYgaXMgZm91bmQsIHJlcXVlc3QgYSByZXBsYWNlbWVudCBhbmQgd2FybiB0aGUgdXNlcgpkbmwgYWJvdXQgaXQuIE5vdGU6IHRoZSBtZW50aW9uZWQgcmVwbGFjZW1lbnQgaXMgZnJlZWx5IGF2YWlsYWJsZSBhbmQKZG5sIG1heSBiZSB1c2VkIGluIGFueSBwcm9qZWN0IHJlZ2FyZGxlc3Mgb2YgaXQncyBsaWNlbmNlIChqdXN0IGxpa2UKZG5sIHRoZSBhdXRvY29uZiBzcGVjaWFsIGV4ZW1wdGlvbikuCmRubApkbmwgQGNhdGVnb3J5IEMKZG5sIEBhdXRob3IgUvxkaWdlciBLdWhsbWFubiA8aW5mb0BydWVkaWdlci1rdWhsbWFubi5kZT4KZG5sIEB2ZXJzaW9uIDIwMDItMDktMjYKZG5sIEBsaWNlbnNlIEFsbFBlcm1pc3NpdmUKCkFDX0RFRlVOKFtBQ19GVU5DX1NOUFJJTlRGXSwKW0FDX0NIRUNLX0ZVTkNTKHNucHJpbnRmIHZzbnByaW50ZikKQUNfTVNHX0NIRUNLSU5HKGZvciB3b3JraW5nIHNucHJpbnRmKQpBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV93b3JraW5nX3NucHJpbnRmLApbQUNfVFJZX1JVTigKWyNpbmNsdWRlIDxzdGRpby5oPgoKaW50IG1haW4odm9pZCkKewogICAgY2hhciBidWZzWzVdID0geyAneCcsICd4JywgJ3gnLCAnXDAnLCAnXDAnIH07CiAgICBjaGFyIGJ1ZmRbNV0gPSB7ICd4JywgJ3gnLCAneCcsICdcMCcsICdcMCcgfTsKICAgIGludCBpOwogICAgaSA9IHNucHJpbnRmIChidWZzLCAyLCAiJXMiLCAiMTExIik7CiAgICBpZiAoc3RyY21wIChidWZzLCAiMSIpKSBleGl0ICgxKTsKICAgIGlmIChpICE9IDMpIGV4aXQgKDEpOwogICAgaSA9IHNucHJpbnRmIChidWZkLCAyLCAiJWQiLCAxMTEpOwogICAgaWYgKHN0cmNtcCAoYnVmZCwgIjEiKSkgZXhpdCAoMSk7CiAgICBpZiAoaSAhPSAzKSBleGl0ICgxKTsKICAgIGV4aXQoMCk7Cn1dLCBhY19jdl9oYXZlX3dvcmtpbmdfc25wcmludGY9eWVzLCBhY19jdl9oYXZlX3dvcmtpbmdfc25wcmludGY9bm8sIGFjX2N2X2hhdmVfd29ya2luZ19zbnByaW50Zj1jcm9zcyldKQpBQ19NU0dfUkVTVUxUKFskYWNfY3ZfaGF2ZV93b3JraW5nX3NucHJpbnRmXSkKQUNfTVNHX0NIRUNLSU5HKGZvciB3b3JraW5nIHZzbnByaW50ZikKQUNfQ0FDSEVfVkFMKGFjX2N2X2hhdmVfd29ya2luZ192c25wcmludGYsCltBQ19UUllfUlVOKApbI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRhcmcuaD4KCmludCBteV92c25wcmludGYgKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqdG1wbCwgLi4uKQp7CiAgICBpbnQgaTsKICAgIHZhX2xpc3QgYXJnczsKICAgIHZhX3N0YXJ0IChhcmdzLCB0bXBsKTsKICAgIGkgPSB2c25wcmludGYgKGJ1ZiwgMiwgdG1wbCwgYXJncyk7CiAgICB2YV9lbmQgKGFyZ3MpOwogICAgcmV0dXJuIGk7Cn0KCmludCBtYWluKHZvaWQpCnsKICAgIGNoYXIgYnVmc1s1XSA9IHsgJ3gnLCAneCcsICd4JywgJ1wwJywgJ1wwJyB9OwogICAgY2hhciBidWZkWzVdID0geyAneCcsICd4JywgJ3gnLCAnXDAnLCAnXDAnIH07CiAgICBpbnQgaTsKICAgIGkgPSBteV92c25wcmludGYgKGJ1ZnMsICIlcyIsICIxMTEiKTsKICAgIGlmIChzdHJjbXAgKGJ1ZnMsICIxIikpIGV4aXQgKDEpOwogICAgaWYgKGkgIT0gMykgZXhpdCAoMSk7CiAgICBpID0gbXlfdnNucHJpbnRmIChidWZkLCAiJWQiLCAxMTEpOwogICAgaWYgKHN0cmNtcCAoYnVmZCwgIjEiKSkgZXhpdCAoMSk7CiAgICBpZiAoaSAhPSAzKSBleGl0ICgxKTsKICAgIGV4aXQoMCk7Cn1dLCBhY19jdl9oYXZlX3dvcmtpbmdfdnNucHJpbnRmPXllcywgYWNfY3ZfaGF2ZV93b3JraW5nX3ZzbnByaW50Zj1ubywgYWNfY3ZfaGF2ZV93b3JraW5nX3ZzbnByaW50Zj1jcm9zcyldKQpBQ19NU0dfUkVTVUxUKFskYWNfY3ZfaGF2ZV93b3JraW5nX3ZzbnByaW50Zl0pCmlmIHRlc3QgeCRhY19jdl9oYXZlX3dvcmtpbmdfc25wcmludGYkYWNfY3ZfaGF2ZV93b3JraW5nX3ZzbnByaW50ZiAhPSAieHllc3llcyI7IHRoZW4KICBBQ19MSUJPQkooc25wcmludGYpCiAgQUNfTVNHX1dBUk4oW1dpbGwgdXNlIGZhbGxiYWNrICh2KXNucHJpbnRmKCkgaW1wbGVtZW50YXRpb24uXSkKICBBQ19ERUZJTkUoUFJFRkVSX1BPUlRBQkxFX1NOUFJJTlRGLCAxLCAiZW5hYmxlIHJlcGxhY2VtZW50ICh2KXNucHJpbnRmIGlmIHN5c3RlbSAodilzbnByaW50ZiBpcyBicm9rZW4iKQpmaV0pCg==