From mboxrd@z Thu Jan 1 00:00:00 1970 Delivered-To: chneukirchen@gmail.com Received: by 10.142.191.1 with SMTP id o1cs131353wff; Fri, 20 Nov 2009 16:46:35 -0800 (PST) Received: from mr.google.com ([10.143.20.38]) by 10.143.20.38 with SMTP id x38mr1168170wfi.8.1258764395394 (num_hops = 1); Fri, 20 Nov 2009 16:46:35 -0800 (PST) Received: by 10.143.20.38 with SMTP id x38mr487057wfi.8.1258764393620; Fri, 20 Nov 2009 16:46:33 -0800 (PST) X-BeenThere: rack-devel@googlegroups.com Received: by 10.143.25.5 with SMTP id c5ls3455wfj.3.p; Fri, 20 Nov 2009 16:46:32 -0800 (PST) Received: by 10.143.20.39 with SMTP id x39mr480036wfi.27.1258764392276; Fri, 20 Nov 2009 16:46:32 -0800 (PST) Received: by 10.143.20.39 with SMTP id x39mr480035wfi.27.1258764392206; Fri, 20 Nov 2009 16:46:32 -0800 (PST) Return-Path: Received: from mail-pw0-f44.google.com (mail-pw0-f44.google.com [209.85.160.44]) by gmr-mx.google.com with ESMTP id 3si537737pxi.0.2009.11.20.16.46.31; Fri, 20 Nov 2009 16:46:31 -0800 (PST) Received-SPF: pass (google.com: domain of wycats@gmail.com designates 209.85.160.44 as permitted sender) client-ip=209.85.160.44; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of wycats@gmail.com designates 209.85.160.44 as permitted sender) smtp.mail=wycats@gmail.com; dkim=pass (test mode) header.i=@gmail.com Received: by pwj15 with SMTP id 15so2575839pwj.23 for ; Fri, 20 Nov 2009 16:46:31 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.7.21 with SMTP id 21mr221819wfg.97.1258764391082; Fri, 20 Nov 2009 16:46:31 -0800 (PST) In-Reply-To: <245fb4700911201642h56b9e639u20748e5a2117fbe8@mail.gmail.com> References: <245fb4700911201642h56b9e639u20748e5a2117fbe8@mail.gmail.com> From: Yehuda Katz Date: Fri, 20 Nov 2009 16:46:11 -0800 Message-ID: <245fb4700911201646w46d98f25mc9177fa9d074d706@mail.gmail.com> Subject: Re: Rack::Server patch To: rack-devel Reply-To: rack-devel@googlegroups.com Precedence: list Mailing-list: list rack-devel@googlegroups.com; contact rack-devel+owners@googlegroups.com List-ID: List-Post: , List-Help: , List-Archive: X-Thread-Url: http://groups.google.com/group/rack-devel/t/3eefabb1a33778df X-Message-Url: http://groups.google.com/group/rack-devel/msg/e024569b435fa66c List-Unsubscribe: , List-Subscribe: , Content-Type: multipart/mixed; boundary=005045017f2c62ebd10478d6ec0f --005045017f2c62ebd10478d6ec0f Content-Type: multipart/alternative; boundary=005045017f2c62ebc70478d6ec0d --005045017f2c62ebc70478d6ec0d Content-Type: text/plain; charset=ISO-8859-1 Patches attached. [1] tests_patch.diff -- Adds tests for the functionality of rackup [2] rack_server_patch.diff -- Moves Rack::Server into a separate object Yehuda Katz Developer | Engine Yard (ph) 718.877.1325 2009/11/20 Yehuda Katz > Hey guys, > > Carl and I spent a couple of day refactoring the code in bin/rackup into > Rack::Server. The main motivation for this was to enable Rails to ditch our > code in script/server and simply inherit from the requisite Rack code. I > think the code improvement speaks for itself. In the process of this work, > we also moved a few things out of Rackup into more usable locations, like > Rack::Handler.default (to get the handler that Rack will use if none is > specified) and Rack::Builder.parse_file (which we currently duplicate in > ActionDispatch). > > You can check out the changes at github.com/carllerche/rack, and I have > also attached a patch. In addition to converting the rackup binary to a > class, we also wrote tests for each function of rackup, to be sure we > wouldn't break anything in the refactor. As a result, this patch now has > tests for rackup! > > Yehuda Katz > Developer | Engine Yard > (ph) 718.877.1325 > --005045017f2c62ebc70478d6ec0d Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Patches attached.

[1] tests_patch.diff -- Adds tests for= the functionality of rackup
[2]=A0rack_server_patch.diff -- Move= s Rack::Server into a separate object

Yehuda Ka= tz
Developer | Engine Yard
(ph) 718.877.1325


2009/11/20 Yehuda Katz <wycats@gmail.com>
Hey guys,

Carl and I spent a couple of day refactoring t= he code in bin/rackup into Rack::Server. The main motivation for this was t= o enable Rails to ditch our code in script/server and simply inherit from t= he requisite Rack code. I think the code improvement speaks for itself. In = the process of this work, we also moved a few things out of Rackup into mor= e usable locations, like Rack::Handler.default (to get the handler that Rac= k will use if none is specified) and Rack::Builder.parse_file (which we cur= rently duplicate in ActionDispatch).

You can check out the changes at github.com/carllerche/rack, a= nd I have also attached a patch. In addition to converting the rackup binar= y to a class, we also wrote tests for each function of rackup, to be sure w= e wouldn't break anything in the refactor. As a result, this patch now = has tests for rackup!

Yehuda Katz
Developer | Engine Yard
(ph) 718.8= 77.1325

--005045017f2c62ebc70478d6ec0d-- --005045017f2c62ebd10478d6ec0f Content-Type: application/octet-stream; name="tests_patch.diff" Content-Disposition: attachment; filename="tests_patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g29nsn5r0 ZGlmZiAtLWdpdCBhL2Jpbi9yYWNrdXAgYi9iaW4vcmFja3VwCmluZGV4IDkxYWJlMTcuLjNhOTAz MjcgMTAwNzU1Ci0tLSBhL2Jpbi9yYWNrdXAKKysrIGIvYmluL3JhY2t1cApAQCAtOSw3ICs5LDcg QEAgYXV0b21hdGljID0gZmFsc2UKIHNlcnZlciA9IG5pbAogZW52ID0gImRldmVsb3BtZW50Igog ZGFlbW9uaXplID0gZmFsc2UKLXBpZCA9IG5pbAorcGlkID0gRmlsZS5leHBhbmRfcGF0aCgicmFj ay5waWQiKQogb3B0aW9ucyA9IHs6UG9ydCA9PiA5MjkyLCA6SG9zdCA9PiAiMC4wLjAuMCIsIDpB Y2Nlc3NMb2cgPT4gW119CiAKICMgRG9uJ3QgZXZhbHVhdGUgQ0dJIElTSU5ERVggcGFyYW1ldGVy cy4KZGlmZiAtLWdpdCBhL3Rlc3QvcmFja3VwL2NvbmZpZy5ydSBiL3Rlc3QvcmFja3VwL2NvbmZp Zy5ydQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkwYzZlCi0tLSAvZGV2 L251bGwKKysrIGIvdGVzdC9yYWNrdXAvY29uZmlnLnJ1CkBAIC0wLDAgKzEsMjUgQEAKK3JlcXVp cmUgIiN7RmlsZS5kaXJuYW1lKF9fRklMRV9fKX0vLi4vdGVzdHJlcXVlc3QiCisKKyRzdGRlcnIg PSBTdHJpbmdJTy5uZXcKKworY2xhc3MgRW52TWlkZGxld2FyZQorICBkZWYgaW5pdGlhbGl6ZShh cHApCisgICAgQGFwcCA9IGFwcAorICBlbmQKKyAgCisgIGRlZiBjYWxsKGVudikKKyAgICBpZiBl bnZbIlBBVEhfSU5GTyJdID09ICIvYnJva2VuX2xpbnQiCisgICAgICByZXR1cm4gWzIwMCwge30s IFsiQnJva2VuIExpbnQiXV0KKyAgICBlbmQKKworICAgIGVudlsidGVzdC4kREVCVUciXSAgICAg ID0gJERFQlVHCisgICAgZW52WyJ0ZXN0LiRFVkFMIl0gICAgICAgPSBCVUtLSVQgaWYgZGVmaW5l ZD8oQlVLS0lUKQorICAgIGVudlsidGVzdC4kVkVSQk9TRSJdICAgID0gJFZFUkJPU0UKKyAgICBl bnZbInRlc3QuJExPQURfUEFUSCJdICA9ICRMT0FEX1BBVEgKKyAgICBlbnZbInRlc3QuUGluZyJd ICAgICAgICA9IGRlZmluZWQ/KFBpbmcpCisgICAgQGFwcC5jYWxsKGVudikKKyAgZW5kCitlbmQK KwordXNlIEVudk1pZGRsZXdhcmUKK3J1biBUZXN0UmVxdWVzdC5uZXcKZGlmZiAtLWdpdCBhL3Rl c3Qvc3BlY19yYWNrdXAucmIgYi90ZXN0L3NwZWNfcmFja3VwLnJiCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmMzZTQ2YTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3NwZWNf cmFja3VwLnJiCkBAIC0wLDAgKzEsMTMzIEBACityZXF1aXJlICd0ZXN0L3NwZWMnCityZXF1aXJl ICdyYWNrL3JhY2t1cCcKK3JlcXVpcmUgJ3Rlc3RyZXF1ZXN0JworcmVxdWlyZSAnb3BlbjMnCisK K2JlZ2luCityZXF1aXJlICJtb25ncmVsIgorCitjb250ZXh0ICJyYWNrdXAiIGRvCisgIGluY2x1 ZGUgVGVzdFJlcXVlc3Q6OkhlbHBlcnMKKworICBkZWYgcnVuX3JhY2t1cCgqYXJncykKKyAgICBv cHRpb25zID0gYXJncy5sYXN0LmlzX2E/KEhhc2gpID8gYXJncy5wb3AgOiB7fQorICAgIGZsYWdz ICAgPSBhcmdzLmZpcnN0CisgICAgQGhvc3QgPSBvcHRpb25zWzpob3N0XSB8fCAiMC4wLjAuMCIK KyAgICBAcG9ydCA9IG9wdGlvbnNbOnBvcnRdIHx8IDkyOTIKKworICAgIERpci5jaGRpcigiI3ty b290fS90ZXN0L3JhY2t1cCIpIGRvCisgICAgICBAcmFja3VwID0gSU8ucG9wZW4oIiN7R2VtLnJ1 Ynl9IC1TICN7cmFja3VwfSAje2ZsYWdzfSIpCisgICAgZW5kCisKKyAgICByZXR1cm4gaWYgb3B0 aW9uc1s6cG9ydF0gPT0gZmFsc2UKKworICAgICMgV2FpdCB1bnRpbCB0aGUgc2VydmVyIGlzIGF2 YWlsYWJsZQorICAgIGJlZ2luCisgICAgICBHRVQoIi8iKQorICAgIHJlc2N1ZQorICAgICAgc2xl ZXAgMC4wNQorICAgICAgcmV0cnkKKyAgICBlbmQKKyAgZW5kCisKKyAgZGVmIG91dHB1dAorICAg IEByYWNrdXAucmVhZAorICBlbmQKKworICBhZnRlciBkbworICAgIFByb2Nlc3Mua2lsbCg5LCBA cmFja3VwLnBpZCkgaWYgQHJhY2t1cAorCisgICAgRGlyWyIje3Jvb3R9LyoqLyoucGlkIl0uZWFj aCBkbyB8ZmlsZXwKKyAgICAgIFByb2Nlc3Mua2lsbCg5LCBGaWxlLnJlYWQoZmlsZSkudG9faSkK KyAgICAgIEZpbGUuZGVsZXRlKGZpbGUpCisgICAgZW5kCisgIGVuZAorCisgIHNwZWNpZnkgInJh Y2t1cCIgZG8KKyAgICBydW5fcmFja3VwCisgICAgcmVzcG9uc2VbIlBBVEhfSU5GTyJdLnNob3Vs ZC5lcXVhbCAnLycKKyAgICByZXNwb25zZVsidGVzdC4kREVCVUciXS5zaG91bGQuYmUgZmFsc2UK KyAgICByZXNwb25zZVsidGVzdC4kRVZBTCJdLnNob3VsZC5iZSBuaWwKKyAgICByZXNwb25zZVsi dGVzdC4kVkVSQk9TRSJdLnNob3VsZC5iZSBmYWxzZQorICAgIHJlc3BvbnNlWyJ0ZXN0LlBpbmci XS5zaG91bGQuYmUgbmlsCisgICAgcmVzcG9uc2VbIlNFUlZFUl9TT0ZUV0FSRSJdLnNob3VsZC5u b3QgPX4gL3dlYnJpY2svCisgIGVuZAorCisgIHNwZWNpZnkgInJhY2t1cCAtLWhlbHAiIGRvCisg ICAgcnVuX3JhY2t1cCAiLS1oZWxwIiwgOnBvcnQgPT4gZmFsc2UKKyAgICBvdXRwdXQuc2hvdWxk Lm1hdGNoIC8tLXBvcnQvCisgIGVuZAorCisgIHNwZWNpZnkgInJhY2t1cCAtLXBvcnQiIGRvCisg ICAgcnVuX3JhY2t1cCAiLS1wb3J0IDkwMDAiLCA6cG9ydCA9PiA5MDAwCisgICAgcmVzcG9uc2Vb IlNFUlZFUl9QT1JUIl0uc2hvdWxkLmVxdWFsICI5MDAwIgorICBlbmQKKworICBzcGVjaWZ5ICJy YWNrdXAgLS1kZWJ1ZyIgZG8KKyAgICBydW5fcmFja3VwICItLWRlYnVnIgorICAgIHJlc3BvbnNl WyJ0ZXN0LiRERUJVRyJdLnNob3VsZC5iZSB0cnVlCisgIGVuZAorCisgIHNwZWNpZnkgInJhY2t1 cCAtLWV2YWwiIGRvCisgICAgcnVuX3JhY2t1cCAley0tZXZhbCAiQlVLS0lUID0gJ0JVS0tJVCci fQorICAgIHJlc3BvbnNlWyJ0ZXN0LiRFVkFMIl0uc2hvdWxkLmVxdWFsICJCVUtLSVQiCisgIGVu ZAorCisgIHNwZWNpZnkgInJhY2t1cCAtLXdhcm4iIGRvCisgICAgcnVuX3JhY2t1cCAley0td2Fy bn0KKyAgICByZXNwb25zZVsidGVzdC4kVkVSQk9TRSJdLnNob3VsZC5iZSB0cnVlCisgIGVuZAor CisgIHNwZWNpZnkgInJhY2t1cCAtLWluY2x1ZGUiIGRvCisgICAgcnVuX3JhY2t1cCAley0taW5j bHVkZSAvZm9vL2Jhcn0KKyAgICByZXNwb25zZVsidGVzdC4kTE9BRF9QQVRIIl0uc2hvdWxkLmlu Y2x1ZGUgIi9mb28vYmFyIgorICBlbmQKKworICBzcGVjaWZ5ICJyYWNrdXAgLS1yZXF1aXJlIiBk bworICAgIHJ1bl9yYWNrdXAgJXstLXJlcXVpcmUgcGluZ30KKyAgICByZXNwb25zZVsidGVzdC5Q aW5nIl0uc2hvdWxkLmVxdWFsICJjb25zdGFudCIKKyAgZW5kCisKKyAgc3BlY2lmeSAicmFja3Vw IC0tc2VydmVyIiBkbworICAgIHJ1bl9yYWNrdXAgJXstLXNlcnZlciB3ZWJyaWNrfQorICAgIHJl c3BvbnNlWyJTRVJWRVJfU09GVFdBUkUiXS5zaG91bGQgPX4gL3dlYnJpY2svaQorICBlbmQKKwor ICBzcGVjaWZ5ICJyYWNrdXAgLS1ob3N0IiBkbworICAgIHJ1bl9yYWNrdXAgJXstLWhvc3QgMTI3 LjAuMC4xfSwgOmhvc3QgPT4gIjEyNy4wLjAuMSIKKyAgICByZXNwb25zZVsiUkVNT1RFX0FERFIi XS5zaG91bGQuZXF1YWwgIjEyNy4wLjAuMSIKKyAgZW5kCisKKyAgc3BlY2lmeSAicmFja3VwIC0t ZGFlbW9uaXplIiBkbworICAgIHJ1bl9yYWNrdXAgJXstLWRhZW1vbml6ZX0KKyAgICBzdGF0dXMu c2hvdWxkLmJlIDIwMAorICAgIEByYWNrdXAuc2hvdWxkLmJlLmVvZj8KKyAgZW5kCisKKyAgc3Bl Y2lmeSAicmFja3VwIC0tcGlkIiBkbworICAgIHJ1bl9yYWNrdXAgJXstLWRhZW1vbml6ZSAtLXBp ZCB0ZXN0aW5nLnBpZH0KKyAgICBzdGF0dXMuc2hvdWxkLmJlIDIwMAorICAgIEByYWNrdXAuc2hv dWxkLmJlLmVvZj8KKyAgICBEaXJbIiN7cm9vdH0vKiovdGVzdGluZy5waWQiXS5zaG91bGQubm90 LmJlLmVtcHR5PworICBlbmQKKworICBzcGVjaWZ5ICJyYWNrdXAgLS12ZXJzaW9uIiBkbworICAg IHJ1bl9yYWNrdXAgJXstLXZlcnNpb259LCA6cG9ydCA9PiBmYWxzZQorICAgIG91dHB1dC5zaG91 bGQgPX4gLzEuMC8KKyAgZW5kCisKKyAgc3BlY2lmeSAicmFja3VwIC0tZW52IGRldmVsb3BtZW50 IGluY2x1ZGVzIGxpbnQiIGRvCisgICAgcnVuX3JhY2t1cAorICAgIEdFVCgiL2Jyb2tlbl9saW50 IikKKyAgICBzdGF0dXMuc2hvdWxkLmJlIDUwMAorICBlbmQKKworICBzcGVjaWZ5ICJyYWNrdXAg LS1lbnYiIGRvCisgICAgcnVuX3JhY2t1cCAley0tZW52IGRlcGxveW1lbnR9CisgICAgR0VUKCIv YnJva2VuX2xpbnQiKQorICAgIHN0YXR1cy5zaG91bGQuYmUgMjAwCisgIGVuZAorZW5kCityZXNj dWUgTG9hZEVycm9yCisgICRzdGRlcnIucHV0cyAiU2tpcHBpbmcgcmFja3VwIC0tc2VydmVyIHRl c3RzIChtb25ncmVsIGlzIHJlcXVpcmVkKS4gYGdlbSBpbnN0YWxsIHRoaW5gIGFuZCB0cnkgYWdh aW4uIgorZW5kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdC90 ZXN0cmVxdWVzdC5yYiBiL3Rlc3QvdGVzdHJlcXVlc3QucmIKaW5kZXggN2I3MTkwYy4uMGRhMmIx MiAxMDA2NDQKLS0tIGEvdGVzdC90ZXN0cmVxdWVzdC5yYgorKysgYi90ZXN0L3Rlc3RyZXF1ZXN0 LnJiCkBAIC0xMyw2ICsxMywxNyBAQCBjbGFzcyBUZXN0UmVxdWVzdAogICBtb2R1bGUgSGVscGVy cwogICAgIGF0dHJfcmVhZGVyIDpzdGF0dXMsIDpyZXNwb25zZQogCisgICAgUk9PVCA9IEZpbGUu ZXhwYW5kX3BhdGgoRmlsZS5kaXJuYW1lKF9fRklMRV9fKSArICIvLi4iKQorICAgIEVOVlsiUlVC WU9QVCJdID0gIi1JI3tST09UfS9saWIgLXJ1YnlnZW1zIgorCisgICAgZGVmIHJvb3QKKyAgICAg IFJPT1QKKyAgICBlbmQKKworICAgIGRlZiByYWNrdXAKKyAgICAgICIje1JPT1R9L2Jpbi9yYWNr dXAiCisgICAgZW5kCisKICAgICBkZWYgR0VUKHBhdGgsIGhlYWRlcj17fSkKICAgICAgIE5ldDo6 SFRUUC5zdGFydChAaG9zdCwgQHBvcnQpIHsgfGh0dHB8CiAgICAgICAgIHVzZXIgPSBoZWFkZXIu ZGVsZXRlKDp1c2VyKQpAQCAtMjIsNyArMzMsMTEgQEAgY2xhc3MgVGVzdFJlcXVlc3QKICAgICAg ICAgZ2V0LmJhc2ljX2F1dGggdXNlciwgcGFzc3dkICBpZiB1c2VyICYmIHBhc3N3ZAogICAgICAg ICBodHRwLnJlcXVlc3QoZ2V0KSB7IHxyZXNwb25zZXwKICAgICAgICAgICBAc3RhdHVzID0gcmVz cG9uc2UuY29kZS50b19pCi0gICAgICAgICAgQHJlc3BvbnNlID0gWUFNTC5sb2FkKHJlc3BvbnNl LmJvZHkpCisgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEByZXNwb25zZSA9IFlBTUwubG9h ZChyZXNwb25zZS5ib2R5KQorICAgICAgICAgIHJlc2N1ZSBBcmd1bWVudEVycm9yCisgICAgICAg ICAgICBAcmVzcG9uc2UgPSBuaWwKKyAgICAgICAgICBlbmQKICAgICAgICAgfQogICAgICAgfQog ICAgIGVuZAo= --005045017f2c62ebd10478d6ec0f Content-Type: application/octet-stream; name="rack_server_patch.diff" Content-Disposition: attachment; filename="rack_server_patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g29nsr1k1 ZGlmZiAtLWdpdCBhL2Jpbi9yYWNrdXAgYi9iaW4vcmFja3VwCmluZGV4IDNhOTAzMjcuLmNjOWNj YmYgMTAwNzU1Ci0tLSBhL2Jpbi9yYWNrdXAKKysrIGIvYmluL3JhY2t1cApAQCAtMSwxNzYgKzEs NSBAQAogIyEvdXNyL2Jpbi9lbnYgcnVieQogIyAtKi0gcnVieSAtKi0KIAotcmVxdWlyZSAncmFj aycKLQotcmVxdWlyZSAnb3B0cGFyc2UnCi0KLWF1dG9tYXRpYyA9IGZhbHNlCi1zZXJ2ZXIgPSBu aWwKLWVudiA9ICJkZXZlbG9wbWVudCIKLWRhZW1vbml6ZSA9IGZhbHNlCi1waWQgPSBGaWxlLmV4 cGFuZF9wYXRoKCJyYWNrLnBpZCIpCi1vcHRpb25zID0gezpQb3J0ID0+IDkyOTIsIDpIb3N0ID0+ ICIwLjAuMC4wIiwgOkFjY2Vzc0xvZyA9PiBbXX0KLQotIyBEb24ndCBldmFsdWF0ZSBDR0kgSVNJ TkRFWCBwYXJhbWV0ZXJzLgotIyBodHRwOi8vaG9vaG9vLm5jc2EudWl1Yy5lZHUvY2dpL2NsLmh0 bWwKLUFSR1YuY2xlYXIgIGlmIEVOVi5pbmNsdWRlPygiUkVRVUVTVF9NRVRIT0QiKQotCi1vcHRz ID0gT3B0aW9uUGFyc2VyLm5ldygiIiwgMjQsICcgICcpIHsgfG9wdHN8Ci0gIG9wdHMuYmFubmVy ID0gIlVzYWdlOiByYWNrdXAgW3J1Ynkgb3B0aW9uc10gW3JhY2sgb3B0aW9uc10gW3JhY2t1cCBj b25maWddIgotCi0gIG9wdHMuc2VwYXJhdG9yICIiCi0gIG9wdHMuc2VwYXJhdG9yICJSdWJ5IG9w dGlvbnM6IgotCi0gIGxpbmVubyA9IDEKLSAgb3B0cy5vbigiLWUiLCAiLS1ldmFsIExJTkUiLCAi ZXZhbHVhdGUgYSBMSU5FIG9mIGNvZGUiKSB7IHxsaW5lfAotICAgIGV2YWwgbGluZSwgVE9QTEVW RUxfQklORElORywgIi1lIiwgbGluZW5vCi0gICAgbGluZW5vICs9IDEKLSAgfQotCi0gIG9wdHMu b24oIi1kIiwgIi0tZGVidWciLCAic2V0IGRlYnVnZ2luZyBmbGFncyAoc2V0ICRERUJVRyB0byB0 cnVlKSIpIHsKLSAgICAkREVCVUcgPSB0cnVlCi0gIH0KLSAgb3B0cy5vbigiLXciLCAiLS13YXJu IiwgInR1cm4gd2FybmluZ3Mgb24gZm9yIHlvdXIgc2NyaXB0IikgewotICAgICQtdyA9IHRydWUK LSAgfQotCi0gIG9wdHMub24oIi1JIiwgIi0taW5jbHVkZSBQQVRIIiwKLSAgICAgICAgICAic3Bl Y2lmeSAkTE9BRF9QQVRIIChtYXkgYmUgdXNlZCBtb3JlIHRoYW4gb25jZSkiKSB7IHxwYXRofAot ICAgICRMT0FEX1BBVEgudW5zaGlmdCgqcGF0aC5zcGxpdCgiOiIpKQotICB9Ci0KLSAgb3B0cy5v bigiLXIiLCAiLS1yZXF1aXJlIExJQlJBUlkiLAotICAgICAgICAgICJyZXF1aXJlIHRoZSBsaWJy YXJ5LCBiZWZvcmUgZXhlY3V0aW5nIHlvdXIgc2NyaXB0IikgeyB8bGlicmFyeXwKLSAgICByZXF1 aXJlIGxpYnJhcnkKLSAgfQotCi0gIG9wdHMuc2VwYXJhdG9yICIiCi0gIG9wdHMuc2VwYXJhdG9y ICJSYWNrIG9wdGlvbnM6IgotICBvcHRzLm9uKCItcyIsICItLXNlcnZlciBTRVJWRVIiLCAic2Vy dmUgdXNpbmcgU0VSVkVSICh3ZWJyaWNrL21vbmdyZWwpIikgeyB8c3wKLSAgICBzZXJ2ZXIgPSBz Ci0gIH0KLQotICBvcHRzLm9uKCItbyIsICItLWhvc3QgSE9TVCIsICJsaXN0ZW4gb24gSE9TVCAo ZGVmYXVsdDogMC4wLjAuMCkiKSB7IHxob3N0fAotICAgIG9wdGlvbnNbOkhvc3RdID0gaG9zdAot ICB9Ci0KLSAgb3B0cy5vbigiLXAiLCAiLS1wb3J0IFBPUlQiLCAidXNlIFBPUlQgKGRlZmF1bHQ6 IDkyOTIpIikgeyB8cG9ydHwKLSAgICBvcHRpb25zWzpQb3J0XSA9IHBvcnQKLSAgfQotCi0gIG9w dHMub24oIi1FIiwgIi0tZW52IEVOVklST05NRU5UIiwgInVzZSBFTlZJUk9OTUVOVCBmb3IgZGVm YXVsdHMgKGRlZmF1bHQ6IGRldmVsb3BtZW50KSIpIHsgfGV8Ci0gICAgZW52ID0gZQotICB9Ci0K LSAgb3B0cy5vbigiLUQiLCAiLS1kYWVtb25pemUiLCAicnVuIGRhZW1vbml6ZWQgaW4gdGhlIGJh Y2tncm91bmQiKSB7IHxkfAotICAgIGRhZW1vbml6ZSA9IGQgPyB0cnVlIDogZmFsc2UKLSAgfQot Ci0gIG9wdHMub24oIi1QIiwgIi0tcGlkIEZJTEUiLCAiZmlsZSB0byBzdG9yZSBQSUQgKGRlZmF1 bHQ6IHJhY2sucGlkKSIpIHsgfGZ8Ci0gICAgcGlkID0gRmlsZS5leHBhbmRfcGF0aChmKQotICB9 Ci0KLSAgb3B0cy5zZXBhcmF0b3IgIiIKLSAgb3B0cy5zZXBhcmF0b3IgIkNvbW1vbiBvcHRpb25z OiIKLQotICBvcHRzLm9uX3RhaWwoIi1oIiwgIi0taGVscCIsICJTaG93IHRoaXMgbWVzc2FnZSIp IGRvCi0gICAgcHV0cyBvcHRzCi0gICAgZXhpdAotICBlbmQKLQotICBvcHRzLm9uX3RhaWwoIi0t dmVyc2lvbiIsICJTaG93IHZlcnNpb24iKSBkbwotICAgIHB1dHMgIlJhY2sgI3tSYWNrLnZlcnNp b259IgotICAgIGV4aXQKLSAgZW5kCi0KLSAgb3B0cy5wYXJzZSEgQVJHVgotfQotCi1yZXF1aXJl ICdwcCcgIGlmICRERUJVRwotCi1jb25maWcgPSBBUkdWWzBdIHx8ICJjb25maWcucnUiCi1pZiAh RmlsZS5leGlzdD8gY29uZmlnCi0gIGFib3J0ICJjb25maWd1cmF0aW9uICN7Y29uZmlnfSBub3Qg Zm91bmQiCi1lbmQKLQotaWYgY29uZmlnID1+IC9cLnJ1JC8KLSAgY2ZnZmlsZSA9IEZpbGUucmVh ZChjb25maWcpCi0gIGlmIGNmZ2ZpbGVbL14jXFwoLiopL10KLSAgICBvcHRzLnBhcnNlISAkMS5z cGxpdCgvXHMrLykKLSAgZW5kCi0gIGNmZ2ZpbGUuc3ViISgvXl9fRU5EX19cbi4qLywgJycpCi0g IGlubmVyX2FwcCA9IGV2YWwgIlJhY2s6OkJ1aWxkZXIubmV3IHsoICIgKyBjZmdmaWxlICsgIlxu ICl9LnRvX2FwcCIsCi0gICAgICAgICAgICAgICAgICAgbmlsLCBjb25maWcKLWVsc2UKLSAgcmVx dWlyZSBjb25maWcKLSAgaW5uZXJfYXBwID0gT2JqZWN0LmNvbnN0X2dldChGaWxlLmJhc2VuYW1l KGNvbmZpZywgJy5yYicpLmNhcGl0YWxpemUpCi1lbmQKLQotdW5sZXNzIHNlcnZlciA9IFJhY2s6 OkhhbmRsZXIuZ2V0KHNlcnZlcikKLSAgIyBHdWVzcy4KLSAgaWYgRU5WLmluY2x1ZGU/KCJQSFBf RkNHSV9DSElMRFJFTiIpCi0gICAgc2VydmVyID0gUmFjazo6SGFuZGxlcjo6RmFzdENHSQotCi0g ICAgIyBXZSBhbHJlYWR5IHNwZWFrIEZhc3RDR0kKLSAgICBvcHRpb25zLmRlbGV0ZSA6RmlsZQot ICAgIG9wdGlvbnMuZGVsZXRlIDpQb3J0Ci0gIGVsc2lmIEVOVi5pbmNsdWRlPygiUkVRVUVTVF9N RVRIT0QiKQotICAgIHNlcnZlciA9IFJhY2s6OkhhbmRsZXI6OkNHSQotICBlbHNlCi0gICAgYmVn aW4KLSAgICAgIHNlcnZlciA9IFJhY2s6OkhhbmRsZXI6Ok1vbmdyZWwKLSAgICByZXNjdWUgTG9h ZEVycm9yID0+IGUKLSAgICAgIHNlcnZlciA9IFJhY2s6OkhhbmRsZXI6OldFQnJpY2sKLSAgICBl bmQKLSAgZW5kCi1lbmQKLQotcCBzZXJ2ZXIgIGlmICRERUJVRwotCi1jYXNlIGVudgotd2hlbiAi ZGV2ZWxvcG1lbnQiCi0gIGFwcCA9IFJhY2s6OkJ1aWxkZXIubmV3IHsKLSAgICB1c2UgUmFjazo6 Q29tbW9uTG9nZ2VyLCAkc3RkZXJyICB1bmxlc3Mgc2VydmVyLm5hbWUgPX4gL0NHSS8KLSAgICB1 c2UgUmFjazo6U2hvd0V4Y2VwdGlvbnMKLSAgICB1c2UgUmFjazo6TGludAotICAgIHJ1biBpbm5l cl9hcHAKLSAgfS50b19hcHAKLQotd2hlbiAiZGVwbG95bWVudCIKLSAgYXBwID0gUmFjazo6QnVp bGRlci5uZXcgewotICAgIHVzZSBSYWNrOjpDb21tb25Mb2dnZXIsICRzdGRlcnIgIHVubGVzcyBz ZXJ2ZXIubmFtZSA9fiAvQ0dJLwotICAgIHJ1biBpbm5lcl9hcHAKLSAgfS50b19hcHAKLQotd2hl biAibm9uZSIKLSAgYXBwID0gaW5uZXJfYXBwCi0KLWVuZAotCi1pZiAkREVCVUcKLSAgcHAgYXBw Ci0gIHBwIGlubmVyX2FwcAotZW5kCi0KLWlmIGRhZW1vbml6ZQotICBpZiBSVUJZX1ZFUlNJT04g PCAiMS45IgotICAgIGV4aXQgaWYgZm9yawotICAgIFByb2Nlc3Muc2V0c2lkCi0gICAgZXhpdCBp ZiBmb3JrCi0gICAgRGlyLmNoZGlyICIvIgotICAgIEZpbGUudW1hc2sgMDAwMAotICAgIFNURElO LnJlb3BlbiAiL2Rldi9udWxsIgotICAgIFNURE9VVC5yZW9wZW4gIi9kZXYvbnVsbCIsICJhIgot ICAgIFNUREVSUi5yZW9wZW4gIi9kZXYvbnVsbCIsICJhIgotICBlbHNlCi0gICAgUHJvY2Vzcy5k YWVtb24KLSAgZW5kCi0KLSAgaWYgcGlkCi0gICAgRmlsZS5vcGVuKHBpZCwgJ3cnKXsgfGZ8IGYu d3JpdGUoIiN7UHJvY2Vzcy5waWR9IikgfQotICAgIGF0X2V4aXQgeyBGaWxlLmRlbGV0ZShwaWQp IGlmIEZpbGUuZXhpc3Q/KHBpZCkgfQotICBlbmQKLWVuZAotCi1zZXJ2ZXIucnVuIGFwcCwgb3B0 aW9ucworcmVxdWlyZSAicmFjayIKK1JhY2s6OlNlcnZlci5zdGFydApcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9yYWNrLnJiIGIvbGliL3JhY2sucmIKaW5kZXgg OGQwODE1Yi4uNzAzNjQ5YyAxMDA2NDQKLS0tIGEvbGliL3JhY2sucmIKKysrIGIvbGliL3JhY2su cmIKQEAgLTQyLDYgKzQyLDcgQEAgbW9kdWxlIFJhY2sKICAgYXV0b2xvYWQgOk1pbWUsICJyYWNr L21pbWUiCiAgIGF1dG9sb2FkIDpSZWN1cnNpdmUsICJyYWNrL3JlY3Vyc2l2ZSIKICAgYXV0b2xv YWQgOlJlbG9hZGVyLCAicmFjay9yZWxvYWRlciIKKyAgYXV0b2xvYWQgOlNlcnZlciwgInJhY2sv c2VydmVyIgogICBhdXRvbG9hZCA6U2hvd0V4Y2VwdGlvbnMsICJyYWNrL3Nob3dleGNlcHRpb25z IgogICBhdXRvbG9hZCA6U2hvd1N0YXR1cywgInJhY2svc2hvd3N0YXR1cyIKICAgYXV0b2xvYWQg OlN0YXRpYywgInJhY2svc3RhdGljIgpkaWZmIC0tZ2l0IGEvbGliL3JhY2svYnVpbGRlci5yYiBi L2xpYi9yYWNrL2J1aWxkZXIucmIKaW5kZXggMjk1MjM1ZS4uZjc2OWI1ZiAxMDA2NDQKLS0tIGEv bGliL3JhY2svYnVpbGRlci5yYgorKysgYi9saWIvcmFjay9idWlsZGVyLnJiCkBAIC0yNCw2ICsy NCwyMSBAQCBtb2R1bGUgUmFjawogICAjIFlvdSBjYW4gdXNlICttYXArIHRvIGNvbnN0cnVjdCBh IFJhY2s6OlVSTE1hcCBpbiBhIGNvbnZlbmllbnQgd2F5LgogCiAgIGNsYXNzIEJ1aWxkZXIKKyAg ICBkZWYgc2VsZi5wYXJzZV9maWxlKGNvbmZpZywgb3B0cyA9IG5pbCkKKyAgICAgIGlmIGNvbmZp ZyA9fiAvXC5ydSQvCisgICAgICAgIGNmZ2ZpbGUgPSA6OkZpbGUucmVhZChjb25maWcpCisgICAg ICAgIGlmIGNmZ2ZpbGVbL14jXFwoLiopL10gJiYgb3B0cworICAgICAgICAgIG9wdHMucGFyc2Uh ICQxLnNwbGl0KC9ccysvKQorICAgICAgICBlbmQKKyAgICAgICAgY2ZnZmlsZS5zdWIhKC9eX19F TkRfX1xuLiovLCAnJykKKyAgICAgICAgZXZhbCAiUmFjazo6QnVpbGRlci5uZXcgeyggIiArIGNm Z2ZpbGUgKyAiXG4gKX0udG9fYXBwIiwKKyAgICAgICAgICBUT1BMRVZFTF9CSU5ESU5HLCBjb25m aWcKKyAgICAgIGVsc2UKKyAgICAgICAgcmVxdWlyZSBjb25maWcKKyAgICAgICAgT2JqZWN0LmNv bnN0X2dldCg6OkZpbGUuYmFzZW5hbWUoY29uZmlnLCAnLnJiJykuY2FwaXRhbGl6ZSkKKyAgICAg IGVuZAorICAgIGVuZAorCiAgICAgZGVmIGluaXRpYWxpemUoJmJsb2NrKQogICAgICAgQGlucyA9 IFtdCiAgICAgICBpbnN0YW5jZV9ldmFsKCZibG9jaykgaWYgYmxvY2tfZ2l2ZW4/CmRpZmYgLS1n aXQgYS9saWIvcmFjay9oYW5kbGVyLnJiIGIvbGliL3JhY2svaGFuZGxlci5yYgppbmRleCA1NjI0 YTFlLi4zYzA5ODgzIDEwMDY0NAotLS0gYS9saWIvcmFjay9oYW5kbGVyLnJiCisrKyBiL2xpYi9y YWNrL2hhbmRsZXIucmIKQEAgLTIyLDYgKzIyLDI1IEBAIG1vZHVsZSBSYWNrCiAgICAgICBlbmQK ICAgICBlbmQKIAorICAgIGRlZiBzZWxmLmRlZmF1bHQob3B0aW9ucyA9IHt9KQorICAgICAgIyBH dWVzcy4KKyAgICAgIGlmIEVOVi5pbmNsdWRlPygiUEhQX0ZDR0lfQ0hJTERSRU4iKQorICAgICAg ICAjIFdlIGFscmVhZHkgc3BlYWsgRmFzdENHSQorICAgICAgICBvcHRpb25zLmRlbGV0ZSA6Rmls ZQorICAgICAgICBvcHRpb25zLmRlbGV0ZSA6UG9ydAorCisgICAgICAgIFJhY2s6OkhhbmRsZXI6 OkZhc3RDR0kKKyAgICAgIGVsc2lmIEVOVi5pbmNsdWRlPygiUkVRVUVTVF9NRVRIT0QiKQorICAg ICAgICBSYWNrOjpIYW5kbGVyOjpDR0kKKyAgICAgIGVsc2UKKyAgICAgICAgYmVnaW4KKyAgICAg ICAgICBSYWNrOjpIYW5kbGVyOjpNb25ncmVsCisgICAgICAgIHJlc2N1ZSBMb2FkRXJyb3IgPT4g ZQorICAgICAgICAgIFJhY2s6OkhhbmRsZXI6OldFQnJpY2sKKyAgICAgICAgZW5kCisgICAgICBl bmQKKyAgICBlbmQKKwogICAgICMgVHJhbnNmb3JtcyBzZXJ2ZXItbmFtZSBjb25zdGFudHMgdG8g dGhlaXIgY2Fub25pY2FsIGZvcm0gYXMgZmlsZW5hbWVzLAogICAgICMgdGhlbiB0cmllcyB0byBy ZXF1aXJlIHRoZW0gYnV0IHNpbGVuY2VzIHRoZSBMb2FkRXJyb3IgaWYgbm90IGZvdW5kCiAgICAg IwpkaWZmIC0tZ2l0IGEvbGliL3JhY2svc2VydmVyLnJiIGIvbGliL3JhY2svc2VydmVyLnJiCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzBiMjgKLS0tIC9kZXYvbnVsbAor KysgYi9saWIvcmFjay9zZXJ2ZXIucmIKQEAgLTAsMCArMSwxOTAgQEAKK3JlcXVpcmUgJ29wdHBh cnNlJworCittb2R1bGUgUmFjaworICBjbGFzcyBTZXJ2ZXIKKyAgICBkZWYgc2VsZi5zdGFydAor ICAgICAgbmV3LnN0YXJ0CisgICAgZW5kCisKKyAgICBhdHRyX2FjY2Vzc29yIDpvcHRpb25zCisK KyAgICBkZWYgaW5pdGlhbGl6ZShvcHRpb25zID0gbmlsKQorICAgICAgQG9wdGlvbnMgPSBvcHRp b25zCisgICAgZW5kCisKKyAgICBkZWYgb3B0aW9ucworICAgICAgQG9wdGlvbnMgfHw9IGJlZ2lu CisgICAgICAgIHBhcnNlX29wdGlvbnMoQVJHVikKKyAgICAgIGVuZAorICAgIGVuZAorCisgICAg ZGVmIGRlZmF1bHRfb3B0aW9ucworICAgICAgeworICAgICAgICA6ZW52aXJvbm1lbnQgPT4gImRl dmVsb3BtZW50IiwKKyAgICAgICAgOnBpZCA9PiA6OkZpbGUuZXhwYW5kX3BhdGgoInJhY2sucGlk IiksCisgICAgICAgIDpQb3J0ID0+IDkyOTIsCisgICAgICAgIDpIb3N0ID0+ICIwLjAuMC4wIiwK KyAgICAgICAgOkFjY2Vzc0xvZyA9PiBbXQorICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIGFw cAorICAgICAgQGFwcCB8fD0gYmVnaW4KKyAgICAgICAgaWYgITo6RmlsZS5leGlzdD8gb3B0aW9u c1s6cmFja19maWxlXQorICAgICAgICAgIGFib3J0ICJjb25maWd1cmF0aW9uICN7b3B0aW9uc1s6 cmFja19maWxlXX0gbm90IGZvdW5kIgorICAgICAgICBlbmQKKworICAgICAgICBSYWNrOjpCdWls ZGVyLnBhcnNlX2ZpbGUob3B0aW9uc1s6cmFja19maWxlXSwgb3B0X3BhcnNlcikKKyAgICAgIGVu ZAorICAgIGVuZAorCisgICAgZGVmIHNlbGYubWlkZGxld2FyZQorICAgICAgQG1pZGRsZXdhcmUg fHw9IGJlZ2luCisgICAgICAgIG0gPSBIYXNoLm5ldyB7fGgsa3wgaFtrXSA9IFtdfQorICAgICAg ICBtWyJkZXBsb3ltZW50Il0uY29uY2F0ICBbbGFtYmRhIHt8c2VydmVyfCBzZXJ2ZXIuc2VydmVy ID1+IC9DR0kvID8gbmlsIDogW1JhY2s6OkNvbW1vbkxvZ2dlciwgJHN0ZGVycl0gfV0KKyAgICAg ICAgbVsiZGV2ZWxvcG1lbnQiXS5jb25jYXQgbVsiZGVwbG95bWVudCJdICsgW1tSYWNrOjpTaG93 RXhjZXB0aW9uc10sIFtSYWNrOjpMaW50XV0KKyAgICAgICAgbQorICAgICAgZW5kCisgICAgZW5k CisKKyAgICBkZWYgbWlkZGxld2FyZQorICAgICAgc2VsZi5jbGFzcy5taWRkbGV3YXJlCisgICAg ZW5kCisKKyAgICBkZWYgc3RhcnQKKyAgICAgIGlmICRERUJVRworICAgICAgICByZXF1aXJlICdw cCcKKyAgICAgICAgcCBvcHRpb25zWzpzZXJ2ZXJdCisgICAgICAgIHBwIHdyYXBwZWRfYXBwCisg ICAgICAgIHBwIGFwcAorICAgICAgZW5kCisKKyAgICAgIGRhZW1vbml6ZV9hcHAgaWYgb3B0aW9u c1s6ZGFlbW9uaXplXQorICAgICAgd3JpdGVfcGlkIGlmIG9wdGlvbnNbOnBpZF0KKyAgICAgIHNl cnZlci5ydW4gd3JhcHBlZF9hcHAsIG9wdGlvbnMKKyAgICBlbmQKKworICAgIGRlZiBzZXJ2ZXIK KyAgICAgIEBfc2VydmVyIHx8PSBSYWNrOjpIYW5kbGVyLmdldChvcHRpb25zWzpzZXJ2ZXJdKSB8 fCBSYWNrOjpIYW5kbGVyLmRlZmF1bHQKKyAgICBlbmQKKworICBwcml2YXRlCisKKyAgICBkZWYg cGFyc2Vfb3B0aW9ucyhhcmdzKQorICAgICAgQG9wdGlvbnMgPSBkZWZhdWx0X29wdGlvbnMKKwor ICAgICAgIyBEb24ndCBldmFsdWF0ZSBDR0kgSVNJTkRFWCBwYXJhbWV0ZXJzLgorICAgICAgIyBo dHRwOi8vaG9vaG9vLm5jc2EudWl1Yy5lZHUvY2dpL2NsLmh0bWwKKyAgICAgIGFyZ3MuY2xlYXIg aWYgRU5WLmluY2x1ZGU/KCJSRVFVRVNUX01FVEhPRCIpCisKKyAgICAgIG9wdF9wYXJzZXIucGFy c2UhIGFyZ3MKKyAgICAgIEBvcHRpb25zWzpyYWNrX2ZpbGVdID0gYXJncy5sYXN0IHx8IDo6Rmls ZS5leHBhbmRfcGF0aCgiY29uZmlnLnJ1IikKKyAgICAgIEBvcHRpb25zCisgICAgZW5kCisKKyAg ICBkZWYgb3B0X3BhcnNlcgorICAgICAgQG9wdF9wYXJzZXIgfHw9IE9wdGlvblBhcnNlci5uZXco IiIsIDI0LCAnICAnKSBkbyB8b3B0c3wKKyAgICAgICAgb3B0cy5iYW5uZXIgPSAiVXNhZ2U6IHJh Y2t1cCBbcnVieSBvcHRpb25zXSBbcmFjayBvcHRpb25zXSBbcmFja3VwIGNvbmZpZ10iCisKKyAg ICAgICAgb3B0cy5zZXBhcmF0b3IgIiIKKyAgICAgICAgb3B0cy5zZXBhcmF0b3IgIlJ1Ynkgb3B0 aW9uczoiCisKKyAgICAgICAgbGluZW5vID0gMQorICAgICAgICBvcHRzLm9uKCItZSIsICItLWV2 YWwgTElORSIsICJldmFsdWF0ZSBhIExJTkUgb2YgY29kZSIpIHsgfGxpbmV8CisgICAgICAgICAg ZXZhbCBsaW5lLCBUT1BMRVZFTF9CSU5ESU5HLCAiLWUiLCBsaW5lbm8KKyAgICAgICAgICBsaW5l bm8gKz0gMQorICAgICAgICB9CisKKyAgICAgICAgb3B0cy5vbigiLWQiLCAiLS1kZWJ1ZyIsICJz ZXQgZGVidWdnaW5nIGZsYWdzIChzZXQgJERFQlVHIHRvIHRydWUpIikgeworICAgICAgICAgICRE RUJVRyA9IHRydWUKKyAgICAgICAgfQorICAgICAgICBvcHRzLm9uKCItdyIsICItLXdhcm4iLCAi dHVybiB3YXJuaW5ncyBvbiBmb3IgeW91ciBzY3JpcHQiKSB7CisgICAgICAgICAgJC13ID0gdHJ1 ZQorICAgICAgICB9CisKKyAgICAgICAgb3B0cy5vbigiLUkiLCAiLS1pbmNsdWRlIFBBVEgiLAor ICAgICAgICAgICAgICAgICJzcGVjaWZ5ICRMT0FEX1BBVEggKG1heSBiZSB1c2VkIG1vcmUgdGhh biBvbmNlKSIpIHsgfHBhdGh8CisgICAgICAgICAgJExPQURfUEFUSC51bnNoaWZ0KCpwYXRoLnNw bGl0KCI6IikpCisgICAgICAgIH0KKworICAgICAgICBvcHRzLm9uKCItciIsICItLXJlcXVpcmUg TElCUkFSWSIsCisgICAgICAgICAgICAgICAgInJlcXVpcmUgdGhlIGxpYnJhcnksIGJlZm9yZSBl eGVjdXRpbmcgeW91ciBzY3JpcHQiKSB7IHxsaWJyYXJ5fAorICAgICAgICAgIHJlcXVpcmUgbGli cmFyeQorICAgICAgICB9CisKKyAgICAgICAgb3B0cy5zZXBhcmF0b3IgIiIKKyAgICAgICAgb3B0 cy5zZXBhcmF0b3IgIlJhY2sgb3B0aW9uczoiCisgICAgICAgIG9wdHMub24oIi1zIiwgIi0tc2Vy dmVyIFNFUlZFUiIsICJzZXJ2ZSB1c2luZyBTRVJWRVIgKHdlYnJpY2svbW9uZ3JlbCkiKSB7IHxz fAorICAgICAgICAgIEBvcHRpb25zWzpzZXJ2ZXJdID0gcworICAgICAgICB9CisKKyAgICAgICAg b3B0cy5vbigiLW8iLCAiLS1ob3N0IEhPU1QiLCAibGlzdGVuIG9uIEhPU1QgKGRlZmF1bHQ6IDAu MC4wLjApIikgeyB8aG9zdHwKKyAgICAgICAgICBAb3B0aW9uc1s6SG9zdF0gPSBob3N0CisgICAg ICAgIH0KKworICAgICAgICBvcHRzLm9uKCItcCIsICItLXBvcnQgUE9SVCIsICJ1c2UgUE9SVCAo ZGVmYXVsdDogOTI5MikiKSB7IHxwb3J0fAorICAgICAgICAgIEBvcHRpb25zWzpQb3J0XSA9IHBv cnQKKyAgICAgICAgfQorCisgICAgICAgIG9wdHMub24oIi1FIiwgIi0tZW52IEVOVklST05NRU5U IiwgInVzZSBFTlZJUk9OTUVOVCBmb3IgZGVmYXVsdHMgKGRlZmF1bHQ6IGRldmVsb3BtZW50KSIp IHsgfGV8CisgICAgICAgICAgQG9wdGlvbnNbOmVudmlyb25tZW50XSA9IGUKKyAgICAgICAgfQor CisgICAgICAgIG9wdHMub24oIi1EIiwgIi0tZGFlbW9uaXplIiwgInJ1biBkYWVtb25pemVkIGlu IHRoZSBiYWNrZ3JvdW5kIikgeyB8ZHwKKyAgICAgICAgICBAb3B0aW9uc1s6ZGFlbW9uaXplXSA9 IGQgPyB0cnVlIDogZmFsc2UKKyAgICAgICAgfQorCisgICAgICAgIG9wdHMub24oIi1QIiwgIi0t cGlkIEZJTEUiLCAiZmlsZSB0byBzdG9yZSBQSUQgKGRlZmF1bHQ6IHJhY2sucGlkKSIpIHsgfGZ8 CisgICAgICAgICAgQG9wdGlvbnNbOnBpZF0gPSA6OkZpbGUuZXhwYW5kX3BhdGgoZikKKyAgICAg ICAgfQorCisgICAgICAgIG9wdHMuc2VwYXJhdG9yICIiCisgICAgICAgIG9wdHMuc2VwYXJhdG9y ICJDb21tb24gb3B0aW9uczoiCisKKyAgICAgICAgb3B0cy5vbl90YWlsKCItaCIsICItLWhlbHAi LCAiU2hvdyB0aGlzIG1lc3NhZ2UiKSBkbworICAgICAgICAgIHB1dHMgb3B0cworICAgICAgICAg IGV4aXQKKyAgICAgICAgZW5kCisKKyAgICAgICAgb3B0cy5vbl90YWlsKCItLXZlcnNpb24iLCAi U2hvdyB2ZXJzaW9uIikgZG8KKyAgICAgICAgICBwdXRzICJSYWNrICN7UmFjay52ZXJzaW9ufSIK KyAgICAgICAgICBleGl0CisgICAgICAgIGVuZAorICAgICAgZW5kCisgICAgZW5kCisKKyAgICBk ZWYgYnVpbGRfYXBwKGFwcCkKKyAgICAgIG1pZGRsZXdhcmVbb3B0aW9uc1s6ZW52aXJvbm1lbnRd XS5yZXZlcnNlX2VhY2ggZG8gfG1pZGRsZXdhcmV8CisgICAgICAgIG1pZGRsZXdhcmUgPSBtaWRk bGV3YXJlLmNhbGwoc2VsZikgaWYgbWlkZGxld2FyZS5yZXNwb25kX3RvPyg6Y2FsbCkKKyAgICAg ICAgbmV4dCB1bmxlc3MgbWlkZGxld2FyZQorICAgICAgICBrbGFzcyA9IG1pZGRsZXdhcmUuc2hp ZnQKKyAgICAgICAgYXBwID0ga2xhc3MubmV3KGFwcCwgKm1pZGRsZXdhcmUpCisgICAgICBlbmQK KyAgICAgIGFwcAorICAgIGVuZAorCisgICAgZGVmIHdyYXBwZWRfYXBwCisgICAgICBAd3JhcHBl ZF9hcHAgfHw9IGJ1aWxkX2FwcCBhcHAKKyAgICBlbmQKKworICAgIGRlZiBkYWVtb25pemVfYXBw CisgICAgICBpZiBSVUJZX1ZFUlNJT04gPCAiMS45IgorICAgICAgICBleGl0IGlmIGZvcmsKKyAg ICAgICAgUHJvY2Vzcy5zZXRzaWQKKyAgICAgICAgZXhpdCBpZiBmb3JrCisgICAgICAgIERpci5j aGRpciAiLyIKKyAgICAgICAgOjpGaWxlLnVtYXNrIDAwMDAKKyAgICAgICAgU1RESU4ucmVvcGVu ICIvZGV2L251bGwiCisgICAgICAgIFNURE9VVC5yZW9wZW4gIi9kZXYvbnVsbCIsICJhIgorICAg ICAgICBTVERFUlIucmVvcGVuICIvZGV2L251bGwiLCAiYSIKKyAgICAgIGVsc2UKKyAgICAgICAg UHJvY2Vzcy5kYWVtb24KKyAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIHdyaXRlX3BpZAor ICAgICAgOjpGaWxlLm9wZW4ob3B0aW9uc1s6cGlkXSwgJ3cnKXsgfGZ8IGYud3JpdGUoIiN7UHJv Y2Vzcy5waWR9IikgfQorICAgICAgYXRfZXhpdCB7IDo6RmlsZS5kZWxldGUob3B0aW9uc1s6cGlk XSkgaWYgOjpGaWxlLmV4aXN0PyhvcHRpb25zWzpwaWRdKSB9CisgICAgZW5kCisgIGVuZAorZW5k ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdC9yYWNrdXAvY29u ZmlnLnJ1IGIvdGVzdC9yYWNrdXAvY29uZmlnLnJ1CmluZGV4IDI0OTBjNmUuLjNjYTUzMDggMTAw NjQ0Ci0tLSBhL3Rlc3QvcmFja3VwL2NvbmZpZy5ydQorKysgYi90ZXN0L3JhY2t1cC9jb25maWcu cnUKQEAgLTEsNiArMSw2IEBACiByZXF1aXJlICIje0ZpbGUuZGlybmFtZShfX0ZJTEVfXyl9Ly4u L3Rlc3RyZXF1ZXN0IgogCi0kc3RkZXJyID0gU3RyaW5nSU8ubmV3Ciskc3RkZXJyID0gRmlsZS5v cGVuKCIje0ZpbGUuZGlybmFtZShfX0ZJTEVfXyl9L2xvZ19vdXRwdXQiLCAidyIpCiAKIGNsYXNz IEVudk1pZGRsZXdhcmUKICAgZGVmIGluaXRpYWxpemUoYXBwKQpAQCAtOCwxNSArOCwyMSBAQCBj bGFzcyBFbnZNaWRkbGV3YXJlCiAgIGVuZAogICAKICAgZGVmIGNhbGwoZW52KQorICAgICMgcHJv dmlkZXMgYSB3YXkgdG8gdGVzdCB0aGF0IGxpbnQgaXMgcHJlc2VudAogICAgIGlmIGVudlsiUEFU SF9JTkZPIl0gPT0gIi9icm9rZW5fbGludCIKICAgICAgIHJldHVybiBbMjAwLCB7fSwgWyJCcm9r ZW4gTGludCJdXQorICAgICMgcHJvdmlkZXMgYSB3YXkgdG8ga2lsbCB0aGUgcHJvY2VzcyB3aXRo b3V0IGtub3dpbmcgdGhlIHBpZAorICAgIGVsc2lmIGVudlsiUEFUSF9JTkZPIl0gPT0gIi9kaWUi CisgICAgICBleGl0IQogICAgIGVuZAogCiAgICAgZW52WyJ0ZXN0LiRERUJVRyJdICAgICAgPSAk REVCVUcKICAgICBlbnZbInRlc3QuJEVWQUwiXSAgICAgICA9IEJVS0tJVCBpZiBkZWZpbmVkPyhC VUtLSVQpCiAgICAgZW52WyJ0ZXN0LiRWRVJCT1NFIl0gICAgPSAkVkVSQk9TRQogICAgIGVudlsi dGVzdC4kTE9BRF9QQVRIIl0gID0gJExPQURfUEFUSAorICAgIGVudlsidGVzdC5zdGRlcnIiXSAg ICAgID0gRmlsZS5leHBhbmRfcGF0aCgkc3RkZXJyLnBhdGgpCiAgICAgZW52WyJ0ZXN0LlBpbmci XSAgICAgICAgPSBkZWZpbmVkPyhQaW5nKQorICAgIGVudlsidGVzdC5waWQiXSAgICAgICAgID0g UHJvY2Vzcy5waWQKICAgICBAYXBwLmNhbGwoZW52KQogICBlbmQKIGVuZApkaWZmIC0tZ2l0IGEv dGVzdC9zcGVjX3JhY2t1cC5yYiBiL3Rlc3Qvc3BlY19yYWNrdXAucmIKaW5kZXggYzNlNDZhNy4u MWMwYTAwZCAxMDA2NDQKLS0tIGEvdGVzdC9zcGVjX3JhY2t1cC5yYgorKysgYi90ZXN0L3NwZWNf cmFja3VwLnJiCkBAIC0xLDUgKzEsNSBAQAogcmVxdWlyZSAndGVzdC9zcGVjJwotcmVxdWlyZSAn cmFjay9yYWNrdXAnCityZXF1aXJlICdyYWNrL3NlcnZlcicKIHJlcXVpcmUgJ3Rlc3RyZXF1ZXN0 JwogcmVxdWlyZSAnb3BlbjMnCiAKQEAgLTE2LDcgKzE2LDcgQEAgY29udGV4dCAicmFja3VwIiBk bwogICAgIEBwb3J0ID0gb3B0aW9uc1s6cG9ydF0gfHwgOTI5MgogCiAgICAgRGlyLmNoZGlyKCIj e3Jvb3R9L3Rlc3QvcmFja3VwIikgZG8KLSAgICAgIEByYWNrdXAgPSBJTy5wb3BlbigiI3tHZW0u cnVieX0gLVMgI3tyYWNrdXB9ICN7ZmxhZ3N9IikKKyAgICAgIEBpbiwgQHJhY2t1cCwgQGVyciA9 IE9wZW4zLnBvcGVuMygiI3tHZW0ucnVieX0gLVMgI3tyYWNrdXB9ICN7ZmxhZ3N9IikKICAgICBl bmQKIAogICAgIHJldHVybiBpZiBvcHRpb25zWzpwb3J0XSA9PSBmYWxzZQpAQCAtMzUsMTIgKzM1 LDE0IEBAIGNvbnRleHQgInJhY2t1cCIgZG8KICAgZW5kCiAKICAgYWZ0ZXIgZG8KLSAgICBQcm9j ZXNzLmtpbGwoOSwgQHJhY2t1cC5waWQpIGlmIEByYWNrdXAKKyAgICAjIFRoaXMgZG9lc24ndCBh Y3R1YWxseSByZXR1cm4gYSByZXNwb25zZSwgc28gd2UgcmVzY3VlCisgICAgR0VUICIvZGllIiBy ZXNjdWUgbmlsCiAKICAgICBEaXJbIiN7cm9vdH0vKiovKi5waWQiXS5lYWNoIGRvIHxmaWxlfAot ICAgICAgUHJvY2Vzcy5raWxsKDksIEZpbGUucmVhZChmaWxlKS50b19pKQogICAgICAgRmlsZS5k ZWxldGUoZmlsZSkKICAgICBlbmQKKworICAgIEZpbGUuZGVsZXRlKCIje3Jvb3R9L2xvZ19vdXRw dXQiKSBpZiBGaWxlLmV4aXN0PygiI3tyb290fS9sb2dfb3V0cHV0IikKICAgZW5kCiAKICAgc3Bl Y2lmeSAicmFja3VwIiBkbwpAQCAtMTA0LDEwICsxMDYsMTUgQEAgY29udGV4dCAicmFja3VwIiBk bwogICAgIEByYWNrdXAuc2hvdWxkLmJlLmVvZj8KICAgZW5kCiAKLSAgc3BlY2lmeSAicmFja3Vw IC0tcGlkIiBkbworICBzcGVjaWZ5ICJyYWNrdXAgLS1kYWVtb25pemUgLS1waWQiIGRvCiAgICAg cnVuX3JhY2t1cCAley0tZGFlbW9uaXplIC0tcGlkIHRlc3RpbmcucGlkfQotICAgIHN0YXR1cy5z aG91bGQuYmUgMjAwCiAgICAgQHJhY2t1cC5zaG91bGQuYmUuZW9mPworICAgIEZpbGUucmVhZCgi I3tyb290fS90ZXN0L3JhY2t1cC90ZXN0aW5nLnBpZCIpLnNob3VsZC5lcXVhbCByZXNwb25zZVsi dGVzdC5waWQiXS50b19zCisgIGVuZAorCisgIHNwZWNpZnkgInJhY2t1cCAtLXBpZCIgZG8KKyAg ICBydW5fcmFja3VwICV7LS1waWQgdGVzdGluZy5waWR9CisgICAgc3RhdHVzLnNob3VsZC5iZSAy MDAKICAgICBEaXJbIiN7cm9vdH0vKiovdGVzdGluZy5waWQiXS5zaG91bGQubm90LmJlLmVtcHR5 PwogICBlbmQKIApAQCAtMTIyLDExICsxMjksMzAgQEAgY29udGV4dCAicmFja3VwIiBkbwogICAg IHN0YXR1cy5zaG91bGQuYmUgNTAwCiAgIGVuZAogCi0gIHNwZWNpZnkgInJhY2t1cCAtLWVudiIg ZG8KKyAgc3BlY2lmeSAicmFja3VwIC0tZW52IGRlcGxveW1lbnQgZG9lcyBub3QgaW5jbHVkZSBs aW50IiBkbwogICAgIHJ1bl9yYWNrdXAgJXstLWVudiBkZXBsb3ltZW50fQogICAgIEdFVCgiL2Jy b2tlbl9saW50IikKICAgICBzdGF0dXMuc2hvdWxkLmJlIDIwMAogICBlbmQKKworICBzcGVjaWZ5 ICJyYWNrdXAgLS1lbnYgbm9uZSBkb2VzIG5vdCBpbmNsdWRlIGxpbnQiIGRvCisgICAgcnVuX3Jh Y2t1cCAley0tZW52IG5vbmV9CisgICAgR0VUKCIvYnJva2VuX2xpbnQiKQorICAgIHN0YXR1cy5z aG91bGQuYmUgMjAwCisgIGVuZAorCisgIHNwZWNpZnkgInJhY2t1cCAtLWVudiBkZXBsb3ltZW50 IGRvZXMgbG9nIiBkbworICAgIHJ1bl9yYWNrdXAgJXstLWVudiBkZXBsb3ltZW50fQorICAgIGxv ZyA9IEZpbGUucmVhZChyZXNwb25zZVsidGVzdC5zdGRlcnIiXSkKKyAgICBsb2cuc2hvdWxkLmJl LmVtcHR5PworICBlbmQKKworICBzcGVjaWZ5ICJyYWNrdXAgLS1lbnYgbm9uZSBkb2VzIG5vdCBs b2ciIGRvCisgICAgcnVuX3JhY2t1cCAley0tZW52IG5vbmV9CisgICAgR0VUKCIvIikKKyAgICBs b2cgPSBGaWxlLnJlYWQocmVzcG9uc2VbInRlc3Quc3RkZXJyIl0pCisgICAgbG9nLnNob3VsZC5i ZS5lbXB0eT8KKyAgZW5kCiBlbmQKIHJlc2N1ZSBMb2FkRXJyb3IKICAgJHN0ZGVyci5wdXRzICJT a2lwcGluZyByYWNrdXAgLS1zZXJ2ZXIgdGVzdHMgKG1vbmdyZWwgaXMgcmVxdWlyZWQpLiBgZ2Vt IGluc3RhbGwgdGhpbmAgYW5kIHRyeSBhZ2Fpbi4iCg== --005045017f2c62ebd10478d6ec0f--