LyoKICoKICogSVAtYWRkcmVzcy9ob3N0bmFtZSB0byBjb3VudHJ5IGNvbnZlcnRlci4KICoKICogUHJvYmxlbTsgeW91IHdhbnQgdG8ga25vdyB3aGVyZSBJUCBhLmIuYy5kIGlzIGxvY2F0ZWQuCiAqCiAqIFVzZSBhcmVzX2dldGhvc3RieW5hbWUgKCJkLmMuYi5hLnp6LmNvdW50cmllcy5uZXJkLmRrIikKICogYW5kIGdldCB0aGUgQ05BTUUgKGhvc3QtPmhfbmFtZSkuIFJlc3VsdCB3aWxsIGJlOgogKiAgIENOQU1FID0geno8Q0M+LmNvdW50cmllcy5uZXJkLmRrIHdpdGggYWRkcmVzcyAxMjcuMC54LnkgKHZlciAxKSBvcgogKiAgIENOQU1FID0gPGEuYi5jLmQ+Lnp6LmNvdW50cmllcy5uZXJkLmRrIHdpdGggYWRkcmVzcyAxMjcuMC54LnkgKHZlciAyKQogKgogKiBUaGUgMiBsZXR0ZXIgY291bnRyeSBjb2RlIGlzIGluIDxDQz4gYW5kIHRoZSBJU08tMzE2NiBjb3VudHJ5CiAqIG51bWJlciBpcyBpbiB4LnkgKG51bWJlciA9IHgqMjU2ICsgeSkuIFZlcnNpb24gMiBvZiB0aGUgcHJvdG9jb2wgaXMgbWlzc2luZwogKiB0aGUgPENDPiBudW1iZXIuCiAqCiAqIFJlZjogaHR0cDovL2NvdW50cmllcy5uZXJkLmRrL21vcmUuaHRtbAogKgogKiBXcml0dGVuIGJ5IEcuIFZhbmVtIDxndmFuZW1AYnJvYWRwYXJrLm5vPiAyMDA2LCAyMDA3CiAqCiAqIE5CISBUaGlzIHByb2dyYW0gbWF5IG5vdCBiZSBiaWctZW5kaWFuIGF3YXJlLgogKgogKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCiAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQKICogZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKICogbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCiAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbgogKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCiAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCiAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgogKi8KCiNpbmNsdWRlICJhcmVzX3NldHVwLmgiCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkYXJnLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CiNpZmRlZiBIQVZFX1VOSVNURF9ICiNpbmNsdWRlIDx1bmlzdGQuaD4KI2VuZGlmCiNpZmRlZiBIQVZFX1NUUklOR1NfSAojaW5jbHVkZSA8c3RyaW5ncy5oPgojZW5kaWYKCiNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChXQVRUMzIpCiAgI2luY2x1ZGUgPHdpbnNvY2suaD4KI2Vsc2UKICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogICNpbmNsdWRlIDxuZXRkYi5oPgojZW5kaWYKCiNpbmNsdWRlICJhcmVzLmgiCiNpbmNsdWRlICJhcmVzX2dldG9wdC5oIgojaW5jbHVkZSAiaW5ldF9uZXRfcHRvbi5oIgojaW5jbHVkZSAiaW5ldF9udG9wLmgiCiNpbmNsdWRlICJhcmVzX25vd2Fybi5oIgoKI2lmbmRlZiBIQVZFX1NUUkRVUAojICBpbmNsdWRlICJhcmVzX3N0cmR1cC5oIgojICBkZWZpbmUgc3RyZHVwKHB0cikgYXJlc19zdHJkdXAocHRyKQojZW5kaWYKCiNpZm5kZWYgSEFWRV9TVFJDQVNFQ01QCiMgIGluY2x1ZGUgImFyZXNfc3RyY2FzZWNtcC5oIgojICBkZWZpbmUgc3RyY2FzZWNtcChwMSxwMikgYXJlc19zdHJjYXNlY21wKHAxLHAyKQojZW5kaWYKCiNpZm5kZWYgSEFWRV9TVFJOQ0FTRUNNUAojICBpbmNsdWRlICJhcmVzX3N0cmNhc2VjbXAuaCIKIyAgZGVmaW5lIHN0cm5jYXNlY21wKHAxLHAyLG4pIGFyZXNfc3RybmNhc2VjbXAocDEscDIsbikKI2VuZGlmCgojaWZuZGVmIElOQUREUl9OT05FCiNkZWZpbmUgSU5BRERSX05PTkUgMHhmZmZmZmZmZgojZW5kaWYKCnN0YXRpYyBjb25zdCBjaGFyICp1c2FnZSAgICAgID0gImFjb3VudHJ5IFstdmg/XSB7aG9zdHxhZGRyfSAuLi5cbiI7CnN0YXRpYyBjb25zdCBjaGFyICBuZXJkX2ZtdFtdID0gIiV1LiV1LiV1LiV1Lnp6LmNvdW50cmllcy5uZXJkLmRrIjsKc3RhdGljIGNvbnN0IGNoYXIgKm5lcmRfdmVyMSAgPSBuZXJkX2ZtdCArIDE0OwpzdGF0aWMgY29uc3QgY2hhciAqbmVyZF92ZXIyICA9IG5lcmRfZm10ICsgMTE7CnN0YXRpYyBpbnQgICAgICAgICB2ZXJib3NlICAgID0gMDsKCiNkZWZpbmUgVFJBQ0UoZm10KSBkbyB7ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSA+IDApIFwKICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgZm10IDsgICBcCiAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQoKc3RhdGljIHZvaWQgd2FpdF9hcmVzKGFyZXNfY2hhbm5lbCBjaGFubmVsKTsKc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsIHN0cnVjdCBob3N0ZW50ICpob3N0KTsKc3RhdGljIHZvaWQgY2FsbGJhY2syKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCk7CnN0YXRpYyB2b2lkIGZpbmRfY291bnRyeV9mcm9tX2NuYW1lKGNvbnN0IGNoYXIgKmNuYW1lLCBzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKCnN0YXRpYyB2b2lkIEFib3J0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQp7CiAgdmFfbGlzdCBhcmdzOwogIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFyZ3MpOwogIHZhX2VuZChhcmdzKTsKICBleGl0KDEpOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKICBpbnQgICAgY2gsIHN0YXR1czsKCiNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChXQVRUMzIpCiAgV09SRCB3VmVyc2lvblJlcXVlc3RlZCA9IE1BS0VXT1JEKFVTRV9XSU5TT0NLLFVTRV9XSU5TT0NLKTsKICBXU0FEQVRBIHdzYURhdGE7CiAgV1NBU3RhcnR1cCh3VmVyc2lvblJlcXVlc3RlZCwgJndzYURhdGEpOwojZW5kaWYKCiAgc3RhdHVzID0gYXJlc19saWJyYXJ5X2luaXQoQVJFU19MSUJfSU5JVF9BTEwpOwogIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQogICAgewogICAgICBmcHJpbnRmKHN0ZGVyciwgImFyZXNfbGlicmFyeV9pbml0OiAlc1xuIiwgYXJlc19zdHJlcnJvcihzdGF0dXMpKTsKICAgICAgcmV0dXJuIDE7CiAgICB9CgogIHdoaWxlICgoY2ggPSBhcmVzX2dldG9wdChhcmdjLCBhcmd2LCAiZHZoPyIpKSAhPSAtMSkKICAgIHN3aXRjaCAoY2gpCiAgICAgIHsKICAgICAgY2FzZSAnZCc6CiNpZmRlZiBXQVRUMzIKICAgICAgICBkYnVnX2luaXQoKTsKI2VuZGlmCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3YnOgogICAgICAgIHZlcmJvc2UrKzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnaCc6CiAgICAgIGNhc2UgJz8nOgogICAgICBkZWZhdWx0OgogICAgICAgIEFib3J0KHVzYWdlKTsKICAgICAgfQoKICBhcmdjIC09IG9wdGluZDsKICBhcmd2ICs9IG9wdGluZDsKICBpZiAoYXJnYyA8IDEpCiAgICAgQWJvcnQodXNhZ2UpOwoKICBzdGF0dXMgPSBhcmVzX2luaXQoJmNoYW5uZWwpOwogIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQogICAgewogICAgICBmcHJpbnRmKHN0ZGVyciwgImFyZXNfaW5pdDogJXNcbiIsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CiAgICAgIHJldHVybiAxOwogICAgfQoKICAvKiBJbml0aWF0ZSB0aGUgcXVlcmllcywgb25lIHBlciBjb21tYW5kLWxpbmUgYXJndW1lbnQuICovCiAgZm9yICggOyAqYXJndjsgYXJndisrKQogICAgewogICAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyOwogICAgICBjaGFyIGJ1ZlsxMDBdOwoKICAgICAgLyogSWYgdGhpcyBmYWlscywgYXNzdW1lICcqYXJndicgaXMgYSBob3N0LW5hbWUgdGhhdAogICAgICAgKiBtdXN0IGJlIHJlc29sdmVkIGZpcnN0CiAgICAgICAqLwogICAgICBpZiAoYXJlc19pbmV0X3B0b24oQUZfSU5FVCwgKmFyZ3YsICZhZGRyKSAhPSAxKQogICAgICAgIHsKICAgICAgICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsLCAqYXJndiwgQUZfSU5FVCwgY2FsbGJhY2syLCAmYWRkcik7CiAgICAgICAgICB3YWl0X2FyZXMoY2hhbm5lbCk7CiAgICAgICAgICBpZiAoYWRkci5zX2FkZHIgPT0gSU5BRERSX05PTkUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0byBsb29rdXAgJXNcbiIsICphcmd2KTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIHNwcmludGYoYnVmLCBuZXJkX2ZtdCwKICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShhZGRyLnNfYWRkciA+PiAyNCksCiAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoKGFkZHIuc19hZGRyID4+IDE2KSAmIDI1NSksCiAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoKGFkZHIuc19hZGRyID4+IDgpICYgMjU1KSwKICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShhZGRyLnNfYWRkciAmIDI1NSkpOwogICAgICBUUkFDRSgoIkxvb2tpbmcgdXAgJXMuLi4iLCBidWYpKTsKICAgICAgZmZsdXNoKHN0ZG91dCk7CiAgICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsLCBidWYsIEFGX0lORVQsIGNhbGxiYWNrLCBidWYpOwogICAgfQoKICB3YWl0X2FyZXMoY2hhbm5lbCk7CiAgYXJlc19kZXN0cm95KGNoYW5uZWwpOwoKICBhcmVzX2xpYnJhcnlfY2xlYW51cCgpOwoKI2lmIGRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKFdBVFQzMikKICBXU0FDbGVhbnVwKCk7CiNlbmRpZgoKICByZXR1cm4gMDsKfQoKLyoKICogV2FpdCBmb3IgdGhlIHF1ZXJpZXMgdG8gY29tcGxldGUuCiAqLwpzdGF0aWMgdm9pZCB3YWl0X2FyZXMoYXJlc19jaGFubmVsIGNoYW5uZWwpCnsKICBmb3IgKDs7KQogICAgewogICAgICBzdHJ1Y3QgdGltZXZhbCAqdHZwLCB0djsKICAgICAgZmRfc2V0IHJlYWRfZmRzLCB3cml0ZV9mZHM7CiAgICAgIGludCBuZmRzOwoKICAgICAgRkRfWkVSTygmcmVhZF9mZHMpOwogICAgICBGRF9aRVJPKCZ3cml0ZV9mZHMpOwogICAgICBuZmRzID0gYXJlc19mZHMoY2hhbm5lbCwgJnJlYWRfZmRzLCAmd3JpdGVfZmRzKTsKICAgICAgaWYgKG5mZHMgPT0gMCkKICAgICAgICBicmVhazsKICAgICAgdHZwID0gYXJlc190aW1lb3V0KGNoYW5uZWwsIE5VTEwsICZ0dik7CiAgICAgIHNlbGVjdChuZmRzLCAmcmVhZF9mZHMsICZ3cml0ZV9mZHMsIE5VTEwsIHR2cCk7CiAgICAgIGFyZXNfcHJvY2VzcyhjaGFubmVsLCAmcmVhZF9mZHMsICZ3cml0ZV9mZHMpOwogICAgfQp9CgovKgogKiBUaGlzIGlzIHRoZSBjYWxsYmFjayB1c2VkIHdoZW4gd2UgaGF2ZSB0aGUgSVAtYWRkcmVzcyBvZiBpbnRlcmVzdC4KICogRXh0cmFjdCB0aGUgQ05BTUUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvdW50cnktY29kZSBmcm9tIGl0LgogKi8Kc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsIHN0cnVjdCBob3N0ZW50ICpob3N0KQp7CiAgY29uc3QgY2hhciAqbmFtZSA9IChjb25zdCBjaGFyKilhcmc7CiAgY29uc3QgY2hhciAqY25hbWU7CiAgY2hhciBidWZbMjBdOwoKICAodm9pZCl0aW1lb3V0czsKCiAgaWYgKCFob3N0IHx8IHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCiAgICB7CiAgICAgIHByaW50ZigiRmFpbGVkIHRvIGxvb2t1cCAlczogJXNcbiIsIG5hbWUsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgVFJBQ0UoKCJcbkZvdW5kIGFkZHJlc3MgJXMsIG5hbWUgJXNcbiIsCiAgICAgICAgIGFyZXNfaW5ldF9udG9wKEFGX0lORVQsKGNvbnN0IGNoYXIqKWhvc3QtPmhfYWRkcixidWYsc2l6ZW9mKGJ1ZikpLAogICAgICAgICBob3N0LT5oX25hbWUpKTsKCiAgY25hbWUgPSBob3N0LT5oX25hbWU7ICAvKiBDTkFNRSBnZXRzIHB1dCBoZXJlICovCiAgaWYgKCFjbmFtZSkKICAgIHByaW50ZigiRmFpbGVkIHRvIGdldCBDTkFNRSBmb3IgJXNcbiIsIG5hbWUpOwogIGVsc2UKICAgIGZpbmRfY291bnRyeV9mcm9tX2NuYW1lKGNuYW1lLCAqKHN0cnVjdCBpbl9hZGRyKilob3N0LT5oX2FkZHIpOwp9CgovKgogKiBUaGlzIGlzIHRoZSBjYWxsYmFjayB1c2VkIHRvIG9idGFpbiB0aGUgSVAtYWRkcmVzcyBvZiB0aGUgaG9zdCBvZiBpbnRlcmVzdC4KICovCnN0YXRpYyB2b2lkIGNhbGxiYWNrMih2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywgc3RydWN0IGhvc3RlbnQgKmhvc3QpCnsKICBzdHJ1Y3QgaW5fYWRkciAqYWRkciA9IChzdHJ1Y3QgaW5fYWRkciopIGFyZzsKCiAgKHZvaWQpdGltZW91dHM7CiAgaWYgKCFob3N0IHx8IHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCiAgICBtZW1zZXQoYWRkciwgSU5BRERSX05PTkUsIHNpemVvZigqYWRkcikpOwogIGVsc2UKICAgIG1lbWNweShhZGRyLCBob3N0LT5oX2FkZHIsIHNpemVvZigqYWRkcikpOwp9CgpzdHJ1Y3Qgc2VhcmNoX2xpc3QgewogICAgICAgaW50ICAgICAgICAgY291bnRyeV9udW1iZXI7IC8qIElTTy0zMTY2IGNvdW50cnkgbnVtYmVyICovCiAgICAgICBjaGFyICAgICAgICBzaG9ydF9uYW1lWzNdOyAgLyogQTIgc2hvcnQgY291bnRyeSBjb2RlICovCiAgICAgICBjb25zdCBjaGFyICpsb25nX25hbWU7ICAgICAgLyogbm9ybWFsIGNvdW50cnkgbmFtZSAqLwogICAgIH07CgpzdGF0aWMgY29uc3Qgc3RydWN0IHNlYXJjaF9saXN0ICpsaXN0X2xvb2t1cChpbnQgbnVtYmVyLCBjb25zdCBzdHJ1Y3Qgc2VhcmNoX2xpc3QgKmxpc3QsIGludCBudW0pCnsKICB3aGlsZSAobnVtID4gMCAmJiBsaXN0LT5sb25nX25hbWUpCiAgICB7CiAgICAgIGlmIChsaXN0LT5jb3VudHJ5X251bWJlciA9PSBudW1iZXIpCiAgICAgICAgcmV0dXJuIChsaXN0KTsKICAgICAgbnVtLS07CiAgICAgIGxpc3QrKzsKICAgIH0KICByZXR1cm4gKE5VTEwpOwp9CgovKgogKiBSZWY6IGZ0cDovL2Z0cC5yaXBlLm5ldC9pc28zMTY2LWNvdW50cnljb2Rlcy50eHQKICovCnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VhcmNoX2xpc3QgY291bnRyeV9saXN0W10gPSB7CiAgICAgICB7ICAgNCwgImFmIiwgIkFmZ2hhbmlzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjQ4LCAiYXgiLCAixWxhbmQgSXNsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgIDgsICJhbCIsICJBbGJhbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAxMiwgImR6IiwgIkFsZ2VyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDE2LCAiYXMiLCAiQW1lcmljYW4gU2Ftb2EiICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMjAsICJhZCIsICJBbmRvcnJhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAyNCwgImFvIiwgIkFuZ29sYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjYwLCAiYWkiLCAiQW5ndWlsbGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMTAsICJhcSIsICJBbnRhcmN0aWNhIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAyOCwgImFnIiwgIkFudGlndWEgJiBCYXJidWRhIiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDMyLCAiYXIiLCAiQXJnZW50aW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNTEsICJhbSIsICJBcm1lbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUzMywgImF3IiwgIkFydWJhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDM2LCAiYXUiLCAiQXVzdHJhbGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNDAsICJhdCIsICJBdXN0cmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAzMSwgImF6IiwgIkF6ZXJiYWlqYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDQ0LCAiYnMiLCAiQmFoYW1hcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNDgsICJiaCIsICJCYWhyYWluIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA1MCwgImJkIiwgIkJhbmdsYWRlc2giICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDUyLCAiYmIiLCAiQmFyYmFkb3MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMTIsICJieSIsICJCZWxhcnVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA1NiwgImJlIiwgIkJlbGdpdW0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDg0LCAiYnoiLCAiQmVsaXplIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMDQsICJiaiIsICJCZW5pbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA2MCwgImJtIiwgIkJlcm11ZGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDY0LCAiYnQiLCAiQmh1dGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNjgsICJibyIsICJCb2xpdmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA3MCwgImJhIiwgIkJvc25pYSAmIEhlcnplZ293aW5hIiAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDcyLCAiYnciLCAiQm90c3dhbmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNzQsICJidiIsICJCb3V2ZXQgSXNsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA3NiwgImJyIiwgIkJyYXppbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDg2LCAiaW8iLCAiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5IiAgICAgICB9LAogICAgICAgeyAgOTYsICJibiIsICJCcnVuZWkgRGFydXNzYWxhbSIgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDEwMCwgImJnIiwgIkJ1bGdhcmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODU0LCAiYmYiLCAiQnVya2luYSBGYXNvIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMDgsICJiaSIsICJCdXJ1bmRpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDExNiwgImtoIiwgIkNhbWJvZGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTIwLCAiY20iLCAiQ2FtZXJvb24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMjQsICJjYSIsICJDYW5hZGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDEzMiwgImN2IiwgIkNhcGUgVmVyZGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTM2LCAia3kiLCAiQ2F5bWFuIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNDAsICJjZiIsICJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMiICAgICAgICAgICAgIH0sCiAgICAgICB7IDE0OCwgInRkIiwgIkNoYWQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTUyLCAiY2wiLCAiQ2hpbGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNTYsICJjbiIsICJDaGluYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE2MiwgImN4IiwgIkNocmlzdG1hcyBJc2xhbmQiICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTY2LCAiY2MiLCAiQ29jb3MgSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNzAsICJjbyIsICJDb2xvbWJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE3NCwgImttIiwgIkNvbW9yb3MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTc4LCAiY2ciLCAiQ29uZ28iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxODAsICJjZCIsICJDb25nbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE4NCwgImNrIiwgIkNvb2sgSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTg4LCAiY3IiLCAiQ29zdGEgUmljYSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzODQsICJjaSIsICJDb3RlIGQnSXZvaXJlIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE5MSwgImhyIiwgIkNyb2F0aWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTkyLCAiY3UiLCAiQ3ViYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxOTYsICJjeSIsICJDeXBydXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIwMywgImN6IiwgIkN6ZWNoIFJlcHVibGljIiAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjA4LCAiZGsiLCAiRGVubWFyayIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNjIsICJkaiIsICJEamlib3V0aSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIxMiwgImRtIiwgIkRvbWluaWNhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjE0LCAiZG8iLCAiRG9taW5pY2FuIFJlcHVibGljIiAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMTgsICJlYyIsICJFY3VhZG9yIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDgxOCwgImVnIiwgIkVneXB0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjIyLCAic3YiLCAiRWwgU2FsdmFkb3IiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMjYsICJncSIsICJFcXVhdG9yaWFsIEd1aW5lYSIgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIzMiwgImVyIiwgIkVyaXRyZWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjMzLCAiZWUiLCAiRXN0b25pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMzEsICJldCIsICJFdGhpb3BpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIzOCwgImZrIiwgIkZhbGtsYW5kIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjM0LCAiZm8iLCAiRmFyb2UgSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNDIsICJmaiIsICJGaWppIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI0NiwgImZpIiwgIkZpbmxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjUwLCAiZnIiLCAiRnJhbmNlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNDksICJmeCIsICJGcmFuY2UsIE1ldHJvcG9saXRhbiIgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI1NCwgImdmIiwgIkZyZW5jaCBHdWlhbmEiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjU4LCAicGYiLCAiRnJlbmNoIFBvbHluZXNpYSIgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNjAsICJ0ZiIsICJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXMiICAgICAgICAgIH0sCiAgICAgICB7IDI2NiwgImdhIiwgIkdhYm9uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjcwLCAiZ20iLCAiR2FtYmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNjgsICJnZSIsICJHZW9yZ2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI3NiwgImRlIiwgIkdlcm1hbnkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjg4LCAiZ2giLCAiR2hhbmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyOTIsICJnaSIsICJHaWJyYWx0YXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMwMCwgImdyIiwgIkdyZWVjZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzA0LCAiZ2wiLCAiR3JlZW5sYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMDgsICJnZCIsICJHcmVuYWRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMxMiwgImdwIiwgIkd1YWRlbG91cGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzE2LCAiZ3UiLCAiR3VhbSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMjAsICJndCIsICJHdWF0ZW1hbGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMyNCwgImduIiwgIkd1aW5lYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjI0LCAiZ3ciLCAiR3VpbmVhLUJpc3NhdSIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMjgsICJneSIsICJHdXlhbmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMzMiwgImh0IiwgIkhhaXRpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzM0LCAiaG0iLCAiSGVhcmQgJiBNYyBEb25hbGQgSXNsYW5kcyIgICAgICAgICAgICB9LAogICAgICAgeyAzMzYsICJ2YSIsICJWYXRpY2FuIENpdHkiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM0MCwgImhuIiwgIkhvbmR1cmFzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzQ0LCAiaGsiLCAiSG9uZyBrb25nIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNDgsICJodSIsICJIdW5nYXJ5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM1MiwgImlzIiwgIkljZWxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzU2LCAiaW4iLCAiSW5kaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNjAsICJpZCIsICJJbmRvbmVzaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM2NCwgImlyIiwgIklyYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzY4LCAiaXEiLCAiSXJhcSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNzIsICJpZSIsICJJcmVsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM3NiwgImlsIiwgIklzcmFlbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzgwLCAiaXQiLCAiSXRhbHkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzODgsICJqbSIsICJKYW1haWNhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM5MiwgImpwIiwgIkphcGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDAwLCAiam8iLCAiSm9yZGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzOTgsICJreiIsICJLYXpha2hzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQwNCwgImtlIiwgIktlbnlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjk2LCAia2kiLCAiS2lyaWJhdGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MDgsICJrcCIsICJLb3JlYSAobm9ydGgpIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQxMCwgImtyIiwgIktvcmVhIChzb3V0aCkiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDE0LCAia3ciLCAiS3V3YWl0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MTcsICJrZyIsICJLeXJneXpzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQxOCwgImxhIiwgIkxhb3MiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDI4LCAibHYiLCAiTGF0dmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MjIsICJsYiIsICJMZWJhbm9uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQyNiwgImxzIiwgIkxlc290aG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDMwLCAibHIiLCAiTGliZXJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MzQsICJseSIsICJMaWJ5YSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQzOCwgImxpIiwgIkxpZWNodGVuc3RlaW4iICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDQwLCAibHQiLCAiTGl0aHVhbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NDIsICJsdSIsICJMdXhlbWJvdXJnIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ0NiwgIm1vIiwgIk1hY2FvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODA3LCAibWsiLCAiTWFjZWRvbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NTAsICJtZyIsICJNYWRhZ2FzY2FyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ1NCwgIm13IiwgIk1hbGF3aSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDU4LCAibXkiLCAiTWFsYXlzaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NjIsICJtdiIsICJNYWxkaXZlcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ2NiwgIm1sIiwgIk1hbGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDcwLCAibXQiLCAiTWFsdGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1ODQsICJtaCIsICJNYXJzaGFsbCBJc2xhbmRzIiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ3NCwgIm1xIiwgIk1hcnRpbmlxdWUiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDc4LCAibXIiLCAiTWF1cml0YW5pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0ODAsICJtdSIsICJNYXVyaXRpdXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE3NSwgInl0IiwgIk1heW90dGUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDg0LCAibXgiLCAiTWV4aWNvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1ODMsICJmbSIsICJNaWNyb25lc2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ5OCwgIm1kIiwgIk1vbGRvdmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDkyLCAibWMiLCAiTW9uYWNvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0OTYsICJtbiIsICJNb25nb2xpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUwMCwgIm1zIiwgIk1vbnRzZXJyYXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTA0LCAibWEiLCAiTW9yb2NjbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MDgsICJteiIsICJNb3phbWJpcXVlIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDEwNCwgIm1tIiwgIk15YW5tYXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTE2LCAibmEiLCAiTmFtaWJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MjAsICJuciIsICJOYXVydSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUyNCwgIm5wIiwgIk5lcGFsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTI4LCAibmwiLCAiTmV0aGVybGFuZHMiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MzAsICJhbiIsICJOZXRoZXJsYW5kcyBBbnRpbGxlcyIgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU0MCwgIm5jIiwgIk5ldyBDYWxlZG9uaWEiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTU0LCAibnoiLCAiTmV3IFplYWxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1NTgsICJuaSIsICJOaWNhcmFndWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU2MiwgIm5lIiwgIk5pZ2VyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTY2LCAibmciLCAiTmlnZXJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1NzAsICJudSIsICJOaXVlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU3NCwgIm5mIiwgIk5vcmZvbGsgSXNsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTgwLCAibXAiLCAiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzIiAgICAgICAgICAgICB9LAogICAgICAgeyA1NzgsICJubyIsICJOb3J3YXkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUxMiwgIm9tIiwgIk9tYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTg2LCAicGsiLCAiUGFraXN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1ODUsICJwdyIsICJQYWxhdSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI3NSwgInBzIiwgIlBhbGVzdGluaWFuIFRlcnJpdG9yeSIgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTkxLCAicGEiLCAiUGFuYW1hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1OTgsICJwZyIsICJQYXB1YSBOZXcgR3VpbmVhIiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYwMCwgInB5IiwgIlBhcmFndWF5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjA0LCAicGUiLCAiUGVydSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MDgsICJwaCIsICJQaGlsaXBwaW5lcyIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYxMiwgInBuIiwgIlBpdGNhaXJuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjE2LCAicGwiLCAiUG9sYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MjAsICJwdCIsICJQb3J0dWdhbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYzMCwgInByIiwgIlB1ZXJ0byBSaWNvIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjM0LCAicWEiLCAiUWF0YXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MzgsICJyZSIsICJSZXVuaW9uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY0MiwgInJvIiwgIlJvbWFuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjQzLCAicnUiLCAiUnVzc2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NDYsICJydyIsICJSd2FuZGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY1OSwgImtuIiwgIlNhaW50IEtpdHRzICYgTmV2aXMiICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjYyLCAibGMiLCAiU2FpbnQgTHVjaWEiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NzAsICJ2YyIsICJTYWludCBWaW5jZW50IiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg4MiwgIndzIiwgIlNhbW9hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjc0LCAic20iLCAiU2FuIE1hcmlubyIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NzgsICJzdCIsICJTYW8gVG9tZSAmIFByaW5jaXBlIiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY4MiwgInNhIiwgIlNhdWRpIEFyYWJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjg2LCAic24iLCAiU2VuZWdhbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4OTEsICJjcyIsICJTZXJiaWEgYW5kIE1vbnRlbmVncm8iICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY5MCwgInNjIiwgIlNleWNoZWxsZXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjk0LCAic2wiLCAiU2llcnJhIExlb25lIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MDIsICJzZyIsICJTaW5nYXBvcmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDcwMywgInNrIiwgIlNsb3Zha2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzA1LCAic2kiLCAiU2xvdmVuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgOTAsICJzYiIsICJTb2xvbW9uIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDcwNiwgInNvIiwgIlNvbWFsaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzEwLCAiemEiLCAiU291dGggQWZyaWNhIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMzksICJncyIsICJTb3V0aCBHZW9yZ2lhIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDcyNCwgImVzIiwgIlNwYWluIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTQ0LCAibGsiLCAiU3JpIExhbmthIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NTQsICJzaCIsICJTdC4gSGVsZW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY2NiwgInBtIiwgIlN0LiBQaWVycmUgJiBNaXF1ZWxvbiIgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzM2LCAic2QiLCAiU3VkYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NDAsICJzciIsICJTdXJpbmFtZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc0NCwgInNqIiwgIlN2YWxiYXJkICYgSmFuIE1heWVuIElzbGFuZHMiICAgICAgICAgfSwKICAgICAgIHsgNzQ4LCAic3oiLCAiU3dhemlsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NTIsICJzZSIsICJTd2VkZW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc1NiwgImNoIiwgIlN3aXR6ZXJsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzYwLCAic3kiLCAiU3lyaWFuIEFyYWIgUmVwdWJsaWMiICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MjYsICJ0bCIsICJUaW1vci1MZXN0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE1OCwgInR3IiwgIlRhaXdhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzYyLCAidGoiLCAiVGFqaWtpc3RhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4MzQsICJ0eiIsICJUYW56YW5pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc2NCwgInRoIiwgIlRoYWlsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzY4LCAidGciLCAiVG9nbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NzIsICJ0ayIsICJUb2tlbGF1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc3NiwgInRvIiwgIlRvbmdhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzgwLCAidHQiLCAiVHJpbmlkYWQgJiBUb2JhZ28iICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3ODgsICJ0biIsICJUdW5pc2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc5MiwgInRyIiwgIlR1cmtleSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzk1LCAidG0iLCAiVHVya21lbmlzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3OTYsICJ0YyIsICJUdXJrcyAmIENhaWNvcyBJc2xhbmRzIiAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc5OCwgInR2IiwgIlR1dmFsdSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODAwLCAidWciLCAiVWdhbmRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4MDQsICJ1YSIsICJVa3JhaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc4NCwgImFlIiwgIlVuaXRlZCBBcmFiIEVtaXJhdGVzIiAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODI2LCAiZ2IiLCAiVW5pdGVkIEtpbmdkb20iICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4NDAsICJ1cyIsICJVbml0ZWQgU3RhdGVzIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU4MSwgInVtIiwgIlVuaXRlZCBTdGF0ZXMgTWlub3IgT3V0bHlpbmcgSXNsYW5kcyIgfSwKICAgICAgIHsgODU4LCAidXkiLCAiVXJ1Z3VheSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4NjAsICJ1eiIsICJVemJla2lzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU0OCwgInZ1IiwgIlZhbnVhdHUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODYyLCAidmUiLCAiVmVuZXp1ZWxhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MDQsICJ2biIsICJWaWV0bmFtIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA5MiwgInZnIiwgIlZpcmdpbiBJc2xhbmRzIChCcml0aXNoKSIgICAgICAgICAgICAgfSwKICAgICAgIHsgODUwLCAidmkiLCAiVmlyZ2luIElzbGFuZHMgKFVTKSIgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4NzYsICJ3ZiIsICJXYWxsaXMgJiBGdXR1bmEgSXNsYW5kcyIgICAgICAgICAgICAgIH0sCiAgICAgICB7IDczMiwgImVoIiwgIldlc3Rlcm4gU2FoYXJhIiAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODg3LCAieWUiLCAiWWVtZW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4OTQsICJ6bSIsICJaYW1iaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDcxNiwgInp3IiwgIlppbWJhYndlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIH07CgovKgogKiBDaGVjayBpZiBzdGFydCBvZiAnc3RyJyBpcyBzaW1wbHkgYW4gSVB2NCBhZGRyZXNzLgogKi8KI2RlZmluZSBCWVRFX09LKHgpICgoeCkgPj0gMCAmJiAoeCkgPD0gMjU1KQoKc3RhdGljIGludCBpc19hZGRyKGNoYXIgKnN0ciwgY2hhciAqKmVuZCkKewogIGludCBhMCwgYTEsIGEyLCBhMywgbnVtLCByYyA9IDAsIGxlbmd0aCA9IDA7CgogIG51bSA9IHNzY2FuZihzdHIsIiUzZC4lM2QuJTNkLiUzZCVuIiwmYTAsJmExLCZhMiwmYTMsJmxlbmd0aCk7CiAgaWYoIChudW0gPT0gNCkgJiYKICAgICAgQllURV9PSyhhMCkgJiYgQllURV9PSyhhMSkgJiYgQllURV9PSyhhMikgJiYgQllURV9PSyhhMykgJiYKICAgICAgbGVuZ3RoID49ICgzKzQpKQogICAgewogICAgICByYyA9IDE7CiAgICAgICplbmQgPSBzdHIgKyBsZW5ndGg7CiAgICB9CiAgcmV0dXJuIHJjOwp9CgovKgogKiBGaW5kIHRoZSBjb3VudHJ5LWNvZGUgYW5kIG5hbWUgZnJvbSB0aGUgQ05BTUUuIEUuZy46CiAqICAgdmVyc2lvbiAxOiBDTkFNRSA9IHp6bm8uY291bnRyaWVzLm5lcmQuZGsgd2l0aCBhZGRyZXNzIDEyNy4wLjIuNjYKICogICAgICAgICAgICAgIHlpZWxkcyBjY29kZV9BIiA9ICJubyIgYW5kIGNudW1iZXIgNTc4ICgyLjY2KS4KICogICB2ZXJzaW9uIDI6IENOQU1FID0gPGEuYi5jLmQ+Lnp6LmNvdW50cmllcy5uZXJkLmRrIHdpdGggYWRkcmVzcyAxMjcuMC4yLjY2CiAqICAgICAgICAgICAgICB5aWVsZHMgY251bWJlciA1NzggKDIuNjYpLiBjY29kZV9BIGlzICIiOwogKi8Kc3RhdGljIHZvaWQgZmluZF9jb3VudHJ5X2Zyb21fY25hbWUoY29uc3QgY2hhciAqY25hbWUsIHN0cnVjdCBpbl9hZGRyIGFkZHIpCnsKICBjb25zdCBzdHJ1Y3Qgc2VhcmNoX2xpc3QgKmNvdW50cnk7CiAgY2hhciAgY2NvZGVfQTJbM10sICpjY29weSwgKmRvdF80OwogIGludCAgIGNudW1iZXIsIHowLCB6MSwgdmVyXzEsIHZlcl8yOwogIHVuc2lnbmVkIGxvbmcgaXA7CgogIGlwID0gbnRvaGwoYWRkci5zX2FkZHIpOwogIHowID0gVE9MT1dFUihjbmFtZVswXSk7CiAgejEgPSBUT0xPV0VSKGNuYW1lWzFdKTsKICBjY29weSA9IHN0cmR1cChjbmFtZSk7CiAgZG90XzQgPSBOVUxMOwoKICB2ZXJfMSA9ICh6MCA9PSAneicgJiYgejEgPT0gJ3onICYmICFzdHJjYXNlY21wKGNuYW1lKzQsbmVyZF92ZXIxKSk7CiAgdmVyXzIgPSAoaXNfYWRkcihjY29weSwmZG90XzQpICYmICFzdHJjYXNlY21wKGRvdF80LG5lcmRfdmVyMikpOwoKICBpZiAodmVyXzEpCiAgICB7CiAgICAgIGNvbnN0IGNoYXIgKmRvdCA9IHN0cmNocihjbmFtZSwgJy4nKTsKICAgICAgaWYgKCh6MCAhPSAneicgJiYgejEgIT0gJ3onKSB8fCBkb3QgIT0gY25hbWUrNCkKICAgICAgICB7CiAgICAgICAgICBwcmludGYoIlVuZXhwZWN0ZWQgQ05BTUUgJXMgKHZlcl8xKVxuIiwgY25hbWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICBlbHNlIGlmICh2ZXJfMikKICAgIHsKICAgICAgejAgPSBUT0xPV0VSKGRvdF80WzFdKTsKICAgICAgejEgPSBUT0xPV0VSKGRvdF80WzJdKTsKICAgICAgaWYgKHowICE9ICd6JyAmJiB6MSAhPSAneicpCiAgICAgICAgewogICAgICAgICAgcHJpbnRmKCJVbmV4cGVjdGVkIENOQU1FICVzICh2ZXJfMilcbiIsIGNuYW1lKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgZWxzZQogICAgewogICAgICBwcmludGYoIlVuZXhwZWN0ZWQgQ05BTUUgJXMgKHZlcj8pXG4iLCBjbmFtZSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgaWYgKHZlcl8xKQogICAgewogICAgICBjY29kZV9BMlswXSA9IChjaGFyKVRPTE9XRVIoY25hbWVbMl0pOwogICAgICBjY29kZV9BMlsxXSA9IChjaGFyKVRPTE9XRVIoY25hbWVbM10pOwogICAgICBjY29kZV9BMlsyXSA9ICdcMCc7CiAgICB9CiAgZWxzZQogICAgY2NvZGVfQTJbMF0gPSAnXDAnOwoKICBjbnVtYmVyID0gaXAgJiAweEZGRkY7CgogIFRSQUNFKCgiRm91bmQgY291bnRyeS1jb2RlIGAlcycsIG51bWJlciAlZFxuIiwKICAgICAgICAgdmVyXzEgPyBjY29kZV9BMiA6ICI8bi9hPiIsIGNudW1iZXIpKTsKCiAgY291bnRyeSA9IGxpc3RfbG9va3VwKGNudW1iZXIsIGNvdW50cnlfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNvdW50cnlfbGlzdCkgLyBzaXplb2YoY291bnRyeV9saXN0WzBdKSk7CiAgaWYgKCFjb3VudHJ5KQogICAgcHJpbnRmKCJOYW1lIGZvciBjb3VudHJ5LW51bWJlciAlZCBub3QgZm91bmQuXG4iLCBjbnVtYmVyKTsKICBlbHNlCiAgICB7CiAgICAgIGlmICh2ZXJfMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKGNvdW50cnktPnNob3J0X25hbWVbMF0gIT0gY2NvZGVfQTJbMF0pIHx8CiAgICAgICAgICAgICAgKGNvdW50cnktPnNob3J0X25hbWVbMV0gIT0gY2NvZGVfQTJbMV0pIHx8CiAgICAgICAgICAgICAgKGNvdW50cnktPnNob3J0X25hbWVbMl0gIT0gY2NvZGVfQTJbMl0pKQogICAgICAgICAgICBwcmludGYoInNob3J0LW5hbWUgbWlzbWF0Y2g7ICVzIHZzICVzXG4iLAogICAgICAgICAgICAgICAgICAgY291bnRyeS0+c2hvcnRfbmFtZSwgY2NvZGVfQTIpOwogICAgICAgIH0KICAgICAgcHJpbnRmKCIlcyAoJXMpLCBudW1iZXIgJWQuXG4iLAogICAgICAgICAgICAgY291bnRyeS0+bG9uZ19uYW1lLCBjb3VudHJ5LT5zaG9ydF9uYW1lLCBjbnVtYmVyKTsKICAgIH0KICBmcmVlKGNjb3B5KTsKfQoK