LyoKICogIE5vdGVwYWQgKER1dGNoIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAyMDAzIEhhbnMgTGVpZGVra2VyCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJub3RlcGFkX3Jlcy5oIgoKTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ORVVUUkFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkJlc3RhbmQiIHsKICBNRU5VSVRFTSAiJk5pZXV3IiwJCSAgICAgQ01EX05FVwogIE1FTlVJVEVNICImT3BlbmVuLi4uXHRDdHJsK08iLAkgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIk8mcHNsYWFuXHRDdHJsK1MiLAkgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIk9wcyZsYWFuIGFscy4uLiIsCSAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQWYmZHJ1a2tlbi4uLlx0Q3RybCtQIiwgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiUGEmZ2luYS1pbnN0ZWxsaW5nZW4uLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJQcmludGVyaW5zJnRlbGxpbmdlbi4uLiIsICAgIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZnNsdWl0ZW4iLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiQmUmd2Vya2VuIiB7CiAgTUVOVUlURU0gIiZPbmdlZGFhbiBtYWtlblx0Q3RybCtaIiwgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiSyZuaXBwZW5cdEN0cmwrWCIsICAgICAgICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZLb3Bp63Jlblx0Q3RybCtDIiwgICAgICAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiJlBsYWtrZW5cdEN0cmwrViIsICAgICAgICAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJlZlcndpamRlcmVuXHREZWwiLCAgICAgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBbGxlcyBzZWxlY3RlcmVuXHRDdHJsK0EiLCAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiVGlqZC8mZGF0dW1cdEY1IiwgICAgICAgICAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkEmdXRvbWF0aXNjaGUgdGVydWdsb29wIiwgICAgQ01EX1dSQVAKICBNRU5VSVRFTSAiJkxldHRlcnR5cGUgaW5zdGVsbGVuLi4uIiwgICBDTURfRk9OVAogfQpQT1BVUCAiJlpvZWtlbiIgewogIE1FTlVJVEVNICImWm9la2VuLi4uXHRDdHJsK1oiLCAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIlYmb2xnZW5kZSB6b2VrZW5cdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogIE1FTlVJVEVNICImVmVydmFuZ2VuLi4uXHRDdHJsK0giLCBDTURfUkVQTEFDRQogfQpQT1BVUCAiJkhlbHAiIHsKICBNRU5VSVRFTSAiJkhlbHAtb25kZXJ3ZXJwZW4iLCAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJlpvZWtlbi4uLiIsICAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIkgmdWxwIGJpaiBIZWxwIiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJk92ZXIgTm90ZXBhZCIsIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJQYWdpbmEtaW5zdGVsbGluZ2VuIgp7CkxURVhUICAgICImS29wdGVrc3Q6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZWb2V0dGVrc3Q6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFyZ2VzIChtaWxsaW1ldGVyKToiLCAgMHgxNDQsICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiTCZpbmtzOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImQm92ZW46IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlJlY2h0czoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZPbmRlcjoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICBJRE9LLCAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBbm51bGVyZW4iLCBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkhlbHAiLCAgICAgSURIRUxQLCAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpJRERfT0ZOX1RFTVBMQVRFICBESUFMT0cgIERJU0NBUkRBQkxFIDUwLDUwLDMwMCwxNQpTVFlMRSBEU18zRExPT0sgfCBEU19DT05UUk9MIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQ0xJUFNJQkxJTkdTIHwgV1NfQk9SREVSCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBMVEVYVCAiQ29kZXJpbmc6IiwgLTEsIDUsMCwgNTAsMTIKICBDT01CT0JPWCBJRENfT0ZOX0VOQ0NPTUJPLCA1MywwLCAxNTYsNDgsIFdTX0NISUxEIHwgV1NfVlNDUk9MTCB8IENCU19EUk9QRE9XTkxJU1QKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQYWdpbmEgJnAiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2xhZGJsb2siClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGT1VUIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0FBUlNDSFVXSU5HIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpZSIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOYWFtbG9vcyIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIGJlc3RhbmRlbiAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICAgICAgICAgIlRla3N0YmVzdGFuZGVuICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGV0IGJlc3RhbmQgJyVzJyBpcyB0ZSBncm9vdCB2b29yIEtsYWRibG9rLlxuIFwKR2VicnVpayBlZW4gYW5kZXJlIGVkaXRvci4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVIGhlZWZ0IGdlZW4gdGVrc3QgaW5nZXZvZXJkLiBcClxuVHlwZSB1dyB0ZWtzdCBlbiBwcm9iZWVyIGhldCBub2dtYWFscyIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhldCBiZXN0YW5kICclcydcbmJlc3RhYXQgbmlldFxuXG4gXApXaWx0IHUgZWVuIG5pZXV3IGJlc3RhbmQgbWFrZW4/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGV0IGJlc3RhbmQgJyVzJ1xuaXMgZ2V3aWp6aWdkXG5cbiBcCldpbHQgdSBkZSB3aWp6aWdpbmdlbiBvcHNsYWFuPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycga2FuIG5pZXQgd29yZGVuIGdldm9uZGVuLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9udm9sZG9lbmRlIGdlaGV1Z2VuLiBcClxuU2x1aXQgZWVuIG9mIG1lZXIgYXBwbGljYXRpZXMgb20gZGUgaG9ldmVlbGhlaWRcbmJlc2NoaWtiYWFyIGdlaGV1Z2VuIHRlIHZlcmdyb3Rlbi4iCgpTVFJJTkdfVU5JQ09ERV9MRSwgICAgICJVbmljb2RlIChVVEYtMTYpIgpTVFJJTkdfVU5JQ09ERV9CRSwgICAgICJVbmljb2RlIChVVEYtMTYgYmlnLWVuZGlhbikiCgpTVFJJTkdfTE9TU19PRl9VTklDT0RFX0NIQVJBQ1RFUlMsICAgICAgICAgIiVzXG5cCkRpdCBiZXN0YW5kIGJldmF0IFVuaWNvZGUgdGVrZW5zIGRpZSB2ZXJsb3JlbiB6dWxsZW4gZ2FhblxuXAphbHMgZGl0IGJlc3RhbmQgd29yZHQgb3BnZXNsYWdlbiBpbiBkZSAlcyBjb2RlcmluZy5cblwKS2xpayBvcCBBbm51bGVyZW4gb20gZGV6ZSB0ZWtlbnMgdGUgYmVob3VkZW4sIGVuIHNlbGVjdGVlclxuXApkYWFybmEgZWVuIHZhbiBkZSBVbmljb2RlLW9wdGllcyBpbiBkZSBjb2RlcmluZ3NrZXV6ZWxpanN0LlxuXApXaWx0IHUgZG9vcmdhYW4/Igp9Cg==