f0VMRgEBAQAAAAAAAAAAAAEACAABAAAAAAAAAAAAAACkOwAABxAAUDQAAAAAACgABQACAHYxOwpwYWNrYWdlIHRlbXBsYXRlOwpwa2dwYXRoIG9sZC90ZW1wbGF0ZTsKcHJpb3JpdHkgODsKaW1wb3J0IGJ5dGVzIGJ5dGVzICJieXRlcyI7CmltcG9ydCBmbXQgZm10ICJmbXQiOwppbXBvcnQgaW8gaW8gImlvIjsKaW1wb3J0IGlvdXRpbCBpby9pb3V0aWwgImlvL2lvdXRpbCI7CmltcG9ydCByZWZsZWN0IHJlZmxlY3QgInJlZmxlY3QiOwppbXBvcnQgc3RyY29udiBzdHJjb252ICJzdHJjb252IjsKaW1wb3J0IHN0cmluZ3Mgc3RyaW5ncyAic3RyaW5ncyI7CmltcG9ydCB1bmljb2RlIHVuaWNvZGUgInVuaWNvZGUiOwppbXBvcnQgdXRmOCB1bmljb2RlL3V0ZjggInVuaWNvZGUvdXRmOCI7CmluaXQgdGVtcGxhdGUgb2xkX3RlbXBsYXRlLi5pbXBvcnQgOCBtYXRoIG1hdGguLmltcG9ydCAxIHJ1bnRpbWUgcnVudGltZS4uaW1wb3J0IDEgdW5pY29kZSB1bmljb2RlLi5pbXBvcnQgMSBzdHJjb252IHN0cmNvbnYuLmltcG9ydCAyIHN5bmMgc3luYy4uaW1wb3J0IDIgaW8gaW8uLmltcG9ydCAzIHJlZmxlY3QgcmVmbGVjdC4uaW1wb3J0IDMgc3lzY2FsbCBzeXNjYWxsLi5pbXBvcnQgMyBieXRlcyBieXRlcy4uaW1wb3J0IDQgdGltZSB0aW1lLi5pbXBvcnQgNCBvcyBvcy4uaW1wb3J0IDUgZmlsZXBhdGggcGF0aF9maWxlcGF0aC4uaW1wb3J0IDYgZm10IGZtdC4uaW1wb3J0IDYgaW91dGlsIGlvX2lvdXRpbC4uaW1wb3J0IDc7CnR5cGUgPHR5cGUgMSAiRXJyb3IiIDx0eXBlIDIgc3RydWN0IHsgTGluZSA8dHlwZSAtMTE+OyBNc2cgPHR5cGUgLTE2PjsgfT4KIGZ1bmMgKGUgPHR5cGUgMyAqPHR5cGUgMT4+KSBFcnJvciAoKSA8dHlwZSAtMTY+Owo+Owp0eXBlIDx0eXBlIDQgIkZvcm1hdHRlck1hcCIgPHR5cGUgNSBtYXAgWzx0eXBlIC0xNj5dIDx0eXBlIDYgKD8gPHR5cGUgNyAiaW8uV3JpdGVyIiA8dHlwZSA4IGludGVyZmFjZSB7IFdyaXRlIChwIDx0eXBlIDkgW10gPHR5cGUgLTIwPj4pIChuIDx0eXBlIC0xMT4sIGVyciA8dHlwZSAtMTk+KTsgfT4+LCA/IDx0eXBlIC0xNj4sID8gLi4uPHR5cGUgMTAgaW50ZXJmYWNlIHsgfT4pPj4+OwpmdW5jIEhUTUxFc2NhcGUgKHcgPHR5cGUgNz4sIHMgPHR5cGUgMTEgW10gPHR5cGUgLTIwPj4pOwpmdW5jIEhUTUxGb3JtYXR0ZXIgKHcgPHR5cGUgNz4sIGZvcm1hdCA8dHlwZSAtMTY+LCB2YWx1ZSAuLi48dHlwZSAxMiBpbnRlcmZhY2UgeyB9Pik7CmZ1bmMgTXVzdFBhcnNlIChzIDx0eXBlIC0xNj4sIGZtYXAgPHR5cGUgND4pIDx0eXBlIDEzICo8dHlwZSAxNCAiVGVtcGxhdGUiIDx0eXBlIDE1IHN0cnVjdCB7IC5vbGQvdGVtcGxhdGUuZm1hcCA8dHlwZSA0PjsgLm9sZC90ZW1wbGF0ZS5sZGVsaW0gPHR5cGUgMTYgW10gPHR5cGUgLTIwPj47IC5vbGQvdGVtcGxhdGUucmRlbGltIDx0eXBlIDE2PjsgLm9sZC90ZW1wbGF0ZS5idWYgPHR5cGUgMTcgW10gPHR5cGUgLTIwPj47IC5vbGQvdGVtcGxhdGUucCA8dHlwZSAtMTE+OyAub2xkL3RlbXBsYXRlLmxpbmVudW0gPHR5cGUgLTExPjsgLm9sZC90ZW1wbGF0ZS5lbGVtcyA8dHlwZSAxOCBbXSA8dHlwZSAxOSBpbnRlcmZhY2UgeyB9Pj47IH0+CiBmdW5jICh0IDx0eXBlIDIwICo8dHlwZSAxND4+KSAub2xkL3RlbXBsYXRlLmxvb2t1cCAoc3QgPHR5cGUgMjEgKjx0eXBlIDIyICIub2xkL3RlbXBsYXRlLnN0YXRlIiA8dHlwZSAyMyBzdHJ1Y3QgeyAub2xkL3RlbXBsYXRlLnBhcmVudCA8dHlwZSAyNCAqPHR5cGUgMjI+PjsgLm9sZC90ZW1wbGF0ZS5kYXRhIDx0eXBlIDI1ICJyZWZsZWN0LlZhbHVlIiA8dHlwZSAyNiBzdHJ1Y3QgeyAucmVmbGVjdC50eXAgPHR5cGUgMjcgKjx0eXBlIDI4ICIucmVmbGVjdC5ydHlwZSIgPHR5cGUgMjkgc3RydWN0IHsgLnJlZmxlY3Qua2luZCA8dHlwZSAtNT47IC5yZWZsZWN0LmFsaWduIDx0eXBlIC0xPjsgLnJlZmxlY3QuZmllbGRBbGlnbiA8dHlwZSAtNT47IC5yZWZsZWN0Ll8gPHR5cGUgLTU+OyAucmVmbGVjdC5zaXplIDx0eXBlIC0xMz47IC5yZWZsZWN0Lmhhc2ggPHR5cGUgLTc+OyAucmVmbGVjdC5oYXNoZm4gPHR5cGUgLTEzPjsgLnJlZmxlY3QuZXF1YWxmbiA8dHlwZSAtMTM+OyAucmVmbGVjdC5nYyA8dHlwZSAzMCAidW5zYWZlLlBvaW50ZXIiICJ1bnNhZmUiIDx0eXBlIDMxICphbnk+PjsgLnJlZmxlY3Quc3RyaW5nIDx0eXBlIDMyICo8dHlwZSAtMTY+PjsgPyA8dHlwZSAzMyAqPHR5cGUgMzQgIi5yZWZsZWN0LnVuY29tbW9uVHlwZSIgPHR5cGUgMzUgc3RydWN0IHsgLnJlZmxlY3QubmFtZSA8dHlwZSAzMj47IC5yZWZsZWN0LnBrZ1BhdGggPHR5cGUgMzI+OyAucmVmbGVjdC5tZXRob2RzIDx0eXBlIDM2IFtdIDx0eXBlIDM3ICIucmVmbGVjdC5tZXRob2QiIDx0eXBlIDM4IHN0cnVjdCB7IC5yZWZsZWN0Lm5hbWUgPHR5cGUgMzI+OyAucmVmbGVjdC5wa2dQYXRoIDx0eXBlIDMyPjsgLnJlZmxlY3QubXR5cCA8dHlwZSAzOSAqPHR5cGUgMjg+PjsgLnJlZmxlY3QudHlwIDx0eXBlIDM5PjsgLnJlZmxlY3QudGZuIDx0eXBlIDMwPjsgfT4+PjsgfT4KIGZ1bmMgKHQgPHR5cGUgNDAgKjx0eXBlIDM0Pj4pIFBrZ1BhdGggKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHQgPHR5cGUgNDA+KSBNZXRob2RCeU5hbWUgKG5hbWUgPHR5cGUgLTE2PikgKG0gPHR5cGUgNDEgInJlZmxlY3QuTWV0aG9kIiA8dHlwZSA0MiBzdHJ1Y3QgeyBOYW1lIDx0eXBlIC0xNj47IFBrZ1BhdGggPHR5cGUgLTE2PjsgVHlwZSA8dHlwZSA0MyAicmVmbGVjdC5UeXBlIiA8dHlwZSA0NCBpbnRlcmZhY2UgeyBBbGlnbiAoKSA8dHlwZSAtMTE+OyBGaWVsZEFsaWduICgpIDx0eXBlIC0xMT47IE1ldGhvZCAoPyA8dHlwZSAtMTE+KSA8dHlwZSA0MT47IE1ldGhvZEJ5TmFtZSAoPyA8dHlwZSAtMTY+KSAoPyA8dHlwZSA0MT4sID8gPHR5cGUgLTE1Pik7IE51bU1ldGhvZCAoKSA8dHlwZSAtMTE+OyBOYW1lICgpIDx0eXBlIC0xNj47IFBrZ1BhdGggKCkgPHR5cGUgLTE2PjsgU2l6ZSAoKSA8dHlwZSAtMTM+OyBTdHJpbmcgKCkgPHR5cGUgLTE2PjsgLnJlZmxlY3QucmF3U3RyaW5nICgpIDx0eXBlIC0xNj47IEtpbmQgKCkgPHR5cGUgNDUgInJlZmxlY3QuS2luZCIgPHR5cGUgLTEyPgogZnVuYyAoayA8dHlwZSA0NT4pIFN0cmluZyAoKSA8dHlwZSAtMTY+Owo+OyBJbXBsZW1lbnRzICh1IDx0eXBlIDQzPikgPHR5cGUgLTE1PjsgQXNzaWduYWJsZVRvICh1IDx0eXBlIDQzPikgPHR5cGUgLTE1PjsgQ29udmVydGlibGVUbyAodSA8dHlwZSA0Mz4pIDx0eXBlIC0xNT47IENvbXBhcmFibGUgKCkgPHR5cGUgLTE1PjsgQml0cyAoKSA8dHlwZSAtMTE+OyBDaGFuRGlyICgpIDx0eXBlIDQ2ICJyZWZsZWN0LkNoYW5EaXIiIDx0eXBlIC0xMT4KIGZ1bmMgKGQgPHR5cGUgNDY+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKPjsgSXNWYXJpYWRpYyAoKSA8dHlwZSAtMTU+OyBFbGVtICgpIDx0eXBlIDQzPjsgRmllbGQgKGkgPHR5cGUgLTExPikgPHR5cGUgNDcgInJlZmxlY3QuU3RydWN0RmllbGQiIDx0eXBlIDQ4IHN0cnVjdCB7IE5hbWUgPHR5cGUgLTE2PjsgUGtnUGF0aCA8dHlwZSAtMTY+OyBUeXBlIDx0eXBlIDQzPjsgVGFnIDx0eXBlIDQ5ICJyZWZsZWN0LlN0cnVjdFRhZyIgPHR5cGUgLTE2PgogZnVuYyAodGFnIDx0eXBlIDQ5PikgR2V0IChrZXkgPHR5cGUgLTE2PikgPHR5cGUgLTE2PjsKPjsgT2Zmc2V0IDx0eXBlIC0xMz47IEluZGV4IDx0eXBlIDUwIFtdIDx0eXBlIC0xMT4+OyBBbm9ueW1vdXMgPHR5cGUgLTE1PjsgfT4+OyBGaWVsZEJ5SW5kZXggKGluZGV4IDx0eXBlIDUxIFtdIDx0eXBlIC0xMT4+KSA8dHlwZSA0Nz47IEZpZWxkQnlOYW1lIChuYW1lIDx0eXBlIC0xNj4pICg/IDx0eXBlIDQ3PiwgPyA8dHlwZSAtMTU+KTsgRmllbGRCeU5hbWVGdW5jIChtYXRjaCA8dHlwZSA1MiAoPyA8dHlwZSAtMTY+KSA8dHlwZSAtMTU+PikgKD8gPHR5cGUgNDc+LCA/IDx0eXBlIC0xNT4pOyBJbiAoaSA8dHlwZSAtMTE+KSA8dHlwZSA0Mz47IEtleSAoKSA8dHlwZSA0Mz47IExlbiAoKSA8dHlwZSAtMTE+OyBOdW1GaWVsZCAoKSA8dHlwZSAtMTE+OyBOdW1JbiAoKSA8dHlwZSAtMTE+OyBOdW1PdXQgKCkgPHR5cGUgLTExPjsgT3V0IChpIDx0eXBlIC0xMT4pIDx0eXBlIDQzPjsgLnJlZmxlY3QuY29tbW9uICgpIDx0eXBlIDM5PjsgLnJlZmxlY3QudW5jb21tb24gKCkgPHR5cGUgNDA+OyB9Pj47IEZ1bmMgPHR5cGUgMjU+OyBJbmRleCA8dHlwZSAtMTE+OyB9Pj4sIG9rIDx0eXBlIC0xNT4pOwogZnVuYyAodCA8dHlwZSA0MD4pIE51bU1ldGhvZCAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSA0MD4pIE5hbWUgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHQgPHR5cGUgNDA+KSBNZXRob2QgKGkgPHR5cGUgLTExPikgKG0gPHR5cGUgNDE+KTsKIGZ1bmMgKHQgPHR5cGUgNDA+KSAucmVmbGVjdC51bmNvbW1vbiAoKSA8dHlwZSA0MD47Cj4+OyAucmVmbGVjdC5wdHJUb1RoaXMgPHR5cGUgMzk+OyAucmVmbGVjdC56ZXJvIDx0eXBlIDMwPjsgfT4KIGZ1bmMgKHQgPHR5cGUgMzk+KSBGaWVsZEFsaWduICgpIDx0eXBlIC0xMT47CiBmdW5jICh0IDx0eXBlIDM5PikgLnJlZmxlY3QuY29tbW9uICgpIDx0eXBlIDM5PjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBNZXRob2QgKGkgPHR5cGUgLTExPikgKG0gPHR5cGUgNDE+KTsKIGZ1bmMgKHQgPHR5cGUgMzk+KSAucmVmbGVjdC5wdHJUbyAoKSA8dHlwZSAzOT47CiBmdW5jICh0IDx0eXBlIDM5PikgTWV0aG9kQnlOYW1lIChuYW1lIDx0eXBlIC0xNj4pIChtIDx0eXBlIDQxPiwgb2sgPHR5cGUgLTE1Pik7CiBmdW5jICh0IDx0eXBlIDM5PikgLnJlZmxlY3QucmF3U3RyaW5nICgpIDx0eXBlIC0xNj47CiBmdW5jICh0IDx0eXBlIDM5PikgS2V5ICgpIDx0eXBlIDQzPjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBJbiAoaSA8dHlwZSAtMTE+KSA8dHlwZSA0Mz47CiBmdW5jICh0IDx0eXBlIDM5PikgSXNWYXJpYWRpYyAoKSA8dHlwZSAtMTU+OwogZnVuYyAodCA8dHlwZSAzOT4pIE5hbWUgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBDaGFuRGlyICgpIDx0eXBlIDQ2PjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBGaWVsZEJ5SW5kZXggKGluZGV4IDx0eXBlIDUzIFtdIDx0eXBlIC0xMT4+KSA8dHlwZSA0Nz47CiBmdW5jICh0IDx0eXBlIDM5PikgS2luZCAoKSA8dHlwZSA0NT47CiBmdW5jICh0IDx0eXBlIDM5PikgTnVtTWV0aG9kICgpIDx0eXBlIC0xMT47CiBmdW5jICh0IDx0eXBlIDM5PikgT3V0IChpIDx0eXBlIC0xMT4pIDx0eXBlIDQzPjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBJbXBsZW1lbnRzICh1IDx0eXBlIDQzPikgPHR5cGUgLTE1PjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBQa2dQYXRoICgpIDx0eXBlIC0xNj47CiBmdW5jICh0IDx0eXBlIDM5PikgQ29udmVydGlibGVUbyAodSA8dHlwZSA0Mz4pIDx0eXBlIC0xNT47CiBmdW5jICh0IDx0eXBlIDM5PikgRmllbGQgKGkgPHR5cGUgLTExPikgPHR5cGUgNDc+OwogZnVuYyAodCA8dHlwZSAzOT4pIEFsaWduICgpIDx0eXBlIC0xMT47CiBmdW5jICh0IDx0eXBlIDM5PikgRWxlbSAoKSA8dHlwZSA0Mz47CiBmdW5jICh0IDx0eXBlIDM5PikgRmllbGRCeU5hbWUgKG5hbWUgPHR5cGUgLTE2PikgKD8gPHR5cGUgNDc+LCA/IDx0eXBlIC0xNT4pOwogZnVuYyAodCA8dHlwZSAzOT4pIC5yZWZsZWN0LnBvaW50ZXJzICgpIDx0eXBlIC0xNT47CiBmdW5jICh0IDx0eXBlIDM5PikgRmllbGRCeU5hbWVGdW5jIChtYXRjaCA8dHlwZSA1NCAoPyA8dHlwZSAtMTY+KSA8dHlwZSAtMTU+PikgKD8gPHR5cGUgNDc+LCA/IDx0eXBlIC0xNT4pOwogZnVuYyAodCA8dHlwZSAzOT4pIEJpdHMgKCkgPHR5cGUgLTExPjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBOdW1JbiAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSAzOT4pIE51bU91dCAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSAzOT4pIFNpemUgKCkgPHR5cGUgLTEzPjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBOdW1GaWVsZCAoKSA8dHlwZSAtMTE+OwogZnVuYyAodCA8dHlwZSAzOT4pIENvbXBhcmFibGUgKCkgPHR5cGUgLTE1PjsKIGZ1bmMgKHQgPHR5cGUgMzk+KSBBc3NpZ25hYmxlVG8gKHUgPHR5cGUgNDM+KSA8dHlwZSAtMTU+OwogZnVuYyAodCA8dHlwZSAzOT4pIExlbiAoKSA8dHlwZSAtMTE+Owo+PjsgLnJlZmxlY3QucHRyIDx0eXBlIDMwPjsgPyA8dHlwZSA1NSAiLnJlZmxlY3QuZmxhZyIgPHR5cGUgLTEzPgogZnVuYyAoZiA8dHlwZSA1NT4pIC5yZWZsZWN0Lm11c3RCZSAoZXhwZWN0ZWQgPHR5cGUgNDU+KTsKIGZ1bmMgKGYgPHR5cGUgNTU+KSAucmVmbGVjdC5tdXN0QmVFeHBvcnRlZCAoKTsKIGZ1bmMgKGYgPHR5cGUgNTU+KSAucmVmbGVjdC5tdXN0QmVBc3NpZ25hYmxlICgpOwogZnVuYyAoZiA8dHlwZSA1NT4pIC5yZWZsZWN0LmtpbmQgKCkgPHR5cGUgNDU+Owo+OyB9PgogZnVuYyAodiA8dHlwZSAyNT4pIFR5cGUgKCkgPHR5cGUgNDM+OwogZnVuYyAodiA8dHlwZSAyNT4pIE92ZXJmbG93Q29tcGxleCAoeCA8dHlwZSAtMTg+KSA8dHlwZSAtMTU+OwogZnVuYyAodiA8dHlwZSAyNT4pIE1ldGhvZEJ5TmFtZSAobmFtZSA8dHlwZSAtMTY+KSA8dHlwZSAyNT47CiBmdW5jICh2IDx0eXBlIDI1PikgQnl0ZXMgKCkgPHR5cGUgNTYgW10gPHR5cGUgLTIwPj47CiBmdW5jICh2IDx0eXBlIDI1PikgSW50ZXJmYWNlICgpIChpIDx0eXBlIDU3IGludGVyZmFjZSB7IH0+KTsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBGaWVsZEJ5TmFtZSAobmFtZSA8dHlwZSAtMTY+KSA8dHlwZSAyNT47CiBmdW5jICh2IDx0eXBlIDI1PikgU2VuZCAoeCA8dHlwZSAyNT4pOwogZnVuYyAodiA8dHlwZSAyNT4pIC5yZWZsZWN0LnJlY3YgKG5iIDx0eXBlIC0xNT4pICh2YWwgPHR5cGUgMjU+LCBvayA8dHlwZSAtMTU+KTsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBVaW50ICgpIDx0eXBlIC04PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBJc1ZhbGlkICgpIDx0eXBlIC0xNT47CiBmdW5jICh2IDx0eXBlIDI1PikgTnVtTWV0aG9kICgpIDx0eXBlIC0xMT47CiBmdW5jICh2IDx0eXBlIDI1PikgT3ZlcmZsb3dGbG9hdCAoeCA8dHlwZSAtMTA+KSA8dHlwZSAtMTU+OwogZnVuYyAodiA8dHlwZSAyNT4pIE1hcEtleXMgKCkgPHR5cGUgNTggW10gPHR5cGUgMjU+PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBNZXRob2QgKGkgPHR5cGUgLTExPikgPHR5cGUgMjU+OwogZnVuYyAodiA8dHlwZSAyNT4pIFNldEludCAoeCA8dHlwZSAtND4pOwogZnVuYyAodiA8dHlwZSAyNT4pIEZpZWxkIChpIDx0eXBlIC0xMT4pIDx0eXBlIDI1PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBTZXRMZW4gKG4gPHR5cGUgLTExPik7CiBmdW5jICh2IDx0eXBlIDI1PikgVW5zYWZlQWRkciAoKSA8dHlwZSAtMTM+OwogZnVuYyAodiA8dHlwZSAyNT4pIFNsaWNlMyAoaSA8dHlwZSAtMTE+LCBqIDx0eXBlIC0xMT4sIGsgPHR5cGUgLTExPikgPHR5cGUgMjU+OwogZnVuYyAodiA8dHlwZSAyNT4pIENvbXBsZXggKCkgPHR5cGUgLTE4PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBTZXRDYXAgKG4gPHR5cGUgLTExPik7CiBmdW5jICh2IDx0eXBlIDI1PikgQ2FsbFNsaWNlIChpbiA8dHlwZSA1OSBbXSA8dHlwZSAyNT4+KSA8dHlwZSA2MCBbXSA8dHlwZSAyNT4+OwogZnVuYyAodiA8dHlwZSAyNT4pIEZsb2F0ICgpIDx0eXBlIC0xMD47CiBmdW5jICh2IDx0eXBlIDI1PikgLnJlZmxlY3QuYXNzaWduVG8gKGNvbnRleHQgPHR5cGUgLTE2PiwgZHN0IDx0eXBlIDI3PiwgdGFyZ2V0IDx0eXBlIDMwPikgPHR5cGUgMjU+OwogZnVuYyAodiA8dHlwZSAyNT4pIC5yZWZsZWN0LnJ1bmVzICgpIDx0eXBlIDYxIFtdIDx0eXBlIC0yMT4+OwogZnVuYyAodiA8dHlwZSAyNT4pIEVsZW0gKCkgPHR5cGUgMjU+OwogZnVuYyAodiA8dHlwZSAyNT4pIEluZGV4IChpIDx0eXBlIC0xMT4pIDx0eXBlIDI1PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBUcnlTZW5kICh4IDx0eXBlIDI1PikgPHR5cGUgLTE1PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBTZXRCb29sICh4IDx0eXBlIC0xNT4pOwogZnVuYyAodiA8dHlwZSAyNT4pIFNldEJ5dGVzICh4IDx0eXBlIDYyIFtdIDx0eXBlIC0yMD4+KTsKIGZ1bmMgKHYgPHR5cGUgMjU+KSAucmVmbGVjdC5zZXRSdW5lcyAoeCA8dHlwZSA2MyBbXSA8dHlwZSAtMjE+Pik7CiBmdW5jICh2IDx0eXBlIDI1PikgRmllbGRCeU5hbWVGdW5jIChtYXRjaCA8dHlwZSA2NCAoPyA8dHlwZSAtMTY+KSA8dHlwZSAtMTU+PikgPHR5cGUgMjU+OwogZnVuYyAodiA8dHlwZSAyNT4pIE92ZXJmbG93VWludCAoeCA8dHlwZSAtOD4pIDx0eXBlIC0xNT47CiBmdW5jICh2IDx0eXBlIDI1PikgTWFwSW5kZXggKGtleSA8dHlwZSAyNT4pIDx0eXBlIDI1PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBJc05pbCAoKSA8dHlwZSAtMTU+OwogZnVuYyAodiA8dHlwZSAyNT4pIFNldFBvaW50ZXIgKHggPHR5cGUgMzA+KTsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBTdHJpbmcgKCkgPHR5cGUgLTE2PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSAucmVmbGVjdC5jYWxsIChvcCA8dHlwZSAtMTY+LCBpbiA8dHlwZSA2NSBbXSA8dHlwZSAyNT4+KSA8dHlwZSA2NiBbXSA8dHlwZSAyNT4+OwogZnVuYyAodiA8dHlwZSAyNT4pIEludCAoKSA8dHlwZSAtND47CiBmdW5jICh2IDx0eXBlIDI1PikgUmVjdiAoKSAoeCA8dHlwZSAyNT4sIG9rIDx0eXBlIC0xNT4pOwogZnVuYyAodiA8dHlwZSAyNT4pIENvbnZlcnQgKHQgPHR5cGUgNDM+KSA8dHlwZSAyNT47CiBmdW5jICh2IDx0eXBlIDI1PikgS2luZCAoKSA8dHlwZSA0NT47CiBmdW5jICh2IDx0eXBlIDI1PikgSW50ZXJmYWNlRGF0YSAoKSA8dHlwZSA2NyBbMiBdIDx0eXBlIC0xMz4+OwogZnVuYyAodiA8dHlwZSAyNT4pIFNldE1hcEluZGV4IChrZXkgPHR5cGUgMjU+LCB2YWwgPHR5cGUgMjU+KTsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBDYWxsIChpbiA8dHlwZSA2OCBbXSA8dHlwZSAyNT4+KSA8dHlwZSA2OSBbXSA8dHlwZSAyNT4+OwogZnVuYyAodiA8dHlwZSAyNT4pIFNldCAoeCA8dHlwZSAyNT4pOwogZnVuYyAodiA8dHlwZSAyNT4pIFNldFVpbnQgKHggPHR5cGUgLTg+KTsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBCb29sICgpIDx0eXBlIC0xNT47CiBmdW5jICh2IDx0eXBlIDI1PikgU2xpY2UgKGkgPHR5cGUgLTExPiwgaiA8dHlwZSAtMTE+KSA8dHlwZSAyNT47CiBmdW5jICh2IDx0eXBlIDI1PikgLnJlZmxlY3QucG9pbnRlciAoKSA8dHlwZSAzMD47CiBmdW5jICh2IDx0eXBlIDI1PikgUG9pbnRlciAoKSA8dHlwZSAtMTM+OwogZnVuYyAodiA8dHlwZSAyNT4pIENhcCAoKSA8dHlwZSAtMTE+OwogZnVuYyAodiA8dHlwZSAyNT4pIFNldFN0cmluZyAoeCA8dHlwZSAtMTY+KTsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBMZW4gKCkgPHR5cGUgLTExPjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBUcnlSZWN2ICgpICh4IDx0eXBlIDI1Piwgb2sgPHR5cGUgLTE1Pik7CiBmdW5jICh2IDx0eXBlIDI1PikgQ2xvc2UgKCk7CiBmdW5jICh2IDx0eXBlIDI1PikgQ2FuQWRkciAoKSA8dHlwZSAtMTU+OwogZnVuYyAodiA8dHlwZSAyNT4pIENhblNldCAoKSA8dHlwZSAtMTU+OwogZnVuYyAodiA8dHlwZSAyNT4pIC5yZWZsZWN0LnNlbmQgKHggPHR5cGUgMjU+LCBuYiA8dHlwZSAtMTU+KSAoc2VsZWN0ZWQgPHR5cGUgLTE1Pik7CiBmdW5jICh2IDx0eXBlIDI1PikgRmllbGRCeUluZGV4IChpbmRleCA8dHlwZSA3MCBbXSA8dHlwZSAtMTE+PikgPHR5cGUgMjU+OwogZnVuYyAodiA8dHlwZSAyNT4pIE92ZXJmbG93SW50ICh4IDx0eXBlIC00PikgPHR5cGUgLTE1PjsKIGZ1bmMgKHYgPHR5cGUgMjU+KSBOdW1GaWVsZCAoKSA8dHlwZSAtMTE+OwogZnVuYyAodiA8dHlwZSAyNT4pIFNldEZsb2F0ICh4IDx0eXBlIC0xMD4pOwogZnVuYyAodiA8dHlwZSAyNT4pIENhbkludGVyZmFjZSAoKSA8dHlwZSAtMTU+OwogZnVuYyAodiA8dHlwZSAyNT4pIFNldENvbXBsZXggKHggPHR5cGUgLTE4Pik7CiBmdW5jICh2IDx0eXBlIDI1PikgQWRkciAoKSA8dHlwZSAyNT47Cj47IC5vbGQvdGVtcGxhdGUud3IgPHR5cGUgNz47IC5vbGQvdGVtcGxhdGUuYnVmIDx0eXBlIDcxIFsyIF0gPHR5cGUgNzIgImJ5dGVzLkJ1ZmZlciIgPHR5cGUgNzMgc3RydWN0IHsgLmJ5dGVzLmJ1ZiA8dHlwZSA3NCBbXSA8dHlwZSAtMjA+PjsgLmJ5dGVzLm9mZiA8dHlwZSAtMTE+OyAuYnl0ZXMucnVuZUJ5dGVzIDx0eXBlIDc1IFs0IF0gPHR5cGUgLTIwPj47IC5ieXRlcy5ib290c3RyYXAgPHR5cGUgNzYgWzY0IF0gPHR5cGUgLTIwPj47IC5ieXRlcy5sYXN0UmVhZCA8dHlwZSA3NyAiLmJ5dGVzLnJlYWRPcCIgPHR5cGUgLTExPj47IH0+CiBmdW5jIChiIDx0eXBlIDc4ICo8dHlwZSA3Mj4+KSBVbnJlYWRCeXRlICgpIDx0eXBlIC0xOT47CiBmdW5jIChiIDx0eXBlIDc4PikgVHJ1bmNhdGUgKG4gPHR5cGUgLTExPik7CiBmdW5jIChiIDx0eXBlIDc4PikgV3JpdGVTdHJpbmcgKHMgPHR5cGUgLTE2PikgKG4gPHR5cGUgLTExPiwgZXJyIDx0eXBlIC0xOT4pOwogZnVuYyAoYiA8dHlwZSA3OD4pIFJlYWRTdHJpbmcgKGRlbGltIDx0eXBlIC0yMD4pIChsaW5lIDx0eXBlIC0xNj4sIGVyciA8dHlwZSAtMTk+KTsKIGZ1bmMgKGIgPHR5cGUgNzg+KSBSZWFkQnl0ZSAoKSAoYyA8dHlwZSAtMjA+LCBlcnIgPHR5cGUgLTE5Pik7CiBmdW5jIChiIDx0eXBlIDc4PikgTmV4dCAobiA8dHlwZSAtMTE+KSA8dHlwZSA3OSBbXSA8dHlwZSAtMjA+PjsKIGZ1bmMgKGIgPHR5cGUgNzg+KSBXcml0ZVJ1bmUgKHIgPHR5cGUgLTIxPikgKG4gPHR5cGUgLTExPiwgZXJyIDx0eXBlIC0xOT4pOwogZnVuYyAoYiA8dHlwZSA3OD4pIFN0cmluZyAoKSA8dHlwZSAtMTY+OwogZnVuYyAoYiA8dHlwZSA3OD4pIFdyaXRlVG8gKHcgPHR5cGUgNz4pIChuIDx0eXBlIC00PiwgZXJyIDx0eXBlIC0xOT4pOwogZnVuYyAoYiA8dHlwZSA3OD4pIFJlYWRCeXRlcyAoZGVsaW0gPHR5cGUgLTIwPikgKGxpbmUgPHR5cGUgODAgW10gPHR5cGUgLTIwPj4sIGVyciA8dHlwZSAtMTk+KTsKIGZ1bmMgKGIgPHR5cGUgNzg+KSAuYnl0ZXMuZ3JvdyAobiA8dHlwZSAtMTE+KSA8dHlwZSAtMTE+OwogZnVuYyAoYiA8dHlwZSA3OD4pIFJlYWRSdW5lICgpIChyIDx0eXBlIC0yMT4sIHNpemUgPHR5cGUgLTExPiwgZXJyIDx0eXBlIC0xOT4pOwogZnVuYyAoYiA8dHlwZSA3OD4pIFVucmVhZFJ1bmUgKCkgPHR5cGUgLTE5PjsKIGZ1bmMgKGIgPHR5cGUgNzg+KSBSZWFkIChwIDx0eXBlIDgxIFtdIDx0eXBlIC0yMD4+KSAobiA8dHlwZSAtMTE+LCBlcnIgPHR5cGUgLTE5Pik7CiBmdW5jIChiIDx0eXBlIDc4PikgUmVzZXQgKCk7CiBmdW5jIChiIDx0eXBlIDc4PikgLmJ5dGVzLnJlYWRTbGljZSAoZGVsaW0gPHR5cGUgLTIwPikgKGxpbmUgPHR5cGUgODIgW10gPHR5cGUgLTIwPj4sIGVyciA8dHlwZSAtMTk+KTsKIGZ1bmMgKGIgPHR5cGUgNzg+KSBXcml0ZUJ5dGUgKGMgPHR5cGUgLTIwPikgPHR5cGUgLTE5PjsKIGZ1bmMgKGIgPHR5cGUgNzg+KSBXcml0ZSAocCA8dHlwZSA4MyBbXSA8dHlwZSAtMjA+PikgKG4gPHR5cGUgLTExPiwgZXJyIDx0eXBlIC0xOT4pOwogZnVuYyAoYiA8dHlwZSA3OD4pIFJlYWRGcm9tIChyIDx0eXBlIDg0ICJpby5SZWFkZXIiIDx0eXBlIDg1IGludGVyZmFjZSB7IFJlYWQgKHAgPHR5cGUgODYgW10gPHR5cGUgLTIwPj4pIChuIDx0eXBlIC0xMT4sIGVyciA8dHlwZSAtMTk+KTsgfT4+KSAobiA8dHlwZSAtND4sIGVyciA8dHlwZSAtMTk+KTsKIGZ1bmMgKGIgPHR5cGUgNzg+KSBMZW4gKCkgPHR5cGUgLTExPjsKIGZ1bmMgKGIgPHR5cGUgNzg+KSBHcm93IChuIDx0eXBlIC0xMT4pOwogZnVuYyAoYiA8dHlwZSA3OD4pIEJ5dGVzICgpIDx0eXBlIDg3IFtdIDx0eXBlIC0yMD4+Owo+PjsgfT4KIGZ1bmMgKHBhcmVudCA8dHlwZSA4OCAqPHR5cGUgMjI+PikgLm9sZC90ZW1wbGF0ZS5jbG9uZSAoZGF0YSA8dHlwZSAyNT4pIDx0eXBlIDg4PjsKPj4sIHYgPHR5cGUgMjU+LCBuYW1lIDx0eXBlIC0xNj4pIDx0eXBlIDI1PjsKIGZ1bmMgKHQgPHR5cGUgODkgKjx0eXBlIDE0Pj4pIC5vbGQvdGVtcGxhdGUuZmluZFZhciAoc3QgPHR5cGUgMjE+LCBzIDx0eXBlIC0xNj4pIDx0eXBlIDI1PjsKIGZ1bmMgKHQgPHR5cGUgOTAgKjx0eXBlIDE0Pj4pIC5vbGQvdGVtcGxhdGUudmFyVmFsdWUgKG5hbWUgPHR5cGUgLTE2Piwgc3QgPHR5cGUgMjE+KSA8dHlwZSAyNT47CiBmdW5jICh0IDx0eXBlIDkxICo8dHlwZSAxND4+KSAub2xkL3RlbXBsYXRlLmZvcm1hdCAod3IgPHR5cGUgNz4sIGZtdCA8dHlwZSAtMTY+LCB2YWwgPHR5cGUgOTIgW10gPHR5cGUgOTMgaW50ZXJmYWNlIHsgfT4+LCB2IDx0eXBlIDk0ICo8dHlwZSA5NSAiLm9sZC90ZW1wbGF0ZS52YXJpYWJsZUVsZW1lbnQiIDx0eXBlIDk2IHN0cnVjdCB7IC5vbGQvdGVtcGxhdGUubGluZW51bSA8dHlwZSAtMTE+OyAub2xkL3RlbXBsYXRlLmFyZ3MgPHR5cGUgOTcgW10gPHR5cGUgOTggaW50ZXJmYWNlIHsgfT4+OyAub2xkL3RlbXBsYXRlLmZtdHMgPHR5cGUgOTkgW10gPHR5cGUgLTE2Pj47IH0+Pj4sIHN0IDx0eXBlIDIxPik7CiBmdW5jICh0IDx0eXBlIDEwMCAqPHR5cGUgMTQ+PikgLm9sZC90ZW1wbGF0ZS53cml0ZVZhcmlhYmxlICh2IDx0eXBlIDEwMSAqPHR5cGUgOTU+Piwgc3QgPHR5cGUgMjE+KTsKIGZ1bmMgKHQgPHR5cGUgMTAyICo8dHlwZSAxND4+KSAub2xkL3RlbXBsYXRlLmV4ZWN1dGVFbGVtZW50IChpIDx0eXBlIC0xMT4sIHN0IDx0eXBlIDIxPikgPHR5cGUgLTExPjsKIGZ1bmMgKHQgPHR5cGUgMTAzICo8dHlwZSAxND4+KSAub2xkL3RlbXBsYXRlLmV4ZWN1dGUgKHN0YXJ0IDx0eXBlIC0xMT4sIGVuZCA8dHlwZSAtMTE+LCBzdCA8dHlwZSAyMT4pOwogZnVuYyAodCA8dHlwZSAxMDQgKjx0eXBlIDE0Pj4pIC5vbGQvdGVtcGxhdGUuZXhlY3V0ZVNlY3Rpb24gKHMgPHR5cGUgMTA1ICo8dHlwZSAxMDYgIi5vbGQvdGVtcGxhdGUuc2VjdGlvbkVsZW1lbnQiIDx0eXBlIDEwNyBzdHJ1Y3QgeyAub2xkL3RlbXBsYXRlLmxpbmVudW0gPHR5cGUgLTExPjsgLm9sZC90ZW1wbGF0ZS5maWVsZCA8dHlwZSAtMTY+OyAub2xkL3RlbXBsYXRlLnN0YXJ0IDx0eXBlIC0xMT47IC5vbGQvdGVtcGxhdGUub3IgPHR5cGUgLTExPjsgLm9sZC90ZW1wbGF0ZS5lbmQgPHR5cGUgLTExPjsgfT4+Piwgc3QgPHR5cGUgMjE+KTsKIGZ1bmMgKHQgPHR5cGUgMTA4ICo8dHlwZSAxND4+KSAub2xkL3RlbXBsYXRlLmV4ZWN1dGVSZXBlYXRlZCAociA8dHlwZSAxMDkgKjx0eXBlIDExMCAiLm9sZC90ZW1wbGF0ZS5yZXBlYXRlZEVsZW1lbnQiIDx0eXBlIDExMSBzdHJ1Y3QgeyA/IDx0eXBlIDEwNj47IC5vbGQvdGVtcGxhdGUuYWx0c3RhcnQgPHR5cGUgLTExPjsgLm9sZC90ZW1wbGF0ZS5hbHRlbmQgPHR5cGUgLTExPjsgfT4+Piwgc3QgPHR5cGUgMjE+KTsKIGZ1bmMgKHQgPHR5cGUgMTEyICo8dHlwZSAxND4+KSAub2xkL3RlbXBsYXRlLmV4ZWNFcnJvciAoc3QgPHR5cGUgMjE+LCBsaW5lIDx0eXBlIC0xMT4sIGVyciA8dHlwZSAtMTY+LCBhcmdzIC4uLjx0eXBlIDExMyBpbnRlcmZhY2UgeyB9Pik7CiBmdW5jICh0IDx0eXBlIDExMj4pIC5vbGQvdGVtcGxhdGUucGFyc2VFcnJvciAoZXJyIDx0eXBlIC0xNj4sIGFyZ3MgLi4uPHR5cGUgMTE0IGludGVyZmFjZSB7IH0+KTsKIGZ1bmMgKHQgPHR5cGUgMTEyPikgLm9sZC90ZW1wbGF0ZS5uZXh0SXRlbSAoKSA8dHlwZSAxMTUgW10gPHR5cGUgLTIwPj47CiBmdW5jICh0IDx0eXBlIDExMj4pIC5vbGQvdGVtcGxhdGUuYW5hbHl6ZSAoaXRlbSA8dHlwZSAxMTYgW10gPHR5cGUgLTIwPj4pICh0b2sgPHR5cGUgLTExPiwgdyA8dHlwZSAxMTcgW10gPHR5cGUgLTE2Pj4pOwogZnVuYyAodCA8dHlwZSAxMTI+KSAub2xkL3RlbXBsYXRlLmZvcm1hdHRlciAobmFtZSA8dHlwZSAtMTY+KSA8dHlwZSAxMTggKD8gPHR5cGUgNz4sID8gPHR5cGUgLTE2PiwgPyAuLi48dHlwZSAxMTkgaW50ZXJmYWNlIHsgfT4pPjsKIGZ1bmMgKHQgPHR5cGUgMTEyPikgLm9sZC90ZW1wbGF0ZS5uZXdWYXJpYWJsZSAod29yZHMgPHR5cGUgMTIwIFtdIDx0eXBlIC0xNj4+KSA8dHlwZSAxMjEgKjx0eXBlIDk1Pj47CiBmdW5jICh0IDx0eXBlIDExMj4pIC5vbGQvdGVtcGxhdGUucGFyc2VTaW1wbGUgKGl0ZW0gPHR5cGUgMTIyIFtdIDx0eXBlIC0yMD4+KSAoZG9uZSA8dHlwZSAtMTU+LCB0b2sgPHR5cGUgLTExPiwgdyA8dHlwZSAxMjMgW10gPHR5cGUgLTE2Pj4pOwogZnVuYyAodCA8dHlwZSAxMTI+KSAub2xkL3RlbXBsYXRlLnBhcnNlUmVwZWF0ZWQgKHdvcmRzIDx0eXBlIDEyNCBbXSA8dHlwZSAtMTY+PikgPHR5cGUgMTI1ICo8dHlwZSAxMTA+PjsKIGZ1bmMgKHQgPHR5cGUgMTEyPikgLm9sZC90ZW1wbGF0ZS5wYXJzZVNlY3Rpb24gKHdvcmRzIDx0eXBlIDEyNiBbXSA8dHlwZSAtMTY+PikgPHR5cGUgMTI3ICo8dHlwZSAxMDY+PjsKIGZ1bmMgKHQgPHR5cGUgMTEyPikgLm9sZC90ZW1wbGF0ZS5wYXJzZSAoKTsKIGZ1bmMgKHQgPHR5cGUgMTEyPikgUGFyc2UgKHMgPHR5cGUgLTE2PikgKGVyciA8dHlwZSAtMTk+KTsKIGZ1bmMgKHQgPHR5cGUgMTEyPikgUGFyc2VGaWxlIChmaWxlbmFtZSA8dHlwZSAtMTY+KSAoZXJyIDx0eXBlIC0xOT4pOwogZnVuYyAodCA8dHlwZSAxMTI+KSBFeGVjdXRlICh3ciA8dHlwZSA3PiwgZGF0YSA8dHlwZSAxMjggaW50ZXJmYWNlIHsgfT4pIChlcnIgPHR5cGUgLTE5Pik7CiBmdW5jICh0IDx0eXBlIDExMj4pIFNldERlbGltcyAobGVmdCA8dHlwZSAtMTY+LCByaWdodCA8dHlwZSAtMTY+KTsKPj47CmZ1bmMgTXVzdFBhcnNlRmlsZSAoZmlsZW5hbWUgPHR5cGUgLTE2PiwgZm1hcCA8dHlwZSA0PikgPHR5cGUgMTM+OwpmdW5jIE5ldyAoZm1hcCA8dHlwZSA0PikgPHR5cGUgMTM+OwpmdW5jIFBhcnNlIChzIDx0eXBlIC0xNj4sIGZtYXAgPHR5cGUgND4pICh0IDx0eXBlIDEzPiwgZXJyIDx0eXBlIC0xOT4pOwpmdW5jIFBhcnNlRmlsZSAoZmlsZW5hbWUgPHR5cGUgLTE2PiwgZm1hcCA8dHlwZSA0PikgKHQgPHR5cGUgMTM+LCBlcnIgPHR5cGUgLTE5Pik7CmZ1bmMgU3RyaW5nRm9ybWF0dGVyICh3IDx0eXBlIDc+LCBmb3JtYXQgPHR5cGUgLTE2PiwgdmFsdWUgLi4uPHR5cGUgMTI5IGludGVyZmFjZSB7IH0+KTsKdHlwZSA8dHlwZSAxND47CmNoZWNrc3VtIDUyMTlEQkRDNkRERUQ4MjQ1Qjk3RTQ2NEIxQjcxQjM0NjZCMEM2MTM7CgAuc3ltdGFiAC5zdHJ0YWIALnNoc3RydGFiAC5nb19leHBvcnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAQAAAAAAAAAAAAAANAAAACU7AAAAAAAAAAAAAAEAAAAAAAAAEQAAAAMAAAAAAAAAAAAAAFk7AAAmAAAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAACAOwAAIAAAAAQAAAACAAAABAAAABAAAAAJAAAAAwAAAAAAAAAAAAAAoDsAAAEAAAAAAAAAAAAAAAEAAAAAAAAA