LyoKICogQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19UVVJLSVNILCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCU1FTlVJVEVNICJC/CZ5/GsgU2ltZ2VsZXIiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIkv8Juf8ayBTaW1nZWxlciIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICImTGlzdGUiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCglNRU5VSVRFTSAiJkF5cv1udP1s/SIsCQlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwpFTkQKCi8qCiBzaGVsbHZpZXcgYmFja2dyb3VuZCBtZW51CiovCk1FTlVfMDAyIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBQT1BVUCAiJkf2cvxu/G0iCgkgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICJC/CZ5/GsgU2ltZ2VsZXIiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgogICAgICAgICAgICBNRU5VSVRFTSAiS/wm5/xrIFNpbWdlbGVyIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJICAgIE1FTlVJVEVNICImTGlzdGUiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIiZBeXL9bnT9bP0iLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICImU2ltZ2VsZXJpIET8emVubGUiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZBZGEgR/ZyZSIsCTB4MzAJLyogY29sdW1uIDAgKi8KCSAgICBNRU5VSVRFTSAiJlT8cmUgR/ZyZSIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiJkJveXV0YSBH9nJlIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiJlphbWFuYSBH9nJlIiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICImT3RvbWF0aWsgRPx6ZW5sZSIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQoJICBFTkQKCSAgTUVOVUlURU0gIkl6Z2FyYXlhIFV5ZHVyIiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJZZW5pbGUiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJZYXD9/nT9ciIsCQlGQ0lETV9TSFZJRVdfSU5TRVJUCgkgIE1FTlVJVEVNICJL/XNheW9sIFlhcP3+dP1yIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJZZW5pIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJZZW5pICZEaXppbiIsCUZDSURNX1NIVklFV19ORVdGT0xERVIKCSAgICBNRU5VSVRFTSAiWWVuaSAmS/1zYXlvbCIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gItZ6ZWxsaWtsZXIiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKIHNoZWxsdmlldyBpdGVtIG1lbnUKKi8KTUVOVV9TSFZfRklMRSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIkEmcmH+dP1yIiwJCUZDSURNX1NIVklFV19FWFBMT1JFCgkgIE1FTlVJVEVNICImQeciLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImS2VzIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIksmb3B5YWxhIiwJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiS/1zYXlvbCBPJmx1/nR1ciIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCgkgIE1FTlVJVEVNICImU2lsIiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZZZW5pZGVuIEFkbGFuZP1yIiwJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIibWemVsbGlrbGVyIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIkRpemluZSBH9nphdCIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJUYW1hbSIsIDEsIDgwLCAxNzYsIDUwLCAxMiwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAi3XB0YWwiLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiJXMgSGFra/1uZGEiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIlRhbWFtIiwgSURPSywgMTUzLCAxMzMsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxMCwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgMzAsIDEwLCAxMzcsIDEwCiBMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKIExURVhUICJXaW5lJ/0gc2l6ZSBzdW5hbiBnZWxp/nRpcmljaWxlcjoiLCA5OCwgOCwgNTUsIDEzNywgMTAKfQoKU0hFTExfUlVOX0RMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyMjcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogSUNPTiAiIiwgMTIyOTcsIDcsIDExLCAxOCwgMjAsIFdTX1ZJU0lCTEUKIExURVhUICJIZXJoYW5naSBiaXIgcHJvZ3JhbSwgZGl6aW4sIGJlbGdlIHZleWEgSW50ZXJuZXQga2F5bmHw/SBzZedpbiB2ZSBXaW5lIHNpemluIGnnaW4gYedz/W4uIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIiZB5zoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiVGFtYW0iLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAi3XB0YWwiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICImR/Z6YXQuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgICAgICAvKiBjb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcgKi8KCUlEU19TSFZfQ09MVU1OMQkJIkRvc3lhIgoJSURTX1NIVl9DT0xVTU4yCQkiQm95dXQiCglJRFNfU0hWX0NPTFVNTjMJCSJU/HIiCglJRFNfU0hWX0NPTFVNTjQJCSJE/Hplbmxlbm1lIgoJSURTX1NIVl9DT0xVTU41CQki1npuaXRlbGlrbGVyIgoJSURTX1NIVl9DT0xVTU42CQkiQm95dXQiCglJRFNfU0hWX0NPTFVNTjcJCSJLdWxsYW79bGFiaWxpciBBbGFuIgoJSURTX1NIVl9DT0xVTU44CQkiQWQiCglJRFNfU0hWX0NPTFVNTjkJCSJB5/1rbGFtYWxhciIKCUlEU19TSFZfQ09MVU1OMTAJIlNhaGlwIgoJSURTX1NIVl9DT0xVTU4xMQkiR3J1cCIKCiAgICAgICAgLyogc3BlY2lhbCBmb2xkZXJzICovCglJRFNfREVTS1RPUAkJIk1hc2H8c3T8IgoJSURTX01ZQ09NUFVURVIJCSJCaWxnaXNheWFy/W0iCgogICAgICAgIC8qIGNvbnRleHQgbWVudXMgKi8KCUlEU19WSUVXX0xBUkdFCQkiQvwmefxrIFNpbWdlbGVyIgoJSURTX1ZJRVdfU01BTEwJCSJL/Cbn/GsgU2ltZ2VsZXIiCglJRFNfVklFV19MSVNUCQkiJkxpc3RlIgoJSURTX1ZJRVdfREVUQUlMUwkiJkF5cv1udP1s/SIKCUlEU19TRUxFQ1QJCSJTZeciCglJRFNfT1BFTgkJIkHnIgoKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICJZZW5pIGRpemluIG9sdf50dXJ1bGFt/XlvcjogRXJp/mltIGVuZ2VsbGVuZGkuIgoJSURTX0NSRUFURUZPTERFUl9DQVBUSU9OICJEaXppbiBvbHX+dHVybWEgc/1yYXP9bmRhIGhhdGEiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICJEb3N5YSBzaWxtZXlpIG9uYXlsYSIKCUlEU19ERUxFVEVGT0xERVJfQ0FQVElPTiAiRGl6aW4gc2lsbWV5aSBvbmF5bGEiCglJRFNfREVMRVRFSVRFTV9URVhUICInJTEnIPbwZXNpbmkgc2lsbWVrIGlzdGVkafBpbml6ZGVuIGVtaW4gbWlzaW5pej8iCglJRFNfREVMRVRFTVVMVElQTEVfVEVYVCAiQnUgJTEg9vBleWkgc2lsbWVrIGlzdGVkafBpbml6ZGVuIGVtaW4gbWlzaW5pej8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICIlMSBkb3N5YXP9bv1uIPx6ZXJpbmUgeWF6bWFrIGlzdGl5b3IgbXVzdW51ej8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJEb3N5YSDcemVyaW5lIFlhem1hef0gT25heWxhIgoKICAgICAgICAvKiBtZXNzYWdlIGJveCBzdHJpbmdzICovCiAgICAgICAgSURTX1JFU1RBUlRfVElUTEUgICAgICAgIlllbmlkZW4gQmH+bGF0IgogICAgICAgIElEU19SRVNUQVJUX1BST01QVCAgICAgICJXaW5kb3dzIFllbmlkZW4gQmH+bGF0bWEgdGFrbGl0IGVkaWxzaW4gbWk/IgogICAgICAgIElEU19TSFVURE9XTl9USVRMRSAgICAgICJPdHVydW11IEthcGF0IgogICAgICAgIElEU19TSFVURE9XTl9QUk9NUFQgICAgICJXaW5lIG90dXJ1bXVudXp1IGthcGF0bWFrIGlzdGVkafBpbml6ZGVuIGVtaW4gbWlzaW5pej8iCgogICAgICAgIC8qIHNoZWxsIGZvbGRlciBwYXRoIGRlZmF1bHQgdmFsdWVzICovCglJRFNfUFJPR1JBTVMgICAgICAgICAgICAgICAgIlN0YXJ0IE1lbnVcXFByb2dyYW1sYXIiCglJRFNfUEVSU09OQUwgICAgICAgICAgICAgICAgIkJlbGdlbGVyaW0iCglJRFNfRkFWT1JJVEVTICAgICAgICAgICAgICAgIlP9ayBLdWxsYW79bGFubGFyIgoJSURTX1NUQVJUVVAgICAgICAgICAgICAgICAgICJTdGFydCBNZW51XFxQcm9ncmFtbGFyXFxCYf5sYW5n/eciCglJRFNfUkVDRU5UICAgICAgICAgICAgICAgICAgIlJlY2VudCIKCUlEU19TRU5EVE8gICAgICAgICAgICAgICAgICAiU2VuZFRvIgoJSURTX1NUQVJUTUVOVSAgICAgICAgICAgICAgICJTdGFydCBNZW51IgoJSURTX01ZTVVTSUMgICAgICAgICAgICAgICAgICJCZWxnZWxlcmltXFxN/Hpp8GltIgoJSURTX01ZVklERU8gICAgICAgICAgICAgICAgICJCZWxnZWxlcmltXFxWaWR5b2xhcv1tIgoJSURTX0RFU0tUT1BESVJFQ1RPUlkgICAgICAgICJEZXNrdG9wIgoJSURTX05FVEhPT0QgICAgICAgICAgICAgICAgICJOZXRIb29kIgoJSURTX1RFTVBMQVRFUyAgICAgICAgICAgICAgICJUZW1wbGF0ZXMiCglJRFNfQVBQREFUQSAgICAgICAgICAgICAgICAgIkFwcGxpY2F0aW9uIERhdGEiCglJRFNfUFJJTlRIT09EICAgICAgICAgICAgICAgIlByaW50SG9vZCIKCUlEU19MT0NBTF9BUFBEQVRBICAgICAgICAgICAiTG9jYWwgU2V0dGluZ3NcXEFwcGxpY2F0aW9uIERhdGEiCglJRFNfSU5URVJORVRfQ0FDSEUgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxUZW1wb3JhcnkgSW50ZXJuZXQgRmlsZXMiCglJRFNfQ09PS0lFUyAgICAgICAgICAgICAgICAgIkNvb2tpZXMiCglJRFNfSElTVE9SWSAgICAgICAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxIaXN0b3J5IgoJSURTX1BST0dSQU1fRklMRVMgICAgICAgICAgICJQcm9ncmFtIEZpbGVzIgoJSURTX01ZUElDVFVSRVMgICAgICAgICAgICAgICJCZWxnZWxlcmltXFxSZXNpbWxlcmltIgoJSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICAgICJQcm9ncmFtIEZpbGVzXFxDb21tb24gRmlsZXMiCglJRFNfQ09NTU9OX0RPQ1VNRU5UUyAgICAgICAgIkJlbGdlbGVyIgoJSURTX0FETUlOVE9PTFMgICAgICAgICAgICAgICJTdGFydCBNZW51XFxQcm9ncmFtbGFyXFxZ9m5ldGltc2VsIEFyYedsYXIiCglJRFNfQ09NTU9OX01VU0lDICAgICAgICAgICAgIkJlbGdlbGVyXFxN/Hpp8GltIgoJSURTX0NPTU1PTl9QSUNUVVJFUyAgICAgICAgICJCZWxnZWxlclxcUmVzaW1sZXJpbSIKCUlEU19DT01NT05fVklERU8gICAgICAgICAgICAiQmVsZ2VsZXJcXFZpZHlvbGFy/W0iCglJRFNfQ0RCVVJOX0FSRUEgICAgICAgICAgICAgIkxvY2FsIFNldHRpbmdzXFxBcHBsaWNhdGlvbiBEYXRhXFxNaWNyb3NvZnRcXENEIEJ1cm5pbmciCn0K