LyoKICogJElkJAogKgogKiBJUC1hZGRyZXNzL2hvc3RuYW1lIHRvIGNvdW50cnkgY29udmVydGVyLgogKgogKiBQcm9ibGVtOyB5b3Ugd2FudCB0byBrbm93IHdoZXJlIElQIGEuYi5jLmQgaXMgbG9jYXRlZC4KICoKICogVXNlIGFyZXNfZ2V0aG9zdGJ5bmFtZSAoImQuYy5iLmEuenouY291bnRyaWVzLm5lcmQuZGsiKQogKiBhbmQgZ2V0IHRoZSBDTkFNRSAoaG9zdC0+aF9uYW1lKS4gUmVzdWx0IHdpbGwgYmU6CiAqICAgQ05BTUUgPSB6ejxDQz4uY291bnRyaWVzLm5lcmQuZGsgd2l0aCBhZGRyZXNzIDEyNy4wLngueSAodmVyIDEpIG9yCiAqICAgQ05BTUUgPSA8YS5iLmMuZD4uenouY291bnRyaWVzLm5lcmQuZGsgd2l0aCBhZGRyZXNzIDEyNy4wLngueSAodmVyIDIpCiAqCiAqIFRoZSAyIGxldHRlciBjb3VudHJ5IGNvZGUgaW4gPENDPiBhbmQgdGhlIElTTy0zMTY2IGNvdW50cnkKICogbnVtYmVyIGluIHgueSAobnVtYmVyID0geCoyNTYgKyB5KS4gVmVyc2lvbiAyIG9mIHRoZSBwcm90b2NvbCBpcyBtaXNzaW5nCiAqIHRoZSA8Q0M+IG51bWJlci4KICoKICogUmVmOiBodHRwOi8vY291bnRyaWVzLm5lcmQuZGsvbW9yZS5odG1sCiAqCiAqIFdyaXR0ZW4gYnkgRy4gVmFuZW0gPGd2YW5lbUBicm9hZHBhcmsubm8+IDIwMDYsIDIwMDcKICoKICogTkIhIFRoaXMgcHJvZ3JhbSBtYXkgbm90IGJlIGJpZy1lbmRpYW4gYXdhcmUuCiAqCiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAogKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAogKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCiAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgogKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgogKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCiAqLwoKI2luY2x1ZGUgInNldHVwLmgiCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkYXJnLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CiNpZmRlZiBIQVZFX1VOSVNURF9ICiNpbmNsdWRlIDx1bmlzdGQuaD4KI2VuZGlmCiNpZmRlZiBIQVZFX1NUUklOR1NfSAojaW5jbHVkZSA8c3RyaW5ncy5oPgojZW5kaWYKCiNpZiBkZWZpbmVkKFdJTjMyKQogICNpbmNsdWRlIDx3aW5zb2NrLmg+CiNlbHNlCiAgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAgI2luY2x1ZGUgPG5ldGRiLmg+CiNlbmRpZgoKI2luY2x1ZGUgImFyZXMuaCIKI2luY2x1ZGUgImFyZXNfZ2V0b3B0LmgiCiNpbmNsdWRlICJpbmV0X25ldF9wdG9uLmgiCiNpbmNsdWRlICJpbmV0X250b3AuaCIKCnN0YXRpYyBjb25zdCBjaGFyICp1c2FnZSAgICAgID0gImFjb3VudHJ5IFstdmg/XSB7aG9zdHxhZGRyfSAuLi5cbiI7CnN0YXRpYyBjb25zdCBjaGFyICBuZXJkX2ZtdFtdID0gIiV1LiV1LiV1LiV1Lnp6LmNvdW50cmllcy5uZXJkLmRrIjsKc3RhdGljIGNvbnN0IGNoYXIgKm5lcmRfdmVyMSAgPSBuZXJkX2ZtdCArIDE0OwpzdGF0aWMgY29uc3QgY2hhciAqbmVyZF92ZXIyICA9IG5lcmRfZm10ICsgMTE7CnN0YXRpYyBpbnQgICAgICAgICB2ZXJib3NlICAgID0gMDsKCiNkZWZpbmUgVFJBQ0UoZm10KSBkbyB7ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSA+IDApIFwKICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgZm10IDsgICBcCiAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQoKc3RhdGljIHZvaWQgd2FpdF9hcmVzKGFyZXNfY2hhbm5lbCBjaGFubmVsKTsKc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsIHN0cnVjdCBob3N0ZW50ICpob3N0KTsKc3RhdGljIHZvaWQgY2FsbGJhY2syKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCk7CnN0YXRpYyB2b2lkIGZpbmRfY291bnRyeV9mcm9tX2NuYW1lKGNvbnN0IGNoYXIgKmNuYW1lLCBzdHJ1Y3QgaW5fYWRkciBhZGRyKTsKCnN0YXRpYyB2b2lkIEFib3J0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQp7CiAgdmFfbGlzdCBhcmdzOwogIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFyZ3MpOwogIHZhX2VuZChhcmdzKTsKICBleGl0KDEpOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKICBhcmVzX2NoYW5uZWwgY2hhbm5lbDsKICBpbnQgICAgY2gsIHN0YXR1czsKCiNpZmRlZiBXSU4zMgogIFdPUkQgd1ZlcnNpb25SZXF1ZXN0ZWQgPSBNQUtFV09SRChVU0VfV0lOU09DSyxVU0VfV0lOU09DSyk7CiAgV1NBREFUQSB3c2FEYXRhOwogIFdTQVN0YXJ0dXAod1ZlcnNpb25SZXF1ZXN0ZWQsICZ3c2FEYXRhKTsKI2VuZGlmCgogIHdoaWxlICgoY2ggPSBhcmVzX2dldG9wdChhcmdjLCBhcmd2LCAiZHZoPyIpKSAhPSAtMSkKICAgIHN3aXRjaCAoY2gpCiAgICAgIHsKICAgICAgY2FzZSAnZCc6CiNpZmRlZiBXQVRUMzIKICAgICAgICBkYnVnX2luaXQoKTsKI2VuZGlmCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3YnOgogICAgICAgIHZlcmJvc2UrKzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnaCc6CiAgICAgIGNhc2UgJz8nOgogICAgICBkZWZhdWx0OgogICAgICAgIEFib3J0KHVzYWdlKTsKICAgICAgfQoKICBhcmdjIC09IG9wdGluZDsKICBhcmd2ICs9IG9wdGluZDsKICBpZiAoYXJnYyA8IDEpCiAgICAgQWJvcnQodXNhZ2UpOwoKICBzdGF0dXMgPSBhcmVzX2luaXQoJmNoYW5uZWwpOwogIGlmIChzdGF0dXMgIT0gQVJFU19TVUNDRVNTKQogICAgewogICAgICBmcHJpbnRmKHN0ZGVyciwgImFyZXNfaW5pdDogJXNcbiIsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CiAgICAgIHJldHVybiAxOwogICAgfQoKICAvKiBJbml0aWF0ZSB0aGUgcXVlcmllcywgb25lIHBlciBjb21tYW5kLWxpbmUgYXJndW1lbnQuICovCiAgZm9yICggOyAqYXJndjsgYXJndisrKQogICAgewogICAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyOwogICAgICBjaGFyIGJ1ZlsxMDBdOwoKICAgICAgLyogSWYgdGhpcyBmYWlscywgYXNzdW1lICcqYXJndicgaXMgYSBob3N0LW5hbWUgdGhhdAogICAgICAgKiBtdXN0IGJlIHJlc29sdmVkIGZpcnN0CiAgICAgICAqLwogICAgICBpZiAoYXJlc19pbmV0X3B0b24oQUZfSU5FVCwgKmFyZ3YsICZhZGRyKSAhPSAxKQogICAgICAgIHsKICAgICAgICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsLCAqYXJndiwgQUZfSU5FVCwgY2FsbGJhY2syLCAmYWRkcik7CiAgICAgICAgICB3YWl0X2FyZXMoY2hhbm5lbCk7CiAgICAgICAgICBpZiAoYWRkci5zX2FkZHIgPT0gSU5BRERSX05PTkUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0byBsb29rdXAgJXNcbiIsICphcmd2KTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIHNwcmludGYoYnVmLCBuZXJkX2ZtdCwKICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShhZGRyLnNfYWRkciA+PiAyNCksCiAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoKGFkZHIuc19hZGRyID4+IDE2KSAmIDI1NSksCiAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoKGFkZHIuc19hZGRyID4+IDgpICYgMjU1KSwKICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShhZGRyLnNfYWRkciAmIDI1NSkpOwogICAgICBUUkFDRSgoIkxvb2tpbmcgdXAgJXMuLi4iLCBidWYpKTsKICAgICAgZmZsdXNoKHN0ZG91dCk7CiAgICAgIGFyZXNfZ2V0aG9zdGJ5bmFtZShjaGFubmVsLCBidWYsIEFGX0lORVQsIGNhbGxiYWNrLCBidWYpOwogICAgfQoKICB3YWl0X2FyZXMoY2hhbm5lbCk7CiAgYXJlc19kZXN0cm95KGNoYW5uZWwpOwoKI2lmZGVmIFdJTjMyCiAgV1NBQ2xlYW51cCgpOwojZW5kaWYKCiAgcmV0dXJuIDA7Cn0KCi8qCiAqIFdhaXQgZm9yIHRoZSBxdWVyaWVzIHRvIGNvbXBsZXRlLgogKi8Kc3RhdGljIHZvaWQgd2FpdF9hcmVzKGFyZXNfY2hhbm5lbCBjaGFubmVsKQp7CiAgd2hpbGUgKDEpCiAgICB7CiAgICAgIHN0cnVjdCB0aW1ldmFsICp0dnAsIHR2OwogICAgICBmZF9zZXQgcmVhZF9mZHMsIHdyaXRlX2ZkczsKICAgICAgaW50IG5mZHM7CgogICAgICBGRF9aRVJPKCZyZWFkX2Zkcyk7CiAgICAgIEZEX1pFUk8oJndyaXRlX2Zkcyk7CiAgICAgIG5mZHMgPSBhcmVzX2ZkcyhjaGFubmVsLCAmcmVhZF9mZHMsICZ3cml0ZV9mZHMpOwogICAgICBpZiAobmZkcyA9PSAwKQogICAgICAgIGJyZWFrOwogICAgICB0dnAgPSBhcmVzX3RpbWVvdXQoY2hhbm5lbCwgTlVMTCwgJnR2KTsKICAgICAgc2VsZWN0KG5mZHMsICZyZWFkX2ZkcywgJndyaXRlX2ZkcywgTlVMTCwgdHZwKTsKICAgICAgYXJlc19wcm9jZXNzKGNoYW5uZWwsICZyZWFkX2ZkcywgJndyaXRlX2Zkcyk7CiAgICB9Cn0KCi8qCiAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHVzZWQgd2hlbiB3ZSBoYXZlIHRoZSBJUC1hZGRyZXNzIG9mIGludGVyZXN0LgogKiBFeHRyYWN0IHRoZSBDTkFNRSBhbmQgZmlndXJlIG91dCB0aGUgY291bnRyeS1jb2RlIGZyb20gaXQuCiAqLwpzdGF0aWMgdm9pZCBjYWxsYmFjayh2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywgc3RydWN0IGhvc3RlbnQgKmhvc3QpCnsKICBjb25zdCBjaGFyICpuYW1lID0gKGNvbnN0IGNoYXIqKWFyZzsKICBjb25zdCBjaGFyICpjbmFtZTsKICBjaGFyIGJ1ZlsyMF07CgogICh2b2lkKXRpbWVvdXRzOwoKICBpZiAoIWhvc3QgfHwgc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKICAgIHsKICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gbG9va3VwICVzOiAlc1xuIiwgbmFtZSwgYXJlc19zdHJlcnJvcihzdGF0dXMpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICBUUkFDRSgoIlxuRm91bmQgYWRkcmVzcyAlcywgbmFtZSAlc1xuIiwKICAgICAgICAgYXJlc19pbmV0X250b3AoQUZfSU5FVCwoY29uc3QgY2hhciopaG9zdC0+aF9hZGRyLGJ1ZixzaXplb2YoYnVmKSksCiAgICAgICAgIGhvc3QtPmhfbmFtZSkpOwoKICBjbmFtZSA9IGhvc3QtPmhfbmFtZTsgIC8qIENOQU1FIGdldHMgcHV0IGhlcmUgKi8KICBpZiAoIWNuYW1lKQogICAgcHJpbnRmKCJGYWlsZWQgdG8gZ2V0IENOQU1FIGZvciAlc1xuIiwgbmFtZSk7CiAgZWxzZQogICAgZmluZF9jb3VudHJ5X2Zyb21fY25hbWUoY25hbWUsICooc3RydWN0IGluX2FkZHIqKWhvc3QtPmhfYWRkcik7Cn0KCi8qCiAqIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHVzZWQgdG8gb2J0YWluIHRoZSBJUC1hZGRyZXNzIG9mIHRoZSBob3N0IG9mIGludGVyZXN0LgogKi8Kc3RhdGljIHZvaWQgY2FsbGJhY2syKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCkKewogIHN0cnVjdCBpbl9hZGRyICphZGRyID0gKHN0cnVjdCBpbl9hZGRyKikgYXJnOwoKICAodm9pZCl0aW1lb3V0czsKICBpZiAoIWhvc3QgfHwgc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKICAgIG1lbXNldChhZGRyLCBJTkFERFJfTk9ORSwgc2l6ZW9mKCphZGRyKSk7CiAgZWxzZQogICAgbWVtY3B5KGFkZHIsIGhvc3QtPmhfYWRkciwgc2l6ZW9mKCphZGRyKSk7Cn0KCnN0cnVjdCBzZWFyY2hfbGlzdCB7CiAgICAgICBpbnQgICAgICAgICBjb3VudHJ5X251bWJlcjsgLyogSVNPLTMxNjYgY291bnRyeSBudW1iZXIgKi8KICAgICAgIGNoYXIgICAgICAgIHNob3J0X25hbWVbM107ICAvKiBBMiBzaG9ydCBjb3VudHJ5IGNvZGUgKi8KICAgICAgIGNvbnN0IGNoYXIgKmxvbmdfbmFtZTsgICAgICAvKiBub3JtYWwgY291bnRyeSBuYW1lICovCiAgICAgfTsKCmNvbnN0IHN0cnVjdCBzZWFyY2hfbGlzdCAqbGlzdF9sb29rdXAoaW50IG51bWJlciwgY29uc3Qgc3RydWN0IHNlYXJjaF9saXN0ICpsaXN0LCBpbnQgbnVtKQp7CiAgd2hpbGUgKG51bSA+IDAgJiYgbGlzdC0+bG9uZ19uYW1lKQogICAgewogICAgICBpZiAobGlzdC0+Y291bnRyeV9udW1iZXIgPT0gbnVtYmVyKQogICAgICAgIHJldHVybiAobGlzdCk7CiAgICAgIG51bS0tOwogICAgICBsaXN0Kys7CiAgICB9CiAgcmV0dXJuIChOVUxMKTsKfQoKLyoKICogUmVmOiBmdHA6Ly9mdHAucmlwZS5uZXQvaXNvMzE2Ni1jb3VudHJ5Y29kZXMudHh0CiAqLwpzdGF0aWMgY29uc3Qgc3RydWN0IHNlYXJjaF9saXN0IGNvdW50cnlfbGlzdFtdID0gewogICAgICAgeyAgIDQsICJhZiIsICJBZmdoYW5pc3RhbiIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI0OCwgImF4IiwgIsVsYW5kIElzbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgICA4LCAiYWwiLCAiQWxiYW5pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMTIsICJkeiIsICJBbGdlcmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAxNiwgImFzIiwgIkFtZXJpY2FuIFNhbW9hIiAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDIwLCAiYWQiLCAiQW5kb3JyYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMjQsICJhbyIsICJBbmdvbGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY2MCwgImFpIiwgIkFuZ3VpbGxhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDEwLCAiYXEiLCAiQW50YXJjdGljYSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMjgsICJhZyIsICJBbnRpZ3VhICYgQmFyYnVkYSIgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAzMiwgImFyIiwgIkFyZ2VudGluYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDUxLCAiYW0iLCAiQXJtZW5pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MzMsICJhdyIsICJBcnViYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAzNiwgImF1IiwgIkF1c3RyYWxpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDQwLCAiYXQiLCAiQXVzdHJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMzEsICJheiIsICJBemVyYmFpamFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA0NCwgImJzIiwgIkJhaGFtYXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDQ4LCAiYmgiLCAiQmFocmFpbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNTAsICJiZCIsICJCYW5nbGFkZXNoIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA1MiwgImJiIiwgIkJhcmJhZG9zIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTEyLCAiYnkiLCAiQmVsYXJ1cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNTYsICJiZSIsICJCZWxnaXVtIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA4NCwgImJ6IiwgIkJlbGl6ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjA0LCAiYmoiLCAiQmVuaW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNjAsICJibSIsICJCZXJtdWRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA2NCwgImJ0IiwgIkJodXRhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDY4LCAiYm8iLCAiQm9saXZpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNzAsICJiYSIsICJCb3NuaWEgJiBIZXJ6ZWdvd2luYSIgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA3MiwgImJ3IiwgIkJvdHN3YW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDc0LCAiYnYiLCAiQm91dmV0IElzbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNzYsICJiciIsICJCcmF6aWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA4NiwgImlvIiwgIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSIgICAgICAgfSwKICAgICAgIHsgIDk2LCAiYm4iLCAiQnJ1bmVpIERhcnVzc2FsYW0iICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMDAsICJiZyIsICJCdWxnYXJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg1NCwgImJmIiwgIkJ1cmtpbmEgRmFzbyIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTA4LCAiYmkiLCAiQnVydW5kaSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMTYsICJraCIsICJDYW1ib2RpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDEyMCwgImNtIiwgIkNhbWVyb29uIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTI0LCAiY2EiLCAiQ2FuYWRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMzIsICJjdiIsICJDYXBlIFZlcmRlIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDEzNiwgImt5IiwgIkNheW1hbiBJc2xhbmRzIiAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTQwLCAiY2YiLCAiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljIiAgICAgICAgICAgICB9LAogICAgICAgeyAxNDgsICJ0ZCIsICJDaGFkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE1MiwgImNsIiwgIkNoaWxlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTU2LCAiY24iLCAiQ2hpbmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNjIsICJjeCIsICJDaHJpc3RtYXMgSXNsYW5kIiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE2NiwgImNjIiwgIkNvY29zIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTcwLCAiY28iLCAiQ29sb21iaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNzQsICJrbSIsICJDb21vcm9zIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE3OCwgImNnIiwgIkNvbmdvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTgwLCAiY2QiLCAiQ29uZ28iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxODQsICJjayIsICJDb29rIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE4OCwgImNyIiwgIkNvc3RhIFJpY2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzg0LCAiY2kiLCAiQ290ZSBkJ0l2b2lyZSIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxOTEsICJociIsICJDcm9hdGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE5MiwgImN1IiwgIkN1YmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTk2LCAiY3kiLCAiQ3lwcnVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMDMsICJjeiIsICJDemVjaCBSZXB1YmxpYyIgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIwOCwgImRrIiwgIkRlbm1hcmsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjYyLCAiZGoiLCAiRGppYm91dGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMTIsICJkbSIsICJEb21pbmljYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIxNCwgImRvIiwgIkRvbWluaWNhbiBSZXB1YmxpYyIgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjE4LCAiZWMiLCAiRWN1YWRvciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4MTgsICJlZyIsICJFZ3lwdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIyMiwgInN2IiwgIkVsIFNhbHZhZG9yIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjI2LCAiZ3EiLCAiRXF1YXRvcmlhbCBHdWluZWEiICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMzIsICJlciIsICJFcml0cmVhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIzMywgImVlIiwgIkVzdG9uaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjMxLCAiZXQiLCAiRXRoaW9waWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMzgsICJmayIsICJGYWxrbGFuZCBJc2xhbmRzIiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIzNCwgImZvIiwgIkZhcm9lIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjQyLCAiZmoiLCAiRmlqaSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNDYsICJmaSIsICJGaW5sYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI1MCwgImZyIiwgIkZyYW5jZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjQ5LCAiZngiLCAiRnJhbmNlLCBNZXRyb3BvbGl0YW4iICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNTQsICJnZiIsICJGcmVuY2ggR3VpYW5hIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI1OCwgInBmIiwgIkZyZW5jaCBQb2x5bmVzaWEiICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjYwLCAidGYiLCAiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzIiAgICAgICAgICB9LAogICAgICAgeyAyNjYsICJnYSIsICJHYWJvbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI3MCwgImdtIiwgIkdhbWJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjY4LCAiZ2UiLCAiR2VvcmdpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNzYsICJkZSIsICJHZXJtYW55IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI4OCwgImdoIiwgIkdoYW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjkyLCAiZ2kiLCAiR2licmFsdGFyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMDAsICJnciIsICJHcmVlY2UiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMwNCwgImdsIiwgIkdyZWVubGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzA4LCAiZ2QiLCAiR3JlbmFkYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMTIsICJncCIsICJHdWFkZWxvdXBlIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMxNiwgImd1IiwgIkd1YW0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzIwLCAiZ3QiLCAiR3VhdGVtYWxhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMjQsICJnbiIsICJHdWluZWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYyNCwgImd3IiwgIkd1aW5lYS1CaXNzYXUiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzI4LCAiZ3kiLCAiR3V5YW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMzIsICJodCIsICJIYWl0aSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMzNCwgImhtIiwgIkhlYXJkICYgTWMgRG9uYWxkIElzbGFuZHMiICAgICAgICAgICAgfSwKICAgICAgIHsgMzM2LCAidmEiLCAiVmF0aWNhbiBDaXR5IiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNDAsICJobiIsICJIb25kdXJhcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM0NCwgImhrIiwgIkhvbmcga29uZyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzQ4LCAiaHUiLCAiSHVuZ2FyeSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNTIsICJpcyIsICJJY2VsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM1NiwgImluIiwgIkluZGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzYwLCAiaWQiLCAiSW5kb25lc2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNjQsICJpciIsICJJcmFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM2OCwgImlxIiwgIklyYXEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzcyLCAiaWUiLCAiSXJlbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNzYsICJpbCIsICJJc3JhZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM4MCwgIml0IiwgIkl0YWx5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzg4LCAiam0iLCAiSmFtYWljYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzOTIsICJqcCIsICJKYXBhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQwMCwgImpvIiwgIkpvcmRhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzk4LCAia3oiLCAiS2F6YWtoc3RhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MDQsICJrZSIsICJLZW55YSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI5NiwgImtpIiwgIktpcmliYXRpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDA4LCAia3AiLCAiS29yZWEgKG5vcnRoKSIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MTAsICJrciIsICJLb3JlYSAoc291dGgpIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQxNCwgImt3IiwgIkt1d2FpdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDE3LCAia2ciLCAiS3lyZ3l6c3RhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MTgsICJsYSIsICJMYW9zIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQyOCwgImx2IiwgIkxhdHZpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDIyLCAibGIiLCAiTGViYW5vbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MjYsICJscyIsICJMZXNvdGhvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQzMCwgImxyIiwgIkxpYmVyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDM0LCAibHkiLCAiTGlieWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MzgsICJsaSIsICJMaWVjaHRlbnN0ZWluIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ0MCwgImx0IiwgIkxpdGh1YW5pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDQyLCAibHUiLCAiTHV4ZW1ib3VyZyIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NDYsICJtbyIsICJNYWNhbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDgwNywgIm1rIiwgIk1hY2Vkb25pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDUwLCAibWciLCAiTWFkYWdhc2NhciIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NTQsICJtdyIsICJNYWxhd2kiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ1OCwgIm15IiwgIk1hbGF5c2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDYyLCAibXYiLCAiTWFsZGl2ZXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NjYsICJtbCIsICJNYWxpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ3MCwgIm10IiwgIk1hbHRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTg0LCAibWgiLCAiTWFyc2hhbGwgSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NzQsICJtcSIsICJNYXJ0aW5pcXVlIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ3OCwgIm1yIiwgIk1hdXJpdGFuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDgwLCAibXUiLCAiTWF1cml0aXVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNzUsICJ5dCIsICJNYXlvdHRlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ4NCwgIm14IiwgIk1leGljbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTgzLCAiZm0iLCAiTWljcm9uZXNpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0OTgsICJtZCIsICJNb2xkb3ZhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ5MiwgIm1jIiwgIk1vbmFjbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDk2LCAibW4iLCAiTW9uZ29saWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MDAsICJtcyIsICJNb250c2VycmF0IiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUwNCwgIm1hIiwgIk1vcm9jY28iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTA4LCAibXoiLCAiTW96YW1iaXF1ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMDQsICJtbSIsICJNeWFubWFyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUxNiwgIm5hIiwgIk5hbWliaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTIwLCAibnIiLCAiTmF1cnUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MjQsICJucCIsICJOZXBhbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUyOCwgIm5sIiwgIk5ldGhlcmxhbmRzIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTMwLCAiYW4iLCAiTmV0aGVybGFuZHMgQW50aWxsZXMiICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1NDAsICJuYyIsICJOZXcgQ2FsZWRvbmlhIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU1NCwgIm56IiwgIk5ldyBaZWFsYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTU4LCAibmkiLCAiTmljYXJhZ3VhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1NjIsICJuZSIsICJOaWdlciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU2NiwgIm5nIiwgIk5pZ2VyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTcwLCAibnUiLCAiTml1ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1NzQsICJuZiIsICJOb3Jmb2xrIElzbGFuZCIgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU4MCwgIm1wIiwgIk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIgICAgICAgICAgICAgfSwKICAgICAgIHsgNTc4LCAibm8iLCAiTm9yd2F5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MTIsICJvbSIsICJPbWFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU4NiwgInBrIiwgIlBha2lzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTg1LCAicHciLCAiUGFsYXUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNzUsICJwcyIsICJQYWxlc3RpbmlhbiBUZXJyaXRvcnkiICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU5MSwgInBhIiwgIlBhbmFtYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTk4LCAicGciLCAiUGFwdWEgTmV3IEd1aW5lYSIgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MDAsICJweSIsICJQYXJhZ3VheSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYwNCwgInBlIiwgIlBlcnUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjA4LCAicGgiLCAiUGhpbGlwcGluZXMiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MTIsICJwbiIsICJQaXRjYWlybiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYxNiwgInBsIiwgIlBvbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjIwLCAicHQiLCAiUG9ydHVnYWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MzAsICJwciIsICJQdWVydG8gUmljbyIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYzNCwgInFhIiwgIlFhdGFyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjM4LCAicmUiLCAiUmV1bmlvbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NDIsICJybyIsICJSb21hbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY0MywgInJ1IiwgIlJ1c3NpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjQ2LCAicnciLCAiUndhbmRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NTksICJrbiIsICJTYWludCBLaXR0cyAmIE5ldmlzIiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY2MiwgImxjIiwgIlNhaW50IEx1Y2lhIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjcwLCAidmMiLCAiU2FpbnQgVmluY2VudCIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4ODIsICJ3cyIsICJTYW1vYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY3NCwgInNtIiwgIlNhbiBNYXJpbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjc4LCAic3QiLCAiU2FvIFRvbWUgJiBQcmluY2lwZSIgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2ODIsICJzYSIsICJTYXVkaSBBcmFiaWEiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY4NiwgInNuIiwgIlNlbmVnYWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODkxLCAiY3MiLCAiU2VyYmlhIGFuZCBNb250ZW5lZ3JvIiAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2OTAsICJzYyIsICJTZXljaGVsbGVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY5NCwgInNsIiwgIlNpZXJyYSBMZW9uZSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzAyLCAic2ciLCAiU2luZ2Fwb3JlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MDMsICJzayIsICJTbG92YWtpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDcwNSwgInNpIiwgIlNsb3ZlbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDkwLCAic2IiLCAiU29sb21vbiBJc2xhbmRzIiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MDYsICJzbyIsICJTb21hbGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDcxMCwgInphIiwgIlNvdXRoIEFmcmljYSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjM5LCAiZ3MiLCAiU291dGggR2VvcmdpYSIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MjQsICJlcyIsICJTcGFpbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE0NCwgImxrIiwgIlNyaSBMYW5rYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjU0LCAic2giLCAiU3QuIEhlbGVuYSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NjYsICJwbSIsICJTdC4gUGllcnJlICYgTWlxdWVsb24iICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDczNiwgInNkIiwgIlN1ZGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzQwLCAic3IiLCAiU3VyaW5hbWUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NDQsICJzaiIsICJTdmFsYmFyZCAmIEphbiBNYXllbiBJc2xhbmRzIiAgICAgICAgIH0sCiAgICAgICB7IDc0OCwgInN6IiwgIlN3YXppbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzUyLCAic2UiLCAiU3dlZGVuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NTYsICJjaCIsICJTd2l0emVybGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc2MCwgInN5IiwgIlN5cmlhbiBBcmFiIFJlcHVibGljIiAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjI2LCAidGwiLCAiVGltb3ItTGVzdGUiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNTgsICJ0dyIsICJUYWl3YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc2MiwgInRqIiwgIlRhamlraXN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODM0LCAidHoiLCAiVGFuemFuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NjQsICJ0aCIsICJUaGFpbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc2OCwgInRnIiwgIlRvZ28iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzcyLCAidGsiLCAiVG9rZWxhdSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NzYsICJ0byIsICJUb25nYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc4MCwgInR0IiwgIlRyaW5pZGFkICYgVG9iYWdvIiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzg4LCAidG4iLCAiVHVuaXNpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3OTIsICJ0ciIsICJUdXJrZXkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc5NSwgInRtIiwgIlR1cmttZW5pc3RhbiIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzk2LCAidGMiLCAiVHVya3MgJiBDYWljb3MgSXNsYW5kcyIgICAgICAgICAgICAgICB9LAogICAgICAgeyA3OTgsICJ0diIsICJUdXZhbHUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDgwMCwgInVnIiwgIlVnYW5kYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODA0LCAidWEiLCAiVWtyYWluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3ODQsICJhZSIsICJVbml0ZWQgQXJhYiBFbWlyYXRlcyIgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDgyNiwgImdiIiwgIlVuaXRlZCBLaW5nZG9tIiAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODQwLCAidXMiLCAiVW5pdGVkIFN0YXRlcyIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1ODEsICJ1bSIsICJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMiIH0sCiAgICAgICB7IDg1OCwgInV5IiwgIlVydWd1YXkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODYwLCAidXoiLCAiVXpiZWtpc3RhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1NDgsICJ2dSIsICJWYW51YXR1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg2MiwgInZlIiwgIlZlbmV6dWVsYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzA0LCAidm4iLCAiVmlldG5hbSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgOTIsICJ2ZyIsICJWaXJnaW4gSXNsYW5kcyAoQnJpdGlzaCkiICAgICAgICAgICAgIH0sCiAgICAgICB7IDg1MCwgInZpIiwgIlZpcmdpbiBJc2xhbmRzIChVUykiICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODc2LCAid2YiLCAiV2FsbGlzICYgRnV0dW5hIElzbGFuZHMiICAgICAgICAgICAgICB9LAogICAgICAgeyA3MzIsICJlaCIsICJXZXN0ZXJuIFNhaGFyYSIgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg4NywgInllIiwgIlllbWVuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODk0LCAiem0iLCAiWmFtYmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MTYsICJ6dyIsICJaaW1iYWJ3ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB9OwoKLyoKICogQ2hlY2sgaWYgc3RhcnQgb2YgJ3N0cicgaXMgc2ltcGx5IGFuIElQdjQgYWRkcmVzcy4KICovCiNkZWZpbmUgQllURV9PSyh4KSAoKHgpID49IDAgJiYgKHgpIDw9IDI1NSkKCnN0YXRpYyBpbnQgaXNfYWRkcihjaGFyICpzdHIsIGNoYXIgKiplbmQpCnsKICBpbnQgYTAsIGExLCBhMiwgYTMsIG51bSwgcmMgPSAwLCBsZW5ndGggPSAwOwoKICBpZiAoKG51bSA9IHNzY2FuZihzdHIsIiUzZC4lM2QuJTNkLiUzZCVuIiwmYTAsJmExLCZhMiwmYTMsJmxlbmd0aCkpID09IDQgJiYKICAgICAgQllURV9PSyhhMCkgJiYgQllURV9PSyhhMSkgJiYgQllURV9PSyhhMikgJiYgQllURV9PSyhhMykgJiYKICAgICAgbGVuZ3RoID49ICgzKzQpKQogICAgewogICAgICByYyA9IDE7CiAgICAgICplbmQgPSBzdHIgKyBsZW5ndGg7CiAgICB9CiAgcmV0dXJuIHJjOwp9CgovKgogKiBGaW5kIHRoZSBjb3VudHJ5LWNvZGUgYW5kIG5hbWUgZnJvbSB0aGUgQ05BTUUuIEUuZy46CiAqICAgdmVyc2lvbiAxOiBDTkFNRSA9IHp6bm8uY291bnRyaWVzLm5lcmQuZGsgd2l0aCBhZGRyZXNzIDEyNy4wLjIuNjYKICogICAgICAgICAgICAgIHlpZWxkcyBjY29kZV9BIiA9ICJubyIgYW5kIGNudW1iZXIgNTc4ICgyLjY2KS4KICogICB2ZXJzaW9uIDI6IENOQU1FID0gPGEuYi5jLmQ+Lnp6LmNvdW50cmllcy5uZXJkLmRrIHdpdGggYWRkcmVzcyAxMjcuMC4yLjY2CiAqICAgICAgICAgICAgICB5aWVsZHMgY251bWJlciA1NzggKDIuNjYpLiBjY29kZV9BIGlzICIiOwogKi8Kc3RhdGljIHZvaWQgZmluZF9jb3VudHJ5X2Zyb21fY25hbWUoY29uc3QgY2hhciAqY25hbWUsIHN0cnVjdCBpbl9hZGRyIGFkZHIpCnsKICBjb25zdCBzdHJ1Y3Qgc2VhcmNoX2xpc3QgKmNvdW50cnk7CiAgY2hhciAgY2NvZGVfQTJbM10sICpjY29weSwgKmRvdF80OwogIGludCAgIGNudW1iZXIsIHowLCB6MSwgdmVyXzEsIHZlcl8yOwogIHVfbG9uZyBpcDsKCiAgaXAgPSBudG9obChhZGRyLnNfYWRkcik7CiAgejAgPSB0b2xvd2VyKGNuYW1lWzBdKTsKICB6MSA9IHRvbG93ZXIoY25hbWVbMV0pOwogIGNjb3B5ID0gc3RyZHVwKGNuYW1lKTsKCiAgdmVyXzEgPSAoejAgPT0gJ3onICYmIHoxID09ICd6JyAmJiAhc3RyY2FzZWNtcChjbmFtZSs0LG5lcmRfdmVyMSkpOwogIHZlcl8yID0gKGlzX2FkZHIoY2NvcHksJmRvdF80KSAmJiAhc3RyY2FzZWNtcChkb3RfNCxuZXJkX3ZlcjIpKTsKCiAgaWYgKHZlcl8xKQogICAgewogICAgICBjb25zdCBjaGFyICpkb3QgPSBzdHJjaHIoY25hbWUsICcuJyk7CiAgICAgIGlmICgoejAgIT0gJ3onICYmIHoxICE9ICd6JykgfHwgZG90ICE9IGNuYW1lKzQpCiAgICAgICAgewogICAgICAgICAgcHJpbnRmKCJVbmV4cGVjdGVkIENOQU1FICVzICh2ZXJfMSlcbiIsIGNuYW1lKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgZWxzZSBpZiAodmVyXzIpCiAgICB7CiAgICAgIHowID0gdG9sb3dlcihkb3RfNFsxXSk7CiAgICAgIHoxID0gdG9sb3dlcihkb3RfNFsyXSk7CiAgICAgIGlmICh6MCAhPSAneicgJiYgejEgIT0gJ3onKQogICAgICAgIHsKICAgICAgICAgIHByaW50ZigiVW5leHBlY3RlZCBDTkFNRSAlcyAodmVyXzIpXG4iLCBjbmFtZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogIGVsc2UKICAgIHsKICAgICAgcHJpbnRmKCJVbmV4cGVjdGVkIENOQU1FICVzICh2ZXI/KVxuIiwgY25hbWUpOwogICAgICByZXR1cm47CiAgICB9CgogIGlmICh2ZXJfMSkKICAgIHsKICAgICAgY2NvZGVfQTJbMF0gPSB0b2xvd2VyKGNuYW1lWzJdKTsKICAgICAgY2NvZGVfQTJbMV0gPSB0b2xvd2VyKGNuYW1lWzNdKTsKICAgICAgY2NvZGVfQTJbMl0gPSAnXDAnOwogICAgfQogIGVsc2UKICAgIGNjb2RlX0EyWzBdID0gJ1wwJzsKCiAgY251bWJlciA9IGlwICYgMHhGRkZGOwoKICBUUkFDRSgoIkZvdW5kIGNvdW50cnktY29kZSBgJXMnLCBudW1iZXIgJWRcbiIsCiAgICAgICAgIHZlcl8xID8gY2NvZGVfQTIgOiAiPG4vYT4iLCBjbnVtYmVyKSk7CgogIGNvdW50cnkgPSBsaXN0X2xvb2t1cChjbnVtYmVyLCBjb3VudHJ5X2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjb3VudHJ5X2xpc3QpIC8gc2l6ZW9mKGNvdW50cnlfbGlzdFswXSkpOwogIGlmICghY291bnRyeSkKICAgIHByaW50ZigiTmFtZSBmb3IgY291bnRyeS1udW1iZXIgJWQgbm90IGZvdW5kLlxuIiwgY251bWJlcik7CiAgZWxzZQogICAgewogICAgICBpZiAodmVyXzEgJiYgKih1bnNpZ25lZCBzaG9ydCopJmNvdW50cnktPnNob3J0X25hbWUgIT0gKih1bnNpZ25lZCopJmNjb2RlX0EyKQogICAgICAgIHByaW50Zigic2hvcnQtbmFtZSBtaXNtYXRjaDsgJXMgdnMgJXNcbiIsIGNvdW50cnktPnNob3J0X25hbWUsIGNjb2RlX0EyKTsKCiAgICAgIHByaW50ZigiJXMgKCVzKSwgbnVtYmVyICVkLlxuIiwKICAgICAgICAgICAgIGNvdW50cnktPmxvbmdfbmFtZSwgY291bnRyeS0+c2hvcnRfbmFtZSwgY251bWJlcik7CiAgICB9CiAgZnJlZShjY29weSk7Cn0KCg==