<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>70706</bug_id>
          
          <creation_ts>2011-10-23 20:45:00 -0700</creation_ts>
          <short_desc>Add boolean speculations to DFG JIT 32_64</short_desc>
          <delta_ts>2011-10-24 18:25:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Yuqiang Xian">yuqiang.xian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>489124</commentid>
    <comment_count>0</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-10-23 20:45:00 -0700</bug_when>
    <thetext>Working on boolean speculations in DFG JIT 32_64..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489128</commentid>
    <comment_count>1</comment_count>
      <attachid>112136</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-10-23 21:02:33 -0700</bug_when>
    <thetext>Created attachment 112136
WIP patch

WIP - this patch adds the DataFormatBoolean support to DFG 32_64 as well as some fixes on SpillOrder and needDataFormatConversion.
The actual speculation part is not included in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489253</commentid>
    <comment_count>2</comment_count>
      <attachid>112166</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-10-24 02:50:13 -0700</bug_when>
    <thetext>Created attachment 112166
the patch

The patch for review. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489264</commentid>
    <comment_count>3</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-10-24 03:10:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=112166) [details]
&gt; the patch
&gt; 
&gt; The patch for review. Thanks.

The major benefit of this patch is to save a physical register for certain operations, for example when we compare two non-speculated JS values, previously in the worst case we require 6 registers (two for each value, two for the result) - though we can reuse possible value registers for result registers - and it works before. But w/ the function inlining support in DFG there are more possibilities that the registers cannot be reused, which introduces problem on X86 where only 5 GPRs are available for now.

Performance is almost neutral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489650</commentid>
    <comment_count>4</comment_count>
      <attachid>112166</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-24 14:35:23 -0700</bug_when>
    <thetext>Comment on attachment 112166
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=112166&amp;action=review

r=me.  The inline comments are suggestions only.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:-952
&gt; -            m_assembler.testb_i8r(mask.m_value, reg);

Could you have changed the if statement to test both the mask being 0x7f and the register being one of [ax, bx, cx, dx]?

&gt; Source/JavaScriptCore/dfg/DFGGenerationInfo.h:132
&gt;      switch (from) {

As a side-note, needDataFormatConversion is no longer called from anywhere.  Your call on whether you want to remove this method in this patch, or not commit any changes to it, or commit the changes you made.  Your changes to this method seem to be more-or-less in the spirit of what the method was initially doing, except that it&apos;s not doing anything, since it&apos;s not used.

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler32_64.cpp:237
&gt; +                store32(TrustedImm32(JSValue::BooleanTag), reinterpret_cast&lt;char*&gt;(scratchBuffer + scratchIndex) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag));

The code appears to be placing tags into the OSR scratch buffer, and then reading pairs of registers from the scratch buffer and placing them into the register file.  The scratch buffer is only used for temporary storage while this code is running.  Would it not be more profitable to dump unboxed values to the scratch buffer, and then box them when transfering from the scratch buffer back to the register file?  Seems like it would save you a load and a store, per unboxed virtual register.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489719</commentid>
    <comment_count>5</comment_count>
      <attachid>112166</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 15:50:33 -0700</bug_when>
    <thetext>Comment on attachment 112166
the patch

Clearing flags on attachment: 112166

Committed r98291: &lt;http://trac.webkit.org/changeset/98291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489720</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-24 15:50:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489823</commentid>
    <comment_count>7</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-10-24 18:25:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 112166 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112166&amp;action=review
&gt; 
&gt; r=me.  The inline comments are suggestions only.
&gt; 

Thanks for the suggestions. I think I can take a note here and have them addressed soon.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112136</attachid>
            <date>2011-10-23 21:02:33 -0700</date>
            <delta_ts>2011-10-24 02:50:13 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>70706.0.patch</filename>
            <type>text/plain</type>
            <size>18478</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgyMTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAK
KzIwMTEtMTAtMjMgIFl1cWlhbmcgWGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CisKKyAg
ICAgICAgQWRkIGJvb2xlYW4gc3BlY3VsYXRpb25zIHRvIERGRyBKSVQgMzJfNjQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNzA2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlmZmVyZW50IGZyb20gdGhl
IGJvb2xlYW4gc3BlY3VsYXRpb25zIGluIERGRyA2NCwgdGhlIGJvb2xlYW4KKyAgICAgICAgc3Bl
Y3VsYXRpb25zIGluIERGRyAzMl82NCB3aWxsIHVzZSBhIDMyYml0IEdQUiB0byBob2xkIHRoZSBw
cmltaXRpdmUKKyAgICAgICAgYm9vbGVhbiBpbnN0ZWFkIG9mIGEgSlNCb29sZWFuLiBUaGlzIGNo
b2ljZSBpcyBub3Qgb25seSBmb3IKKyAgICAgICAgcGVyZm9ybWFuY2UsIGJ1dCBhbHNvIHRvIHNh
dmUgYSByZWdpc3RlciBhcyB3ZSdyZSBsYWNrIG9mIHJlZ2lzdGVycyBvbgorICAgICAgICBYODYu
CisgICAgICAgIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBtYWtlIHVzZSBvZiBEYXRhRm9ybWF0Qm9v
bGVhbiwgYWxsb3cgYSB2YWx1ZSB0bworICAgICAgICBiZSByZXByZXNlbnRlZCBhcyBhIHByaW1p
dGl2ZSBib29sZWFuIGFuZCBjb252ZXJ0ZWQgZnJvbS90byBhCisgICAgICAgIEpTQm9vbGVhbi4K
KyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGZpeGVzIFNwaWxsT3JkZXIgaW4gMzJfNjQsIHdoaWNo
IHNob3VsZCBiZSBkaWZmZXJlbnQKKyAgICAgICAgZnJvbSA2NCwgYW5kIGZpeGVzIG5lZWREYXRh
Rm9ybWF0Q29udmVyc2lvbiBsb2dpYyBpbiAzMl82NC4KKworICAgICAgICAqIGRmZy9ERkdHZW5l
cmF0aW9uSW5mby5oOgorICAgICAgICAoSlNDOjpERkc6Om5lZWREYXRhRm9ybWF0Q29udmVyc2lv
bik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmluaXRCb29sZWFuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVy
YXRpb25JbmZvOjpmaWxsQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmNoZWNrQ29uc2lz
dGVuY3kpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Y2VsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6Ym9vbGVhblJlc3VsdCk6
CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVO
b25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorCiAyMDExLTEwLTIzICBOb2VsIEdvcmRv
biAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFJlbW92ZSBS
b3BlSW1wbC57aCxjcHB9IGZyb20gdGhlIGd5cCBwcm9qZWN0cwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTgyMDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMiwyMyArMTMyLDE2IEBAIGlubGluZSBib29sIG5lZWREYXRhRm9ybWF0Q29u
dmVyc2lvbihEYXQKICAgICBzd2l0Y2ggKGZyb20pIHsKICAgICBjYXNlIERhdGFGb3JtYXRJbnRl
Z2VyOgogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgICAgIHJldHVybiB0byAhPSBEYXRh
Rm9ybWF0SW50ZWdlciAmJiB0byAhPSBEYXRhRm9ybWF0Q2VsbDsKKyAgICBjYXNlIERhdGFGb3Jt
YXRCb29sZWFuOgorICAgICAgICByZXR1cm4gKCh0byAmIERhdGFGb3JtYXRKUykgfHwgdG8gPT0g
RGF0YUZvcm1hdERvdWJsZSk7CiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2Ug
RGF0YUZvcm1hdEpTRG91YmxlOgotICAgICAgICBzd2l0Y2ggKHRvKSB7Ci0gICAgICAgIGNhc2Ug
RGF0YUZvcm1hdERvdWJsZToKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlM6Ci0gICAgICAgIGNh
c2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuICh0byAhPSBEYXRhRm9ybWF0RG91YmxlICYmIHRvICE9IERhdGFGb3JtYXRKU0RvdWJs
ZSk7CiAgICAgY2FzZSBEYXRhRm9ybWF0SlM6Ci0gICAgICAgIHJldHVybiAhKHRvICYgRGF0YUZv
cm1hdEpTKTsKICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CiAgICAgY2FzZSBEYXRhRm9y
bWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKLSAgICAgICAgcmV0dXJu
IHRvICE9IERhdGFGb3JtYXRKUyAmJiB0byAhPSBmcm9tOworICAgICAgICByZXR1cm4gKCEodG8g
JiBEYXRhRm9ybWF0SlMpIHx8IHRvID09IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgY2FzZSBE
YXRhRm9ybWF0U3RvcmFnZToKICAgICAgICAgQVNTRVJUKHRvID09IERhdGFGb3JtYXRTdG9yYWdl
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU3LDYgKzI1MCwxNSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKICAgICB9Cisg
ICAgdm9pZCBpbml0Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3Vu
dCwgR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUluZGV4Owor
ICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CisgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQg
PSBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXRO
b25lOworICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKKyAgICAgICAgdS5ncHIgPSBncHI7Cisg
ICAgfQogICAgIHZvaWQgaW5pdERvdWJsZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1
c2VDb3VudCwgRlBSUmVnIGZwcikKICAgICB7CiAgICAgICAgIEFTU0VSVChmcHIgIT0gSW52YWxp
ZEZQUlJlZyk7CkBAIC0zMzgsNyArMzQwLDcgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKSB7
IEFTU0VSVChtX3JlZ2lzdGVyRm9ybWF0ICYmIG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1h
dERvdWJsZSk7IHJldHVybiB1LmdwcjsgfQogICAgIEZQUlJlZyBmcHIoKSB7IEFTU0VSVChtX3Jl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOyByZXR1cm4gdS5mcHI7IH0KICNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSUmVnIGdwcigpIHsgQVNTRVJUKG1fcmVnaXN0ZXJG
b3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgbV9yZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9y
bWF0Q2VsbCB8fCBtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKTsgcmV0dXJu
IHUuZ3ByOyB9CisgICAgR1BSUmVnIGdwcigpIHsgQVNTRVJUKCEobV9yZWdpc3RlckZvcm1hdCAm
IERhdGFGb3JtYXRKUykgJiYgbV9yZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0RG91YmxlKTsg
cmV0dXJuIHUuZ3ByOyB9CiAgICAgR1BSUmVnIHRhZ0dQUigpIHsgQVNTRVJUKG1fcmVnaXN0ZXJG
b3JtYXQgJiBEYXRhRm9ybWF0SlMpOyByZXR1cm4gdS52LnRhZ0dQUjsgfQogICAgIEdQUlJlZyBw
YXlsb2FkR1BSKCkgeyBBU1NFUlQobV9yZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyk7IHJl
dHVybiB1LnYucGF5bG9hZEdQUjsgfQogICAgIEZQUlJlZyBmcHIoKSB7IEFTU0VSVChtX3JlZ2lz
dGVyRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgfHwgbV9yZWdpc3RlckZvcm1hdCA9PSBEYXRh
Rm9ybWF0SlNEb3VibGUpOyByZXR1cm4gdS5mcHI7IH0KQEAgLTQxNyw2ICs0MTksMTEgQEAgcHVi
bGljOgogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAg
ICAgIHUuZ3ByID0gZ3ByOwogICAgIH0KKyAgICB2b2lkIGZpbGxCb29sZWFuKEdQUlJlZyBncHIp
CisgICAgeworICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdEJvb2xlYW47Cisg
ICAgICAgIHUuZ3ByID0gZ3ByOworICAgIH0KICAgICB2b2lkIGZpbGxEb3VibGUoRlBSUmVnIGZw
cikKICAgICB7CiAgICAgICAgIEFTU0VSVChmcHIgIT0gSW52YWxpZEZQUlJlZyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
MzJfNjQuY3BwCShyZXZpc2lvbiA5ODIwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDExICsy
NTUsMTEgQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgogICAg
IGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogeworICAg
IGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3By
KCk7CiAgICAgICAgIC8vIElmIHRoZSByZWdpc3RlciBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCB3
ZSBuZWVkIHRvIHRha2UgYSBjb3B5LgotICAgICAgICAvLyBJZiBub3QsIHdlJ2xsIHplcm8gZXh0
ZW5kIGluIHBsYWNlLCBzbyBtYXJrIG9uIHRoZSBpbmZvIHRoYXQgdGhpcyBpcyBub3cgdHlwZSBE
YXRhRm9ybWF0SW50ZWdlciwgbm90IERhdGFGb3JtYXRKU0ludGVnZXIuCiAgICAgICAgIGlmICht
X2dwcnMuaXNMb2NrZWQoZ3ByKSkgewogICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGFsbG9jYXRl
KCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcGF5bG9hZEdQUik7CkBAIC0yNjgsNyAr
MjY4LDIyIEBAIGJvb2wgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUoTm9kZUkKICAgICAg
ICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIH0KICAgICAgICAgdGFnR1BSID0gYWxs
b2NhdGUoKTsKLSAgICAgICAgbV9qaXQubW92ZShpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdEludGVnZXIgPyBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSA6IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0dQ
Uik7CisgICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7CisgICAg
ICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZv
cm1hdEludGVnZXI6CisgICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpJbnQzMlRhZzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAg
dGFnID0gSlNWYWx1ZTo6Q2VsbFRhZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRh
ZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMih0YWcpLCB0YWdHUFIpOwogICAgICAgICBtX2dwcnMu
cmVsZWFzZShncHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVySlMpOwogICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKQEAgLTMwMiw3ICszMTcsNiBAQCBib29sIEpJ
VENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERh
dGFGb3JtYXRTdG9yYWdlOgogICAgICAgICAvLyB0aGlzIHR5cGUgY3VycmVudGx5IG5ldmVyIG9j
Y3VycwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTk0MSw5ICs5NTUsNyBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiAgICAgR1BSUmVnIGFyZ1Rh
Z0dQUiA9IGFyZy50YWdHUFIoKTsKICAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXls
b2FkR1BSKCk7CiAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIGFyZyk7CiAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnLCBmYWxzZSk7Ci0gICAgR1BSUmVn
IHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0UGF5bG9h
ZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RD
ZWxsOwpAQCAtOTY2LDggKzk3OCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3Vs
YXRpdmVOb24KICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgIAotICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCByZXN1bHRUYWdHUFIp
OwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2Nv
bXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgYm9vbGVhblJlc3VsdChyZXN1
bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5v
ZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQpAQCAtMTExNSw5ICsxMTI2LDcg
QEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogICAgIAogICAgIGlm
IChpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihu
b2RlLmNoaWxkMigpKSkgewogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAg
ICBHUFJSZXN1bHQyIHJlc3VsdDIodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2Fk
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0
Mi5ncHIoKTsKICAgICAKICAgICAgICAgYXJnMS51c2UoKTsKICAgICAgICAgYXJnMi51c2UoKTsK
QEAgLTExMjUsMTIgKzExMzQsOSBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlTm9uCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24o
aGVscGVyRnVuY3Rpb24sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2Fk
R1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7CiAgICAgICAgIAotICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVzdWx0VGFnR1BSKTsK
LSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1f
Y29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGls
ZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgYXJnMSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsKLSAgICAgICAgR1BSUmVnIHJl
c3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxv
YWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogCiAgICAgICAgIGFyZzEudXNlKCk7CkBAIC0x
MTQ4LDE3ICsxMTU0LDE2IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVO
b24KICAgICAKICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAgICAgCi0g
ICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIpOworICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5
bG9hZEdQUik7CiAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1
bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJn
MlBheWxvYWRHUFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5hbmRQ
dHIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgCiAgICAgICAg
ICAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlc3VsdFRh
Z0dQUik7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBt
X2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKICAgICB9CiB9CiAK
QEAgLTEyMjMsOSArMTIyOCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRp
dmVOb24KICAgICBHUFJSZWcgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7CiAgICAgR1BSUmVn
IGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7CiAgICAgCi0gICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFRhZyh0aGlzLCBhcmcxKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9h
ZCh0aGlzLCBhcmcxLCBmYWxzZSk7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRh
Zy5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7CiAgICAgCiAgICAgYXJnMS51c2UoKTsKQEAgLTEyNDEsOSArMTI0NCw5IEBAIHZvaWQgSklU
Q29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KIAogICAgICAgICBub3RFcXVhbENhc2Uu
bGluaygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJn
MVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKLSAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBh
eWxvYWRHUFIpOwogICAgICAgICAKQEAgLTEyNTEsMTUgKzEyNTQsMTQgQEAgdm9pZCBKSVRDb2Rl
R2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgZmFzdCBwYXRocy4KIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXls
b2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgCiAgICAgICAg
IG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2Fk
R1BSKTsKICAgICB9CiAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwgcmVzdWx0VGFnR1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXls
b2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0K
IAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBub2RlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiA5ODIwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MywxMSArNDczLDE0IEBAIHZvaWQgSklU
Q29kZUdlbmVyYXRvcjo6Y2hlY2tDb25zaXN0ZW5jeSgKICAgICAgICAgY2FzZSBEYXRhRm9ybWF0
SlNJbnRlZ2VyOgogICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKICAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAj
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAg
IGNhc2UgRGF0YUZvcm1hdEludGVnZXI6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6IHsK
KyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9v
bGVhbjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZTogewogICAgICAgICAgICAgR1BS
UmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgICAgICBBU1NFUlQoZ3ByICE9IEludmFsaWRH
UFJSZWcpOwogICAgICAgICAgICAgaWYgKG1fZ3Bycy5uYW1lKGdwcikgIT0gdmlydHVhbFJlZ2lz
dGVyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gOTgyMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0IHByaW9y
aXRpZXMgZm9yIHNwaWxsIG9yZGVyIGZvcgogICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3Iu
CisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbnVtIFNwaWxsT3JkZXIgewogICAgICAgICBTcGls
bE9yZGVyQ29uc3RhbnQgPSAxLCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKICAgICAgICAg
U3BpbGxPcmRlclNwaWxsZWQgID0gMiwgLy8gbm8gc3BpbGwKQEAgLTY5LDcgKzcwLDE5IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgU3BpbGxPcmRlckludGVnZXIgID0gNSwgLy8gbmVlZHMgc3BpbGwg
YW5kIGJveAogICAgICAgICBTcGlsbE9yZGVyRG91YmxlICAgPSA2LCAvLyBuZWVkcyBzcGlsbCBh
bmQgY29udmVydAogICAgIH07Ci0gICAgCisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGVu
dW0gU3BpbGxPcmRlciB7CisgICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCA9IDEsIC8vIG5vIHNw
aWxsLCBhbmQgY2hlYXAgZmlsbAorICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCAgPSAyLCAvLyBu
byBzcGlsbAorICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAor
ICAgICAgICBTcGlsbE9yZGVyU3RvcmFnZSAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBT
cGlsbE9yZGVyRG91YmxlICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVy
SW50ZWdlciAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAgIFNwaWxsT3JkZXJD
ZWxsICAgICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckJv
b2xlYW4gID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAorICAgIH07CisjZW5kaWYKKwogICAg
IGVudW0gVXNlQ2hpbGRyZW5Nb2RlIHsgQ2FsbFVzZUNoaWxkcmVuLCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkgfTsKICAgICAKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHR3b1RvVGhlMzI7
CkBAIC04MzksNiArODUyLDE3IEBAIHByb3RlY3RlZDoKICAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAgICAgICAgIGluZm8u
aW5pdENlbGwobm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7CiAgICAgfQorICAgIHZv
aWQgYm9vbGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGls
ZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4p
CisgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgbV9n
cHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJvb2xlYW4pOworICAg
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKKyAgICAgICAgaW5mby5pbml0Qm9vbGVhbihub2RlSW5kZXgsIG5vZGUucmVmQ291bnQo
KSwgcmVnKTsKKyAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB2b2lkIGpzVmFsdWVSZXN1
bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCBmb3JtYXQgPSBE
YXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gOTgyMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2
ICs5OSw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICAg
ICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZSh0YWdHUFIp
OworICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsKKyAgICAgICAgbV9ncHJzLnJl
dGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJJbnRlZ2VyKTsKICAg
ICAgICAgaW5mby5maWxsSW50ZWdlcihwYXlsb2FkR1BSKTsKICAgICAgICAgLy8gSWYgIXN0cmlj
dCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJ
bnRlZ2VyOwpAQCAtMTY1LDcgKzE2Nyw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZURvdWIKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2Rl
SW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25zdGFudChu
b2RlSW5kZXgpLCBmcHIpOwotICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOworICAgICAgICAgICAgICAgIG1fZnBycy5y
ZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAg
ICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZw
cjsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zNDQsMTIgKzM0Niw3NyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRleCkKIHsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKLQogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjQm9vbEAlZCAg
ICIsIG5vZGVJbmRleCk7CiAjZW5kaWYKKyAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVh
bFJlZ2lzdGVyXTsKKworICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAg
Y2FzZSBEYXRhRm9ybWF0Tm9uZTogeworICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsK
KworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYg
KGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKKyAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1ZhbHVlLmFzQm9vbGVh
bigpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxCb29sZWFuKGdwcik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZ3ByOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMp
OworICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
U3BpbGxlZCk7CisKKyAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
SlNCb29sZWFuKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSk7CisKKyAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7
CisgICAgICAgIGluZm8uZmlsbEJvb2xlYW4oZ3ByKTsKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAg
ICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7CisgICAgICAgIEdQUlJlZyBncHIg
PSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIpOworICAgICAgICByZXR1cm4g
Z3ByOworICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICBjYXNlIERh
dGFGb3JtYXRKUzogeworICAgICAgICBHUFJSZWcgdGFnR1BSID0gaW5mby50YWdHUFIoKTsKKyAg
ICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKKyAgICAgICAgbV9n
cHJzLmxvY2sodGFnR1BSKTsKKyAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7CisgICAg
ICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQm9vbGVhbikKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOworCisg
ICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKKyAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFn
R1BSKTsKKyAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CisgICAgICAgIG1fZ3By
cy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQm9vbGVhbik7
CisgICAgICAgIGluZm8uZmlsbEJvb2xlYW4ocGF5bG9hZEdQUik7CisgICAgICAgIHJldHVybiBw
YXlsb2FkR1BSOworICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICBj
YXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAg
IGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAg
Y2FzZSBEYXRhRm9ybWF0Q2VsbDogeworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbigpOworICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBJbnZhbGlkR1BS
UmVnOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112166</attachid>
            <date>2011-10-24 02:50:13 -0700</date>
            <delta_ts>2011-10-24 15:50:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>70706.3.patch</filename>
            <type>text/plain</type>
            <size>44788</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgyMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAK
KzIwMTEtMTAtMjQgIFl1cWlhbmcgWGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CisKKyAg
ICAgICAgQWRkIGJvb2xlYW4gc3BlY3VsYXRpb25zIHRvIERGRyBKSVQgMzJfNjQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNzA2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlmZmVyZW50IGZyb20gdGhl
IGJvb2xlYW4gc3BlY3VsYXRpb25zIGluIERGRyA2NCwgdGhlIGJvb2xlYW4KKyAgICAgICAgc3Bl
Y3VsYXRpb25zIGluIERGRyAzMl82NCB3aWxsIHVzZSBhIDMyYml0IEdQUiB0byBob2xkIHRoZSBw
cmltaXRpdmUKKyAgICAgICAgYm9vbGVhbiBpbnN0ZWFkIG9mIGEgSlNCb29sZWFuLiBUaGlzIGNo
b2ljZSBpcyBub3Qgb25seSBmb3IKKyAgICAgICAgcGVyZm9ybWFuY2UsIGJ1dCBhbHNvIHRvIHNh
dmUgYSByZWdpc3RlciBhcyB3ZSdyZSBzaG9ydCBvZiByZWdpc3RlcnMgb24KKyAgICAgICAgWDg2
LgorICAgICAgICBUbyBhY2NvbXBsaXNoIHRoaXMgd2UgbWFrZSB1c2Ugb2YgRGF0YUZvcm1hdEJv
b2xlYW4sIGFsbG93IGEgdmFsdWUgdG8KKyAgICAgICAgYmUgcmVwcmVzZW50ZWQgYXMgYSBwcmlt
aXRpdmUgYm9vbGVhbiBhbmQgY29udmVydGVkIGZyb20vdG8gYQorICAgICAgICBKU0Jvb2xlYW4u
CisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBTcGlsbE9yZGVyIGluIDMyXzY0LCB3aGlj
aCBzaG91bGQgYmUgZGlmZmVyZW50CisgICAgICAgIGZyb20gNjQsIGFuZCBmaXhlcyBuZWVkRGF0
YUZvcm1hdENvbnZlcnNpb24gbG9naWMgaW4gMzJfNjQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246OmJyYW5jaFRlc3QzMik6CisgICAgICAgICAgICBXZSBkb24ndCBleHBlY3QgYnl0
ZSB0ZXN0IGFjdHVhbGx5IGFzIGl0IGRvZXNuJ3Qgd29yayBmb3IgcmVnaXN0ZXJzCisgICAgICAg
ICAgICBlc3AuLmVkaSBvbiBYODYuCisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6
CisgICAgICAgIChKU0M6OkRGRzo6bmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpE
Rkc6OkdlbmVyYXRpb25JbmZvOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25J
bmZvOjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmZp
bGxCb29sZWFuKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAg
ICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b2RlR2VuZXJhdG9yOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OnNpbGVudFNwaWxsR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpz
aWxlbnRGaWxsR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzcGls
bCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2VsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Ym9vbGVhblJlc3VsdCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAg
ICAgICogZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpkdW1wKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNl
Ojpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjphbHJl
YWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpW
YWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6
Z3ByKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxO
b3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5v
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMS0xMC0yNCAg
UGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbnRlcnBy
ZXRlciBidWlsZCBmaXggYWZ0ZXIgcjk4MTc5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2
aXNpb24gOTgyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0OCw4ICs5NDgsNiBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIGlmIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxvdyBzZXZl
biBiaXRzLCB0aGlzIGNhbiBiZSB0ZXN0ZWQgd2l0aCBhIHRlc3RiCiAgICAgICAgIGlmIChtYXNr
Lm1fdmFsdWUgPT0gLTEpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihyZWcsIHJl
Zyk7Ci0gICAgICAgIGVsc2UgaWYgKChtYXNrLm1fdmFsdWUgJiB+MHg3ZikgPT0gMCkKLSAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnRlc3RiX2k4cihtYXNrLm1fdmFsdWUsIHJlZyk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIobWFzay5tX3ZhbHVlLCBy
ZWcpOwogICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoeDg2Q29uZGl0aW9uKGNv
bmQpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9u
SW5mby5oCShyZXZpc2lvbiA5ODIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDIzICsxMzIsMTYgQEAgaW5s
aW5lIGJvb2wgbmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKERhdAogICAgIHN3aXRjaCAoZnJvbSkg
ewogICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoK
LSAgICAgICAgcmV0dXJuIHRvICE9IERhdGFGb3JtYXRJbnRlZ2VyICYmIHRvICE9IERhdGFGb3Jt
YXRDZWxsOworICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgIHJldHVybiAoKHRv
ICYgRGF0YUZvcm1hdEpTKSB8fCB0byA9PSBEYXRhRm9ybWF0RG91YmxlKTsKICAgICBjYXNlIERh
dGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgICAgIHN3
aXRjaCAodG8pIHsKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgotICAgICAgICBjYXNl
IERhdGFGb3JtYXRKUzoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gKHRvICE9IERhdGFGb3JtYXREb3VibGUg
JiYgdG8gIT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKICAgICBjYXNlIERhdGFGb3JtYXRKUzoKLSAg
ICAgICAgcmV0dXJuICEodG8gJiBEYXRhRm9ybWF0SlMpOwogICAgIGNhc2UgRGF0YUZvcm1hdEpT
SW50ZWdlcjoKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0
SlNCb29sZWFuOgotICAgICAgICByZXR1cm4gdG8gIT0gRGF0YUZvcm1hdEpTICYmIHRvICE9IGZy
b207CisgICAgICAgIHJldHVybiAoISh0byAmIERhdGFGb3JtYXRKUykgfHwgdG8gPT0gRGF0YUZv
cm1hdEpTRG91YmxlKTsKICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgogICAgICAgICBBU1NF
UlQodG8gPT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
NTcsNiArMjUwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAg
ICAgIHUuZ3ByID0gZ3ByOwogICAgIH0KKyAgICB2b2lkIGluaXRCb29sZWFuKE5vZGVJbmRleCBu
b2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAg
bV9ub2RlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIG1fdXNlQ291bnQgPSB1c2VDb3VudDsK
KyAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRCb29sZWFuOworICAgICAgICBt
X3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CisgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNl
OworICAgICAgICB1LmdwciA9IGdwcjsKKyAgICB9CiAgICAgdm9pZCBpbml0RG91YmxlKE5vZGVJ
bmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBGUFJSZWcgZnByKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGZwciAhPSBJbnZhbGlkRlBSUmVnKTsKQEAgLTMzOCw3ICszNDAsNyBAQCBw
dWJsaWM6CiAgICAgR1BSUmVnIGdwcigpIHsgQVNTRVJUKG1fcmVnaXN0ZXJGb3JtYXQgJiYgbV9y
ZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0RG91YmxlKTsgcmV0dXJuIHUuZ3ByOyB9CiAgICAg
RlBSUmVnIGZwcigpIHsgQVNTRVJUKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJs
ZSk7IHJldHVybiB1LmZwcjsgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBHUFJSZWcg
Z3ByKCkgeyBBU1NFUlQobV9yZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBt
X3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IG1fcmVnaXN0ZXJGb3JtYXQgPT0g
RGF0YUZvcm1hdFN0b3JhZ2UpOyByZXR1cm4gdS5ncHI7IH0KKyAgICBHUFJSZWcgZ3ByKCkgeyBB
U1NFUlQoIShtX3JlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSAmJiBtX3JlZ2lzdGVyRm9y
bWF0ICE9IERhdGFGb3JtYXREb3VibGUpOyByZXR1cm4gdS5ncHI7IH0KICAgICBHUFJSZWcgdGFn
R1BSKCkgeyBBU1NFUlQobV9yZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyk7IHJldHVybiB1
LnYudGFnR1BSOyB9CiAgICAgR1BSUmVnIHBheWxvYWRHUFIoKSB7IEFTU0VSVChtX3JlZ2lzdGVy
Rm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsgcmV0dXJuIHUudi5wYXlsb2FkR1BSOyB9CiAgICAgRlBS
UmVnIGZwcigpIHsgQVNTRVJUKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSB8
fCBtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSk7IHJldHVybiB1LmZwcjsg
fQpAQCAtNDE3LDYgKzQxOSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQg
PSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgdS5ncHIgPSBncHI7CiAgICAgfQorICAgIHZv
aWQgZmlsbEJvb2xlYW4oR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIG1fcmVnaXN0ZXJGb3Jt
YXQgPSBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICAgICAgdS5ncHIgPSBncHI7CisgICAgfQogICAg
IHZvaWQgZmlsbERvdWJsZShGUFJSZWcgZnByKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZwciAh
PSBJbnZhbGlkRlBSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAJKHJldmlzaW9uIDk4MjI2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTUsMTEgKzI1NSwxMSBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6
OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIGNh
c2UgRGF0YUZvcm1hdEludGVnZXI6CiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICBjYXNl
IERhdGFGb3JtYXRJbnRlZ2VyOiB7CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogewogICAg
ICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgLy8gSWYgdGhlIHJlZ2lzdGVy
IGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIHdlIG5lZWQgdG8gdGFrZSBhIGNvcHkuCi0gICAgICAg
IC8vIElmIG5vdCwgd2UnbGwgemVybyBleHRlbmQgaW4gcGxhY2UsIHNvIG1hcmsgb24gdGhlIGlu
Zm8gdGhhdCB0aGlzIGlzIG5vdyB0eXBlIERhdGFGb3JtYXRJbnRlZ2VyLCBub3QgRGF0YUZvcm1h
dEpTSW50ZWdlci4KICAgICAgICAgaWYgKG1fZ3Bycy5pc0xvY2tlZChncHIpKSB7CiAgICAgICAg
ICAgICBwYXlsb2FkR1BSID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoZ3By
LCBwYXlsb2FkR1BSKTsKQEAgLTI2OCwxMSArMjY4LDMwIEBAIGJvb2wgSklUQ29kZUdlbmVyYXRv
cjo6ZmlsbEpTVmFsdWUoTm9kZUkKICAgICAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAg
ICAgIH0KICAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKLSAgICAgICAgbV9qaXQubW92ZShp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIgPyBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSA6IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0dQUik7CisgICAgICAgIHVpbnQzMl90IHRhZyA9IEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWc7CisgICAgICAgIERhdGFGb3JtYXQgZmlsbEZvcm1hdCA9IERh
dGFGb3JtYXRKUzsKKyAgICAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKKyAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6
OkludDMyVGFnOworICAgICAgICAgICAgZmlsbEZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAg
ICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7CisgICAgICAgICAgICBmaWxsRm9ybWF0ID0g
RGF0YUZvcm1hdEpTQ2VsbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERhdGFG
b3JtYXRCb29sZWFuOgorICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVhblRhZzsKKyAg
ICAgICAgICAgIGZpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNCb29sZWFuOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKHRhZyksIHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CiAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJK
Uyk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVySlMpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQ
UiwgaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRDZWxsID8gRGF0YUZvcm1hdEpT
Q2VsbCA6IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRh
Z0dQUiwgcGF5bG9hZEdQUiwgZmlsbEZvcm1hdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtMzAyLDcgKzMyMSw2IEBAIGJvb2wgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFs
dWUoTm9kZUkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNl
IERhdGFGb3JtYXRCb29sZWFuOgogICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAg
IC8vIHRoaXMgdHlwZSBjdXJyZW50bHkgbmV2ZXIgb2NjdXJzCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtOTQxLDkgKzk1OSw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9u
U3BlY3VsYXRpdmVOb24KICAgICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOwogICAg
IEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIoKTsKIAotICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcywgYXJnKTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9h
ZCh0aGlzLCBhcmcsIGZhbHNlKTsKLSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFn
LmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIo
KTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGw7CkBAIC05NjYsOCArOTgyLDcgQEAg
dm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKICAgICB9CiAgICAgCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNC
b29sZWFuKTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKIH0KIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwg
Ym9vbCBpbnZlcnQpCkBAIC0xMTE1LDkgKzExMzAsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6
Om5vblNwZWN1bGF0aXZlTm9uCiAgICAgCiAgICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAg
IEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0Mih0aGlz
KTsKICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAg
ICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHQyLmdwcigpOwogICAgIAogICAgICAgICBh
cmcxLnVzZSgpOwogICAgICAgICBhcmcyLnVzZSgpOwpAQCAtMTEyNSwxMiArMTEzOCw5IEBAIHZv
aWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0UGF5
bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXls
b2FkR1BSKTsKICAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkJvb2xlYW5UYWcpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRK
U0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRh
Zyh0aGlzLCBhcmcxKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywg
YXJnMSwgZmFsc2UpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdw
cigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7CiAKICAgICAgICAgYXJnMS51c2UoKTsKQEAgLTExNDgsMTcgKzExNTgsMTYgQEAgdm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogICAgIAogICAgICAgICAgICAgc2xv
d1BhdGgubGluaygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIs
IGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0gICAgICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7
CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwog
ICAgICAgICAKICAgICAgICAgICAgIG1faml0LmFuZFB0cihUcnVzdGVkSW1tMzIoMSksIHJlc3Vs
dFBheWxvYWRHUFIpOwogICAgICAgICAKICAgICAgICAgICAgIGhhdmVSZXN1bHQubGluaygmbV9q
aXQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRh
Rm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBi
b29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwogICAgIH0KIH0KIApAQCAtMTIyMyw5ICsxMjMyLDcgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogICAgIEdQUlJlZyBhcmcyVGFn
R1BSID0gYXJnMi50YWdHUFIoKTsKICAgICBHUFJSZWcgYXJnMlBheWxvYWRHUFIgPSBhcmcyLnBh
eWxvYWRHUFIoKTsKICAgICAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIGFyZzEp
OwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsKLSAg
ICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwogICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKICAgICAKICAgICBhcmcxLnVzZSgp
OwpAQCAtMTI0MSw5ICsxMjQ4LDkgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxh
dGl2ZU5vbgogCiAgICAgICAgIG5vdEVxdWFsQ2FzZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAot
ICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxv
YWRHUFIpOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BS
KTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCBy
ZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwg
YXJnMlBheWxvYWRHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIApAQCAt
MTI1MSwxNSArMTI1OCwxNCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZl
Tm9uCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBmYXN0IHBhdGhzLgogCi0g
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9h
ZEdQUik7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIp
OwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0
UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQ
YXlsb2FkR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIs
IHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dFBheWxvYWRHUFIpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIH0KIAotICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCByZXN1bHRUYWdHUFIpOwot
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBp
bGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk4MjI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDczLDExICs0NzMsMTQgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjaGVja0NvbnNp
c3RlbmN5KAogICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CiAgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdEpTRG91YmxlOgogICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
ICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoK
LSAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDogeworICAgICAgICBjYXNlIERhdGFGb3JtYXRD
ZWxsOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICBjYXNlIERhdGFG
b3JtYXRTdG9yYWdlOiB7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAg
ICAgICAgICAgIEFTU0VSVChncHIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgICAgICAgICBpZiAo
bV9ncHJzLm5hbWUoZ3ByKSAhPSB2aXJ0dWFsUmVnaXN0ZXIpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5ODIy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIFRoZXNl
IGNvbnN0YW50cyBhcmUgdXNlZCB0byBzZXQgcHJpb3JpdGllcyBmb3Igc3BpbGwgb3JkZXIgZm9y
CiAgICAgLy8gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KKyNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IGVudW0gU3BpbGxPcmRlciB7CiAgICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCA9IDEsIC8vIG5v
IHNwaWxsLCBhbmQgY2hlYXAgZmlsbAogICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCAgPSAyLCAv
LyBubyBzcGlsbApAQCAtNjcsOSArNjgsMjIgQEAgcHJvdGVjdGVkOgogICAgICAgICBTcGlsbE9y
ZGVyQ2VsbCAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAogICAgICAgICBTcGlsbE9yZGVyU3RvcmFn
ZSAgPSA0LCAvLyBuZWVkcyBzcGlsbAogICAgICAgICBTcGlsbE9yZGVySW50ZWdlciAgPSA1LCAv
LyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAgIFNwaWxsT3JkZXJCb29sZWFuICA9IDUsIC8v
IG5lZWRzIHNwaWxsIGFuZCBib3gKICAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgID0gNiwgLy8g
bmVlZHMgc3BpbGwgYW5kIGNvbnZlcnQKICAgICB9OwotICAgIAorI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICBlbnVtIFNwaWxsT3JkZXIgeworICAgICAgICBTcGlsbE9yZGVyQ29uc3RhbnQg
PSAxLCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKKyAgICAgICAgU3BpbGxPcmRlclNwaWxs
ZWQgID0gMiwgLy8gbm8gc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlckpTICAgICAgID0gNCwgLy8g
bmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2UgID0gNCwgLy8gbmVlZHMgc3Bp
bGwKKyAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAgICAg
ICAgU3BpbGxPcmRlckludGVnZXIgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAorICAgICAg
ICBTcGlsbE9yZGVyQ2VsbCAgICAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAg
IFNwaWxsT3JkZXJCb29sZWFuICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICB9Owor
I2VuZGlmCisKICAgICBlbnVtIFVzZUNoaWxkcmVuTW9kZSB7IENhbGxVc2VDaGlsZHJlbiwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5IH07CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSB0d29Ub1RoZTMyOwpAQCAtMjA4LDEyICsyMjIsMTEgQEAgcHVibGljOgogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXREb3Vi
bGUgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKQogICAgICAgICAgICAg
bV9mcHJzLnJlbGVhc2UoaW5mby5mcHIoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9y
bWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRD
ZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKQotICAgICAgICAgICAg
bV9ncHJzLnJlbGVhc2UoaW5mby5ncHIoKSk7CiAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9y
bWF0ICYgRGF0YUZvcm1hdEpTKSB7CiAgICAgICAgICAgICBtX2dwcnMucmVsZWFzZShpbmZvLnRh
Z0dQUigpKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8ucGF5bG9hZEdQUigpKTsK
LSAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3Jt
YXROb25lKQorICAgICAgICAgICAgbV9ncHJzLnJlbGVhc2UoaW5mby5ncHIoKSk7CiAjZW5kaWYK
ICAgICB9CiAKQEAgLTI4OCw3ICszMDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihpbmZvLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7
CiAgICAgICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlmIChyZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0
ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRCb29s
ZWFuKQogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLmdwcigpLCBKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihzcGlsbE1lKSk7CiAgICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ID09
IERhdGFGb3JtYXRDZWxsKQogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoaW5mby5ncHIoKSwg
SklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwpAQCAtMzQ4LDYgKzM2MSwxOSBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCisgICAg
ICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Qm9vbGVhbikgeworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzQm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5k
ZXgpKSwgaW5mby5ncHIoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIGluZm8uZ3ByKCkp
OworI2VuZGlmCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBpZiAo
cmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKICAgICAgICAgICAgIGlmIChub2Rl
LmlzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9m
SlNDb25zdGFudChub2RlSW5kZXgpOwpAQCAtMzc5LDcgKzQwNSw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7
CiAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdl
cik7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3Bp
bGxNZSksIGluZm8ucGF5bG9hZEdQUigpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoSW50MzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCBpbmZvLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgaW5mby50YWdHUFIoKSk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgbV9qaXQuZW1pdExvYWQobm9kZUluZGV4LCBpbmZvLnRh
Z0dQUigpLCBpbmZvLnBheWxvYWRHUFIoKSk7CiAjZW5kaWYKQEAgLTU2MSwyMCArNTg3LDIyIEBA
IHByb3RlY3RlZDoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGhhbmRsZXMgSlNWYWx1ZXMs
IGludDMycywgYW5kIGNlbGxzLgotICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ID09IERh
dGFGb3JtYXRJbnRlZ2VyIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHNwaWxs
Rm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29k
ZSBoYW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMsIGNlbGxzIGFuZCBib29sZWFucy4KKyAgICAgICAg
ICAgIEFTU0VSVChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBzcGlsbEZvcm1h
dCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0Qm9vbGVhbiB8
fCAoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpKTsKIAotICAgICAgICAgICAgaWYgKHNwaWxs
Rm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRD
ZWxsKSB7CisgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsgLy8g
SlNWYWx1ZQorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby50YWdHUFIoKSwgSklU
Q29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihpbmZvLnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmVnID0gaW5mby5n
cHIoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlZywgSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYm94IGlu
dDMyIGFuZCBjZWxsIHZhbHVlcyAuLi4KKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGJv
eCBpbnQzMnMsIGJvb2xlYW5zIGFuZCBjZWxscy4KICAgICAgICAgICAgICAgICBpZiAoc3BpbGxG
b3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCiAgICAgICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0Zv
cihzcGlsbE1lKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSAvLyBjZWxscworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKQogICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgSklU
Q29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICB9IGVsc2UgeyAvLyBKU1Zh
bHVlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLnRhZ0dQUigpLCBKSVRDb21w
aWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGlu
Zm8ucGF5bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1l
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShz
cGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODQ4
LDYgKzg3NiwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgICAgICBpbmZvLmluaXRDZWxs
KG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOwogICAgIH0KKyAgICB2b2lkIGJvb2xl
YW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2Rl
IG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgeworICAgICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQorICAgICAg
ICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIG1fZ3Bycy5yZXRh
aW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJCb29sZWFuKTsKKyAgICAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Cisg
ICAgICAgIGluZm8uaW5pdEJvb2xlYW4obm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7
CisgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJl
ZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1h
dEpTLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIzMl82NC5j
cHAJKHJldmlzaW9uIDk4MjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAvLyBzcGVjaWFsbHkgdG8g
bWluaW1pemUgY29kZSBzaXplIGFuZCBleGVjdXRpb24gdGltZS4KICAgICBib29sIGhhdmVVbmJv
eGVkSW50MzJJblJlZ2lzdGVyRmlsZSA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZVVuYm94ZWRDZWxs
SW5SZWdpc3RlckZpbGUgPSBmYWxzZTsKKyAgICBib29sIGhhdmVVbmJveGVkQm9vbGVhbkluUmVn
aXN0ZXJGaWxlID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlRlBScyA9IGZhbHNlOwogICAgIGJvb2wg
aGF2ZUNvbnN0YW50cyA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOwpA
QCAtMTMyLDYgKzEzMyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhP
U1IKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJsZXNbcmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBJbkdQ
UjoKICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAg
ICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKICAgICAgICAgICAgICAgICBjYXNlIEluUGFp
cjoKICAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgogICAgICAgICAgICAgICAgICAgICBpZiAo
IXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsK
QEAgLTE1Myw2ICsxNTUsMTAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUgogICAgICAgICAgICAgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgPSB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5S
ZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRCb29s
ZWFuSW5SZWdpc3RlckZpbGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBJbkZQUjoKICAgICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTc1LDcgKzE4MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4
aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAKICAgICAvLyA0KSBQZXJmb3JtIGFsbCByZWJveGlu
ZyBvZiBpbnRlZ2VycyBhbmQgY2VsbHMsIGV4Y2VwdCBmb3IgdGhvc2UgaW4gcmVnaXN0ZXJzLgog
Ci0gICAgaWYgKGhhdmVVbmJveGVkSW50MzJJblJlZ2lzdGVyRmlsZSB8fCBoYXZlVW5ib3hlZENl
bGxJblJlZ2lzdGVyRmlsZSkgeworICAgIGlmIChoYXZlVW5ib3hlZEludDMySW5SZWdpc3RlckZp
bGUgfHwgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgfHwgaGF2ZVVuYm94ZWRCb29sZWFu
SW5SZWdpc3RlckZpbGUpIHsKICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4
aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKICAgICAg
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKQEAgLTE4Nyw2ICsxOTMsMTAg
QEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgICAgICAgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0
ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQpAQCAtMjIyLDYgKzIzMiwxNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3Bl
Y3VsYXRpdmVXaXRoT1NSCiAgICAgICAgICAgICAgICAgc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwg
cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAg
ICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAgICAgICAgICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgICAgICAgICAgICAgIHN0
b3JlMzIocmVjb3ZlcnkuZ3ByKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZm
ZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgICAgICAgICAgICAgc2NyYXRjaEluZGV4Kys7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7
CisgICAgICAgICAgICAgICAgc3RvcmUzMihyZWNvdmVyeS5ncHIoKSwgcGF5bG9hZEZvcigoVmly
dHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgo
aW5kZXgpXSkgewogICAgICAgICAgICAgICAgIHN0b3JlMzIocmVjb3ZlcnkudGFnR1BSKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKQEAgLTM0
Miw2ICszNjIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAg
ICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIEluR1BSOgogICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAg
ICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKICAgICAgICAgICAgIGNhc2UgSW5GUFI6CiAg
ICAgICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgICAgICAgICBsb2FkMzIocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpy
ZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDk4MjI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksNiArOTksOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAg
ICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFn
R1BSKTsKKyAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CisgICAgICAgIG1fZ3By
cy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySW50ZWdlcik7
CiAgICAgICAgIGluZm8uZmlsbEludGVnZXIocGF5bG9hZEdQUik7CiAgICAgICAgIC8vIElmICFz
dHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SW50ZWdlcjsKQEAgLTE2NSw3ICsxNjcsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQo
bm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgp
OwogICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3Rh
bnQobm9kZUluZGV4KSwgZnByKTsKLSAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKKyAgICAgICAgICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAg
ICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwogICAgICAgICAgICAgICAgIHJldHVy
biBmcHI7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzQ0LDEyICszNDYsNzcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogCiBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKE5vZGVJbmRleCBub2RlSW5kZXgpCiB7Ci0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7Ci0KICNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY0Jvb2xA
JWQgICAiLCBub2RlSW5kZXgpOwogI2VuZGlmCisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRl
eCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CisKKyAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewor
ICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRl
KCk7CisKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAgICAg
IGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7CisgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNWYWx1ZS5hc0Jv
b2xlYW4oKSksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbihncHIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBncHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGdwcjsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOworCisgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZv
cm1hdEpTQm9vbGVhbikKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxS
ZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOworCisgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBn
cHIpOworICAgICAgICBpbmZvLmZpbGxCb29sZWFuKGdwcik7CisgICAgICAgIHJldHVybiBncHI7
CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogeworICAgICAgICBHUFJSZWcg
Z3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKKyAgICAgICAgcmV0
dXJuIGdwcjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CisgICAgY2Fz
ZSBEYXRhRm9ybWF0SlM6IHsKKyAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IGluZm8udGFnR1BSKCk7
CisgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gaW5mby5wYXlsb2FkR1BSKCk7CisgICAgICAg
IG1fZ3Bycy5sb2NrKHRhZ0dQUik7CisgICAgICAgIG1fZ3Bycy5sb2NrKHBheWxvYWRHUFIpOwor
ICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0Jvb2xlYW4p
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykp
KTsKKworICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CisgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKHRhZ0dQUik7CisgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOworICAgICAg
ICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJv
b2xlYW4pOworICAgICAgICBpbmZvLmZpbGxCb29sZWFuKHBheWxvYWRHUFIpOworICAgICAgICBy
ZXR1cm4gcGF5bG9hZEdQUjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6
CisgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJs
ZToKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxs
OgorICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6IHsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW52
YWxpZEdQUlJlZzsKIH0KIApAQCAtMzc1LDEyICs0NDIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdEVxdWFsaQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBvcDEpOwog
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIG9wMik7CiAgICAgCiAgICAgR1BS
UmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwot
ICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CiAgICAgR1BSUmVnIHJl
c3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogICAgIAogICAgIGlmICghcHJl
ZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQpAQCAt
Mzk1LDggKzQ2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkK
ICAgICBtX2ppdC5tb3ZlKEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBkb25lLmxp
bmsoJm1faml0KTsKIAotICAgIG1faml0Lm1vdmUoSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IHJlc3VsdFRhZ0dQUik7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICBib29s
ZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4KTsKIH0KIAogLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBjb21wYXJlIGlzIGZ1c2VkIHdpdGggYSBzdWJzZXF1ZW50IGJyYW5j
aC4KQEAgLTQxNSw3ICs0NzksNiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUm
IG5vZGUsCiAgICAgICAgIC8vIE5vcm1hbCBjYXNlLCBub3QgZnVzZWQgdG8gYnJhbmNoLgogICAg
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubW92ZShJbW0z
MigxKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CkBAIC00MjMsMjAgKzQ4NiwxNyBAQCBib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgICAgIG1faml0Lm1vdmUoSW1t
MzIoMCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogICAgICAgICB0cnVlQ2FzZS5saW5rKCZtX2pp
dCk7CiAKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZyksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vcm1hbCBjYXNlLCBub3QgZnVz
ZWQgdG8gYnJhbmNoLgogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBv
cDEsIG9wMik7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAg
ICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBvcDIu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2Ug
YWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KLSAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlc3VsdFRhZy5ncHIo
KSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2Fk
LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGJv
b2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgIH0K
ICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjcsMTUgKzUyNywxMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCogdnB0
ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlSW5kZXgpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CiAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgR1BSUmVnIHZhbHVlVGFn
R1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVl
LnBheWxvYWRHUFIoKTsKLSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigp
OwogICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKICAg
ICAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVz
dWx0VGFnLmdwcigpKTsKLSAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hl
Y2spCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKQEAgLTQ5NCwxMyArNTUwLDE4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAKICAgICBk
b25lLmxpbmsoJm1faml0KTsKICAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwor
ICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOb2RlJiBub2RlKQogewot
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIGFkZCBmYXN0IHBhdGhzIGZvciBrbm93biBib29sZWFucy4K
LQorICAgIGlmIChpc0tub3duQm9vbGVhbihub2RlLmNoaWxkMSgpKSB8fCBpc0Jvb2xlYW5QcmVk
aWN0aW9uKG1faml0LmdldFByZWRpY3Rpb24obm9kZS5jaGlsZDEoKSkpKSB7CisgICAgICAgIFNw
ZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKKyAgICAgICAgbV9qaXQueG9yMzIo
VHJ1c3RlZEltbTMyKDEpLCB2YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgYm9v
bGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxP
YmplY3RPck90aGVyKCkpIHsKICAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90
KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFp
c0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1cm47CkBAIC01MTIsMzYgKzU3MywyOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFBheWxvYWQodGhpcywgdmFsdWUpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0VGFnKHRoaXMpOwogICAgICAgICBtX2ppdC5jb21wYXJlMzIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0
UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkJvb2xlYW5UYWcpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vblplcm8gPSBtX2ppdC5icmFuY2hEb3VibGVOb25a
ZXJvKHZhbHVlLmZwcigpLCBzY3JhdGNoLmZwcigpKTsKICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogICAgICAgICBub25aZXJvLmxpbmso
Jm1faml0KTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVh
blRhZyksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
LmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRUYWcodGhpcywgdmFsdWUpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMs
IHZhbHVlLCBmYWxzZSk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6Tm90RXF1YWwsIHZhbHVlLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Qm9vbGVhblRhZykpKTsKICAgICBtX2ppdC5tb3ZlKHZhbHVlLnBheWxvYWRHUFIoKSwgcmVzdWx0
UGF5bG9hZC5ncHIoKSk7CiAgICAgbV9qaXQueG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQ
YXlsb2FkLmdwcigpKTsKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwgcmVzdWx0VGFnLmdwcigpKTsKLQotICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3Jt
YXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRU
YWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0
SlNCb29sZWFuKTsKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKIAogICAgIC8vIFRoaXMgY29kZSBpcyBtb3ZlZCBmcm9tIG5vblNwZWN1bGF0
aXZlTG9naWNhbE5vdCwgY3VycmVudGx5IHVudXNlZCEKICNpZiAwCkBAIC02MDUsOSArNjU4LDIz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKICAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAotICAgIC8vIEZJWE1FOiBBZGQgZmFz
dCBjYXNlcyBmb3Iga25vd24gQm9vbGVhbiEKKyAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5j
aGlsZDEoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24g
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CisKKyAgICAgICAgaWYgKHRha2Vu
ID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpaZXJvOworICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAg
ICAgIHRha2VuID0gbm90VGFrZW47CisgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAgICAg
ICAgfQogCi0gICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0T3JPdGhlcigpKSB7CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29u
ZGl0aW9uLCB2YWx1ZS5ncHIoKSwgVHJ1c3RlZEltbTMyKDEpKSwgdGFrZW4pOworICAgICAgICBp
ZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKKyAgICAgICAgICAgIGFkZEJyYW5jaChtX2pp
dC5qdW1wKCksIG5vdFRha2VuKTsKKworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CisgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9i
amVjdE9yT3RoZXIoKSkgewogICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNo
aWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVj
dFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKICAgICAgICAgZW1pdE9iamVjdE9yT3Ro
ZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKQEAgLTcwNyw2ICs3NzQsMTcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAorICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgewor
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9j
YWwoKSksIHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgICAgIC8vIExpa2UgYm9vbGVhblJlc3Vs
dCwgYnV0IGRvbid0IHVzZUNoaWxkcmVuIC0gb3VyIGNoaWxkcmVuIGFyZSBwaGkgbm9kZXMsCisg
ICAgICAgICAgICAvLyBhbmQgZG9uJ3QgcmVwcmVzZW50IHZhbHVlcyB3aXRoaW4gdGhpcyBkYXRh
ZmxvdyB3aXRoIHZpcnR1YWwgcmVnaXN0ZXJzLgorICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBt
X2dwcnMucmV0YWluKHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQm9v
bGVhbik7CisgICAgICAgICAgICBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl0uaW5p
dEJvb2xlYW4obV9jb21waWxlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRh
Zyh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5v
ZGUubG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6dGFnRm9yKG5vZGUubG9jYWwoKSksIHRhZy5ncHIoKSk7CkBAIC03MTcsMTQgKzc5NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9n
cHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsK
ICAgICAgICAgbV9ncHJzLnJldGFpbih0YWcuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlckpTKTsKIAotICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgaWYgKGlzQ2Vs
bFByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKLSAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3Jt
YXRKU0NlbGw7Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90
eXBlKSkKLSAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsKLQorICAgICAgICBEYXRh
Rm9ybWF0IGZvcm1hdCA9IGlzQ2VsbFByZWRpY3Rpb24odmFsdWUubV90eXBlKSA/IERhdGFGb3Jt
YXRKU0NlbGwgOiBEYXRhRm9ybWF0SlM7CiAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVh
bFJlZ2lzdGVyXS5pbml0SlNWYWx1ZShtX2NvbXBpbGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCB0
YWcuZ3ByKCksIHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtNzY0LDcgKzgzNSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVB
cnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIHsgLy8gRklYTUU6IEFkZCBCb29sZWFuUHJl
ZGljdGlvbiBoYW5kbGluZworICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CisgICAgICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFn
R1BSKCksIEpJVENvbXBpbGVyOjp0YWdGb3Iobm9kZS5sb2NhbCgpKSk7CkBAIC0yMzAzLDcgKzIz
NzgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3RvdHlwZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKIAog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IGJvb2xlYW5UYWcodGhpcywgdmFsdWUpOwogCiAgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZh
bHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgcHJvdG90eXBlUmVnID0gcHJvdG90eXBlLmdwcigp
OwpAQCAtMjMzMSw4ICsyNDA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2hSZWcpOwogCiAgICAgICAgIHB1dFJlc3VsdC5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCBib29sZWFu
VGFnLmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChib29sZWFuVGFnLmdwcigpLCBzY3Jh
dGNoUmVnLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGJv
b2xlYW5SZXN1bHQoc2NyYXRjaFJlZywgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5ODIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw5IEBA
IHZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0KSBjb25zdAogICAgIGNhc2UgQ2VsbElu
UmVnaXN0ZXJGaWxlOgogICAgICAgICBmcHJpbnRmKG91dCwgIkNlbGwiKTsKICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0
LCAiQm9vbCIpOworICAgICAgICBicmVhazsKICAgICBjYXNlIEhhdmVOb2RlOgogICAgICAgICBm
cHJpbnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAg
LTcwLDEyICs3MywxOCBAQCB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25z
CiAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsOgogICAgICAgICBm
cHJpbnRmKG91dCwgIihjZWxsKSIpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFscmVhZHlJ
blJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW46CisgICAgICAgIGZwcmludGYob3V0LCAiKGJv
b2wpIik7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5HUFI6CiAgICAgICAgIGZwcmludGYo
b3V0LCAiJSUlcyIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICBmcHJpbnRmKG91dCwgImludDMy
KCUlJXMpIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgZnByaW50ZihvdXQsICJib29sKCUl
JXMpIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSW5GUFI6CiAgICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQUkluZm86OmRlYnVnTmFt
ZShmcHIoKSkpOwogICAgICAgICBicmVhazsKQEAgLTQxNSw3ICs0MjQsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5
VlB0cikpKTsKLSAgICAgICAgfSAvLyBGSVhNRTogbmVlZCBib29sZWFuIHByZWRpY3Rpb25zLCBi
dXQgd2UgY3VycmVudGx5IGRvbid0IGhhdmUgdGhhdCBzdXBwb3J0LgorICAgICAgICB9IGVsc2Ug
aWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Qm9vbGVhblRhZykpKTsKICNlbmRpZgogICAgIH0KIH0KQEAgLTQ0Myw2ICs0NTMsOSBAQCBWYWx1
ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsCiAgICAgY2FzZSBDZWxsSW5SZWdp
c3RlckZpbGU6CiAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRDZWxsKCk7CiAKKyAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmlsZToK
KyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5i
b3hlZEJvb2xlYW4oKTsKKwogICAgIGNhc2UgSGF2ZU5vZGU6IHsKICAgICAgICAgaWYgKG1faml0
LmlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKQogICAgICAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291
cmNlLm5vZGVJbmRleCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5ODIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIs
NyBAQCBlbnVtIFZhbHVlU291cmNlS2luZCB7CiAgICAgVmFsdWVJblJlZ2lzdGVyRmlsZSwKICAg
ICBJbnQzMkluUmVnaXN0ZXJGaWxlLAogICAgIENlbGxJblJlZ2lzdGVyRmlsZSwKKyAgICBCb29s
ZWFuSW5SZWdpc3RlckZpbGUsCiAgICAgSGF2ZU5vZGUKIH07CiAKQEAgLTEwMSw2ICsxMDIsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVy
RmlsZSk7CiAgICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCBpc0J5
dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVT
b3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rp
b24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQm9vbGVhbklu
UmVnaXN0ZXJGaWxlKTsKICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3Rl
ckZpbGUpOwogICAgIH0KICAgICAKQEAgLTE1MCw5ICsxNTMsMTEgQEAgZW51bSBWYWx1ZVJlY292
ZXJ5VGVjaG5pcXVlIHsKICAgICAvLyBJdCdzIGFscmVhZHkgaW4gdGhlIHJlZ2lzdGVyIGZpbGUg
YnV0IHVuYm94ZWQuCiAgICAgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzIsCiAg
ICAgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbCwKKyAgICBBbHJlYWR5SW5SZWdp
c3RlckZpbGVBc1VuYm94ZWRCb29sZWFuLAogICAgIC8vIEl0J3MgaW4gYSByZWdpc3Rlci4KICAg
ICBJbkdQUiwKICAgICBVbmJveGVkSW50MzJJbkdQUiwKKyAgICBVbmJveGVkQm9vbGVhbkluR1BS
LAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgSW5QYWlyLAogI2VuZGlmCkBAIC0xOTYsMTUg
KzIwMSwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAor
ICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJv
b2xlYW4oKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW47
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIHN0YXRpYyBWYWx1ZVJl
Y292ZXJ5IGluR1BSKEdQUlJlZyBncHIsIERhdGFGb3JtYXQgZGF0YUZvcm1hdCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdl
ciB8fCBkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKTsKKyAgICAgICAgQVNTRVJUKGRhdGFG
b3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0Q2Vs
bCB8fCBkYXRhRm9ybWF0ID09IERhdGFGb3JtYXRCb29sZWFuKTsKICNlbmRpZgogICAgICAgICBW
YWx1ZVJlY292ZXJ5IHJlc3VsdDsKICAgICAgICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1h
dEludGVnZXIpCiAgICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBVbmJveGVkSW50MzJJ
bkdQUjsKKyAgICAgICAgZWxzZSBpZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0Qm9vbGVhbikK
KyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IFVuYm94ZWRCb29sZWFuSW5HUFI7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluR1BSOwogICAg
ICAgICByZXN1bHQubV9zb3VyY2UuZ3ByID0gZ3ByOwpAQCAtMjYzLDcgKzI3Nyw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBHUFJSZWcgZ3ByKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X3RlY2huaXF1ZSA9PSBJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVkSW50MzJJbkdQUik7
CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBV
bmJveGVkSW50MzJJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVkQm9vbGVhbkluR1BSKTsK
ICAgICAgICAgcmV0dXJuIG1fc291cmNlLmdwcjsKICAgICB9CiAgICAgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>