Sindbad~EG File Manager

Current Path : /var/www/web3/g2data/cache/repository/released/modules/
Upload File :
Current File : /var/www/web3/g2data/cache/repository/released/modules/remote-1.0.9-16041-base.package

<?php
function unpack_8c681c5566($outputDir) {
/* Create directory structure. */
@mkdir($outputDir . 'classes');
@mkdir($outputDir . 'locale');
@mkdir($outputDir . 'po');
@mkdir($outputDir . 'templates');
/* Recreate individual files. */
expand_8c681c5566($outputDir, 'GalleryRemote.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgpHYWxsZXJ5Q29yZUFwaTo6cmVxdWlyZU9uY2UoJ21vZHVsZXMvcmVtb3RlL2NsYXNzZXMvR2FsbGVyeVJlbW90ZVByb3BlcnRpZXMuY2xhc3MnKTsKR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL3JlbW90ZS9jbGFzc2VzL0dhbGxlcnlSZW1vdGVDb25zdGFudHMuY2xhc3MnKTsKCi8qKgogKiBUaGlzIGNvbnRyb2xsZXIgZmllbGRzIHJlcXVlc3RzIGZyb20gR2FsbGVyeSBSZW1vdGUgYW5kIHBlcmZvcm1zIGFueSByZXF1aXJlZCBjaGFuZ2VzCiAqIHRvIHRoZSBkYXRhIG1vZGVsLgogKiBAcGFja2FnZSBSZW1vdGUKICogQGF1dGhvciBQaWVycmUtTHVjIFBhb3VyIDxwYW91ckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMTU1MTMgJAogKi8KY2xhc3MgR2FsbGVyeVJlbW90ZUNvbnRyb2xsZXIgZXh0ZW5kcyBHYWxsZXJ5Q29udHJvbGxlciB7CiAgICAvKioKICAgICAqIEl0ZW1BZGRPcHRpb24gaW5zdGFuY2VzIHRvIHVzZSB3aGVuIGhhbmRsaW5nIHRoaXMgcmVxdWVzdC4gIE9ubHkgdXNlZCBieSB0ZXN0IGNvZGUuCiAgICAgKiBAdmFyIGFycmF5IChvcHRpb25JZCA9PiBvYmplY3QgSXRlbUFkZE9wdGlvbikgJF9vcHRpb25JbnN0YW5jZXMKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICB2YXIgJF9vcHRpb25JbnN0YW5jZXM7CgogICAgLyoqCiAgICAgKiBUZXN0cyBjYW4gdXNlIHRoaXMgbWV0aG9kIHRvIGhhcmR3aXJlIGEgc3BlY2lmaWMgc2V0IG9mIG9wdGlvbiBpbnN0YW5jZXMgdG8gdXNlLgogICAgICogVGhpcyBhdm9pZHMgc2l0dWF0aW9ucyB3aGVyZSBzb21lIG9mIHRoZSBvcHRpb24gaW5zdGFuY2VzIHdpbGwgZG8gdW5wcmVkaWN0YWJsZQogICAgICogdGhpbmdzIGFuZCBkZXJhaWwgdGhlIHRlc3RzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9uSW5zdGFuY2VzIChvcHRpb25JZCA9PiBJdGVtQWRkT3B0aW9uLCAuLi4pCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE9wdGlvbkluc3RhbmNlcygkb3B0aW9uSW5zdGFuY2VzKSB7CgkkdGhpcy0+X29wdGlvbkluc3RhbmNlcyA9ICRvcHRpb25JbnN0YW5jZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlDb250cm9sbGVyOjppc0FsbG93ZWRJbkVtYmVkT25seQogICAgICovCiAgICBmdW5jdGlvbiBpc0FsbG93ZWRJbkVtYmVkT25seSgpIHsKCXJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Q29udHJvbGxlcjo6b21pdEF1dGhUb2tlbkNoZWNrCiAgICAgKi8KICAgIGZ1bmN0aW9uIG9taXRBdXRoVG9rZW5DaGVjaygpIHsKCXJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Q29udHJvbGxlcjo6aGFuZGxlUmVxdWVzdAogICAgICovCiAgICBmdW5jdGlvbiBoYW5kbGVSZXF1ZXN0KCRmb3JtKSB7CglnbG9iYWwgJGdhbGxlcnk7Cgkkc2Vzc2lvbiA9JiAkZ2FsbGVyeS0+Z2V0U2Vzc2lvbigpOwoKCSRzdGFydCA9IGFycmF5X3N1bShleHBsb2RlKCcgJywgbWljcm90aW1lKCkpKTsKCgkkc3RhdHVzID0gJGVycm9yID0gYXJyYXkoKTsKCSRyZXNwb25zZSA9IG5ldyBHYWxsZXJ5UmVtb3RlUHJvcGVydGllcygpOwoJJGdyU3RhdHVzQ29kZXMgPSBHYWxsZXJ5UmVtb3RlQ29uc3RhbnRzOjpnZXRTdGF0dXNDb2RlcygpOwoKCWlmICghZW1wdHkoJGZvcm1bJ2NtZCddKSkgewoJICAgIC8qIFJlcXVlc3QgZm9yZ2VyeSBjaGVjazogT25seSBhbGxvdyB3aGl0ZWxpc3RlZCwgdmlldy1saWtlIG9wZXJhdGlvbnMgKi8KCSAgICAkZ2FsbGVyeS0+ZGVidWcoJ0dSIENvbW1hbmQ6ICcgLiAkZm9ybVsnY21kJ10pOwoJICAgIHN3aXRjaCAoJGZvcm1bJ2NtZCddKSB7CgkgICAgY2FzZSAnbG9naW4nOgoJICAgIGNhc2UgJ2ZldGNoLWFsYnVtcyc6CgkgICAgY2FzZSAnZmV0Y2gtYWxidW1zLXBydW5lJzoKCSAgICBjYXNlICdmZXRjaC1hbGJ1bS1pbWFnZXMnOgoJICAgIGNhc2UgJ2FsYnVtLXByb3BlcnRpZXMnOgoJICAgIGNhc2UgJ2ltYWdlLXByb3BlcnRpZXMnOgoJICAgIGNhc2UgJ25vLW9wJzoKCQkkZ2FsbGVyeS0+ZGVidWcoJ05vIENTUkYgY2hlY2snKTsKCQlicmVhazsKCSAgICBkZWZhdWx0OgoJCS8qIEJhY2t3YXJkcy1jb21wYXRpYmxlIHJlcXVlc3QtZm9yZ2VyeSBwcm90ZWN0aW9uIGJhc2VkIG9uIHRoZSB1c2VyLWFnZW50IHN0cmluZyAqLwoJCSRodHRwVXNlckFnZW50ID0gR2FsbGVyeVV0aWxpdGllczo6Z2V0U2VydmVyVmFyKCdIVFRQX1VTRVJfQUdFTlQnKTsKCQlpZiAoc3Ryc3RyKCRodHRwVXNlckFnZW50LCAnR2FsbGVyeSBSZW1vdGUnKSA9PT0gZmFsc2UKCQkJJiYgc3Ryc3RyKCRodHRwVXNlckFnZW50LCAnUlBULUhUVFBDbGllbnQnKSA9PT0gZmFsc2UKCQkJJiYgc3Ryc3RyKCRodHRwVXNlckFnZW50LCAnaVBob3RvVG9HYWxsZXJ5JykgPT09IGZhbHNlKSB7CgkJICAgIC8qIE5ld2VyIEdhbGxlcnlSZW1vdGUgdmVyc2lvbnMgaGFuZGxlIGF1dGggdG9rZW5zICovCgkJICAgICRyZXQgPSBHYWxsZXJ5Q29udHJvbGxlcjo6YXNzZXJ0SXNHZW51aW5lUmVxdWVzdCgpOwoJCSAgICBpZiAoJHJldCkgewoJCQkkZ2FsbGVyeS0+ZGVidWcoJ1VucmVjb2duaXplZCBVc2VyIEFnZW50OiAnICAuICRodHRwVXNlckFnZW50KTsKCQkJcmV0dXJuIGFycmF5KEdhbGxlcnlDb3JlQXBpOjplcnJvcihFUlJPUl9SRVFVRVNUX0ZPUkdFRCksIG51bGwpOwoJCSAgICB9CgkJfQoJICAgIH0KCgkgICAgc3dpdGNoICgkZm9ybVsnY21kJ10pIHsKCSAgICBjYXNlICdsb2dpbic6CgkJJHJldCA9ICR0aGlzLT5sb2dpbigkZm9ybSwgJHJlc3BvbnNlKTsKCQlpZiAoJHJldCkgewoJCSAgICAkc3RhdHVzWydjb250cm9sbGVyRXJyb3InXSA9ICRyZXQ7CgkJfQoJCWJyZWFrOwoKCSAgICBjYXNlICdmZXRjaC1hbGJ1bXMnOgoJCSRyZXQgPSAkdGhpcy0+ZmV0Y2hBbGJ1bXMoZmFsc2UsICRmb3JtLCAkcmVzcG9uc2UpOwoJCWlmICgkcmV0KSB7CgkJICAgICRzdGF0dXNbJ2NvbnRyb2xsZXJFcnJvciddID0gJHJldDsKCQl9CgkJYnJlYWs7CgoJICAgIGNhc2UgJ2ZldGNoLWFsYnVtcy1wcnVuZSc6CgkJJHJldCA9ICR0aGlzLT5mZXRjaEFsYnVtcyh0cnVlLCAkZm9ybSwgJHJlc3BvbnNlKTsKCQlpZiAoJHJldCkgewoJCSAgICAkc3RhdHVzWydjb250cm9sbGVyRXJyb3InXSA9ICRyZXQ7CgkJfQoJCWJyZWFrOwoKCSAgICBjYXNlICdhZGQtaXRlbSc6CgkJJHJldCA9ICR0aGlzLT5hZGREYXRhSXRlbSgkZm9ybSwgJHJlc3BvbnNlKTsKCQlpZiAoJHJldCkgewoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXMnLCAkZ3JTdGF0dXNDb2Rlc1snVVBMT0FEX1BIT1RPX0ZBSUwnXSk7CgkJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1c190ZXh0JywKCQkJc3ByaW50ZigiVXBsb2FkIGZhaWxlZDogJyVzJy4iLCAkcmV0LT5nZXRFcnJvck1lc3NhZ2UoKSkpOwoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfZGVidWcnLCBwcmludF9yKCRyZXQsIGZhbHNlKSk7CgkJICAgIHByaW50X3IoJHJldCk7CgkJfQoJCWJyZWFrOwoKCSAgICBjYXNlICduZXctYWxidW0nOgoJCSRyZXQgPSAkdGhpcy0+bmV3QWxidW0oJGZvcm0sICRyZXNwb25zZSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgJHN0YXR1c1snY29udHJvbGxlckVycm9yJ10gPSAkcmV0OwoJCX0KCQlicmVhazsKCgkgICAgY2FzZSAnZmV0Y2gtYWxidW0taW1hZ2VzJzoKCQkkcmV0ID0gJHRoaXMtPmZldGNoQWxidW1JbWFnZXMoJGZvcm0sICRyZXNwb25zZSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgJHN0YXR1c1snY29udHJvbGxlckVycm9yJ10gPSAkcmV0OwoJCX0KCQlicmVhazsKCgkgICAgY2FzZSAnYWxidW0tcHJvcGVydGllcyc6CgkJJHJldCA9ICR0aGlzLT5hbGJ1bVByb3BlcnRpZXMoJGZvcm0sICRyZXNwb25zZSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgJHN0YXR1c1snY29udHJvbGxlckVycm9yJ10gPSAkcmV0OwoJCX0KCQlicmVhazsKCgkgICAgY2FzZSAnaW5jcmVtZW50LXZpZXctY291bnQnOgoJCSRyZXQgPSAkdGhpcy0+aW5jcmVtZW50Vmlld0NvdW50KCRmb3JtLCAkcmVzcG9uc2UpOwoJCWlmICgkcmV0KSB7CgkJICAgICRzdGF0dXNbJ2NvbnRyb2xsZXJFcnJvciddID0gJHJldDsKCQl9CgkJYnJlYWs7CgoJICAgIGNhc2UgJ2ltYWdlLXByb3BlcnRpZXMnOgoJCSRyZXQgPSAkdGhpcy0+aW1hZ2VQcm9wZXJ0aWVzKCRmb3JtLCAkcmVzcG9uc2UpOwoJCWlmICgkcmV0KSB7CgkJICAgICRzdGF0dXNbJ2NvbnRyb2xsZXJFcnJvciddID0gJHJldDsKCQl9CgkJYnJlYWs7CgoJICAgIGNhc2UgJ25vLW9wJzoKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXMnLCAkZ3JTdGF0dXNDb2Rlc1snU1VDQ0VTUyddKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICdOby1vcCBzdWNjZXNzZnVsJyk7CgkJYnJlYWs7CgoJICAgIGRlZmF1bHQ6CgkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzJywgJGdyU3RhdHVzQ29kZXNbJ1VOS05PV05fQ09NTUFORCddKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICJDb21tYW5kICcke2Zvcm1bJ2NtZCddfScgdW5rbm93bi4iKTsKCQlicmVhazsKCSAgICB9Cgl9IGVsc2UgewoJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1cycsICRnclN0YXR1c0NvZGVzWydVTktOT1dOX0NPTU1BTkQnXSk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzX3RleHQnLCAnTm8gY21kIHBhc3NlZCcpOwoJfQoKCSR1c2VyID0gJGdhbGxlcnktPmdldEFjdGl2ZVVzZXIoKTsKCWlmIChpc3NldCgkdXNlcikpIHsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdkZWJ1Z191c2VyJywgJHVzZXItPmdldHVzZXJOYW1lKCkpOwoJfSBlbHNlIHsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdkZWJ1Z191c2VyJywgJ2Vycm9yIGdldHRpbmcgdXNlcicpOwoJfQoKCSRlbmQgPSBhcnJheV9zdW0oZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKSk7CgkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdkZWJ1Z190aW1lJywgcm91bmQoJGVuZCAtICRzdGFydCwgMykuJ3MnKTsKCWlmICghZW1wdHkoJHN0YXR1c1snY29udHJvbGxlckVycm9yJ10pKSB7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnZGVidWdfZXhjZXB0aW9uJywKCQkJCSAgICRzdGF0dXNbJ2NvbnRyb2xsZXJFcnJvciddLT5nZXRFcnJvck1lc3NhZ2UoKSk7Cgl9CgoJaWYgKCRzZXNzaW9uLT5pc1BlcnNpc3RlbnQoKSkgewoJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2F1dGhfdG9rZW4nLCAkc2Vzc2lvbi0+Z2V0QXV0aFRva2VuKCkpOwoJfQoKCSRzdGF0dXNbJ2NvbnRyb2xsZXJSZXNwb25zZSddID0gJHJlc3BvbnNlOwoKCSRyZXN1bHRzWydkZWxlZ2F0ZSddWyd2aWV3J10gPSAncmVtb3RlLkdhbGxlcnlSZW1vdGUnOwoJJHJlc3VsdHNbJ3N0YXR1cyddID0gJHN0YXR1czsKCSRyZXN1bHRzWydlcnJvciddID0gJGVycm9yOwoJcmV0dXJuIGFycmF5KG51bGwsICRyZXN1bHRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIExvZyBpbnRvIEdhbGxlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZvcm0ga2V5L3ZhbHVlIHBhaXJzIGZyb20gR2FsbGVyeSBSZW1vdGUKICAgICAqIEBwYXJhbSBvYmplY3QgR2FsbGVyeVJlbW90ZVByb3BlcnRpZXMgJHJlc3BvbnNlIGEgcmVmZXJlbmNlIHRvIG91ciByZXNwb25zZSBvYmplY3QKICAgICAqIEByZXR1cm4gb2JqZWN0IEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICovCiAgICBmdW5jdGlvbiBsb2dpbigkZm9ybSwgJiRyZXNwb25zZSkgewoJZ2xvYmFsICRnYWxsZXJ5OwoKCSRnclN0YXR1c0NvZGVzID0gR2FsbGVyeVJlbW90ZUNvbnN0YW50czo6Z2V0U3RhdHVzQ29kZXMoKTsKCSRnclZlcnNpb25Db2RlcyA9IEdhbGxlcnlSZW1vdGVDb25zdGFudHM6OmdldFZlcnNpb25Db2RlcygpOwoKCS8qIElmIHRoZXkgZG9uJ3QgcHJvdmlkZSBhIHVzZXJuYW1lLCB0cnkgdGhlIGFub255bW91cyB1c2VyICovCglpZiAoIWVtcHR5KCRmb3JtWyd1bmFtZSddKSkgewoJICAgIGxpc3QgKCRyZXQsICR1c2VyKSA9IEdhbGxlcnlDb3JlQXBpOjpmZXRjaFVzZXJCeVVzZXJuYW1lKCRmb3JtWyd1bmFtZSddKTsKCSAgICBpZiAoJHJldCAmJiAhKCRyZXQtPmdldEVycm9yQ29kZSgpICYgRVJST1JfTUlTU0lOR19PQkpFQ1QpKSB7CgkJcmV0dXJuICRyZXQ7CgkgICAgfQoKCSAgICBsaXN0ICgkcmV0LCAkaXNEaXNhYmxlZCkgPSBHYWxsZXJ5Q29yZUFwaTo6aXNEaXNhYmxlZFVzZXJuYW1lKCRmb3JtWyd1bmFtZSddKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0OwoJICAgIH0KCSAgICAkcGFzc3dvcmQgPSBpc3NldCgkZm9ybVsncGFzc3dvcmQnXSkKCQk/IEdhbGxlcnlVdGlsaXRpZXM6Omh0bWxFbnRpdHlEZWNvZGUoJGZvcm1bJ3Bhc3N3b3JkJ10pIDogJyc7CgkgICAgaWYgKCEkaXNEaXNhYmxlZCAmJiAkdXNlciAhPSBudWxsICYmICR1c2VyLT5pc0NvcnJlY3RQYXNzd29yZCgkcGFzc3dvcmQpKSB7CgkJLyogbG9naW4gc3VjY2Vzc2Z1bCAqLwoJCSRnYWxsZXJ5LT5zZXRBY3RpdmVVc2VyKCR1c2VyKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzZXJ2ZXJfdmVyc2lvbicsCgkJICAgIHNwcmludGYoJyVkLiVkJywgJGdyVmVyc2lvbkNvZGVzWydNQUonXSwgJGdyVmVyc2lvbkNvZGVzWydNSU4nXSkpOwoKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdkZWJ1Z19jb3JlX3ZlcnNpb24nLAoJCSAgICBpbXBsb2RlKCcsJywgR2FsbGVyeUNvcmVBcGk6OmdldEFwaVZlcnNpb24oKSkpOwoKCQlsaXN0ICgkcmV0LCAkdmVyc2lvbikgPQoJCSAgICBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAncmVtb3RlJywgJ192ZXJzaW9uJyk7CgkJLyogZG9uJ3QgZmFpbCBvbiBlcnJvciAqLwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2RlYnVnX21vZHVsZV92ZXJzaW9uJywgJHZlcnNpb24pOwoKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXMnLCAkZ3JTdGF0dXNDb2Rlc1snU1VDQ0VTUyddKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICdMb2dpbiBzdWNjZXNzZnVsLicpOwoKCQkkZXZlbnQgPSBHYWxsZXJ5Q29yZUFwaTo6bmV3RXZlbnQoJ0dhbGxlcnk6OkxvZ2luJyk7CgkJJGV2ZW50LT5zZXRFbnRpdHkoJHVzZXIpOwoJCWxpc3QgKCRyZXQsICRpZ25vcmVkKSA9IEdhbGxlcnlDb3JlQXBpOjpwb3N0RXZlbnQoJGV2ZW50KTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldDsKCQl9CgoJCXJldHVybiBudWxsOwoJICAgIH0gZWxzZSB7CgkJLyogbG9naW4gdW5zdWNjZXNzZnVsICovCgkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzJywgJGdyU3RhdHVzQ29kZXNbJ1BBU1NXT1JEX1dST05HJ10pOwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1c190ZXh0JywgJ1Bhc3N3b3JkIGluY29ycmVjdC4nKTsKCgkJJGV2ZW50ID0gR2FsbGVyeUNvcmVBcGk6Om5ld0V2ZW50KCdHYWxsZXJ5OjpGYWlsZWRMb2dpbicpOwoJCSRldmVudC0+c2V0RGF0YShhcnJheSgndXNlck5hbWUnID0+ICRmb3JtWyd1bmFtZSddKSk7CgkJbGlzdCAoJHJldCwgJGlnbm9yZWQpID0gR2FsbGVyeUNvcmVBcGk6OnBvc3RFdmVudCgkZXZlbnQpOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiAkcmV0OwoJCX0KCgkJcmV0dXJuIG51bGw7CgkgICAgfQoJfSBlbHNlIHsKCSAgICBpZiAoJGdhbGxlcnktPmdldEFjdGl2ZVVzZXIoKSkgewoJCS8qIGFscmVhZHkgbG9nZ2VkIGluLi4uIHRoaXMgc291bmRzIGxpa2UgdGhlIGFwcGxldCBsb2dnaW5nIGluIHdpdGggYSBjb29raWUgKi8KCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzZXJ2ZXJfdmVyc2lvbicsCgkJICAgIHNwcmludGYoJyVkLiVkJywgJGdyVmVyc2lvbkNvZGVzWydNQUonXSwgJGdyVmVyc2lvbkNvZGVzWydNSU4nXSkpOwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1cycsICRnclN0YXR1c0NvZGVzWydMT0dJTl9NSVNTSU5HJ10pOwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1c190ZXh0JywgJ0xvZ2luIHBhcmFtZXRlcnMgbm90IGZvdW5kLicpOwoJCXJldHVybiBudWxsOwoJICAgIH0gZWxzZSB7CgkJLyogVGhleSdyZSBsb2dnZWQgaW4gYXMgdGhlIGd1ZXN0IGFjY291bnQgKi8KCQlsaXN0ICgkcmV0LCAkYW5vbnltb3VzVXNlcklkKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRBbm9ueW1vdXNVc2VySWQoKTsKCQlpZiAoJHJldCkgewoJCSAgICByZXR1cm4gJHJldDsKCQl9CgoJCWxpc3QgKCRyZXQsICRhbm9ueW1vdXNVc2VyKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCRhbm9ueW1vdXNVc2VySWQpOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiAkcmV0OwoJCX0KCgkJJGdhbGxlcnktPnNldEFjdGl2ZVVzZXIoJGFub255bW91c1VzZXIpOwoKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdkZWJ1Z19hbm9ueW1vdXNfbG9naW4nLCB0cnVlKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzZXJ2ZXJfdmVyc2lvbicsCgkJICAgIHNwcmludGYoJyVkLiVkJywgJGdyVmVyc2lvbkNvZGVzWydNQUonXSwgJGdyVmVyc2lvbkNvZGVzWydNSU4nXSkpOwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1cycsICRnclN0YXR1c0NvZGVzWydTVUNDRVNTJ10pOwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1c190ZXh0JywgJ0xvZ2luIHN1Y2Nlc3NmdWwuJyk7CgkJcmV0dXJuIG51bGw7CgkgICAgfQoJfQogICAgfQoKICAgIC8qKgogICAgICogTG9hZCB0aGUgYWxidW0gbGlzdCBpbnRvIG91ciByZXNwb25zZSBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkcHJ1bmUgcHJ1bmUgYWxidW1zIHdoZXJlIHVzZXIgY2FuJ3QgdXBsb2FkIHRvIG9yIGNyZWF0ZSBzdWItYWxidW1zCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZvcm0ga2V5L3ZhbHVlIHBhaXJzIGZyb20gR2FsbGVyeSBSZW1vdGUKICAgICAqIEBwYXJhbSBvYmplY3QgR2FsbGVyeVJlbW90ZVByb3BlcnRpZXMgJHJlc3BvbnNlIGEgcmVmZXJlbmNlIHRvIG91ciByZXNwb25zZSBvYmplY3QKICAgICAqIEByZXR1cm4gb2JqZWN0IEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICovCiAgICBmdW5jdGlvbiBmZXRjaEFsYnVtcygkcHJ1bmUsICRmb3JtLCAmJHJlc3BvbnNlKSB7CglnbG9iYWwgJGdhbGxlcnk7CgoJJHN0YXJ0ID0gYXJyYXlfc3VtKGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSkpOwoJJGZldGNoUGVybWlzc2lvbnMgPSBlbXB0eSgkZm9ybVsnbm9fcGVybXMnXSk7CgoJJGdyU3RhdHVzQ29kZXMgPSBHYWxsZXJ5UmVtb3RlQ29uc3RhbnRzOjpnZXRTdGF0dXNDb2RlcygpOwoKCWxpc3QgKCRyZXQsICRyb290SWQpID0gR2FsbGVyeUNvcmVBcGk6OmdldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ2NvcmUnLCAnaWQucm9vdEFsYnVtJyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCWlmICgkcHJ1bmUpIHsKCSAgICAvKiBmaW5kIGFuZCBsb2FkIHRoZSBsaXN0IG9mIGFsYnVtcyB3ZSBjYW4gYWRkIGl0ZW1zIHRvICovCgkgICAgbGlzdCAoJHJldCwgJGFsYnVtSWRzMSkgPQoJCUdhbGxlcnlDb3JlQXBpOjpmZXRjaEFsbEl0ZW1JZHMoJ0dhbGxlcnlBbGJ1bUl0ZW0nLCAnY29yZS5hZGREYXRhSXRlbScpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQ7CgkgICAgfQoKCSAgICAvKiBmaW5kIGFuZCBsb2FkIHRoZSBsaXN0IG9mIGFsYnVtcyB3ZSBjYW4gYWRkIGFsYnVtcyB0byAqLwoJICAgIGxpc3QgKCRyZXQsICRhbGJ1bUlkczIpID0KCQlHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBbGxJdGVtSWRzKCdHYWxsZXJ5QWxidW1JdGVtJywgJ2NvcmUuYWRkQWxidW1JdGVtJyk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9CgoJICAgICRhbGJ1bUlkcyA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgkYWxidW1JZHMxLCAkYWxidW1JZHMyKSk7Cgl9IGVsc2UgewoJICAgIC8qIGZpbmQgYW5kIGxvYWQgYWxsIGFsYnVtcyB0aGF0IGNhbiBiZSB2aWV3ZWQgKi8KCSAgICBsaXN0ICgkcmV0LCAkYWxidW1JZHMpID0gR2FsbGVyeUNvcmVBcGk6OmZldGNoQWxsSXRlbUlkcygnR2FsbGVyeUFsYnVtSXRlbScpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQ7CgkgICAgfQoJfQoKCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2RlYnVnX3RpbWVfYWxidW1pZHMnLAoJCQkgICAgICAgcm91bmQoYXJyYXlfc3VtKGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSkpIC0gJHN0YXJ0LCAzKSAuICdzJyk7CgoJaWYgKGVtcHR5KCRhbGJ1bUlkcykpIHsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXMnLCAkZ3JTdGF0dXNDb2Rlc1snU1VDQ0VTUyddKTsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bV9jb3VudCcsIDApOwoJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1c190ZXh0JywgJ05vIHZpZXdhYmxlIGFsYnVtcy4nKTsKCSAgICByZXR1cm4gbnVsbDsKCX0KCgkvKiBMb2FkIGFsbCB0aGUgZW50aXRpZXMgKi8KCWxpc3QgKCRyZXQsICRhbGJ1bXMpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRFbnRpdGllc0J5SWQoJGFsYnVtSWRzKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnZGVidWdfdGltZV9lbnRpdGllcycsCgkJCSAgICAgICByb3VuZChhcnJheV9zdW0oZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKSkgLSAkc3RhcnQsIDMpIC4gJ3MnKTsKCglpZiAoJHBydW5lKSB7CgkgICAgLyogUmVjdXJzaXZlbHkgbG9hZCBwYXJlbnRzICovCgkgICAgbGlzdCAoJHJldCwgJGFsYnVtcywgJGFsYnVtSWRzKSA9CgkJJHRoaXMtPmxvYWRQYXJlbnRzVG9Sb290KCRyb290SWQsICRhbGJ1bUlkcywgJGFsYnVtcywgJGFsYnVtcyk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9Cgl9CgoJaWYgKCRmZXRjaFBlcm1pc3Npb25zKSB7CgkgICAgLyogTG9hZCB0aGUgcGVybWlzc2lvbnMgZm9yIGFsbCB0aG9zZSBhbGJ1bXMgKi8KCSAgICBsaXN0ICgkcmV0LCAkcGVybWlzc2lvbnNUYWJsZSkgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hQZXJtaXNzaW9uc0Zvckl0ZW1zKCRhbGJ1bUlkcyk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9Cgl9CgoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnZGVidWdfdGltZV9wZXJtaXNzaW9ucycsCgkJCSAgICAgICByb3VuZChhcnJheV9zdW0oZXhwbG9kZSgnICcsIG1pY3JvdGltZSgpKSkgLSAkc3RhcnQsIDMpIC4gJ3MnKTsKCgkvKiBOb3cgYWRkIGFsbCB0aGUgYWxidW1zIHRvIHRoZSB0cmVlICovCgkkaSA9IDE7Cglmb3JlYWNoICgkYWxidW1zIGFzICRhbGJ1bSkgewoJICAgIC8qIFVzZSBpZCBiZWNhdXNlIHBhdGggY29tcG9uZW50IGlzIG5vdCB1bmlxdWUgKi8KCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bS5uYW1lLicgLiAkaSwgJGFsYnVtLT5nZXRJZCgpKTsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bS50aXRsZS4nIC4gJGksICRhbGJ1bS0+Z2V0VGl0bGUoKSk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnYWxidW0uc3VtbWFyeS4nIC4gJGksICRhbGJ1bS0+Z2V0U3VtbWFyeSgpKTsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bS5wYXJlbnQuJyAuICRpLCAkYWxidW0tPmdldFBhcmVudElkKCkpOwoKCSAgICBpZiAoJGZldGNoUGVybWlzc2lvbnMpIHsKCQkkcGVybXMgPSAkcGVybWlzc2lvbnNUYWJsZVskYWxidW0tPmdldElkKCldOwoKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bS5wZXJtcy5hZGQuJyAuICRpLAoJCQkJICAgICAgIGlzc2V0KCRwZXJtc1snY29yZS5hZGREYXRhSXRlbSddKSA/ICd0cnVlJyA6ICdmYWxzZScpOwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2FsYnVtLnBlcm1zLndyaXRlLicgLiAkaSwKCQkJCSAgICAgICBpc3NldCgkcGVybXNbJ2NvcmUuZWRpdCddKSA/ICd0cnVlJyA6ICdmYWxzZScpOwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2FsYnVtLnBlcm1zLmRlbF9hbGIuJyAuICRpLAoJCQkJICAgICAgIGlzc2V0KCRwZXJtc1snY29yZS5kZWxldGUnXSkgPyAndHJ1ZScgOiAnZmFsc2UnKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bS5wZXJtcy5jcmVhdGVfc3ViLicgLiAkaSwKCQkJCSAgICAgICBpc3NldCgkcGVybXNbJ2NvcmUuYWRkQWxidW1JdGVtJ10pID8gJ3RydWUnIDogJ2ZhbHNlJyk7CgkgICAgfQoKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bS5pbmZvLmV4dHJhZmllbGRzLicgLiAkaSwgIlN1bW1hcnksRGVzY3JpcHRpb24iKTsKCgkgICAgJGkrKzsKCX0KCgkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdkZWJ1Z190aW1lX2dlbmVyYXRlJywKCQkJICAgICAgIHJvdW5kKGFycmF5X3N1bShleHBsb2RlKCcgJywgbWljcm90aW1lKCkpKSAtICRzdGFydCwgMykgLiAncycpOwoKCSRwZXJtID0gR2FsbGVyeUNvcmVBcGk6Omhhc0l0ZW1QZXJtaXNzaW9uKCRyb290SWQsICdjb3JlLmFkZEFsYnVtSXRlbScpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCgkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdjYW5fY3JlYXRlX3Jvb3QnLCAoJHBlcm0gfHwgJGlzU2l0ZUFkbWluKSA/ICd0cnVlJyA6ICdmYWxzZScpOwoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnYWxidW1fY291bnQnLCBzaXplb2YoJGFsYnVtcykpOwoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzJywgJGdyU3RhdHVzQ29kZXNbJ1NVQ0NFU1MnXSk7CgkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICdGZXRjaC1hbGJ1bXMgc3VjY2Vzc2Z1bC4nKTsKCglyZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkUGFyZW50c1RvUm9vdCgkcm9vdElkLCAkYWxidW1JZHMsICRhbGJ1bXNMb2FkZWQsICRhbGJ1bXNUb0xvYWQpIHsKCSRwYXJlbnRJZHMgPSBhcnJheSgpOwoJZm9yZWFjaCAoJGFsYnVtc1RvTG9hZCBhcyAkYWxidW0pIHsKCSAgICAkcGFyZW50SWQgPSAkYWxidW0tPmdldFBhcmVudElkKCk7CgkgICAgaWYgKCRwYXJlbnRJZCAmJiAhaW5fYXJyYXkoJHBhcmVudElkLCAkYWxidW1JZHMpKSB7CgkJJHBhcmVudElkc1tdID0gJHBhcmVudElkOwoJCSRhbGJ1bUlkc1tdID0gJHBhcmVudElkOwoJICAgIH0KCX0KCglpZiAoIWVtcHR5KCRwYXJlbnRJZHMpKSB7CgkgICAgLyogbG9hZCBhbGwgdGhlIG5ldyBwYXJlbnRzIGF0IG9uY2UgKi8KCSAgICBsaXN0ICgkcmV0LCAkcGFyZW50cykgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZEVudGl0aWVzQnlJZCgkcGFyZW50SWRzKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiBhcnJheSgkcmV0LCBudWxsLCBudWxsKTsKCSAgICB9CgoJICAgICRhbGJ1bXNMb2FkZWQgPSBhcnJheV9tZXJnZSgkYWxidW1zTG9hZGVkLCAkcGFyZW50cyk7CgoJICAgIC8qIGFuZCByZWN1cnNlICovCgkgICAgbGlzdCAoJHJldCwgJGFsYnVtc0xvYWRlZCwgJGFsYnVtSWRzKSA9CgkJJHRoaXMtPmxvYWRQYXJlbnRzVG9Sb290KCRyb290SWQsICRhbGJ1bUlkcywgJGFsYnVtc0xvYWRlZCwgJHBhcmVudHMpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuIGFycmF5KCRyZXQsIG51bGwsIG51bGwpOwoJICAgIH0KCX0KCXJldHVybiBhcnJheShudWxsLCAkYWxidW1zTG9hZGVkLCAkYWxidW1JZHMpOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGEgZGF0YSBpdGVtIHRvIEdhbGxlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZvcm0ga2V5L3ZhbHVlIHBhaXJzIGZyb20gR2FsbGVyeSBSZW1vdGUKICAgICAqIEBwYXJhbSBvYmplY3QgR2FsbGVyeVJlbW90ZVByb3BlcnRpZXMgJHJlc3BvbnNlIGEgcmVmZXJlbmNlIHRvIG91ciByZXNwb25zZSBvYmplY3QKICAgICAqIEByZXR1cm4gb2JqZWN0IEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICovCiAgICBmdW5jdGlvbiBhZGREYXRhSXRlbSgkZm9ybSwgJiRyZXNwb25zZSkgewoJZ2xvYmFsICRnYWxsZXJ5OwoKCSRnclN0YXR1c0NvZGVzID0gR2FsbGVyeVJlbW90ZUNvbnN0YW50czo6Z2V0U3RhdHVzQ29kZXMoKTsKCgkkZmlsZSA9IEdhbGxlcnlVdGlsaXRpZXM6OmdldEZpbGUoJ3VzZXJmaWxlJyk7CgoJaWYgKCFlbXB0eSgkZm9ybVsnc2V0X2FsYnVtSWQnXSkpIHsKCSAgICBsaXN0ICgkcmV0LCAkcGFyZW50SXRlbSkgPSBHYWxsZXJ5Q29yZUFwaTo6bG9hZEVudGl0aWVzQnlJZCgkZm9ybVsnc2V0X2FsYnVtSWQnXSk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9CgkgICAgJHBhcmVudElkID0gJHBhcmVudEl0ZW0tPmdldElkKCk7CgkgICAgdW5zZXQoJHBhcmVudEl0ZW0pOwoJfSBlbHNlIGlmICghZW1wdHkoJGZvcm1bJ3NldF9hbGJ1bVBhdGgnXSkpIHsKCSAgICBsaXN0ICgkcmV0LCAkcGFyZW50SWQpID0KCQlHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hJdGVtSWRCeVBhdGgodXJsZGVjb2RlKCRmb3JtWydzZXRfYWxidW1OYW1lJ10pKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0OwoJICAgIH0KCX0gZWxzZSBpZiAoIWVtcHR5KCRmb3JtWydzZXRfYWxidW1OYW1lJ10pKSB7CgkgICAgLyogdG9kbzogZGVsZXRlIHRoaXMgRzEvZWFybHkgRzIgdGhyb3diYWNrICovCgkgICAgJHBhcmVudElkID0gJGZvcm1bJ3NldF9hbGJ1bU5hbWUnXTsKCX0gZWxzZSB7CgkgICAgcmV0dXJuIEdhbGxlcnlDb3JlQXBpOjplcnJvcihFUlJPUl9NSVNTSU5HX09CSkVDVCk7Cgl9CgoJLyogTWFrZSBzdXJlIHdlIGhhdmUgcGVybWlzc2lvbiBkbyBlZGl0IHRoaXMgaXRlbSAqLwoJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphc3NlcnRIYXNJdGVtUGVybWlzc2lvbigkcGFyZW50SWQsICdjb3JlLmFkZERhdGFJdGVtJyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCWxpc3QgKCRyZXQsICRsb2NrSWRzW10pID0gR2FsbGVyeUNvcmVBcGk6OmFjcXVpcmVSZWFkTG9jaygkcGFyZW50SWQpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCglpZiAoZW1wdHkoJGZpbGVbJ25hbWUnXSkpIHsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXMnLCAkZ3JTdGF0dXNDb2Rlc1snTk9fRklMRU5BTUUnXSk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzX3RleHQnLCAnRmlsZW5hbWUgbm90IHNwZWNpZmllZC4nKTsKCSAgICByZXR1cm4gbnVsbDsKCX0KCgkvKiBHZXQgdGhlIG1pbWUgdHlwZSBmcm9tIHRoZSB1cGxvYWQgaW5mby4gKi8KCSRtaW1lVHlwZSA9ICRmaWxlWyd0eXBlJ107CgoJLyoKCSAqIElmIHdlIGRvbid0IGdldCB1c2VmdWwgZGF0YSBmcm9tIHRoYXQgb3IgaXRzIGEgdHlwZSB3ZSBkb24ndAoJICogcmVjb2duaXplLCB0YWtlIGEgc3dpbmcgYXQgaXQgdXNpbmcgdGhlIGZpbGUgbmFtZS4KCSAqLwoJLyogTm90ZSwgaWYgJHJldCBpcyBpbiBlcnJvciwgdGhlbiAkbWltZUV4dGVuc2lvbnMgaXMgZW1wdHkgYW55d2F5ICovCglsaXN0ICgkcmV0LCAkbWltZUV4dGVuc2lvbnMpID0gR2FsbGVyeUNvcmVBcGk6OmNvbnZlcnRNaW1lVG9FeHRlbnNpb25zKCRtaW1lVHlwZSk7CglpZiAoJG1pbWVUeXBlID09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIHx8CgkgICAgJG1pbWVUeXBlID09ICdhcHBsaWNhdGlvbi91bmtub3duJyB8fAoJICAgIGVtcHR5KCRtaW1lRXh0ZW5zaW9ucykpIHsKCSAgICAkZXh0ZW5zaW9uID0gR2FsbGVyeVV0aWxpdGllczo6Z2V0RmlsZUV4dGVuc2lvbigkZmlsZVsnbmFtZSddKTsKCSAgICBsaXN0ICgkcmV0LCAkbWltZVR5cGUpID0gR2FsbGVyeUNvcmVBcGk6OmNvbnZlcnRFeHRlbnNpb25Ub01pbWUoJGV4dGVuc2lvbik7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9Cgl9CgoJaWYgKGlzc2V0KCRmb3JtWydmb3JjZV9maWxlbmFtZSddKSkgewoJICAgICRpdGVtTmFtZSA9ICRmb3JtWydmb3JjZV9maWxlbmFtZSddOwoJfSBlbHNlIHsKCSAgICAkaXRlbU5hbWUgPSAkZmlsZVsnbmFtZSddOwoJfQoKCWxpc3QgKCRyZXQsICRtYXJrdXApID0KCSAgICBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAnY29yZScsICdtaXNjLm1hcmt1cCcpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCWlmICgkbWFya3VwID09ICdodG1sJykgewoJICAgIC8qIFN0cmlwIG1hbGljaW91cyBjb250ZW50IGlmIGh0bWwgbWFya3VwIGFsbG93ZWQgKi8KCSAgICBpZiAoaXNzZXQoJGZvcm1bJ2NhcHRpb24nXSkpIHsKCQkkZm9ybVsnY2FwdGlvbiddID0gR2FsbGVyeVV0aWxpdGllczo6aHRtbFNhZmUoJGZvcm1bJ2NhcHRpb24nXSwgdHJ1ZSk7CgkgICAgfQoJICAgIGlmIChpc3NldCgkZm9ybVsnZXh0cmFmaWVsZC5TdW1tYXJ5J10pKSB7CgkJJGZvcm1bJ2V4dHJhZmllbGQuU3VtbWFyeSddID0KCQkgICAgR2FsbGVyeVV0aWxpdGllczo6aHRtbFNhZmUoJGZvcm1bJ2V4dHJhZmllbGQuU3VtbWFyeSddLCB0cnVlKTsKCSAgICB9CgkgICAgaWYgKGlzc2V0KCRmb3JtWydleHRyYWZpZWxkLkRlc2NyaXB0aW9uJ10pKSB7CgkJJGZvcm1bJ2V4dHJhZmllbGQuRGVzY3JpcHRpb24nXSA9CgkJICAgIEdhbGxlcnlVdGlsaXRpZXM6Omh0bWxTYWZlKCRmb3JtWydleHRyYWZpZWxkLkRlc2NyaXB0aW9uJ10sIHRydWUpOwoJICAgIH0KCX0KCgkkdGl0bGUgPSBpc3NldCgkZm9ybVsnY2FwdGlvbiddKT8kZm9ybVsnY2FwdGlvbiddOk5VTEw7Cgkkc3VtbWFyeSA9IGlzc2V0KCRmb3JtWydleHRyYWZpZWxkLlN1bW1hcnknXSk/JGZvcm1bJ2V4dHJhZmllbGQuU3VtbWFyeSddOk5VTEw7CgkkZGVzY3JpcHRpb24gPSBpc3NldCgkZm9ybVsnZXh0cmFmaWVsZC5EZXNjcmlwdGlvbiddKT8kZm9ybVsnZXh0cmFmaWVsZC5EZXNjcmlwdGlvbiddOk5VTEw7CgoJLyoKCSAqIERvbid0IHVzZSB1cGxvYWRlZCBmaWxlcywgYmVjYXVzZSB0aGUgZnJhbWV3b3JrIGNhbm5vdCBzYWZlbHkgY29weSB0aGVtLgoJICogTW92ZSBpdCB0byBvdXIgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmaXJzdC4KCSAqLwoJJHBsYXRmb3JtID0mICRnYWxsZXJ5LT5nZXRQbGF0Zm9ybSgpOwoJaWYgKCRwbGF0Zm9ybS0+aXNfdXBsb2FkZWRfZmlsZSgkZmlsZVsndG1wX25hbWUnXSkpIHsKCSAgICAkdG1wRmlsZSA9ICRwbGF0Zm9ybS0+bW92ZV91cGxvYWRlZF9maWxlKCRmaWxlWyd0bXBfbmFtZSddKTsKCSAgICBpZiAoISR0bXBGaWxlKSB7CgkJcmV0dXJuIEdhbGxlcnlDb3JlQXBpOjplcnJvcihFUlJPUl9QTEFURk9STV9GQUlMVVJFKTsKCSAgICB9CgkgICAgJG5lZWRUb0RlbGV0ZVRtcEZpbGUgPSB0cnVlOwoJfSBlbHNlIHsKCSAgICAkdG1wRmlsZSA9ICRmaWxlWyd0bXBfbmFtZSddOwoJICAgICRuZWVkVG9EZWxldGVUbXBGaWxlID0gZmFsc2U7Cgl9CgoJbGlzdCAoJHJldCwgJG5ld0l0ZW0pID0gR2FsbGVyeUNvcmVBcGk6OmFkZEl0ZW1Ub0FsYnVtKAoJICAgICR0bXBGaWxlLCBiYXNlbmFtZSgkaXRlbU5hbWUpLCAkdGl0bGUsCgkgICAgJHN1bW1hcnksICRkZXNjcmlwdGlvbiwgJG1pbWVUeXBlLCAkcGFyZW50SWQpOwoKCS8qIEdldCByaWQgb2YgdGhlIHRtcCBmaWxlIGlmIG5lY2Vzc2FyeSAqLwoJaWYgKCRuZWVkVG9EZWxldGVUbXBGaWxlKSB7CgkgICAgQCRwbGF0Zm9ybS0+dW5saW5rKCR0bXBGaWxlKTsKCX0KCglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCSRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6cmVsZWFzZUxvY2tzKCRsb2NrSWRzKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgoJaWYgKGlzc2V0KCR0aGlzLT5fb3B0aW9uSW5zdGFuY2VzKSkgewoJICAgICRvcHRpb25JbnN0YW5jZXMgPSAkdGhpcy0+X29wdGlvbkluc3RhbmNlczsKCX0gZWxzZSB7CgkgICAgR2FsbGVyeUNvcmVBcGk6OnJlcXVpcmVPbmNlKCdtb2R1bGVzL2NvcmUvSXRlbUFkZC5pbmMnKTsKCSAgICBsaXN0ICgkcmV0LCAkb3B0aW9uSW5zdGFuY2VzKSA9IEl0ZW1BZGRPcHRpb246OmdldEFsbEFkZE9wdGlvbnMoKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0OwoJICAgIH0KCX0KCgkvKiBBbGxvdyBJdGVtQWRkT3B0aW9ucyB0byBwcm9jZXNzIGFkZGVkIGl0ZW0ocykgKi8KCWZvcmVhY2ggKCRvcHRpb25JbnN0YW5jZXMgYXMgJG9wdGlvbikgewoJICAgIGxpc3QgKCRyZXQsICRvcHRpb25FcnJvcnMsICRvcHRpb25XYXJuaW5ncykgPQoJCSRvcHRpb24tPmhhbmRsZVJlcXVlc3RBZnRlckFkZCgkZm9ybSwgYXJyYXkoJG5ld0l0ZW0pKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0OwoJICAgIH0KCgkgICAgLyoKCSAgICAgKiBTd2FsbG93IG9wdGlvbiB3YXJuaW5ncyBhbmQgZXJyb3JzIGZvciBub3cuCgkgICAgICoKCSAgICAgKiBUT0RPOiBSZXBvcnQgd2FybmluZ3MgYW5kIGVycm9ycyBiYWNrIHRvIEdhbGxlcnkgUmVtb3RlLiAgSWYgdGhlIHVwbG9hZCBpcyBkZW5pZWQKCSAgICAgKiBiZWNhdXNlIG9mIHF1b3RhIGxpbWl0YXRpb25zLCB0aGVuIHdlJ2xsIGdldCBhbiBlcnJvciB0aGF0IHdlIHNob3VsZCByZXBvcnQgYmFjay4KCSAgICAgKi8KCX0KCgkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXMnLCAkZ3JTdGF0dXNDb2Rlc1snU1VDQ0VTUyddKTsKCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1c190ZXh0JywgJ0FkZCBwaG90byBzdWNjZXNzZnVsLicpOwoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaXRlbV9uYW1lJywgJG5ld0l0ZW0tPmdldElkKCkpOwoKCXJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGFsYnVtCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRmb3JtIGtleS92YWx1ZSBwYWlycyBmcm9tIEdhbGxlcnkgUmVtb3RlCiAgICAgKiBAcGFyYW0gb2JqZWN0IEdhbGxlcnlSZW1vdGVQcm9wZXJ0aWVzICRyZXNwb25zZSBhIHJlZmVyZW5jZSB0byBvdXIgcmVzcG9uc2Ugb2JqZWN0CiAgICAgKiBAcmV0dXJuIG9iamVjdCBHYWxsZXJ5U3RhdHVzIGEgc3RhdHVzIGNvZGUKICAgICAqLwogICAgZnVuY3Rpb24gbmV3QWxidW0oJGZvcm0sICYkcmVzcG9uc2UpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCgkkZ3JTdGF0dXNDb2RlcyA9IEdhbGxlcnlSZW1vdGVDb25zdGFudHM6OmdldFN0YXR1c0NvZGVzKCk7CgoJJGl0ZW1JZCA9ICRmb3JtWydzZXRfYWxidW1OYW1lJ107CSAgLyogVE9ETzogRWxpbWluYXRlIHRoaXMgdGhyb3diYWNrIHRvIEcxICovCgoJLyogTWFrZSBzdXJlIHdlIGhhdmUgcGVybWlzc2lvbiBkbyBlZGl0IHRoaXMgaXRlbSAqLwoJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphc3NlcnRIYXNJdGVtUGVybWlzc2lvbigkaXRlbUlkLCAnY29yZS5hZGRBbGJ1bUl0ZW0nKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgoJLyogVXNlIGEgc3VpdGFibGUgZGVmYXVsdCBmb3IgdGhlIGFsYnVtIG5hbWUgaWYgbm9uZSBpcyBnaXZlbiAqLwoJaWYgKCFpc3NldCgkZm9ybVsnbmV3QWxidW1OYW1lJ10pIHx8ICcnID09ICRmb3JtWyduZXdBbGJ1bU5hbWUnXSkgewoJICAgICRmb3JtWyduZXdBbGJ1bU5hbWUnXSA9ICdhbGJ1bSc7Cgl9CgoJLyogQ3JlYXRlIHRoZSBhbGJ1bSAqLwoJbGlzdCAoJHJldCwgJGFsYnVtKSA9IEdhbGxlcnlDb3JlQXBpOjpjcmVhdGVBbGJ1bSgkaXRlbUlkLCAkZm9ybVsnbmV3QWxidW1OYW1lJ10sCgkJCQkJCQkgICRmb3JtWyduZXdBbGJ1bVRpdGxlJ10sIG51bGwsCgkJCQkJCQkgICRmb3JtWyduZXdBbGJ1bURlc2MnXSwgbnVsbCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCS8qIEdpdmUgdGhlIGNyZWF0b3IgYWxsIHBlcm1pc3Npb25zIG9uIHRoZSBuZXcgYWxidW0gKi8KCS8qIHRvZG86IGRvIHdlIG5lZWQgdG8gbG9jayBzaW5jZSB3ZSBqdXN0IGNyZWF0ZWQgdGhlIGFsYnVtPyAqLwoJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjphZGRVc2VyUGVybWlzc2lvbigkYWxidW0tPmdldElkKCksCgkJCQkJCSAkYWxidW0tPmdldE93bmVySWQoKSwKCQkJCQkJICdjb3JlLmFsbCcsCgkJCQkJCSBmYWxzZSk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2FsYnVtX25hbWUnLCAkYWxidW0tPmdldGlkKCkpOwoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzJywgJGdyU3RhdHVzQ29kZXNbJ1NVQ0NFU1MnXSk7CgkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICdOZXctYWxidW0gc3VjY2Vzc2Z1bC4nKTsKCglyZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEZldGNoIGFsYnVtIGltYWdlcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkZm9ybSBrZXkvdmFsdWUgcGFpcnMgZnJvbSBHYWxsZXJ5IFJlbW90ZQogICAgICogQHBhcmFtIG9iamVjdCBHYWxsZXJ5UmVtb3RlUHJvcGVydGllcyAkcmVzcG9uc2UgYSByZWZlcmVuY2UgdG8gb3VyIHJlc3BvbnNlIG9iamVjdAogICAgICogQHJldHVybiBvYmplY3QgR2FsbGVyeVN0YXR1cyBhIHN0YXR1cyBjb2RlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZldGNoQWxidW1JbWFnZXMoJGZvcm0sICYkcmVzcG9uc2UpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCgkkZ3JTdGF0dXNDb2RlcyA9IEdhbGxlcnlSZW1vdGVDb25zdGFudHM6OmdldFN0YXR1c0NvZGVzKCk7CgoJJGFsYnVtc1RvbyA9IGlzc2V0KCRmb3JtWydhbGJ1bXNfdG9vJ10pICYmICRmb3JtWydhbGJ1bXNfdG9vJ10gPT0gJ3llcyc7CgoJbGlzdCAoJHJldCwgJHJvb3RJZCkgPQoJCUdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2lkLnJvb3RBbGJ1bScpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCglpZiAoaXNzZXQoJGZvcm1bJ3NldF9hbGJ1bU5hbWUnXSkpIHsKCSAgICAvKiBsaXN0IGFuIGFjdHVhbCBhbGJ1bSAqLwoJICAgICRhbGJ1bUlkID0gJGZvcm1bJ3NldF9hbGJ1bU5hbWUnXTsKCX0gZWxzZSB7CgkgICAgLyogbGlzdCB0aGUgcm9vdCBhbGJ1bSAqLwoJICAgICRhbGJ1bUlkID0gJHJvb3RJZDsKCX0KCgkvKiBjaGVjayB0aGF0IHRoZSBpdGVtIGlzIGFuIGFsYnVtICovCglsaXN0ICgkcmV0LCAkYWxidW0pID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRFbnRpdGllc0J5SWQoJGFsYnVtSWQpOwoJaWYgKCRyZXQpIHsKCSAgICBpZiAoJHJldC0+Z2V0RXJyb3JDb2RlKCkgJiBFUlJPUl9NSVNTSU5HX09CSkVDVCA9PSBFUlJPUl9NSVNTSU5HX09CSkVDVCkgewoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1cycsICRnclN0YXR1c0NvZGVzWydFUlJPUiddKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICdhbGJ1bU5hbWUgaXMgbm90IGEgdmFsaWQgRzIgb2JqZWN0IElEJyk7CgkJcmV0dXJuIG51bGw7CgkgICAgfSBlbHNlIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9Cgl9CglpZiAoIUdhbGxlcnlVdGlsaXRpZXM6OmlzQSgkYWxidW0sICdHYWxsZXJ5QWxidW1JdGVtJykpIHsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXMnLCAkZ3JTdGF0dXNDb2Rlc1snRVJST1InXSk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzX3RleHQnLAoJCQkJICAgJ2FsYnVtTmFtZSBkb2VzblwndCBjb3JyZXNwb25kIHRvIGFuIGFjdHVhbCBhbGJ1bScpOwoJICAgIHJldHVybiBudWxsOwoJfQoJCgkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bS5jYXB0aW9uJywgJGFsYnVtLT5nZXRUaXRsZSgpKTsKCglpZiAoaXNzZXQoJGZvcm1bJ3JhbmRvbSddKSAmJiAkZm9ybVsncmFuZG9tJ10gPT0gJ3llcycgJiYgaXNzZXQoJGZvcm1bJ2xpbWl0J10pKSB7CgkgICAgLyogZ2V0IHJhbmRvbSBkZXNjZW5kYW50cyAob25seSBHYWxsZXJ5UGhvdG9JdGVtcykgb2YgdGhlIGFsYnVtICovCgkgICAgbGlzdCAoJHJldCwgJGFjbElkcykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBY2Nlc3NMaXN0SWRzKCdjb3JlLnZpZXcnLAoJCSAgICAkZ2FsbGVyeS0+Z2V0QWN0aXZlVXNlcklkKCkpOwoJICAgIGlmIChlbXB0eSgkYWNsSWRzKSkgewoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1cycsICRnclN0YXR1c0NvZGVzWydFUlJPUiddKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICdDYW5cJ3QgZ2V0IEFDTHMgZm9yIHRoZSBjdXJyZW50IHVzZXIuJyk7CgkJcmV0dXJuIG51bGw7CgkgICAgfQoJICAgICRhY2xNYXJrZXJzID0gR2FsbGVyeVV0aWxpdGllczo6bWFrZU1hcmtlcnMoY291bnQoJGFjbElkcykpOwoKCSAgICAvKiBzZXQgcGFyZW50IHNlcXVlbmNlICovCgkgICAgaWYgKCRhbGJ1bUlkID09ICRyb290SWQpIHsKCQkkcGFyZW50U2VxdWVuY2UgPSAnJzsKCSAgICB9IGVsc2UgewoJCWxpc3QgKCRyZXQsICRwYXJlbnRTZXF1ZW5jZSkgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hQYXJlbnRTZXF1ZW5jZSgkYWxidW1JZCk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQ7CgkJfQoKCQkkcGFyZW50U2VxdWVuY2VbXSA9ICRhbGJ1bUlkOwoJCSRwYXJlbnRTZXF1ZW5jZSA9IGltcGxvZGUoJy8nLCAkcGFyZW50U2VxdWVuY2UpOwoJICAgIH0KCgkgICAgLyogZ2V0IHRoZSByYW5kb20gZnVuY3Rpb24gZm9yIHRoZSBEQiAqLwoJICAgICRzdG9yYWdlID0mICRnYWxsZXJ5LT5nZXRTdG9yYWdlKCk7CgkgICAgbGlzdCAoJHJldCwgJG9yZGVyQnkpID0gJHN0b3JhZ2UtPmdldEZ1bmN0aW9uU3FsKCdSQU5EJywgYXJyYXkoKSk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9CgoJICAgICRxdWVyeSA9ICcKCQlTRUxFQ1QKCQkgIFtHYWxsZXJ5RGF0YUl0ZW06OmlkXQoJCUZST00KCQkgIFtHYWxsZXJ5RGF0YUl0ZW1dLCBbR2FsbGVyeUl0ZW1BdHRyaWJ1dGVzTWFwXSwKCQkgIFtHYWxsZXJ5QWNjZXNzU3Vic2NyaWJlck1hcF0KCQlXSEVSRQoJCSAgW0dhbGxlcnlEYXRhSXRlbTo6aWRdID0gW0dhbGxlcnlJdGVtQXR0cmlidXRlc01hcDo6aXRlbUlkXSc7CgoJICAgIGlmICghZW1wdHkoJHBhcmVudFNlcXVlbmNlKSkgewoJCSRxdWVyeSAuPSAiCgkJICBBTkQKCQkgIFtHYWxsZXJ5SXRlbUF0dHJpYnV0ZXNNYXA6OnBhcmVudFNlcXVlbmNlXSBMSUtFICckcGFyZW50U2VxdWVuY2UvJSciOwoJICAgIH0KCgkgICAgJHF1ZXJ5IC49ICIKCQkgIEFORAoJCSAgW0dhbGxlcnlEYXRhSXRlbTo6aWRdID0gW0dhbGxlcnlBY2Nlc3NTdWJzY3JpYmVyTWFwOjppdGVtSWRdCgkJICBBTkQKCQkgIFtHYWxsZXJ5QWNjZXNzU3Vic2NyaWJlck1hcDo6YWNjZXNzTGlzdElkXSBJTiAoJGFjbE1hcmtlcnMpCgkJT1JERVIgQlkKCQkgICRvcmRlckJ5CgkJIjsKCgkgICAgJGRhdGEgPSAkYWNsSWRzOwoKCSAgICAkcGFyYW1zID0gYXJyYXkoKTsKCSAgICAkcGFyYW1zWydsaW1pdCddID0gYXJyYXkoJ2NvdW50JyA9PiAkZm9ybVsnbGltaXQnXSk7CgoJICAgIGxpc3QgKCRyZXQsICRzZWFyY2hSZXN1bHRzKSA9ICRnYWxsZXJ5LT5zZWFyY2goJHF1ZXJ5LCAkZGF0YSwgJHBhcmFtcyk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9CgoJICAgICRpZHMgPSBhcnJheSgpOwoJICAgIHdoaWxlICgkcmVzdWx0ID0gJHNlYXJjaFJlc3VsdHMtPm5leHRSZXN1bHQoKSkgewoJCSRpZHNbXSA9ICRyZXN1bHRbMF07CgkgICAgfQoJfSBlbHNlIHsKCSAgICAvKiBnZXQgY2hpbGRyZW4gb2YgdGhlIGFsYnVtICovCgkgICAgbGlzdCAoJHJldCwgJGlkcykgPQoJCSAgICBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hDaGlsZEl0ZW1JZHNXaXRoUGVybWlzc2lvbigkYWxidW1JZCwgJ2NvcmUudmlldycpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQ7CgkgICAgfQoJfQoKCWlmIChlbXB0eSgkaWRzKSkgewoJICAgIC8qIG5vdGhpbmcgaW4gdGhpcyBhbGJ1bSAqLwoJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlX2NvdW50JywgMCk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzJywgJGdyU3RhdHVzQ29kZXNbJ1NVQ0NFU1MnXSk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgKCQknc3RhdHVzX3RleHQnLCAnRmV0Y2gtYWxidW0taW1hZ2VzIHN1Y2Nlc3NmdWwsIGJ1dCBubyBpdGVtcyBmb3VuZC4nKTsKCSAgICByZXR1cm4gbnVsbDsKCX0KCglsaXN0ICgkcmV0LCAkaXRlbXMpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRFbnRpdGllc0J5SWQoJGlkcyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCS8qIExvYWQgdGhlIGRlcml2YXRpdmVzIGZvciBhbGwgdGhvc2UgaXRlbXMgKi8KCWxpc3QgKCRyZXQsICRkZXJpdmF0aXZlcykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hEZXJpdmF0aXZlc0J5SXRlbUlkcygkaWRzKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgoJLyogUHJlY2FjaGUgaXRlbSBwZXJtaXNzaW9ucyAqLwoJJHJldCA9IEdhbGxlcnlDb3JlQXBpOjpzdHVkeVBlcm1pc3Npb25zKCRpZHMpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCgkkaSA9IDE7Cglmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKCSAgICBpZiAoR2FsbGVyeVV0aWxpdGllczo6aXNBKCRpdGVtLCAnR2FsbGVyeVBob3RvSXRlbScpKSB7CgkJbGlzdCAoJHJldCwgJHBlcm1pc3Npb25zKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQZXJtaXNzaW9ucygkaXRlbS0+Z2V0SWQoKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQ7CgkJfQoJCWlmIChpc3NldCgkcGVybWlzc2lvbnNbJ2NvcmUudmlld1NvdXJjZSddKSkgewoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5uYW1lLicgLiAkaSwgJGl0ZW0tPmdldElkKCkpOwoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5yYXdfd2lkdGguJyAuICRpLCAkaXRlbS0+Z2V0V2lkdGgoKSk7CgkJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLnJhd19oZWlnaHQuJyAuICRpLCAkaXRlbS0+Z2V0SGVpZ2h0KCkpOwoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5yYXdfZmlsZXNpemUuJyAuICRpLCAkaXRlbS0+Z2V0U2l6ZSgpKTsKCQl9IGVsc2UgaWYgKCFpc3NldCgkcGVybWlzc2lvbnNbJ2NvcmUudmlld1Jlc2l6ZXMnXSkpIHsKCQkgICAgY29udGludWU7CgkJfQoKCQkkdGh1bWIgPSBudWxsOwoJCSRyZXNpemVzID0gYXJyYXkoKTsKCQlpZiAoaXNzZXQoJGRlcml2YXRpdmVzWyRpdGVtLT5nZXRJZCgpXSkpIHsKCQkgICAgZm9yZWFjaCAoJGRlcml2YXRpdmVzWyRpdGVtLT5nZXRJZCgpXSBhcyAkaW5kZXggPT4gJGRlcikgewoJCQlpZiAoJGRlci0+Z2V0RGVyaXZhdGl2ZVR5cGUoKSA9PSBERVJJVkFUSVZFX1RZUEVfSU1BR0VfVEhVTUJOQUlMKSB7CgkJCSAgICAkdGh1bWIgPSAkZGVyOwoJCQl9IGVsc2UgaWYgKCRkZXItPmdldERlcml2YXRpdmVUeXBlKCkgPT0gREVSSVZBVElWRV9UWVBFX0lNQUdFX1BSRUZFUlJFRCAmJgoJCQkJICAgaXNzZXQoJHBlcm1pc3Npb25zWydjb3JlLnZpZXdTb3VyY2UnXSkpIHsKCQkJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLm5hbWUuJyAuICRpLCAkZGVyLT5nZXRJZCgpKTsKCQkJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLnJhd193aWR0aC4nIC4gJGksICRkZXItPmdldFdpZHRoKCkpOwoJCQkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmF3X2hlaWdodC4nIC4gJGksICRkZXItPmdldEhlaWdodCgpKTsKCQkJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLnJhd19maWxlc2l6ZS4nIC4gJGksCgkJCQkJCSAgICRkZXItPmdldERlcml2YXRpdmVTaXplKCkpOwoJCQl9IGVsc2UgaWYgKCRkZXItPmdldERlcml2YXRpdmVUeXBlKCkgPT0gREVSSVZBVElWRV9UWVBFX0lNQUdFX1JFU0laRSAmJgoJCQkJICAgaXNzZXQoJHBlcm1pc3Npb25zWydjb3JlLnZpZXdSZXNpemVzJ10pKSB7CgkJCSAgICAkcmVzaXplc1skaW5kZXhdID0gJGRlci0+Z2V0V2lkdGgoKSAqICRkZXItPmdldEhlaWdodCgpOwoJCQl9CgkJICAgIH0KCQkgICAgYXJzb3J0KCRyZXNpemVzKTsKCQkgICAgJHJlc2l6ZXMgPSBhcnJheV9rZXlzKCRyZXNpemVzKTsKCQl9CgkJaWYgKCEkcmVzcG9uc2UtPmhhc1Byb3BlcnR5KCdpbWFnZS5uYW1lLicgLiAkaSkpIHsKCQkgICAgaWYgKGVtcHR5KCRyZXNpemVzKSkgewoJCQkvKiBObyBwZXJtaXNzaW9uIG9uIGZ1bGwgc2l6ZSBhbmQgbm8gcmVzaXplcyBmb3VuZCAqLwoJCQljb250aW51ZTsKCQkgICAgfQoJCSAgICAkZGVyID0gJGRlcml2YXRpdmVzWyRpdGVtLT5nZXRJZCgpXVthcnJheV9zaGlmdCgkcmVzaXplcyldOwoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5uYW1lLicgLiAkaSwgJGRlci0+Z2V0SWQoKSk7CgkJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLnJhd193aWR0aC4nIC4gJGksICRkZXItPmdldFdpZHRoKCkpOwoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5yYXdfaGVpZ2h0LicgLiAkaSwgJGRlci0+Z2V0SGVpZ2h0KCkpOwoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5yYXdfZmlsZXNpemUuJyAuICRpLCAkZGVyLT5nZXREZXJpdmF0aXZlU2l6ZSgpKTsKCQl9CgkJaWYgKCFlbXB0eSgkcmVzaXplcykpIHsKCQkgICAgJGRlciA9ICRkZXJpdmF0aXZlc1skaXRlbS0+Z2V0SWQoKV1bYXJyYXlfc2hpZnQoJHJlc2l6ZXMpXTsKCQkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmVzaXplZE5hbWUuJyAuICRpLCAkZGVyLT5nZXRJZCgpKTsKCQkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmVzaXplZF93aWR0aC4nIC4gJGksICRkZXItPmdldFdpZHRoKCkpOwoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5yZXNpemVkX2hlaWdodC4nIC4gJGksICRkZXItPmdldEhlaWdodCgpKTsKCQl9CgkJaWYgKGlzc2V0KCR0aHVtYikpIHsKCQkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UudGh1bWJOYW1lLicgLiAkaSwgJHRodW1iLT5nZXRJZCgpKTsKCQkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UudGh1bWJfd2lkdGguJyAuICRpLCAkdGh1bWItPmdldFdpZHRoKCkpOwoJCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS50aHVtYl9oZWlnaHQuJyAuICRpLCAkdGh1bWItPmdldEhlaWdodCgpKTsKCQl9CgoJCWxpc3QgKCRyZXQsICRleHRlbnNpb25zKSA9CgkJICAgIEdhbGxlcnlDb3JlQXBpOjpjb252ZXJ0TWltZVRvRXh0ZW5zaW9ucygkaXRlbS0+Z2V0TWltZVR5cGUoKSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQ7CgkJfQoJCWlmIChpc3NldCgkZXh0ZW5zaW9ucykgJiYgaXNzZXQoJGV4dGVuc2lvbnNbMF0pKSB7CgkJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLmZvcmNlRXh0ZW5zaW9uLicgLiAkaSwgJGV4dGVuc2lvbnNbMF0pOwoJCX0KCgkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UuY2FwdGlvbi4nIC4gJGksICRpdGVtLT5nZXRUaXRsZSgpKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS50aXRsZS4nIC4gJGksICRpdGVtLT5nZXRQYXRoQ29tcG9uZW50KCkpOwoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLmhpZGRlbi4nIC4gJGksICdubycpOwoKCQkkaSsrOwoJICAgIH0gZWxzZSBpZiAoR2FsbGVyeVV0aWxpdGllczo6aXNBKCRpdGVtLCAnR2FsbGVyeUFsYnVtSXRlbScpICYmICRhbGJ1bXNUb28pIHsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdhbGJ1bS5uYW1lLicgLiAkaSwgJGl0ZW0tPmdldElkKCkpOwoKCQkkaSsrOwoJICAgIH0KCX0KCgkkdXJsR2VuZXJhdG9yID0mICRnYWxsZXJ5LT5nZXRVcmxHZW5lcmF0b3IoKTsKCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2Jhc2V1cmwnLCBzdHJfcmVwbGFjZSgnJmFtcDsnLCAnJicsCgkgICAgR2FsbGVyeVVybEdlbmVyYXRvcjo6YXBwZW5kUGFyYW1zVG9VcmwoCgkJJHVybEdlbmVyYXRvci0+Z2V0Q3VycmVudFVybERpcih0cnVlKSAuIEdBTExFUllfTUFJTl9QSFAsCgkJYXJyYXkoJ3ZpZXcnID0+ICdjb3JlLkRvd25sb2FkSXRlbScsICdpdGVtSWQnID0+ICcnKSkpKTsKCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlX2NvdW50JywgJGkgLSAxKTsKCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1cycsICRnclN0YXR1c0NvZGVzWydTVUNDRVNTJ10pOwoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzX3RleHQnLCAnRmV0Y2gtYWxidW0taW1hZ2VzIHN1Y2Nlc3NmdWwuJyk7CgoJcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBBbGJ1bSBwcm9wZXJ0aWVzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRmb3JtIGtleS92YWx1ZSBwYWlycyBmcm9tIEdhbGxlcnkgUmVtb3RlCiAgICAgKiBAcGFyYW0gb2JqZWN0IEdhbGxlcnlSZW1vdGVQcm9wZXJ0aWVzICRyZXNwb25zZSBhIHJlZmVyZW5jZSB0byBvdXIgcmVzcG9uc2Ugb2JqZWN0CiAgICAgKiBAcmV0dXJuIG9iamVjdCBHYWxsZXJ5U3RhdHVzIGEgc3RhdHVzIGNvZGUKICAgICAqLwogICAgZnVuY3Rpb24gYWxidW1Qcm9wZXJ0aWVzKCRmb3JtLCAmJHJlc3BvbnNlKSB7CglnbG9iYWwgJGdhbGxlcnk7CgoJLyoKCSAqIEdSIG5vdyBvbmx5IHN1cHBvcnRzIDEtZGltZW5zaW9uIHNpemUgY29uc3RyYWludHMuIEl0IHVzZWQgdG8gc3VwcG9ydCAyLWQKCSAqIGJ1dCBzaW5jZSBHMSBzdXBwb3J0ZWQgMS1kLCBJIHNpbXBsaWZpZWQgR1IgYSB3aGlsZSBhZ28sIHNvIG5vdyB3ZSBoYXZlCgkgKiB0byBjaGVhdCBhIGJpdCBhbmQgc2VsZWN0IHRoZSBsYXJnZXN0IG9mIHdpZHRoIGFuZCBoZWlnaHQgdG8gcmV0dXJuIHRvIEdSCgkgKi8KCgkkZ3JTdGF0dXNDb2RlcyA9IEdhbGxlcnlSZW1vdGVDb25zdGFudHM6OmdldFN0YXR1c0NvZGVzKCk7CgoJaWYgKGlzc2V0KCRmb3JtWydzZXRfYWxidW1OYW1lJ10pKSB7CgkgICAgLyogbGlzdCBhbiBhY3R1YWwgYWxidW0gKi8KCSAgICAkYWxidW1JZCA9ICRmb3JtWydzZXRfYWxidW1OYW1lJ107Cgl9IGVsc2UgewoJICAgIC8qIGxpc3QgdGhlIHJvb3QgYWxidW0gKi8KCSAgICBsaXN0ICgkcmV0LCAkYWxidW1JZCkgPQoJCUdhbGxlcnlDb3JlQXBpOjpnZXRQbHVnaW5QYXJhbWV0ZXIoJ21vZHVsZScsICdjb3JlJywgJ2lkLnJvb3RBbGJ1bScpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQ7CgkgICAgfQoJfQoKCSRiaWdnZXN0RGVyaXZhdGl2ZSA9ICRtYXhTaXplID0gMDsKCgkvKiBGaW5kIHRoZSBkZXJpdmF0aXZlIHByZWZlcmVuY2VzIGZvciB0aGUgYWxidW0gKi8KCWxpc3QgKCRyZXQsICRkZXJpdmF0aXZlcykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hEZXJpdmF0aXZlUHJlZmVyZW5jZXNGb3JJdGVtKCRhbGJ1bUlkKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9CgoJZm9yZWFjaCAoJGRlcml2YXRpdmVzIGFzICRkZXJpdmF0aXZlKSB7CgkgICAgcHJlZ19tYXRjaCgnL3NjYWxlXHwoXGQqKSwoXGQqKS8nLCAkZGVyaXZhdGl2ZVsnZGVyaXZhdGl2ZU9wZXJhdGlvbnMnXSwgJG1hdGNoZXMpOwoKCSAgICBpZiAoJGRlcml2YXRpdmVbJ2Rlcml2YXRpdmVUeXBlJ10gIT0gREVSSVZBVElWRV9UWVBFX0lNQUdFX1RIVU1CTkFJTCAmJgoJCSAgICBpc3NldCgkbWF0Y2hlc1sxXSkpIHsKCQlpZiAoJG1hdGNoZXNbMV0gPiAkYmlnZ2VzdERlcml2YXRpdmUpIHsKCQkgICAgJGJpZ2dlc3REZXJpdmF0aXZlID0gJG1hdGNoZXNbMV07CgkJfQoJCWlmICgkbWF0Y2hlc1syXSA+ICRiaWdnZXN0RGVyaXZhdGl2ZSkgewoJCSAgICAkYmlnZ2VzdERlcml2YXRpdmUgPSAkbWF0Y2hlc1syXTsKCQl9CgkgICAgfQoJfQoKCS8qIElzIHRoZSBzaXplbGltaXQgbW9kdWxlIGFjdGl2ZT8gKi8KCWxpc3QgKCRyZXQsICRtb2R1bGVzKSA9IEdhbGxlcnlDb3JlQXBpOjpmZXRjaFBsdWdpblN0YXR1cygnbW9kdWxlJyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCWlmIChpc3NldCgkbW9kdWxlc1snc2l6ZWxpbWl0J11bJ2FjdGl2ZSddKSAmJiAkbW9kdWxlc1snc2l6ZWxpbWl0J11bJ2FjdGl2ZSddKSB7CgkgICAgLyogSWYgdGhlIHNpemVsaW1pdCBtb2R1bGUgaXMgZW5hYmxlZCwgZmluZCB0aGUgbWF4IHNpemUgZm9yIHRoZSBhbGJ1bSAqLwoJICAgIGxpc3QgKCRyZXQsICRwYXJhbSkgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hBbGxQbHVnaW5QYXJhbWV0ZXJzKAoJCSdtb2R1bGUnLCAnc2l6ZWxpbWl0JywgJGFsYnVtSWQpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQ7CgkgICAgfQoKCSAgICBpZiAoaXNzZXQoJHBhcmFtWyd3aWR0aCddKSkgewoJCSRtYXhTaXplID0gJHBhcmFtWyd3aWR0aCddOwoJICAgIH0KCgkgICAgaWYgKGlzc2V0KCRwYXJhbVsnaGVpZ2h0J10pICYmICRwYXJhbVsnaGVpZ2h0J10gPiAkbWF4U2l6ZSkgewoJCSRtYXhTaXplID0gJHBhcmFtWydoZWlnaHQnXTsKCSAgICB9Cgl9CgoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnYXV0b19yZXNpemUnLCAkYmlnZ2VzdERlcml2YXRpdmUpOwoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnbWF4X3NpemUnLCAkbWF4U2l6ZSk7CgoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzJywgJGdyU3RhdHVzQ29kZXNbJ1NVQ0NFU1MnXSk7CgkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICdGZXRjaC1hbGJ1bS1pbWFnZXMgc3VjY2Vzc2Z1bC4nKTsKCglyZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEluY3JlbWVudCB2aWV3IGNvdW50CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRmb3JtIGtleS92YWx1ZSBwYWlycyBmcm9tIEdhbGxlcnkgUmVtb3RlCiAgICAgKiBAcGFyYW0gb2JqZWN0IEdhbGxlcnlSZW1vdGVQcm9wZXJ0aWVzICRyZXNwb25zZSBhIHJlZmVyZW5jZSB0byBvdXIgcmVzcG9uc2Ugb2JqZWN0CiAgICAgKiBAcmV0dXJuIG9iamVjdCBHYWxsZXJ5U3RhdHVzIGEgc3RhdHVzIGNvZGUKICAgICAqLwogICAgZnVuY3Rpb24gaW5jcmVtZW50Vmlld0NvdW50KCRmb3JtLCAmJHJlc3BvbnNlKSB7CglnbG9iYWwgJGdhbGxlcnk7CgkkZ3JTdGF0dXNDb2RlcyA9IEdhbGxlcnlSZW1vdGVDb25zdGFudHM6OmdldFN0YXR1c0NvZGVzKCk7CgoJaWYgKGVtcHR5KCRmb3JtWydpdGVtSWQnXSkpIHsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXMnLCAkZ3JTdGF0dXNDb2Rlc1snTUlTU0lOR19BUkdVTUVOVFMnXSk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzX3RleHQnLCAnaW5jcmVtZW50LXZpZXctY291bnQgZmFpbGVkLicpOwoJICAgIHJldHVybiBudWxsOwoJfQoKCSRpdGVtSWQgPSAkZm9ybVsnaXRlbUlkJ107CgoJLyogSW5jcmVtZW50IHRoZSB2aWV3IGNvdW50ICovCgkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OmluY3JlbWVudEl0ZW1WaWV3Q291bnQoJGl0ZW1JZCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1cycsICRnclN0YXR1c0NvZGVzWydTVUNDRVNTJ10pOwoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzX3RleHQnLCAnaW5jcmVtZW50LXZpZXctY291bnQgc3VjY2Vzc2Z1bC4nKTsKCglyZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEltYWdlIHByb3BlcnRpZXMKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZvcm0ga2V5L3ZhbHVlIHBhaXJzIGZyb20gR2FsbGVyeSBSZW1vdGUKICAgICAqIEBwYXJhbSBvYmplY3QgR2FsbGVyeVJlbW90ZVByb3BlcnRpZXMgJHJlc3BvbnNlIGEgcmVmZXJlbmNlIHRvIG91ciByZXNwb25zZSBvYmplY3QKICAgICAqIEByZXR1cm4gb2JqZWN0IEdhbGxlcnlTdGF0dXMgYSBzdGF0dXMgY29kZQogICAgICovCiAgICBmdW5jdGlvbiBpbWFnZVByb3BlcnRpZXMoJGZvcm0sICYkcmVzcG9uc2UpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCgkvKgoJICogR1Igbm93IG9ubHkgc3VwcG9ydHMgMS1kaW1lbnNpb24gc2l6ZSBjb25zdHJhaW50cy4gSXQgdXNlZCB0byBzdXBwb3J0IDItZAoJICogYnV0IHNpbmNlIEcxIHN1cHBvcnRlZCAxLWQsIEkgc2ltcGxpZmllZCBHUiBhIHdoaWxlIGFnbywgc28gbm93IHdlIGhhdmUKCSAqIHRvIGNoZWF0IGEgYml0IGFuZCBzZWxlY3QgdGhlIGxhcmdlc3Qgb2Ygd2lkdGggYW5kIGhlaWdodCB0byByZXR1cm4gdG8gR1IKCSAqLwoKCSRnclN0YXR1c0NvZGVzID0gR2FsbGVyeVJlbW90ZUNvbnN0YW50czo6Z2V0U3RhdHVzQ29kZXMoKTsKCglpZiAoaXNzZXQoJGZvcm1bJ2lkJ10pKSB7CgkgICAgJGlkID0gJGZvcm1bJ2lkJ107Cgl9IGVsc2UgewoJICAgIC8qIHRvZG86IGhhbmRsZSBlcnJvciAqLwoJfQoKCWxpc3QgKCRyZXQsICRpdGVtKSA9IEdhbGxlcnlDb3JlQXBpOjpsb2FkRW50aXRpZXNCeUlkKCRpZCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiAkcmV0OwoJfQoKCWlmIChHYWxsZXJ5VXRpbGl0aWVzOjppc0EoJGl0ZW0sICdHYWxsZXJ5QWxidW1JdGVtJykpIHsKCSAgICAvKiBpZiB3ZSBoYXZlIGFuIGFsYnVtLCBnZXQgaGlzIHRodW1ibmFpbCBpbnN0ZWFkICovCgkgICAgbGlzdCAoJHJldCwgJHRodW1icykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hUaHVtYm5haWxzQnlJdGVtSWRzKGFycmF5KCRpZCkpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuICRyZXQ7CgkgICAgfQoKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS50aHVtYk5hbWUnLCAkdGh1bWJzWyRpZF0tPmdldElkKCkpOwoJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLnRodW1iX3dpZHRoJywgJHRodW1ic1skaWRdLT5nZXRXaWR0aCgpKTsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS50aHVtYl9oZWlnaHQnLCAkdGh1bWJzWyRpZF0tPmdldEhlaWdodCgpKTsKCX0gZWxzZSBpZiAoR2FsbGVyeVV0aWxpdGllczo6aXNBKCRpdGVtLCAnR2FsbGVyeVBob3RvSXRlbScpKSB7CgkgICAgLyogTG9hZCB0aGUgZGVyaXZhdGl2ZXMgZm9yIGFsbCB0aG9zZSBpdGVtcyAqLwoJICAgIGxpc3QgKCRyZXQsICRkZXJpdmF0aXZlcykgPSBHYWxsZXJ5Q29yZUFwaTo6ZmV0Y2hEZXJpdmF0aXZlc0J5SXRlbUlkcyhhcnJheSgkaWQpKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0OwoJICAgIH0KCgkgICAgbGlzdCAoJHJldCwgJHBlcm1pc3Npb25zKSA9IEdhbGxlcnlDb3JlQXBpOjpnZXRQZXJtaXNzaW9ucygkaXRlbS0+Z2V0SWQoKSk7CgkgICAgaWYgKCRyZXQpIHsKCQlyZXR1cm4gJHJldDsKCSAgICB9CgkgICAgaWYgKCFpc3NldCgkcGVybWlzc2lvbnNbJ2NvcmUudmlld1NvdXJjZSddKQoJCSAgICAmJiAhaXNzZXQoJHBlcm1pc3Npb25zWydjb3JlLnZpZXdSZXNpemVzJ10pKSB7CgkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzJywgJGdyU3RhdHVzQ29kZXNbJ05PX1ZJRVdfUEVSTUlTU0lPTiddKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdzdGF0dXNfdGV4dCcsICdZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIHNlZSB0aGlzIGltYWdlLicpOwoJICAgIH0KCgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UubmFtZScsICRpdGVtLT5nZXRJZCgpKTsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5yYXdfd2lkdGgnLCAkaXRlbS0+Z2V0V2lkdGgoKSk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmF3X2hlaWdodCcsICRpdGVtLT5nZXRIZWlnaHQoKSk7CgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmF3X2ZpbGVzaXplJywgJGl0ZW0tPmdldFNpemUoKSk7CgoJICAgIGxpc3QgKCRyZXQsICRleHRlbnNpb25zKSA9CgkJR2FsbGVyeUNvcmVBcGk6OmNvbnZlcnRNaW1lVG9FeHRlbnNpb25zKCRpdGVtLT5nZXRNaW1lVHlwZSgpKTsKCSAgICBpZiAoJHJldCkgewoJCXJldHVybiAkcmV0OwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJGV4dGVuc2lvbnMpICYmIGlzc2V0KCRleHRlbnNpb25zWzBdKSkgewoJCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLmZvcmNlRXh0ZW5zaW9uJywgJGV4dGVuc2lvbnNbMF0pOwoJICAgIH0KCgkgICAgJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UuY2FwdGlvbicsICRpdGVtLT5nZXRUaXRsZSgpKTsKCSAgICAkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS50aXRsZScsICRpdGVtLT5nZXRQYXRoQ29tcG9uZW50KCkpOwoJICAgICRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ2ltYWdlLmhpZGRlbicsICdubycpOwoKCSAgICAkdGh1bWIgPSBudWxsOwoJICAgICRyZXNpemVzID0gYXJyYXkoKTsKCSAgICBpZiAoaXNzZXQoJGRlcml2YXRpdmVzWyRpdGVtLT5nZXRJZCgpXSkpIHsKCQlmb3JlYWNoICgkZGVyaXZhdGl2ZXNbJGl0ZW0tPmdldElkKCldIGFzICRpbmRleCA9PiAkZGVyKSB7CgkJICAgIGlmICgkZGVyLT5nZXREZXJpdmF0aXZlVHlwZSgpID09IERFUklWQVRJVkVfVFlQRV9JTUFHRV9USFVNQk5BSUwpIHsKCQkJJHRodW1iID0gJGRlcjsKCQkgICAgfSBlbHNlIGlmICgkZGVyLT5nZXREZXJpdmF0aXZlVHlwZSgpID09IERFUklWQVRJVkVfVFlQRV9JTUFHRV9QUkVGRVJSRUQgJiYKCQkJICAgICAgIGlzc2V0KCRwZXJtaXNzaW9uc1snY29yZS52aWV3U291cmNlJ10pKSB7CgkJCS8qIG92ZXJyaWRlIHRoZSBzb3VyY2UgaW1hZ2Ugd2l0aCB0aGUgcHJlZmVycmVkIHZlcnNpb24gKi8KCQkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UubmFtZScsICRkZXItPmdldElkKCkpOwoJCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5yYXdfd2lkdGgnLCAkZGVyLT5nZXRXaWR0aCgpKTsKCQkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmF3X2hlaWdodCcsICRkZXItPmdldEhlaWdodCgpKTsKCQkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmF3X2ZpbGVzaXplJywgJGRlci0+Z2V0RGVyaXZhdGl2ZVNpemUoKSk7CgkJICAgIH0gZWxzZSBpZiAoJGRlci0+Z2V0RGVyaXZhdGl2ZVR5cGUoKSA9PSBERVJJVkFUSVZFX1RZUEVfSU1BR0VfUkVTSVpFICYmCgkJCSAgICAgICBpc3NldCgkcGVybWlzc2lvbnNbJ2NvcmUudmlld1Jlc2l6ZXMnXSkpIHsKCQkJJHJlc2l6ZXNbJGluZGV4XSA9ICRkZXItPmdldFdpZHRoKCkgKiAkZGVyLT5nZXRIZWlnaHQoKTsKCQkgICAgfQoJCX0KCQlhcnNvcnQoJHJlc2l6ZXMpOwoJCSRyZXNpemVzID0gYXJyYXlfa2V5cygkcmVzaXplcyk7CgkgICAgfQoKCSAgICBpZiAoIWVtcHR5KCRyZXNpemVzKSkgewoJCSRkZXIgPSAkZGVyaXZhdGl2ZXNbJGl0ZW0tPmdldElkKCldW2FycmF5X3NoaWZ0KCRyZXNpemVzKV07CgkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmVzaXplZE5hbWUnLCAkZGVyLT5nZXRJZCgpKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS5yZXNpemVkX3dpZHRoJywgJGRlci0+Z2V0V2lkdGgoKSk7CgkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UucmVzaXplZF9oZWlnaHQnLCAkZGVyLT5nZXRIZWlnaHQoKSk7CgkgICAgfQoJICAgIGlmIChpc3NldCgkdGh1bWIpKSB7CgkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UudGh1bWJOYW1lJywgJHRodW1iLT5nZXRJZCgpKTsKCQkkcmVzcG9uc2UtPnNldFByb3BlcnR5KCdpbWFnZS50aHVtYl93aWR0aCcsICR0aHVtYi0+Z2V0V2lkdGgoKSk7CgkJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnaW1hZ2UudGh1bWJfaGVpZ2h0JywgJHRodW1iLT5nZXRIZWlnaHQoKSk7CgkgICAgfQoJfQoKCSRyZXNwb25zZS0+c2V0UHJvcGVydHkoJ3N0YXR1cycsICRnclN0YXR1c0NvZGVzWydTVUNDRVNTJ10pOwoJJHJlc3BvbnNlLT5zZXRQcm9wZXJ0eSgnc3RhdHVzX3RleHQnLCAnaW1hZ2UtcHJvcGVydGllcyBzdWNjZXNzZnVsLicpOwoKCXJldHVybiBudWxsOwogICAgfQp9CgovKioKICogVGhpcyBpcyBhbiBpbW1lZGlhdGUgdmlldyB0aGF0IGVtaXRzIHdlbGwgZm9ybWVkIEdhbGxlcnkgUmVtb3RlIHByb3RvY29sIDIgb3V0cHV0CiAqLwpjbGFzcyBHYWxsZXJ5UmVtb3RlVmlldyBleHRlbmRzIEdhbGxlcnlWaWV3IHsKCiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeVZpZXc6OmlzSW1tZWRpYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGlzSW1tZWRpYXRlKCkgewoJcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlWaWV3Ojppc0FsbG93ZWRJbkVtYmVkT25seQogICAgICovCiAgICBmdW5jdGlvbiBpc0FsbG93ZWRJbkVtYmVkT25seSgpIHsKCXJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5Vmlldzo6cmVuZGVySW1tZWRpYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlbmRlckltbWVkaWF0ZSgkc3RhdHVzLCAkZXJyb3IpIHsKCWlmICghaGVhZGVyc19zZW50KCkpIHsKCSAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIpOwoJfQoKCWlmIChpc3NldCgkc3RhdHVzWydjb250cm9sbGVyRXJyb3InXSkpIHsKCSAgICBwcmludCAnRXJyb3I6ICcgLiAkc3RhdHVzWydjb250cm9sbGVyRXJyb3InXS0+Z2V0QXNUZXh0KCk7Cgl9CgoJaWYgKGlzc2V0KCRzdGF0dXNbJ2NvbnRyb2xsZXJSZXNwb25zZSddKSkgewoJICAgIHByaW50ICRzdGF0dXNbJ2NvbnRyb2xsZXJSZXNwb25zZSddLT5saXN0UHJvcGVydGllcygpOwoJfQoKCWlmIChpc3NldCgkY29udHJvbGxlckVycm9yKSkgewoJICAgIHJldHVybiAkcmV0OwoJfSBlbHNlIHsKCSAgICByZXR1cm4gbnVsbDsKCX0KICAgIH0KfQo/Pgo=');
expand_8c681c5566($outputDir, 'ItemAddGalleryRemote.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgovKioKICogVGhpcyBJdGVtQWRkIHBsdWdpbiBzaG93cyBpbmZvcm1hdGlvbiBhYm91dCBHYWxsZXJ5IFJlbW90ZQogKiBAcGFja2FnZSBSZW1vdGUKICogQHN1YnBhY2thZ2UgVXNlckludGVyZmFjZQogKiBAYXV0aG9yIEJoYXJhdCBNZWRpcmF0dGEgPGJoYXJhdEBtZW5hbHRvLmNvbT4KICogQHZlcnNpb24gJFJldmlzaW9uOiAxNTUxMyAkCiAqLwpjbGFzcyBJdGVtQWRkR2FsbGVyeVJlbW90ZSBleHRlbmRzIEl0ZW1BZGRQbHVnaW4gewoKICAgIC8qKgogICAgICogQHNlZSBJdGVtQWRkOmxvYWRUZW1wbGF0ZQogICAgICovCiAgICBmdW5jdGlvbiBsb2FkVGVtcGxhdGUoJiR0ZW1wbGF0ZSwgJiRmb3JtLCAkaXRlbSkgewoJaWYgKCRmb3JtWydmb3JtTmFtZSddICE9ICdJdGVtQWRkR2FsbGVyeVJlbW90ZScpIHsKCSAgICAkZm9ybVsnZm9ybU5hbWUnXSA9ICdJdGVtQWRkR2FsbGVyeVJlbW90ZSc7Cgl9CgoJJHRlbXBsYXRlLT5zZXRWYXJpYWJsZSgnSXRlbUFkZEdhbGxlcnlSZW1vdGUnLCBhcnJheSgpKTsKCXJldHVybiBhcnJheShudWxsLCAnbW9kdWxlcy9yZW1vdGUvdGVtcGxhdGVzL0l0ZW1BZGRHYWxsZXJ5UmVtb3RlLnRwbCcsICdtb2R1bGVzX3JlbW90ZScpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBJdGVtQWRkUGx1Z2luOjpnZXRUaXRsZQogICAgICovCiAgICBmdW5jdGlvbiBnZXRUaXRsZSgpIHsKCWxpc3QgKCRyZXQsICRtb2R1bGUpID0gR2FsbGVyeUNvcmVBcGk6OmxvYWRQbHVnaW4oJ21vZHVsZScsICdyZW1vdGUnKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJfQoKCXJldHVybiBhcnJheShudWxsLCAkbW9kdWxlLT50cmFuc2xhdGUoJ0dhbGxlcnkgUmVtb3RlJykpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBJdGVtQWRkUGx1Z2luOjppc0FwcHJvcHJpYXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGlzQXBwcm9wcmlhdGUoKSB7CglsaXN0ICgkcmV0LCAkc2hvd0l0ZW1BZGQpID0KCSAgICBHYWxsZXJ5Q29yZUFwaTo6Z2V0UGx1Z2luUGFyYW1ldGVyKCdtb2R1bGUnLCAncmVtb3RlJywgJ3Nob3dJdGVtQWRkJyk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCX0KCglyZXR1cm4gYXJyYXkobnVsbCwgJHNob3dJdGVtQWRkKTsKICAgIH0KfQo/Pgo=');
expand_8c681c5566($outputDir, 'MANIFEST', 'IyAkUmV2aXNpb246IDE2MDQxICQKIyBGaWxlIGNyYzMyIGNyYzMyKGNybGYpIHNpemUgc2l6ZShjcmxmKSAgb3IgIFIgRmlsZQptb2R1bGVzL3JlbW90ZS9HYWxsZXJ5UmVtb3RlLmluYwkxNjEwMTU5NDI0CTQwODExNjA5MTgJMzc4MDIJMzkwMDQKbW9kdWxlcy9yZW1vdGUvSXRlbUFkZEdhbGxlcnlSZW1vdGUuaW5jCTM1Nzg0NzgwMjIJMzU3Mjg4MjAyNQkyMDAzCTIwNzAKbW9kdWxlcy9yZW1vdGUvUmVtb3RlU2l0ZUFkbWluLmluYwkxMDQ5ODQ2NDM2CTIzMzI0MDQ2NDkJMjYxOQkyNzExCm1vZHVsZXMvcmVtb3RlL2NsYXNzZXMvR2FsbGVyeVJlbW90ZUNvbnN0YW50cy5jbGFzcwkzMzcwNTk2MzMwCTIzMzkwOTc5MTIJMjY4MQkyNzY0Cm1vZHVsZXMvcmVtb3RlL2NsYXNzZXMvR2FsbGVyeVJlbW90ZVByb3BlcnRpZXMuY2xhc3MJMjA0MzIxNDgyMAkyMzYzNzAyNTQ5CTI5NjcJMzA2NQptb2R1bGVzL3JlbW90ZS9tb2R1bGUuaW5jCTU1NDcxNjg1NgkzMzMyNzkyNzgxCTI0NzYJMjU2MAptb2R1bGVzL3JlbW90ZS90ZW1wbGF0ZXMvSXRlbUFkZEdhbGxlcnlSZW1vdGUudHBsCTQxNTkwMjI2MzkJMTY1ODQ0OTczNgk5MjYJOTQxCm1vZHVsZXMvcmVtb3RlL3RlbXBsYXRlcy9SZW1vdGVTaXRlQWRtaW4udHBsCTE1MTY3NTkyMjEJMjc5MzI3NTg5OAkxMDk0CTExMjQK');
expand_8c681c5566($outputDir, 'RemoteSiteAdmin.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgovKioKICogU2V0dGluZ3MgZm9yIFJlbW90ZQogKiBAcGFja2FnZSBSZW1vdGUKICogQHN1YnBhY2thZ2UgVXNlckludGVyZmFjZQogKiBAYXV0aG9yIEFsYW4gSGFyZGVyIDxhbGFuLmhhcmRlckBzdW4uY29tPgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDE1NTEzICQKICovCmNsYXNzIFJlbW90ZVNpdGVBZG1pbkNvbnRyb2xsZXIgZXh0ZW5kcyBHYWxsZXJ5Q29udHJvbGxlciB7CgogICAgLyoqCiAgICAgKiBAc2VlIEdhbGxlcnlDb250cm9sbGVyOjpoYW5kbGVSZXF1ZXN0CiAgICAgKi8KICAgIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoJGZvcm0pIHsKCSRyZXQgPSBHYWxsZXJ5Q29yZUFwaTo6YXNzZXJ0VXNlcklzU2l0ZUFkbWluaXN0cmF0b3IoKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJfQoKCSRzdGF0dXMgPSAkZXJyb3IgPSBhcnJheSgpOwoJaWYgKGlzc2V0KCRmb3JtWydhY3Rpb24nXVsnc2F2ZSddKSkgewoJICAgIGZvcmVhY2ggKGFycmF5KCdzaG93SXRlbUFkZCcpIGFzICRrZXkpIHsKCQkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OnNldFBsdWdpblBhcmFtZXRlcignbW9kdWxlJywgJ3JlbW90ZScsICRrZXksCgkJCQkJCShpc3NldCgkZm9ybVska2V5XSkgJiYgJGZvcm1bJGtleV0pID8gMSA6IDApOwoJCWlmICgkcmV0KSB7CgkJICAgIHJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCQl9CgkgICAgfQoJICAgICRzdGF0dXNbJ3NhdmVkJ10gPSAxOwoJfQoKCSRyZXN1bHRzID0gYXJyYXkoJ3JlZGlyZWN0JyA9PiBhcnJheSgndmlldycgPT4gJ2NvcmUuU2l0ZUFkbWluJywKCQkJCQkgICAgICdzdWJWaWV3JyA9PiAncmVtb3RlLlJlbW90ZVNpdGVBZG1pbicpLAoJCQkgJ3N0YXR1cycgPT4gJHN0YXR1cywKCQkJICdlcnJvcicgPT4gJGVycm9yKTsKCglyZXR1cm4gYXJyYXkobnVsbCwgJHJlc3VsdHMpOwogICAgfQp9CgovKioKICogU2V0dGluZ3MgZm9yIFJlbW90ZQogKi8KY2xhc3MgUmVtb3RlU2l0ZUFkbWluVmlldyBleHRlbmRzIEdhbGxlcnlWaWV3IHsKCiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeVZpZXc6OmxvYWRUZW1wbGF0ZQogICAgICovCiAgICBmdW5jdGlvbiBsb2FkVGVtcGxhdGUoJiR0ZW1wbGF0ZSwgJiRmb3JtKSB7CgkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OmFzc2VydFVzZXJJc1NpdGVBZG1pbmlzdHJhdG9yKCk7CglpZiAoJHJldCkgewoJICAgIHJldHVybiBhcnJheSgkcmV0LCBudWxsKTsKCX0KCglpZiAoIWlzc2V0KCRmb3JtWydzaG93SXRlbUFkZCddKSkgewoJICAgICRmb3JtWydzaG93SXRlbUFkZCddID0gZmFsc2U7Cgl9CglpZiAoJGZvcm1bJ2Zvcm1OYW1lJ10gIT0gJ1JlbW90ZVNpdGVBZG1pbicpIHsKCSAgICAkZm9ybVsnZm9ybU5hbWUnXSA9ICdSZW1vdGVTaXRlQWRtaW4nOwoJICAgIGxpc3QgKCRyZXQsICRwYXJhbXMpID0gR2FsbGVyeUNvcmVBcGk6OmZldGNoQWxsUGx1Z2luUGFyYW1ldGVycygnbW9kdWxlJywgJ3JlbW90ZScpOwoJICAgIGlmICgkcmV0KSB7CgkJcmV0dXJuIGFycmF5KCRyZXQsIG51bGwpOwoJICAgIH0KCSAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJJGZvcm1bJGtleV0gPSAkdmFsdWU7CgkgICAgfQoJfQoKCSR0ZW1wbGF0ZS0+c2V0VmFyaWFibGUoJ2NvbnRyb2xsZXInLCAncmVtb3RlLlJlbW90ZVNpdGVBZG1pbicpOwoJcmV0dXJuIGFycmF5KG51bGwsIGFycmF5KCdib2R5JyA9PiAnbW9kdWxlcy9yZW1vdGUvdGVtcGxhdGVzL1JlbW90ZVNpdGVBZG1pbi50cGwnKSk7CiAgICB9Cn0KPz4K');
expand_8c681c5566($outputDir, 'classes/GalleryRemoteConstants.class', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgovKioKICogQ29uc3RhbnRzIHVzZWQgYnkgdGhlIFJlbW90ZSBtb2R1bGUKICogQHBhY2thZ2UgUmVtb3RlCiAqIEBzdWJwYWNrYWdlIENsYXNzZXMKICogQGF1dGhvciBQaWVycmUtTHVjIFBhb3VyCiAqIEBhdXRob3IgQmhhcmF0IE1lZGlyYXR0YQogKiBAdmVyc2lvbiAkUmV2aXNpb246IDE1NTEzICQKICogQHN0YXRpYwogKi8KY2xhc3MgR2FsbGVyeVJlbW90ZUNvbnN0YW50cyB7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgTWFqb3IvTWlub3IgdmVyc2lvbiBjb2RlcwogICAgICogQHJldHVybiBhcnJheSAoTUFKID0+ICMjLCBNSU4gPT4gIyMpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFZlcnNpb25Db2RlcygpIHsKCXN0YXRpYyAkZ3JWZXJzaW9uQ29kZXM7CgoJaWYgKGVtcHR5KCRnclZlcnNpb25Db2RlcykpIHsKCSAgICAkZ3JWZXJzaW9uQ29kZXNbJ01BSiddID0gMjsKCSAgICAkZ3JWZXJzaW9uQ29kZXNbJ01JTiddID0gMTE7Cgl9CgoJcmV0dXJuICRnclZlcnNpb25Db2RlczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiByZW1vdGUgcHJvdG9jb2wgc3RhdHVzIGNvZGVzCiAgICAgKiBAcmV0dXJuIGFycmF5IChTVUNDRVNTID0+ICMjLCBQQVNTV09SRF9XUk9ORyA9PiAjIywgLi4uKQogICAgICovCiAgICBmdW5jdGlvbiBnZXRTdGF0dXNDb2RlcygpIHsKCXN0YXRpYyAkZ3JTdGF0dXNDb2RlczsKCglpZiAoZW1wdHkoJGdyU3RhdHVzQ29kZXMpKSB7CgkgICAgJGdyU3RhdHVzQ29kZXNbJ1NVQ0NFU1MnXSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKCgkgICAgJGdyU3RhdHVzQ29kZXNbJ1BST1RPQ09MX01BSk9SX1ZFUlNJT05fSU5WQUxJRCddCT0gMTAxOwoJICAgICRnclN0YXR1c0NvZGVzWydQUk9UT0NPTF9NSU5PUl9WRVJTSU9OX0lOVkFMSUQnXQk9IDEwMjsKCSAgICAkZ3JTdGF0dXNDb2Rlc1snUFJPVE9DT0xfVkVSU0lPTl9GT1JNQVRfSU5WQUxJRCddICAgPSAxMDM7CgkgICAgJGdyU3RhdHVzQ29kZXNbJ1BST1RPQ09MX1ZFUlNJT05fTUlTU0lORyddCQk9IDEwNDsKCgkgICAgJGdyU3RhdHVzQ29kZXNbJ1BBU1NXT1JEX1dST05HJ10gICAgICAgICAgICAgICAgICAgID0gMjAxOwoJICAgICRnclN0YXR1c0NvZGVzWydMT0dJTl9NSVNTSU5HJ10gICAgICAgICAgICAgICAgICAgICA9IDIwMjsKCgkgICAgJGdyU3RhdHVzQ29kZXNbJ1VOS05PV05fQ09NTUFORCddCQkgICAgICAgID0gMzAxOwoJICAgICRnclN0YXR1c0NvZGVzWydNSVNTSU5HX0FSR1VNRU5UUyddCQkgICAgICAgID0gMzAyOwoKCSAgICAkZ3JTdGF0dXNDb2Rlc1snTk9fQUREX1BFUk1JU1NJT04nXQkgICAgICAgICAgICAgICAgPSA0MDE7CgkgICAgJGdyU3RhdHVzQ29kZXNbJ05PX0ZJTEVOQU1FJ10JCQk9IDQwMjsKCSAgICAkZ3JTdGF0dXNDb2Rlc1snVVBMT0FEX1BIT1RPX0ZBSUwnXQkgICAgICAgICAgICAgICAgPSA0MDM7CgkgICAgJGdyU3RhdHVzQ29kZXNbJ05PX1dSSVRFX1BFUk1JU1NJT04nXQkgICAgICAgID0gNDA0OwoJICAgICRnclN0YXR1c0NvZGVzWydOT19WSUVXIFBFUk1JU1NJT04nXQkgICAgICAgID0gNDA1OwoKCSAgICAkZ3JTdGF0dXNDb2Rlc1snTk9fQ1JFQVRFX0FMQlVNX1BFUk1JU1NJT04nXQk9IDUwMTsKCSAgICAkZ3JTdGF0dXNDb2Rlc1snQ1JFQVRFX0FMQlVNX0ZBSUxFRCddCQk9IDUwMjsKCSAgICAkZ3JTdGF0dXNDb2Rlc1snTU9WRV9BTEJVTV9GQUlMRUQnXQkgICAgICAgICAgICAgICAgPSA1MDM7CgkgICAgJGdyU3RhdHVzQ29kZXNbJ1JPVEFURV9JTUFHRV9GQUlMRUQnXSAgICAgICAgICAgICAgID0gNTA0OwoJfQoKCXJldHVybiAkZ3JTdGF0dXNDb2RlczsKICAgIH0KfQo/Pgo=');
expand_8c681c5566($outputDir, 'classes/GalleryRemoteProperties.class', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgovKioKICogVGhpcyBjbGFzcyBwYXJ0aWFsbHkgbWlycm9ycyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgamF2YSBjbGFzcyBqYXZhLnV0aWwuUHJvcGVydGllcy4KICogQHBhY2thZ2UgUmVtb3RlCiAqIEBzdWJwYWNrYWdlIENsYXNzZXMKICogQGF1dGhvciBUaW0gTWlsbGVyCiAqIEB2ZXJzaW9uICRSZXZpc2lvbjogMTU1MTMgJAogKi8KY2xhc3MgR2FsbGVyeVJlbW90ZVByb3BlcnRpZXMgewogICAgLyoqCiAgICAgKiBPdXIgaW50ZXJuYWwgaGFzaCBtYXAKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICB2YXIgJF9tYXA7CgogICAgZnVuY3Rpb24gR2FsbGVyeVJlbW90ZVByb3BlcnRpZXMoKSB7CgkkdGhpcy0+X21hcCA9IGFycmF5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBhIHByb3BlcnR5LCBvciBudWxsL2dpdmVuIGRlZmF1bHQgaWYgaXQgZG9lc24ndCBleGlzdAogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRlZmF1bHRWYWx1ZQogICAgICogQHJldHVybiBtaXhlZCB0aGUgYWN0dWFsIHZhbHVlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5KCRrZXksICRkZWZhdWx0VmFsdWU9bnVsbCkgewoJaWYgKGlzc2V0KCR0aGlzLT5fbWFwWyRrZXldKSkgewoJICAgIHJldHVybiAkdGhpcy0+X21hcFska2V5XTsKCX0gZWxzZSB7CgkgICAgcmV0dXJuICRkZWZhdWx0VmFsdWU7Cgl9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUga2V5IGV4aXN0cyBpbiB0aGUgcHJvcGVydGllcyBtYXAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgaXQgZXhpc3RzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGhhc1Byb3BlcnR5KCRrZXkpIHsKCXJldHVybiBpc3NldCgkdGhpcy0+X21hcFska2V5XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeHBvcnQgdGhlIHByb3BlcnRpZXMgYWNjb3JkaW5nIHRvIHRoZSBHYWxsZXJ5IFJlbW90ZSBQcm90b2NvbCAyLjAgZGF0YSBmb3JtYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgZXhwb3J0ZWQgcHJvcGVydGllcwogICAgICovCiAgICBmdW5jdGlvbiBsaXN0UHJvcGVydGllcygpIHsKCSRyZXN1bHRzID0gYXJyYXkoKTsKCSRyZXN1bHRzW10gPSAnI19fR1IyUFJPVE9fXyc7Cglmb3JlYWNoICgkdGhpcy0+X21hcCBhcyAka2V5ID0+ICR2YWx1ZSkgewoJICAgICRyZXN1bHRzW10gPSAka2V5IC4gJz0nIC4gJHZhbHVlOwoJfQoKCXJldHVybiBqb2luKCJcbiIsICRyZXN1bHRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIFN0b3JlIGEga2V5L3ZhbHVlIHByb3BlcnR5LiAgT3ZlcndyaXRlIGFueSBleGlzdGluZyBwcm9wZXJ0eSBieSB0aGUgc2FtZSBuYW1lLiAgSWdub3JlIG51bGwKICAgICAqIGtleXMuICBOb3JtYWxpemUgYW5kIGVzY2FwZSBsaW5lIGVuZGluZ3MgKFxuLCBcclxuIGFuZCBcciBhbGwgYmVjb21lIFxcbikKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFByb3BlcnR5KCRrZXksICR2YWx1ZSkgewoJaWYgKCRrZXkgIT0gbnVsbCkgewoJCS8qIHBlcmZvcm0gcmVwbGFjZSBpbiBzdGFnZXMgdG8gYXZvaWQgdW5jZXJ0YWludHkgb24gd2hhdCBnZXRzIGRvbmUgZmlyc3QgKi8KCSAgICAkdmFsdWUgPSBzdHJfcmVwbGFjZSgnXFwnLCAnXFxcXCcsICR2YWx1ZSk7CgkgICAgJHZhbHVlID0gc3RyX3JlcGxhY2UoIlxyXG4iLCAnXG4nLCAkdmFsdWUpOwoJICAgICR2YWx1ZSA9IHN0cl9yZXBsYWNlKGFycmF5KCJcciIsICJcbiIsICJcdCIpLCBhcnJheSgnXG4nLCAnXG4nLCAnXHQnKSwgJHZhbHVlKTsKCSAgICAka2V5ID0gc3RyX3JlcGxhY2UoYXJyYXkoJyMnLCAnIScsICc9JywgJzonKSwgYXJyYXkoJ1xcIycsICdcXCEnLCAnXFw9JywgJ1xcOicpLCAka2V5KTsKCSAgICAkdmFsdWUgPSBzdHJfcmVwbGFjZShhcnJheSgnIycsICchJywgJz0nLCAnOicpLAoJCQkJIGFycmF5KCdcXCMnLCAnXFwhJywgJ1xcPScsICdcXDonKSwgJHZhbHVlKTsKCgkgICAgJHRoaXMtPl9tYXBbJGtleV0gPSAkdmFsdWU7Cgl9CiAgICB9Cn0KPz4K');
expand_8c681c5566($outputDir, 'module.inc', 'PD9waHAKLyoKICogR2FsbGVyeSAtIGEgd2ViIGJhc2VkIHBob3RvIGFsYnVtIHZpZXdlciBhbmQgZWRpdG9yCiAqIENvcHlyaWdodCAoQykgMjAwMC0yMDA3IEJoYXJhdCBNZWRpcmF0dGEKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CiAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KICovCgovKioKICogQHBhY2thZ2UgUmVtb3RlCiAqIEBhdXRob3IgUGllcnJlLUx1YyBQYW91ciA8cGFvdXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogKiBAdmVyc2lvbiAkUmV2aXNpb246IDE2MDM0ICQKICovCmNsYXNzIFJlbW90ZU1vZHVsZSBleHRlbmRzIEdhbGxlcnlNb2R1bGUgewoKICAgIGZ1bmN0aW9uIFJlbW90ZU1vZHVsZSgpIHsKCWdsb2JhbCAkZ2FsbGVyeTsKCSR0aGlzLT5zZXRJZCgncmVtb3RlJyk7CgkkdGhpcy0+c2V0TmFtZSgkZ2FsbGVyeS0+aTE4bignUmVtb3RlJykpOwoJJHRoaXMtPnNldERlc2NyaXB0aW9uKCRnYWxsZXJ5LT5pMThuKCdJbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHJlbW90ZSBjb250cm9sIHByb3RvY29sJykpOwoJJHRoaXMtPnNldFZlcnNpb24oJzEuMC45Jyk7CgkkdGhpcy0+c2V0R3JvdXAoJ2ludGVyZmFjZXMnLCAkZ2FsbGVyeS0+aTE4bignUmVtb3RlIEludGVyZmFjZXMnKSk7CgkkdGhpcy0+c2V0Q2FsbGJhY2tzKCdnZXRTaXRlQWRtaW5WaWV3cycpOwoJJHRoaXMtPnNldFJlcXVpcmVkQ29yZUFwaShhcnJheSg3LCA0KSk7CgkkdGhpcy0+c2V0UmVxdWlyZWRNb2R1bGVBcGkoYXJyYXkoMywgMykpOwogICAgfQoKICAgIC8qKgogICAgICogQHNlZSBHYWxsZXJ5TW9kdWxlOjp1cGdyYWRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIHVwZ3JhZGUoJGN1cnJlbnRWZXJzaW9uKSB7CglsaXN0ICgkcmV0LCAkcGFyYW1zKSA9IEdhbGxlcnlDb3JlQXBpOjpmZXRjaEFsbFBsdWdpblBhcmFtZXRlcnMoJ21vZHVsZScsICdyZW1vdGUnKTsKCWlmICgkcmV0KSB7CgkgICAgcmV0dXJuICRyZXQ7Cgl9Cglmb3JlYWNoIChhcnJheSgnc2hvd0l0ZW1BZGQnID0+IDEpIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkgICAgaWYgKCFpc3NldCgkcGFyYW1zWyRrZXldKSkgewoJCSRyZXQgPSAkdGhpcy0+c2V0UGFyYW1ldGVyKCRrZXksICR2YWx1ZSk7CgkJaWYgKCRyZXQpIHsKCQkgICAgcmV0dXJuICRyZXQ7CgkJfQoJICAgIH0KCX0KCglyZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeU1vZHVsZTo6cGVyZm9ybUZhY3RvcnlSZWdpc3RyYXRpb25zCiAgICAgKi8KICAgIGZ1bmN0aW9uIHBlcmZvcm1GYWN0b3J5UmVnaXN0cmF0aW9ucygpIHsKCS8qIFJlZ2lzdGVyIG91ciBpdGVtIGFkZCBwbHVnaW5zICovCgkkcmV0ID0gR2FsbGVyeUNvcmVBcGk6OnJlZ2lzdGVyRmFjdG9yeUltcGxlbWVudGF0aW9uKAoJICAgICdJdGVtQWRkUGx1Z2luJywgJ0l0ZW1BZGRHYWxsZXJ5UmVtb3RlJywgJ0l0ZW1BZGRHYWxsZXJ5UmVtb3RlJywKCSAgICAnbW9kdWxlcy9yZW1vdGUvSXRlbUFkZEdhbGxlcnlSZW1vdGUuaW5jJywgJ3JlbW90ZScsIG51bGwpOwoJaWYgKCRyZXQpIHsKCSAgICByZXR1cm4gJHJldDsKCX0KCglyZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzZWUgR2FsbGVyeU1vZHVsZTo6Z2V0U2l0ZUFkbWluVmlld3MKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0U2l0ZUFkbWluVmlld3MoKSB7CglyZXR1cm4gYXJyYXkobnVsbCwKCQkgICAgIGFycmF5KGFycmF5KCduYW1lJyA9PiAkdGhpcy0+dHJhbnNsYXRlKCdSZW1vdGUnKSwKCQkJCSAndmlldycgPT4gJ3JlbW90ZS5SZW1vdGVTaXRlQWRtaW4nKSkpOwogICAgfQp9Cj8+Cg==');
expand_8c681c5566($outputDir, 'po/GNUmakefile', 'R0FMTEVSWURJUiA/PSAuLi8uLi8uLgpUT09MRElSID89ICQoR0FMTEVSWURJUikvbGliL3Rvb2xzCgppbmNsdWRlICQoVE9PTERJUikvcG8vR05VbWFrZWZpbGUuaW5jCg==');
expand_8c681c5566($outputDir, 'po/strings.raw', 'IyAkSWQ6IHN0cmluZ3MucmF3IDE1NTM5IDIwMDYtMTItMjIgMTg6NTA6MTFaIG1pbmRsZXNzICQKCi8qIEl0ZW1BZGRHYWxsZXJ5UmVtb3RlLmluYyAqLwpnZXR0ZXh0KCJHYWxsZXJ5IFJlbW90ZSIpCgovKiBtb2R1bGUuaW5jICovCmdldHRleHQoIlJlbW90ZSIpCmdldHRleHQoIkltcGxlbWVudGF0aW9uIGZvciB0aGUgcmVtb3RlIGNvbnRyb2wgcHJvdG9jb2wiKQpnZXR0ZXh0KCJSZW1vdGUgSW50ZXJmYWNlcyIpCgovKiB0ZW1wbGF0ZXMvSXRlbUFkZEdhbGxlcnlSZW1vdGUudHBsICovCmdldHRleHQoIkdhbGxlcnkgUmVtb3RlIGlzIGEgSmF2YSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgb24geW91ciBkZXNrdG9wIGNvbXB1dGVyIGFuZCBwcm92aWRlcyBhIHJpY2ggaW50ZXJmYWNlIHRvIEdhbGxlcnkuICBXaXRoIEdhbGxlcnkgUmVtb3RlIHlvdSBjYW4gZHJhZyBhbmQgZHJvcCB0byBwaG90b3MgdG8gdXBsb2FkIHRoZW0gdG8gR2FsbGVyeSwgcm90YXRlIGFuZCByZXNpemUgeW91ciBpbWFnZXMgYmVmb3JlIHVwbG9hZGluZywgYW5kIGV2ZW4gdmlldyB0aGUgcGhvdG9zIGluIHlvdXIgR2FsbGVyeSBpbiBhIHNsaWRlc2hvdyBvbiB5b3VyIGRlc2t0b3AgY29tcHV0ZXIuICBZb3UgbXVzdCBpbnN0YWxsIEdhbGxlcnkgUmVtb3RlIDEuNCBvciBuZXdlciB0byB1c2UgaXQgd2l0aCB0aGlzIHZlcnNpb24gb2YgR2FsbGVyeS4iKQpnZXR0ZXh0KCJEb3dubG9hZCBHYWxsZXJ5IFJlbW90ZSIpCgovKiB0ZW1wbGF0ZXMvUmVtb3RlU2l0ZUFkbWluLnRwbCAqLwpnZXR0ZXh0KCJSZW1vdGUgU2V0dGluZ3MiKQpnZXR0ZXh0KCJTZXR0aW5ncyBzYXZlZCBzdWNjZXNzZnVsbHkiKQpnZXR0ZXh0KCJTaG93IGluZm9ybWF0aW9uIGFib3V0IEdhbGxlcnkgUmVtb3RlIGluIFwiYWRkIGl0ZW1zXCIgdmlldyIpCmdldHRleHQoIlNhdmUiKQpnZXR0ZXh0KCJSZXNldCIpCg==');
expand_8c681c5566($outputDir, 'templates/ItemAddGalleryRemote.tpl', 'eyoKICogJFJldmlzaW9uOiAxNTM0MiAkCiAqIElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSB0aGlzIGZpbGUsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5IHNpbmNlIGZ1dHVyZSB1cGdyYWRlcwogKiBtYXkgb3ZlcndyaXRlIGl0LiAgSW5zdGVhZCwgY29weSBpdCBpbnRvIGEgbmV3IGRpcmVjdG9yeSBjYWxsZWQgImxvY2FsIiBhbmQgZWRpdCB0aGF0CiAqIHZlcnNpb24uICBHYWxsZXJ5IHdpbGwgbG9vayBmb3IgdGhhdCBmaWxlIGZpcnN0IGFuZCB1c2UgaXQgaWYgaXQgZXhpc3RzLgogKn0KPGRpdiBjbGFzcz0iZ2JCbG9jayI+CiAgPHAgY2xhc3M9ImdpRGVzY3JpcHRpb24iPgogICAge2ctPnRleHQgdGV4dD0iR2FsbGVyeSBSZW1vdGUgaXMgYSBKYXZhIGFwcGxpY2F0aW9uIHRoYXQgcnVucyBvbiB5b3VyIGRlc2t0b3AgY29tcHV0ZXIgYW5kIHByb3ZpZGVzIGEgcmljaCBpbnRlcmZhY2UgdG8gR2FsbGVyeS4gIFdpdGggR2FsbGVyeSBSZW1vdGUgeW91IGNhbiBkcmFnIGFuZCBkcm9wIHRvIHBob3RvcyB0byB1cGxvYWQgdGhlbSB0byBHYWxsZXJ5LCByb3RhdGUgYW5kIHJlc2l6ZSB5b3VyIGltYWdlcyBiZWZvcmUgdXBsb2FkaW5nLCBhbmQgZXZlbiB2aWV3IHRoZSBwaG90b3MgaW4geW91ciBHYWxsZXJ5IGluIGEgc2xpZGVzaG93IG9uIHlvdXIgZGVza3RvcCBjb21wdXRlci4gIFlvdSBtdXN0IGluc3RhbGwgR2FsbGVyeSBSZW1vdGUgMS40IG9yIG5ld2VyIHRvIHVzZSBpdCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBHYWxsZXJ5LiJ9CiAgICA8YnIvPgogICAgPGEgaHJlZj0ie2ctPnVybCBhcmcxPSJocmVmPWh0dHA6Ly9nYWxsZXJ5LnNvdXJjZWZvcmdlLm5ldC9nYWxsZXJ5X3JlbW90ZS5waHAifSI+CiAgICAgIHtnLT50ZXh0IHRleHQ9IkRvd25sb2FkIEdhbGxlcnkgUmVtb3RlIn0KICAgIDwvYT4KICA8L3A+CjwvZGl2Pgo=');
expand_8c681c5566($outputDir, 'templates/RemoteSiteAdmin.tpl', 'eyoKICogJFJldmlzaW9uOiAxNTM0MiAkCiAqIElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSB0aGlzIGZpbGUsIGRvIG5vdCBlZGl0IGl0IGRpcmVjdGx5IHNpbmNlIGZ1dHVyZSB1cGdyYWRlcwogKiBtYXkgb3ZlcndyaXRlIGl0LiAgSW5zdGVhZCwgY29weSBpdCBpbnRvIGEgbmV3IGRpcmVjdG9yeSBjYWxsZWQgImxvY2FsIiBhbmQgZWRpdCB0aGF0CiAqIHZlcnNpb24uICBHYWxsZXJ5IHdpbGwgbG9vayBmb3IgdGhhdCBmaWxlIGZpcnN0IGFuZCB1c2UgaXQgaWYgaXQgZXhpc3RzLgogKn0KPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICA8aDI+IHtnLT50ZXh0IHRleHQ9IlJlbW90ZSBTZXR0aW5ncyJ9IDwvaDI+CjwvZGl2PgoKe2lmIGlzc2V0KCRzdGF0dXMuc2F2ZWQpfQo8ZGl2IGNsYXNzPSJnYkJsb2NrIj48aDIgY2xhc3M9ImdpU3VjY2VzcyI+CiAge2ctPnRleHQgdGV4dD0iU2V0dGluZ3Mgc2F2ZWQgc3VjY2Vzc2Z1bGx5In0KPC9oMj48L2Rpdj4Key9pZn0KCjxkaXYgY2xhc3M9ImdiQmxvY2siPgogIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNiU2hvd0l0ZW1BZGQie2lmICRmb3JtLnNob3dJdGVtQWRkfSBjaGVja2VkPSJjaGVja2VkInsvaWZ9CiAgIG5hbWU9IntnLT5mb3JtVmFyIHZhcj0iZm9ybVtzaG93SXRlbUFkZF0ifSIvPgogIDxsYWJlbCBmb3I9ImNiU2hvd0l0ZW1BZGQiPgogICAge2ctPnRleHQgdGV4dD0iU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBHYWxsZXJ5IFJlbW90ZSBpbiBcImFkZCBpdGVtc1wiIHZpZXcifQogIDwvbGFiZWw+CjwvZGl2PgoKPGRpdiBjbGFzcz0iZ2JCbG9jayBnY0JhY2tncm91bmQxIj4KICA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iaW5wdXRUeXBlU3VibWl0IgogICBuYW1lPSJ7Zy0+Zm9ybVZhciB2YXI9ImZvcm1bYWN0aW9uXVtzYXZlXSJ9IiB2YWx1ZT0ie2ctPnRleHQgdGV4dD0iU2F2ZSJ9Ii8+CiAgPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9ImlucHV0VHlwZVN1Ym1pdCIKICAgbmFtZT0ie2ctPmZvcm1WYXIgdmFyPSJmb3JtW2FjdGlvbl1bcmVzZXRdIn0iIHZhbHVlPSJ7Zy0+dGV4dCB0ZXh0PSJSZXNldCJ9Ii8+CjwvZGl2Pgo=');
}
function expand_8c681c5566($outputDir, $relativePath, $data) {
$fd = fopen($outputDir . $relativePath, 'w');
fwrite($fd, base64_decode($data));
fclose($fd);
}
$unpackFunction = "unpack_8c681c5566";
?>

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists