LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzIEZpbGlwIE5hdmFyYQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCk1FTlVfMDAxIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCU1FTlVJVEVNICImVmVkbGUgc2ViZSIsCQlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIiZJa29ueSIsCQlGQ0lETV9TSFZJRVdfU01BTExJQ09OCglNRU5VSVRFTSAiJlNlem5hbSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICImUG9kcm9ibm9zdGkiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwpFTkQKCi8qCiBzaGVsbHZpZXcgYmFja2dyb3VuZCBtZW51CiovCk1FTlVfMDAyIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBQT1BVUCAiWiZvYnJheml0IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICImVmVkbGUgc2ViZSIsCUZDSURNX1NIVklFV19CSUdJQ09OCgkgICAgTUVOVUlURU0gIiZJa29ueSIsCQlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZTZXpuYW0iLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCgkgICAgTUVOVUlURU0gIiZQb2Ryb2Jub3N0aSIsCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIlNl+GFkaXQgJmlrb255IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJQb2RsZSAmTuF6dnUiLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIlBvZGxlICZUeXB1IiwJMHgzMgkvKiBjb2x1bW4gMiAqLwoJICAgIE1FTlVJVEVNICJQb2RsZSAmVmVsaWtvc3RpIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAiUG9kbGUgJkRhdGEiLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIiZSb3ZuYXQgYXV0b21hdGlja3kiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICJaYXJvdm5hdCBpa29ueSIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiQSZrdHVhbGl6b3ZhdCIsCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiViZsb55pdCIsCQlGQ0lETV9TSFZJRVdfSU5TRVJUCgkgIE1FTlVJVEVNICJWbG+eaXQgeuFzdCZ1cGNlIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICImTm92/SIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTm924SAmc2xvnmthIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOb3b9ICZ64XN0dXBjZSIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZWbGFzdG5vc3RpIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICJQJnJvemtvdW1hdCIsCQlGQ0lETV9TSFZJRVdfRVhQTE9SRQoJICBNRU5VSVRFTSAiTyZ0ZXb47XQiLAkJCUZDSURNX1NIVklFV19PUEVOCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiVnlqJm1vdXQiLAkJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3Dtcm92YXQiLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJWeXR2b/hpdCB64XN0dXBjJmUiLAlGQ0lETV9TSFZJRVdfQ1JFQVRFTElOSwoJICBNRU5VSVRFTSAiTyZkc3RyYW5pdCIsCQlGQ0lETV9TSFZJRVdfREVMRVRFCgkgIE1FTlVJVEVNICImUPhlam1lbm92YXQiLAkJRkNJRE1fU0hWSUVXX1JFTkFNRQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIiZWbGFzdG5vc3RpIiwJCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJQcm9jaOF6ZXQuLi4iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCAxLCA4MCwgMTc2LCA1MCwgMTIsIEJTX0RFRlBVU0hCVVRUT04gfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIlN0b3JubyIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJPIGFwbGlrYWNpICVzIgpGT05UIDEwLCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDE1MywgMTMwLCA1MCwgMTIKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTg5LCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCA4LCAxMCwgMTM3LCAzMwogTFRFWFQgIldpbmUgamUgZKFsZW06IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiWmFkZWp0ZSBu4XpldiBwcm9ncmFtdSwgc2xvnmt5LCBkb2t1bWVudHUsIG5lYm8gemRyb2plIHYgc+10aSBJbnRlcm5ldCBhIFdpbmUgamVqIHBybyB24XMgb3RldvhlLiIsIDEyMjg5LCAzNiwgMTEsIDE4MiwgMTgKIExURVhUICImT3RldvjtdDoiLCAxMjMwNSwgNywgMzksIDI0LCAxMAogQ09OVFJPTCAiIiwgMTIyOTgsICJDT01CT0JPWCIsIFdTX1RBQlNUT1AgfCBXU19HUk9VUCB8IFdTX1ZTQ1JPTEwgfCBXU19WSVNJQkxFIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19EUk9QRE9XTiwgMzYsIDM3LCAxODMsIDEwMAogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCA2MiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiU3Rvcm5vIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJlByb2No4XpldC4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJIlBsb2NoYSIKCUlEU19NWUNPTVBVVEVSCQkiVGVudG8gcG/o7XRh6CIKfQoKLyoKCWNvbnRleHQgbWVudXMKKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX1ZJRVdfTEFSR0UJCSImVmVkbGUgc2ViZSIKCUlEU19WSUVXX1NNQUxMCQkiJklrb255IgoJSURTX1ZJRVdfTElTVAkJIiZTZXpuYW0iCglJRFNfVklFV19ERVRBSUxTCSImUG9kcm9ibm9zdGkiCglJRFNfU0VMRUNUCQkiVnlicmF0IgoJSURTX09QRU4JCSJPdGV2+O10Igp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAiTmVsemUgdnl0dm/4aXQgbm92b3Ugc2xvnmt1IHByb3RvnmUgcPhpc3R1cCBieWwgb2RlcPhlbi4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIkNoeWJhIHD4aSBwb2t1c3Ugdnl0dm/4aXQgbm92/SBhZHJlc+H4IgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiUG90dnJkaXQgb2RzdHJhbuxu7SBzb3Vib3J1IgoJSURTX0RFTEVURUZPTERFUl9DQVBUSU9OICJQb3R2cmRpdCBvZHN0cmFu7G7tIGFkcmVz4fhlIgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiUG90dnJkaXQgcPhlcHPhbu0gc291Ym9ydSIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIk9wcmF2ZHUgY2hjZXRlIG9kc3RyYW5pdCAnJTEnPyIKCUlEU19ERUxFVEVNVUxUSVBMRV9URVhUICJPcHJhdmR1IGNoY2V0ZSBvZHN0cmFuaXQgdOxjaHRvICUxIHBvbG+eZWs/IgoJSURTX09WRVJXUklURUZJTEVfVEVYVCAiUPhlamV0ZSBzaSBw+GVwc2F0IHNvdWJvciAnJTEnPyIKfQoKLyoJY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3CSovClNUUklOR1RBQkxFCkJFR0lOCglJRFNfU0hWX0NPTFVNTjEJCSJO4XpldiIKCUlEU19TSFZfQ09MVU1OMgkJIlZlbGlrb3N0IgoJSURTX1NIVl9DT0xVTU4zCQkiVHlwIgoJSURTX1NIVl9DT0xVTU40CQkiWm3sbuxubyIKCUlEU19TSFZfQ09MVU1ONQkJIkF0cmlidXR5IgoJSURTX1NIVl9DT0xVTU42CQkiVmVsaWtvc3QiCglJRFNfU0hWX0NPTFVNTjcJCSJWb2xu6SBt7XN0byIKCUlEU19TSFZfQ09MVU1OOAkJIkpt6W5vIgoJSURTX1NIVl9DT0xVTU45CQkiS29tZW504fgiCkVORAo=