LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzLTIwMDQgUHVvdGkKICogQ29weXJpZ2h0IDIwMDYgQW50b25pbyBDb2RhenppCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfSVRBTElBTiwgU1VCTEFOR19ERUZBVUxUCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAiSWNvbmUgJkdyYW5kaSIsCUZDSURNX1NIVklFV19CSUdJQ09OCglNRU5VSVRFTSAiSWNvbmUgJlBpY2NvbGUiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCglNRU5VSVRFTSAiJkxpc3RhIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIiZEZXR0YWdsaSIsCQlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwpFTkQKCi8qCiBzaGVsbHZpZXcgYmFja2dyb3VuZCBtZW51CiovCk1FTlVfMDAyIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBQT1BVUCAiJlZpc3VhbGl6emEiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIkljb25lICZHcmFuZGkiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICJJY29uZSAmUGljY29sZSIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCSAgICBNRU5VSVRFTSAiJkxpc3RhIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJICAgIE1FTlVJVEVNICImRGV0dGFnbGkiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJEaXNwb25pICZJY29uZSIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiUGVyICZOb21lIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICJQZXIgJlRpcG8iLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIlBlciBEaSZtZW5zaW9uZSIsCTB4MzEJLyogLi4uICovCgkgICAgTUVOVUlURU0gIlBlciAmRGF0YSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAiJkRpc3BvbmkgQXV0b21hdGljYW1lbnRlIiwJRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiQWxsaW5lYSBJY29uZSIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiQWdnaW9ybmEiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJJbmNvbGxhIiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIkNyZWEgQ29sbGVnYW1lbnRvIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJOdW92byIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTnVvdmEgJkNhcnRlbGxhIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOdW92byBDbyZsbGVnYW1lbnRvIiwJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiUHJvcHJpZXTgIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICJFJnNwbG9yYSIsCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQoJICBNRU5VSVRFTSAiJkFwcmkiLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImVGFnbGlhIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZDb3BpYSIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkNyZWEgQ28mbGxlZ2FtZW50byIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCgkgIE1FTlVJVEVNICImQ2FuY2VsbGEiLAkJRkNJRE1fU0hWSUVXX0RFTEVURQoJICBNRU5VSVRFTSAiJlJpbm9taW5hIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImUHJvcHJpZXTgIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIlNmb2dsaWEgQ2FydGVsbGEiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkFubnVsbGEiLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSW5mb3JtYXppb25pIHN1ICVzIgpGT05UIDEwLCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDE1MywgMTMzLCA1MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTAsIDEwLCAxNCwgMTYKIExURVhUICIiLCAxMDAsIDMwLCAxMCwgMTM3LCAxMAogTFRFWFQgIiIsIDEwMSwgMzAsIDIyLCAxMzcsIDEwCiBMVEVYVCAiV2luZSDoIGRpc3BvbmliaWxlIGdyYXppZSBhOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIkRpZ2l0YXJlIGlsIG5vbWUgZGVsIHByb2dyYW1tYSwgZGVsbGEgY2FydGVsbGEsIGRlbCBkb2N1bWVudG8gbyBkZWxsYSByaXNvcnNhIGludGVybmV0LCBlIFdpbmUgbGEgYXByaXLgLiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImQXByaToiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiQW5udWxsYSIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkUmc3Bsb3JhLi4uIiwgMTIyODgsIDE3MCwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CgkvKgljb2x1bW5zIGluIHRoZSBzaGVsbHZpZXcJKi8KCUlEU19TSFZfQ09MVU1OMQkJIkZpbGUiCglJRFNfU0hWX0NPTFVNTjIJCSJEaW1lbnNpb25lIgoJSURTX1NIVl9DT0xVTU4zCQkiVGlwbyIKCUlEU19TSFZfQ09MVU1ONAkJIk1vZGlmaWNhdG8iCglJRFNfU0hWX0NPTFVNTjUJCSJBdHRyaWJ1dGkiCglJRFNfU0hWX0NPTFVNTjYJCSJTcGF6aW8iCglJRFNfU0hWX0NPTFVNTjcJCSJTcGF6aW8gZGlzcG9uaWJpbGUiCglJRFNfU0hWX0NPTFVNTjgJCSJOb21lIgoJSURTX1NIVl9DT0xVTU45CQkiQ29tbWVudGkiCgoJLyogc3BlY2lhbCBmb2xkZXIgKi8KCUlEU19ERVNLVE9QCQkiRGVza3RvcCIKCUlEU19NWUNPTVBVVEVSCQkiUmlzb3JzZSBkZWwgQ29tcHV0ZXIiCgoJLyogIGNvbnRleHQgbWVudXMgICovCglJRFNfVklFV19MQVJHRQkJIkljb25lICZHcmFuZGkiCglJRFNfVklFV19TTUFMTAkJIkljb25lICZQaWNjb2xlIgoJSURTX1ZJRVdfTElTVAkJIiZMaXN0YSIKCUlEU19WSUVXX0RFVEFJTFMJIiZEZXR0YWdsaSIKCUlEU19TRUxFQ1QJCSJTZWxlemlvbmUiCglJRFNfT1BFTgkJIkFwcmkiCgoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIkltcG9zc2liaWxlIGNyZWFyZSBsYSBjYXJ0ZWxsYTogQWNjZXNzbyBuZWdhdG8uIgoJSURTX0NSRUFURUZPTERFUl9DQVBUSU9OICJFcnJvcmUgZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVsbGEgY2FydGVsbGEiCglJRFNfREVMRVRFSVRFTV9DQVBUSU9OICJDb25mZXJtYXJlIGxhIGNhbmNlbGxhemlvbmUgZGVsIGZpbGUiCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIkNvbmZlcm1hcmUgbGEgY2FuY2VsbGF6aW9uZSBkZWxsYSBjYXJ0ZWxsYSIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIlNlaSBzaWN1cm8gZGkgdm9sZXIgY2FuY2VsbGFyZSAnJTEnPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICJTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgcXVlc3RpICUxIGVsZW1lbnRpPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIlNvdnJhc2NyaXZlcmUgaWwgRmlsZSAlMT8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJDb25mZXJtYXJlIGxhIHNvdnJhc2NyaXppb25lIGRlbCBGaWxlIgoKCS8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KICAgICAgIElEU19SRVNUQVJUX1RJVExFICAgICAgICJSaWF2dmlhIgogICAgICAgSURTX1JFU1RBUlRfUFJPTVBUICAgICAgIlZ1b2kgc2ltdWxhcmUgdW4gcmlhdnZpbyBkaSBXaW5kb3dzPyIKICAgICAgIElEU19TSFVURE9XTl9USVRMRSAgICAgICJUZXJtaW5hIHNlc3Npb25lIgogICAgICAgSURTX1NIVVRET1dOX1BST01QVCAgICAgIlZ1b2kgdGVybWluYXJlIGxhIHNlc3Npb25lIGRpIFdpbmU/IgoKCS8qIHNoZWxsIGZvbGRlciBwYXRoIGRlZmF1bHQgdmFsdWVzICovCglJRFNfU1RBUlRNRU5VICAgICAgICAgICAgICAgIlN0YXJ0IE1lbnUiCglJRFNfUFJPR1JBTVMgICAgICAgICAgICAgICAgIlN0YXJ0IE1lbnVcXFByb2dyYW1taSIKCUlEU19TVEFSVFVQICAgICAgICAgICAgICAgICAiU3RhcnQgTWVudVxcUHJvZ3JhbW1pXFxTdGFydFVwIgoJSURTX0FETUlOVE9PTFMgICAgICAgICAgICAgICJTdGFydCBNZW51XFxQcm9ncmFtbWlcXEFkbWluaXN0cmF0aXZlIFRvb2xzIgoJSURTX0lOVEVSTkVUX0NBQ0hFICAgICAgICAgICJTZXR0YWdnaSBMb2NhbGlcXFRlbXBvcmFyeSBJbnRlcm5ldCBGaWxlcyIKCUlEU19ISVNUT1JZICAgICAgICAgICAgICAgICAiU2V0dGFnZ2kgTG9jYWxpXFxDcm9ub2xvZ2lhIgoJSURTX0xPQ0FMX0FQUERBVEEgICAgICAgICAgICJTZXR0YWdnaSBMb2NhbGlcXEFwcGxpY2F6aW9uaSIKCUlEU19DREJVUk5fQVJFQSAgICAgICAgICAgICAiU2V0dGFnZ2kgTG9jYWxpXFxBcHBsaWNhemlvbmlcXE1pY3Jvc29mdFxcQ0QgQnVybmluZyIKCUlEU19QUk9HUkFNX0ZJTEVTICAgICAgICAgICAiUHJvZ3JhbW1pIgoJSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICAgICJQcm9ncmFtbWlcXENvbW1vbiBGaWxlcyIKCUlEU19DT01NT05fRE9DVU1FTlRTICAgICAgICAiRG9jdW1lbnRpIgoJSURTX0NPTU1PTl9NVVNJQyAgICAgICAgICAgICJEb2N1bWVudGlcXE11c2ljYSIKCUlEU19DT01NT05fUElDVFVSRVMgICAgICAgICAiRG9jdW1lbnRpXFxJbW1hZ2luaSIKCUlEU19DT01NT05fVklERU8gICAgICAgICAgICAiRG9jdW1lbnRpXFxWaWRlbyIKCUlEU19QRVJTT05BTCAgICAgICAgICAgICAgICAiTWllaSBEb2N1bWVudGkiCglJRFNfTVlNVVNJQyAgICAgICAgICAgICAgICAgIk11c2ljYSIKCUlEU19NWVZJREVPICAgICAgICAgICAgICAgICAiVmlkZW8iCglJRFNfTVlQSUNUVVJFUyAgICAgICAgICAgICAgIkltbWFnaW5pIgoJSURTX0ZBVk9SSVRFUyAgICAgICAgICAgICAgICJGYXZvcml0aSIKCUlEU19SRUNFTlQgICAgICAgICAgICAgICAgICAiUmVjZW50aSIKCUlEU19TRU5EVE8gICAgICAgICAgICAgICAgICAiU2VuZFRvIgoJSURTX0RFU0tUT1BESVJFQ1RPUlkgICAgICAgICJEZXNrdG9wIgoJSURTX05FVEhPT0QgICAgICAgICAgICAgICAgICJOZXRIb29kIgoJSURTX1RFTVBMQVRFUyAgICAgICAgICAgICAgICJNb2RlbGxpIgoJSURTX0FQUERBVEEgICAgICAgICAgICAgICAgICJBcHBsaWNhemlvbmkiCglJRFNfUFJJTlRIT09EICAgICAgICAgICAgICAgIlByaW50SG9vZCIKCUlEU19DT09LSUVTICAgICAgICAgICAgICAgICAiQ29va2llcyIKfQo=