I2luY2x1ZGUgPGdsbS9ndGMvcXVhdGVybmlvbi5ocHA+CiNpbmNsdWRlIDxnbG0vZ3RjL2Vwc2lsb24uaHBwPgojaW5jbHVkZSA8Z2xtL3ZlY3Rvcl9yZWxhdGlvbmFsLmhwcD4KI2luY2x1ZGUgPHZlY3Rvcj4KCmludCB0ZXN0X3F1YXRfYW5nbGUoKQp7CglpbnQgRXJyb3IgPSAwOwoKCXsKCQlnbG06OnF1YXQgUSA9IGdsbTo6YW5nbGVBeGlzKGdsbTo6cGk8ZmxvYXQ+KCkgKiAwLjI1ZiwgZ2xtOjp2ZWMzKDAsIDAsIDEpKTsKCQlnbG06OnF1YXQgTiA9IGdsbTo6bm9ybWFsaXplKFEpOwoJCWZsb2F0IEwgPSBnbG06Omxlbmd0aChOKTsKCQlFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChMLCAxLjBmLCAwLjAxZikgPyAwIDogMTsKCQlmbG9hdCBBID0gZ2xtOjphbmdsZShOKTsKCQlFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChBLCBnbG06OnBpPGZsb2F0PigpICogMC4yNWYsIDAuMDFmKSA/IDAgOiAxOwoJfQoJewoJCWdsbTo6cXVhdCBRID0gZ2xtOjphbmdsZUF4aXMoZ2xtOjpwaTxmbG9hdD4oKSAqIDAuMjVmLCBnbG06Om5vcm1hbGl6ZShnbG06OnZlYzMoMCwgMSwgMSkpKTsKCQlnbG06OnF1YXQgTiA9IGdsbTo6bm9ybWFsaXplKFEpOwoJCWZsb2F0IEwgPSBnbG06Omxlbmd0aChOKTsKCQlFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChMLCAxLjBmLCAwLjAxZikgPyAwIDogMTsKCQlmbG9hdCBBID0gZ2xtOjphbmdsZShOKTsKCQlFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChBLCBnbG06OnBpPGZsb2F0PigpICogMC4yNWYsIDAuMDFmKSA/IDAgOiAxOwoJfQoJewoJCWdsbTo6cXVhdCBRID0gZ2xtOjphbmdsZUF4aXMoZ2xtOjpwaTxmbG9hdD4oKSAqIDAuMjVmLCBnbG06Om5vcm1hbGl6ZShnbG06OnZlYzMoMSwgMiwgMykpKTsKCQlnbG06OnF1YXQgTiA9IGdsbTo6bm9ybWFsaXplKFEpOwoJCWZsb2F0IEwgPSBnbG06Omxlbmd0aChOKTsKCQlFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChMLCAxLjBmLCAwLjAxZikgPyAwIDogMTsKCQlmbG9hdCBBID0gZ2xtOjphbmdsZShOKTsKCQlFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChBLCBnbG06OnBpPGZsb2F0PigpICogMC4yNWYsIDAuMDFmKSA/IDAgOiAxOwoJfQoKCXJldHVybiBFcnJvcjsKfQoKaW50IHRlc3RfcXVhdF9hbmdsZUF4aXMoKQp7CglpbnQgRXJyb3IgPSAwOwoKCWdsbTo6cXVhdCBBID0gZ2xtOjphbmdsZUF4aXMoMC4wZiwgZ2xtOjp2ZWMzKDAsIDAsIDEpKTsKCWdsbTo6cXVhdCBCID0gZ2xtOjphbmdsZUF4aXMoZ2xtOjpwaTxmbG9hdD4oKSAqIDAuNWYsIGdsbTo6dmVjMygwLCAwLCAxKSk7CglnbG06OnF1YXQgQyA9IGdsbTo6bWl4KEEsIEIsIDAuNWYpOwoJZ2xtOjpxdWF0IEQgPSBnbG06OmFuZ2xlQXhpcyhnbG06OnBpPGZsb2F0PigpICogMC4yNWYsIGdsbTo6dmVjMygwLCAwLCAxKSk7CgoJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoQy54LCBELngsIDAuMDFmKSA/IDAgOiAxOwoJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoQy55LCBELnksIDAuMDFmKSA/IDAgOiAxOwoJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoQy56LCBELnosIDAuMDFmKSA/IDAgOiAxOwoJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoQy53LCBELncsIDAuMDFmKSA/IDAgOiAxOwoKCXJldHVybiBFcnJvcjsKfQoKaW50IHRlc3RfcXVhdF9taXgoKQp7CglpbnQgRXJyb3IgPSAwOwoKCWdsbTo6cXVhdCBBID0gZ2xtOjphbmdsZUF4aXMoMC4wZiwgZ2xtOjp2ZWMzKDAsIDAsIDEpKTsKCWdsbTo6cXVhdCBCID0gZ2xtOjphbmdsZUF4aXMoZ2xtOjpwaTxmbG9hdD4oKSAqIDAuNWYsIGdsbTo6dmVjMygwLCAwLCAxKSk7CglnbG06OnF1YXQgQyA9IGdsbTo6bWl4KEEsIEIsIDAuNWYpOwoJZ2xtOjpxdWF0IEQgPSBnbG06OmFuZ2xlQXhpcyhnbG06OnBpPGZsb2F0PigpICogMC4yNWYsIGdsbTo6dmVjMygwLCAwLCAxKSk7CgoJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoQy54LCBELngsIDAuMDFmKSA/IDAgOiAxOwoJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoQy55LCBELnksIDAuMDFmKSA/IDAgOiAxOwoJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoQy56LCBELnosIDAuMDFmKSA/IDAgOiAxOwoJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoQy53LCBELncsIDAuMDFmKSA/IDAgOiAxOwoKCXJldHVybiBFcnJvcjsKfQoKaW50IHRlc3RfcXVhdF9wcmVjaXNpb24oKQp7CglpbnQgRXJyb3IgPSAwOwoKCUVycm9yICs9IHNpemVvZihnbG06Omxvd3BfcXVhdCkgPD0gc2l6ZW9mKGdsbTo6bWVkaXVtcF9xdWF0KSA/IDAgOiAxOwoJRXJyb3IgKz0gc2l6ZW9mKGdsbTo6bWVkaXVtcF9xdWF0KSA8PSBzaXplb2YoZ2xtOjpoaWdocF9xdWF0KSA/IDAgOiAxOwoKCXJldHVybiBFcnJvcjsKfQoKaW50IHRlc3RfcXVhdF9ub3JtYWxpemUoKQp7CglpbnQgRXJyb3IoMCk7CgoJewoJCWdsbTo6cXVhdCBRID0gZ2xtOjphbmdsZUF4aXMoZ2xtOjpwaTxmbG9hdD4oKSAqIDAuMjVmLCBnbG06OnZlYzMoMCwgMCwgMSkpOwoJCWdsbTo6cXVhdCBOID0gZ2xtOjpub3JtYWxpemUoUSk7CgkJZmxvYXQgTCA9IGdsbTo6bGVuZ3RoKE4pOwoJCUVycm9yICs9IGdsbTo6ZXBzaWxvbkVxdWFsKEwsIDEuMGYsIDAuMDAwMDAxZikgPyAwIDogMTsKCX0KCXsKCQlnbG06OnF1YXQgUSA9IGdsbTo6YW5nbGVBeGlzKGdsbTo6cGk8ZmxvYXQ+KCkgKiAwLjI1ZiwgZ2xtOjp2ZWMzKDAsIDAsIDIpKTsKCQlnbG06OnF1YXQgTiA9IGdsbTo6bm9ybWFsaXplKFEpOwoJCWZsb2F0IEwgPSBnbG06Omxlbmd0aChOKTsKCQlFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChMLCAxLjBmLCAwLjAwMDAwMWYpID8gMCA6IDE7Cgl9Cgl7CgkJZ2xtOjpxdWF0IFEgPSBnbG06OmFuZ2xlQXhpcyhnbG06OnBpPGZsb2F0PigpICogMC4yNWYsIGdsbTo6dmVjMygxLCAyLCAzKSk7CgkJZ2xtOjpxdWF0IE4gPSBnbG06Om5vcm1hbGl6ZShRKTsKCQlmbG9hdCBMID0gZ2xtOjpsZW5ndGgoTik7CgkJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoTCwgMS4wZiwgMC4wMDAwMDFmKSA/IDAgOiAxOwoJfQoKCXJldHVybiBFcnJvcjsKfQoKaW50IHRlc3RfcXVhdF9ldWxlcigpCnsKCWludCBFcnJvcigwKTsKCgl7CgkJZ2xtOjpxdWF0IHEoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CgkJZmxvYXQgUm9sbCA9IGdsbTo6cm9sbChxKTsKCQlmbG9hdCBQaXRjaCA9IGdsbTo6cGl0Y2gocSk7CgkJZmxvYXQgWWF3ID0gZ2xtOjp5YXcocSk7CgkJZ2xtOjp2ZWMzIEFuZ2xlcyA9IGdsbTo6ZXVsZXJBbmdsZXMocSk7Cgl9CgoJewoJCWdsbTo6ZHF1YXQgcSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKCQlkb3VibGUgUm9sbCA9IGdsbTo6cm9sbChxKTsKCQlkb3VibGUgUGl0Y2ggPSBnbG06OnBpdGNoKHEpOwoJCWRvdWJsZSBZYXcgPSBnbG06OnlhdyhxKTsKCQlnbG06OmR2ZWMzIEFuZ2xlcyA9IGdsbTo6ZXVsZXJBbmdsZXMocSk7Cgl9CgoJcmV0dXJuIEVycm9yOwp9CgppbnQgdGVzdF9xdWF0X3NsZXJwKCkKewoJaW50IEVycm9yKDApOwoKCWZsb2F0IGNvbnN0IEVwc2lsb24gPSAwLjAwMDFmOy8vZ2xtOjplcHNpbG9uPGZsb2F0PigpOwoKCWZsb2F0IHNxcnQyID0gc3FydCgyLjBmKS8yLjBmOwoJZ2xtOjpxdWF0IGlkOwoJZ2xtOjpxdWF0IFk5MHJvdChzcXJ0MiwgMC4wZiwgc3FydDIsIDAuMGYpOwoJZ2xtOjpxdWF0IFkxODByb3QoMC4wZiwgMC4wZiwgMS4wZiwgMC4wZik7CgoJLy8gVGVzdGluZyBhID09IDAKCS8vIE11c3QgYmUgaWQKCWdsbTo6cXVhdCBpZDIgPSBnbG06OnNsZXJwKGlkLCBZOTByb3QsIDAuMGYpOwoJRXJyb3IgKz0gZ2xtOjphbGwoZ2xtOjplcHNpbG9uRXF1YWwoaWQsIGlkMiwgRXBzaWxvbikpID8gMCA6IDE7CgoJLy8gVGVzdGluZyBhID09IDEKCS8vIE11c3QgYmUgOTCwIHJvdGF0aW9uIG9uIFkgOiAwIDAuNyAwIDAuNwoJZ2xtOjpxdWF0IFk5MHJvdDIgPSBnbG06OnNsZXJwKGlkLCBZOTByb3QsIDEuMGYpOwoJRXJyb3IgKz0gZ2xtOjphbGwoZ2xtOjplcHNpbG9uRXF1YWwoWTkwcm90LCBZOTByb3QyLCBFcHNpbG9uKSkgPyAwIDogMTsKCgkvLyBUZXN0aW5nIHN0YW5kYXJkLCBlYXN5IGNhc2UKCS8vIE11c3QgYmUgNDWwIHJvdGF0aW9uIG9uIFkgOiAwIDAuMzggMCAwLjkyCglnbG06OnF1YXQgWTQ1cm90MSA9IGdsbTo6c2xlcnAoaWQsIFk5MHJvdCwgMC41Zik7CgoJLy8gVGVzdGluZyByZXZlcnNlIGNhc2UKCS8vIE11c3QgYmUgNDWwIHJvdGF0aW9uIG9uIFkgOiAwIDAuMzggMCAwLjkyCglnbG06OnF1YXQgWW00NXJvdDIgPSBnbG06OnNsZXJwKFk5MHJvdCwgaWQsIDAuNWYpOwoKCS8vIFRlc3RpbmcgYWdhaW5zdCBmdWxsIGNpcmNsZSBhcm91bmQgdGhlIHNwaGVyZSBpbnN0ZWFkIG9mIHNob3J0ZXN0IHBhdGgKCS8vIE11c3QgYmUgNDWwIHJvdGF0aW9uIG9uIFkKCS8vIGNlcnRhaW5seSBub3QgYSAxMzWwIHJvdGF0aW9uCglnbG06OnF1YXQgWTQ1cm90MyA9IGdsbTo6c2xlcnAoaWQgLCAtWTkwcm90LCAwLjVmKTsKCWZsb2F0IFk0NWFuZ2xlMyA9IGdsbTo6YW5nbGUoWTQ1cm90Myk7CglFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChZNDVhbmdsZTMsIGdsbTo6cGk8ZmxvYXQ+KCkgKiAwLjI1ZiwgRXBzaWxvbikgPyAwIDogMTsKCUVycm9yICs9IGdsbTo6YWxsKGdsbTo6ZXBzaWxvbkVxdWFsKFltNDVyb3QyLCBZNDVyb3QzLCBFcHNpbG9uKSkgPyAwIDogMTsKCgkvLyBTYW1lLCBidXQgaW52ZXJ0ZWQKCS8vIE11c3QgYWxzbyBiZSA0NbAgcm90YXRpb24gb24gWSA6ICAwIDAuMzggMCAwLjkyCgkvLyAtMCAtMC4zOCAtMCAtMC45MiBpcyBvayB0b28KCWdsbTo6cXVhdCBZNDVyb3Q0ID0gZ2xtOjpzbGVycCgtWTkwcm90LCBpZCwgMC41Zik7CglFcnJvciArPSBnbG06OmFsbChnbG06OmVwc2lsb25FcXVhbChZbTQ1cm90MiwgLVk0NXJvdDQsIEVwc2lsb24pKSA/IDAgOiAxOwoKCS8vIFRlc3RpbmcgcTEgPSBxMgoJLy8gTXVzdCBiZSA5MLAgcm90YXRpb24gb24gWSA6IDAgMC43IDAgMC43CglnbG06OnF1YXQgWTkwcm90MyA9IGdsbTo6c2xlcnAoWTkwcm90LCBZOTByb3QsIDAuNWYpOwoJRXJyb3IgKz0gZ2xtOjphbGwoZ2xtOjplcHNpbG9uRXF1YWwoWTkwcm90LCBZOTByb3QzLCBFcHNpbG9uKSkgPyAwIDogMTsKCgkvLyBUZXN0aW5nIDE4MLAgcm90YXRpb24KCS8vIE11c3QgYmUgOTCwIHJvdGF0aW9uIG9uIGFsbW9zdCBhbnkgYXhpcyB0aGF0IGlzIG9uIHRoZSBYWiBwbGFuZQoJZ2xtOjpxdWF0IFhaOTByb3QgPSBnbG06OnNsZXJwKGlkLCAtWTkwcm90LCAwLjVmKTsKCWZsb2F0IFhaOTBhbmdsZSA9IGdsbTo6YW5nbGUoWFo5MHJvdCk7IC8vIE11c3QgYmUgUEkvNCA9IDAuNzg7CglFcnJvciArPSBnbG06OmVwc2lsb25FcXVhbChYWjkwYW5nbGUsIGdsbTo6cGk8ZmxvYXQ+KCkgKiAwLjI1ZiwgRXBzaWxvbikgPyAwIDogMTsKCgkvLyBUZXN0aW5nIGFsbW9zdCBlcXVhbCBxdWF0ZXJuaW9ucyAodGhpcyB0ZXN0IHNob3VsZCBwYXNzIHRocm91Z2ggdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uKQoJLy8gTXVzdCBiZSAwIDAuMDBYIDAgMC45OTk5OQoJZ2xtOjpxdWF0IGFsbW9zdGlkID0gZ2xtOjpzbGVycChpZCwgZ2xtOjphbmdsZUF4aXMoMC4xZiwgZ2xtOjp2ZWMzKDAuMGYsIDEuMGYsIDAuMGYpKSwgMC41Zik7CgoJLy8gVGVzdGluZyBxdWF0ZXJuaW9ucyB3aXRoIG9wcG9zaXRlIHNpZ24KCXsKCQlnbG06OnF1YXQgYSgtMSwgMCwgMCwgMCk7CgoJCWdsbTo6cXVhdCByZXN1bHQgPSBnbG06OnNsZXJwKGEsIGlkLCAwLjVmKTsKCgkJRXJyb3IgKz0gZ2xtOjplcHNpbG9uRXF1YWwoZ2xtOjpwb3coZ2xtOjpkb3QoaWQsIHJlc3VsdCksIDIuZiksIDEuZiwgMC4wMWYpID8gMCA6IDE7Cgl9CgoJcmV0dXJuIEVycm9yOwp9CgppbnQgdGVzdF9xdWF0X211bCgpCnsKCWludCBFcnJvcigwKTsKCglnbG06OnF1YXQgdGVtcDEgPSBnbG06Om5vcm1hbGl6ZShnbG06OnF1YXQoMS4wZiwgZ2xtOjp2ZWMzKDAuMCwgMS4wLCAwLjApKSk7CglnbG06OnF1YXQgdGVtcDIgPSBnbG06Om5vcm1hbGl6ZShnbG06OnF1YXQoMC41ZiwgZ2xtOjp2ZWMzKDEuMCwgMC4wLCAwLjApKSk7CgoJZ2xtOjp2ZWMzIHRyYW5zZm9ybWVkMCA9ICh0ZW1wMSAqIGdsbTo6dmVjMygwLjAsIDEuMCwgMC4wKSAqIGdsbTo6aW52ZXJzZSh0ZW1wMSkpOwoJZ2xtOjp2ZWMzIHRlbXA0ID0gdGVtcDIgKiB0cmFuc2Zvcm1lZDAgKiBnbG06OmludmVyc2UodGVtcDIpOwoKCWdsbTo6cXVhdCB0ZW1wNSA9IGdsbTo6bm9ybWFsaXplKHRlbXAxICogdGVtcDIpOwoJZ2xtOjp2ZWMzIHRlbXA2ID0gdGVtcDUgKiBnbG06OnZlYzMoMC4wLCAxLjAsIDAuMCkgKiBnbG06OmludmVyc2UodGVtcDUpOwoKIwlpZm5kZWYgR0xNX0ZPUkNFX05PX0NUT1JfSU5JVAoJewoJCWdsbTo6cXVhdCB0ZW1wNzsKCgkJdGVtcDcgKj0gdGVtcDU7CgkJdGVtcDcgKj0gZ2xtOjppbnZlcnNlKHRlbXA1KTsKCgkJRXJyb3IgKz0gdGVtcDcgIT0gZ2xtOjpxdWF0KCk7Cgl9CiMJZW5kaWYKCglyZXR1cm4gRXJyb3I7Cn0KCmludCB0ZXN0X3F1YXRfdHdvX2F4aXNfY3RyKCkKewoJaW50IEVycm9yKDApOwoKCWdsbTo6cXVhdCBxMShnbG06OnZlYzMoMSwgMCwgMCksIGdsbTo6dmVjMygwLCAxLCAwKSk7CglnbG06OnZlYzMgdjEgPSBxMSAqIGdsbTo6dmVjMygxLCAwLCAwKTsKCUVycm9yICs9IGdsbTo6YWxsKGdsbTo6ZXBzaWxvbkVxdWFsKHYxLCBnbG06OnZlYzMoMCwgMSwgMCksIDAuMDAwMWYpKSA/IDAgOiAxOwoKCWdsbTo6cXVhdCBxMiA9IHExICogcTE7CglnbG06OnZlYzMgdjIgPSBxMiAqIGdsbTo6dmVjMygxLCAwLCAwKTsKCUVycm9yICs9IGdsbTo6YWxsKGdsbTo6ZXBzaWxvbkVxdWFsKHYyLCBnbG06OnZlYzMoLTEsIDAsIDApLCAwLjAwMDFmKSkgPyAwIDogMTsKCglyZXR1cm4gRXJyb3I7Cn0KCmludCB0ZXN0X3F1YXRfdHlwZSgpCnsKCWdsbTo6cXVhdCBBOwoJZ2xtOjpkcXVhdCBCOwoKCXJldHVybiAwOwp9CgppbnQgdGVzdF9xdWF0X211bF92ZWMoKQp7CglpbnQgRXJyb3IoMCk7CgoJZ2xtOjpxdWF0IHEgPSBnbG06OmFuZ2xlQXhpcyhnbG06OnBpPGZsb2F0PigpICogMC41ZiwgZ2xtOjp2ZWMzKDAsIDAsIDEpKTsKCWdsbTo6dmVjMyB2KDEsIDAsIDApOwoJZ2xtOjp2ZWMzIHUocSAqIHYpOwoJZ2xtOjp2ZWMzIHcodSAqIHEpOwoKCUVycm9yICs9IGdsbTo6YWxsKGdsbTo6ZXBzaWxvbkVxdWFsKHYsIHcsIDAuMDFmKSkgPyAwIDogMTsKCglyZXR1cm4gRXJyb3I7Cn0KCmludCB0ZXN0X3F1YXRfY3RyKCkKewoJaW50IEVycm9yKDApOwoKIwlpZiBHTE1fSEFTX1RSSVZJQUxfUVVFUklFUwoJLy8JRXJyb3IgKz0gc3RkOjppc190cml2aWFsbHlfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPGdsbTo6cXVhdD46OnZhbHVlID8gMCA6IDE7CgkvLwlFcnJvciArPSBzdGQ6OmlzX3RyaXZpYWxseV9kZWZhdWx0X2NvbnN0cnVjdGlibGU8Z2xtOjpkcXVhdD46OnZhbHVlID8gMCA6IDE7CgkvLwlFcnJvciArPSBzdGQ6OmlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGU8Z2xtOjpxdWF0Pjo6dmFsdWUgPyAwIDogMTsKCS8vCUVycm9yICs9IHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZTxnbG06OmRxdWF0Pjo6dmFsdWUgPyAwIDogMTsKCQlFcnJvciArPSBzdGQ6OmlzX3RyaXZpYWxseV9jb3B5YWJsZTxnbG06OnF1YXQ+Ojp2YWx1ZSA/IDAgOiAxOwoJCUVycm9yICs9IHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlhYmxlPGdsbTo6ZHF1YXQ+Ojp2YWx1ZSA/IDAgOiAxOwoKCQlFcnJvciArPSBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxnbG06OnF1YXQ+Ojp2YWx1ZSA/IDAgOiAxOwoJCUVycm9yICs9IHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPGdsbTo6ZHF1YXQ+Ojp2YWx1ZSA/IDAgOiAxOwojCWVuZGlmCgojCWlmIEdMTV9IQVNfSU5JVElBTElaRVJfTElTVFMKCXsKCQlnbG06OnF1YXQgQXswLCAxLCAyLCAzfTsKCgkJc3RkOjp2ZWN0b3I8Z2xtOjpxdWF0PiBCewoJCQl7MCwgMSwgMiwgM30sCgkJCXswLCAxLCAyLCAzfX07Cgl9CiMJZW5kaWYvL0dMTV9IQVNfSU5JVElBTElaRVJfTElTVFMKCglyZXR1cm4gRXJyb3I7Cn0KCmludCBtYWluKCkKewoJaW50IEVycm9yKDApOwoKCUVycm9yICs9IHRlc3RfcXVhdF9jdHIoKTsKCUVycm9yICs9IHRlc3RfcXVhdF9tdWxfdmVjKCk7CglFcnJvciArPSB0ZXN0X3F1YXRfdHdvX2F4aXNfY3RyKCk7CglFcnJvciArPSB0ZXN0X3F1YXRfbXVsKCk7CglFcnJvciArPSB0ZXN0X3F1YXRfcHJlY2lzaW9uKCk7CglFcnJvciArPSB0ZXN0X3F1YXRfdHlwZSgpOwoJRXJyb3IgKz0gdGVzdF9xdWF0X2FuZ2xlKCk7CglFcnJvciArPSB0ZXN0X3F1YXRfYW5nbGVBeGlzKCk7CglFcnJvciArPSB0ZXN0X3F1YXRfbWl4KCk7CglFcnJvciArPSB0ZXN0X3F1YXRfbm9ybWFsaXplKCk7CglFcnJvciArPSB0ZXN0X3F1YXRfZXVsZXIoKTsKCUVycm9yICs9IHRlc3RfcXVhdF9zbGVycCgpOwoKCXJldHVybiBFcnJvcjsKfQo=