LyoKICogQ29weXJpZ2h0IDIwMDUgS2ltbW8gTXlsbHl2aXJ0YQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZJTk5JU0gsIFNVQkxBTkdfREVGQVVMVAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZTdXVyZXQgS3V2YWtrZWV0IiwJCUZDSURNX1NIVklFV19CSUdJQ09OCglNRU5VSVRFTSAiJlBpZW5ldCBLdXZha2tlZXQiLAkJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJTUVOVUlURU0gIiZMaXN0YSIsCQkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCglNRU5VSVRFTSAiJlRpZWRvdCIsCQkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIiZO5Gt5beQiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZQaWVuZXQgS3V2YWtrZWV0IiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiJlN1dXJldCBLdXZha2tlZXQiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0YSIsCQkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIiZUaWVkb3QiLAkJCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIiZK5HJqZXN05CBLdXZha2tlZXQiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZOaW1lbiBtdWthYW4iLAkJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICImVHl5cGluIG11a2FhbiIsCQkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIiZLb29uIG11a2FhbiIsCQkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICImUORpduRt5ORy5G4gbXVrYWFuIiwJMHgzMwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICAgIE1FTlVJVEVNICJK5HJqZXN05CAmQXV0b21hYXR0aXNlc3RpIiwgRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiSuRyamVzdOQga3V2YWtrZWV0IHJpdmlpbiIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiUORpdml05CIsCQkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJMaWl05CIsCQkJRkNJRE1fU0hWSUVXX0lOU0VSVAoJICBNRU5VSVRFTSAiTGlpdOQgTGlua2lrc2kiLAkJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJVdXNpIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJVdXNpICZLYW5zaW8iLAkJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJVdXNpICZMaW5ra2kiLAkJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiT21pbmFpc3V1ZGV0IiwJCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBNRU5VSVRFTSAiJlNlbGFhIiwJCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQoJICBNRU5VSVRFTSAiJkF2YWEiLAkJCUZDSURNX1NIVklFV19PUEVOCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJkxlaWtrYWEiLAkJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3Bpb2kiLAkJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiTHUmbyBMaW5ra2kiLAkJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZQb2lzdGEiLAkJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZOaW1l5CBVdWRlbGxlZW4iLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZPbWluYWlzdXVkZXQiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIlZhbGl0c2UgS2Fuc2lvIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJQZXJ1dXRhIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlRpZXRvamEgJXMiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzMsIDUwLCAxMiwgV1NfVEFCU1RPUAogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxMCwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgMzAsIDEwLCAxMzcsIDEwCiBMVEVYVCAiIiwgMTAxLCAzMCwgMjIsIDEzNywgMTAKIExURVhUICJXaW5lOm4gdG9pIFNpbnVsbGU6IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiQW5uYSBvaGplbG1hLCBkb2t1bWVudHRpLCB0YWkgSW50ZXJuZXQgLXJlc3N1cnNzaSwgamEgV2luZSBhdmFhIHNlbiBTaW51bGxlLiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImQXZhYToiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiUGVydXV0YSIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZTZWxhYS4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgICAgIC8qIGNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldyAqLwoJSURTX1NIVl9DT0xVTU4xCQkiVGllZG9zdG8iCglJRFNfU0hWX0NPTFVNTjIJCSJLb2tvIgoJSURTX1NIVl9DT0xVTU4zCQkiVHl5cHBpIgoJSURTX1NIVl9DT0xVTU40CQkiTXVva2F0dHUiCglJRFNfU0hWX0NPTFVNTjUJCSJPbWluYWlzdXVkZXQiCglJRFNfU0hWX0NPTFVNTjYJCSJLb2tvIgoJSURTX1NIVl9DT0xVTU43CQkiVGlsYWEgauRsamVsbOQiCglJRFNfU0hWX0NPTFVNTjgJCSJOaW1pIgoJSURTX1NIVl9DT0xVTU45CQkiS29tbWVudGl0IgoJSURTX1NIVl9DT0xVTU4xMAkiT21pc3RhamEiCglJRFNfU0hWX0NPTFVNTjExCSJSeWht5CIKCiAgICAgICAgLyogc3BlY2lhbCBmb2xkZXJzICovCglJRFNfREVTS1RPUAkJIlR59nD2eXTkIgoJSURTX01ZQ09NUFVURVIJCSJPbWEgVGlldG9rb25lIgoKICAgICAgICAvKiBjb250ZXh0IG1lbnVzICovCglJRFNfVklFV19MQVJHRQkJIiZTdXVyZXQgS3V2YWtrZWV0IgoJSURTX1ZJRVdfU01BTEwJCSImUGllbmV0IEt1dmFra2VldCIKCUlEU19WSUVXX0xJU1QJCSImTGlzdGEiCglJRFNfVklFV19ERVRBSUxTCSImVGllZG90IgoJSURTX1NFTEVDVAkJIlZhbGl0c2UiCglJRFNfT1BFTgkJIkF2YWEiCgoJSURTX0NSRUFURUZPTERFUl9ERU5JRUQgIlV1dHRhIGthbnNpb3RhIGVpIHZvaXR1IGx1b2RhOiBPaWtldWRldCBlaXbkdCByaWl05C4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIlZpcmhlIGx1b3RhZXNzYSB1dXR0YSBrYW5zaW90YSIKCUlEU19ERUxFVEVJVEVNX0NBUFRJT04gIlZhaHZpc3RhIHRpZWRvc3RvbiB0dWhvYW1pbmVuIgoJSURTX0RFTEVURUZPTERFUl9DQVBUSU9OICJWYWh2aXN0YSBrYW5zaW9uIHR1aG9hbWluZW4iCglJRFNfREVMRVRFSVRFTV9URVhUICJIYWx1YXRrbyB2YXJtYXN0aSB0dWhvdGEgJyUxJzpuPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICJIYWx1YXRrbyB2YXJtYXN0aSB0dWhvdGEgbuRt5CAlMT8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICJZbGlraXJqb2l0YSB0aWVkb3N0byAlMT8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJWYWh2aXN0YSBUaWVkb3N0b24gWWxpa2lyam9pdHVzIgoKICAgICAgICAvKiBtZXNzYWdlIGJveCBzdHJpbmdzICovCiAgICAgICAgSURTX1JFU1RBUlRfVElUTEUgICAgICAgIkvkeW5uaXN05CB1dWRlc3RhYW4iCiAgICAgICAgSURTX1JFU1RBUlRfUFJPTVBUICAgICAgIkhhbHVhdGtvIHNpbXVsb2lkYSBXaW5kb3dzOm4gdXVkZWxsZWVua+R5bm5pc3TkbWlzdOQ/IgogICAgICAgIElEU19TSFVURE9XTl9USVRMRSAgICAgICJTYW1tdXRhIgogICAgICAgIElEU19TSFVURE9XTl9QUk9NUFQgICAgICJIYWx1YXRrbyBsb3BldHRhYSBXaW5lOm4gaXN0dW5ub24/IgoKICAgICAgICAvKiBzaGVsbCBmb2xkZXIgcGF0aCBkZWZhdWx0IHZhbHVlcyAqLwoJSURTX1BST0dSQU1TICAgICAgICAgICAgICAgICJL5HlubmlzdORcXE9oamVsbWF0IgoJSURTX1BFUlNPTkFMICAgICAgICAgICAgICAgICJPbWF0IHRpZWRvc3RvdCIKCUlEU19GQVZPUklURVMgICAgICAgICAgICAgICAiU3Vvc2lraXQiCglJRFNfU1RBUlRVUCAgICAgICAgICAgICAgICAgIkvkeW5uaXN05FxcT2hqZWxtYXRcXEvkeW5uaXN0eXMiCglJRFNfUkVDRU5UICAgICAgICAgICAgICAgICAgIsRza2V0dORpbiBr5Hl0ZXR5dCIKCUlEU19TRU5EVE8gICAgICAgICAgICAgICAgICAiTORoZXTkIgoJSURTX1NUQVJUTUVOVSAgICAgICAgICAgICAgICJL5HlubmlzdOQiCglJRFNfTVlNVVNJQyAgICAgICAgICAgICAgICAgIk9tYXQgdGllZG9zdG90XFxPbWF0IG11c2lpa2tpdGllZG9zdG90IgoJSURTX01ZVklERU8gICAgICAgICAgICAgICAgICJPbWF0IHRpZWRvc3RvdFxcT21hdCB2aWRlb3RpZWRvc3RvdCIKCUlEU19ERVNLVE9QRElSRUNUT1JZICAgICAgICAiVHn2cPZ5dOQiCglJRFNfTkVUSE9PRCAgICAgICAgICAgICAgICAgIlZlcmtrb3ltcORyaXN09iIKCUlEU19URU1QTEFURVMgICAgICAgICAgICAgICAiTWFsbGl0IgoJSURTX0FQUERBVEEgICAgICAgICAgICAgICAgICJPaGplbG1pZW4gVGllZG90IgoJSURTX1BSSU5USE9PRCAgICAgICAgICAgICAgICJUdWxvc3RpbnltcORyaXN09iIKCUlEU19MT0NBTF9BUFBEQVRBICAgICAgICAgICAiUGFpa2FsbGlzZXQgQXNldHVrc2V0XFxPaGplbG1pZW4gVGllZG90IgoJSURTX0lOVEVSTkVUX0NBQ0hFICAgICAgICAgICJW5GxpYWlrYWlzZXQgSW50ZXJuZXQtdGllZG9zdG90IgoJSURTX0NPT0tJRVMgICAgICAgICAgICAgICAgICJFduRzdGVldCIKCUlEU19ISVNUT1JZICAgICAgICAgICAgICAgICAiSGlzdG9yaWEiCglJRFNfUFJPR1JBTV9GSUxFUyAgICAgICAgICAgIk9oamVsbWF0IgoJSURTX01ZUElDVFVSRVMgICAgICAgICAgICAgICJPbWF0IHRpZWRvc3RvdFxcT21hdCBrdXZhdGllZG9zdG90IgoJSURTX1BST0dSQU1fRklMRVNfQ09NTU9OICAgICJPaGplbG1hdFxcWWh0ZWlzZXQgVGllZG9zdG90IgoJSURTX0NPTU1PTl9ET0NVTUVOVFMgICAgICAgICJEb2t1bWVudGl0IgoJSURTX0FETUlOVE9PTFMgICAgICAgICAgICAgICJL5HlubmlzdHlzXFxPaGphdXNwYW5lZWxpXFxBZG1pbmlzdHJhdGl2ZSBUb29scyIKCUlEU19DT01NT05fTVVTSUMgICAgICAgICAgICAiRG9rdW1lbnRpdFxcT21hdCBtdXNpaWtraXRpZWRvc3RvdCIKCUlEU19DT01NT05fUElDVFVSRVMgICAgICAgICAiRG9rdW1lbnRpdFxcT21hdCBrdXZhdGllZG9zdG90IgoJSURTX0NPTU1PTl9WSURFTyAgICAgICAgICAgICJEb2t1bWVudGl0XFxPbWF0IHZpZGVvdGllZG9zdG90IgoJSURTX0NEQlVSTl9BUkVBICAgICAgICAgICAgICJQYWlrYWxsaXNldCBBc2V0dWtzZXRcXE9oamVsbWllbiBUaWVkb3RcXE1pY3Jvc29mdFxcQ0QgQnVybmluZyIKfQo=