ISB7IGRnLWRvIHJ1biB9CiEgeyBkZy1vcHRpb25zICItc3RkPWdudSIgfQohCiEgMTMuNy41MyAgICBJTlQoQSBbLCBLSU5EXSkKIQohIERlc2NyaXB0aW9uLiAgQ29udmVydCB0byBpbnRlZ2VyIHR5cGUuCiEgQ2xhc3MuICAgICAgIEVsZW1lbnRhbCBmdW5jdGlvbi4KISBBcmd1bWVudHMuCiEgICAgQSAgICAgICAgICAgICAgIHNoYWxsIGJlIG9mIHR5cGUgaW50ZWdlciwgcmVhbCwgb3IgY29tcGxleCwKISAgICAgICAgICAgICAgICAgICAgb3IgYSBib3otbGl0ZXJhbC1jb25zdGFudCAuCiEgICAgS0lORCAob3B0aW9uYWwpIHNoYWxsIGJlIGEgc2NhbGFyIGludGVnZXIgaW5pdGlhbGl6YXRpb24gZXhwcmVzc2lvbi4KIQohIFJlc3VsdCBDaGFyYWN0ZXJpc3RpY3MuIEludGVnZXIuIElmIEtJTkQgaXMgcHJlc2VudCwgdGhlIGtpbmQgdHlwZQohICAgIHBhcmFtZXRlciBpcyB0aGF0IHNwZWNpZmllZCBieSB0aGUgdmFsdWUgb2YgS0lORDsgb3RoZXJ3aXNlLCB0aGUKISAgICBraW5kIHR5cGUgcGFyYW1ldGVyIGlzIHRoYXQgb2YgZGVmYXVsdCBpbnRlZ2VyIHR5cGUuCiEKISBSZXN1bHQgVmFsdWUuCiEKISAgICBDYXNlICgxKTogIElmIEEgaXMgb2YgdHlwZSBpbnRlZ2VyLCBJTlQgKEEpID0gQS4KIQohICAgIENhc2UgKDIpOiAgSWYgQSBpcyBvZiB0eXBlIHJlYWwsIHRoZXJlIGFyZSB0d28gY2FzZXM6CiEgICAgICAoYSkgaWYgfEF8IDwgMSwgSU5UIChBKSBoYXMgdGhlIHZhbHVlIDAKISAgICAgIChiKSBpZiB8QXwgLmdlLiAxLCBJTlQgKEEpIGlzIHRoZSBpbnRlZ2VyIHdob3NlIG1hZ25pdHVkZSBpcyB0aGUKISAgICAgICAgICBsYXJnZXN0IGludGVnZXIgdGhhdCBkb2VzIG5vdCBleGNlZWQgdGhlIG1hZ25pdHVkZSBvZiBBIGFuZAohICAgICAgICAgIHdob3NlIHNpZ24gaXMgdGhlIHNhbWUgYXMgdGhlIHNpZ24gb2YgQS4KIQohICAgIENhc2UgKDMpOiAgSWYgQSBpcyBvZiB0eXBlIGNvbXBsZXgsIElOVChBKSA9IElOVChSRUFMKEEsIEtJTkQoQSkpKS4KIQohICAgIENhc2UgKDQpOiAgSWYgQSBpcyBhIGJvei1saXRlcmFsLWNvbnN0YW50LCBpdCBpcyB0cmVhdGVkIGFzIGlmIGl0IHdlcmUKISAgICAgICAgICAgICAgIGFuIGludC1saXRlcmFsLWNvbnN0YW50IHdpdGggYSBraW5kLXBhcmFtIHRoYXQgc3BlY2lmaWVzIHRoZQohICAgICAgICAgICAgICAgcmVwcmVzZW50YXRpb24gbWV0aG9kIHdpdGggdGhlIGxhcmdlc3QgZGVjaW1hbCBleHBvbmVudCByYW5nZQohICAgICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBwcm9jZXNzb3IuCiEKISAgICBFeGFtcGxlLiBJTlQgKK0zLjcpIGhhcyB0aGUgdmFsdWUgrTMuCiEKbW9kdWxlIG15a2luZHMKICAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IGlrMSA9IHNlbGVjdGVkX2ludF9raW5kKDIpCiAgIGludGVnZXIsIHBhcmFtZXRlciA6OiBpazIgPSBzZWxlY3RlZF9pbnRfa2luZCg0KQogICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogaWs0ID0gc2VsZWN0ZWRfaW50X2tpbmQoOSkKICAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IGlrOCA9IHNlbGVjdGVkX2ludF9raW5kKDE4KQogICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogc3AgPSBzZWxlY3RlZF9yZWFsX2tpbmQoNiwzMCkKICAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IGRwID0gc2VsZWN0ZWRfcmVhbF9raW5kKDE1LDMwMCkKICAgaW50ZWdlciwgcGFyYW1ldGVyIDo6IGNrID0ga2luZCgnYScpCmVuZCBtb2R1bGUgbXlraW5kcwoKcHJvZ3JhbSB0ZXN0X2ludAoKICAgdXNlIG15a2luZHMKCiAgIGludGVnZXIoaWsxKSBpMQogICBpbnRlZ2VyKGlrMikgaTIKICAgaW50ZWdlcihpazQpIGk0CiAgIGludGVnZXIoaWs4KSBpOAogICByZWFsKHNwKSByNAogICByZWFsKGRwKSByOAogICBjb21wbGV4KHNwKSBjNAogICBjb21wbGV4KGRwKSBjOAogICAhCiAgICEgQ2FzZSAxCiAgICEKICAgaTEgPSBpbnQoLTMpCiAgIGkyID0gaW50KC0zKQogICBpNCA9IGludCgtMykKICAgaTggPSBpbnQoLTMpCiAgIGlmIChpMSAvPSAtM19pazEgLm9yLiBpMiAvPSAtM19pazIpIFNUT1AgMQogICBpZiAoaTQgLz0gLTNfaWs0IC5vci4gaTggLz0gLTNfaWs4KSBTVE9QIDIKCiAgIGkxID0gaW50KDUsICBpazEpCiAgIGkyID0gaW50KGkxLCBpazIpCiAgIGk0ID0gaW50KGkxLCBpazQpCiAgIGk4ID0gaW50KGkxLCBpazgpCiAgIGlmIChpMSAvPSA1X2lrMSAub3IuIGkyIC89IDVfaWsyKSBTVE9QIDMKICAgaWYgKGk0IC89IDVfaWs0IC5vci4gaTggLz0gNV9pazgpIFNUT1AgNAoKICAgaTggPSBpbnQoMTAsIGlrOCkKICAgaTEgPSBpbnQoaTgsIGlrMSkKICAgaTIgPSBpbnQoaTgsIGlrMikKICAgaTQgPSBpbnQoaTgsIGlrNCkKICAgaWYgKGkxIC89IDEwX2lrMSAub3IuIGkyIC89IDEwX2lrMikgU1RPUCA1CiAgIGlmIChpNCAvPSAxMF9pazQgLm9yLiBpOCAvPSAxMF9pazgpIFNUT1AgNgogICAhCiAgICEgY2FzZSAyKGIpCiAgICEKICAgcjQgPSAtMy43X3NwCiAgIGkxID0gaW50KHI0LCAgaWsxKQogICBpMiA9IGludChyNCwgaWsyKQogICBpNCA9IGludChyNCwgaWs0KQogICBpOCA9IGludChyNCwgaWs4KQogICBpZiAoaTEgLz0gLTNfaWsxIC5vci4gaTIgLz0gLTNfaWsyKSBTVE9QIDcKICAgaWYgKGk0IC89IC0zX2lrNCAub3IuIGk4IC89IC0zX2lrOCkgU1RPUCA4CgogICByOCA9IC0zLjdfZHAKICAgaTEgPSBpbnQocjgsICBpazEpCiAgIGkyID0gaW50KHI4LCBpazIpCiAgIGk0ID0gaW50KHI4LCBpazQpCiAgIGk4ID0gaW50KHI4LCBpazgpCiAgIGlmIChpMSAvPSAtM19pazEgLm9yLiBpMiAvPSAtM19pazIpIFNUT1AgOQogICBpZiAoaTQgLz0gLTNfaWs0IC5vci4gaTggLz0gLTNfaWs4KSBTVE9QIDEwCiAgICEKICAgISBDYXNlIDIoYSkKICAgIQogICByNCA9IC0zLjdFLTFfc3AKICAgaTEgPSBpbnQocjQsIGlrMSkKICAgaTIgPSBpbnQocjQsIGlrMikKICAgaTQgPSBpbnQocjQsIGlrNCkKICAgaTggPSBpbnQocjQsIGlrOCkKICAgaWYgKGkxIC89IDBfaWsxIC5vci4gaTIgLz0gMF9pazIpIFNUT1AgMTEKICAgaWYgKGk0IC89IDBfaWs0IC5vci4gaTggLz0gMF9pazgpIFNUT1AgMTIKCiAgIHI4ID0gLTMuN0UtMV9kcAogICBpMSA9IGludChyOCwgaWsxKQogICBpMiA9IGludChyOCwgaWsyKQogICBpNCA9IGludChyOCwgaWs0KQogICBpOCA9IGludChyOCwgaWs4KQogICBpZiAoaTEgLz0gMF9pazEgLm9yLiBpMiAvPSAwX2lrMikgU1RPUCAxMwogICBpZiAoaTQgLz0gMF9pazQgLm9yLiBpOCAvPSAwX2lrOCkgU1RPUCAxNAogICAhCiAgICEgQ2FzZSAzCiAgICEKICAgYzQgPSAoLTMuN0UtMV9zcCwzLjdFLTFfc3ApCiAgIGkxID0gaW50KGM0LCBpazEpCiAgIGkyID0gaW50KGM0LCBpazIpCiAgIGk0ID0gaW50KGM0LCBpazQpCiAgIGk4ID0gaW50KGM0LCBpazgpCiAgIGlmIChpMSAvPSAwX2lrMSAub3IuIGkyIC89IDBfaWsyKSBTVE9QIDE1CiAgIGlmIChpNCAvPSAwX2lrNCAub3IuIGk4IC89IDBfaWs4KSBTVE9QIDE2CgogICBjOCA9ICgtMy43RS0xX2RwLDMuN0UtMV9kcCkKICAgaTEgPSBpbnQoYzgsIGlrMSkKICAgaTIgPSBpbnQoYzgsIGlrMikKICAgaTQgPSBpbnQoYzgsIGlrNCkKICAgaTggPSBpbnQoYzgsIGlrOCkKICAgaWYgKGkxIC89IDBfaWsxIC5vci4gaTIgLz0gMF9pazIpIFNUT1AgMTcKICAgaWYgKGk0IC89IDBfaWs0IC5vci4gaTggLz0gMF9pazgpIFNUT1AgMTgKCiAgIGM0ID0gKC0zLjdfc3AsMy43X3NwKQogICBpMSA9IGludChjNCwgaWsxKQogICBpMiA9IGludChjNCwgaWsyKQogICBpNCA9IGludChjNCwgaWs0KQogICBpOCA9IGludChjNCwgaWs4KQogICBpZiAoaTEgLz0gLTNfaWsxIC5vci4gaTIgLz0gLTNfaWsyKSBTVE9QIDE5CiAgIGlmIChpNCAvPSAtM19pazQgLm9yLiBpOCAvPSAtM19pazgpIFNUT1AgMjAKCiAgIGM4ID0gKDMuN19kcCwzLjdfZHApCiAgIGkxID0gaW50KGM4LCBpazEpCiAgIGkyID0gaW50KGM4LCBpazIpCiAgIGk0ID0gaW50KGM4LCBpazQpCiAgIGk4ID0gaW50KGM4LCBpazgpCiAgIGlmIChpMSAvPSAzX2lrMSAub3IuIGkyIC89IDNfaWsyKSBTVE9QIDIxCiAgIGlmIChpNCAvPSAzX2lrNCAub3IuIGk4IC89IDNfaWs4KSBTVE9QIDIyCiAgICEKICAgISBDYXNlIDQKICAgIQogICBpMSA9IGludChiJzAwMTEnLCBpazEpCiAgIGkyID0gaW50KGInMDAxMScsIGlrMikKICAgaTQgPSBpbnQoYicwMDExJywgaWs0KQogICBpOCA9IGludChiJzAwMTEnLCBpazgpCiAgIGlmIChpMSAvPSAzX2lrMSAub3IuIGkyIC89IDNfaWsyKSBTVE9QIDIzCiAgIGlmIChpNCAvPSAzX2lrNCAub3IuIGk4IC89IDNfaWs4KSBTVE9QIDI0CiAgIGkxID0gaW50KG8nMDAxMScsIGlrMSkKICAgaTIgPSBpbnQobycwMDExJywgaWsyKQogICBpNCA9IGludChvJzAwMTEnLCBpazQpCiAgIGk4ID0gaW50KG8nMDAxMScsIGlrOCkKICAgaWYgKGkxIC89IDlfaWsxIC5vci4gaTIgLz0gOV9pazIpIFNUT1AgMjUKICAgaWYgKGk0IC89IDlfaWs0IC5vci4gaTggLz0gOV9pazgpIFNUT1AgMjYKICAgaTEgPSBpbnQoeicwMDExJywgaWsxKQogICBpMiA9IGludCh6JzAwMTEnLCBpazIpCiAgIGk0ID0gaW50KHonMDAxMScsIGlrNCkKICAgaTggPSBpbnQoeicwMDExJywgaWs4KQogICBpZiAoaTEgLz0gMTdfaWsxIC5vci4gaTIgLz0gMTdfaWsyKSBTVE9QIDI3CiAgIGlmIChpNCAvPSAxN19pazQgLm9yLiBpOCAvPSAxN19pazgpIFNUT1AgMjgKICAgCmVuZCBwcm9ncmFtIHRlc3RfaW50Cg==