<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (name,version,description*,requires*,file+)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
  <name>CustomContent</name>
  <version>1.3.1</version>
  <description></description>
  <requires>
    <requiredname>FrontEndUsers</requiredname>
    <requiredversion>0.0.1</requiredversion>
  </requires>
  <file>
    <filename>CustomContent.module.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKLyoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEN1c3RvbUNvbnRlbnQKIyBWZXJzaW9uOiAxLjMuMSwgY2FsZ3V5MTAwMAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovKiBZb3VyIGluaXRpYWwgQ2xhc3MgZGVjbGFyYXRpb24uIFRoaXMgZmlsZSdzIG5hbWUgbXVzdAogICBiZSAiW2NsYXNzJ3MgbmFtZV0ubW9kdWxlLnBocCIsIG9yLCBpbiB0aGlzIGNhc2UsCiAgIFNrZWxldG9uLm1vZHVsZS5waHAKKi8gCmNsYXNzIEN1c3RvbUNvbnRlbnQgZXh0ZW5kcyBDTVNNb2R1bGUKewogIHZhciAkc3RhcnRfbWFya2VyPSI8IS0tY3VzdG9tQ29udGVudDoiOwogIHZhciAkZW5kX21hcmtlcj0iLS0+IjsKICB2YXIgJHN1YnN0aXR1dGVfY29udGVudCA9IGZhbHNlOwoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXROYW1lKCkKICAgbXVzdCByZXR1cm4gdGhlIGV4YWN0IGNsYXNzIG5hbWUgb2YgdGhlIG1vZHVsZS4KICAgSWYgdGhlc2UgZG8gbm90IG1hdGNoLCBiYWQgdGhpbmdzIGhhcHBlbi4KICAgCiAgIFRoaXMgaXMgdGhlIG5hbWUgdGhhdCdzIHNob3duIGluIHRoZSBtYWluIE1vZHVsZXMKICAgcGFnZSBpbiB0aGUgQWRtaW4uCiAgIAogICBJZiB5b3Ugd2FudCB0byBiZSBzYWZlLCB5b3UgY2FuIGp1c3QgcmVwbGFjZSB0aGUgYm9keQogICBvZiB0aGlzIGZ1bmN0aW9uIHdpdGg6CiAgIHJldHVybiBnZXRfY2xhc3MoJHRoaXMpOyAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXROYW1lKCkKICB7CiAgICByZXR1cm4gJ0N1c3RvbUNvbnRlbnQnOwogIH0KICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZywgcHJlZmVyYWJseSBhIGxvY2FsaXplZCBuYW1lCiAgIG9mIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIG5hbWUgdGhhdCdzIHNob3duIGluIHRoZQogICBBZG1pbiBNZW51cyBhbmQgc2VjdGlvbiBwYWdlcyAoaWYgdGhlIG1vZHVsZSBoYXMgYW4gYWRtaW4KICAgY29tcG9uZW50KS4KCSAgIAogICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICB9CiAgCiAgCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0VmVyc2lvbigpCiAgIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5nLCBwcmVmZXJhYmx5IGEgbnVtYmVyIG9yCiAgIHNvbWV0aGluZyB0aGF0IG1ha2VzIHNlbnNlIGZvciBkZXNpZ25hdGluZyBhIHZlcnNpb24uCiAgIFRoZSBDTVMgd2lsbCB1c2UgdGhpcyB0byBpZGVudGlmeSB3aGV0aGVyIG9yIG5vdAogICB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBpcyBjdXJyZW50LCBhbmQKICAgdGhlIG1vZHVsZSB3aWxsIHVzZSBpdCB0byBmaWd1cmUgb3V0IGhvdyB0byB1cGdyYWRlCiAgIGl0c2VsZiBpZiByZXF1ZXN0ZWQuCSAgIAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMS4zLjEnOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0SGVscCgpCiAgIFRoaXMgcmV0dXJucyBIVE1MIGluZm9ybWF0aW9uIG9uIHRoZSBtb2R1bGUuCiAgIFR5cGljYWxseSwgeW91J2xsIHdhbnQgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8KICAgdXNlIHRoZSBtb2R1bGUuCiAgIAogICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEhlbHAoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBNb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yKCkKICB7CiAgICByZXR1cm4gJ2NhbGd1eTEwMDAnOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yRW1haWwoKQogICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIE1vZHVsZQogICBBZG1pbiBpZiB5b3UgY2xpY2sgb24gdGhlICJBYm91dCIgbGluay4gSXQgaGVscHMgdXNlcnMKICAgb2YgeW91ciBtb2R1bGUgZ2V0IGluIHRvdWNoIHdpdGggeW91IHRvIHNlbmQgYnVnIHJlcG9ydHMsCiAgIHF1ZXN0aW9ucywgY2FzZXMgb2YgYmVlciwgYW5kL29yIGxhcmdlIHN1bXMgb2YgbW9uZXkuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogIHsKICAgIHJldHVybiAncm9iQHRlY2hjb20uZHluZG5zLm9yZyc7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRDaGFuZ2VMb2coKQogICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIG1vZHVsZQogICBBZG1pbiBpZiB5b3UgY2xpY2sgb24gdGhlIEFib3V0IGxpbmsuIEl0IGhlbHBzIHVzZXJzCiAgIGZpZ3VyZSBvdXQgd2hhdCdzIGNoYW5nZWQgYmV0d2VlbiByZWxlYXNlcy4KICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSXNQbHVnaW5Nb2R1bGUoKQogICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIHVwb24KICAgd2hldGhlciB1c2VycyBjYW4gaW5jbHVkZSB0aGUgbW9kdWxlIGluIGEgcGFnZSBvcgogICB0ZW1wbGF0ZSB1c2luZyBhIHNtYXJ0eSB0YWcgb2YgdGhlIGZvcm0KICAge2Ntc19tb2R1bGUgbW9kdWxlPSdDdXN0b21Db250ZW50JyBwYXJhbTE9dmFsIHBhcmFtMj12YWwuLi59CgkgICAKICAgSWYgeW91ciBtb2R1bGUgZG9lcyBub3QgZ2V0IGluY2x1ZGVkIGluIHBhZ2VzIG9yCiAgIHRlbXBsYXRlcywgcmV0dXJuICJmYWxzZSIgaGVyZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSGFzQWRtaW4oKQogICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBib29sZWFuIHZhbHVlLCBkZXBlbmRpbmcgb24KICAgd2hldGhlciB5b3VyIG1vZHVsZSBhZGRzIGFueXRoaW5nIHRvIHRoZSBBZG1pbiBhcmVhIG9mCiAgIHRoZSBzaXRlLiBGb3IgdGhlIHJlc3Qgb2YgdGhlc2UgY29tbWVudHMsIEknbGwgYmUgY2FsbGluZwogICB0aGUgYWRtaW4gcGFydCBvZiB5b3VyIG1vZHVsZSB0aGUgIkFkbWluIFBhbmVsIiBmb3IKICAgd2FudCBvZiBhIGJldHRlciB0ZXJtLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEhhc0FkbWluKCkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICAgSWYgeW91ciBtb2R1bGUgZG9lcyBoYXZlIGFuIEFkbWluIFBhbmVsLCB5b3UKICAgY2FuIGhhdmUgaXQgcmV0dXJuIGEgZGVzY3JpcHRpb24gc3RyaW5nIHRoYXQgZ2V0cyBzaG93bgogICBpbiB0aGUgQWRtaW4gU2VjdGlvbiBwYWdlIHRoYXQgY29udGFpbnMgdGhlIG1vZHVsZS4KICAgCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RGVwZW5kZW5jaWVzKCkKICAgWW91ciBtb2R1bGUgbWF5IG5lZWQgYW5vdGhlciBtb2R1bGUgdG8gYWxyZWFkeSBiZSBpbnN0YWxsZWQKICAgYmVmb3JlIHlvdSBjYW4gaW5zdGFsbCBpdC4KICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZAogICBtaW5pbXVtIHZlcnNpb24gbnVtYmVycyB0aGF0IHRoaXMgbW9kdWxlIHJlcXVpcmVzLgogICAKICAgSXQgc2hvdWxkIHJldHVybiBhbiBoYXNoLCBlZy4KICAgcmV0dXJuIGFycmF5KCdzb21lbW9kdWxlJz0+JzEuMCcsICdvdGhlcm1vZHVsZSc9PicxLjEnKTsKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIHJldHVybiBhcnJheSgnRnJvbnRFbmRVc2Vycyc9PicwLjAuMScpOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSW5zdGFsbCgpCiAgIFdoZW4geW91ciBtb2R1bGUgaXMgaW5zdGFsbGVkLCB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZQogICBzZXR1cC4gVHlwaWNhbCB0aGluZ3MgdGhhdCBoYXBwZW4gaGVyZSBhcmUgdGhlIGNyZWF0aW9uCiAgIGFuZCBwcmVwb3B1bGF0aW9uIG9mIGRhdGFiYXNlIHRhYmxlcywgZGF0YWJhc2Ugc2VxdWVuY2VzLAogICBwZXJtaXNzaW9ucywgcHJlZmVyZW5jZXMsIGV0Yy4KICAgCiAgIFRoaXMgZXhhbXBsZSBjcmVhdGVzIGEgU2tlbGV0b24gZGF0YWJhc2UgdGFibGUgYW5kCiAgIHNlcXVlbmNlLCBpdCBjcmVhdGVzIHRoZSAiVXNlIFNrZWxldG9uIiBwZXJtaXNzaW9uLAogICBhbmQgc2V0cyB0aGUgIlNpbmcgTG91ZGx5IiBwcmVmZXJlbmNlLgogICAKICAgVGhlIGRhdGFiYXNlIGlzIG5vdCBhY3R1YWxseSB1c2VkIGluIHRoaXMgZXhhbXBsZTsKICAgY2hlY2sgYW55IG9uZSBvZiB0aGUgb3RoZXIgbW9kdWxlcyBpZiB5b3Ugd2FudCB0byBzZWUKICAgbWV0aG9kIGNvZGUgdGhhdCB1c2VzIHRoZSBkYXRhYmFzZS4KICAgCiAgIEZvciBpbmZvcm1hdGlvbiBvbiB0aGUgY3JlYXRpb24gb2YgZGF0YWJhc2UgdGFibGVzLAogICBjaGVjayBvdXQgdGhlIEFET0RCIERhdGEgRGljdGlvbmFyeSBwYWdlIGF0CiAgIGh0dHA6Ly9waHBsZW5zLmNvbS9sZW5zL2Fkb2RiL2RvY3MtZGF0YWRpY3QuaHRtCiAgIAogICBUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSAiZmFsc2UiIGluIGNhc2Ugb2YgYW55IGVycm9yLAogICBhbmQgQ01TIHdpbGwgbm90IGNvbnNpZGVyIHRoZSBtb2R1bGUgaW5zdGFsbGVkLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEluc3RhbGwoKQogIHsKICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZQogIH0KCiAgCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgQWZ0ZXIgaW5zdGFsbGF0aW9uLCB0aGVyZSBtYXkgYmUgdGhpbmdzIHlvdSB3YW50IHRvCiAgIGNvbW11bmljYXRlIHRvIHlvdXIgYWRtaW4uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCiAgIHN0cmluZyB3aGljaCB3aWxsIGJlIGRpc3BsYXllZC4KICAgCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7CiAgfQoKICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgIEFmdGVyIHJlbW92aW5nIGEgbW9kdWxlLCB0aGVyZSBtYXkgYmUgdGhpbmdzIHlvdSB3YW50IHRvCiAgIGNvbW11bmljYXRlIHRvIHlvdXIgYWRtaW4uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCiAgIHN0cmluZyB3aGljaCB3aWxsIGJlIGRpc3BsYXllZC4KICAgCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwogIH0KICAKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVXBncmFkZSgpCiAgIElmIHlvdXIgbW9kdWxlIHZlcnNpb24gbnVtYmVyIGRvZXMgbm90IG1hdGNoIHRoZSB2ZXJzaW9uCiAgIG51bWJlciBvZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSwgdGhlIENNUyBBZG1pbiB3aWxsIGdpdmUKICAgeW91IGEgY2hhbmNlIHRvIHVwZ3JhZGUgdGhlIG1vZHVsZS4gVGhpcyBpcyB0aGUgZnVuY3Rpb24KICAgdGhhdCBhY3R1YWxseSBoYW5kbGVzIHRoZSB1cGdyYWRlLgogICBJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgdXBncmFkZXMgaW5jcmVtZW50YWxseSwKICAgc28geW91IGNvdWxkIHVwZ3JhZGUgZnJvbSB2ZXJzaW9uIDAuMC4xIHRvIDEwLjUuNyB3aXRoCiAgIGEgc2luZ2xlIGNhbGwuIEZvciBhIGdyZWF0IGV4YW1wbGUgb2YgdGhpcywgc2VlIHRoZSBOZXdzCiAgIG1vZHVsZSBpbiB0aGUgc3RhbmRhcmQgQ01TIGluc3RhbGwuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVXBncmFkZSgkb2xkdmVyc2lvbiwgJG5ld3ZlcnNpb24pCiAgewogICAgLy8gbm90aGluZyB0byBkbyBoZXJlCiAgfQogIAoJCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsKCkKICAgU29tZXRpbWVzLCBhbiBleGNlcHRpb25hbGx5IHVuZW5saWdodGVuZWQgb3IgaWdub3JhbnQKICAgYWRtaW4gd2lsbCB3aXNoIHRvIHVuaW5zdGFsbCB5b3VyIG1vZHVsZS4gV2hpbGUgaXQKICAgd291bGQgYmUgYmVzdCB0byBsYXkgaW50byB0aGVzZSBpZGlvdHMgd2l0aCBhIGNsdWVzdGljaywKICAgd2Ugd2lsbCBkbyB0aGUgbWFnbmFuaW1vdXMgdGhpbmcgYW5kIHJlbW92ZSB0aGUgbW9kdWxlCiAgIGFuZCBjbGVhbiB1cCB0aGUgZGF0YWJhc2UsIHBlcm1pc3Npb25zLCBhbmQgcHJlZmVyZW5jZXMKICAgdGhhdCBhcmUgc3BlY2lmaWMgdG8gaXQuCiAgIFRoaXMgaXMgdGhlIG1ldGhvZCB3aGVyZSB3ZSBkbyB0aGlzLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVuaW5zdGFsbCgpCiAgewogICAgLy8gbm90aGluZyB0byBkbyBoZXJlCiAgfQoKCiAgICAgICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfdGVzdGlwKCRyYW5nZSwkaXApCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gbWF0Y2ggYW4gSVAgYWRkcmVzcyBhZ2FpbnN0IGFuIAogICBhZGRyZXNzIHJhbmdlIHNwZWNpZmljYXRpb24uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX3Rlc3RpcCgkcmFuZ2UsJGlwKSAKICB7CiAgICAkcmVzdWx0ID0gMTsKCiAgICAjIElQIFBhdHRlcm4gTWF0Y2hlcgogICAgIyBKLkFkYW1zIDxqbmFAcmV0aW5hLm5ldD4KICAgICMKICAgICMgTWF0Y2hlczoKICAgICMKICAgICMgeHh4Lnh4eC54eHgueHh4ICAgICAgICAoZXhhY3QpCiAgICAjIHh4eC54eHgueHh4Llt5eXktenp6XSAgKHJhbmdlKQogICAgIyB4eHgueHh4Lnh4eC54eHgvbm4gICAgKG5uID0gIyBiaXRzLCBjaXNjbyBzdHlsZSAtLSBpLmUuIC8yNCA9IGNsYXNzIEMpCiAgICAjCiAgICAjIERvZXMgbm90IG1hdGNoOgogICAgIyB4eHgueHh4Lnh4eC54eFt5eXktenp6XSAgKHJhbmdlLCBwYXJ0aWFsIG9jdGV0cyBub3Qgc3VwcG9ydGVkKQoKICAgIGlmIChlcmVnKCIoWzAtOV0rKVwuKFswLTldKylcLihbMC05XSspXC4oWzAtOV0rKS8oWzAtOV0rKSIsJHJhbmdlLCRyZWdzKSkgewoKICAgICAgIyBwZXJmb3JtIGEgbWFzayBtYXRjaAogICAgICAkaXBsID0gaXAybG9uZygkaXApOwogICAgICAkcmFuZ2VsID0gaXAybG9uZygkcmVnc1sxXSAuICIuIiAuICRyZWdzWzJdIC4gIi4iIC4gJHJlZ3NbM10gLiAiLiIgLiAkcmVnc1s0XSk7CiAgICAgIAogICAgICAkbWFza2wgPSAwOwogICAgICAKICAgICAgZm9yICgkaSA9IDA7ICRpPCAzMTsgJGkrKykgewoJaWYgKCRpIDwgJHJlZ3NbNV0tMSkgewoJICAkbWFza2wgPSAkbWFza2wgKyBwb3coMiwoMzAtJGkpKTsKCX0KICAgICAgfQogICAgICAKICAgICAgaWYgKCgkbWFza2wgJiAkcmFuZ2VsKSA9PSAoJG1hc2tsICYgJGlwbCkpIHsKCXJldHVybiAxOwogICAgICB9IGVsc2UgewoJcmV0dXJuIDA7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIAogICAgICAjIHJhbmdlIGJhc2VkCiAgICAgICRtYXNrb2N0cyA9IHNwbGl0KCJcLiIsJHJhbmdlKTsKICAgICAgJGlwb2N0cyA9IHNwbGl0KCJcLiIsJGlwKTsKICAgICAgCiAgICAgICMgcGVyZm9ybSBhIHJhbmdlIG1hdGNoCiAgICAgIGZvciAoJGk9MDsgJGk8NDsgJGkrKykgewoJaWYgKGVyZWcoIlxbKFswLTldKylcLShbMC05XSspXF0iLCRtYXNrb2N0c1skaV0sJHJlZ3MpKSB7CgkgIGlmICggKCRpcG9jdHNbJGldID4gJHJlZ3NbMl0pIHx8ICgkaXBvY3RzWyRpXSA8ICRyZWdzWzFdKSkgewoJICAgICRyZXN1bHQgPSAwOwoJICB9Cgl9CgllbHNlCgkgIHsKCSAgICBpZiAoJG1hc2tvY3RzWyRpXSA8PiAkaXBvY3RzWyRpXSkgewoJICAgICAgJHJlc3VsdCA9IDA7CgkgICAgfQoJICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEEgZnVuY3Rpb24gdG8gYWRkIGFuIGFzc29jaWF0aW9uIHRvIGFuIGFycmF5CiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX2FkZEFycmF5KCYkYXJyYXksICRrZXksICR2YWwpCiAgewogICAgJHRtcCA9IGFycmF5KCRrZXkgPT4gJHZhbCk7CiAgICAkYXJyYXkgPSBhcnJheV9tZXJnZSgkYXJyYXksJHRtcCk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgQSBmdW5jdGlvbiB0byBldmFsdWF0ZSBwYXJhbWV0ZXJzIGFnYWluc3QgY3VycmVudCB1c2VyIHNldHRpbmdzCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX2V2YWx1YXRlKCYkcGFybXMpCiAgewogICAgJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwogICAgaWYoICEkbW9kdWxlICkgcmV0dXJuIEZBTFNFOwoKICAgIC8vIGhlcmUgd2UgY2hlY2sgdGhlIHBlcm1pc3Npb25zLCBldGMuCiAgICAkdmFsaWQgPSAwOwogICAgJHVpZCA9ICRtb2R1bGUtPkxvZ2dlZEluSWQoKTsKICAgIGlmKCBpc3NldCggJHBhcm1zWydpcCddICkgKQogICAgICB7Cglmb3JlYWNoKCAkcGFybXNbJ2lwJ10gYXMgJGlwICkKCXsKCSAgaWYoICR0aGlzLT5fdGVzdGlwKCAkaXAsIGdldGVudigiUkVNT1RFX0FERFIiICkgKSApCgkgICAgewoJICAgICAgLy8gdmFsaWQgaXAKCSAgICAgICR2YWxpZCA9IDE7CgkgICAgICBicmVhazsKCSAgICB9Cgl9CiAgICAgIH0KICAgIGlmKCAkbW9kdWxlLT5Mb2dnZWRJbigpICkKICAgICAgewoJaWYoICR2YWxpZCA9PSAwICYmIGlzc2V0KCAkcGFybXNbJ2dyb3VwJ10gKSApCgkgIHsKCSAgICBmb3JlYWNoKCAkcGFybXNbJ2dyb3VwJ10gYXMgJGcgKSAKCSAgICB7CgkgICAgICAkZ2lkID0gJG1vZHVsZS0+R2V0R3JvdXBJRCgkZyk7CgkgICAgICBpZiggJG1vZHVsZS0+TWVtYmVyT2ZHcm91cCgkdWlkLCAkZ2lkKSApCgkJewoJCSAgLy8geWVwLi4uIGhlJ3MgdmFsaWQKCQkgICR2YWxpZCA9IDE7CgkJICBicmVhazsKCQl9CgkgICAgfQoJICB9CglpZiggJHZhbGlkID09IDAgJiYgaXNzZXQoICRwYXJtc1sndXNlciddICkgKQoJICB7CgkgICAgZm9yZWFjaCggJHBhcm1zWyd1c2VyJ10gYXMgJHUgKQoJICAgIHsKCSAgICAgIGlmKCBzdHJjYXNlY21wKCR1LCRtb2R1bGUtPkxvZ2dlZEluTmFtZSgpKSA9PSAwICkKCQl7CgkJICAvLyB5ZXAuLi4gaGUncyB2YWxpZAoJCSAgJHZhbGlkID0gMTsKCQkgIGJyZWFrOwoJCX0KCSAgICB9CgkgIH0KCWlmKCAkdmFsaWQgPT0gMCAmJiBpc3NldCggJHBhcm1zWydsb2dnZWRpbiddICkgKQoJICB7CgkgICAgJHZhbGlkID0gMTsKCSAgfQogICAgICB9CgogICAgaWYoICR2YWxpZCA9PSAwICkgcmV0dXJuIEZBTFNFOwogICAgcmV0dXJuIFRSVUU7CiAgfQoKICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBFZGl0IHRoZSBjb250ZW50IGFmdGVyIHJlbmRlcmluZwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIENvbnRlbnRQb3N0UmVuZGVyKCYkY29udGVudCkKICB7CiAgICAkbW9kdWxlID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CiAgICBpZiggISRtb2R1bGUgKQogICAgICB7CgkvLyBjb3VsZG4ndCBnZXQgYSB1c2VyaWQgaW5zdGFuY2UsIGRvIG5vdGhpbmcKCXJldHVybjsKICAgICAgfQoKICAgIGlmKCAkdGhpcy0+c3Vic3RpdHV0ZV9jb250ZW50ICE9IHRydWUgKQogICAgICB7CgkvLyB3ZSBjYW4gbGVhdmUgdGhlIHBhZ2UgYXMgaXMgZm9yIG5vdyBJIGd1ZXNzCi8vIAkkY29udGVudD1wcmVnX3JlcGxhY2UoJHRoaXMtPnN0YXJ0X21hcmtlcl9yZWdleHAsIiIsJGNvbnRlbnQpOwovLyAJJGNvbnRlbnQ9cHJlZ19yZXBsYWNlKCR0aGlzLT5lbmRfbWFya2VyLCIiLCRjb250ZW50KTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIHN0YXJ0IHByb2Nlc3NpbmcgdGFncwogICAgJGJlZm9yZXRhZyA9IC0xOwogICAgJGFmdGVydGFnICA9IC0xOwogICAgJGV4cGVjdCA9IDA7CiAgICAkbG9vcCA9IDA7CiAgICAkaW5jbHVkZV9zdGFydCA9IC0xOwogICAgJGluY2x1ZGVfZW5kID0gLTE7CiAgICAkcG9zID0gMDsKICAgIHdoaWxlKCAkbG9vcCA8IDE1MCApIAogICAgICB7CgkvLyBpbmNyZW1lbnQgYSBsb29wIGNvdW50ZXIgKGF2b2lkIGVuZGxlc3MgbG9vcHMpCgkkbG9vcCsrOwoKCS8vIGZpbmQgdGhlIHN0YXJ0IG9mIHRoZSB0YWcKCSR0YWdfc3RhcnRwb3MgPSBzdHJwb3MoJGNvbnRlbnQsICR0aGlzLT5zdGFydF9tYXJrZXIsJHBvcyk7CglpZiggJHRhZ19zdGFydHBvcyA9PSBmYWxzZSApIHJldHVybjsKCgkvLyBub3cgaGF2ZSB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIG1hcmtlcgoJJHRhZ19lbmRwb3MgPSBzdHJwb3MoJGNvbnRlbnQsJHRoaXMtPmVuZF9tYXJrZXIsJHRhZ19zdGFydHBvcyk7CgkkdGFnX2VuZHBvcyArPSBzdHJsZW4oJHRoaXMtPmVuZF9tYXJrZXIpOwoKCS8vIGFuZCBnZXQgdGhlIGVudGlyZSB0YWcKCSR0YWcgPSB0cmltKHN1YnN0cigkY29udGVudCwkdGFnX3N0YXJ0cG9zLCR0YWdfZW5kcG9zLSR0YWdfc3RhcnRwb3MpKTsKCgkvLyByZW1vdmUgdGhlIHN0YXJ0IHRhZyBhbmQgZW5kIHRhZwoJJHN0ciA9IHN1YnN0cigkdGFnLHN0cmxlbigkdGhpcy0+c3RhcnRfbWFya2VyKSk7Cgkkc3RyID0gdHJpbShzdWJzdHIoJHN0ciwwLHN0cmxlbigkc3RyKS1zdHJsZW4oJHRoaXMtPmVuZF9tYXJrZXIpKSk7CgkkZGF0YSA9IHByZWdfc3BsaXQoJy9cXHMrLycsJHN0cik7CglpZiggY291bnQoJGRhdGEpID09IDAgKQoJICB7CgkgICAgLy8gYW4gZXJyb3Igb2NjdXJyZWQgaGVyZQoJICAgIHJldHVybjsKCSAgfQoKCS8vIHBhcnNlIHRoZSBjb21tYW5kIGludG8gY29tbW5kIGFuZCBwYXJhbWV0ZXJzCgkkY21kID0gYXJyYXlfc2hpZnQoJGRhdGEpOwoJJHBhcm1zID0gYXJyYXkoKTsKCWZvcmVhY2goICRkYXRhIGFzICRkICkKCSAgewoJICAgICRvcHRzID0gc3BsaXQoIjsiLCRkKTsKCSAgICBmb3JlYWNoKCAkb3B0cyBhcyAkb3B0ICkgewoJICAgICAgJHAgPSBzdHJwb3MoJG9wdCwnPScpOwoJICAgICAgaWYoICRwICE9IDAgKQoJCXsKCQkgICRrID0gc3Vic3RyKCRvcHQsMCwkcCk7CgkJICAkdiA9IHN1YnN0cigkb3B0LCRwKzEpOwoJCSAgJHZhbHMgPSBzcGxpdCgiLCIsJHYpOwoJCSAgJHBhcm1zWyRrXSA9ICR2YWxzOwoJCX0KCSAgICAgIGVsc2UKCQkkcGFybXNbJG9wdF0gPSAxOwoJICAgIH0KCSAgfQoJCgkvLyBhbmQgbm93IGhhbmRsZSB0aGUgY29tbWFuZAoJc3dpdGNoKCAkY21kICkKCSAgewoJICBjYXNlICdzdGFydGlmJzoKCSAgY2FzZSAnc3RhcnQnOgoJICAgIHsKCSAgICAgIGlmKCAkZXhwZWN0ICE9IDAgKQoJCXsKCQkgIC8vIGVycm9yIGhlcmUsIHdlJ3JlIGV4cGVjdGluZyBzb21ldGluZwoJCSAgcmV0dXJuOwoJCX0KCSAgICAgIC8vIGV2YWx1YXRlIHRoZSBwYXJhbWV0ZXJzLCB0byBzZWUgaWYgd2UgbWF0Y2hlbQoJICAgICAgaWYoICR0aGlzLT5fZXZhbHVhdGUoICRwYXJtcyApICkgCgkJewoJCSAgLy8gY29uZGl0aW9ucyBwYXNzZWQsIG5vdyB3ZSBoYXZlIHRvIGluY2x1ZGUgZXZlcnl0aGluZyB0aWxsIHRoZSBuZXh0CgkJICAvLyB0YWcgd2hpY2ggaXMgZWl0aGVyIGFuIGVuZGlmIG9yIGFuIGVsc2UKCQkgICRpbmNsdWRlX3N0YXJ0ID0gJHRhZ19lbmRwb3M7CgkJfQoJICAgICAgLy8gZ2V0IHJlYWR5IHRvIGNvbnRpbnVlCgkgICAgICAkYmVmb3JldGFnID0gJHRhZ19zdGFydHBvczsKCSAgICAgICRleHBlY3QgPSAyOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBjYXNlICdlbHNlJzoKCSAgICB7CgkgICAgICBpZiggJGV4cGVjdCAhPSAxICYmICRleHBlY3QgIT0gMiApCgkJewoJCSAgLy8gZXJyb3IgaGVyZSwgd2UncmUgZXhwZWN0aW5nIGEgY2VydGFpbiBzb21ldGhpbmcKCQkgIHJldHVybjsKCQl9CgkgICAgICBpZiggJGluY2x1ZGVfc3RhcnQgPT0gLTEgKSAKCQl7CgkJICAvLyB3ZSBmYWlsZWQgdGhlIGxhc3QgY29uZGl0aW9uIAoJCSAgJGluY2x1ZGVfc3RhcnQgPSAkdGFnX2VuZHBvczsKCQl9CgkgICAgICBlbHNlIAoJCXsKCQkgIC8vIHdlIHBhc3NlZCB0aGUgbGFzdCBjb25kaXRpb24gc28gcmVjb3JkIGFuZCBlbmQgcG9zaXRpb24KCQkgICRpbmNsdWRlX2VuZCA9ICR0YWdfc3RhcnRwb3M7CgkJfQoKCSAgICAgIC8vIGdldCByZWFkeSB0byBjb250aW51ZQoJICAgICAgJGV4cGVjdCA9IDI7CgkgICAgICBicmVhazsKCSAgICB9CgkgIGNhc2UgJ2VuZCc6CgkgIGNhc2UgJ2VuZGlmJzoKCSAgICB7CgkgICAgICBpZiggJGV4cGVjdCAhPSAxICYmICRleHBlY3QgIT0gMiApCgkJewoJCSAgLy8gZXJyb3IgaGVyZSwgd2UncmUgZXhwZWN0aW5nIGEgY2VydGFpbiBzb21ldGhpbmcKCQkgIHJldHVybjsKCQl9CgoJICAgICAgaWYoICRpbmNsdWRlX2VuZCA9PSAtMSAmJiAkaW5jbHVkZV9zdGFydCAhPSAtMSApCgkJewoJCSAgLy8gbm93IGNhdGNoIHRoZSBlbmQgcG9zaXRpb24gb2Ygd2hhdCB3ZSBoYXZlIHRvIGluY2x1ZGUKCQkgICRpbmNsdWRlX2VuZCA9ICR0YWdfc3RhcnRwb3M7CgkJfQoJICAgICAgJGFmdGVydGFnID0gJHRhZ19lbmRwb3M7CgoJICAgICAgLy8gZ2V0IHJlYWR5IHRvIGNvbnRpbnVlCgkgICAgICAkZXhwZWN0ID0gMDsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgZGVmYXVsdDoKCSAgICB7CgkgICAgICAvLyB1bmtub3duIGNvbW1hbmQKCSAgICAgIHJldHVybjsKCSAgICB9CgkgIH0KCglpZiggJGJlZm9yZXRhZyAhPSAtMSAmJiAkYWZ0ZXJ0YWcgIT0gLTEgKQoJICB7CgkgICAgLy8gd2UgaGF2ZSBhIHdob2xlIHNlY3Rpb24gKGhvcGVmdWxseSkKCSAgICAkbmV3c3RhcnQgPSBzdWJzdHIoJGNvbnRlbnQsMCwkYmVmb3JldGFnKTsKCSAgICAkaW5jbHVkZSAgPSBzdWJzdHIoJGNvbnRlbnQsJGluY2x1ZGVfc3RhcnQsJGluY2x1ZGVfZW5kLSRpbmNsdWRlX3N0YXJ0KTsKCSAgICAkbmV3ZW5kICAgPSBzdWJzdHIoJGNvbnRlbnQsJGFmdGVydGFnKTsKCSAgICAkY29udGVudCA9ICRuZXdzdGFydC4kaW5jbHVkZS4kbmV3ZW5kOwoJICAgICRpbmNsdWRlX3N0YXJ0ID0gLTE7CgkgICAgJGluY2x1ZGVfZW5kID0gLTE7CgkgICAgJGJlZm9yZXRhZyA9IC0xOwoJICAgICRhZnRlcnRhZyA9IC0xOwoJICAgICRwb3MgPSAwOwoJICB9CgllbHNlCgkgIHsKCSAgICAkcG9zID0gJHRhZ19lbmRwb3M7CgkgIH0KICAgICAgfQogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybl9pZCkKICAgVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGlmIHlvdXIgbW9kdWxlCiAgIGlzIGEgcGx1Zy1pbiB0eXBlIG1vZHVsZS4KCSAgIAogICBJbiBnZW5lcmFsLCB5b3UnbGwgd2FudCB0byBjYWxsIHZhcmlvdXMgZGlmZmVyZW50CiAgIG1ldGhvZHMsIGRlcGVuZGluZyB1cG9uIHRoZSByZXF1ZXN0ZWQgImFjdGlvbi4iCgkgICAKICAgVGhlcmUgYXJlIHR3byBidWlsdC1pbiBhY3Rpb25zOiAiZGVmYXVsdCIgd2hpY2ggZ2V0cwogICBjYWxsZWQgaWYgdGhlIG1vZHVsZSBpcyBhY2Nlc3NlZCBmcm9tIGEgcGFnZSBvciB0ZW1wbGF0ZSwKICAgYW5kICJkZWZhdWx0YWRtaW4iIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gdGhlIEFkbWluCiAgIHBhbmVsLgoJICAgCiAgIFRoZSBBY3Rpb24gY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhIGRpZmZlcmVudAogICBhY3Rpb24gZWl0aGVyIGluIHlvdXIgdGFnLCBlLmcuLAogICB7Y21zX21vZHVsZSBtb2R1bGU9J1NrZWxldG9uJyBhY3Rpb249J3NvbWV0aGluZyd9CiAgIG9yIGJ5IHBhc3NpbmcgaXQgaW4gYSBsaW5rIGNyZWF0ZSBieSB0aGUgQ3JlYXRlTGluawogICBtZXRob2QuIE1vcmUgb24gdGhhdCBjYW4gYmUgc2VlbiBiZWxvdyBpbiB0aGUKICAgRGlzcGxheUFkbWluTmF2IG1ldGhvZC4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBEb0FjdGlvbigkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5faWQ9LTEpCiAgewogICAgc3dpdGNoICgkYWN0aW9uKQogICAgICB7CiAgICAgIGNhc2UgJ2RlZmF1bHQnOgoJewoJICAvLyB0aGlzIGlzIHRoZSBwbHVnLWluIHNpZGUsIGkuZS4sIG5vbi1BZG1pbgoJICAkdGhpcy0+c3Vic3RpdHV0ZV9jb250ZW50ID0gdHJ1ZTsKCSAgYnJlYWs7Cgl9CiAgICAgIH0KICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgICAgCiAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gZGlzcGxheQogICBlcnJvciBpbmZvcm1hdGlvbiBvbiB0aGUgYWRtaW4gc2lkZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgICBpZiAoJG1lc3NhZ2UgIT0gJycpCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ21lc3NhZ2UnLCAkbWVzc2FnZSk7CiAgICAgIH0KICAgICAgCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZXJyb3IudHBsJyk7CiAgfQp9Cgo/Pgo=]]></data>
  </file>
  <file>
    <filename>index.html</filename>
    <isdir>0</isdir>
    <data><![CDATA[]]></data>
  </file>
  <file>
    <filename>lang/</filename>
    <isdir>1</isdir>
  </file>
  <file>
    <filename>lang/en_US.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0N1c3RvbSBDb250ZW50IE1vZHVsZSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJyc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1RoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgZGlmZmVyZW50IGNvbnRlbnQgYnkgZ3JvdXAgb3IgdXNlciBuYW1lJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD48bGk+VmVyc2lvbiAxLjAuIDE0IFNlcHRlbWJlciAyMDA1LiBJbml0aWFsIFJlbGVhc2UuPC9saT48L3VsPgo8dWw+CjxsaT5WZXJzaW9uIDEuMS4gMTUgU2VwdGVtYmVyIDIwMDUuIEFkZGVkIHN0YXJ0aWYvZWxzZS9lbmRpZiwgYW5kIHNlYXJjaCB0aHJvdWdoIG11bHRpcGxlIGdyb3VwcyBhbmQgdXNlcnMuPC9saT4KPGxpPlZlcnNpb24gMS4yLiAyNiBTZXB0ZW1iZXIgMjAwNS4gQWRkZWQgbG9nZ2VkaW4gb3B0aW9uYWwgcGFyYW1ldGVyPC9saT4KPGxpPlZlcnNpb24gMS4zICAyNSBPY3RvYmVyICAgMjAwNS4gQ2hhbmdlZCB0byB1c2UgRnJvbnRFbmRVc2VycyBpbnN0ZWFkIG9mIFVzZXJJRDwvbGk+CjxsaT5WZXJzaW9uIDEuMy4xIDA4IE5vdmVtYmVyIDIwMDUuIFZlcnkgbWlub3IgYnVnZml4IHRvIHRoZSBwYXJhbWV0ZXIgcGFyc2luZzwvbGk+CjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+VGhpcyBtb2R1bGUsIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFVzZXJJRCBtb2R1bGUgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBwYWdlIHRoYXQgd2lsbCBsb29rIGRpZmZlcmVudCBkZXBlbmRpbmcgdXBvbiB0aGUgcGVyc29uIHRoYXQgbG9va3MgYXQgaXQuICBZb3UgY2FuIHNwZWNpZnkgZGlmZmVyZW50IGNvbnRlbnQgZm9yIGNlcnRhaW4gdXNlcnMsIG9yIG1lbWJlcnMgb2YgYSBjZXJ0YWluIGdyb3VwLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPlRvIHVzZSBpdCB5b3UgcGxhY2UgdGhlIHRhZyB7Y21zX21vZHVsZSBtb2R1bGU9Q3VzdG9tQ29udGVudH0gaW50byB5b3VyIHBhZ2UsIGFuZCB0aGVuIGJlbG93IHRoYXQgeW91IHBsYWNlIHRoZSBjb250ZW50IHlvdSB3YW50IGlzb2xhdGVkIHRvIHNwZWNpZmljIHVzZXJzIGluIGdyb3VwcyBpbiBzcGVjaWFsbHkgZm9ybWF0dGVkIGNvbW1lbnQgdGFncy4gIGkuZTo8L3A+CjxwcmU+CntjbXNfbW9kdWxlIG1vZHVsZT1DdXN0b21Db250ZW50fQombHQ7IS0tY3VzdG9tQ29udGVudDogc3RhcnRpZiBncm91cD10ZXN0ZXJzLGFkbWlucyAtLSZndDsKJmx0O0gxJmd0O1RoaXMgY29udGVudCBpcyBvbmx5IGF2YWlsYWJsZSB0byBsb2dnZWQgaW4gdGVzdGVycyBhbmQgYW5kIGFkbWlucyZsdDsvSDEmZ3Q7CiZsdDshLS1jdXN0b21Db250ZW50OiBlbHNlIC0tJmd0OwombHQ7SDEmZ3Q7VGhpcyBjb250ZW50IGlzIGF2YWlsYWJsZSB0byBldmVyeWJvZHkgZWxzZSZsdDsvSDEmZ3Q7CiZsdDshLS1jdXN0b21Db250ZW50OiBlbmRpZiAtLSZndDsKJmx0OyEtLWN1c3RvbUNvbnRlbnQ6IHN0YXJ0aWYgZ3JvdXA9dXNlcnMgLS0mZ3Q7CiZsdDtIMSZndDtUaGlzIGNvbnRlbnQgaXMgb25seSBhdmFpbGFibGUgdG8gbG9nZ2VkIGluIHVzZXJzICZsdDsvSDEmZ3Q7CiZsdDshLS1jdXN0b21Db250ZW50OiBlbmRpZiAtLSZndDsKPC9wcmU+CjxwPkF2YWlsYWJsZSBwYXJhbWV0ZXJzIGFyZSA8ZW0+aXA9bmV0d29yazEsbmV0d29yazI8L2VtPiwgPGVtPmdyb3VwPWdyb3VwMSxncm91cDI8L2VtPiBhbmQgPGVtPnVzZXI9dXNlcm5hbWUxLHVzZXJuYW1lMjwvZW0+PC9wPiAKPHVsPgo8bGk+PHA+PGVtPmlwPC9lbT4gLSB0ZXN0IGlmIHJlbW90ZSBpcCBtYXRjaGVzIGEgbmV0d29yayBvciBzdXBwbGllZCBpcCBhZGRyZXNzLiAgVmFsaWQgZm9ybWF0cyBhcmUgeHh4Lnh4eC54eHgueHh4IChleGFjdCksIHh4eC54eHgueHh4Llt5eXktenp6XSAocmFuZ2UpIGFuZCB4eHgueHh4Lnh4eC9ubiAobm4gPSAjIGJpdHMsIGkuZS4gIDE5Mi4xNjguMS4wLzI0KTwvcD48L2xpPgo8bGk+PHA+PGVtPmdyb3VwPC9lbT4gLSB0ZXN0IGlmIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIgaXMgYSBtZW1iZXIgb2YgYW55IG9mIHRoZSBzdXBwbGllZCBncm91cHM8L3A+PC9saT4KPGxpPjxwPjxlbT51c2VyPGVtPiAtIHRlc3QgaWYgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcm5hbWUgbWF0Y2hlcyBhbnkgb2YgdGhlIHN1cHBsaWVkIG9uZXM8L3A+PC9saT4KPGxpPjxwPjxlbT5sb2dnZWRpbjxlbT4gLSB0ZXN0IGlmIHRoZSBjdXJyZW50IHVzZXIgaXMgbG9nZ2VkIGluIG9yIG5vdC4vcD48L2xpPgo8L3VsPgo8cD5UZXN0cyBhcmUgZXZhbHVhdGVkIGluIGEgbG9naWNhbCBPUiBmYXNoaW9uIGluIG9yZGVyIGFzIGZvbGxvd3MgaXAgYWRkcmVzcywgZ3JvdXAsIGFuZCB1c2VyLiAgVGhlIGZpcnN0IHN1Y2Nlc3NmdWxsIHRlc3Qgd2lsbCByZXN1bHQgaW4gdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbmcgdG8gdHJ1ZTwvcD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwNSwgUm9iZXJ0IENhbXBiZWxsIDxhIGhyZWY9Im1haWx0bzpyb2JAdGVjaGNvbS5keW5kbnMub3JnIj4mbHQ7cm9iQHRlY2hjb20uZHluZG5zLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+Cic7Cj8+Cg==]]></data>
  </file>
</module>
