--- http_interactions: - request: method: post uri: "/v1.15/images/create?fromImage=debian%3Awheezy" body: encoding: US-ASCII string: '' headers: User-Agent: - Swipely/Docker-API 1.15.0 Content-Type: - text/plain response: status: code: 200 message: headers: Content-Type: - application/json Date: - Mon, 01 Dec 2014 18:08:39 GMT body: encoding: UTF-8 string: "{\"status\":\"The image you are pulling has been verified\",\"id\":\"debian:wheezy\"}\r\n{\"status\":\"Already exists\",\"progressDetail\":{},\"id\":\"511136ea3c5a\"}{\"status\":\"Already exists\",\"progressDetail\":{},\"id\":\"f10807909bc5\"}{\"status\":\"Already exists\",\"progressDetail\":{},\"id\":\"f6fab3b798be\"}{\"status\":\"Status: Image is up to date for debian:wheezy\"}\r\n" http_version: recorded_at: Mon, 01 Dec 2014 18:08:39 GMT - request: method: post uri: "/v1.15/build" body: encoding: UTF-8 string: !binary |- bGliAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAwMDA2NDAAMDAwMDAwMAAwMDAwMDAwADAwMDAwMTQxMDAw ADEyNDM3MTI3MjQ3ADAxMjAxMAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMHdoZWVs AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAwMDAwMDAwADAwMDAwMDAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDA0MDc1NQAwMDAwNzY2ADAw MDAwMjQAMDAwMDAwMDAwMDAAMTI0MzcxMTYxNTQAMDA2MTIzACA1AAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHVzdGFyADAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRvY2tlcgAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw MDQwNzU1ADAwMDA3NjYAMDAwMDAyNAAwMDAwMDAwMDAwMAAxMjQzNzExNjE1 NAAwMDcyMzUAIDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAZG9ja2VyL2Jhc2UucmIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDc2NgAwMDAwMDI0ADAwMDAw MDAxNTQzADEyNDMzMDA3NTU1ADAxMDU1MwAgMAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAw MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIFRoaXMgY2xhc3MgaXMgYSBiYXNl IGNsYXNzIGZvciBEb2NrZXIgQ29udGFpbmVyIGFuZCBJbWFnZS4KIyBJdCBp cyBpbXBsZW1lbnRpbmcgYWNjZXNzb3IgbWV0aG9kcyBmb3IgdGhlIG1vZGVs cyBhdHRyaWJ1dGVzLgptb2R1bGUgRG9ja2VyOjpCYXNlCiAgaW5jbHVkZSBE b2NrZXI6OkVycm9yCgogIGF0dHJfYWNjZXNzb3IgOmNvbm5lY3Rpb24sIDpp bmZvCiAgYXR0cl9yZWFkZXIgOmlkCgogICMgVGhlIHByaXZhdGUgbmV3IG1l dGhvZCBhY2NlcHRzIGEgY29ubmVjdGlvbiBhbmQgb3B0aW9uYWwgaWQuCiAg ZGVmIGluaXRpYWxpemUoY29ubmVjdGlvbiwgaGFzaD17fSkKICAgIHVubGVz cyBjb25uZWN0aW9uLmlzX2E/KERvY2tlcjo6Q29ubmVjdGlvbikKICAgICAg cmFpc2UgQXJndW1lbnRFcnJvciwgIkV4cGVjdGVkIGEgRG9ja2VyOjpDb25u ZWN0aW9uLCBnb3Q6ICN7Y29ubmVjdGlvbn0uIgogICAgZW5kCiAgICBub3Jt YWxpemVfaGFzaChoYXNoKQogICAgQGNvbm5lY3Rpb24sIEBpbmZvLCBAaWQg PSBjb25uZWN0aW9uLCBoYXNoLCBoYXNoWydpZCddCiAgICByYWlzZSBBcmd1 bWVudEVycm9yLCAiTXVzdCBoYXZlIGlkLCBnb3Q6ICN7aGFzaH0iIHVubGVz cyBAaWQKICBlbmQKCiAgIyBUaGUgZG9ja2VyLWFwaSB3aWxsIHNvbWUgdGlt ZSByZXR1cm4gIklEIiBvdGhlciB0aW1lcyBpdCB3aWxsIHJldHVybiAiSWQi CiAgIyBhbmQgb3RoZXIgdGltZXMgaXQgd2lsbCByZXR1cm4gImlkIi4gVGhp cyBtZXRob2Qgbm9ybWFsaXplIGl0IHRvICJpZCIKICBkZWYgbm9ybWFsaXpl X2hhc2goaGFzaCkKICAgIGhhc2hbImlkIl0gfHw9IGhhc2guZGVsZXRlKCJJ RCIpIHx8IGhhc2guZGVsZXRlKCJJZCIpCiAgZW5kCmVuZAoAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAZG9ja2VyL2Nvbm5lY3Rpb24ucmIAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDc2NgAwMDAwMDI0 ADAwMDAwMDA1NjQxADEyNDM3MTEwMzc2ADAxMjAwMwAgMAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1 c3RhcgAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIFRoaXMgY2xhc3MgcmVw cmVzZW50cyBhIENvbm5lY3Rpb24gdG8gYSBEb2NrZXIgc2VydmVyLiBUaGUg Q29ubmVjdGlvbiBpcwojIGltbXV0YWJsZSBpbiB0aGF0IG9uY2UgdGhlIHVy bCBhbmQgb3B0aW9ucyBpcyBzZXQgdGhleSBjYW5ub3QgYmUgY2hhbmdlZC4K Y2xhc3MgRG9ja2VyOjpDb25uZWN0aW9uCiAgaW5jbHVkZSBEb2NrZXI6OkVy cm9yCgogIGF0dHJfcmVhZGVyIDp1cmwsIDpvcHRpb25zCgogICMgQ3JlYXRl IGEgbmV3IENvbm5lY3Rpb24uIFRoaXMgbWV0aG9kIHRha2VzIGEgdXJsIChT dHJpbmcpIGFuZCBvcHRpb25zCiAgIyAoSGFzaCkuIFRoZXNlIGFyZSBwYXNz ZWQgdG8gRXhjb24sIHNvIGFueSBvcHRpb25zIHZhbGlkIGZvciBgRXhjb24u bmV3YAogICMgY2FuIGJlIHBhc3NlZCBoZXJlLgogIGRlZiBpbml0aWFsaXpl KHVybCwgb3B0cykKICAgIGNhc2UKICAgIHdoZW4gIXVybC5pc19hPyhTdHJp bmcpCiAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICJFeHBlY3RlZCBhIFN0 cmluZywgZ290OiAnI3t1cmx9JyIKICAgIHdoZW4gIW9wdHMuaXNfYT8oSGFz aCkKICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgIkV4cGVjdGVkIGEgSGFz aCwgZ290OiAnI3tvcHRzfSciCiAgICBlbHNlCiAgICAgIHVyaSA9IFVSSS5w YXJzZSh1cmwpCiAgICAgIGlmIHVyaS5zY2hlbWUgPT0gInVuaXgiCiAgICAg ICAgQHVybCwgQG9wdGlvbnMgPSAndW5peDovLy8nLCB7OnNvY2tldCA9PiB1 cmkucGF0aH0ubWVyZ2Uob3B0cykKICAgICAgZWxzaWYgdXJpLnNjaGVtZSA9 fiAvXihodHRwcz98dGNwKSQvCiAgICAgICAgQHVybCwgQG9wdGlvbnMgPSB1 cmwsIG9wdHMKICAgICAgZWxzZQogICAgICAgIEB1cmwsIEBvcHRpb25zID0g Imh0dHA6Ly8je3VyaX0iLCBvcHRzCiAgICAgIGVuZAogICAgZW5kCiAgZW5k CgogICMgVGhlIGFjdHVhbCBjbGllbnQgdGhhdCBzZW5kcyBIVFRQIG1ldGhv ZHMgdG8gdGhlIERvY2tlciBzZXJ2ZXIuIFRoaXMgdmFsdWUKICAjIGlzIG5v dCBjYWNoZWQsIHNpbmNlIGRvaW5nIHNvIG1heSBjYXVzZSBzb2NrZXQgZXJy b3JzIGFmdGVyIGJhZCByZXF1ZXN0cy4KICBkZWYgcmVzb3VyY2UKICAgIEV4 Y29uLm5ldyh1cmwsIG9wdGlvbnMpCiAgZW5kCiAgcHJpdmF0ZSA6cmVzb3Vy Y2UKCiAgIyBTZW5kIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHdpdGggdGhl IGAKICBkZWYgcmVxdWVzdCgqYXJncywgJmJsb2NrKQogICAgcmVxdWVzdCA9 IGNvbXBpbGVfcmVxdWVzdF9wYXJhbXMoKmFyZ3MsICZibG9jaykKICAgIGlm IERvY2tlci5sb2dnZXIKICAgICAgRG9ja2VyLmxvZ2dlci5kZWJ1ZygKICAg ICAgICBbcmVxdWVzdFs6bWV0aG9kXSwgcmVxdWVzdFs6cGF0aF0sIHJlcXVl c3RbOnF1ZXJ5XSwgcmVxdWVzdFs6Ym9keV1dCiAgICAgICkKICAgIGVuZAog ICAgcmVzb3VyY2UucmVxdWVzdChyZXF1ZXN0KS5ib2R5CiAgcmVzY3VlIEV4 Y29uOjpFcnJvcnM6OkJhZFJlcXVlc3QgPT4gZXgKICAgIHJhaXNlIENsaWVu dEVycm9yLCBleC5tZXNzYWdlCiAgcmVzY3VlIEV4Y29uOjpFcnJvcnM6OlVu YXV0aG9yaXplZCA9PiBleAogICAgcmFpc2UgVW5hdXRob3JpemVkRXJyb3Is IGV4Lm1lc3NhZ2UKICByZXNjdWUgRXhjb246OkVycm9yczo6Tm90Rm91bmQg PT4gZXgKICAgIHJhaXNlIE5vdEZvdW5kRXJyb3IsIGV4Lm1lc3NhZ2UKICBy ZXNjdWUgRXhjb246OkVycm9yczo6SW50ZXJuYWxTZXJ2ZXJFcnJvciA9PiBl eAogICAgcmFpc2UgU2VydmVyRXJyb3IsIGV4LnJlc3BvbnNlLmRhdGFbOmJv ZHldCiAgcmVzY3VlIEV4Y29uOjpFcnJvcnM6OlRpbWVvdXQgPT4gZXgKICAg IHJhaXNlIFRpbWVvdXRFcnJvciwgZXgubWVzc2FnZQogIGVuZAoKICAjIERl bGVnYXRlIGFsbCBIVFRQIG1ldGhvZHMgdG8gdGhlICNyZXF1ZXN0LgogIFs6 Z2V0LCA6cHV0LCA6cG9zdCwgOmRlbGV0ZV0uZWFjaCBkbyB8bWV0aG9kfAog ICAgZGVmaW5lX21ldGhvZChtZXRob2QpIHsgfCphcmdzLCAmYmxvY2t8IHJl cXVlc3QobWV0aG9kLCAqYXJncywgJmJsb2NrKSB9CiAgZW5kCgogIGRlZiB0 b19zCiAgICAiRG9ja2VyOjpDb25uZWN0aW9uIHsgOnVybCA9PiAje3VybH0s IDpvcHRpb25zID0+ICN7b3B0aW9uc30gfSIKICBlbmQKCnByaXZhdGUKICAj IEdpdmVuIGFuIEhUVFAgbWV0aG9kLCBwYXRoLCBvcHRpb25hbCBxdWVyeSwg ZXh0cmEgb3B0aW9ucywgYW5kIGJsb2NrLAogICMgY29tcGlsZXMgYSByZXF1 ZXN0LgogIGRlZiBjb21waWxlX3JlcXVlc3RfcGFyYW1zKGh0dHBfbWV0aG9k LCBwYXRoLCBxdWVyeSA9IG5pbCwgb3B0cyA9IG5pbCwgJmJsb2NrKQogICAg cXVlcnkgfHw9IHt9CiAgICBvcHRzIHx8PSB7fQogICAgaGVhZGVycyA9IG9w dHMuZGVsZXRlKDpoZWFkZXJzKSB8fCB7fQogICAgY29udGVudF90eXBlID0g b3B0c1s6Ym9keV0ubmlsPyA/ICAndGV4dC9wbGFpbicgOiAnYXBwbGljYXRp b24vanNvbicKICAgIHVzZXJfYWdlbnQgPSAiU3dpcGVseS9Eb2NrZXItQVBJ ICN7RG9ja2VyOjpWRVJTSU9OfSIKICAgIHsKICAgICAgOm1ldGhvZCAgICAg ICAgPT4gaHR0cF9tZXRob2QsCiAgICAgIDpwYXRoICAgICAgICAgID0+ICIv diN7RG9ja2VyOjpBUElfVkVSU0lPTn0je3BhdGh9IiwKICAgICAgOnF1ZXJ5 ICAgICAgICAgPT4gcXVlcnksCiAgICAgIDpoZWFkZXJzICAgICAgID0+IHsg J0NvbnRlbnQtVHlwZScgPT4gY29udGVudF90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICdVc2VyLUFnZW50JyAgID0+IHVzZXJfYWdlbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgIH0ubWVyZ2UoaGVhZGVycyksCiAgICAg IDpleHBlY3RzICAgICAgID0+ICgyMDAuLjIwNCkudG9fYSA8PCAzMDQsCiAg ICAgIDppZGVtcG90ZW50ICAgID0+IGh0dHBfbWV0aG9kID09IDpnZXQsCiAg ICAgIDpyZXF1ZXN0X2Jsb2NrID0+IGJsb2NrCiAgICB9Lm1lcmdlKG9wdHMp LnJlamVjdCB7IHxfLCB2fCB2Lm5pbD8gfQogIGVuZAplbmQKAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkb2Nr ZXIvY29udGFpbmVyLnJiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDEwMDY0NAAwMDAwNzY2ADAwMDAwMjQAMDAwMDAwMTYzNzEAMTI0 MzcxMTc2MzYAMDExNjM2ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACMgVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgRG9ja2Vy IENvbnRhaW5lci4gSXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IG5vdGhp bmcKIyBpcyBjYWNoZWQgc28gdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgYWx3 YXlzIHVwIHRvIGRhdGUuCmNsYXNzIERvY2tlcjo6Q29udGFpbmVyCiAgaW5j bHVkZSBEb2NrZXI6OkJhc2UKCiAgIyBSZXR1cm4gYSBMaXN0IG9mIEhhc2hl cyB0aGF0IHJlcHJlc2VudHMgdGhlIHRvcCBydW5uaW5nIHByb2Nlc3Nlcy4K ICBkZWYgdG9wKG9wdHMgPSB7fSkKICAgIHJlc3AgPSBEb2NrZXI6OlV0aWwu cGFyc2VfanNvbihjb25uZWN0aW9uLmdldChwYXRoX2Zvcig6dG9wKSwgb3B0 cykpCiAgICBpZiByZXNwWydQcm9jZXNzZXMnXS5uaWw/CiAgICAgIFtdCiAg ICBlbHNlCiAgICAgIHJlc3BbJ1Byb2Nlc3NlcyddLm1hcCB7IHxhcnl8IEhh c2hbcmVzcFsnVGl0bGVzJ10uemlwKGFyeSldIH0KICAgIGVuZAogIGVuZAoK ICAjIFdhaXQgZm9yIHRoZSBjdXJyZW50IGNvbW1hbmQgdG8gZmluaXNoIGV4 ZWN1dGluZy4gRGVmYXVsdCB3YWl0IHRpbWUgaXMKICAjIGBFeGNvbi5vcHRp b25zWzpyZWFkX3RpbWVvdXRdYC4KICBkZWYgd2FpdCh0aW1lID0gbmlsKQog ICAgcmVzcCA9IGNvbm5lY3Rpb24ucG9zdChwYXRoX2Zvcig6d2FpdCksIG5p bCwgOnJlYWRfdGltZW91dCA9PiB0aW1lKQogICAgRG9ja2VyOjpVdGlsLnBh cnNlX2pzb24ocmVzcCkKICBlbmQKCiAgIyBHaXZlbiBhIGNvbW1hbmQgYW5k IGFuIG9wdGlvbmFsIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIHRo ZSBjdXJyZW50bHkKICAjIGV4ZWN1dGluZyBjb21tYW5kLCBjcmVhdGVzIGEg bmV3IENvbnRhaW5lciB0byBydW4gdGhlIHNwZWNpZmllZCBjb21tYW5kLiBJ ZgogICMgdGhlIGNvbW1hbmQgdGhhdCBpcyBjdXJyZW50bHkgZXhlY3V0aW5n IGRvZXMgbm90IHJldHVybiBhIDAgc3RhdHVzIGNvZGUsIGFuCiAgIyBVbmV4 cGVjdGVkUmVzcG9uc2VFcnJvciBpcyByYWlzZWQuCiAgZGVmIHJ1bihjbWQs IHRpbWUgPSAxMDAwKQogICAgaWYgKGNvZGUgPSB0YXAoJjpzdGFydCkud2Fp dCh0aW1lKVsnU3RhdHVzQ29kZSddKS56ZXJvPwogICAgICBjb21taXQucnVu KGNtZCkKICAgIGVsc2UKICAgICAgcmFpc2UgVW5leHBlY3RlZFJlc3BvbnNl RXJyb3IsICJDb21tYW5kIHJldHVybmVkIHN0YXR1cyBjb2RlICN7Y29kZX0u IgogICAgZW5kCiAgZW5kCgogICMgQ3JlYXRlIGFuIEV4ZWMgaW5zdGFuY2Ug aW5zaWRlIHRoZSBjb250YWluZXIKICAjCiAgIyBAcGFyYW0gY29tbWFuZCBb U3RyaW5nLCBBcnJheV0gVGhlIGNvbW1hbmQgdG8gcnVuIGluc2lkZSB0aGUg RXhlYyBpbnN0YW5jZQogICMgQHBhcmFtIG9wdGlvbnMgW0hhc2hdIFRoZSBv cHRpb25zIHRvIHBhc3MgdG8gRG9ja2VyOjpFeGVjCiAgIwogICMgQHJldHVy biBbRG9ja2VyOjpFeGVjXSBUaGUgRXhlYyBpbnN0YW5jZQogIGRlZiBleGVj KGNvbW1hbmQsIG9wdHMgPSB7fSwgJmJsb2NrKQogICAgIyBFc3RhYmxpc2gg dmFsdWVzCiAgICB0dHkgPSBvcHRzLmRlbGV0ZSg6dHR5KSB8fCBmYWxzZQog ICAgZGV0YWNoID0gb3B0cy5kZWxldGUoOmRldGFjaCkgfHwgZmFsc2UKICAg IHN0ZGluID0gb3B0cy5kZWxldGUoOnN0ZGluKQogICAgc3Rkb3V0ID0gb3B0 cy5kZWxldGUoOnN0ZG91dCkgfHwgIWRldGFjaAogICAgc3RkZXJyID0gb3B0 cy5kZWxldGUoOnN0ZGVycikgfHwgIWRldGFjaAoKICAgICMgQ3JlYXRlIEV4 ZWMgSW5zdGFuY2UKICAgIGluc3RhbmNlID0gRG9ja2VyOjpFeGVjLmNyZWF0 ZSgKICAgICAgJ0NvbnRhaW5lcicgPT4gc2VsZi5pZCwKICAgICAgJ0F0dGFj aFN0ZGluJyA9PiAhIXN0ZGluLAogICAgICAnQXR0YWNoU3Rkb3V0JyA9PiBz dGRvdXQsCiAgICAgICdBdHRhY2hTdGRlcnInID0+IHN0ZGVyciwKICAgICAg J1R0eScgPT4gdHR5LAogICAgICAnQ21kJyA9PiBjb21tYW5kCiAgICApCgog ICAgc3RhcnRfb3B0cyA9IHsKICAgICAgOnR0eSA9PiB0dHksCiAgICAgIDpz dGRpbiA9PiBzdGRpbiwKICAgICAgOmRldGFjaCA9PiBkZXRhY2gKICAgIH0K CiAgICBpZiBkZXRhY2gKICAgICAgaW5zdGFuY2Uuc3RhcnQhKHN0YXJ0X29w dHMpCiAgICAgIHJldHVybiBpbnN0YW5jZQogICAgZWxzZQogICAgICBpbnN0 YW5jZS5zdGFydCEoc3RhcnRfb3B0cywgJmJsb2NrKQogICAgZW5kCiAgZW5k CgogICMgRXhwb3J0IHRoZSBDb250YWluZXIgYXMgYSB0YXIuCiAgZGVmIGV4 cG9ydCgmYmxvY2spCiAgICBjb25uZWN0aW9uLmdldChwYXRoX2Zvcig6ZXhw b3J0KSwge30sIDpyZXNwb25zZV9ibG9jayA9PiBibG9jaykKICAgIHNlbGYK ICBlbmQKCiAgIyBBdHRhY2ggdG8gYSBjb250YWluZXIncyBzdGFuZGFyZCBz dHJlYW1zIC8gbG9ncy4KICBkZWYgYXR0YWNoKG9wdGlvbnMgPSB7fSwgJmJs b2NrKQogICAgc3RkaW4gPSBvcHRpb25zLmRlbGV0ZSg6c3RkaW4pCiAgICB0 dHkgICA9IG9wdGlvbnMuZGVsZXRlKDp0dHkpCgogICAgb3B0cyA9IHsKICAg ICAgOnN0cmVhbSA9PiB0cnVlLCA6c3Rkb3V0ID0+IHRydWUsIDpzdGRlcnIg PT4gdHJ1ZQogICAgfS5tZXJnZShvcHRpb25zKQogICAgIyBDcmVhdGVzIGxp c3QgdG8gc3RvcmUgc3Rkb3V0IGFuZCBzdGRlcnIgbWVzc2FnZXMKICAgIG1z Z3MgPSBEb2NrZXI6Ok1lc3NhZ2VzLm5ldwoKICAgIGV4Y29uX3BhcmFtcyA9 IHt9CgogICAgaWYgc3RkaW4KICAgICAgIyBJZiBhdHRhY2hpbmcgdG8gc3Rk aW4sIHdlIG11c3QgaGlqYWNrIHRoZSB1bmRlcmx5aW5nIFRDUCBjb25uZWN0 aW9uCiAgICAgICMgc28gd2UgY2FuIHN0cmVhbSBzdGRpbiB0byB0aGUgcmVt b3RlIERvY2tlciBwcm9jZXNzCiAgICAgIG9wdHNbOnN0ZGluXSA9IHRydWUK ICAgICAgZXhjb25fcGFyYW1zWzpoaWphY2tfYmxvY2tdID0gRG9ja2VyOjpV dGlsLmhpamFja19mb3Ioc3RkaW4sIGJsb2NrLCBtc2dzLCB0dHkpCiAgICBl bHNlCiAgICAgIGV4Y29uX3BhcmFtc1s6cmVzcG9uc2VfYmxvY2tdID0gRG9j a2VyOjpVdGlsLmF0dGFjaF9mb3IoYmxvY2ssIG1zZ3MsIHR0eSkKICAgIGVu ZAoKICAgIGNvbm5lY3Rpb24ucG9zdCgKICAgICAgcGF0aF9mb3IoOmF0dGFj aCksCiAgICAgIG9wdHMsCiAgICAgIGV4Y29uX3BhcmFtcwogICAgKQogICAg W21zZ3Muc3Rkb3V0X21lc3NhZ2VzLCBtc2dzLnN0ZGVycl9tZXNzYWdlc10K ICBlbmQKCiAgIyBDcmVhdGUgYW4gSW1hZ2UgZnJvbSBhIENvbnRhaW5lcidz IGNoYW5nZS5zCiAgZGVmIGNvbW1pdChvcHRpb25zID0ge30pCiAgICBvcHRp b25zLm1lcmdlISgnY29udGFpbmVyJyA9PiBzZWxmLmlkWzAuLjddKQogICAg IyBbY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2RvdGNsb3VkL2RvY2tlci9i bG9iL3YwLjYuMy9jb21tYW5kcy5nbyNMMTExNSkKICAgICMgQmFzZWQgb24g dGhlIGxpbmssIHRoZSBjb25maWcgcGFzc2VkIGFzIHJ1biwgbmVlZHMgdG8g YmUgcGFzc2VkIGFzIHRoZQogICAgIyBib2R5IG9mIHRoZSBwb3N0IHNvIGNh cHR1cmUgaXQsIHJlbW92ZSBmcm9tIHRoZSBvcHRpb25zLCBhbmQgcGFzcyBp dCB2aWEKICAgICMgdGhlIHBvc3QgYm9keQogICAgY29uZmlnID0gb3B0aW9u cy5kZWxldGUoJ3J1bicpCiAgICBoYXNoID0gRG9ja2VyOjpVdGlsLnBhcnNl X2pzb24oY29ubmVjdGlvbi5wb3N0KCcvY29tbWl0JywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOmJvZHkgPT4gY29uZmlnLnRvX2pzb24pKQogICAgRG9ja2Vy OjpJbWFnZS5zZW5kKDpuZXcsIHNlbGYuY29ubmVjdGlvbiwgaGFzaCkKICBl bmQKCiAgIyBSZXR1cm4gYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhl IENvbnRhaW5lci4KICBkZWYgdG9fcwogICAgIkRvY2tlcjo6Q29udGFpbmVy IHsgOmlkID0+ICN7c2VsZi5pZH0sIDpjb25uZWN0aW9uID0+ICN7c2VsZi5j b25uZWN0aW9ufSB9IgogIGVuZAoKICAjICNqc29uIHJldHVybnMgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIENvbnRhaW5lciwgI2NoYW5nZXMgcmV0dXJucyBh IGxpc3Qgb2YKICAjIHRoZSBjaGFuZ2VzIHRoZSBDb250YWluZXIgaGFzIG1h ZGUgdG8gdGhlIGZpbGVzeXN0ZW0uCiAgWzpqc29uLCA6Y2hhbmdlc10uZWFj aCBkbyB8bWV0aG9kfAogICAgZGVmaW5lX21ldGhvZChtZXRob2QpIGRvIHxv cHRzID0ge318CiAgICAgIERvY2tlcjo6VXRpbC5wYXJzZV9qc29uKGNvbm5l Y3Rpb24uZ2V0KHBhdGhfZm9yKG1ldGhvZCksIG9wdHMpKQogICAgZW5kCiAg ZW5kCgogIGRlZiBsb2dzKG9wdHMgPSB7fSkKICAgIGNvbm5lY3Rpb24uZ2V0 KHBhdGhfZm9yKDpsb2dzKSwgb3B0cykKICBlbmQKCiAgZGVmIHN0cmVhbWlu Z19sb2dzKG9wdHMgPSB7fSwgJmJsb2NrKQogICAgbXNncyA9IERvY2tlcjo6 TWVzc2FnZXMubmV3CiAgICBleGNvbl9wYXJhbXMgPSB7IHJlc3BvbnNlX2Js b2NrOiBEb2NrZXI6OlV0aWwuYXR0YWNoX2ZvcihibG9jaywgbXNncywgZmFs c2UpIH0KCiAgICBjb25uZWN0aW9uLmdldChwYXRoX2Zvcig6bG9ncyksIG9w dHMsIGV4Y29uX3BhcmFtcykKICAgIG1zZ3MuYWxsX21lc3NhZ2VzLmpvaW4K ICBlbmQKCiAgZGVmIHN0YXJ0IShvcHRzID0ge30pCiAgICBjb25uZWN0aW9u LnBvc3QocGF0aF9mb3IoOnN0YXJ0KSwge30sIDpib2R5ID0+IG9wdHMudG9f anNvbikKICAgIHNlbGYKICBlbmQKCiAgZGVmIGtpbGwhKG9wdHMgPSB7fSkK ICAgIGNvbm5lY3Rpb24ucG9zdChwYXRoX2Zvcig6a2lsbCksIG9wdHMpCiAg ICBzZWxmCiAgZW5kCgogICMgI3N0YXJ0ISBhbmQgI2tpbGwhIGJvdGggcGVy Zm9ybSB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gYW5kCiAgIyByZXR1cm4gdGhl IENvbnRhaW5lci4gI3N0YXJ0IGFuZCAja2lsbCBkbyB0aGUgc2FtZSwKICAj IGJ1dCByZXNjdWUgZnJvbSBTZXJ2ZXJFcnJvcnMuCiAgWzpzdGFydCwgOmtp bGxdLmVhY2ggZG8gfG1ldGhvZHwKICAgIGRlZmluZV9tZXRob2QobWV0aG9k KSBkbyB8KmFyZ3N8CiAgICAgIGJlZ2luOyBwdWJsaWNfc2VuZCg6IiN7bWV0 aG9kfSEiLCAqYXJncyk7IHJlc2N1ZSBTZXJ2ZXJFcnJvcjsgc2VsZiBlbmQK ICAgIGVuZAogIGVuZAoKICAjICNzdG9wISBhbmQgI3Jlc3RhcnQhIGJvdGgg cGVyZm9ybSB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gYW5kCiAgIyByZXR1cm4g dGhlIENvbnRhaW5lci4gI3N0b3AgYW5kICNyZXN0YXJ0IGRvIHRoZSBzYW1l LAogICMgYnV0IHJlc2N1ZSBmcm9tIFNlcnZlckVycm9ycy4KICBbOnN0b3As IDpyZXN0YXJ0XS5lYWNoIGRvIHxtZXRob2R8CiAgICBkZWZpbmVfbWV0aG9k KDoiI3ttZXRob2R9ISIpIGRvIHxvcHRzID0ge318CiAgICAgIHRpbWVvdXQg PSBvcHRzLmRlbGV0ZSgndGltZW91dCcpCiAgICAgIHF1ZXJ5ID0ge30KICAg ICAgcXVlcnlbJ3QnXSA9IHRpbWVvdXQgaWYgdGltZW91dAogICAgICBjb25u ZWN0aW9uLnBvc3QocGF0aF9mb3IobWV0aG9kKSwgcXVlcnksIDpib2R5ID0+ IG9wdHMudG9fanNvbikKICAgICAgc2VsZgogICAgZW5kCgogICAgZGVmaW5l X21ldGhvZChtZXRob2QpIGRvIHwqYXJnc3wKICAgICAgYmVnaW47IHB1Ymxp Y19zZW5kKDoiI3ttZXRob2R9ISIsICphcmdzKTsgcmVzY3VlIFNlcnZlckVy cm9yOyBzZWxmIGVuZAogICAgZW5kCiAgZW5kCgogICMgcmVtb3ZlIGNvbnRh aW5lcgogIGRlZiByZW1vdmUob3B0aW9ucyA9IHt9KQogICAgY29ubmVjdGlv bi5kZWxldGUoIi9jb250YWluZXJzLyN7c2VsZi5pZH0iLCBvcHRpb25zKQog ICAgbmlsCiAgZW5kCiAgYWxpYXNfbWV0aG9kIDpkZWxldGUsIDpyZW1vdmUK CiAgIyBwYXVzZSBhbmQgdW5wYXVzZSBjb250YWluZXJzCiAgIyAjcGF1c2Uh IGFuZCAjdW5wYXVzZSEgYm90aCBwZXJmb3JtIHRoZSBhc3NvY2lhdGVkIGFj dGlvbiBhbmQKICAjIHJldHVybiB0aGUgQ29udGFpbmVyLiAjcGF1c2UgYW5k ICN1bnBhdXNlIGRvIHRoZSBzYW1lLAogICMgYnV0IHJlc2N1ZSBmcm9tIFNl cnZlckVycm9ycy4KICBbOnBhdXNlLCA6dW5wYXVzZV0uZWFjaCBkbyB8bWV0 aG9kfAogICAgZGVmaW5lX21ldGhvZCg6IiN7bWV0aG9kfSEiKSBkbwogICAg ICBjb25uZWN0aW9uLnBvc3QgcGF0aF9mb3IobWV0aG9kKQogICAgICBzZWxm CiAgICBlbmQKCiAgICBkZWZpbmVfbWV0aG9kKG1ldGhvZCkgZG8KICAgICAg YmVnaW47IHB1YmxpY19zZW5kKDoiI3ttZXRob2R9ISIpOyByZXNjdWUgU2Vy dmVyRXJyb3I7IHNlbGY7IGVuZAogICAgZW5kCiAgZW5kCgogIGRlZiBjb3B5 KHBhdGgsICZibG9jaykKICAgIGNvbm5lY3Rpb24ucG9zdChwYXRoX2Zvcig6 Y29weSksIHt9LAogICAgICA6Ym9keSA9PiB7ICJSZXNvdXJjZSIgPT4gcGF0 aCB9LnRvX2pzb24sCiAgICAgIDpyZXNwb25zZV9ibG9jayA9PiBibG9jawog ICAgKQogICAgc2VsZgogIGVuZAoKICAjIENyZWF0ZSBhIG5ldyBDb250YWlu ZXIuCiAgZGVmIHNlbGYuY3JlYXRlKG9wdHMgPSB7fSwgY29ubiA9IERvY2tl ci5jb25uZWN0aW9uKQogICAgbmFtZSA9IG9wdHMuZGVsZXRlKCduYW1lJykK ICAgIHF1ZXJ5ID0ge30KICAgIHF1ZXJ5WyduYW1lJ10gPSBuYW1lIGlmIG5h bWUKICAgIHJlc3AgPSBjb25uLnBvc3QoJy9jb250YWluZXJzL2NyZWF0ZScs IHF1ZXJ5LCA6Ym9keSA9PiBvcHRzLnRvX2pzb24pCiAgICBoYXNoID0gRG9j a2VyOjpVdGlsLnBhcnNlX2pzb24ocmVzcCkgfHwge30KICAgIG5ldyhjb25u LCBoYXNoKQogIGVuZAoKICAjIFJldHVybiB0aGUgY29udGFpbmVyIHdpdGgg c3BlY2lmaWVkIElECiAgZGVmIHNlbGYuZ2V0KGlkLCBvcHRzID0ge30sIGNv bm4gPSBEb2NrZXIuY29ubmVjdGlvbikKICAgIGNvbnRhaW5lcl9qc29uID0g Y29ubi5nZXQoIi9jb250YWluZXJzLyN7VVJJLmVuY29kZShpZCl9L2pzb24i LCBvcHRzKQogICAgaGFzaCA9IERvY2tlcjo6VXRpbC5wYXJzZV9qc29uKGNv bnRhaW5lcl9qc29uKSB8fCB7fQogICAgbmV3KGNvbm4sIGhhc2gpCiAgZW5k CgogICMgUmV0dXJuIGFsbCBvZiB0aGUgQ29udGFpbmVycy4KICBkZWYgc2Vs Zi5hbGwob3B0cyA9IHt9LCBjb25uID0gRG9ja2VyLmNvbm5lY3Rpb24pCiAg ICBoYXNoZXMgPSBEb2NrZXI6OlV0aWwucGFyc2VfanNvbihjb25uLmdldCgn L2NvbnRhaW5lcnMvanNvbicsIG9wdHMpKSB8fCBbXQogICAgaGFzaGVzLm1h cCB7IHxoYXNofCBuZXcoY29ubiwgaGFzaCkgfQogIGVuZAoKICAjIENvbnZl bmllbmNlIG1ldGhvZCB0byByZXR1cm4gdGhlIHBhdGggZm9yIGEgcGFydGlj dWxhciByZXNvdXJjZS4KICBkZWYgcGF0aF9mb3IocmVzb3VyY2UpCiAgICAi L2NvbnRhaW5lcnMvI3tzZWxmLmlkfS8je3Jlc291cmNlfSIKICBlbmQKCiAg cHJpdmF0ZSA6cGF0aF9mb3IKICBwcml2YXRlX2NsYXNzX21ldGhvZCA6bmV3 CmVuZAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRv Y2tlci9lcnJvci5yYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAwMTAwNjQ0ADAwMDA3NjYAMDAwMDAyNAAwMDAwMDAwMjE2MAAx MjQzMzAwNzU1NQAwMTA3NjYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAIyBUaGlzIG1vZHVsZSBob2xkcyB0aGUgRXJyb3Jz IGZvciB0aGUgZ2VtLgptb2R1bGUgRG9ja2VyOjpFcnJvcgoKICAjIFRoZSBk ZWZhdWx0IGVycm9yLiBJdCdzIG5ldmVyIGFjdHVhbGx5IHJhaXNlZCwgYnV0 IGNhbiBiZSB1c2VkIHRvIGNhdGNoIGFsbAogICMgZ2VtLXNwZWNpZmljIGVy cm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgdGhleSBhbGwgc3ViY2xhc3MgZnJv bSB0aGlzLgogIGNsYXNzIERvY2tlckVycm9yIDwgU3RhbmRhcmRFcnJvcjsg ZW5kCgogICMgUmFpc2VkIHdoZW4gaW52YWxpZCBhcmd1bWVudHMgYXJlIHBh c3NlZCB0byBhIG1ldGhvZC4KICBjbGFzcyBBcmd1bWVudEVycm9yIDwgRG9j a2VyRXJyb3I7IGVuZAoKICAjIFJhaXNlZCB3aGVuIGEgcmVxdWVzdCByZXR1 cm5zIGEgNDAwLgogIGNsYXNzIENsaWVudEVycm9yIDwgRG9ja2VyRXJyb3I7 IGVuZAoKICAjIFJhaXNlZCB3aGVuIGEgcmVxdWVzdCByZXR1cm5zIGEgNDAx LgogIGNsYXNzIFVuYXV0aG9yaXplZEVycm9yIDwgRG9ja2VyRXJyb3I7IGVu ZAoKICAjIFJhaXNlZCB3aGVuIGEgcmVxdWVzdCByZXR1cm5zIGEgNDA0Lgog IGNsYXNzIE5vdEZvdW5kRXJyb3IgPCBEb2NrZXJFcnJvcjsgZW5kCgogICMg UmFpc2VkIHdoZW4gYSByZXF1ZXN0IHJldHVybnMgYSA1MDAuCiAgY2xhc3Mg U2VydmVyRXJyb3IgPCBEb2NrZXJFcnJvcjsgZW5kCgogICMgUmFpc2VkIHdo ZW4gdGhlcmUgaXMgYW4gdW5leHBlY3RlZCByZXNwb25zZSBjb2RlIC8gYm9k eS4KICBjbGFzcyBVbmV4cGVjdGVkUmVzcG9uc2VFcnJvciA8IERvY2tlckVy cm9yOyBlbmQKCiAgIyBSYWlzZWQgd2hlbiB0aGVyZSBpcyBhbiBpbmNvbXBh dGlibGUgdmVyc2lvbiBvZiBEb2NrZXIuCiAgY2xhc3MgVmVyc2lvbkVycm9y IDwgRG9ja2VyRXJyb3I7IGVuZAoKICAjIFJhaXNlZCB3aGVuIGEgcmVxdWVz dCB0aW1lcyBvdXQuCiAgY2xhc3MgVGltZW91dEVycm9yIDwgRG9ja2VyRXJy b3I7IGVuZAoKICAjIFJhaXNlZCB3aGVuIGxvZ2luIGZhaWxzLgogIGNsYXNz IEF1dGhlbnRpY2F0aW9uRXJyb3IgPCBEb2NrZXJFcnJvcjsgZW5kCgogICMg UmFpc2VkIHdoZW4gYW4gSU8gYWN0aW9uIGZhaWxzLgogIGNsYXNzIElPRXJy b3IgPCBEb2NrZXJFcnJvcjsgZW5kCmVuZAoAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAZG9ja2VyL2V2ZW50LnJiAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDc2 NgAwMDAwMDI0ADAwMDAwMDAxNzUxADEyNDMzMDA3NTU1ADAxMDc2MwAgMAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAB1c3RhcgAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIFRoaXMg Y2xhc3MgcmVwcmVzZW50cyBhIERvY2tlciBJbWFnZS4KY2xhc3MgRG9ja2Vy OjpFdmVudAogIGluY2x1ZGUgRG9ja2VyOjpFcnJvcgoKICBhdHRyX2FjY2Vz c29yIDpzdGF0dXMsIDppZCwgOmZyb20sIDp0aW1lCgogIGRlZiBpbml0aWFs aXplKHN0YXR1cywgaWQsIGZyb20sIHRpbWUpCiAgICBAc3RhdHVzLCBAaWQs IEBmcm9tLCBAdGltZSA9IHN0YXR1cywgaWQsIGZyb20sIHRpbWUKICBlbmQK CiAgZGVmIHRvX3MKICAgICJEb2NrZXI6OkV2ZW50IHsgOnN0YXR1cyA9PiAj e3NlbGYuc3RhdHVzfSwgOmlkID0+ICN7c2VsZi5pZH0sICJcCiAgICAgICI6 ZnJvbSA9PiAje3NlbGYuZnJvbX0sIDp0aW1lID0+ICN7c2VsZi50aW1lfSB9 IgogIGVuZAoKICBjbGFzcyA8PCBzZWxmCiAgICBpbmNsdWRlIERvY2tlcjo6 RXJyb3IKCiAgICBkZWYgc3RyZWFtKG9wdHMgPSB7fSwgY29ubiA9IERvY2tl ci5jb25uZWN0aW9uLCAmYmxvY2spCiAgICAgIGNvbm4uZ2V0KCcvZXZlbnRz Jywgb3B0cywgOnJlc3BvbnNlX2Jsb2NrID0+IGxhbWJkYSB7IHxiLCByLCB0 fAogICAgICAgIGJsb2NrLmNhbGwobmV3X2V2ZW50KGIsIHIsIHQpKQogICAg ICB9KQogICAgZW5kCgogICAgZGVmIHNpbmNlKHNpbmNlLCBvcHRzID0ge30s IGNvbm4gPSBEb2NrZXIuY29ubmVjdGlvbiwgJmJsb2NrKQogICAgICBzdHJl YW0ob3B0cy5tZXJnZSg6c2luY2UgPT4gc2luY2UpLCBjb25uLCAmYmxvY2sp CiAgICBlbmQKCiAgICBkZWYgbmV3X2V2ZW50KGJvZHksIHJlbWFpbmluZywg dG90YWwpCiAgICAgIHJldHVybiBpZiBib2R5Lm5pbD8gfHwgYm9keS5lbXB0 eT8KICAgICAganNvbiA9IERvY2tlcjo6VXRpbC5wYXJzZV9qc29uKGJvZHkp CiAgICAgIERvY2tlcjo6RXZlbnQubmV3KAogICAgICAgIGpzb25bJ3N0YXR1 cyddLAogICAgICAgIGpzb25bJ2lkJ10sCiAgICAgICAganNvblsnZnJvbSdd LAogICAgICAgIGpzb25bJ3RpbWUnXQogICAgICApCiAgICBlbmQKICBlbmQK ZW5kCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZG9ja2VyL2V4ZWMucmIAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQA MDAwMDc2NgAwMDAwMDI0ADAwMDAwMDA1NjczADEyNDM3MTE2MTU0ADAxMDU3 NQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAB1c3RhcgAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj IFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIERvY2tlciBFeGVjIEluc3RhbmNl LgpjbGFzcyBEb2NrZXI6OkV4ZWMKICBpbmNsdWRlIERvY2tlcjo6QmFzZQoK ICAjIENvbnZlcnQgZGV0YWlscyBhYm91dCB0aGUgb2JqZWN0IGludG8gYSBz dHJpbmcKICAjCiAgIyBAcmV0dXJuIFtTdHJpbmddIFN0cmluZyByZXByZXNl bnRhdGlvbiBvZiB0aGUgRXhlYyBpbnN0YW5jZSBvYmplY3QKICBkZWYgdG9f cwogICAgIkRvY2tlcjo6RXhlYyB7IDppZCA9PiAje3NlbGYuaWR9LCA6Y29u bmVjdGlvbiA9PiAje3NlbGYuY29ubmVjdGlvbn0gfSIKICBlbmQKCiAgIyBD cmVhdGUgYSBuZXcgRXhlYyBpbnN0YW5jZSBpbiBhIHJ1bm5pbmcgY29udGFp bmVyLiBQbGVhc2Ugbm90ZSwgdGhpcyBkb2VzCiAgIyBOT1QgZXhlY3V0ZSB0 aGUgaW5zdGFuY2UgLSB5b3UgbXVzdCBydW4gI3N0YXJ0LiBBbHNvLCBlYWNo IGluc3RhbmNlIGlzCiAgIyBvbmUtdGltZSB1c2Ugb25seS4KICAjCiAgIyBA cGFyYW0gb3B0aW9ucyBbSGFzaF0gUGFyYW1ldGVycyB0byBwYXNzIGluIHRv IHRoZSBBUEkuCiAgIyBAcGFyYW0gY29ubiBbRG9ja2VyOjpDb25uZWN0aW9u XSBDb25uZWN0aW9uIHRvIERvY2tlciBSZW1vdGUgQVBJCiAgIwogICMgQHJl dHVybiBbRG9ja2VyOjpFeGVjXSBzZWxmCiAgZGVmIHNlbGYuY3JlYXRlKG9w dGlvbnMgPSB7fSwgY29ubiA9IERvY2tlci5jb25uZWN0aW9uKQogICAgY29u dGFpbmVyID0gb3B0aW9ucy5kZWxldGUoJ0NvbnRhaW5lcicpCiAgICByZXNw ID0gY29ubi5wb3N0KCIvY29udGFpbmVycy8je2NvbnRhaW5lcn0vZXhlYyIs IHt9LCA6Ym9keSA9PiBvcHRpb25zLnRvX2pzb24pCiAgICBoYXNoID0gRG9j a2VyOjpVdGlsLnBhcnNlX2pzb24ocmVzcCkgfHwge30KICAgIG5ldyhjb25u LCBoYXNoKQogIGVuZAoKICAjIFN0YXJ0IHRoZSBFeGVjIGluc3RhbmNlLiBU aGUgRXhlYyBpbnN0YW5jZSBpcyBkZWxldGVkIGFmdGVyIHRoaXMgc28gdGhp cwogICMgY29tbWFuZCBjYW4gb25seSBiZSBydW4gb25jZS4KICAjCiAgIyBA cGFyYW0gb3B0aW9ucyBbSGFzaF0gT3B0aW9ucyB0byBkaWN0YXRlIGJlaGF2 aW9yIG9mIHRoZSBpbnN0YW5jZQogICMgQG9wdGlvbiBvcHRpb25zIFtPYmpl Y3RdIDpzdGRpbiAobmlsKSBUaGUgb2JqZWN0IHRvIHBhc3MgdG8gU1RESU4u CiAgIyBAb3B0aW9uIG9wdGlvbnMgW1RydWVDbGFzcywgRmFsc2VDbGFzc10g OmRldGFjaCAoZmFsc2UpIFdoZXRoZXIgdG8gYXR0YWNoCiAgIyAgICAgdG8g U1RET1VUL1NUREVSUi4KICAjIEBvcHRpb24gb3B0aW9ucyBbVHJ1ZUNsYXNz LCBGYWxzZUNsYXNzXSA6dHR5IChmYWxzZSkgV2hldGhlciB0byBhdHRhY2gg dXNpbmcKICAjICAgICBhIHBzZXVkby1UVFkuCiAgIwogICMgQHJldHVybiBb QXJyYXksIEFycmF5XSBUaGUgU1RET1VUIGFuZCBTVERFUlIgcmVzcG9uc2Vz CiAgZGVmIHN0YXJ0IShvcHRpb25zID0ge30sICZibG9jaykKCiAgICAjIFBh cnNlIHRoZSBPcHRpb25zCiAgICB0dHkgPSAhIW9wdGlvbnMuZGVsZXRlKDp0 dHkpCiAgICBkZXRhY2hlZCA9ICEhb3B0aW9ucy5kZWxldGUoOmRldGFjaCkK ICAgIHN0ZGluID0gb3B0aW9uc1s6c3RkaW5dCgogICAgIyBDcmVhdGUgQVBJ IFJlcXVlc3QgQm9keQogICAgYm9keSA9IHsKICAgICAgIlR0eSIgPT4gdHR5 LAogICAgICAiRGV0YWNoIiA9PiBkZXRhY2hlZAogICAgfQogICAgZXhjb25f cGFyYW1zID0geyA6Ym9keSA9PiBib2R5LnRvX2pzb24gfQoKICAgIG1zZ3Mg PSBEb2NrZXI6Ok1lc3NhZ2VzLm5ldwogICAgdW5sZXNzIGRldGFjaGVkCiAg ICAgIGlmIHN0ZGluCiAgICAgICAgZXhjb25fcGFyYW1zWzpoaWphY2tfYmxv Y2tdID0gRG9ja2VyOjpVdGlsLmhpamFja19mb3Ioc3RkaW4sIGJsb2NrLCBt c2dzLCB0dHkpCiAgICAgIGVsc2UKICAgICAgICBleGNvbl9wYXJhbXNbOnJl c3BvbnNlX2Jsb2NrXSA9IERvY2tlcjo6VXRpbC5hdHRhY2hfZm9yKGJsb2Nr LCBtc2dzLCB0dHkpCiAgICAgIGVuZAogICAgZW5kCgogICAgY29ubmVjdGlv bi5wb3N0KHBhdGhfZm9yKDpzdGFydCksIG5pbCwgZXhjb25fcGFyYW1zKQog ICAgW21zZ3Muc3Rkb3V0X21lc3NhZ2VzLCBtc2dzLnN0ZGVycl9tZXNzYWdl c10KICBlbmQKCiAgIyAjc3RhcnQhIHBlcmZvcm1zIHRoZSBhc3NvY2lhdGVk IGFjdGlvbiBhbmQgcmV0dXJucyB0aGUgb3V0cHV0LgogICMgI3N0YXJ0IGRv ZXMgdGhlIHNhbWUsIGJ1dCByZXNjdWVzIGZyb20gU2VydmVyRXJyb3JzLgog IFs6c3RhcnRdLmVhY2ggZG8gfG1ldGhvZHwKICAgIGRlZmluZV9tZXRob2Qo bWV0aG9kKSBkbyB8KmFyZ3N8CiAgICAgIGJlZ2luOyBwdWJsaWNfc2VuZCg6 IiN7bWV0aG9kfSEiLCAqYXJncyk7IHJlc2N1ZSBTZXJ2ZXJFcnJvcjsgc2Vs ZiBlbmQKICAgIGVuZAogIGVuZAoKICAjIFJlc2l6ZSB0aGUgVFRZIGFzc29j aWF0ZWQgd2l0aCB0aGUgRXhlYyBpbnN0YW5jZQogICMKICAjIEBwYXJhbSBx dWVyeSBbSGFzaF0gQVBJIHF1ZXJ5IHBhcmFtZXRlcnMKICAjIEBvcHRpb24g cXVlcnkgW0ZpeG51bV0gaCBIZWlnaHQgb2YgdGhlIFRUWQogICMgQG9wdGlv biBxdWVyeSBbRml4bnVtXSB3IFdpZHRoIG9mIHRoZSBUVFkKICAjCiAgIyBA cmV0dXJuIFtEb2NrZXI6OkV4ZWNdIHNlbGYKICBkZWYgcmVzaXplKHF1ZXJ5 ID0ge30pCiAgICBjb25uZWN0aW9uLnBvc3QocGF0aF9mb3IoOnJlc2l6ZSks IHF1ZXJ5KQogICAgc2VsZgogIGVuZAoKICAjIEdldCB0aGUgcmVxdWVzdCBV UkkgZm9yIHRoZSBnaXZlbiBlbmRwb2ludAogICMKICAjIEBwYXJhbSBlbmRw b2ludCBbU3ltYm9sXSBUaGUgZW5kcG9pbnQgdG8gZ3JhYgogICMgQHJldHVy biBbU3RyaW5nXSBUaGUgZnVsbCBSZW1vdGUgQVBJIGVuZHBvaW50IHdpdGgg SUQKICBkZWYgcGF0aF9mb3IoZW5kcG9pbnQpCiAgICAiL2V4ZWMvI3tzZWxm LmlkfS8je2VuZHBvaW50fSIKICBlbmQKCiAgcHJpdmF0ZSA6cGF0aF9mb3IK ICBwcml2YXRlX2NsYXNzX21ldGhvZCA6bmV3CmVuZAoAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABkb2NrZXIvaW1hZ2UucmIAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAwNzY2ADAwMDAwMjQA MDAwMDAwMjAxNzIAMTI0MzcxMTYxNTQAMDEwNzIyACAwAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVz dGFyADAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMgVGhpcyBjbGFzcyByZXBy ZXNlbnRzIGEgRG9ja2VyIEltYWdlLgpjbGFzcyBEb2NrZXI6OkltYWdlCiAg aW5jbHVkZSBEb2NrZXI6OkJhc2UKCiAgIyBHaXZlbiBhIGNvbW1hbmQgYW5k IG9wdGlvbmFsIGxpc3Qgb2Ygc3RyZWFtcyB0byBhdHRhY2ggdG8sIHJ1biBh IGNvbW1hbmQgb24KICAjIGFuIEltYWdlLiBUaGlzIHdpbGwgbm90IG1vZGlm eSB0aGUgSW1hZ2UsIGJ1dCByYXRoZXIgY3JlYXRlIGEgbmV3IENvbnRhaW5l cgogICMgdG8gcnVuIHRoZSBJbWFnZS4gSWYgdGhlIGltYWdlIGhhcyBhbiBl bWJlZGRlZCBjb25maWcsIG5vIGNvbW1hbmQgaXMKICAjIG5lY2Vzc2FyeSwg YnV0IGl0IHdpbGwgZmFpbCB3aXRoIDUwMCBpZiBubyBjb25maWcgaXMgc2F2 ZWQgd2l0aCB0aGUgaW1hZ2UKICBkZWYgcnVuKGNtZD1uaWwpCiAgICBvcHRz ID0geyAnSW1hZ2UnID0+IHNlbGYuaWQgfQogICAgb3B0c1siQ21kIl0gPSBj bWQuaXNfYT8oU3RyaW5nKSA/IGNtZC5zcGxpdCgvXHMrLykgOiBjbWQKICAg IGJlZ2luCiAgICAgIERvY2tlcjo6Q29udGFpbmVyLmNyZWF0ZShvcHRzLCBj b25uZWN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgIC50YXAoJjpzdGFy dCEpCiAgICByZXNjdWUgU2VydmVyRXJyb3IgPT4gZXgKICAgICAgaWYgY21k CiAgICAgICAgcmFpc2UgZXgKICAgICAgZWxzZQogICAgICAgIHJhaXNlIFNl cnZlckVycm9yLCAiTm8gY29tbWFuZCBzcGVjaWZpZWQuIgogICAgICBlbmQK ICAgIGVuZAogIGVuZAoKICAjIFB1c2ggdGhlIEltYWdlIHRvIHRoZSBEb2Nr ZXIgcmVnaXN0cnkuCiAgZGVmIHB1c2goY3JlZHMgPSBuaWwsIG9wdGlvbnMg PSB7fSkKICAgIHJlcG9fdGFnID0gb3B0aW9ucy5kZWxldGUoOnJlcG9fdGFn KSB8fCBpbmZvWydSZXBvVGFncyddLmZpcnN0CiAgICByYWlzZSBBcmd1bWVu dEVycm9yICJJbWFnZSBpcyB1bnRhZ2dlZCIgaWYgcmVwb190YWcubmlsPwog ICAgcmVwbywgdGFnID0gRG9ja2VyOjpVdGlsLnBhcnNlX3JlcG9fdGFnKHJl cG9fdGFnKQogICAgcmFpc2UgQXJndW1lbnRFcnJvciwgIkltYWdlIGRvZXMg bm90IGhhdmUgYSBuYW1lIHRvIHB1c2guIiBpZiByZXBvLm5pbD8KCiAgICBj cmVkZW50aWFscyA9IGNyZWRzIHx8IERvY2tlci5jcmVkcyB8fCB7fQogICAg aGVhZGVycyA9IERvY2tlcjo6VXRpbC5idWlsZF9hdXRoX2hlYWRlcihjcmVk ZW50aWFscykKICAgIG9wdHMgPSB7OnRhZyA9PiB0YWd9Lm1lcmdlKG9wdGlv bnMpCiAgICBjb25uZWN0aW9uLnBvc3QoIi9pbWFnZXMvI3tyZXBvfS9wdXNo Iiwgb3B0cywgOmhlYWRlcnMgPT4gaGVhZGVycykKICAgIHNlbGYKICBlbmQK CiAgIyBUYWcgdGhlIEltYWdlLgogIGRlZiB0YWcob3B0cyA9IHt9KQogICAg c2VsZi5pbmZvWydSZXBvVGFncyddIHx8PSBbXQogICAgY29ubmVjdGlvbi5w b3N0KHBhdGhfZm9yKDp0YWcpLCBvcHRzKQogICAgcmVwbyA9IG9wdHNbJ3Jl cG8nXSB8fCBvcHRzWzpyZXBvXQogICAgdGFnID0gb3B0c1sndGFnJ10gfHwg b3B0c1s6dGFnXSB8fCAnbGF0ZXN0JwogICAgc2VsZi5pbmZvWydSZXBvVGFn cyddIDw8ICIje3JlcG99OiN7dGFnfSIKICBlbmQKCiAgIyBHaXZlbiBhIHBh dGggb2YgYSBsb2NhbCBmaWxlIGFuZCB0aGUgcGF0aCBpdCBzaG91bGQgYmUg aW5zZXJ0ZWQsIGNyZWF0ZXMKICAjIGEgbmV3IEltYWdlIHRoYXQgaGFzIHRo YXQgZmlsZS4KICBkZWYgaW5zZXJ0X2xvY2FsKG9wdHMgPSB7fSkKICAgIGxv Y2FsX3BhdGhzID0gb3B0cy5kZWxldGUoJ2xvY2FsUGF0aCcpCiAgICBvdXRw dXRfcGF0aCA9IG9wdHMuZGVsZXRlKCdvdXRwdXRQYXRoJykKCiAgICBsb2Nh bF9wYXRocyA9IFsgbG9jYWxfcGF0aHMgXSB1bmxlc3MgbG9jYWxfcGF0aHMu aXNfYT8oQXJyYXkpCgogICAgZmlsZV9oYXNoID0gRG9ja2VyOjpVdGlsLmZp bGVfaGFzaF9mcm9tX3BhdGhzKGxvY2FsX3BhdGhzKQoKICAgIGZpbGVfaGFz aFsnRG9ja2VyZmlsZSddID0gZG9ja2VyZmlsZV9mb3IoZmlsZV9oYXNoLCBv dXRwdXRfcGF0aCkKCiAgICB0YXIgPSBEb2NrZXI6OlV0aWwuY3JlYXRlX3Rh cihmaWxlX2hhc2gpCiAgICBib2R5ID0gY29ubmVjdGlvbi5wb3N0KCcvYnVp bGQnLCBvcHRzLCA6Ym9keSA9PiB0YXIpCiAgICBzZWxmLmNsYXNzLnNlbmQo Om5ldywgY29ubmVjdGlvbiwgJ2lkJyA9PiBEb2NrZXI6OlV0aWwuZXh0cmFj dF9pZChib2R5KSkKICBlbmQKCiAgIyBSZW1vdmUgdGhlIEltYWdlIGZyb20g dGhlIHNlcnZlci4KICBkZWYgcmVtb3ZlKG9wdHMgPSB7fSkKICAgIG5hbWUg PSBvcHRzLmRlbGV0ZSg6bmFtZSkgfHwgc2VsZi5pZAogICAgY29ubmVjdGlv bi5kZWxldGUoIi9pbWFnZXMvI3tuYW1lfSIsIG9wdHMpCiAgZW5kCiAgYWxp YXNfbWV0aG9kIDpkZWxldGUsIDpyZW1vdmUKCiAgIyBSZXR1cm4gYSBTdHJp bmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEltYWdlLgogIGRlZiB0b19zCiAg ICAiRG9ja2VyOjpJbWFnZSB7IDppZCA9PiAje3NlbGYuaWR9LCA6aW5mbyA9 PiAje3NlbGYuaW5mby5pbnNwZWN0fSwgIlwKICAgICAgIjpjb25uZWN0aW9u ID0+ICN7c2VsZi5jb25uZWN0aW9ufSB9IgogIGVuZAoKICAjICNqc29uIHJl dHVybnMgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgYW4gSW1hZ2UsICNoaXN0 b3J5IHJldHVybnMgaXRzCiAgIyBoaXN0b3J5LgogIFs6anNvbiwgOmhpc3Rv cnldLmVhY2ggZG8gfG1ldGhvZHwKICAgIGRlZmluZV9tZXRob2QobWV0aG9k KSBkbyB8b3B0cyA9IHt9fAogICAgICBEb2NrZXI6OlV0aWwucGFyc2VfanNv bihjb25uZWN0aW9uLmdldChwYXRoX2ZvcihtZXRob2QpLCBvcHRzKSkKICAg IGVuZAogIGVuZAoKICAjIFVwZGF0ZSB0aGUgQGluZm8gaGFzaCwgd2hpY2gg aXMgdGhlIG9ubHkgbXV0YWJsZSBzdGF0ZSBpbiB0aGlzIG9iamVjdC4KICBk ZWYgcmVmcmVzaCEKICAgIGltZyA9IERvY2tlcjo6SW1hZ2UuYWxsKDphbGwg PT4gdHJ1ZSkuZmluZCB7IHxpbWFnZXwKICAgICAgaW1hZ2UuaWQuc3RhcnRf d2l0aD8oc2VsZi5pZCkgfHwgc2VsZi5pZC5zdGFydF93aXRoPyhpbWFnZS5p ZCkKICAgIH0KICAgIGluZm8ubWVyZ2UhKHNlbGYuanNvbikKICAgIGltZyAm JiBpbmZvLm1lcmdlIShpbWcuaW5mbykKICAgIHNlbGYKICBlbmQKCiAgY2xh c3MgPDwgc2VsZgoKICAgICMgQ3JlYXRlIGEgbmV3IEltYWdlLgogICAgZGVm IGNyZWF0ZShvcHRzID0ge30sIGNyZWRzID0gbmlsLCBjb25uID0gRG9ja2Vy LmNvbm5lY3Rpb24pCiAgICAgIGNyZWRlbnRpYWxzID0gY3JlZHMubmlsPyA/ IERvY2tlci5jcmVkcyA6IGNyZWRzLnRvX2pzb24KICAgICAgaGVhZGVycyA9 ICFjcmVkZW50aWFscy5uaWw/ICYmIERvY2tlcjo6VXRpbC5idWlsZF9hdXRo X2hlYWRlcihjcmVkZW50aWFscykKICAgICAgaGVhZGVycyB8fD0ge30KICAg ICAgYm9keSA9IGNvbm4ucG9zdCgnL2ltYWdlcy9jcmVhdGUnLCBvcHRzLCA6 aGVhZGVycyA9PiBoZWFkZXJzKQogICAgICBpZCA9IERvY2tlcjo6VXRpbC5m aXhfanNvbihib2R5KS5zZWxlY3QgeyB8bXwgbVsnaWQnXSB9Lmxhc3RbJ2lk J10KICAgICAgbmV3KGNvbm4sICdpZCcgPT4gaWQsIDpoZWFkZXJzID0+IGhl YWRlcnMpCiAgICBlbmQKCiAgICAjIFJldHVybiBhIHNwZWNpZmljIGltYWdl LgogICAgZGVmIGdldChpZCwgb3B0cyA9IHt9LCBjb25uID0gRG9ja2VyLmNv bm5lY3Rpb24pCiAgICAgIGltYWdlX2pzb24gPSBjb25uLmdldCgiL2ltYWdl cy8je1VSSS5lbmNvZGUoaWQpfS9qc29uIiwgb3B0cykKICAgICAgaGFzaCA9 IERvY2tlcjo6VXRpbC5wYXJzZV9qc29uKGltYWdlX2pzb24pIHx8IHt9CiAg ICAgIG5ldyhjb25uLCBoYXNoKQogICAgZW5kCgogICAgIyBDaGVjayBpZiBh biBpbWFnZSBleGlzdHMuCiAgICBkZWYgZXhpc3Q/KGlkLCBvcHRzID0ge30s IGNvbm4gPSBEb2NrZXIuY29ubmVjdGlvbikKICAgICAgZ2V0KGlkLCBvcHRz LCBjb25uKQogICAgICB0cnVlCiAgICByZXNjdWUgRG9ja2VyOjpFcnJvcjo6 Tm90Rm91bmRFcnJvcgogICAgICBmYWxzZQogICAgZW5kCgogICAgIyBSZXR1 cm4gZXZlcnkgSW1hZ2UuCiAgICBkZWYgYWxsKG9wdHMgPSB7fSwgY29ubiA9 IERvY2tlci5jb25uZWN0aW9uKQogICAgICBoYXNoZXMgPSBEb2NrZXI6OlV0 aWwucGFyc2VfanNvbihjb25uLmdldCgnL2ltYWdlcy9qc29uJywgb3B0cykp IHx8IFtdCiAgICAgIGhhc2hlcy5tYXAgeyB8aGFzaHwgbmV3KGNvbm4sIGhh c2gpIH0KICAgIGVuZAoKICAgICMgR2l2ZW4gYSBxdWVyeSBsaWtlIGB7IDp0 ZXJtID0+ICdzc2hkJyB9YCwgcXVlcmllcyB0aGUgRG9ja2VyIFJlZ2lzdHJ5 IGZvcgogICAgIyBhIGNvcnJlc3BvbmRpbmcgSW1hZ2UuCiAgICBkZWYgc2Vh cmNoKHF1ZXJ5ID0ge30sIGNvbm5lY3Rpb24gPSBEb2NrZXIuY29ubmVjdGlv bikKICAgICAgYm9keSA9IGNvbm5lY3Rpb24uZ2V0KCcvaW1hZ2VzL3NlYXJj aCcsIHF1ZXJ5KQogICAgICBoYXNoZXMgPSBEb2NrZXI6OlV0aWwucGFyc2Vf anNvbihib2R5KSB8fCBbXQogICAgICBoYXNoZXMubWFwIHsgfGhhc2h8IG5l dyhjb25uZWN0aW9uLCAnaWQnID0+IGhhc2hbJ25hbWUnXSkgfQogICAgZW5k CgogICAgIyBJbXBvcnQgYW4gSW1hZ2UgZnJvbSB0aGUgb3V0cHV0IG9mIERv Y2tlcjo6Q29udGFpbmVyI2V4cG9ydC4gVGhlIGZpcnN0CiAgICAjIGFyZ3Vt ZW50IG1heSBlaXRoZXIgYmUgYSBGaWxlIG9yIFVSSS4KICAgIGRlZiBpbXBv cnQoaW1wLCBvcHRzID0ge30sIGNvbm4gPSBEb2NrZXIuY29ubmVjdGlvbikK ICAgICAgb3BlbihpbXApIGRvIHxpb3wKICAgICAgICBpbXBvcnRfc3RyZWFt KG9wdHMsIGNvbm4pIGRvCiAgICAgICAgICBpby5yZWFkKEV4Y29uLmRlZmF1 bHRzWzpjaHVua19zaXplXSkudG9fcwogICAgICAgIGVuZAogICAgICBlbmQK ICAgIHJlc2N1ZSBTdGFuZGFyZEVycm9yCiAgICAgIHJhaXNlIERvY2tlcjo6 RXJyb3I6OklPRXJyb3IsICJDb3VsZCBub3QgaW1wb3J0ICcje2ltcH0nIgog ICAgZW5kCgogICAgZGVmIGltcG9ydF9zdHJlYW0ob3B0aW9ucyA9IHt9LCBj b25uZWN0aW9uID0gRG9ja2VyLmNvbm5lY3Rpb24sICZibG9jaykKICAgICAg Ym9keSA9IGNvbm5lY3Rpb24ucG9zdCgKICAgICAgICAnL2ltYWdlcy9jcmVh dGUnLAogICAgICAgICBvcHRpb25zLm1lcmdlKCdmcm9tU3JjJyA9PiAnLScp LAogICAgICAgICA6aGVhZGVycyA9PiB7ICdDb250ZW50LVR5cGUnID0+ICdh cHBsaWNhdGlvbi90YXInLAogICAgICAgICAgICAgICAgICAgICAgICdUcmFu c2Zlci1FbmNvZGluZycgPT4gJ2NodW5rZWQnIH0sCiAgICAgICAgICZibG9j awogICAgICApCiAgICAgIG5ldyhjb25uZWN0aW9uLCAnaWQnPT4gRG9ja2Vy OjpVdGlsLnBhcnNlX2pzb24oYm9keSlbJ3N0YXR1cyddKQogICAgZW5kCgog ICAgIyBHaXZlbiBhIERvY2tlcmZpbGUgYXMgYSBzdHJpbmcsIGJ1aWxkcyBh biBJbWFnZS4KICAgIGRlZiBidWlsZChjb21tYW5kcywgb3B0cyA9IHt9LCBj b25uZWN0aW9uID0gRG9ja2VyLmNvbm5lY3Rpb24sICZibG9jaykKICAgICAg Ym9keSA9ICIiCiAgICAgIGNvbm5lY3Rpb24ucG9zdCgKICAgICAgICAnL2J1 aWxkJywgb3B0cywKICAgICAgICA6Ym9keSA9PiBEb2NrZXI6OlV0aWwuY3Jl YXRlX3RhcignRG9ja2VyZmlsZScgPT4gY29tbWFuZHMpLAogICAgICAgIDpy ZXNwb25zZV9ibG9jayA9PiByZXNwb25zZV9ibG9ja19mb3JfYnVpbGQoYm9k eSwgJmJsb2NrKQogICAgICApCiAgICAgIG5ldyhjb25uZWN0aW9uLCAnaWQn ID0+IERvY2tlcjo6VXRpbC5leHRyYWN0X2lkKGJvZHkpKQogICAgcmVzY3Vl IERvY2tlcjo6RXJyb3I6OlNlcnZlckVycm9yCiAgICAgIHJhaXNlIERvY2tl cjo6RXJyb3I6OlVuZXhwZWN0ZWRSZXNwb25zZUVycm9yCiAgICBlbmQKCiAg ICAjIEdpdmVuIEZpbGUgbGlrZSBvYmplY3QgY29udGFpbmluZyBhIHRhciBm aWxlLCBidWlsZHMgYW4gSW1hZ2UuCiAgICAjCiAgICAjIElmIGEgYmxvY2sg aXMgcGFzc2VkLCBjaHVua3Mgb2Ygb3V0cHV0IHByb2R1Y2VkIGJ5IERvY2tl ciB3aWxsIGJlIHBhc3NlZAogICAgIyB0byB0aGF0IGJsb2NrLgogICAgZGVm IGJ1aWxkX2Zyb21fdGFyKHRhciwgb3B0cyA9IHt9LCBjb25uZWN0aW9uID0g RG9ja2VyLmNvbm5lY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgY3Jl ZHMgPSBuaWwsICZibG9jaykKCiAgICAgIGhlYWRlcnMgPSBidWlsZF9oZWFk ZXJzKGNyZWRzKQoKICAgICAgIyBUaGUgcmVzcG9uc2VfYmxvY2sgcGFzc2Vk IHRvIEV4Y29uIHdpbGwgYnVpbGQgdXAgdGhpcyBib2R5IHZhcmlhYmxlLgog ICAgICBib2R5ID0gIiIKICAgICAgY29ubmVjdGlvbi5wb3N0KAogICAgICAg ICcvYnVpbGQnLCBvcHRzLAogICAgICAgIDpoZWFkZXJzID0+IGhlYWRlcnMs CiAgICAgICAgOnJlc3BvbnNlX2Jsb2NrID0+IHJlc3BvbnNlX2Jsb2NrX2Zv cl9idWlsZChib2R5LCAmYmxvY2spCiAgICAgICkgeyB0YXIucmVhZChFeGNv bi5kZWZhdWx0c1s6Y2h1bmtfc2l6ZV0pLnRvX3MgfQoKICAgICAgbmV3KGNv bm5lY3Rpb24sCiAgICAgICAgICAnaWQnID0+IERvY2tlcjo6VXRpbC5leHRy YWN0X2lkKGJvZHkpLAogICAgICAgICAgOmhlYWRlcnMgPT4gaGVhZGVycykK ICBlbmQKCiAgIyBHaXZlbiBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGEg RG9ja2VyZmlsZSwgYnVpbGRzIGFuIEltYWdlLgogICMKICAjIElmIGEgYmxv Y2sgaXMgcGFzc2VkLCBjaHVua3Mgb2Ygb3V0cHV0IHByb2R1Y2VkIGJ5IERv Y2tlciB3aWxsIGJlIHBhc3NlZAogICMgdG8gdGhhdCBibG9jay4KICBkZWYg YnVpbGRfZnJvbV9kaXIoZGlyLCBvcHRzID0ge30sIGNvbm5lY3Rpb24gPSBE b2NrZXIuY29ubmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgY3JlZHMg PSBuaWwsICZibG9jaykKCiAgICB0YXIgPSBEb2NrZXI6OlV0aWwuY3JlYXRl X2Rpcl90YXIoZGlyKQogICAgYnVpbGRfZnJvbV90YXIgdGFyLCBvcHRzLCBj b25uZWN0aW9uLCBjcmVkcywgJmJsb2NrCiAgZW5zdXJlCiAgICB1bmxlc3Mg dGFyLm5pbD8KICAgICAgdGFyLmNsb3NlCiAgICAgIEZpbGVVdGlscy5ybSh0 YXIucGF0aCwgZm9yY2U6IHRydWUpCiAgICBlbmQKICBlbmQKZW5kCgogIHBy aXZhdGUKCiAgIyBBIG1ldGhvZCB0byBidWlsZCB0aGUgY29uZmlnIGhlYWRl ciBhbmQgbWVyZ2UgaXQgaW50byB0aGUKICAjIGhlYWRlcnMgc2VudCBieSBi dWlsZF9mcm9tX2Rpci4KICBkZWYgc2VsZi5idWlsZF9oZWFkZXJzKGNyZWRz PW5pbCkKICAgIGNyZWRlbnRpYWxzID0gY3JlZHMgfHwgRG9ja2VyLmNyZWRz IHx8IHt9CiAgICBjb25maWdfaGVhZGVyID0gRG9ja2VyOjpVdGlsLmJ1aWxk X2NvbmZpZ19oZWFkZXIoY3JlZGVudGlhbHMpCgogICAgaGVhZGVycyA9IHsg J0NvbnRlbnQtVHlwZScgICAgICA9PiAnYXBwbGljYXRpb24vdGFyJywKICAg ICAgICAgICAgICAgICdUcmFuc2Zlci1FbmNvZGluZycgPT4gJ2NodW5rZWQn IH0KICAgIGhlYWRlcnMgPSBoZWFkZXJzLm1lcmdlKGNvbmZpZ19oZWFkZXIp IGlmIGNvbmZpZ19oZWFkZXIKICAgIGhlYWRlcnMKICBlbmQKCiAgIyBDb252 ZW5pZW5jZSBtZXRob2QgdG8gcmV0dXJuIHRoZSBwYXRoIGZvciBhIHBhcnRp Y3VsYXIgcmVzb3VyY2UuCiAgZGVmIHBhdGhfZm9yKHJlc291cmNlKQogICAg Ii9pbWFnZXMvI3tzZWxmLmlkfS8je3Jlc291cmNlfSIKICBlbmQKCgogICMg Q29udmllbmNlIG1ldGhvZCB0byBnZXQgdGhlIERvY2tlcmZpbGUgZm9yIGEg ZmlsZSBoYXNoIGFuZCBhIHBhdGggdG8KICAjIG91dHB1dCB0by4KICBkZWYg ZG9ja2VyZmlsZV9mb3IoZmlsZV9oYXNoLCBvdXRwdXRfcGF0aCkKICAgIGRv Y2tlcmZpbGUgPSAiZnJvbSAje3NlbGYuaWR9XG4iCgogICAgZmlsZV9oYXNo LmtleXMuZWFjaCBkbyB8YmFzZW5hbWV8CiAgICAgIGRvY2tlcmZpbGUgPDwg ImFkZCAje2Jhc2VuYW1lfSAje291dHB1dF9wYXRofVxuIgogICAgZW5kCgog ICAgZG9ja2VyZmlsZQogIGVuZAoKICAjIEdlbmVyYXRlcyB0aGUgYmxvY2sg dG8gYmUgcGFzc2VkIGFzIGEgcmVwb25zZSBibG9jayB0byBFeGNvbi4gVGhl IHJldHVybmVkCiAgIyBsYW1iZGEgd2lsbCBhcHBlbmQgRG9ja2VyIG91dHB1 dCB0byB0aGUgZmlyc3QgYXJndW1lbnQsIGFuZCB5aWVsZCBvdXRwdXQgdG8K ICAjIHRoZSBwYXNzZWQgYmxvY2ssIGlmIGEgYmxvY2sgaXMgZ2l2ZW4uCiAg ZGVmIHNlbGYucmVzcG9uc2VfYmxvY2tfZm9yX2J1aWxkKGJvZHkpCiAgICBs YW1iZGEgZG8gfGNodW5rLCByZW1haW5pbmcsIHRvdGFsfAogICAgICBib2R5 IDw8IGNodW5rCiAgICAgIHlpZWxkIGNodW5rIGlmIGJsb2NrX2dpdmVuPwog ICAgZW5kCiAgZW5kCmVuZAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABkb2NrZXIvbWVzc2FnZXMucmIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAwNzY2ADAwMDAwMjQAMDAwMDAwMDI1 NzUAMTI0MzMwMDc1NTUAMDExNDU2ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAACMgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFs bCB0aGUgbWVzc2FnZXMgZWl0aGVyIHJlY2VpdmVkIGJ5IGNodW5rcyBmcm9t IGF0dGFjaApjbGFzcyBEb2NrZXI6Ok1lc3NhZ2VzCgogIGF0dHJfYWNjZXNz b3IgOmJ1ZmZlciwgOnN0ZG91dF9tZXNzYWdlcywgOnN0ZGVycl9tZXNzYWdl cywgOmFsbF9tZXNzYWdlcwoKICBkZWYgaW5pdGlhbGl6ZShzdGRvdXRfbWVz c2FnZXM9W10sCiAgICAgICAgICAgICAgICAgc3RkZXJyX21lc3NhZ2VzPVtd LAogICAgICAgICAgICAgICAgIGFsbF9tZXNzYWdlcz1bXSwKICAgICAgICAg ICAgICAgICBidWZmZXI9IiIpCiAgICBAc3Rkb3V0X21lc3NhZ2VzID0gc3Rk b3V0X21lc3NhZ2VzCiAgICBAc3RkZXJyX21lc3NhZ2VzID0gc3RkZXJyX21l c3NhZ2VzCiAgICBAYWxsX21lc3NhZ2VzID0gYWxsX21lc3NhZ2VzCiAgICBA YnVmZmVyID0gYnVmZmVyCiAgZW5kCgogIGRlZiBhZGRfbWVzc2FnZShzb3Vy Y2UsIG1lc3NhZ2UpCiAgICBjYXNlIHNvdXJjZQogICAgd2hlbiAxCiAgICAg IHN0ZG91dF9tZXNzYWdlcyA8PCBtZXNzYWdlCiAgICB3aGVuIDIKICAgICAg c3RkZXJyX21lc3NhZ2VzIDw8IG1lc3NhZ2UKICAgIGVuZAogICAgYWxsX21l c3NhZ2VzIDw8IG1lc3NhZ2UKICBlbmQKCiAgZGVmIGdldF9tZXNzYWdlKHJh d190ZXh0KQogICAgaGVhZGVyID0gcmF3X3RleHQuc2xpY2UhKDAsOCkKICAg IGlmIGhlYWRlci5sZW5ndGggPCA4CiAgICAgIEBidWZmZXIgPSBoZWFkZXIK ICAgICAgcmV0dXJuCiAgICBlbmQKICAgIHR5cGUsIGxlbmd0aCA9IGhlYWRl ci51bnBhY2soIkN4eHhOIikKCiAgICBtZXNzYWdlID0gcmF3X3RleHQuc2xp Y2UhKDAsbGVuZ3RoKQogICAgaWYgbWVzc2FnZS5sZW5ndGggPCBsZW5ndGgK ICAgICAgQGJ1ZmZlciA9IGhlYWRlciArIG1lc3NhZ2UKICAgIGVsc2UKICAg ICAgYWRkX21lc3NhZ2UodHlwZSwgbWVzc2FnZSkKICAgIGVuZAogIGVuZAoK ICBkZWYgYXBwZW5kKG1lc3NhZ2VzKQogICAgQHN0ZG91dF9tZXNzYWdlcyAr PSBtZXNzYWdlcy5zdGRvdXRfbWVzc2FnZXMKICAgIEBzdGRlcnJfbWVzc2Fn ZXMgKz0gbWVzc2FnZXMuc3RkZXJyX21lc3NhZ2VzCiAgICBAYWxsX21lc3Nh Z2VzICs9IG1lc3NhZ2VzLmFsbF9tZXNzYWdlcwogIGVuZAoKICAjIE1ldGhv ZCB0byBicmVhayBhcGFydCBhcHBsaWNhdGlvbi92bmQuZG9ja2VyLnJhdy1z dHJlYW0gaGVhZGVycwogIGRlZiBkZWNpcGhlcl9tZXNzYWdlcyhib2R5KQog ICAgcmF3X3RleHQgPSBidWZmZXIgKyBib2R5LmR1cAogICAgbWVzc2FnZXMg PSBEb2NrZXI6Ok1lc3NhZ2VzLm5ldwogICAgd2hpbGUgIXJhd190ZXh0LmVt cHR5PwogICAgICBtZXNzYWdlcy5nZXRfbWVzc2FnZShyYXdfdGV4dCkKICAg IGVuZAoKICAgIG1lc3NhZ2VzCiAgZW5kCmVuZAoAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRvY2tlci9yYWtlX3Rhc2sucmIA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAw MDA3NjYAMDAwMDAyNAAwMDAwMDAwMTIxNwAxMjQzMzAwNzU1NQAwMTE2MDMA IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAdXN0YXIAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyBU aGlzIGNsYXNzIGFsbG93cyBpbWFnZS1iYXNlZCB0YXNrcyB0byBiZSBjcmVh dGVkLgpjbGFzcyBEb2NrZXI6OkltYWdlVGFzayA8IFJha2U6OlRhc2sKICBk ZWYgc2VsZi5zY29wZV9uYW1lKF9zY29wZSwgdGFza19uYW1lKQogICAgdGFz a19uYW1lCiAgZW5kCgogIGRlZiBuZWVkZWQ/CiAgICAhaGFzX3JlcG9fdGFn PwogIGVuZAoKICBwcml2YXRlCgogIGRlZiBoYXNfcmVwb190YWc/CiAgICBp bWFnZXMuYW55PyB7IHxpbWFnZXwgaW1hZ2UuaW5mb1snUmVwb1RhZ3MnXS5p bmNsdWRlPyhyZXBvX3RhZykgfQogIGVuZAoKICBkZWYgaW1hZ2VzCiAgICBA aW1hZ2VzIHx8PSBEb2NrZXI6OkltYWdlLmFsbCg6YWxsID0+IHRydWUpCiAg ZW5kCgogIGRlZiByZXBvCiAgICBuYW1lLnNwbGl0KCc6JylbMF0KICBlbmQK CiAgZGVmIHRhZwogICAgbmFtZS5zcGxpdCgnOicpWzFdIHx8ICdsYXRlc3Qn CiAgZW5kCgogIGRlZiByZXBvX3RhZwogICAgIiN7cmVwb306I3t0YWd9Igog IGVuZAplbmQKCiMgTW9ua2V5cGF0Y2ggUmFrZSB0byBhZGQgdGhlIGBpbWFn ZWAgdGFzay4KbW9kdWxlIFJha2U6OkRTTAogIGRlZiBpbWFnZSgqYXJncywg JmJsb2NrKQogICAgRG9ja2VyOjpJbWFnZVRhc2suZGVmaW5lX3Rhc2soKmFy Z3MsICZibG9jaykKICBlbmQKZW5kCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRvY2tlci91dGlsLnJi AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAw NjQ0ADAwMDA3NjYAMDAwMDAyNAAwMDAwMDAxMTE2NAAxMjQzNzExNjE1NAAw MTA2MTYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAIyBUaGlzIG1vZHVsZSBob2xkcyBzaGFyZWQgbG9naWMgdGhhdCBkb2Vz bid0IHJlYWxseSBiZWxvbmcgYW55d2hlcmUgZWxzZSBpbiB0aGUKIyBnZW0u Cm1vZHVsZSBEb2NrZXI6OlV0aWwKICBpbmNsdWRlIERvY2tlcjo6RXJyb3IK CiAgbW9kdWxlX2Z1bmN0aW9uCgogICMgQXR0YWNoZXMgdG8gYSBIVFRQIHN0 cmVhbQogICMKICAjIEBwYXJhbSBibG9jawogICMgQHBhcmFtIG1zZ19zdGFj ayBbRG9ja2VyOjpNZXNzYWdlc10KICAjIEBwYXJhbSB0dHkgW2Jvb2xlYW5d CiAgZGVmIGF0dGFjaF9mb3IoYmxvY2ssIG1zZ19zdGFjaywgdHR5ID0gZmFs c2UpCiAgICAjIElmIFRUWSBpcyBlbmFibGVkIGV4cGVjdCByYXcgZGF0YSBh bmQgYXBwZW5kIHRvIHN0ZG91dAogICAgaWYgdHR5CiAgICAgIGF0dGFjaF9m b3JfdHR5KGJsb2NrLCBtc2dfc3RhY2spCiAgICBlbHNlCiAgICAgIGF0dGFj aF9mb3JfbXVsdGlwbGV4KGJsb2NrLCBtc2dfc3RhY2spCiAgICBlbmQKICBl bmQKCiAgZGVmIGF0dGFjaF9mb3JfdHR5KGJsb2NrLCBtc2dfc3RhY2spCiAg ICByZXR1cm4gbGFtYmRhIGRvIHxjLHIsdHwKICAgICAgbXNnX3N0YWNrLnN0 ZG91dF9tZXNzYWdlcyA8PCBjCiAgICAgIG1zZ19zdGFjay5hbGxfbWVzc2Fn ZXMgPDwgYwogICAgICBibG9jay5jYWxsIGMgaWYgYmxvY2sKICAgIGVuZAog IGVuZAoKICBkZWYgYXR0YWNoX2Zvcl9tdWx0aXBsZXgoYmxvY2ssIG1zZ19z dGFjaykKICAgIG1lc3NhZ2VzID0gRG9ja2VyOjpNZXNzYWdlcy5uZXcKICAg IGxhbWJkYSBkbyB8YyxyLHR8CiAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMu ZGVjaXBoZXJfbWVzc2FnZXMoYykKICAgICAgbXNnX3N0YWNrLmFwcGVuZCht ZXNzYWdlcykKCiAgICAgIHVubGVzcyBibG9jay5uaWw/CiAgICAgICAgbWVz c2FnZXMuc3Rkb3V0X21lc3NhZ2VzLmVhY2ggZG8gfG1zZ3wKICAgICAgICAg IGJsb2NrLmNhbGwoOnN0ZG91dCwgbXNnKQogICAgICAgIGVuZAogICAgICAg IG1lc3NhZ2VzLnN0ZGVycl9tZXNzYWdlcy5lYWNoIGRvIHxtc2d8CiAgICAg ICAgICBibG9jay5jYWxsKDpzdGRlcnIsIG1zZykKICAgICAgICBlbmQKICAg ICAgZW5kCiAgICBlbmQKICBlbmQKCiAgZGVmIGRlYnVnKG1zZykKICAgIERv Y2tlci5sb2dnZXIuZGVidWcobXNnKSBpZiBEb2NrZXIubG9nZ2VyCiAgZW5k CiAgCiAgZGVmIGhpamFja19mb3Ioc3RkaW4sIGJsb2NrLCBtc2dfc3RhY2ss IHR0eSkKICAgIGF0dGFjaF9ibG9jayA9IGF0dGFjaF9mb3IoYmxvY2ssIG1z Z19zdGFjaywgdHR5KQoKICAgIGxhbWJkYSBkbyB8c29ja2V0fAogICAgICBk ZWJ1ZyAiaGlqYWNrOiBoaWphY2tpbmcgdGhlIEhUVFAgc29ja2V0IgogICAg ICB0aHJlYWRzID0gW10KCiAgICAgIGRlYnVnICJoaWphY2s6IHN0YXJ0aW5n IHN0ZGluIGNvcHkgdGhyZWFkIgogICAgICB0aHJlYWRzIDw8IFRocmVhZC5z dGFydCBkbwogICAgICAgIGRlYnVnICJoaWphY2s6IGNvcHlpbmcgc3RkaW4g PT4gc29ja2V0IgogICAgICAgIElPLmNvcHlfc3RyZWFtIHN0ZGluLCBzb2Nr ZXQKCiAgICAgICAgZGVidWcgImhpamFjazogY2xvc2luZyB3cml0ZSBlbmQg b2YgaGlqYWNrZWQgc29ja2V0IgogICAgICAgIHNvY2tldC5jbG9zZV93cml0 ZQogICAgICBlbmQKCiAgICAgIGRlYnVnICJoaWphY2s6IHN0YXJ0aW5nIGhp amFja2VkIHNvY2tldCByZWFkIHRocmVhZCIKICAgICAgdGhyZWFkcyA8PCBU aHJlYWQuc3RhcnQgZG8KICAgICAgICBkZWJ1ZyAiaGlqYWNrOiByZWFkaW5n IGZyb20gaGlqYWNrZWQgc29ja2V0IgoKICAgICAgICBiZWdpbgogICAgICAg ICAgd2hpbGUgY2h1bmsgPSBzb2NrZXQucmVhZHBhcnRpYWwoNTEyKQogICAg ICAgICAgICBkZWJ1ZyAiaGlqYWNrOiBnb3QgI3tjaHVuay5ieXRlc2l6ZX0g Ynl0ZXMgZnJvbSBoaWphY2tlZCBzb2NrZXQiCiAgICAgICAgICAgIGF0dGFj aF9ibG9jay5jYWxsIGNodW5rLCBuaWwsIG5pbAogICAgICAgICAgZW5kCiAg ICAgICAgcmVzY3VlIEVPRkVycm9yCiAgICAgICAgZW5kCgogICAgICAgIGRl YnVnICJoaWphY2s6IGtpbGxpbmcgc3RkaW4gY29weSB0aHJlYWQiCiAgICAg ICAgdGhyZWFkcy5maXJzdC5raWxsCiAgICAgIGVuZAoKICAgICAgdGhyZWFk cy5lYWNoKCY6am9pbikKICAgIGVuZAogIGVuZAoKICBkZWYgcGFyc2VfanNv bihib2R5KQogICAgSlNPTi5wYXJzZShib2R5KSB1bmxlc3MgYm9keS5uaWw/ IHx8IGJvZHkuZW1wdHk/IHx8IChib2R5ID09ICdudWxsJykKICByZXNjdWUg SlNPTjo6UGFyc2VyRXJyb3IgPT4gZXgKICAgIHJhaXNlIFVuZXhwZWN0ZWRS ZXNwb25zZUVycm9yLCBleC5tZXNzYWdlCiAgZW5kCgogIGRlZiBwYXJzZV9y ZXBvX3RhZyhzdHIpCiAgICBpZiBtYXRjaCA9IHN0ci5tYXRjaCgvXEEoLiop OihbXjpdKilcei8pCiAgICAgIG1hdGNoLmNhcHR1cmVzCiAgICBlbHNlCiAg ICAgIFtzdHIsICcnXQogICAgZW5kCiAgZW5kCgogIGRlZiBmaXhfanNvbihi b2R5KQogICAgcGFyc2VfanNvbigiWyN7Ym9keS5nc3ViKC99XHMqey8sICd9 LHsnKX1dIikKICBlbmQKCiAgZGVmIGNyZWF0ZV90YXIoaGFzaCA9IHt9KQog ICAgb3V0cHV0ID0gU3RyaW5nSU8ubmV3CiAgICBHZW06OlBhY2thZ2U6OlRh cldyaXRlci5uZXcob3V0cHV0KSBkbyB8dGFyfAogICAgICBoYXNoLmVhY2gg ZG8gfGZpbGVfbmFtZSwgaW5wdXR8CiAgICAgICAgdGFyLmFkZF9maWxlKGZp bGVfbmFtZSwgMDY0MCkgeyB8dGFyX2ZpbGV8IHRhcl9maWxlLndyaXRlKGlu cHV0KSB9CiAgICAgIGVuZAogICAgZW5kCiAgICBvdXRwdXQudGFwKCY6cmV3 aW5kKS5zdHJpbmcKICBlbmQKCiAgZGVmIGNyZWF0ZV9kaXJfdGFyKGRpcmVj dG9yeSkKICAgIGN3ZCA9IEZpbGVVdGlscy5wd2QKICAgIHRlbXBmaWxlX25h bWUgPSBEaXI6OlRtcG5hbWUuY3JlYXRlKCdvdXQnKSB7fQogICAgdGVtcGZp bGUgPSBGaWxlLm9wZW4odGVtcGZpbGVfbmFtZSwgJ3diKycpCiAgICBGaWxl VXRpbHMuY2QoZGlyZWN0b3J5KQogICAgQXJjaGl2ZTo6VGFyOjpNaW5pdGFy LnBhY2soJy4nLCB0ZW1wZmlsZSkKICAgIEZpbGUubmV3KHRlbXBmaWxlLnBh dGgsICdyJykKICBlbnN1cmUKICAgIEZpbGVVdGlscy5jZChjd2QpCiAgZW5k CgogIGRlZiBleHRyYWN0X2lkKGJvZHkpCiAgICBib2R5LmxpbmVzLnRvX2Eu cmV2ZXJzZS5lYWNoIGRvIHxsaW5lfAogICAgICBpZiAoaWQgPSBsaW5lLm1h dGNoKC9TdWNjZXNzZnVsbHkgYnVpbHQgKFthLWYwLTldKykvKSkgJiYgIWlk WzFdLmVtcHR5PwogICAgICAgIHJldHVybiBpZFsxXQogICAgICBlbmQKICAg IGVuZAogICAgcmFpc2UgVW5leHBlY3RlZFJlc3BvbnNlRXJyb3IsICJDb3Vs ZG4ndCBmaW5kIGlkOiAje2JvZHl9IgogIGVuZAoKICAjIENvbnZlbmllbmNl IG1ldGhvZCB0byBnZXQgdGhlIGZpbGUgaGFzaCBjb3JyZXNwb25kaW5nIHRv IGFuIGFycmF5IG9mCiAgIyBsb2NhbCBwYXRocy4KICBkZWYgZmlsZV9oYXNo X2Zyb21fcGF0aHMobG9jYWxfcGF0aHMpCiAgICBsb2NhbF9wYXRocy5lYWNo X3dpdGhfb2JqZWN0KHt9KSBkbyB8bG9jYWxfcGF0aCwgZmlsZV9oYXNofAog ICAgICB1bmxlc3MgRmlsZS5leGlzdD8obG9jYWxfcGF0aCkKICAgICAgICBy YWlzZSBBcmd1bWVudEVycm9yLCAiI3tsb2NhbF9wYXRofSBkb2VzIG5vdCBl eGlzdC4iCiAgICAgIGVuZAoKICAgICAgYmFzZW5hbWUgPSBGaWxlLmJhc2Vu YW1lKGxvY2FsX3BhdGgpCiAgICAgIGlmIEZpbGUuZGlyZWN0b3J5Pyhsb2Nh bF9wYXRoKQogICAgICAgIHRhciA9IGNyZWF0ZV9kaXJfdGFyKGxvY2FsX3Bh dGgpCiAgICAgICAgZmlsZV9oYXNoW2Jhc2VuYW1lXSA9IHRhci5yZWFkCiAg ICAgICAgdGFyLmNsb3NlCiAgICAgICAgRmlsZVV0aWxzLnJtKHRhci5wYXRo KQogICAgICBlbHNlCiAgICAgICAgZmlsZV9oYXNoW2Jhc2VuYW1lXSA9IEZp bGUucmVhZChsb2NhbF9wYXRoKQogICAgICBlbmQKICAgIGVuZAogIGVuZAoK ICBkZWYgYnVpbGRfYXV0aF9oZWFkZXIoY3JlZGVudGlhbHMpCiAgICBjcmVk ZW50aWFscyA9IGNyZWRlbnRpYWxzLnRvX2pzb24gaWYgY3JlZGVudGlhbHMu aXNfYT8oSGFzaCkKICAgIGVuY29kZWRfY3JlZHMgPSBCYXNlNjQuZW5jb2Rl NjQoY3JlZGVudGlhbHMpLmdzdWIoL1xuLywgJycpCiAgICB7CiAgICAgICdY LVJlZ2lzdHJ5LUF1dGgnID0+IGVuY29kZWRfY3JlZHMKICAgIH0KICBlbmQK CiAgZGVmIGJ1aWxkX2NvbmZpZ19oZWFkZXIoY3JlZGVudGlhbHMpCiAgICBp ZiBjcmVkZW50aWFscy5pc19hPyhTdHJpbmcpCiAgICAgIGNyZWRlbnRpYWxz ID0gSlNPTi5wYXJzZShjcmVkZW50aWFscywgc3ltYm9saXplX25hbWVzOiB0 cnVlKQogICAgZW5kCiAgICBoZWFkZXIgPSB7CiAgICAgICJjb25maWdzIiA9 PiB7CiAgICAgICAgY3JlZGVudGlhbHNbOnNlcnZlcmFkZHJlc3NdLnRvX3Mg PT4gewogICAgICAgICAgInVzZXJuYW1lIiA9PiBjcmVkZW50aWFsc1s6dXNl cm5hbWVdLnRvX3MsCiAgICAgICAgICAicGFzc3dvcmQiID0+IGNyZWRlbnRp YWxzWzpwYXNzd29yZF0udG9fcywKICAgICAgICAgICJlbWFpbCIgPT4gY3Jl ZGVudGlhbHNbOmVtYWlsXS50b19zCiAgICAgICAgfQogICAgICB9CiAgICB9 LnRvX2pzb24KCiAgICBlbmNvZGVkX2hlYWRlciA9IEJhc2U2NC5lbmNvZGU2 NChoZWFkZXIpLmdzdWIoL1xuLywgJycpCgogICAgewogICAgICAnWC1SZWdp c3RyeS1Db25maWcnID0+IGVuY29kZWRfaGVhZGVyCiAgICB9CiAgZW5kCmVu ZAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkb2NrZXIv dmVyc2lvbi5yYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAMDEwMDY0NAAwMDAwNzY2ADAwMDAwMjQAMDAwMDAwMDAyMzMAMTI0MzUz NzE1MjYAMDExMzI1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAG1vZHVsZSBEb2NrZXIKICAjIFRoZSB2ZXJzaW9uIG9mIHRo ZSBkb2NrZXItYXBpIGdlbS4KICBWRVJTSU9OID0gJzEuMTUuMCcKCiAgIyBU aGUgdmVyc2lvbiBvZiB0aGUgY29tcGF0aWJsZSBEb2NrZXIgcmVtb3RlIEFQ SS4KICBBUElfVkVSU0lPTiA9ICcxLjE1JwplbmQKAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZG9ja2VyLnJiAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQA MDAwMDc2NgAwMDAwMDI0ADAwMDAwMDA2MjIwADEyNDM3MTE2MTU0ADAwNzYz NgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAB1c3RhcgAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABy ZXF1aXJlICdjZ2knCnJlcXVpcmUgJ2pzb24nCnJlcXVpcmUgJ2V4Y29uJwpy ZXF1aXJlICd0ZW1wZmlsZScKcmVxdWlyZSAnYmFzZTY0JwpyZXF1aXJlICdy dWJ5Z2Vtcy9wYWNrYWdlJwpyZXF1aXJlICdhcmNoaXZlL3Rhci9taW5pdGFy JwpyZXF1aXJlICd1cmknCnJlcXVpcmUgJ29wZW4tdXJpJwoKIyBBZGQgdGhl IEhpamFjayBtaWRkbGV3YXJlIGF0IHRoZSB0b3Agb2YgdGhlIG1pZGRsZXdh cmUgc3RhY2sgc28gaXQgY2FuCiMgcG90ZW50aWFsbHkgaGlqYWNrIEhUVFAg c29ja2V0cyAod2hlbiBhdHRhY2hpbmcgdG8gc3RkaW4pIGJlZm9yZSBvdGhl cgojIG1pZGRsZXdhcmVzIHRyeSBhbmQgcGFyc2UgdGhlIHJlc3BvbnNlLgpy ZXF1aXJlICdleGNvbi9taWRkbGV3YXJlcy9oaWphY2snCkV4Y29uLmRlZmF1 bHRzWzptaWRkbGV3YXJlc10udW5zaGlmdCBFeGNvbjo6TWlkZGxld2FyZTo6 SGlqYWNrCgojIFRoZSB0b3AtbGV2ZWwgbW9kdWxlIGZvciB0aGlzIGdlbS4g SXQncyBwdXJwb3NlIGlzIHRvIGhvbGQgZ2xvYmFsCiMgY29uZmlndXJhdGlv biB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBhcyBkZWZhdWx0cyBpbiBvdGhl ciBjbGFzc2VzLgptb2R1bGUgRG9ja2VyCiAgYXR0cl9hY2Nlc3NvciA6Y3Jl ZHMsIDpsb2dnZXIKCiAgcmVxdWlyZSAnZG9ja2VyL2Vycm9yJwogIHJlcXVp cmUgJ2RvY2tlci9jb25uZWN0aW9uJwogIHJlcXVpcmUgJ2RvY2tlci9iYXNl JwogIHJlcXVpcmUgJ2RvY2tlci9jb250YWluZXInCiAgcmVxdWlyZSAnZG9j a2VyL2V2ZW50JwogIHJlcXVpcmUgJ2RvY2tlci9leGVjJwogIHJlcXVpcmUg J2RvY2tlci9pbWFnZScKICByZXF1aXJlICdkb2NrZXIvbWVzc2FnZXMnCiAg cmVxdWlyZSAnZG9ja2VyL3V0aWwnCiAgcmVxdWlyZSAnZG9ja2VyL3ZlcnNp b24nCiAgcmVxdWlyZSAnZG9ja2VyL3Jha2VfdGFzaycgaWYgZGVmaW5lZD8o UmFrZTo6VGFzaykKCiAgZGVmIGRlZmF1bHRfc29ja2V0X3VybAogICAgJ3Vu aXg6Ly8vdmFyL3J1bi9kb2NrZXIuc29jaycKICBlbmQKCiAgZGVmIGVudl91 cmwKICAgIEVOVlsnRE9DS0VSX1VSTCddIHx8IEVOVlsnRE9DS0VSX0hPU1Qn XQogIGVuZAoKICBkZWYgZW52X29wdGlvbnMKICAgIGlmIGNlcnRfcGF0aCA9 IEVOVlsnRE9DS0VSX0NFUlRfUEFUSCddCiAgICAgIHsKICAgICAgICBjbGll bnRfY2VydDogRmlsZS5qb2luKGNlcnRfcGF0aCwgJ2NlcnQucGVtJyksCiAg ICAgICAgY2xpZW50X2tleTogRmlsZS5qb2luKGNlcnRfcGF0aCwgJ2tleS5w ZW0nKSwKICAgICAgICBzc2xfY2FfZmlsZTogRmlsZS5qb2luKGNlcnRfcGF0 aCwgJ2NhLnBlbScpLAogICAgICAgIHNjaGVtZTogJ2h0dHBzJwogICAgICB9 CiAgICBlbHNlCiAgICAgIHt9CiAgICBlbmQKICBlbmQKCiAgZGVmIHVybAog ICAgQHVybCB8fD0gZW52X3VybCB8fCBkZWZhdWx0X3NvY2tldF91cmwKICAg ICMgZG9ja2VyIHVzZXMgYSBkZWZhdWx0IG5vdGF0aW9uIHRjcDovLyB3aGlj aCBtZWFucyB0Y3A6Ly9sb2NhbGhvc3Q6MjM3NQogICAgaWYgQHVybCA9PSAn dGNwOi8vJwogICAgICBAdXJsID0gJ3RjcDovL2xvY2FsaG9zdDoyMzc1Jwog ICAgZW5kCiAgICBAdXJsCiAgZW5kCgogIGRlZiBvcHRpb25zCiAgICBAb3B0 aW9ucyB8fD0gZW52X29wdGlvbnMKICBlbmQKCiAgZGVmIHVybD0obmV3X3Vy bCkKICAgIEB1cmwgPSBuZXdfdXJsCiAgICByZXNldF9jb25uZWN0aW9uIQog IGVuZAoKICBkZWYgb3B0aW9ucz0obmV3X29wdGlvbnMpCiAgICBAb3B0aW9u cyA9IGVudl9vcHRpb25zLm1lcmdlKG5ld19vcHRpb25zIHx8IHt9KQogICAg cmVzZXRfY29ubmVjdGlvbiEKICBlbmQKCiAgZGVmIGNvbm5lY3Rpb24KICAg IEBjb25uZWN0aW9uIHx8PSBDb25uZWN0aW9uLm5ldyh1cmwsIG9wdGlvbnMp CiAgZW5kCgogIGRlZiByZXNldCEKICAgIEB1cmwgPSBuaWwKICAgIEBvcHRp b25zID0gbmlsCiAgICByZXNldF9jb25uZWN0aW9uIQogIGVuZAoKICBkZWYg cmVzZXRfY29ubmVjdGlvbiEKICAgIEBjb25uZWN0aW9uID0gbmlsCiAgZW5k CgogICMgR2V0IHRoZSB2ZXJzaW9uIG9mIEdvLCBEb2NrZXIsIGFuZCBvcHRp b25hbGx5IHRoZSBHaXQgY29tbWl0LgogIGRlZiB2ZXJzaW9uKGNvbm5lY3Rp b24gPSBzZWxmLmNvbm5lY3Rpb24pCiAgICBVdGlsLnBhcnNlX2pzb24oY29u bmVjdGlvbi5nZXQoJy92ZXJzaW9uJykpCiAgZW5kCgogICMgR2V0IG1vcmUg aW5mb3JtYXRpb24gYWJvdXQgdGhlIERvY2tlciBzZXJ2ZXIuCiAgZGVmIGlu Zm8oY29ubmVjdGlvbiA9IHNlbGYuY29ubmVjdGlvbikKICAgIFV0aWwucGFy c2VfanNvbihjb25uZWN0aW9uLmdldCgnL2luZm8nKSkKICBlbmQKCiAgIyBM b2dpbiB0byB0aGUgRG9ja2VyIHJlZ2lzdHJ5LgogIGRlZiBhdXRoZW50aWNh dGUhKG9wdGlvbnMgPSB7fSwgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24pCiAg ICBjcmVkcyA9IG9wdGlvbnMudG9fanNvbgogICAgY29ubmVjdGlvbi5wb3N0 KCcvYXV0aCcsIHt9LCA6Ym9keSA9PiBjcmVkcykKICAgIEBjcmVkcyA9IGNy ZWRzCiAgICB0cnVlCiAgcmVzY3VlIERvY2tlcjo6RXJyb3I6OlNlcnZlckVy cm9yLCBEb2NrZXI6OkVycm9yOjpVbmF1dGhvcml6ZWRFcnJvcgogICAgcmFp c2UgRG9ja2VyOjpFcnJvcjo6QXV0aGVudGljYXRpb25FcnJvcgogIGVuZAoK ICAjIFdoZW4gdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBEb2NrZXIgaXMgaW5z dGFsbGVkLCByZXR1cm5zIHRydWUuIE90aGVyd2lzZSwKICAjIHJhaXNlcyBh IFZlcnNpb25FcnJvci4KICBkZWYgdmFsaWRhdGVfdmVyc2lvbiEKICAgIERv Y2tlci5pbmZvCiAgICB0cnVlCiAgcmVzY3VlIERvY2tlcjo6RXJyb3I6OkRv Y2tlckVycm9yCiAgICByYWlzZSBEb2NrZXI6OkVycm9yOjpWZXJzaW9uRXJy b3IsICJFeHBlY3RlZCBBUEkgVmVyc2lvbjogI3tBUElfVkVSU0lPTn0iCiAg ZW5kCgogIG1vZHVsZV9mdW5jdGlvbiA6ZGVmYXVsdF9zb2NrZXRfdXJsLCA6 ZW52X3VybCwgOnVybCwgOnVybD0sIDplbnZfb3B0aW9ucywKICAgICAgICAg ICAgICAgICAgOm9wdGlvbnMsIDpvcHRpb25zPSwgOmNyZWRzLCA6Y3JlZHM9 LCA6bG9nZ2VyLCA6bG9nZ2VyPSwKICAgICAgICAgICAgICAgICAgOmNvbm5l Y3Rpb24sIDpyZXNldCEsIDpyZXNldF9jb25uZWN0aW9uISwgOnZlcnNpb24s IDppbmZvLAogICAgICAgICAgICAgICAgICA6YXV0aGVudGljYXRlISwgOnZh bGlkYXRlX3ZlcnNpb24hCmVuZAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGV4Y29uAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDQwNzU1 ADAwMDA3NjYAMDAwMDAyNAAwMDAwMDAwMDAwMAAxMjQzMzAwNzU1NQAwMDcx MDIAIDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAdXN0YXIAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ZXhjb24vbWlkZGxld2FyZXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAwNDA3NTUAMDAwMDc2NgAwMDAwMDI0ADAwMDAwMDAwMDAw ADEyNDMzMDA3NTU1ADAxMTQwMgAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABleGNvbi9taWRkbGV3YXJlcy9oaWphY2sucmIA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAwNzY2ADAw MDAwMjQAMDAwMDAwMDMyMDQAMTI0MzMwMDc1NTUAMDEzMjMzACAwAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHVzdGFyADAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1vZHVsZSBFeGNv bgogIFZBTElEX1JFUVVFU1RfS0VZUyA8PCA6aGlqYWNrX2Jsb2NrCgogIG1v ZHVsZSBNaWRkbGV3YXJlCiAgICAjIEhpamFjayBpcyBhbiBFeGNvbiBtaWRk bGV3YXJlIHdoaWNoIHBhcnNlcyByZXNwb25zZSBoZWFkZXJzIGFuZCB0aGVu CiAgICAjIHlpZWxkcyB0aGUgdW5kZXJseWluZyBUQ1Agc29ja2V0IGZvciBy YXcgVENQIGNvbW11bmljYXRpb24gKHVzZWQgdG8KICAgICMgYXR0YWNoIHRv IFNURElOIG9mIGNvbnRhaW5lcnMpLgogICAgY2xhc3MgSGlqYWNrIDwgQmFz ZQogICAgICBkZWYgYnVpbGRfcmVzcG9uc2Uoc3RhdHVzLCBzb2NrZXQpCiAg ICAgICAgcmVzcG9uc2UgPSB7CiAgICAgICAgICA6Ym9keSAgICAgICAgICA9 PiAnJywKICAgICAgICAgIDpoZWFkZXJzICAgICAgID0+IEV4Y29uOjpIZWFk ZXJzLm5ldywKICAgICAgICAgIDpzdGF0dXMgICAgICAgID0+IHN0YXR1cywK ICAgICAgICAgIDpyZW1vdGVfaXAgICAgID0+IHNvY2tldC5yZXNwb25kX3Rv Pyg6cmVtb3RlX2lwKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAg c29ja2V0LnJlbW90ZV9pcCwKICAgICAgICB9CiAgICAgICAgaWYgc29ja2V0 LmRhdGFbOnNjaGVtZV0gPX4gL14oaHR0cHM/fHRjcCkkLwogICAgICAgICAg cmVzcG9uc2UubWVyZ2UoewogICAgICAgICAgICA6bG9jYWxfcG9ydCAgICA9 PiBzb2NrZXQucmVzcG9uZF90bz8oOmxvY2FsX3BvcnQpICYmCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5sb2NhbF9wb3J0LAogICAg ICAgICAgICA6bG9jYWxfYWRkcmVzcyA9PiBzb2NrZXQucmVzcG9uZF90bz8o OmxvY2FsX2FkZHJlc3MpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNvY2tldC5sb2NhbF9hZGRyZXNzCiAgICAgICAgICB9KQogICAgICAg IGVuZAogICAgICAgIHJlc3BvbnNlCiAgICAgIGVuZAoKICAgICAgZGVmIHJl c3BvbnNlX2NhbGwoZGF0dW0pCiAgICAgICAgaWYgZGF0dW1bOmhpamFja19i bG9ja10KICAgICAgICAgICMgTmVlZCB0byBwcm9jZXNzIHRoZSByZXNwb25z ZSBoZWFkZXJzIGhlcmUgcmF0aGVyIHRoYW4gaW4KICAgICAgICAgICMgRXhj b246Ok1pZGRsZXdhcmU6OlJlc3BvbnNlUGFyc2VyIGFzIHRoZSByZXNwb25z ZSBwYXJzZXIgd2lsbAogICAgICAgICAgIyBibG9jayB0cnlpbmcgdG8gcmVh ZCB0aGUgYm9keS4KICAgICAgICAgIHNvY2tldCA9IGRhdHVtWzpjb25uZWN0 aW9uXS5zZW5kKDpzb2NrZXQpCgogICAgICAgICAgIyBjLmYuIEV4Y29uOjpS ZXNwb25zZS5wYXJzZQogICAgICAgICAgdW50aWwgbWF0Y2ggPSAvXkhUVFBc L1xkK1wuXGQrXHMoXGR7M30pXHMvLm1hdGNoKHNvY2tldC5yZWFkbGluZSk7 IGVuZAogICAgICAgICAgc3RhdHVzID0gbWF0Y2hbMV0udG9faQoKICAgICAg ICAgIGRhdHVtWzpyZXNwb25zZV0gPSBidWlsZF9yZXNwb25zZShzdGF0dXMs IHNvY2tldCkKCiAgICAgICAgICBFeGNvbjo6UmVzcG9uc2UucGFyc2VfaGVh ZGVycyhzb2NrZXQsIGRhdHVtKQogICAgICAgICAgZGF0dW1bOmhpamFja19i bG9ja10uY2FsbCBzb2NrZXQuaW5zdGFuY2VfdmFyaWFibGVfZ2V0KDpAc29j a2V0KQogICAgICAgIGVuZAoKICAgICAgICBAc3RhY2sucmVzcG9uc2VfY2Fs bChkYXR1bSkKICAgICAgZW5kCiAgICBlbmQKICBlbmQKZW5kCgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AERvY2tlcmZpbGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAwMDAwNjQwADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMDAz NwAxMjQzNzEyNzI0NwAwMTMzMTUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDB3aGVl bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAMDAwMDAwMAAwMDAwMDAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAZnJvbSBmNmZhYjNiNzk4YmUKYWRkIGxpYiAv bGliCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA headers: User-Agent: - Swipely/Docker-API 1.15.0 Content-Type: - application/json response: status: code: 200 message: headers: Content-Type: - application/json Date: - Mon, 01 Dec 2014 18:08:39 GMT body: encoding: UTF-8 string: "{\"stream\":\"Step 0 : FROM f6fab3b798be\\n\"}\r\n{\"stream\":\" ---\\u003e f6fab3b798be\\n\"}\r\n{\"stream\":\"Step 1 : ADD lib /lib\\n\"}\r\n{\"stream\":\" ---\\u003e caf68610e26b\\n\"}\r\n{\"stream\":\"Removing intermediate container 269dd4d9b480\\n\"}\r\n{\"stream\":\"Successfully built caf68610e26b\\n\"}\r\n" http_version: recorded_at: Mon, 01 Dec 2014 18:08:39 GMT - request: method: post uri: "/v1.15/containers/create" body: encoding: UTF-8 string: '{"Image":"caf68610e26b","Cmd":["ls","-a","/lib/docker"]}' headers: User-Agent: - Swipely/Docker-API 1.15.0 Content-Type: - application/json response: status: code: 201 message: headers: Content-Type: - application/json Date: - Mon, 01 Dec 2014 18:08:40 GMT Content-Length: - '90' body: encoding: UTF-8 string: | {"Id":"f31b32960f3c0f6e0bf1a7f5eb675cf8c846da2d6a322cd67b61f480a14f771a","Warnings":null} http_version: recorded_at: Mon, 01 Dec 2014 18:08:40 GMT - request: method: post uri: "/v1.15/containers/f31b32960f3c0f6e0bf1a7f5eb675cf8c846da2d6a322cd67b61f480a14f771a/start" body: encoding: UTF-8 string: "{}" headers: User-Agent: - Swipely/Docker-API 1.15.0 Content-Type: - application/json response: status: code: 204 message: headers: Date: - Mon, 01 Dec 2014 18:08:40 GMT body: encoding: UTF-8 string: '' http_version: recorded_at: Mon, 01 Dec 2014 18:08:40 GMT - request: method: get uri: "/v1.15/containers/f31b32960f3c0f6e0bf1a7f5eb675cf8c846da2d6a322cd67b61f480a14f771a/logs?stdout=true" body: encoding: US-ASCII string: '' headers: User-Agent: - Swipely/Docker-API 1.15.0 Content-Type: - text/plain response: status: code: 200 message: headers: Date: - Mon, 01 Dec 2014 18:08:40 GMT Content-Type: - application/octet-stream body: encoding: UTF-8 string: !binary |- AQAAAAAAAAIuCgEAAAAAAAADLi4KAQAAAAAAAAhiYXNlLnJiCgEAAAAAAAAO Y29ubmVjdGlvbi5yYgoBAAAAAAAADWNvbnRhaW5lci5yYgoBAAAAAAAACWVy cm9yLnJiCgEAAAAAAAAJZXZlbnQucmIKAQAAAAAAAAhleGVjLnJiCgEAAAAA AAAJaW1hZ2UucmIKAQAAAAAAAAxtZXNzYWdlcy5yYgoBAAAAAAAADXJha2Vf dGFzay5yYgoBAAAAAAAACHV0aWwucmIKAQAAAAAAAAt2ZXJzaW9uLnJiCg== http_version: recorded_at: Mon, 01 Dec 2014 18:08:40 GMT - request: method: post uri: "/v1.15/containers/f31b32960f3c0f6e0bf1a7f5eb675cf8c846da2d6a322cd67b61f480a14f771a/wait" body: encoding: US-ASCII string: '' headers: User-Agent: - Swipely/Docker-API 1.15.0 Content-Type: - text/plain response: status: code: 200 message: headers: Content-Type: - application/json Date: - Mon, 01 Dec 2014 18:08:40 GMT Content-Length: - '17' body: encoding: UTF-8 string: | {"StatusCode":0} http_version: recorded_at: Mon, 01 Dec 2014 18:08:40 GMT - request: method: delete uri: "/v1.15/containers/f31b32960f3c0f6e0bf1a7f5eb675cf8c846da2d6a322cd67b61f480a14f771a" body: encoding: US-ASCII string: '' headers: User-Agent: - Swipely/Docker-API 1.15.0 Content-Type: - text/plain response: status: code: 204 message: headers: Date: - Mon, 01 Dec 2014 18:08:40 GMT body: encoding: UTF-8 string: '' http_version: recorded_at: Mon, 01 Dec 2014 18:08:40 GMT - request: method: delete uri: "/v1.15/images/caf68610e26b" body: encoding: US-ASCII string: '' headers: User-Agent: - Swipely/Docker-API 1.15.0 Content-Type: - text/plain response: status: code: 200 message: headers: Content-Type: - application/json Date: - Mon, 01 Dec 2014 18:08:40 GMT Content-Length: - '81' body: encoding: UTF-8 string: |- [{"Deleted":"caf68610e26b8edfc539264c16f4b821fbf3f358dccb2fdee9f4b60c5aec9428"} ] http_version: recorded_at: Mon, 01 Dec 2014 18:08:40 GMT recorded_with: VCR 2.9.3