LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDQgQW3pcmljbyBKb3PpIE1lbG8KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKLyoKICogTWVudQogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTgoKSURSX1JFR0VESVRfTUVOVSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiJlJlZ2lzdHJvIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkltcG9ydGFyIGFycXVpdm8gZG8gUmVnaXN0cm8uLi4iLCBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSAiJkV4cG9ydGFyIGFycXVpdm8gZG8gUmVnaXN0cm8uLi4iLCBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkNvbmVjdGFyIFJlZ2lzdHJvIGRhIHJlZGUuLi4iLCAgICBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiJkRlc2NvbmVjdGFyIFJlZ2lzdHJvIGRhIHJlZGUuLi4iLCBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiSW0mcHJpbWlyXHRDdHJsK1AiLCAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9QUklOVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNhaSZyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkVkaXRhciIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZNb2RpZmljYXIiLCAgICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9NT0RJRlkKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiJk5vdm8iCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZDaGF2ZSIsICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICJWYWxvciAmVGV4dG8iLCAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIlZhbG9yICZCaW7hcmlvIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsb3IgJkRXT1JEIiwgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIlZhbG9yIGRlIHBhbGF2cmFzICZt+mx0aXBsYXMiLCBJRF9FRElUX05FV19NVUxUSV9TVFJJTkdWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRXhjbHVpclx0RGVsIiwgICAgICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIiZSZW5vbWVhclx0RjIiLCAgICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkNvcGlhciBub21lIGRhIGNoYXZlIiwgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZMb2NhbGl6YXJcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiTCZvY2FsaXphciBwcvN4aW1hXHRGMyIsICAgICAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIkUmeGliaXIiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImQmFycmEgZGUgc3RhdHVzIiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZEaXZpZGlyIiwgICAgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQXR1YWxpemFyXHRGNSIsICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJkZhdm9yaXRvcyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZBZGljaW9uYXIgYW9zIEZhdm9yaXRvcy4uLiIsICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICBNRU5VSVRFTSAiJlJlbW92ZXIgRmF2b3JpdG8uLi4iLCAgICAgICAgICAgIElEX0ZBVk9SSVRFU19SRU1PVkVGQVZPUklURQogICAgRU5ECiAgICBQT1BVUCAiQWomdWRhIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlRvcGljcyBkYSBBanVkYSIsICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTb2JyZSBvIEVkaXRvciBkbyBSZWdpc3RybyIsIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICImUmVnaXN0byIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZJbXBvcnRhciBmaWNoZWlybyBkbyBSZWdpc3RvLi4uIiwgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIiZFeHBvcnRhciBmaWNoZWlybyBkbyBSZWdpc3RvLi4uIiwgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZDb25lY3RhciBSZWdpc3RvIGRhIHJlZGUuLi4iLCAgICBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiJkRlc2NvbmVjdGFyIFJlZ2lzdG8gZGEgcmVkZS4uLiIsIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJbSZwcmltaXJcdEN0cmwrUCIsICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX1BSSU5ULCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiU2FpJnIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImRWRpdGFyIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJk1vZGlmaWNhciIsICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImTm92byIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiJkNoYXZlIiwgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIlZhbG9yICZUZXh0byIsICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsb3IgJkJpbuFyaW8iLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICJWYWxvciAmRFdPUkQiLCAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsb3IgZGUgcGFsYXZyYXMgJm36bHRpcGxhcyIsIElEX0VESVRfTkVXX01VTFRJX1NUUklOR1ZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZFeGNsdWlyXHREZWwiLCAgICAgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiJlJlbm9tZWFyXHRGMiIsICAgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQ29waWFyIG5vbWUgZGEgY2hhdmUiLCAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkxvY2FsaXphclx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICJMJm9jYWxpemFyIHBy83hpbWFcdEYzIiwgICAgICAgICAgIElEX0VESVRfRklORE5FWFQsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiRSZ4aWJpciIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZCYXJyYSBkZSBlc3RhZG8iLCAgICAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkRpdmlkaXIiLCAgICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZBY3R1YWxpemFyXHRGNSIsICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJkZhdm9yaXRvcyIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZBZGljaW9uYXIgYW9zIEZhdm9yaXRvcyIsICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICBNRU5VSVRFTSAiJlJlbW92ZXIgRmF2b3JpdG8iLCAgICAgICAgICAgIElEX0ZBVk9SSVRFU19SRU1PVkVGQVZPUklURQogICAgRU5ECiAgICBQT1BVUCAiQWomdWRhIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJlRvcGljb3MgZGEgQWp1ZGEiLCAgICAgICAgICAgIElEX0hFTFBfSEVMUFRPUElDUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQWNlcmNhIGRvIEVkaXRvciBkZSBSZWdpc3RvIiwgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ORVVUUkFMCgpJRFJfUE9QVVBfTUVOVVMgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogIFBPUFVQICIiCiAgQkVHSU4KCU1FTlVJVEVNICImTW9kaWZpY2FyIiwgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQoJTUVOVUlURU0gIk1vZGlmaWNhciBkYWRvcyBiaW7hcmlvcyIsICAgIElEX0VESVRfTU9ESUZZX0JJTgoJTUVOVUlURU0gU0VQQVJBVE9SCglNRU5VSVRFTSAiJkV4Y2x1aXJcdERlbCIsICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKCU1FTlVJVEVNICImUmVub21lYXIiLCAgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogIEVORAogIFBPUFVQICIiCiAgQkVHSU4KICAgICAgICBQT1BVUCAiJk5vdm8iCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZDaGF2ZSIsICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICJWYWxvciAmVGV4dG8iLCAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIlZhbG9yICZCaW7hcmlvIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiVmFsb3IgJkRXT1JEIiwgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIlZhbG9yIGRlIHBhbGF2cmFzICZt+mx0aXBsYXMiLCBJRF9FRElUX05FV19NVUxUSV9TVFJJTkdWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRXhjbHVpclx0RGVsIiwgICAgICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIiZSZW5vbWVhclx0RjIiLCAgICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRSZ4cG9ydGFyLi4uIiAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX0VYUE9SVAogICAgICAgIE1FTlVJVEVNICImQ29waWFyIG5vbWUgZGEgY2hhdmUiLCAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkxvY2FsaXphclx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogIEVORApFTkQKCgovKgogKiBEaWFsb2cKICovCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfTkVVVFJBTAoKSUREX0VESVRfU1RSSU5HIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMTAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFZGl0YXIgdGV4dG8iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiTm9tZSBkbyB2YWxvcjoiLElEQ19TVEFUSUMsNSw1LDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX05BTUUsNSwxNSwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTCB8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIkRhZG9zIGRvIHZhbG9yOiIsSURDX1NUQVRJQyw1LDMwLDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX0RBVEEsNSw0MCwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDAsNjAsMzAsMTEsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAiQ2FuY2VsYXIiLElEQ0FOQ0VMLDE3NSw2MCwzMCwxMSxXU19HUk9VUApFTkQKCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfTkVVVFJBTAoKSUREX0VESVRfRFdPUkQgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgMTAwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFZGl0YXIgRFdPUkQiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiTm9tZSBkbyB2YWxvcjoiLElEQ19TVEFUSUMsNSw1LDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX05BTUUsNSwxNSwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTCB8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIkRhZG9zIGRvIHZhbG9yOiIsSURDX1NUQVRJQyw1LDMwLDkwLDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDkwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiAgICBHUk9VUEJPWCAgICAgICAgIkJhc2UiLCBJRENfRFdPUkRfQkFTRSwgMTIwLCAzMCwgODUsIDM3LCBCU19HUk9VUEJPWAogICAgQVVUT1JBRElPQlVUVE9OICJIZXhhZGVjaW1hbCIsIElEQ19EV09SRF9IRVgsIDEzMCwgNDAsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgQVVUT1JBRElPQlVUVE9OICJEZWNpbWFsIiwgSURDX0RXT1JEX0RFQywgMTMwLCA1MiwgNjAsIDEwLCBXU19UQUJTVE9QCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE0MCw4MCwzMCwxMSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICJDYW5jZWxhciIsSURDQU5DRUwsMTc1LDgwLDMwLDExLFdTX0dST1VQCkVORAoKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ORVVUUkFMCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0xJU1RfQ09MVU1OX05BTUUgICAgIk5vbWUiCiAgICBJRFNfTElTVF9DT0xVTU5fVFlQRSAgICAiVGlwbyIKICAgIElEU19MSVNUX0NPTFVNTl9EQVRBICAgICJEYWRvcyIKRU5ECgoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgIkVkaXRvciBkbyBSZWdpc3RybyIKRU5ECgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19BUFBfVElUTEUgICAgICAgICAgICJFZGl0b3IgZGUgUmVnaXN0byIKRU5ECgoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfTUVOVSAgICAgICAgIkNvbnTpbSBjb21hbmRvcyBwYXJhIHRyYWJhbGhhciBjb20gbyBSZWdpc3RybyBpbnRlaXJvLiIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICJDb2506W0gY29tYW5kb3MgcGFyYSBlZGnn428gZGUgdmFsb3JlcyBvdSBjaGF2ZXMuIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgIkNvbnTpbSBjb21hbmRvcyBwYXJhIHBlcnNvbmFsaXph5+NvIGRhIGphbmVsYSBkbyBSZWdpc3Ryby4iCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAiQ29udOltIGNvbWFuZG9zIHBhcmEgYWNlc3NhciBjaGF2ZXMgZnJlcXVlbnRlbWVudGUgdXNhZGFzLiIKICAgIElEX0hFTFBfTUVOVSAgICAgICAgICAgICJDb2506W0gY29tYW5kb3MgcGFyYSBleGliaefjbyBkYSBhanVkYSBlIGluZm9ybWHn9WVzIHNvYnJlIG8gRWRpdG9yIGRvIFJlZ2lzdHJvLiIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICJDb2506W0gY29tYW5kb3MgcGFyYSBjcmlh5+NvIGRlIG5vdmFzIGNoYXZlcyBvdSB2YWxvcmVzIgpFTkQKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfTUVOVSAgICAgICAgIkNvbnTpbSBjb21hbmRvcyBwYXJhIHRyYWJhbGhhciBjb20gbyBSZWdpc3RvIGludGVpcm8uIgogICAgSURfRURJVF9NRU5VICAgICAgICAgICAgIkNvbnTpbSBjb21hbmRvcyBwYXJhIGVkaefjbyBkZSB2YWxvcmVzIG91IGNoYXZlcy4iCiAgICBJRF9WSUVXX01FTlUgICAgICAgICAgICAiQ29udOltIGNvbWFuZG9zIHBhcmEgcGVyc29uYWxpemHn428gZGEgamFuZWxhIGRvIFJlZ2lzdG8uIgogICAgSURfRkFWT1JJVEVTX01FTlUgICAgICAgIkNvbnTpbSBjb21hbmRvcyBwYXJhIGFjZWRlciBhIGNoYXZlcyBmcmVxdWVudGVtZW50ZSB1c2FkYXMuIgogICAgSURfSEVMUF9NRU5VICAgICAgICAgICAgIkNvbnTpbSBjb21hbmRvcyBwYXJhIGV4aWJp5+NvIGRhIGFqdWRhIGUgaW5mb3JtYef1ZXMgc29icmUgbyBFZGl0b3IgZG8gUmVnaXN0by4iCiAgICBJRF9FRElUX05FV19NRU5VICAgICAgICAiQ29udOltIGNvbWFuZG9zIHBhcmEgY3JpYefjbyBkZSBub3ZhcyBjaGF2ZXMgb3UgdmFsb3JlcyIKRU5ECgoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIk1vZGlmaWNhIG9zIGRhZG9zIGRvIHZhbG9yLiIKICAgIElEX0VESVRfTkVXX0tFWSAgICAgICAgICJBZGljaW9uYSB1bWEgbm92YSBjaGF2ZSIKICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFICJBZGljaW9uYSB1bSBub3ZvIHZhbG9yIHRleHRvLiIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICJBZGljaW9uYSB1bSBub3ZvIHZhbG9yIGJpbuFyaW8uIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIkFkaWNpb25hIHVtIG5vdm8gdmFsb3IgRFdPUkQuIgogICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFICJJbXBvcnRhIHVtIGFycXVpdm8gdGV4dG8gcGFyYSBvIHJlZ2lzdHJvLiIKICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cG9ydGEgdG9kbyBvdSBwYXJ0ZSBkbyByZWdpc3RybyBwYXJhIHVtIGFycXVpdm8gdGV4dG8uIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbmVjdGEgYSB1bSByZWdpc3RybyBlbSB1bSBjb21wdXRhZG9yIHJlbW90by4iCiAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVzY29uZWN0YSBkZSB1bSByZWdpc3RybyB1bSBjb21wdXRhZG9yIHJlbW90by4iCiAgICBJRF9SRUdJU1RSWV9QUklOVCAgICAgICAiSW1wcmltZSB0b2RvIG91IHBhcnRlIGRvIHJlZ2lzdHJvLiIKLyogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIkFicmUgYSBhanVkYSBkbyBFZGl0b3IgZG8gUmVnaXN0cm8uIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkV4aWJlIGluZm9ybWHn9WVzIGRvIHByb2dyYW1hLCBu+m1lcm8gZGEgdmVyc+NvIGUgY29weXJpZ2h0LiIKRU5ECgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX0VESVRfTU9ESUZZICAgICAgICAgICJNb2RpZmljYSBvcyBkYWRvcyBkbyB2YWxvci4iCiAgICBJRF9FRElUX05FV19LRVkgICAgICAgICAiQWRpY2lvbmEgdW1hIG5vdmEgY2hhdmUiCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAiQWRpY2lvbmEgdW0gbm92byB2YWxvciB0ZXh0by4iCiAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRSAiQWRpY2lvbmEgdW0gbm92byB2YWxvciBiaW7hcmlvLiIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICJBZGljaW9uYSB1bSBub3ZvIHZhbG9yIERXT1JELiIKICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRSAiSW1wb3J0YSB1bSBmaWNoZWlybyBkZSB0ZXh0byBwYXJhIG8gcmVnaXN0by4iCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBvcnRhIHRvZG8gb3UgcGFydGUgZG8gcmVnaXN0byBwYXJhIHVtIGZpY2hlaXJvIGRlIHRleHRvLiIKICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb25lY3RhIGEgdW0gcmVnaXN0byB1bSBjb21wdXRhZG9yIHJlbW90by4iCiAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVzY29uZWN0YSBkZSB1bSByZWdpc3RvIHVtIGNvbXB1dGFkb3IgcmVtb3RvLiIKICAgIElEX1JFR0lTVFJZX1BSSU5UICAgICAgICJJbXByaW1lIHRvZG8gb3UgcGFydGUgZG8gcmVnaXN0by4iCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJBYnJlIGEgYWp1ZGEgZG8gRWRpdG9yIGRlIFJlZ2lzdG8uIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkV4aWJlIGluZm9ybWHn9WVzIGRvIHByb2dyYW1hLCBu+m1lcm8gZGEgdmVyc+NvIGUgZGlyZWl0b3MgZGUgYXV0b3IuIgpFTkQKCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9FWElUICAgICAgICAiRW5jZXJyYSBvIEVkaXRvciBkbyBSZWdpc3Ryby4iCiAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMgIkFkaWNpb25hIGNoYXZlcyBhIGxpc3RhIGRlIGZhdm9yaXRvcy4iCiAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUgIlJlbW92ZSBjaGF2ZXMgZGEgbGlzdGEgZGUgZmF2b3JpdG9zLiIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICJNb3N0cmEgb3Ugb2N1bHRhIGEgYmFycmEgZGUgc3RhdHVzLiIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICJBbHRlcmEgYSBwb3Np5+NvIGRhIGRpdmlz428gZW50cmUgb3MgcGFpbulpcy4iCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAiQXR1YWxpemEgYSBqYW5lbGEuIgogICAgSURfRURJVF9ERUxFVEUgICAgICAgICAgIkV4Y2x1aSBhIHNlbGVj428uIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIlJlbm9tZWlhIGEgc2VsZWPjby4iCiAgICBJRF9FRElUX0NPUFlLRVlOQU1FICAgICAiQ29waWEgbyBub21lIGRhIGNoYXZlIHNlbGVjaW9uYWRhIHBhcmEgYSDBcmVhIGRlIHRyYW5zZmVy6m5jaWEuIgogICAgSURfRURJVF9GSU5EICAgICAgICAgICAgIkxvY2FsaXphIHVtIHRleHRvIGVtIHVtYSBjaGF2ZSwgdmFsb3Igb3UgZGFkby4iCiAgICBJRF9FRElUX0ZJTkRORVhUICAgICAgICAiTG9jYWxpemEgYSBwcvN4aW1hIG9jb3Jy6m5jaWEgZG8gdGV4dG8gZXNwZWNpZmljYWRvIG5hIHBlc3F1aXNhIGFudGVyaW9yLiIKRU5ECgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICJFbmNlcnJhIG8gRWRpdG9yIGRlIFJlZ2lzdG8uIgogICAgSURfRkFWT1JJVEVTX0FERFRPRkFWT1JJVEVTICJBZGljaW9uYSBjaGF2ZXMg4CBsaXN0YSBkZSBmYXZvcml0b3MuIgogICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFICJSZW1vdmUgY2hhdmVzIGRhIGxpc3RhIGRlIGZhdm9yaXRvcy4iCiAgICBJRF9WSUVXX1NUQVRVU0JBUiAgICAgICAiTW9zdHJhIG91IG9jdWx0YSBhIGJhcnJhIGRlIHN0YXR1cy4iCiAgICBJRF9WSUVXX1NQTElUICAgICAgICAgICAiQWx0ZXJhIGEgcG9zaefjbyBkYSBkaXZpc+NvIGVudHJlIG9zIHBhaW7paXMuIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIkFjdHVhbGl6YSBhIGphbmVsYS4iCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAiRXhjbHVpIGEgc2VsZWPn428uIgogICAgSURfRURJVF9SRU5BTUUgICAgICAgICAgIlJlbm9tZWlhIGEgc2VsZWPn428uIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIkNvcGlhIG8gbm9tZSBkYSBjaGF2ZSBzZWxlY2Npb25hZGEgcGFyYSBhIMFyZWEgZGUgdHJhbnNmZXLqbmNpYS4iCiAgICBJRF9FRElUX0ZJTkQgICAgICAgICAgICAiTG9jYWxpemEgdW0gdGV4dG8gbnVtYSBjaGF2ZSwgdmFsb3Igb3UgZGFkby4iCiAgICBJRF9FRElUX0ZJTkRORVhUICAgICAgICAiTG9jYWxpemEgYSBwcvN4aW1hIG9jb3Jy6m5jaWEgZG8gdGV4dG8gaW5kaWNhZG8gbmEgcGVzcXVpc2EgYW50ZXJpb3IuIgpFTkQKCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfRVJST1IJCSAgICAiRXJybyIKICAgIElEU19CQURfS0VZCQkgICAgIk7jbyBwb2RlIGNvbnN1bHRhciBhIGNoYXZlICclcyciCiAgICBJRFNfQkFEX1ZBTFVFICAgICAgICAgICAiTuNvIHBvZGUgY29uc3VsdGFyIG8gdmFsb3IgJyVzJyIKICAgIElEU19VTlNVUFBPUlRFRF9UWVBFICAgICJO428gcG9kZSBlZGl0YXIgY2hhdmVzIGRlc3RlIHRpcG8gKCV1KSIKICAgIElEU19UT09fQklHX1ZBTFVFICAgICAgICJWYWxvciDpIG11aXRvIGdyYW5kZSAoJXUpIgogICAgSURTX0RFTEVURV9CT1hfVElUTEUgICAgIkNvbmZpcm1hciBleGNsdXPjbyBkZSB2YWxvciIKICAgIElEU19ERUxFVEVfQk9YX1RFWFQgICAgICJUZW0gY2VydGV6YSBxdWUgZGVzZWphIGV4Y2x1aXIgbyB2YWxvciAnJXMnPyIKICAgIElEU19ERUxFVEVfQk9YX1RFWFRfTVVMVElQTEUgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgdmFsdWVzPyIKICAgIElEU19ORVdLRVkgICAgICAgICAgICAgICJOb3ZhIGNoYXZlICMlZCIKICAgIElEU19ORVdWQUxVRSAgICAgICAgICAgICJOb3ZvIHZhbG9yICMlZCIKICAgIElEU19OT1RGT1VORCAgICAgICAgICAgICJDaGF2ZSBkZSBidXNjYSAnJXMnIG7jbyBlbmNvbnRyYWRhIgpFTkQKCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0VSUk9SCQkgICAgIkVycm8iCiAgICBJRFNfQkFEX0tFWQkJICAgICJO428gcG9kZSBwZXJndW50YXIgYSBjaGF2ZSAnJXMnIgogICAgSURTX0JBRF9WQUxVRSAgICAgICAgICAgIk7jbyBwb2RlIHBlcmd1bnRhciBvIHZhbG9yICclcyciCiAgICBJRFNfVU5TVVBQT1JURURfVFlQRSAgICAiTuNvIHBvZGUgZWRpdGFyIGNoYXZlcyBkZXN0ZSB0aXBvICgldSkiCiAgICBJRFNfVE9PX0JJR19WQUxVRSAgICAgICAiVmFsb3IgbXVpdG8gZ3JhbmRlICgldSkiCiAgICBJRFNfREVMRVRFX0JPWF9USVRMRSAgICAiQ29uZmlybWFyIGV4Y2x1c+NvIGRlIHZhbG9yIgogICAgSURTX0RFTEVURV9CT1hfVEVYVCAgICAgIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgZXhjbHVpciBvIHZhbG9yICclcyc/IgogICAgSURTX0RFTEVURV9CT1hfVEVYVF9NVUxUSVBMRSAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGVzZSB2YWx1ZXM/IgogICAgSURTX05FV0tFWSAgICAgICAgICAgICAgIk5vdmEgY2hhdmUgIyVkIgogICAgSURTX05FV1ZBTFVFICAgICAgICAgICAgIk5vdm8gdmFsb3IgIyVkIgogICAgSURTX05PVEZPVU5EICAgICAgICAgICAgIkNoYXZlIGRlIGJ1c2NhICclcycgbuNvIGVuY29udHJhZGEiCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyoKICogVEVYVElOQ0xVREUKICovCgoxIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFCkJFR0lOCiAgICAicmVzb3VyY2UuaFwwIgpFTkQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K