Lyogb2JqLWV2YXguYyAtIEVWQVggKG9wZW5WTVMvQWxwaGEpIG9iamVjdCBmaWxlIGZvcm1hdC4KICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICBDb250cmlidXRlZCBieSBLbGF1cyBL5G1wZiAoa2thZW1wZkBwcm9naXMuZGUpIG9mCiAgICAgcHJvR0lTIFNvZnR3YXJlLCBBYWNoZW4sIEdlcm1hbnkuCgogICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQVMsIHRoZSBHTlUgQXNzZW1ibGVyCgogICBHQVMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCiAgIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgR0FTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgIGFsb25nIHdpdGggR0FTOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCiAgIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCgojZGVmaW5lIE9CSl9IRUFERVIgIm9iai1ldmF4LmgiCgojaW5jbHVkZSAiYXMuaCIKCnN0YXRpYyB2b2lkIHNfZXZheF93ZWFrIFBBUkFNUyAoKGludCkpOwoKY29uc3QgcHNldWRvX3R5cGVTIG9ial9wc2V1ZG9fdGFibGVbXSA9CnsKICB7ICJ3ZWFrIiwgc19ldmF4X3dlYWssIDB9LAogIHswLCAwLCAwfSwKfTsJCQkJLyogb2JqX3BzZXVkb190YWJsZSAqLwoKdm9pZCBvYmpfcmVhZF9iZWdpbl9ob29rICgpIHt9CgovKiBIYW5kbGUgdGhlIHdlYWsgc3BlY2lmaWMgcHNldWRvLW9wLiAgKi8KCnN0YXRpYyB2b2lkCnNfZXZheF93ZWFrIChpZ25vcmUpCiAgICAgaW50IGlnbm9yZTsKewogIGNoYXIgKm5hbWU7CiAgaW50IGM7CiAgc3ltYm9sUyAqc3ltYm9sUDsKICBjaGFyICpzdG9wID0gTlVMTDsKICBjaGFyIHN0b3BjOwoKICBpZiAoZmxhZ19tcmkpCiAgICBzdG9wID0gbXJpX2NvbW1lbnRfZmllbGQgKCZzdG9wYyk7CgogIGRvCiAgICB7CiAgICAgIG5hbWUgPSBpbnB1dF9saW5lX3BvaW50ZXI7CiAgICAgIGMgPSBnZXRfc3ltYm9sX2VuZCAoKTsKICAgICAgc3ltYm9sUCA9IHN5bWJvbF9maW5kX29yX21ha2UgKG5hbWUpOwogICAgICAqaW5wdXRfbGluZV9wb2ludGVyID0gYzsKICAgICAgU0tJUF9XSElURVNQQUNFICgpOwogICAgICBTX1NFVF9XRUFLIChzeW1ib2xQKTsKICAgICAgaWYgKGMgPT0gJywnKQoJewoJICBpbnB1dF9saW5lX3BvaW50ZXIrKzsKCSAgU0tJUF9XSElURVNQQUNFICgpOwoJICBpZiAoKmlucHV0X2xpbmVfcG9pbnRlciA9PSAnXG4nKQoJICAgIGMgPSAnXG4nOwoJfQogICAgfQogIHdoaWxlIChjID09ICcsJyk7CgogIGlmIChmbGFnX21yaSkKICAgIG1yaV9jb21tZW50X2VuZCAoc3RvcCwgc3RvcGMpOwoKICBkZW1hbmRfZW1wdHlfcmVzdF9vZl9saW5lICgpOwp9CgovKgogKiBMb2NhbCBWYXJpYWJsZXM6CiAqIGNvbW1lbnQtY29sdW1uOiAwCiAqIGZpbGwtY29sdW1uOiAxMzEKICogRW5kOgogKi8KCi8qIGVuZCBvZiBvYmotZXZheC5jICovCg==