Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bLP6h-0006ML-H5 for pgadmin-hackers@arkaria.postgresql.org; Fri, 08 Jul 2016 06:17:48 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1bLP6g-0001hy-PM for pgadmin-hackers@arkaria.postgresql.org; Fri, 08 Jul 2016 06:17:46 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1bLP6S-0001U7-Dc for pgadmin-hackers@postgresql.org; Fri, 08 Jul 2016 06:17:32 +0000 Received: from mail-yw0-x22e.google.com ([2607:f8b0:4002:c05::22e]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1bLP6M-0006sk-Sb for pgadmin-hackers@postgresql.org; Fri, 08 Jul 2016 06:17:31 +0000 Received: by mail-yw0-x22e.google.com with SMTP id i12so32272599ywa.1 for ; Thu, 07 Jul 2016 23:17:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=OvHjREr1yocccbEmpFSKTiJ1obtvdd1kRAsbfRfKMSI=; b=qGnMn5nHP/ZzaQTrUupCpM8HkBV0XpeUdn5PkunUamUeZk5ms1JPBZ/Tb9cVeayCOx cP4/ep4jLe6D+tRiQjBWj7J++gmid49EaeiOZq0K/zlFh5oHVN74HFDrluA279TM8oHw 8M/QEEs4YAel26eO7+GyunX/SA2PH+JwRDSUthHR5CymERp51eMPEtajiMXQsDmXMeaE WuMyw5jtpv3ESXsrNvO21tkMGSmHETQASmE9PyICOgg3BwP9WwXqpZvCcJEw6Ae4k/wT NvN1ZHXd1nUD9OoiR2bZg3Oa/iZEXPUP5bC2fyEx3V3rQoFH1ITepLIXwXu4IfwPsMuS U1pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=OvHjREr1yocccbEmpFSKTiJ1obtvdd1kRAsbfRfKMSI=; b=PzBBoCZW83b10dFLzzvTQnbhS0Iftj7RmA5SARMXN/lKw6bVFLf2XYTJvET+Bq6YDa cOAyXg2rSIEyNHFLpmSxorkq3SM6WUxvOB3DpFZeqeaYn8a2hIp0P4qAVmrZ1BUvPW1a 6km8i5ut0H799B2MMTezgoVyy8y2l+Jgp+Eh86g5UCVA3HgTwjezwnmGIIgYxUfU2Mk6 f1HMBynU4ThOODBGIZ9rD6FjnW4bFCjrMVHfQf7izTEdJGrtnT4tvElVnSsJwi/3RFtq g0iU2/lw0wgfrV4iSUBK0R2Ub2jy2qvaXRNTquPlDfrLzpE9eOlRI3SotBmGD3ejIAsu uRUQ== X-Gm-Message-State: ALyK8tIyGhMk5b9eNzxSgg45OPIpjPpzqrmQrNI5lfOuvKr5OqLvKxHo01q80ch7oAD/FJvFNgP+aq2B2QLyorW6 X-Received: by 10.129.132.132 with SMTP id u126mr3135973ywf.255.1467958644780; Thu, 07 Jul 2016 23:17:24 -0700 (PDT) MIME-Version: 1.0 Received: by 10.37.57.14 with HTTP; Thu, 7 Jul 2016 23:17:23 -0700 (PDT) In-Reply-To: References: From: Neel Patel Date: Fri, 8 Jul 2016 11:47:23 +0530 Message-ID: Subject: Re: [pgAdmin4][runtime]: Download feature in runtime To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a114f1196920038053719c127 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a114f1196920038053719c127 Content-Type: multipart/alternative; boundary=001a114f1196920034053719c125 --001a114f1196920034053719c125 Content-Type: text/plain; charset=UTF-8 Hi Dave, Please find attached patch file for the fix of crash and comment text. Downloading cancel request was not handled properly and due to that application was getting crashed. Do review it and let us know for comments. Thanks, Neel Patel On Thu, Jul 7, 2016 at 2:13 PM, Dave Page wrote: > Hi > > On Wed, Jul 6, 2016 at 9:12 AM, Neel Patel > wrote: > > Hi Dave, > > > > I have tried to fix most of the review comments. I have modified the > patch > > on top of your changes. Please find attached updated patch file. > > Find my comments inline. Can you please review and let us know your > feedback > > ? > > That's definitely getting there; > > - Please make sure you follow the code style requirements, e.g. > //Comment text > > - In your comments, typically you should refer to the user as "the > user" not just "user". e.g. > // Check that *the* user has given *a* valid file name or not > > The same applies to other cases where you miss the article > (https://en.wikipedia.org/wiki/Article_(grammar)): > // Check that *the* request contains the data download at client side > > NOTE: This isn't a criticism of you in particular - most of the team > do this, I assume because it's more like the way you'd phrase things > in Hindi. I just find myself correcting such mistakes regularly, and > it's good for us all to continue to improve in general. > > - I was able to reproduce the crash again: > 1) Open a tab, and go to the PostgreSQL download page on > enterprisedb.com (linked from the pg.org site) > 2) Start to download the 9.6b2 Win64 installer > 3) Cancel the download > 4) Click the link to download if your download didn't automatically start > 5) Overwrite the existing file > > This results in: > a) The progress bar flashes up and down weirdly on the second download > b) The app crashes when the download completes: > > The program has unexpectedly finished. > > /Users/dpage/git/pgadmin4/build-pgAdmin4-Desktop_Qt_5_5_1_clang_64bit2-Debug/pgAdmin4.app/Contents/MacOS/pgAdmin4 > crashed > > See the attached backtrace. > > Thanks! > > > On Fri, Jul 1, 2016 at 2:39 PM, Dave Page wrote: > >> > >> On Fri, Jul 1, 2016 at 5:43 AM, Neel Patel > > >> wrote: > >> > Hi Dave, > >> > > >> > On Thu, Jun 30, 2016 at 7:31 PM, Dave Page wrote: > >> >> > >> >> Hi > >> >> > >> >> On Thu, Jun 30, 2016 at 10:42 AM, Neel Patel > >> >> wrote: > >> >> > Hi, > >> >> > > >> >> > Please find attached patch file for initial version of download > file > >> >> > in > >> >> > runtime application. > >> >> > >> >> I've attached an update with some improved messages, and setting the > >> >> progress dialogue to be modal (seeing as we cannot have multiple > >> >> downloads, and it's easy to lose the dialogue). > >> >> > >> >> > With this patch, we have implemented two features. > >> >> > > >> >> > Feature 1 :- Normal "Download file" from runtime application > >> >> > > >> >> > Previously "Download file" was not implemented in runtime > >> >> > application. > >> >> > With this patch file, we have handled Qt signal for download file > >> >> > properly. > >> >> > >> >> This seems to work fine. I did get one crash (after I cancelled a > >> >> download, then tried it again), but I couldn't reproduce that. > >> > > >> > > >> > Okay. I will try to reproduce the issue and also i will try to review > >> > the > >> > code again if i can find something regrading crash. > > > > > > I have tried to reproduce the crash but no luck. I have tried on Linux > and > > Mac. > > > >> > >> > >> Thanks. > >> > >> > > >> >> > >> >> > Feature 2 :- "download" attribute support for 'a' tag for client > >> >> > side > >> >> > download > >> >> > > >> >> > As per our knowledge, webkit has not implemented the download > >> >> > attribute > >> >> > at > >> >> > 'a' tag. > >> >> > Currently it shows under development from below link. > >> >> > > >> >> > https://bugreports.qt.io/browse/QTBUG-47732 > >> >> > > >> >> > We did not found any signal in Qt for download attribute feature > but > >> >> > to > >> >> > implement this feature in runtime application, we added one > >> >> > workaround > >> >> > to > >> >> > make it work with download CSV file. > >> >> > > >> >> > When we click on download buttons, we are getting Qt signal > >> >> > "urlLinkClicked" > >> >> > and in that url we are finding "data:text/csv" from encoded URL > >> >> > generated > >> >> > from sqleditor. Once we found that tag then we are decoding the csv > >> >> > data > >> >> > and > >> >> > writing to file. > >> >> > > >> >> > Is that right approach ? Should we add our own custom mime-type to > >> >> > header ? > >> >> > Let us know your thoughts on this feature. > >> >> > >> >> This doesn't work so well, for a number of reasons: > >> >> > >> >> 1) QT Creator is complaining that your regexp contains an invalid > >> >> escape sequence (line 546). > >> > > >> > > >> > I will fix. > >> >> > >> >> > >> >> 2) The default file name seems to be the entire data blob. I would > >> >> suggest making the file name "download.csv" if we don't know anything > >> >> better. The "csv" part should be taken from the mime type (see below) > >> >> > >> >> 3) Should we handle all "data:" downloads in this way? Taking the > file > >> >> type and default extension from the mimetype offered. > >> > > >> > > >> > We can handle all "data:" download. We will extract the filename and > >> > extension from mime type. > >> > As i know, Qt provides QUrlQuery class which will be useful to find > the > >> > key > >> > value pair. I will test and let you know. > >> > > >> > e.g. If we have header as below > >> > > >> > > >> > > "data:text/csv;charset=utf-8;Content-disposition:attachment;filename=download.csv;" > >> > > >> > From the QurlQuery class we can query "filename" and "data:" and > >> > accordingly > >> > save the data to filename provided. > >> > > >> > Please suggest. > >> > >> Sounds good. > >> > >> >> 4) When I change the filename the data is properly saved, but then I > >> >> get a confirmation message that still has the full data blob as the > >> >> filename. > > > > > > I found that it is due to different Qt version. You might be using Qt > 5.5. > > In Qt 5.5, we are getting "download" signal and for Qt < 5.5 we are > getting > > "urlLinkClicked" signal for client side data download. > > We have fixed the issue for all Qt version. Let me know if you can still > > able to reproduce the issue. > > > >> > >> >> > >> >> 5) It somehow seems to have let me save files with forward slashes in > >> >> the name. See attachment. > > > > > > Fixed. > > > >> > > >> > > >> > I think we should not ask for "Save as" dialog. If there is no key > found > >> > of > >> > "filename" in encodedURI then we should create the file "download.csv" > >> > in > >> > user's download directory and save the csv data. > >> > >> Well we can get the extension from the mimetype in that instance, but > >> otherwise I agree with the naming. I do think we need a Save As > >> dialogue, as the user should be able to choose the location for the > >> file (and rename it). We should also remember the last save location > >> for convenience. > > > > > > Fixed. > > > >> > >> > >> >> 6) I get all sorts of weird redrawing on the screen when downloading > a > >> >> data blob. I suspect it's because the filename (which is still the > >> >> entire data blob) is shown on the progress dialogue. > >> >> > > > > > > Fixed. > > > >> > >> > > >> > I will try to fix as per above comments and submit the patch again. > >> > Let us know for any misunderstanding. > >> > >> Cool, thanks. > >> > >> > >> -- > >> Dave Page > >> Blog: http://pgsnake.blogspot.com > >> Twitter: @pgsnake > >> > >> EnterpriseDB UK: http://www.enterprisedb.com > >> The Enterprise PostgreSQL Company > > > > > > > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > --001a114f1196920034053719c125 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi Dave,

Please find attached patch fil= e for the fix of crash and comment text.
Downloading cancel reque= st was not handled properly and due to that application was getting crashed= .

Do review it and let us know for comments.
=

Thanks,
Neel Patel

On Thu, Jul 7, 2016 at 2:13 PM, = Dave Page <dpage@pgadmin.org> wrote:
Hi

On Wed, Jul 6, 2016 at 9:12 AM, Neel Patel <neel.patel@enterprisedb.com> wrote:
> Hi Dave,
>
> I have tried to fix most of the review comment= s.=C2=A0 I have modified the patch
> on top of your changes. Please find attached updated patch file.
> Find my comments inline. Can you please review and let us know your fe= edback
> ?

That's definitely getting there;

- Please make sure you follow the code style requirements, e.g.
//<space>Comment text

- In your comments, typically you should refer to the user as "the
user" not just "user". e.g.
=C2=A0 // Check that *the* user has given *a* valid file name or not

=C2=A0 The same applies to other cases where you miss the article
(https://en.wikipedia.org/wiki/Article_(grammar))= :
=C2=A0 // Check that *the* request contains the data download at client sid= e

NOTE: This isn't a criticism of you in particular - most of the team
do this, I assume because it's more like the way you'd phrase thing= s
in Hindi. I just find myself correcting such mistakes regularly, and
it's good for us all to continue to improve in general.

- I was able to reproduce the crash again:
=C2=A0 1) Open a tab, and go to the PostgreSQL download page on
en= terprisedb.com (linked from the pg.org site)
=C2=A0 2) Start to download the 9.6b2 Win64 installer
=C2=A0 3) Cancel the download
=C2=A0 4) Click the link to download if your download didn't automatica= lly start
=C2=A0 5) Overwrite the existing file

This results in:
=C2=A0 a) The progress bar flashes up and down weirdly on the second downlo= ad
=C2=A0 b) The app crashes when the download completes:

The program has unexpectedly finished.
/Users/dpage/git/pgadmin4/build-pgAdmin4-Desktop_Qt_5_5_1_clang_64bit2-Debu= g/pgAdmin4.app/Contents/MacOS/pgAdmin4
crashed

See the attached backtrace.

Thanks!

> On Fri, Jul 1, 2016 at 2:39 PM, Dave Page <dpage@pgadmin.org> wrote:
>>
>> On Fri, Jul 1, 2016 at 5:43 AM, Neel Patel <neel.patel@enterprisedb.com>
>> wrote:
>> > Hi Dave,
>> >
>> > On Thu, Jun 30, 2016 at 7:31 PM, Dave Page <dpage@pgadmin.org> wrote:
>> >>
>> >> Hi
>> >>
>> >> On Thu, Jun 30, 2016 at 10:42 AM, Neel Patel
>> >> <neel.p= atel@enterprisedb.com> wrote:
>> >> > Hi,
>> >> >
>> >> > Please find attached patch file for initial version = of download file
>> >> > in
>> >> > runtime application.
>> >>
>> >> I've attached an update with some improved messages, = and setting the
>> >> progress dialogue to be modal (seeing as we cannot have m= ultiple
>> >> downloads, and it's easy to lose the dialogue).
>> >>
>> >> > With this patch, we have implemented two features. >> >> >
>> >> > Feature 1 :- Normal "Download file" from r= untime application
>> >> >
>> >> > Previously "Download file" was not impleme= nted in runtime
>> >> > application.
>> >> > With this patch file, we have handled Qt signal for = download file
>> >> > properly.
>> >>
>> >> This seems to work fine. I did get one crash (after I can= celled a
>> >> download, then tried it again), but I couldn't reprod= uce that.
>> >
>> >
>> > Okay. I will try to reproduce the issue and also i will try t= o review
>> > the
>> > code again if i can find something regrading crash.
>
>
> I have tried to reproduce the crash but no luck. I have tried on Linux= and
> Mac.
>
>>
>>
>> Thanks.
>>
>> >
>> >>
>> >> > Feature 2 :-=C2=A0 =C2=A0"download" attrib= ute support for 'a' tag for client
>> >> > side
>> >> > download
>> >> >
>> >> > As per our knowledge, webkit has not implemented the= download
>> >> > attribute
>> >> > at
>> >> > 'a' tag.
>> >> > Currently it shows under development from below link= .
>> >> >
>> >> > https://bugreports.qt.io/browse/QT= BUG-47732
>> >> >
>> >> > We did not found any signal in Qt for download attri= bute feature but
>> >> > to
>> >> > implement this feature in runtime application, we ad= ded one
>> >> > workaround
>> >> > to
>> >> > make it work with download CSV file.
>> >> >
>> >> > When we click on download buttons, we are getting Qt= signal
>> >> > "urlLinkClicked"
>> >> > and in that url we are finding "data:text/csv&q= uot; from encoded URL
>> >> > generated
>> >> > from sqleditor. Once we found that tag then we are d= ecoding the csv
>> >> > data
>> >> > and
>> >> > writing to file.
>> >> >
>> >> > Is that right approach ? Should we add our own custo= m mime-type to
>> >> > header ?
>> >> > Let us know your thoughts on this feature.
>> >>
>> >> This doesn't work so well, for a number of reasons: >> >>
>> >> 1) QT Creator is complaining that your regexp contains an= invalid
>> >> escape sequence (line 546).
>> >
>> >
>> > I will fix.
>> >>
>> >>
>> >> 2) The default file name seems to be the entire data blob= . I would
>> >> suggest making the file name "download.csv" if = we don't know anything
>> >> better. The "csv" part should be taken from the= mime type (see below)
>> >>
>> >> 3) Should we handle all "data:" downloads in th= is way? Taking the file
>> >> type and default extension from the mimetype offered.
>> >
>> >
>> > We can handle all "data:" download. We will extract= the filename and
>> > extension from mime type.
>> > As i know, Qt provides QUrlQuery class which will be useful t= o find the
>> > key
>> > value pair. I will test and let you know.
>> >
>> > e.g. If we have header as below
>> >
>> >
>> > "data:text/csv;charset=3Dutf-8;Content-disposition:attac= hment;filename=3Ddownload.csv;"
>> >
>> > From the QurlQuery class we can query "filename" an= d "data:" and
>> > accordingly
>> > save the data to filename provided.
>> >
>> > Please suggest.
>>
>> Sounds good.
>>
>> >> 4) When I change the filename the data is properly saved,= but then I
>> >> get a confirmation message that still has the full data b= lob as the
>> >> filename.
>
>
> I found that it is due to different Qt version. You might be using Qt = 5.5.
> In Qt 5.5, we are getting "download" signal and for Qt < = 5.5 we are getting
> "urlLinkClicked" signal for client side data download.
> We have fixed the issue for all Qt version. Let me know if you can sti= ll
> able to reproduce the issue.
>
>>
>> >>
>> >> 5) It somehow seems to have let me save files with forwar= d slashes in
>> >> the name. See attachment.
>
>
> Fixed.
>
>> >
>> >
>> > I think we should not ask for "Save as" dialog. If = there is no key found
>> > of
>> > "filename" in encodedURI then we should create the = file "download.csv"
>> > in
>> > user's download directory and save the csv data.
>>
>> Well we can get the extension from the mimetype in that instance, = but
>> otherwise I agree with the naming. I do think we need a Save As
>> dialogue, as the user should be able to choose the location for th= e
>> file (and rename it). We should also remember the last save locati= on
>> for convenience.
>
>
> Fixed.
>
>>
>>
>> >> 6) I get all sorts of weird redrawing on the screen when = downloading a
>> >> data blob. I suspect it's because the filename (which= is still the
>> >> entire data blob) is shown on the progress dialogue.
>> >>
>
>
> Fixed.
>
>>
>> >
>> > I will try to fix as per above comments and submit the patch = again.
>> > Let us know for any misunderstanding.
>>
>> Cool, thanks.
>>
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EnterpriseDB UK: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>
>



--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--001a114f1196920034053719c125-- --001a114f1196920038053719c127 Content-Type: application/octet-stream; name="download_runtime_v4.patch" Content-Disposition: attachment; filename="download_runtime_v4.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iqdcmlqw1 ZGlmZiAtLWdpdCBhL3J1bnRpbWUvQnJvd3NlcldpbmRvdy5jcHAgYi9ydW50 aW1lL0Jyb3dzZXJXaW5kb3cuY3BwCmluZGV4IGU4NzViMjguLmM1MDdiNjEg MTAwNjQ0Ci0tLSBhL3J1bnRpbWUvQnJvd3NlcldpbmRvdy5jcHAKKysrIGIv cnVudGltZS9Ccm93c2VyV2luZG93LmNwcApAQCAtMjMsNyArMjMsNiBAQAog I2luY2x1ZGUgPFFJbnB1dERpYWxvZz4KICNpbmNsdWRlIDxRTGluZUVkaXQ+ CiAjZW5kaWYKLQogLy8gQXBwIGhlYWRlcnMKICNpbmNsdWRlICJCcm93c2Vy V2luZG93LmgiCiAjaW5jbHVkZSAiQ29uZmlnV2luZG93LmgiCkBAIC00Miw2 ICs0MSwxNSBAQCBCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFFTdHJp bmcgdXJsKQogICAgIG1fd2lkZ2V0ID0gTlVMTDsKICAgICBtX3Rvb2xCdG5C YWNrID0gTlVMTDsKICAgICBtX3Rvb2xCdG5Gb3J3YXJkID0gTlVMTDsKKyAg ICBtX2Rvd25sb2FkU3RhcnRlZCA9IDA7CisgICAgbV9kb3dubG9hZENhbmNl bGxlZCA9IDA7CisgICAgbV9maWxlID0gTlVMTDsKKyAgICBtX2Rvd25sb2Fk RmlsZW5hbWUgPSAiIjsKKyAgICBtX2RlZmF1bHRGaWxlbmFtZSA9ICIiOwor ICAgIG1fcHJvZ3Jlc3NEaWFsb2cgPSBOVUxMOworICAgIG1fbGFzdF9vcGVu X2ZvbGRlcl9wYXRoID0gUURpcjo6Y3VycmVudFBhdGgoKTsKKyAgICBtX2Rp ciA9ICIiOworICAgIG1fcmVwbHkgPSBOVUxMOwogCiAgICAgbV9hcHBTZXJ2 ZXJVcmwgPSB1cmw7CiAKQEAgLTgzLDYgKzkxLDExIEBAIEJyb3dzZXJXaW5k b3c6OkJyb3dzZXJXaW5kb3coUVN0cmluZyB1cmwpCiAgICAgLy8gUmVnaXN0 ZXIgdGhlIHNsb3Qgb24gdGFiIGluZGV4IGNoYW5nZQogICAgIGNvbm5lY3Qo bV90YWJXaWRnZXQsU0lHTkFMKGN1cnJlbnRDaGFuZ2VkKGludCApKSx0aGlz LFNMT1QodGFiSW5kZXhDaGFuZ2VkKGludCApKSk7CiAKKyAgICAvLyBMaXN0 ZW4gZm9yIGRvd25sb2FkIGZpbGUgcmVxdWVzdCBmcm9tIHRoZSB3ZWIgcGFn ZQorICAgIG1fbWFpbldlYlZpZXctPnBhZ2UoKS0+c2V0Rm9yd2FyZFVuc3Vw cG9ydGVkQ29udGVudCh0cnVlKTsKKyAgICBjb25uZWN0KG1fbWFpbldlYlZp ZXctPnBhZ2UoKSwgU0lHTkFMKGRvd25sb2FkUmVxdWVzdGVkKGNvbnN0IFFO ZXR3b3JrUmVxdWVzdCAmKSksIHRoaXMsIFNMT1QoZG93bmxvYWQoY29uc3Qg UU5ldHdvcmtSZXF1ZXN0ICYpKSk7CisgICAgY29ubmVjdChtX21haW5XZWJW aWV3LT5wYWdlKCksIFNJR05BTCh1bnN1cHBvcnRlZENvbnRlbnQoUU5ldHdv cmtSZXBseSopKSwgdGhpcywgU0xPVCh1bnN1cHBvcnRlZENvbnRlbnQoUU5l dHdvcmtSZXBseSopKSk7CisKICAgICBtX21haW5XZWJWaWV3LT5wYWdlKCkt PnNldExpbmtEZWxlZ2F0aW9uUG9saWN5KFFXZWJQYWdlOjpEZWxlZ2F0ZUFs bExpbmtzKTsKIAogICAgIC8vIFJlc3RvcmUgdGhlIGdlb21ldHJ5CkBAIC0x OTksNiArMjEyLDI5NyBAQCBpbnQgQnJvd3NlcldpbmRvdzo6ZmluZFVSTFRh Yihjb25zdCBRVXJsICZuYW1lKQogICAgIHJldHVybiAwOwogfQogCisvLyBC ZWxvdyBzbG90IHdpbGwgYmUgY2FsbGVkIHdoZW4gdXNlciByaWdodCBjbGlj ayBvbiBkb3dubG9hZCBsaW5rIGFuZCBzZWxlY3QgIlNhdmUgTGluay4uLiIg b3B0aW9uIGZyb20gY29udGV4dCBtZW51Cit2b2lkIEJyb3dzZXJXaW5kb3c6 OmRvd25sb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCkKK3sK KyAgICAvLyBDaGVjayB0aGF0IHJlcXVlc3QgY29udGFpbnMgZGF0YSBmb3Ig ZG93bmxvYWQgYXQgY2xpZW50IHNpZGUKKyAgICBRVXJsIG5hbWU7CisgICAg aWYgKGNoZWNrQ2xpZW50RG93bmxvYWQobmFtZSwgcmVxdWVzdCkpCisgICAg ICAgIHJldHVybjsKKworICAgIGlmIChtX2Rvd25sb2FkU3RhcnRlZCkKKyAg ICB7CisgICAgICAgIC8vIEluZm9ybSB1c2VyIHRoYXQgYSBkb3dubG9hZCBp cyBhbHJlYWR5IHN0YXJ0ZWQKKyAgICAgICAgUU1lc3NhZ2VCb3g6OmluZm9y bWF0aW9uKHRoaXMsIHRyKCJEb3dubG9hZCB3YXJuaW5nIiksIHRyKCJGaWxl IGRvd25sb2FkIGFscmVhZHkgaW4gcHJvZ3Jlc3M6ICUxIikuYXJnKG1fZGVm YXVsdEZpbGVuYW1lKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg ICBtX2RlZmF1bHRGaWxlbmFtZSA9IFFGaWxlSW5mbyhyZXF1ZXN0LnVybCgp LnRvU3RyaW5nKCkpLmZpbGVOYW1lKCk7CisKKyAgICAvLyBPcGVuIHRoZSBk aWFsb2cgdG8gc2F2ZSBmaWxlCisgICAgUUZpbGVEaWFsb2cgc2F2ZV9kaWFs b2codGhpcyk7CisgICAgc2F2ZV9kaWFsb2cuc2V0QWNjZXB0TW9kZShRRmls ZURpYWxvZzo6QWNjZXB0U2F2ZSk7CisgICAgc2F2ZV9kaWFsb2cuc2V0V2lu ZG93VGl0bGUodHIoIlNhdmUgZmlsZSIpKTsKKyAgICBzYXZlX2RpYWxvZy5z ZXREaXJlY3RvcnkobV9sYXN0X29wZW5fZm9sZGVyX3BhdGgpOworICAgIHNh dmVfZGlhbG9nLnNlbGVjdEZpbGUobV9kZWZhdWx0RmlsZW5hbWUpOworCisg ICAgLy8gUmVnaXN0ZXIgdGhlIHNsb3QgZm9yIGRpcmVjdG9yeSB0cmF2ZXNp bmcgd2hlbiBmaWxlIGRpYWxvZyBpcyBvcGVuZWQgYW5kIHNhdmUgdGhlIGxh c3Qgb3BlbiBkaXJlY3RvcnkKKyAgICBRT2JqZWN0Ojpjb25uZWN0KCZzYXZl X2RpYWxvZywgU0lHTkFMKGRpcmVjdG9yeUVudGVyZWQoY29uc3QgUVN0cmlu ZyAmKSksIHRoaXMsIFNMT1QoY3VycmVudF9kaXJfcGF0aChjb25zdCBRU3Ry aW5nICYpKSk7CisgICAgbV9kaXIgPSBtX2xhc3Rfb3Blbl9mb2xkZXJfcGF0 aDsKKyAgICBRU3RyaW5nIGZpbGVOYW1lID0gIiI7CisgICAgUVN0cmluZyBm X25hbWUgPSAiIjsKKworICAgIGlmIChzYXZlX2RpYWxvZy5leGVjKCkgPT0g UURpYWxvZzo6QWNjZXB0ZWQpIHsKKyAgICAgICAgZmlsZU5hbWUgPSBzYXZl X2RpYWxvZy5zZWxlY3RlZEZpbGVzKCkuZmlyc3QoKTsKKyAgICAgICAgZl9u YW1lID0gZmlsZU5hbWUucmVwbGFjZShtX2RpciwgIiIpOworICAgICAgICAv LyBSZW1vdmUgdGhlIGZpcnN0IGNoYXJhY3RlcigvKSBmcm9tIGZpZW5hbWUK KyAgICAgICAgZl9uYW1lLnJlbW92ZSgwLDEpOworICAgICAgICBtX2RlZmF1 bHRGaWxlbmFtZSA9IGZfbmFtZTsKKyAgICB9CisgICAgZWxzZQorICAgICAg ICByZXR1cm47CisKKyAgICBmaWxlTmFtZSA9IG1fZGlyICsgZmlsZU5hbWU7 CisgICAgLy8gQ2xlYXIgdGhlIGxhc3Qgb3BlbiBkaXJlY3RvcnkgcGF0aAor ICAgIG1fZGlyLmNsZWFyKCk7CisKKyNpZmRlZiBfX0FQUExFX18KKyAgICAv LyBDaGVjayB0aGF0IHVzZXIgaGFzIGdpdmVuIHZhbGlkIGZpbGUgbmFtZSBv ciBub3QgLSBmb3J3YXJkIHNsYXNoIGlzIG5vdCBhbGxvd2VkIGluIGZpbGUg bmFtZQorICAgIC8vIEluIE1hYyBPU1gsIGZvcndhcmQgc2xhc2ggaXMgY29u dmVydGVkIHRvIGNvbG9uKDopIGJ5IFF0IHNvIHdlIG5lZWQgdG8gY2hlY2sg Zm9yIGNvbG9uLgorICAgIGlmIChmX25hbWUuaW5kZXhPZigiOiIpICE9IC0x KQorICAgIHsKKyAgICAgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRo aXMsIHRyKCJGaWxlIG5hbWUgZXJyb3IiKSwgdHIoIkludmFsaWQgZmlsZSBu YW1lIikpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKKyAgICAv LyBDaGVjayB0aGF0IHVzZXIgaGFzIGdpdmVuIHZhbGlkIGZpbGUgbmFtZSBv ciBub3QgLSBmb3J3YXJkIHNsYXNoIGlzIG5vdCBhbGxvd2VkIGluIGZpbGUg bmFtZQorICAgIGlmIChmX25hbWUuaW5kZXhPZigiLyIpICE9IC0xKQorICAg IHsKKyAgICAgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsIHRy KCJGaWxlIG5hbWUgZXJyb3IiKSwgdHIoIkludmFsaWQgZmlsZSBuYW1lIikp OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAo ZmlsZU5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZWxz ZQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEZpbGVuYW1lID0gZmlsZU5h bWU7CisKKyAgICAgICAgUU5ldHdvcmtSZXF1ZXN0IG5ld1JlcXVlc3QgPSBy ZXF1ZXN0OworICAgICAgICBuZXdSZXF1ZXN0LnNldEF0dHJpYnV0ZShRTmV0 d29ya1JlcXVlc3Q6OlVzZXIsIGZpbGVOYW1lKTsKKworICAgICAgICBRT2Jq ZWN0ICpvYmpfd2ViX3BhZ2UgPSBRT2JqZWN0OjpzZW5kZXIoKTsKKyAgICAg ICAgaWYgKG9ial93ZWJfcGFnZSAhPSBOVUxMKQorICAgICAgICB7CisgICAg ICAgICAgICBRV2ViUGFnZSAqc2VuZGVyX3dlYl9wYWdlID0gZHluYW1pY19j YXN0PFFXZWJQYWdlKj4ob2JqX3dlYl9wYWdlKTsKKyAgICAgICAgICAgIGlm IChzZW5kZXJfd2ViX3BhZ2UgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm5ldHdvcmtN YW5hZ2VyID0gc2VuZGVyX3dlYl9wYWdlLT5uZXR3b3JrQWNjZXNzTWFuYWdl cigpOworICAgICAgICAgICAgICAgIFFOZXR3b3JrUmVwbHkgKnJlcGx5ID0g bmV0d29ya01hbmFnZXItPmdldChuZXdSZXF1ZXN0KTsKKyAgICAgICAgICAg ICAgICBpZiAocmVwbHkgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgIG1fZG93bmxvYWRTdGFydGVkID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgbV9kb3dubG9hZENhbmNlbGxlZCA9IDA7Cisg ICAgICAgICAgICAgICAgICAgIC8vIENvbm5lY3QgdGhlIHNpZ25hbCBmb3Ig ZG93bmxvYWRQcm9ncmVzcyBhbmQgZG93bmxvYWRGaW5pc2hlZAorICAgICAg ICAgICAgICAgICAgICBjb25uZWN0KCByZXBseSwgU0lHTkFMKGRvd25sb2Fk UHJvZ3Jlc3MocWludDY0LCBxaW50NjQpKSwgdGhpcywgU0xPVChkb3dubG9h ZEZpbGVQcm9ncmVzcyhxaW50NjQsIHFpbnQ2NCkpICk7CisgICAgICAgICAg ICAgICAgICAgIGNvbm5lY3QoIHJlcGx5LCBTSUdOQUwoZmluaXNoZWQoKSks IHRoaXMsIFNMT1QoZG93bmxvYWRGaW5pc2hlZCgpKSk7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor CisvLyBCZWxvdyBzbG90IHdpbGwgYmUgY2FsbGVkIHdoZW4gZmlsZSBkb3du bG9hZCBpcyBpbiBwcm9ncmVzcwordm9pZCBCcm93c2VyV2luZG93Ojpkb3du bG9hZEZpbGVQcm9ncmVzcyhxaW50NjQgcmVhZERhdGEsIHFpbnQ2NCB0b3Rh bERhdGEpCit7CisgICAgUU5ldHdvcmtSZXBseSAqcmVwbHkgPSAoKFFOZXR3 b3JrUmVwbHkqKXNlbmRlcigpKTsKKyAgICBRTmV0d29ya1JlcXVlc3QgcmVx dWVzdCA9IHJlcGx5LT5yZXF1ZXN0KCk7CisgICAgUVZhcmlhbnQgdiA9IHJl cXVlc3QuYXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6VXNlcik7CisKKyAg ICAvLyBXaGVuIGRvd25sb2FkIGlzIGNhbmNlbGVkIGJ5IHVzZXIgdGhlbiBu byBuZWVkIHRvIHdyaXRlIGRhdGEgdG8gZmlsZQorICAgIGlmIChtX2Rvd25s b2FkQ2FuY2VsbGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZihyZXBs eSAhPSBOVUxMICYmIHJlcGx5LT5lcnJvcigpICE9IFFOZXR3b3JrUmVwbHk6 Ok5vRXJyb3IpCisgICAgeworICAgICAgICBxRGVidWcoKSA8PCAiTmV0d29y ayBlcnJvciBvY2N1cnJlZCB3aGlsc3QgZG93bmxvYWRpbmc6ICIgPDwgbV9k ZWZhdWx0RmlsZW5hbWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg ICAvLyBEb3dubG9hZCBpcyBzdGFydGVkIHNvIG9wZW4gdGhlIGZpbGUKKyAg ICBpZiAoIW1fZmlsZSkKKyAgICB7CisgICAgICAgIG1fZmlsZSA9IG5ldyBR RmlsZShtX2Rvd25sb2FkRmlsZW5hbWUpOworICAgICAgICBpZiAoIW1fZmls ZS0+b3BlbihRSU9EZXZpY2U6OldyaXRlT25seSkpCisgICAgICAgIHsKKyAg ICAgICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvciBvcGVuaW5nIGZpbGU6ICIg PDwgbV9kb3dubG9hZEZpbGVuYW1lOworICAgICAgICAgICAgbV9kb3dubG9h ZEZpbGVuYW1lLmNsZWFyKCk7CisgICAgICAgICAgICBtX2RlZmF1bHRGaWxl bmFtZS5jbGVhcigpOworICAgICAgICAgICAgbV9kb3dubG9hZFN0YXJ0ZWQg PSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg ICAgLy8gQ3JlYXRlIHByb2dyZXNzIGJhciBkaWFsb2cKKyAgICAgICAgbV9w cm9ncmVzc0RpYWxvZyA9IG5ldyBRUHJvZ3Jlc3NEaWFsb2cgKHRyKCJEb3du bG9hZGluZyBmaWxlOiAlMSAiKS5hcmcobV9kZWZhdWx0RmlsZW5hbWUpLCAi Q2FuY2VsIiwgcmVhZERhdGEsIHRvdGFsRGF0YSwgdGhpcyk7CisgICAgICAg IG1fcHJvZ3Jlc3NEaWFsb2ctPnNldFdpbmRvd01vZGFsaXR5KFF0OjpXaW5k b3dNb2RhbCk7CisgICAgICAgIG1fcHJvZ3Jlc3NEaWFsb2ctPnNldFdpbmRv d1RpdGxlKCJEb3dubG9hZCBwcm9ncmVzcyIpOworICAgICAgICBtX3Byb2dy ZXNzRGlhbG9nLT5zZXRNaW5pbXVtV2lkdGgoNDUwKTsKKyAgICAgICAgbV9w cm9ncmVzc0RpYWxvZy0+c2V0TWluaW11bUhlaWdodCg4MCk7CisgICAgICAg IG1fcHJvZ3Jlc3NEaWFsb2ctPnNldFdpbmRvd0ZsYWdzKFF0OjpXaW5kb3cg fCBRdDo6Q3VzdG9taXplV2luZG93SGludCB8IFF0OjpXaW5kb3dNaW5pbWl6 ZUJ1dHRvbkhpbnQgfCBRdDo6V2luZG93Q2xvc2VCdXR0b25IaW50KTsKKyAg ICAgICAgLy8gUmVnaXN0ZXIgc2xvdCBmb3IgZmlsZSBkb3dubG9hZCBjYW5j ZWwgcmVxdWVzdAorICAgICAgICBRT2JqZWN0Ojpjb25uZWN0KG1fcHJvZ3Jl c3NEaWFsb2csIFNJR05BTChjYW5jZWxlZCgpKSwgdGhpcywgU0xPVChwcm9n cmVzc0NhbmNlbGVkKCkpKTsKKyAgICAgICAgbV9yZXBseSA9IHJlcGx5Owor ICAgICAgICAvLyBTaG93IGRvd25sb2FkaW5nIHByb2dyZXNzIGJhcgorICAg ICAgICBtX3Byb2dyZXNzRGlhbG9nLT5zaG93KCk7CisgICAgfQorCisgICAg aWYgKG1fZmlsZSkKKyAgICB7CisgICAgICAgIC8vIFdyaXRlIGRhdGEgdG8g ZmlsZQorICAgICAgICBtX2ZpbGUtPndyaXRlKHJlcGx5LT5yZWFkKHJlYWRE YXRhKSk7CisgICAgICAgIG1fcHJvZ3Jlc3NEaWFsb2ctPnNldFZhbHVlKHJl YWREYXRhKTsKKworICAgICAgICAvLyBBcyByZWFkIGRhdGEgYW5kIHRvdGFs RGF0YSBkaWZmZXJlbmNlIGlzIHplcm8gbWVhbnMgZG93bmxvYWRpbmcgaXMg ZmluaXNoZWQKKyAgICAgICAgaWYgKCh0b3RhbERhdGEgLSByZWFkRGF0YSkg PT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQXMgZG93bmxvYWRp bmcgaXMgZmluaXNoZWQgc28gcmVtb3ZlIHByb2dyZXNzIGJhciBkaWFsb2cK KyAgICAgICAgICAgIGlmIChtX3Byb2dyZXNzRGlhbG9nKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3Byb2dyZXNzRGlhbG9n OworICAgICAgICAgICAgICAgIG1fcHJvZ3Jlc3NEaWFsb2cgPSBOVUxMOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2Rvd25sb2FkU3RhcnRl ZCA9IDA7CisgICAgICAgICAgICBtX2Rvd25sb2FkRmlsZW5hbWUuY2xlYXIo KTsKKyAgICAgICAgICAgIG1fZGVmYXVsdEZpbGVuYW1lLmNsZWFyKCk7Cisg ICAgICAgICAgICBtX2Rvd25sb2FkQ2FuY2VsbGVkID0gMDsKKyAgICAgICAg ICAgIGlmIChtX2ZpbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgbV9maWxlLT5jbG9zZSgpOworICAgICAgICAgICAgICAgIGRlbGV0ZSBt X2ZpbGU7CisgICAgICAgICAgICAgICAgbV9maWxlID0gTlVMTDsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1fcmVwbHkpCisgICAgICAg ICAgICAgIG1fcmVwbHkgPSBOVUxMOworICAgICAgICB9CisgICAgfQorfQor CisvLyBCZWxvdyBzbG90IHdpbGwgYmUgY2FsbGVkIHdoZW4gdXNlciBjYW5j ZWwgdGhlIGRvd25sb2FkaW5nIGZpbGUgd2hpY2ggaXMgaW4gcHJvZ3Jlc3Mu Cit2b2lkIEJyb3dzZXJXaW5kb3c6OnByb2dyZXNzQ2FuY2VsZWQoKQorewor ICAgIG1fZG93bmxvYWRDYW5jZWxsZWQgPSAxOworCisgICAgaWYgKG1fcHJv Z3Jlc3NEaWFsb2cpCisgICAgeworICAgICAgICBkZWxldGUgbV9wcm9ncmVz c0RpYWxvZzsKKyAgICAgICAgbV9wcm9ncmVzc0RpYWxvZyA9IE5VTEw7Cisg ICAgfQorCisgICAgaWYgKG1fZmlsZSkKKyAgICB7CisgICAgICAgIG1fZmls ZS0+Y2xvc2UoKTsKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBmaWxlIGZyb20g ZmlsZSBzeXN0ZW0gYXMgZG93bmxvYWRpbmcgaXMgY2FuY2VsZWQgYnkgdXNl cgorICAgICAgICBtX2ZpbGUtPnJlbW92ZSgpOworICAgICAgICBkZWxldGUg bV9maWxlOworICAgICAgICBtX2ZpbGUgPSBOVUxMOworICAgIH0KKworICAg IGlmIChtX3JlcGx5KQorICAgIHsKKyAgICAgICAgbV9yZXBseS0+YWJvcnQo KTsKKyAgICAgICAgbV9yZXBseSA9IE5VTEw7CisgICAgfQorCisgICAgbV9k b3dubG9hZEZpbGVuYW1lLmNsZWFyKCk7CisgICAgbV9kZWZhdWx0RmlsZW5h bWUuY2xlYXIoKTsKKyAgICBtX2Rvd25sb2FkU3RhcnRlZCA9IDA7Cit9CisK Ky8vIEJlbG93IHNsb3Qgd2lsbCBjYWxsZWQgd2hlbiBmaWxlIGRvd25sb2Fk IGlzIGZpbmlzaGVkCit2b2lkIEJyb3dzZXJXaW5kb3c6OmRvd25sb2FkRmlu aXNoZWQoKQoreworICAgIGlmIChtX3Byb2dyZXNzRGlhbG9nKQorICAgIHsK KyAgICAgICAgZGVsZXRlIG1fcHJvZ3Jlc3NEaWFsb2c7CisgICAgICAgIG1f cHJvZ3Jlc3NEaWFsb2cgPSBOVUxMOworICAgIH0KKworICAgIG1fZG93bmxv YWRGaWxlbmFtZS5jbGVhcigpOworICAgIG1fZGVmYXVsdEZpbGVuYW1lLmNs ZWFyKCk7CisgICAgbV9kb3dubG9hZFN0YXJ0ZWQgPSAwOworICAgIG1fZG93 bmxvYWRDYW5jZWxsZWQgPSAwOworICAgIGlmIChtX2ZpbGUpCisgICAgewor ICAgICAgICBtX2ZpbGUtPmNsb3NlKCk7CisgICAgICAgIGRlbGV0ZSBtX2Zp bGU7CisgICAgICAgIG1fZmlsZSA9IE5VTEw7CisgICAgfQorCisgICAgaWYg KG1fcmVwbHkpCisgICAgICAgIG1fcmVwbHkgPSBOVUxMOworfQorCisvLyBC ZWxvdyBzbG90IHdpbGwgYmUgY2FsbGVkIHdoZW4gdXNlciBkaXJlY3RseSBj bGljayBvbiBhbnkgZG93bmxvYWQgbGluawordm9pZCBCcm93c2VyV2luZG93 Ojp1bnN1cHBvcnRlZENvbnRlbnQoUU5ldHdvcmtSZXBseSAqIHJlcGx5KQor eworICAgIGlmIChtX2Rvd25sb2FkU3RhcnRlZCkKKyAgICB7CisgICAgICAg IC8vIEluZm9ybSB1c2VyIHRoYXQgZG93bmxvYWQgaXMgYWxyZWFkeSBzdGFy dGVkCisgICAgICAgIFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlzLCB0 cigiRG93bmxvYWQgd2FybmluZyIpLCB0cigiRmlsZSBkb3dubG9hZCBhbHJl YWR5IGluIHByb2dyZXNzOiAlMSIpLmFyZyhtX2RlZmF1bHRGaWxlbmFtZSkp OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kZWZhdWx0Rmls ZW5hbWUgPSBRRmlsZUluZm8ocmVwbHktPnVybCgpLnRvU3RyaW5nKCkpLmZp bGVOYW1lKCk7CisgICAgUUZpbGVEaWFsb2cgc2F2ZV9kaWFsb2codGhpcyk7 CisgICAgc2F2ZV9kaWFsb2cuc2V0QWNjZXB0TW9kZShRRmlsZURpYWxvZzo6 QWNjZXB0U2F2ZSk7CisgICAgc2F2ZV9kaWFsb2cuc2V0V2luZG93VGl0bGUo dHIoIlNhdmUgZmlsZSIpKTsKKyAgICBzYXZlX2RpYWxvZy5zZXREaXJlY3Rv cnkobV9sYXN0X29wZW5fZm9sZGVyX3BhdGgpOworICAgIHNhdmVfZGlhbG9n LnNlbGVjdEZpbGUobV9kZWZhdWx0RmlsZW5hbWUpOworCisgICAgUU9iamVj dDo6Y29ubmVjdCgmc2F2ZV9kaWFsb2csIFNJR05BTChkaXJlY3RvcnlFbnRl cmVkKGNvbnN0IFFTdHJpbmcgJikpLCB0aGlzLCBTTE9UKGN1cnJlbnRfZGly X3BhdGgoY29uc3QgUVN0cmluZyAmKSkpOworICAgIG1fZGlyID0gbV9sYXN0 X29wZW5fZm9sZGVyX3BhdGg7CisgICAgUVN0cmluZyBmaWxlTmFtZSA9ICIi OworICAgIFFTdHJpbmcgZl9uYW1lID0gIiI7CisKKyAgICBpZiAoc2F2ZV9k aWFsb2cuZXhlYygpID09IFFEaWFsb2c6OkFjY2VwdGVkKSB7CisgICAgICAg IGZpbGVOYW1lID0gc2F2ZV9kaWFsb2cuc2VsZWN0ZWRGaWxlcygpLmZpcnN0 KCk7CisgICAgICAgIGZfbmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UobV9kaXIs ICIiKTsKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBjaGFyYWN0ZXIo LykgZnJvbSBmaWVuYW1lCisgICAgICAgIGZfbmFtZS5yZW1vdmUoMCwxKTsK KyAgICAgICAgbV9kZWZhdWx0RmlsZW5hbWUgPSBmX25hbWU7CisgICAgfQor ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgZmlsZU5hbWUgPSBt X2RpciArIGZpbGVOYW1lOworICAgIC8vIENsZWFyIGxhc3Qgb3BlbiBmb2xk ZXIgcGF0aAorICAgIG1fZGlyLmNsZWFyKCk7CisKKyNpZmRlZiBfX0FQUExF X18KKyAgICAvLyBDaGVjayB0aGF0IHVzZXIgaGFzIGdpdmVuIHZhbGlkIGZp bGUgbmFtZSBvciBub3QgLSBmb3J3YXJkIHNsYXNoIGlzIG5vdCBhbGxvd2Vk IGluIGZpbGUgbmFtZQorICAgIC8vIEluIE1hYyBPU1gsIGZvcndhcmQgc2xh c2ggaXMgY29udmVydGVkIHRvIGNvbG9uKDopIGJ5IFF0IHNvIHdlIG5lZWQg dG8gY2hlY2sgZm9yIGNvbG9uLgorICAgIGlmIChmX25hbWUuaW5kZXhPZigi OiIpICE9IC0xKQorICAgIHsKKyAgICAgICAgUU1lc3NhZ2VCb3g6OmluZm9y bWF0aW9uKHRoaXMsIHRyKCJGaWxlIG5hbWUgZXJyb3IiKSwgdHIoIkludmFs aWQgZmlsZSBuYW1lIikpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vs c2UKKyAgICAvLyBDaGVjayB0aGF0IHVzZXIgaGFzIGdpdmVuIHZhbGlkIGZp bGUgbmFtZSBvciBub3QgLSBmb3J3YXJkIHNsYXNoIGlzIG5vdCBhbGxvd2Vk IGluIGZpbGUgbmFtZQorICAgIGlmIChmX25hbWUuaW5kZXhPZigiLyIpICE9 IC0xKQorICAgIHsKKyAgICAgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9u KHRoaXMsIHRyKCJGaWxlIG5hbWUgZXJyb3IiKSwgdHIoIkludmFsaWQgZmls ZSBuYW1lIikpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisK KyAgICBpZiAoZmlsZU5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47 CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEZpbGVuYW1l ID0gZmlsZU5hbWU7CisgICAgICAgIGlmIChyZXBseSAhPSBOVUxMKQorICAg ICAgICB7CisgICAgICAgICAgICBtX2Rvd25sb2FkU3RhcnRlZCA9IDE7Cisg ICAgICAgICAgICBtX2Rvd25sb2FkQ2FuY2VsbGVkID0gMDsKKyAgICAgICAg ICAgIGNvbm5lY3QoIHJlcGx5LCBTSUdOQUwoZG93bmxvYWRQcm9ncmVzcyhx aW50NjQsIHFpbnQ2NCkpLCB0aGlzLCBTTE9UKGRvd25sb2FkRmlsZVByb2dy ZXNzKHFpbnQ2NCwgcWludDY0KSkpOworICAgICAgICAgICAgY29ubmVjdCgg cmVwbHksIFNJR05BTChmaW5pc2hlZCgpKSwgdGhpcywgU0xPVChkb3dubG9h ZEZpbmlzaGVkKCkpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogLy8gU2xv dDogV2hlbiB0aGUgdGFiIGluZGV4IGNoYW5nZSwgaGlkZS9zaG93IHRoZSB0 b29sYnV0dG9uIGRpc3BsYXllZCBvbiB0YWIKIHZvaWQgQnJvd3NlcldpbmRv dzo6dGFiSW5kZXhDaGFuZ2VkKGludCBpbmRleCkKIHsKQEAgLTM0MCw5ICs2 NDQsMTQzIEBAIHZvaWQgQnJvd3NlcldpbmRvdzo6dGFiVGl0bGVDaGFuZ2Vk KGNvbnN0IFFTdHJpbmcgJnN0cikKICAgICB9CiB9CiAKKy8vIEJlbG93IGZ1 bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBkb3dubG9hZCB0aGUgZGF0YSBzZXQg aW4gZW5jb2RlZCBVUkwgc28gZGF0YSB3aWxsIGJlIGRvd25sb2FkZWQgYXQg Y2xpZW50IHNpZGUuCitib29sIEJyb3dzZXJXaW5kb3c6OmNoZWNrQ2xpZW50 RG93bmxvYWQoY29uc3QgUVVybCAmbmFtZSwgY29uc3QgUU5ldHdvcmtSZXF1 ZXN0ICZyZXF1ZXN0KQoreworICAgIFFTdHJpbmcgbWltZV90eXBlID0gIiI7 CisgICAgUVN0cmluZyBmaWxlX25hbWUgPSAiIjsKKyAgICBRU3RyaW5nIHdy aXRlX2RhdGEgPSAiIjsKKyAgICBRU3RyaW5nIGNzdl9kYXRhID0gIiI7Cisg ICAgYm9vbCByZXR1cm5fdmFsID0gZmFsc2U7CisKKyAgICAvKgorICAgICBJ biBRdCB2ZXJzaW9uIDUuNSwgImRvd25sb2FkIiBzaWduYWwgaXMgZW1pdHRl ZCB3aGVuICdkb3dubG9hZCcgYXR0cmlidXRlIGlzIHNldCBvbiAnYScgdGFn LgorICAgICBJbiAiZG93bmxvYWQiIHNpZ25hbCBlbWlzc2lvbiwgbmFtZSB3 aWxsIGJlIGVtcHR5IGFuZCBkYXRhIHdpbGwgYmUgaW4gcmVxdWVzdCBvYmpl Y3QuCisgICAgIEVhcmxpZXIgdmVyc2lvbiAoIDwgNS41ICksICJ1cmxMaW5r Q2xpY2tlZCIgc2lnbmFsIGlzIGVtaXR0ZWQgc28gbmFtZSB3aWxsIGNvbnRh aW4gdGhlIG9iamVjdCBkYXRhLgorICAgICovCisgICAgaWYgKG5hbWUuaXNF bXB0eSgpKQorICAgICAgICBjc3ZfZGF0YSA9IFFGaWxlSW5mbyhyZXF1ZXN0 LnVybCgpLnRvU3RyaW5nKCkpLmZpbGVOYW1lKCk7CisgICAgZWxzZQorICAg ICAgICBjc3ZfZGF0YSA9IFFTdHJpbmc6OmZyb21VdGY4KG5hbWUudG9FbmNv ZGVkKCkpOworCisgICAgLy8gRXh0cmFjdCB0aGUgZmlsZW5hbWUgYW5kIHZh bHVlKGRhdGEpIGZyb20gZW5jb2RlZCBVUkwKKyAgICBRVXJsUXVlcnkgZG93 bmxvYWREYXRhKGNzdl9kYXRhKTsKKyAgICBRU3RyaW5nTGlzdCBrZXlWYWx1 ZURhdGEgPSBjc3ZfZGF0YS5zcGxpdCgiJiIpOworICAgIGZpbGVfbmFtZSA9 IGRvd25sb2FkRGF0YS5xdWVyeUl0ZW1WYWx1ZSgiZmlsZW5hbWUiKTsKKyAg ICB3cml0ZV9kYXRhID0gZG93bmxvYWREYXRhLnF1ZXJ5SXRlbVZhbHVlKCJ2 YWx1ZSIpOworCisgICAgaW50IGtleV92YWx1ZV9sZW5ndGggPSBrZXlWYWx1 ZURhdGEuc2l6ZSgpOworICAgIGludCBpX2NvdW50ID0gMDsKKworICAgIHdo aWxlIChpX2NvdW50IDwga2V5X3ZhbHVlX2xlbmd0aCkKKyAgICB7CisgICAg ICAgIC8vIEV4dHJhY3QgdGhlIGV4dGVuc2lvbiBhZnRlciAiZGF0YToiIHdv cmQgZm91bmQgZnJvbSBlbmNvZGVkIHVybC4KKyAgICAgICAgUVN0cmluZyBz dGFydF9tYXRjaF9zdHJpbmcgPSAiZGF0YToiOworICAgICAgICBpbnQgc19v ZmZzZXQgPSBrZXlWYWx1ZURhdGEuYXQoaV9jb3VudCkuaW5kZXhPZihzdGFy dF9tYXRjaF9zdHJpbmcpOworICAgICAgICBpZiAoc19vZmZzZXQgIT0gLTEp CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBmb3JtYXRfb2Zmc2V0ID0g a2V5VmFsdWVEYXRhLmF0KGlfY291bnQpLmluZGV4T2YoIi8iKTsKKyAgICAg ICAgICAgIG1pbWVfdHlwZSA9IGtleVZhbHVlRGF0YS5hdChpX2NvdW50KS5t aWQoKGZvcm1hdF9vZmZzZXQrMSkpOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgICBpbnQgc3BsaXRfb2Zmc2V0ID0ga2V5VmFs dWVEYXRhLmF0KGlfY291bnQpLmluZGV4T2YoIj0iKTsKKyAgICAgICAgaWYg KHNwbGl0X29mZnNldCA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAg bWltZV90eXBlID0ga2V5VmFsdWVEYXRhLmF0KGlfY291bnQpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpX2NvdW50ICs9 IDE7CisgICAgfQorCisgICAgLy8gV3JpdGUgZGF0YSB0byBmaWxlCisgICAg aWYgKCF3cml0ZV9kYXRhLmlzRW1wdHkoKSkKKyAgICB7CisgICAgICAgIFFT dHJpbmcgZmlsZW5hbWUgPSAiIjsKKyAgICAgICAgUVN0cmluZyBmX25hbWUg PSAiIjsKKyAgICAgICAgUUZpbGVEaWFsb2cgc2F2ZUFzZGlhbG9nKHRoaXMp OworICAgICAgICBzYXZlQXNkaWFsb2cuc2V0QWNjZXB0TW9kZShRRmlsZURp YWxvZzo6QWNjZXB0U2F2ZSk7CisgICAgICAgIHNhdmVBc2RpYWxvZy5zZWxl Y3ROYW1lRmlsdGVyKHRyKCJGaWxlcyAoKi4lMSkiKS5hcmcobWltZV90eXBl KSk7CisgICAgICAgIHNhdmVBc2RpYWxvZy5zZXRXaW5kb3dUaXRsZSh0cigi U2F2ZSAlMSBmaWxlIikuYXJnKG1pbWVfdHlwZSkpOworICAgICAgICBzYXZl QXNkaWFsb2cuc2V0RGlyZWN0b3J5KG1fbGFzdF9vcGVuX2ZvbGRlcl9wYXRo KTsKKyAgICAgICAgc2F2ZUFzZGlhbG9nLnNlbGVjdEZpbGUoZmlsZV9uYW1l KTsKKyAgICAgICAgc2F2ZUFzZGlhbG9nLnNldERlZmF1bHRTdWZmaXgobWlt ZV90eXBlKTsKKworICAgICAgICBRT2JqZWN0Ojpjb25uZWN0KCZzYXZlQXNk aWFsb2csIFNJR05BTChkaXJlY3RvcnlFbnRlcmVkKGNvbnN0IFFTdHJpbmcg JikpLCB0aGlzLCBTTE9UKGN1cnJlbnRfZGlyX3BhdGgoY29uc3QgUVN0cmlu ZyAmKSkpOworICAgICAgICBtX2RpciA9IG1fbGFzdF9vcGVuX2ZvbGRlcl9w YXRoOworCisgICAgICAgIGlmIChzYXZlQXNkaWFsb2cuZXhlYygpID09IFFE aWFsb2c6OkFjY2VwdGVkKSB7CisgICAgICAgICAgICBmaWxlbmFtZSA9IHNh dmVBc2RpYWxvZy5zZWxlY3RlZEZpbGVzKCkuYXQoMCk7CisgICAgICAgICAg ICBRU3RyaW5nIGZpbGVuYW1lID0gc2F2ZUFzZGlhbG9nLnNlbGVjdGVkRmls ZXMoKS5maXJzdCgpOworICAgICAgICAgICAgZl9uYW1lID0gZmlsZW5hbWUu cmVwbGFjZShtX2RpciwgIiIpOworICAgICAgICAgICAgLy8gUmVtb3ZlIGZp cnN0IGNoYXJhY3RlciBmcm9tIGZpZW5hbWUKKyAgICAgICAgICAgIGZfbmFt ZS5yZW1vdmUoMCwxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNsZWFy IGxhc3Qgb3BlbiBmb2xkZXIgcGF0aAorICAgICAgICBtX2Rpci5jbGVhcigp OworCisgICAgICAgIHJldHVybl92YWwgPSB0cnVlOworCisjaWZkZWYgX19B UFBMRV9fCisgICAgICAgIC8vIENoZWNrIHRoYXQgdXNlciBoYXMgZ2l2ZW4g dmFsaWQgZmlsZSBuYW1lIG9yIG5vdCAtIGZvcndhcmQgc2xhc2ggaXMgbm90 IGFsbG93ZWQgaW4gZmlsZSBuYW1lCisgICAgICAgIC8vIEluIE1hYyBPU1gs IGZvcndhcmQgc2xhc2ggaXMgY29udmVydGVkIHRvIGNvbG9uKDopIGJ5IFF0 IHNvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGNvbG9uLgorICAgICAgICBpZiAo Zl9uYW1lLmluZGV4T2YoIjoiKSAhPSAtMSkKKyAgICAgICAgeworICAgICAg ICAgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsIHRyKCJGaWxl IG5hbWUgZXJyb3IiKSwgdHIoIkludmFsaWQgZmlsZSBuYW1lIikpOworICAg ICAgICAgICAgcmV0dXJuIHJldHVybl92YWw7CisgICAgICAgIH0KKyNlbHNl CisgICAgICAgIC8vIENoZWNrIHRoYXQgdXNlciBoYXMgZ2l2ZW4gdmFsaWQg ZmlsZSBuYW1lIG9yIG5vdCAtIGZvcndhcmQgc2xhc2ggaXMgbm90IGFsbG93 ZWQgaW4gZmlsZSBuYW1lCisgICAgICAgIGlmIChmX25hbWUuaW5kZXhPZigi LyIpICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBRTWVzc2FnZUJv eDo6aW5mb3JtYXRpb24odGhpcywgdHIoIkZpbGUgbmFtZSBlcnJvciIpLCB0 cigiSW52YWxpZCBmaWxlIG5hbWUiKSk7CisgICAgICAgICAgICByZXR1cm4g cmV0dXJuX3ZhbDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmKCFm aWxlbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v IFNhdmUgbGFzdCBvcGVuIGZvbGRlciBwYXRoCisgICAgICAgICAgICBtX2xh c3Rfb3Blbl9mb2xkZXJfcGF0aCA9IFFGaWxlSW5mbyhmaWxlbmFtZSkucGF0 aCgpOworICAgICAgICAgICAgLy8gRGVjb2RlIHRoZSBlbmNvZGVkIHVyaSBk YXRhCisgICAgICAgICAgICBRU3RyaW5nIGNzdkRhdGEgPSBRVXJsOjpmcm9t UGVyY2VudEVuY29kaW5nKHdyaXRlX2RhdGEudG9VdGY4KCkpOworCisgICAg ICAgICAgICBRRmlsZSBjc3ZmaWxlKGZpbGVuYW1lKTsKKyAgICAgICAgICAg IGlmICghY3N2ZmlsZS5vcGVuKFFJT0RldmljZTo6V3JpdGVPbmx5IHwgUUlP RGV2aWNlOjpUZXh0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgdHIoIlNhdmUgY3N2 IGZpbGUiKSwgdHIoIkVycm9yIHdoaWxlIG9wZW5pbmcgZmlsZSAlMSIpLmFy ZyhmaWxlbmFtZSkpOworICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5f dmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gV3JpdGUgY3N2 IGRhdGEgdG8gZmlsZQorICAgICAgICAgICAgcWludDY0IGRhdGFfcmV0dXJu ID0gY3N2ZmlsZS53cml0ZShjc3ZEYXRhLnRvVXRmOCgpLmNvbnN0RGF0YSgp KTsKKyAgICAgICAgICAgIGlmIChkYXRhX3JldHVybiA9PSAtMSkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBRTWVzc2FnZUJveDo6aW5mb3Jt YXRpb24odGhpcywgdHIoIlNhdmUgY3N2IGZpbGUiKSwgdHIoIkVycm9yIHdo aWxlIHdyaXRpbmcgZGF0YSB0byBmaWxlICUxIikuYXJnKGZpbGVuYW1lKSk7 CisgICAgICAgICAgICAgICAgY3N2ZmlsZS5jbG9zZSgpOworICAgICAgICAg ICAgICAgIHJldHVybiByZXR1cm5fdmFsOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgY3N2ZmlsZS5jbG9zZSgpOworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIHJldHVybl92YWw7Cit9CisKK3ZvaWQgQnJvd3Nlcldp bmRvdzo6Y3VycmVudF9kaXJfcGF0aChjb25zdCBRU3RyaW5nICZkaXIpCit7 CisgICAgbV9kaXIgPSBkaXI7CisgICAgbV9sYXN0X29wZW5fZm9sZGVyX3Bh dGggPSBkaXI7Cit9CisKIC8vIFNsb3Q6IExpbmsgaXMgb3BlbiBmcm9tIHBn QWRtaW4gbWFpbndpbmRvdwogdm9pZCBCcm93c2VyV2luZG93Ojp1cmxMaW5r Q2xpY2tlZChjb25zdCBRVXJsICZuYW1lKQogeworICAgIC8vIENoZWNrIHRo YXQgcmVxdWVzdCBjb250YWlucyB0aGUgZGF0YSBkb3dubG9hZCBhdCBjbGll bnQgc2lkZQorICAgIFFOZXR3b3JrUmVxdWVzdCByZXF1ZXN0OworICAgIGlm IChjaGVja0NsaWVudERvd25sb2FkKG5hbWUsIHJlcXVlc3QpKQorICAgICAg ICByZXR1cm47CisKICAgICAvLyBGaXJzdCBjaGVjayBpcyB0aGVyZSBhbnkg dGFiIG9wZW5lZCB3aXRoIHNhbWUgVVJMIHRoZW4gb3BlbiBpdCBhZ2Fpbi4K ICAgICBpbnQgdGFiRm91bmQgPSBmaW5kVVJMVGFiKG5hbWUpOwogCkBAIC0z NTMsNiArNzkxLDExIEBAIHZvaWQgQnJvd3NlcldpbmRvdzo6dXJsTGlua0Ns aWNrZWQoY29uc3QgUVVybCAmbmFtZSkKICAgICAgICAgbV9hZGROZXdHcmlk TGF5b3V0LT5zZXRDb250ZW50c01hcmdpbnMoMCwgMCwgMCwgMCk7CiAgICAg ICAgIG1fYWRkTmV3V2ViVmlldyA9IG5ldyBXZWJWaWV3V2luZG93KG1fYWRk TmV3VGFiKTsKIAorCS8vIExpc3RlbiBmb3IgdGhlIGRvd25sb2FkIHJlcXVl c3QgZnJvbSB0aGUgd2ViIHBhZ2UKKwltX2FkZE5ld1dlYlZpZXctPnBhZ2Uo KS0+c2V0Rm9yd2FyZFVuc3VwcG9ydGVkQ29udGVudCh0cnVlKTsKKyAgICAg ICAgY29ubmVjdChtX2FkZE5ld1dlYlZpZXctPnBhZ2UoKSwgU0lHTkFMKGRv d25sb2FkUmVxdWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmKSksIHRo aXMsIFNMT1QoZG93bmxvYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICYpKSk7 CisgICAgICAgIGNvbm5lY3QobV9hZGROZXdXZWJWaWV3LT5wYWdlKCksIFNJ R05BTCh1bnN1cHBvcnRlZENvbnRlbnQoUU5ldHdvcmtSZXBseSopKSwgdGhp cywgU0xPVCh1bnN1cHBvcnRlZENvbnRlbnQoUU5ldHdvcmtSZXBseSopKSk7 CisKICAgICAgICAgbV93aWRnZXQgPSBuZXcgUVdpZGdldChtX2FkZE5ld1Rh Yik7CiAgICAgICAgIG1fdG9vbEJ0bkJhY2sgPSBuZXcgUVRvb2xCdXR0b24o bV93aWRnZXQpOwogICAgICAgICBtX3Rvb2xCdG5CYWNrLT5zZXRGaXhlZEhl aWdodChQR0FfQlROX1NJWkUpOwpkaWZmIC0tZ2l0IGEvcnVudGltZS9Ccm93 c2VyV2luZG93LmggYi9ydW50aW1lL0Jyb3dzZXJXaW5kb3cuaAppbmRleCA0 M2Y5MGZlLi43MjAwZmYzIDEwMDY0NAotLS0gYS9ydW50aW1lL0Jyb3dzZXJX aW5kb3cuaAorKysgYi9ydW50aW1lL0Jyb3dzZXJXaW5kb3cuaApAQCAtNTQs NiArNTQsMTIgQEAgcHVibGljIHNsb3RzOgogICAgIHZvaWQgdGFiSW5kZXhD aGFuZ2VkKGludCBpbmRleCk7CiAgICAgdm9pZCBnb0JhY2tQYWdlKCk7CiAg ICAgdm9pZCBnb0ZvcndhcmRQYWdlKCk7CisgICAgdm9pZCBkb3dubG9hZChj b25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QpOworICAgIHZvaWQgdW5z dXBwb3J0ZWRDb250ZW50KFFOZXR3b3JrUmVwbHkgKiByZXBseSk7CisgICAg dm9pZCBkb3dubG9hZEZpbmlzaGVkKCk7CisgICAgdm9pZCBkb3dubG9hZEZp bGVQcm9ncmVzcyhxaW50NjQgLCBxaW50NjQgKTsKKyAgICB2b2lkIHByb2dy ZXNzQ2FuY2VsZWQoKTsKKyAgICB2b2lkIGN1cnJlbnRfZGlyX3BhdGgoY29u c3QgUVN0cmluZyAmZGlyKTsKIAogcHJpdmF0ZToKICAgICBRU3RyaW5nIG1f YXBwU2VydmVyVXJsOwpAQCAtNzksMTAgKzg1LDIwIEBAIHByaXZhdGU6CiAK ICAgICBib29sIG1faW5pdGlhbExvYWQ7CiAgICAgaW50IG1fbG9hZEF0dGVt cHQ7CisgICAgUVN0cmluZyBtX2Rvd25sb2FkRmlsZW5hbWU7CisgICAgaW50 IG1fZG93bmxvYWRTdGFydGVkOworICAgIGludCBtX2Rvd25sb2FkQ2FuY2Vs bGVkOworICAgIFFGaWxlICptX2ZpbGU7CisgICAgUVByb2dyZXNzRGlhbG9n ICptX3Byb2dyZXNzRGlhbG9nOworICAgIFFTdHJpbmcgbV9kZWZhdWx0Rmls ZW5hbWU7CisgICAgUVN0cmluZyBtX2xhc3Rfb3Blbl9mb2xkZXJfcGF0aDsK KyAgICBRU3RyaW5nIG1fZGlyOworICAgIFFOZXR3b3JrUmVwbHkgKm1fcmVw bHk7CiAKICAgICB2b2lkIGNyZWF0ZUFjdGlvbnMoKTsKICAgICB2b2lkIHBh dXNlKGludCBzZWNvbmRzID0gMSk7CiAgICAgaW50ICBmaW5kVVJMVGFiKGNv bnN0IFFVcmwgJm5hbWUpOworICAgIGJvb2wgY2hlY2tDbGllbnREb3dubG9h ZChjb25zdCBRVXJsICZuYW1lLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJl cXVlc3QpOwogfTsKIAogI2VuZGlmIC8vIEJST1dTRVJXSU5ET1dfSApkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRl cy9zcWxlZGl0b3IvanMvc3FsZWRpdG9yLmpzIGIvd2ViL3BnYWRtaW4vdG9v bHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3IvanMvc3FsZWRpdG9y LmpzCmluZGV4IDI5NWNhZjQuLjJkZjJiNWYgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL2pz L3NxbGVkaXRvci5qcworKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0 b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9qcy9zcWxlZGl0b3IuanMKQEAgLTI1 ODcsNyArMjU4Nyw3IEBAIGRlZmluZSgKICAgICAgICAgICAgICAgICBrZXlz ID0gXy5wbHVjayhzZWxmLmNvbHVtbnMsICduYW1lJyk7CiAKICAgICAgICAg ICAgIC8vIEZldGNoIHRoZSBpdGVtcyBmcm9tIGZ1bGxDb2xsZWN0aW9uIGFu ZCBjb252ZXJ0IGl0IGFzIGNzdiBmb3JtYXQKLSAgICAgICAgICAgIHZhciBj c3YgPSBsYWJlbHMuam9pbignLCcpICsgJ1xuJzsKKyAgICAgICAgICAgIHZh ciBjc3YgPSBrZXlzLmpvaW4oJywnKSArICdcbic7CiAgICAgICAgICAgICBj c3YgKz0gY29sbC5tYXAoZnVuY3Rpb24oaXRlbSkgewogICAgICAgICAgICAg ICAgIHJldHVybiBfLm1hcChrZXlzLCBmdW5jdGlvbihrZXkpIHsKICAgICAg ICAgICAgICAgICAgIHZhciBjZWxsID0gY3N2X2NvbCBba2V5XS5jZWxsLApA QCAtMjYwMCw3ICsyNjAwLDcgQEAgZGVmaW5lKAogICAgICAgICAgICAgfSku am9pbignXG4nKTsKIAogICAgICAgICAgICAgLy8gRG93bmxvYWQgdGhlIGZp bGUuCi0gICAgICAgICAgICB2YXIgZW5jb2RlZFVyaSA9IGVuY29kZVVSSSgn ZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCcgKyBjc3YpLAorICAgICAg ICAgICAgdmFyIGVuY29kZWRVcmkgPSBlbmNvZGVVUkkoJ2RhdGE6dGV4dC9j c3YmY2hhcnNldD11dGYtOCZmaWxlbmFtZT1kb3dubG9hZC5jc3YmdmFsdWU9 JyArIGNzdiksCiAgICAgICAgICAgICAgICAgICAgIGxpbmsgPSBkb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICAgICBsaW5rLnNldEF0 dHJpYnV0ZSgnaHJlZicsIGVuY29kZWRVcmkpOwogCg== --001a114f1196920038053719c127 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a114f1196920038053719c127--