<?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>162371</bug_id>
          
          <creation_ts>2016-09-21 20:16:56 -0700</creation_ts>
          <short_desc>[JSC] Use an inline cache to generate op_negate</short_desc>
          <delta_ts>2016-09-23 02:38:08 -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>New Bugs</component>
          <version>WebKit 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>
          <dependson>162486</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1232282</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-21 20:16:56 -0700</bug_when>
    <thetext>[JSC] Use an inline cache to generate op_negate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232285</commentid>
    <comment_count>1</comment_count>
      <attachid>289511</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-21 20:22:07 -0700</bug_when>
    <thetext>Created attachment 289511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232588</commentid>
    <comment_count>2</comment_count>
      <attachid>289511</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-22 13:40:19 -0700</bug_when>
    <thetext>Comment on attachment 289511
Patch

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

Will continue to review later but just a couple comments

&gt; Source/JavaScriptCore/bytecode/ArithProfile.h:94
&gt; +        ASSERT(lhsObservedType().isEmpty());

Should be rhs not lhs

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3018
&gt; +JITNegIC* CodeBlock::addJITNegIC()

I believe you&apos;re missing code in CodeBlock also that switches on opcodes to determine if it has an ArithProfile*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232711</commentid>
    <comment_count>3</comment_count>
      <attachid>289630</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-22 16:40:29 -0700</bug_when>
    <thetext>Created attachment 289630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232735</commentid>
    <comment_count>4</comment_count>
      <attachid>289630</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-22 18:04:17 -0700</bug_when>
    <thetext>Comment on attachment 289630
Patch

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

r=me w/ suggestions/comments.

&gt; Source/JavaScriptCore/bytecode/ArithProfile.h:95
&gt; +        ASSERT(lhsObservedType().isEmpty());
&gt; +        ASSERT(rhsObservedType().isEmpty());

Please ignore my comment here before, I&apos;m it&apos;s ok just with lhsObservedType(). I think I commented because I thought you were asserting something else, but yeah, observed type obviously should start off as empty.

I wonder if stylistically it&apos;s worth just coming up with a name instead of &quot;lhs&quot; for the single operand math ops. We can still reuse the &apos;lhs&apos; slot, but maybe we can call it different things in different functions. Up to you. For example, it&apos;s a bit weird that the function below is simply called &apos;observeLHS&apos; instead of something like &apos;observeInput&apos; or something.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3018
&gt; +JITNegIC* CodeBlock::addJITNegIC()

I think you need to modify the implementations of:
arithProfileForBytecodeOffset
and
arithProfileForPC

&gt; Source/JavaScriptCore/jit/JITArithmetic.cpp:832
&gt; +        mathICGenerationState.slowPathCall = callOperation(reinterpret_cast&lt;J_JITOperation_EJMic&gt;(repatchFunction), resultRegs, srcRegs, TrustedImmPtr(mathIC));

I know this is how I implemented it originally, but I wonder if it&apos;s worth also checking shouldSlowPathRepatch here. I guess after the first call of repatching, we will never try to repatch again, anyways. Maybe it&apos;s not worth changing.

&gt; Source/JavaScriptCore/jit/JITMathIC.h:76
&gt; +            if (!profileValidator(arithProfile)) {

Style: The name validator confuses me here. Maybe we can call this &quot;isProfileEmpty&quot;?

&gt; Source/JavaScriptCore/jit/JITNegGenerator.cpp:67
&gt; +            jit.move(CCallHelpers::TrustedImm64((int64_t)(1ull &lt;&lt; 63)), m_result.payloadGPR());

Style: I think this should be a static_cast by WebKit style.

&gt; Source/JavaScriptCore/jit/JITNegGenerator.cpp:70
&gt; +            jit.move(CCallHelpers::TrustedImm64((int64_t)(1ull &lt;&lt; 63)), m_scratchGPR);

ditto

&gt; Source/JavaScriptCore/jit/JITNegGenerator.cpp:75
&gt; +        jit.xor32(CCallHelpers::TrustedImm32(1 &lt;&lt; 31), m_result.tagGPR());

Shouldn&apos;t this be the payload not tag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232755</commentid>
    <comment_count>5</comment_count>
      <attachid>289647</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-22 19:04:01 -0700</bug_when>
    <thetext>Created attachment 289647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232775</commentid>
    <comment_count>6</comment_count>
      <attachid>289647</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-22 20:52:38 -0700</bug_when>
    <thetext>Comment on attachment 289647
Patch

Clearing flags on attachment: 289647

Committed r206289: &lt;http://trac.webkit.org/changeset/206289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232776</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-22 20:52:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289511</attachid>
            <date>2016-09-21 20:22:07 -0700</date>
            <delta_ts>2016-09-22 16:40:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162371-20160921201918.patch</filename>
            <type>text/plain</type>
            <size>59098</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
ZWUwMWFlNDM0OGRmMjNlMjAwMTVmMTUyYjQ1YzA2NzhkY2MyZDg2Li42ZDNkNjU0ODlkY2U3YTk1
OTRkYTE1ZTc5MjNkOGQwMzE5YzAyZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxNi0wOS0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgYW4gaW5saW5lIGNhY2hlIHRvIGdlbmVyYXRlIG9w
X25lZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNlIGFuIGlubGluZSBjYWNoZSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBjb2RlCisgICAgICAg
IHJlcXVpcmVkIHRvIGltcGxlbWVudCBvcF9uZWdhdGUuCisKKyAgICAgICAgKiBieXRlY29kZS9B
cml0aFByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJpdGhQcm9maWxlOjpBcml0aFByb2ZpbGUp
OgorICAgICAgICAoSlNDOjpBcml0aFByb2ZpbGU6Om9ic2VydmVMSFMpOgorICAgICAgICAoSlND
OjpBcml0aFByb2ZpbGU6Om9ic2VydmVMSFNBbmRSSFMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5
dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTmVnSUMpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnlPcCk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlVuYXJ5T3BOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWF0aElDKToKKyAg
ICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmVnYXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZWdhdGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0
aElDU2xvdyk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklU
OjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBqaXQvSklUTWF0aElDLmg6CisgICAgICAgIChK
U0M6OkpJVE1hdGhJQzo6Z2VuZXJhdGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpjYW5HZW5lcmF0
ZVdpdGhCaW5hcnlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Y2FuR2VuZXJhdGVXaXRoVW5hcnlQ
cm9maWxlKToKKyAgICAgICAgKiBqaXQvSklUTWF0aElDRm9yd2FyZHMuaDoKKyAgICAgICAgKiBq
aXQvSklUTmVnR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpn
ZW5lcmF0ZUlubGluZSk6CisgICAgICAgIChKU0M6OkpJVE5lZ0dlbmVyYXRvcjo6Z2VuZXJhdGVG
YXN0UGF0aCk6CisgICAgICAgICogaml0L0pJVE5lZ0dlbmVyYXRvci5oOgorICAgICAgICAoSlND
OjpKSVROZWdHZW5lcmF0b3I6OkpJVE5lZ0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVE5l
Z0dlbmVyYXRvcjo6YXJpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9y
OjpkaWRFbWl0RmFzdFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVROZWdHZW5lcmF0
b3I6OmVuZEp1bXBMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9y
OjpzbG93UGF0aEp1bXBMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206
CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjp1
cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgorICAgICAgICAoSlNDOjpTTE9XX1BB
VEhfREVDTCk6CisKIDIwMTYtMDktMTkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgTWFrZSBIYXNPd25Qcm9wZXJ0eSBmYXN0ZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Bcml0aFByb2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Bcml0aFByb2ZpbGUuaAppbmRleCBkNDMwMTEzYjJiODA5ZTA1NmY1
MDAwNjg5Y2MzOGY4M2IxZjgxZTcwLi4xY2JhMzE3Y2IwNDcxNTZmOWY2N2FhNzZiMTNkZmVmNmE0
ZjM2NWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJpdGhQ
cm9maWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FyaXRoUHJvZmls
ZS5oCkBAIC04Nyw2ICs4NywxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljX2Fzc2VydChzcGVjaWFs
RmFzdFBhdGhCaXQgJiBjbGVhckxoc09ic2VydmVkVHlwZUJpdE1hc2ssICJUaGVzZSBiaXRzIHNo
b3VsZCBpbnRlcnNlY3QuIik7CiAgICAgc3RhdGljX2Fzc2VydChzcGVjaWFsRmFzdFBhdGhCaXQg
PiB+Y2xlYXJMaHNPYnNlcnZlZFR5cGVCaXRNYXNrLCAiVGhlc2UgYml0cyBzaG91bGQgbm90IGlu
dGVyc2VjdCBhbmQgc3BlY2lhbEZhc3RQYXRoQml0IHNob3VsZCBiZSBhIGhpZ2hlciBiaXQuIik7
CiAKKyAgICBBcml0aFByb2ZpbGUoUmVzdWx0VHlwZSBhcmcpCisgICAgeworICAgICAgICBtX2Jp
dHMgPSAoYXJnLmJpdHMoKSA8PCBsaHNSZXN1bHRUeXBlU2hpZnQpOworICAgICAgICBBU1NFUlQo
bGhzUmVzdWx0VHlwZSgpLmJpdHMoKSA9PSBhcmcuYml0cygpKTsKKyAgICAgICAgQVNTRVJUKGxo
c09ic2VydmVkVHlwZSgpLmlzRW1wdHkoKSk7CisgICAgfQorCiAgICAgQXJpdGhQcm9maWxlKFJl
c3VsdFR5cGUgbGhzLCBSZXN1bHRUeXBlIHJocykKICAgICB7CiAgICAgICAgIG1fYml0cyA9IChs
aHMuYml0cygpIDw8IGxoc1Jlc3VsdFR5cGVTaGlmdCkgfCAocmhzLmJpdHMoKSA8PCByaHNSZXN1
bHRUeXBlU2hpZnQpOwpAQCAtOTQsNyArMTAxLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
bGhzT2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKHJoc09ic2VydmVk
VHlwZSgpLmlzRW1wdHkoKSk7CiAgICAgfQotICAgIEFyaXRoUHJvZmlsZSgpIHsgfQorICAgIEFy
aXRoUHJvZmlsZSgpID0gZGVmYXVsdDsKIAogICAgIHN0YXRpYyBBcml0aFByb2ZpbGUgZnJvbUlu
dCh1aW50MzJfdCBiaXRzKQogICAgIHsKQEAgLTE3MCw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByaHNTYXdOdW1iZXIoKSB7IHNldFJoc09ic2VydmVkVHlwZShyaHNPYnNlcnZlZFR5cGUo
KS53aXRoTnVtYmVyKCkpOyB9CiAgICAgdm9pZCByaHNTYXdOb25OdW1iZXIoKSB7IHNldFJoc09i
c2VydmVkVHlwZShyaHNPYnNlcnZlZFR5cGUoKS53aXRoTm9uTnVtYmVyKCkpOyB9CiAKLSAgICB2
b2lkIG9ic2VydmVMSFNBbmRSSFMoSlNWYWx1ZSBsaHMsIEpTVmFsdWUgcmhzKQorICAgIHZvaWQg
b2JzZXJ2ZUxIUyhKU1ZhbHVlIGxocykKICAgICB7CiAgICAgICAgIEFyaXRoUHJvZmlsZSBuZXdQ
cm9maWxlID0gKnRoaXM7CiAgICAgICAgIGlmIChsaHMuaXNOdW1iZXIoKSkgewpAQCAtMTgxLDYg
KzE4OCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmV3UHJvZmls
ZS5saHNTYXdOb25OdW1iZXIoKTsKIAorICAgICAgICBtX2JpdHMgPSBuZXdQcm9maWxlLmJpdHMo
KTsKKyAgICB9CisKKyAgICB2b2lkIG9ic2VydmVMSFNBbmRSSFMoSlNWYWx1ZSBsaHMsIEpTVmFs
dWUgcmhzKQorICAgIHsKKyAgICAgICAgb2JzZXJ2ZUxIUyhsaHMpOworCisgICAgICAgIEFyaXRo
UHJvZmlsZSBuZXdQcm9maWxlID0gKnRoaXM7CiAgICAgICAgIGlmIChyaHMuaXNOdW1iZXIoKSkg
ewogICAgICAgICAgICAgaWYgKHJocy5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgbmV3UHJv
ZmlsZS5yaHNTYXdJbnQzMigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uCmluZGV4IGIxYWJhYjllMDFkNTI5MzAyOTYxMDRkMjYxNWFkOGQz
MWViYzdiNTQuLmRjNTk5ODA1NjkxY2RhNTdiNWQzNjExNTk5ZGQ1ZjI4ZDcxMDJkYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24KQEAg
LTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2RlYyIsICJsZW5ndGgi
IDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fbnVtYmVyIiwgImxlbmd0aCIg
OiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19zdHJpbmciLCAibGVuZ3RoIiA6
IDMgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25lZ2F0ZSIsICJsZW5ndGgiIDogMyB9
LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbmVnYXRlIiwgImxlbmd0aCIgOiA0IH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9hZGQiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX211bCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfZGl2IiwgImxlbmd0aCIgOiA1IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGMwYjAzMWI0MzY1YTg5ZGMzOTQzZTIzNjc1
Y2Y4OWViMzM1MWM4YjAuLjE2OWU0NGE3NDM1ZjJjMDY1M2JkZmUzOGU0N2JlZjYwNDMxZmUyMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0z
MDE1LDYgKzMwMTUsMTEgQEAgSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklUU3ViSUMoKQogICAg
IHJldHVybiBtX3N1YklDcy5hZGQoKTsKIH0KIAorSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklU
TmVnSUMoKQoreworICAgIHJldHVybiBtX25lZ0lDcy5hZGQoKTsKK30KKwogU3RydWN0dXJlU3R1
YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsK
ICAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IG1fc3R1YkluZm9zKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggY2I3ZmQ3NGMw
NWUwZGQwZDZmOWRmMzg1NDdkM2QwYWEwMzg2OTNkNS4uNTQyMWU1ZTk5NTRiZGY4NmYzNzNmOGJj
MTcyMjYzOTY0Y2JiOGE2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaApAQCAtMjQ4LDYgKzI0OCw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTdHViSW5m
byogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSk7CiAgICAgSklUQWRkSUMqIGFkZEpJVEFkZElDKCk7
CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKCk7CisgICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lD
KCk7CiAgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKCk7CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJ
bmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2lu
KCk7IH0KICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0VuZCgp
IHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CkBAIC0xMDAwLDYgKzEwMDEsNyBAQCBwcml2
YXRlOgogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz4gbV9zdHViSW5mb3M7CiAgICAgQmFnPEpJ
VEFkZElDPiBtX2FkZElDczsKICAgICBCYWc8SklUTXVsSUM+IG1fbXVsSUNzOworICAgIEJhZzxK
SVROZWdJQz4gbV9uZWdJQ3M7CiAgICAgQmFnPEpJVFN1YklDPiBtX3N1YklDczsKICAgICBCYWc8
QnlWYWxJbmZvPiBtX2J5VmFsSW5mb3M7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlu
a0luZm9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBlZTkyYzMyYWMyOTY2ZTNkZWU0ZTMzNzljZDky
NThjMmQ3ODkyYTZkLi40N2RjZmYyZDQwMjE5MGMyZmY2ZjM3NzBlMjNiYjdiMTI2YjJiMGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTU3OSwxMCArMTU3OSwyNCBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdE1vdmUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMp
CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnlPcChPcGNvZGVJRCBv
cGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiB7Ci0gICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShvcF90b19udW1iZXIgIT0gb3Bjb2RlSUQsICJvcF90b19udW1iZXIgaXMg
cHJvZmlsZWQuIik7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShvcF90b19udW1iZXIgIT0gb3Bj
b2RlSUQsICJvcF90b19udW1iZXIgaGFzIGEgVmFsdWUgUHJvZmlsZS4iKTsKKyAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKG9wX25lZ2F0ZSAhPSBvcGNvZGVJRCwgIm9wX25lZ2F0ZSBoYXMgYW4gQXJp
dGggUHJvZmlsZS4iKTsKICAgICBlbWl0T3Bjb2RlKG9wY29kZUlEKTsKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3Jj
LT5pbmRleCgpKTsKKworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0VW5hcnlPcChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBzcmMsIE9wZXJhbmRUeXBlcyB0eXBlcykKK3sKKyAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG9wX3RvX251bWJlciAhPSBvcGNvZGVJRCwgIm9wX3RvX251bWJlciBoYXMgYSBW
YWx1ZSBQcm9maWxlLiIpOworICAgIGVtaXRPcGNvZGUob3Bjb2RlSUQpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChz
cmMtPmluZGV4KCkpOworCisgICAgaWYgKG9wY29kZUlEID09IG9wX25lZ2F0ZSkKKyAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKEFyaXRoUHJvZmlsZSh0eXBlcy5maXJzdCgpKS5iaXRzKCkp
OwogICAgIHJldHVybiBkc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA5MDQ3M2JmMDJlNjg0Y2Zh
YWU1M2MxMzU3MmI4OGRiNTFkYmFmZWE5Li5mMmVkYzgwY2I0OGJjNTZiYjFlZDgwM2NlMDkyZjY3
MmM0N2VkMjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC01MTEsNiArNTExLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkR2xvYmFsT2JqZWN0KFJlZ2lzdGVySUQq
IGRzdCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5T3AoT3Bjb2RlSUQsIFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVu
YXJ5T3AoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjLCBPcGVyYW5k
VHlwZXMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VW5hcnlPcFByb2ZpbGVkKE9wY29kZUlE
LCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRCaW5hcnlPcChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMx
LCBSZWdpc3RlcklEKiBzcmMyLCBPcGVyYW5kVHlwZXMpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0RXF1YWxpdHlPcChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMx
LCBSZWdpc3RlcklEKiBzcmMyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA5ZmM5Njk1YjEwMjJjNjJhODEwYmIwNTZi
Zjk3ZmFhODMyNGE3YTlhLi4zNGM3MmVmYzFkZGNmMzE5NmUwNjQ3OGI1YTBmM2Q4ODZkN2VlMWIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCkBAIC0xNjEwLDcgKzE2MTAsNyBAQCBSZWdpc3RlcklEKiBVbmFyeU9wTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqCiB7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNyYyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIp
OwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8ocG9zaXRpb24oKSwgcG9zaXRpb24o
KSwgcG9zaXRpb24oKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcGNvZGVJ
RCgpLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzcmMuZ2V0KCkpOworICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3Bjb2RlSUQoKSwgZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgc3JjLmdldCgpLCBPcGVyYW5kVHlwZXMobV9leHByLT5yZXN1bHREZXNj
cmlwdG9yKCkpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVuYXJ5
UGx1c05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggOTNiMzI1NjM5
MmQzYzM4MmRlNmExZjRjNmI5OTMxMjI0ZWU3YWZiMS4uOGFhODJmYTNmYmM1YzljZmQwYTE3NjY2
MjMzZDI4Y2YwMmU2ZTA3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTM0MzIsNyArMzQzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2RlKiBub2RlKQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBSZXBhdGNoaW5nRnVuY3Rpb24sIHR5cGVuYW1lIE5vblJlcGF0
Y2hpbmdGdW5jdGlvbj4KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSog
bm9kZSwgSklUTWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgYm9vbCBuZWVkc1NjcmF0Y2hHUFJS
ZWcsIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24gcmVwYXRjaGlu
Z0Z1bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rpb24gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJQyhOb2RlKiBub2RlLCBKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBib29sIG5lZWRzU2NyYXRjaEdQUlJlZywgYm9vbCBu
ZWVkc1NjcmF0Y2hGUFJSZWcsIFJlcGF0Y2hpbmdGdW5jdGlvbiByZXBhdGNoaW5nRnVuY3Rpb24s
IE5vblJlcGF0Y2hpbmdGdW5jdGlvbiBub25SZXBhdGNoaW5nRnVuY3Rpb24pCiB7CiAgICAgRWRn
ZSYgbGVmdENoaWxkID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgRWRnZSYgcmlnaHRDaGlsZCA9IG5v
ZGUtPmNoaWxkMigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCmluZGV4IDQ3ZWFkMzBhYzVjNTVmMmMzNTg2ZmQyNjBmYjQ0Mjg4ZTA2ODdkOWIuLmU3
YTI5YjQzMzQ2YjI0ODIzYTk5ODlmZWU5NWQ2NDA1YzMxOGRhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTI1MTUsNyArMjUxNSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVTaGlmdE9wKE5vZGUqKTsKIAogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFJlcGF0Y2hpbmdGdW5jdGlvbiwgdHlwZW5h
bWUgTm9uUmVwYXRjaGluZ0Z1bmN0aW9uPgotICAgIHZvaWQgY29tcGlsZU1hdGhJQyhOb2RlKiwg
SklUTWF0aElDPEdlbmVyYXRvcj4qLCBib29sIG5lZWRzU2NyYXRjaEdQUlJlZywgYm9vbCBuZWVk
c1NjcmF0Y2hGUFJSZWcsIFJlcGF0Y2hpbmdGdW5jdGlvbiwgTm9uUmVwYXRjaGluZ0Z1bmN0aW9u
KTsKKyAgICB2b2lkIGNvbXBpbGVNYXRoSUMoTm9kZSosIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiwgYm9vbCBuZWVkc1NjcmF0Y2hHUFJSZWcsIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnLCBS
ZXBhdGNoaW5nRnVuY3Rpb24sIE5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAKICAgICB2b2lkIGNv
bXBpbGVBcml0aERvdWJsZVVuYXJ5T3AoTm9kZSosIGRvdWJsZSAoKmRvdWJsZUZ1bmN0aW9uKShk
b3VibGUpLCBkb3VibGUgKCpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSk7
CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGE3YjZlYmIyZDJjNDk5ODI2MTQ1NTY3
ODZkN2E1ZGIxNzNmYmJmMzUuLmQ3N2RiNDNhMDFmMzNkMzU2MGRlMDAzZjU5YTU2ZmFjNjZjYzEy
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
QEAgLTE1NjAsNyArMTU2MCw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvcj4KLSAgICB2b2lkIGNvbXBpbGVNYXRoSUMoSklUTWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgRnVuY3Rpb25QdHIgcmVwYXRjaGluZ0Z1bmN0aW9uLCBGdW5jdGlvblB0
ciBub25SZXBhdGNoaW5nRnVuY3Rpb24pCisgICAgdm9pZCBjb21waWxlTWF0aElDKEpJVEJpbmFy
eU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEZ1bmN0aW9uUHRyIHJlcGF0Y2hpbmdGdW5jdGlv
biwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQogICAgIHsKICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fbm9kZTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAppbmRleCA4NjRkZjc0OWZhNWFiMzdmNTAzNDY4NTQ0Njk4YmQxY2IwNTcwNmJk
Li5mYzllZTcyODg4MTBhMzNiZjk5ODlkYzYwMmY0MWQzMjk1NTY1NTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKQEAgLTIyNjYsNiArMjI2NiwxNSBAQCBwdWJs
aWM6CiAgICAgICAgIG1vdmUoYXJnNCwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKICAgICB9CiAj
ZW5kaWYKKworICAgIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEpTVmFsdWVSZWdz
IGFyZykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZy5ncHIoKSk7CisjZWxzZQorICAgICAgICBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnLnBheWxvYWRHUFIoKSwgYXJnLnRh
Z0dQUigpKTsKKyNlbmRpZgorICAgIH0KICAgICAKICAgICB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQogICAgIHsKQEAg
LTIyNzYsNiArMjI4NSwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShKU1ZhbHVlUmVncyBhcmcxLCBUcnVzdGVkSW1tUHRy
IGFyZzIpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLmdwcigpLCBhcmcyKTsKKyNlbHNlCisgICAgICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIo
KSwgYXJnMS50YWdHUFIoKSwgYXJnMik7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcy
LCBUcnVzdGVkSW1tUHRyIGFyZzMpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yMjkz
LDYgKzIzMTEsMTUgQEAgcHVibGljOgogICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMS5wYXlsb2FkR1BSKCksIGFyZzEudGFnR1BSKCks
IGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBhcmczLCBhcmc0KTsKICNlbmRpZgog
ICAgIH0KKworICAgIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEpTVmFsdWVSZWdz
IGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgVHJ1c3RlZEltbVB0ciBhcmczKQorICAgIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MS5ncHIoKSwgYXJnMiwgYXJnMyk7CisjZWxzZQorICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMS5wYXlsb2FkR1BSKCksIGFyZzEudGFn
R1BSKCksIGFyZzIsIGFyZzMpOworI2VuZGlmCisgICAgfQogICAgIAogICAgIHZvaWQgc2V0dXBB
cmd1bWVudHMoSlNWYWx1ZVJlZ3MgYXJnMSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApp
bmRleCA0NzRiZjdhN2ExNDUxMzEzY2I0ZWY4Y2E3MjkzZmM5OGQ2ZjkyYzE1Li4wYWRkMjllOTMw
MmNkNmNhMDU0NTY4NmZiODZhMTlhNDdlMGNjYjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTY5OCwxMCArNjk4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzT3Bl
cmFuZENvbnN0YW50Q2hhcihpbnQgc3JjKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxl
ZEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVE1hdGhJQzxHZW5lcmF0
b3I+KiwgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9u
KTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiwgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRG
dW5jdGlvbiwgdHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KKyAgICAgICAgdm9pZCBlbWl0
TWF0aElDRmFzdChKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIEluc3RydWN0aW9uKiwgUHJv
ZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CiAKICAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5
cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KLSAgICAg
ICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRNYXRoSUM8R2VuZXJhdG9yPiosIEluc3RydWN0aW9u
KiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbik7CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVy
YXRvcj4qLCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmls
ZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgorICAgICAgICB2b2lkIGVtaXRN
YXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBJbnN0cnVjdGlvbiosIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24pOwog
CiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKICAgICAgICAgewpAQCAtNzQ2LDYgKzc1MCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VDLCBpbnQsIEpTQ2VsbCopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDLCBKU0NlbGwqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSiwgaW50LCBHUFJSZWcpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VKLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNz
aUpJLCBpbnQsIFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnLCBVbmlxdWVkU3RyaW5nSW1wbCop
OwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFdpdGhQcm9maWxl
VGFnLCBKX0pJVE9wZXJhdGlvbl9FU3NpSkksIGludCwgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJS
ZWcsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CkBAIC03NTUsOSArNzYwLDExIEBAIG5hbWVzcGFjZSBK
U0MgewogI2VuZGlmCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUpJLCBpbnQsIEdQUlJlZywgVW5pcXVlZFN0cmluZ0ltcGwqKTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
SkosIGludCwgR1BSUmVnLCBHUFJSZWcpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQXJwLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJl
Z3MsIEFyaXRoUHJvZmlsZSopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycCwgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBK
U1ZhbHVlUmVncywgQXJpdGhQcm9maWxlKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJl
Z3MsIEpTVmFsdWVSZWdzKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FSkpBcnBNaWMsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywg
SlNWYWx1ZVJlZ3MsIEFyaXRoUHJvZmlsZSosIFRydXN0ZWRJbW1QdHIpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKTWljLCBKU1Zh
bHVlUmVncywgSlNWYWx1ZVJlZ3MsIFRydXN0ZWRJbW1QdHIpOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYywgSlNWYWx1ZVJl
Z3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgVHJ1c3RlZEltbVB0cik7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQXAsIGlu
dCwgR1BSUmVnLCBHUFJSZWcsIEFycmF5UHJvZmlsZSopOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkJ5LCBpbnQsIEdQUlJlZywg
R1BSUmVnLCBCeVZhbEluZm8qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCmluZGV4IGM2Yjc4NTM3N2RkNWQ2NzE2OGE2MjU1ZjE4ZjU1ODAzMWEwOGQ0NmMu
LjU0OTE3NTkwMzFkZTc2OTk1N2M2YjBiODQ2ZmI3YWIzODYzZTdhNjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcApAQCAtNDY5LDM3ICs0NjksMTcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gc3JjUmVn
czsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVn
cyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gc3JjUmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2Vu
ZGlmCi0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgc3JjUmVncyk7Ci0KLSAgICBK
SVROZWdHZW5lcmF0b3IgZ2VuKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwotICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQotICAgIEFTU0VSVChnZW4uZGlkRW1pdEZh
c3RQYXRoKCkpOwotICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwotCi0gICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7CisgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVE5lZ0lDKCk7CisgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlDKTsKKyAgICBlbWl0TWF0aElDRmFzdChuZWdhdGVJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVPZmZzZXQobV9zbG93
Q2FzZXMsIGl0ZXIsIG1fYnl0ZWNvZGVPZmZzZXQpOwogCi0gICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9uZWdhdGUpOwot
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9j
YXN0PEpJVE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24pKTsKKyAgICBlbWl0TWF0aElDU2xvdyhuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBTbmlwcGV0R2VuZXJhdG9yPgpAQCAtNjk4LDcgKzY3OCw1NCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5PgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQ
cm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgotdm9pZCBKSVQ6
OmVtaXRNYXRoSUNGYXN0KEpJVE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwg
Tm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQordm9pZCBKSVQ6OmVtaXRN
YXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBO
b25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCit7CisgICAgaW50IHJlc3Vs
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wZXJhbmQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSByZWdUMjsKKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyNlbmRpZgor
CisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVs
KCk7CisjZW5kaWYKKworICAgIEFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gKmJpdHdpc2Vf
Y2FzdDxBcml0aFByb2ZpbGUqPigmY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Cisg
ICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBz
Y3JhdGNoR1BSLCBhcml0aFByb2ZpbGUpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kLCBzcmNSZWdzKTsKKworICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFs
dWU7CisKKyAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5s
aW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOworICAgIGlmICghZ2VuZXJhdGVkSW5s
aW5lQ29kZSkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzLCAm
YXJpdGhQcm9maWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihu
b25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOwor
CisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgp
OworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAg
ICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
aW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
ICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKKyAgICB9KTsKKyNlbmRp
ZgorCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9u
LCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgordm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0
KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmls
ZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQogewogICAgIGludCByZXN1bHQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwpAQCAtNzc0LDcgKzgwMSw1MiBAQCB2b2lkIEpJVDo6ZW1pdE1h
dGhJQ0Zhc3QoSklUTWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUg
UmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVE1hdGhJQzxHZW5l
cmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9u
IHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBw
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9u
LCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQoreworICAgIE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2Vu
ZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CisgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworCisgICAgaW50IHJlc3Vs
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyNlbHNlCisgICAgSlNW
YWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisjZW5kaWYKKwor
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVs
KCk7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiaXR3aXNlX2Nhc3Q8QXJpdGhQcm9maWxlKj4o
JmN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAobWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKKyAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKHJlaW50ZXJwcmV0X2Nh
c3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0
UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRp
b24ocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBs
YWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nhc3Q8Y2hh
cio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7CisgICAg
fSk7CisjZW5kaWYKKworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKKworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1f
aW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlv
biktPnZhbHVlOworICAgICAgICBtYXRoSUMtPmZpbmFsaXplSW5saW5lQ29kZShtYXRoSUNHZW5l
cmF0aW9uU3RhdGUsIGxpbmtCdWZmZXIpOworICAgIH0pOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUg
UHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgordm9pZCBKSVQ6OmVt
aXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVk
UmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0
Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCiB7CiAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRl
JiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9u
U3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCmluZGV4IDAyMWMwYTZmZmRlZjk4NzQ2ODM5OWM4NjFhMzZkODE0Y2Y0YTVi
YjEuLmJmYTBiYzk2OTJhMzI1NGMxM2Y5MzE4NDY3ODgzOGZiMTViNTJkYWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00MjQsNiArNDI0LDE0IEBAIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQXJw
IG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBvcGVyYW5kLCBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUob3BlcmFuZCwgVHJ1c3RlZEltbVB0cihhcml0aFByb2ZpbGUpKTsKKyAgICBDYWxsIGNhbGwg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgc2V0dXBSZXN1
bHRzKHJlc3VsdCk7CisgICAgcmV0dXJuIGNhbGw7Cit9CisKIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycCBv
cGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJl
Z3MgYXJnMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCiB7CiAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoYXJpdGhQcm9maWxlKSk7
CkBAIC00NDAsNiArNDQ4LDE0IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycE1pYyBvCiAgICAgcmV0dXJu
IGNhbGw7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKTWljIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVz
dWx0LCBKU1ZhbHVlUmVncyBhcmcsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQoreworICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcsIG1hdGhJQyk7CisgICAgQ2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIHNldHVwUmVzdWx0cyhy
ZXN1bHQpOworICAgIHJldHVybiBjYWxsOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMgb3BlcmF0
aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFy
ZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyLCBtYXRoSUMpOwpAQCAtNTIxLDYgKzUzNywxNCBAQCBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FSiBvcGVyYXRpbwogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
SlNWYWx1ZVJlc3VsdChvcGVyYXRpb24sIGRzdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKIG9wZXJh
dGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcpCit7CisgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZyk7CisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIHNldHVwUmVzdWx0cyhyZXN1bHQpOwor
ICAgIHJldHVybiBjYWxsOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkkgb3BlcmF0aW9uLCBpbnQgZHN0
LCBHUFJSZWcgYXJnMSwgVW5pcXVlZFN0cmluZ0ltcGwqIGFyZzIpCiB7CiAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoYXJnMikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUTWF0aElDLmgKaW5kZXggNTE0ZDE0ZDY2N2ZiOGIyZTFjZTZkN2E0YjM1
ZWEwMmUyOTc4NWJhZi4uMGRlYTE4YmFiYjRkZDMzNzliYjFhNDQ4NGE0ZmM2N2NiYzNiZDg5OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiSklUQWRkR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUTWF0aElDSW5saW5lUmVz
dWx0LmgiCiAjaW5jbHVkZSAiSklUTXVsR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUTmVnR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKQEAgLTUyLDcgKzUzLDcgQEAgc3RydWN0IE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSB7CiAKICNkZWZpbmUgRU5BQkxFX01BVEhfSUNfU1RBVFMgMAog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yVHlwZT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBH
ZW5lcmF0b3JUeXBlLCBib29sKCpwcm9maWxlVmFsaWRhdG9yKShBcml0aFByb2ZpbGUqKT4KIGNs
YXNzIEpJVE1hdGhJQyB7CiBwdWJsaWM6CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZUxvY2F0
aW9uKCkgeyByZXR1cm4gbV9pbmxpbmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1faW5saW5lU2l6ZSk7
IH0KQEAgLTcyLDE3ICs3MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBzdGFydFNpemUg
PSBqaXQubV9hc3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKTsKIAogICAgICAgICBpZiAoQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2dlbmVyYXRvci5hcml0aFByb2ZpbGUoKSkgewot
ICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS0+bGhzT2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgp
IHx8IGFyaXRoUHJvZmlsZS0+cmhzT2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAoIXByb2ZpbGVWYWxpZGF0b3IoYXJpdGhQcm9maWxlKSkgewogICAgICAgICAgICAg
ICAgIC8vIEl0IGxvb2tzIGxpa2UgdGhlIE1hdGhJQyBoYXMgeWV0IHRvIGV4ZWN1dGUuIFdlIGRv
bid0IHdhbnQgdG8gZW1pdCBjb2RlIGluIHRoaXMKICAgICAgICAgICAgICAgICAvLyBjYXNlIGZv
ciBhIGNvdXBsZSByZWFzb25zLiBGaXJzdCwgdGhlIG9wZXJhdGlvbiBtYXkgbmV2ZXIgZXhlY3V0
ZSwgc28gaWYgd2UgZG9uJ3QgZW1pdAogICAgICAgICAgICAgICAgIC8vIGNvZGUsIGl0J3MgYSB3
aW4uIFNlY29uZCwgaWYgdGhlIG9wZXJhdGlvbiBkb2VzIGV4ZWN1dGUsIHdlIGNhbiBlbWl0IGJl
dHRlciBjb2RlCi0gICAgICAgICAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGFuIGlkZWEgYWJvdXQg
dGhlIHR5cGVzIG9mIGxocyBhbmQgcmhzLgorICAgICAgICAgICAgICAgIC8vIG9uY2Ugd2UgaGF2
ZSBhbiBpZGVhIGFib3V0IHRoZSB0eXBlcy4KICAgICAgICAgICAgICAgICBzdGF0ZS5zbG93UGF0
aEp1bXBzLmFwcGVuZChqaXQucGF0Y2hhYmxlSnVtcCgpKTsKICAgICAgICAgICAgICAgICBzaXpl
X3QgaW5saW5lU2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3Rh
cnRTaXplOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5saW5lU2l6ZSwgc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihpbmxpbmVTaXplKSA8PSBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hhYmxl
SnVtcFNpemUoKSk7CiAgICAgICAgICAgICAgICAgc3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNo
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzdGF0ZS5mYXN0UGF0aEVuZCA9IGppdC5sYWJlbCgp
OwotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9nZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoKTsg
Ly8gV2Ugc2hvdWxkIGhhdmUgZ2F0aGVyZWQgc29tZSBvYnNlcnZlZCB0eXBlIGluZm8gZm9yIGxo
cyBhbmQgcmhzIGJlZm9yZSB0cnlpbmcgdG8gcmVnZW5lcmF0ZSBhZ2Fpbi4KKyAgICAgICAgICAg
ICAgICBBU1NFUlQoIW1fZ2VuZXJhdGVGYXN0UGF0aE9uUmVwYXRjaCk7IC8vIFdlIHNob3VsZCBo
YXZlIGdhdGhlcmVkIHNvbWUgb2JzZXJ2ZWQgdHlwZSBpbmZvIGFib3V0IHRoZSB0eXBlcyBiZWZv
cmUgdHJ5aW5nIHRvIHJlZ2VuZXJhdGUgYWdhaW4uCiAgICAgICAgICAgICAgICAgbV9nZW5lcmF0
ZUZhc3RQYXRoT25SZXBhdGNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KQEAgLTI0Myw5ICsyNDQsMjYgQEAgcHVibGljOgogICAgIEdlbmVyYXRv
clR5cGUgbV9nZW5lcmF0b3I7CiB9OwogCi10eXBlZGVmIEpJVE1hdGhJQzxKSVRBZGRHZW5lcmF0
b3I+IEpJVEFkZElDOwotdHlwZWRlZiBKSVRNYXRoSUM8SklUTXVsR2VuZXJhdG9yPiBKSVRNdWxJ
QzsKLXR5cGVkZWYgSklUTWF0aElDPEpJVFN1YkdlbmVyYXRvcj4gSklUU3ViSUM7CitpbmxpbmUg
Ym9vbCBjYW5HZW5lcmF0ZVdpdGhCaW5hcnlQcm9maWxlKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlKQoreworICAgIHJldHVybiAhYXJpdGhQcm9maWxlLT5saHNPYnNlcnZlZFR5cGUoKS5pc0Vt
cHR5KCkgJiYgIWFyaXRoUHJvZmlsZS0+cmhzT2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpOworfQor
dGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CitjbGFzcyBKSVRCaW5hcnlNYXRoSUMg
OiBwdWJsaWMgSklUTWF0aElDPEdlbmVyYXRvclR5cGUsIGNhbkdlbmVyYXRlV2l0aEJpbmFyeVBy
b2ZpbGU+IHsgfTsKKwordHlwZWRlZiBKSVRCaW5hcnlNYXRoSUM8SklUQWRkR2VuZXJhdG9yPiBK
SVRBZGRJQzsKK3R5cGVkZWYgSklUQmluYXJ5TWF0aElDPEpJVE11bEdlbmVyYXRvcj4gSklUTXVs
SUM7Cit0eXBlZGVmIEpJVEJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+IEpJVFN1YklDOwor
CisKK2lubGluZSBib29sIGNhbkdlbmVyYXRlV2l0aFVuYXJ5UHJvZmlsZShBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4gIWFyaXRoUHJvZmlsZS0+bGhzT2JzZXJ2ZWRU
eXBlKCkuaXNFbXB0eSgpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+Citj
bGFzcyBKSVRVbmFyeU1hdGhJQyA6IHB1YmxpYyBKSVRNYXRoSUM8R2VuZXJhdG9yVHlwZSwgY2Fu
R2VuZXJhdGVXaXRoVW5hcnlQcm9maWxlPiB7IH07CisKK3R5cGVkZWYgSklUVW5hcnlNYXRoSUM8
SklUTmVnR2VuZXJhdG9yPiBKSVROZWdJQzsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDRm9yd2FyZHMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDRm9yd2FyZHMuaAppbmRleCAxZmJhMGZj
NmE3Zjg5N2RiNzFhMDA0MDcyYWI2ZjkwY2JlOGNmMzQ1Li4wOGJmZDEzMDE0MTkxZWQ5MjY1OTJi
ZWI4ZWE0ZDcwYjUzYzViM2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE1hdGhJQ0ZvcndhcmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRN
YXRoSUNGb3J3YXJkcy5oCkBAIC0yOSwxNCArMjksMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+IGNsYXNzIEpJVE1hdGhJQzsKK3RlbXBsYXRl
IDx0eXBlbmFtZSBHZW5lcmF0b3I+IGNsYXNzIEpJVEJpbmFyeU1hdGhJQzsKK3RlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3I+IGNsYXNzIEpJVFVuYXJ5TWF0aElDOwogY2xhc3MgSklUQWRkR2Vu
ZXJhdG9yOwogY2xhc3MgSklUTXVsR2VuZXJhdG9yOworY2xhc3MgSklUTmVnR2VuZXJhdG9yOwog
Y2xhc3MgSklUU3ViR2VuZXJhdG9yOwogCi10eXBlZGVmIEpJVE1hdGhJQzxKSVRBZGRHZW5lcmF0
b3I+IEpJVEFkZElDOwotdHlwZWRlZiBKSVRNYXRoSUM8SklUTXVsR2VuZXJhdG9yPiBKSVRNdWxJ
QzsKLXR5cGVkZWYgSklUTWF0aElDPEpJVFN1YkdlbmVyYXRvcj4gSklUU3ViSUM7Cit0eXBlZGVm
IEpJVEJpbmFyeU1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+IEpJVEFkZElDOwordHlwZWRlZiBKSVRC
aW5hcnlNYXRoSUM8SklUTXVsR2VuZXJhdG9yPiBKSVRNdWxJQzsKK3R5cGVkZWYgSklUVW5hcnlN
YXRoSUM8SklUTmVnR2VuZXJhdG9yPiBKSVROZWdJQzsKK3R5cGVkZWYgSklUQmluYXJ5TWF0aElD
PEpJVFN1YkdlbmVyYXRvcj4gSklUU3ViSUM7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE5lZ0dlbmVyYXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE5lZ0dlbmVyYXRvci5jcHAKaW5kZXggYzY4NTE2
NzZkNzQ1YTgwM2JmM2U1ZWMxZjU0YmU4MTg0ZWVlODU3OS4uZWM3OTNjOTJiYjc0ZGIxMGE0YmU5
Nzk1MmU1M2VjZjEwZDYwODNkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVROZWdHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
TmVnR2VuZXJhdG9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDUzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSklUTmVnR2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIK
KwogI2lmIEVOQUJMRShKSVQpCiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVE5lZ0dlbmVy
YXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKK0pJVE1hdGhJQ0lubGlu
ZVJlc3VsdCBKSVROZWdHZW5lcmF0b3I6OmdlbmVyYXRlSW5saW5lKENDYWxsSGVscGVycyYgaml0
LCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQoreworICAgIE9ic2VydmVkVHlwZSBvYnNl
cnZlZFR5cGVzID0gbV9hcml0aFByb2ZpbGUtPmxoc09ic2VydmVkVHlwZSgpOworICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoIW9ic2VydmVkVHlwZXMuaXNFbXB0eSgpLCAiV2Ugc2hvdWxkIG5vdCBh
dHRlbXB0IHRvIGdlbmVyYXRlIGFueXRoaW5nIGlmIHdlIGRvIG5vdCBoYXZlIGEgcHJvZmlsZS4i
KTsKKworICAgIGlmIChvYnNlcnZlZFR5cGVzLmlzT25seU5vbk51bWJlcigpKQorICAgICAgICBy
ZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpEb250R2VuZXJhdGU7CisKKyAgICBpZiAob2Jz
ZXJ2ZWRUeXBlcy5pc09ubHlJbnQzMigpKSB7CisgICAgICAgIGppdC5tb3ZlVmFsdWVSZWdzKG1f
c3JjLCBtX3Jlc3VsdCk7CisgICAgICAgIHN0YXRlLnNsb3dQYXRoSnVtcHMuYXBwZW5kKGppdC5i
cmFuY2hJZk5vdEludDMyKG1fc3JjKSk7CisgICAgICAgIHN0YXRlLnNsb3dQYXRoSnVtcHMuYXBw
ZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBtX3NyYy5wYXlsb2FkR1BS
KCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmYpKSk7CisgICAgICAgIGpp
dC5uZWczMihtX3Jlc3VsdC5wYXlsb2FkR1BSKCkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIGppdC5ib3hJbnQzMihtX3Jlc3VsdC5wYXlsb2FkR1BSKCksIG1fcmVzdWx0KTsKKyNlbmRp
ZgorCisgICAgICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6OkdlbmVyYXRlZEZhc3RQ
YXRoOworICAgIH0KKyAgICBpZiAob2JzZXJ2ZWRUeXBlcy5pc09ubHlOdW1iZXIoKSkgeworICAg
ICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoSWZJbnQzMihtX3NyYykp
OworICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIobV9zcmMsIG1fc2NyYXRjaEdQUikpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGlm
IChtX3NyYy5wYXlsb2FkR1BSKCkgIT0gbV9yZXN1bHQucGF5bG9hZEdQUigpKSB7CisgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgoaW50NjRfdCkoMXVsbCA8
PCA2MykpLCBtX3Jlc3VsdC5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgaml0LnhvcjY0KG1f
c3JjLnBheWxvYWRHUFIoKSwgbV9yZXN1bHQucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGppdC5tb3ZlVmFsdWVSZWdzKG1fc3JjLCBtX3Jlc3VsdCk7CisgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgoaW50NjRfdCkoMXVs
bCA8PCA2MykpLCBtX3NjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LnhvcjY0KG1fc2NyYXRj
aEdQUiwgbV9yZXN1bHQucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAg
aml0Lm1vdmVWYWx1ZVJlZ3MobV9zcmMsIG1fcmVzdWx0KTsKKyAgICAgICAgaml0LnhvcjMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpLCBtX3Jlc3VsdC50YWdHUFIoKSk7Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVkRmFz
dFBhdGg7CisgICAgfQorICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6OkdlbmVyYXRl
RnVsbFNuaXBwZXQ7Cit9CisKK2Jvb2wgSklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRo
KENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBlbmRKdW1wTGlzdCwg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCwgYm9vbCkKIHsKICAgICBB
U1NFUlQobV9zY3JhdGNoR1BSICE9IG1fc3JjLnBheWxvYWRHUFIoKSk7CiAgICAgQVNTRVJUKG1f
c2NyYXRjaEdQUiAhPSBtX3Jlc3VsdC5wYXlsb2FkR1BSKCkpOwpAQCAtNDAsMjMgKzgyLDIxIEBA
IHZvaWQgSklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
KQogICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0gbV9yZXN1bHQudGFnR1BSKCkpOwogI2VuZGlm
CiAKLSAgICBtX2RpZEVtaXRGYXN0UGF0aCA9IHRydWU7Ci0KICAgICBqaXQubW92ZVZhbHVlUmVn
cyhtX3NyYywgbV9yZXN1bHQpOwogICAgIENDYWxsSGVscGVyczo6SnVtcCBzcmNOb3RJbnQgPSBq
aXQuYnJhbmNoSWZOb3RJbnQzMihtX3NyYyk7CiAKICAgICAvLyAtMCBzaG91bGQgcHJvZHVjZSBh
IGRvdWJsZSwgYW5kIGhlbmNlIGNhbm5vdCBiZSBuZWdhdGVkIGFzIGFuIGludC4KICAgICAvLyBU
aGUgbmVnYXRpdmUgaW50MzIgMHg4MDAwMDAwMCBkb2Vzbid0IGhhdmUgYSBwb3NpdGl2ZSBpbnQz
MiByZXByZXNlbnRhdGlvbiwgYW5kIGhlbmNlIGNhbm5vdCBiZSBuZWdhdGVkIGFzIGFuIGludC4K
LSAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBtX3NyYy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDB4N2ZmZmZmZmYpKSk7CisgICAgc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaFRl
c3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIG1fc3JjLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZikpKTsKIAogICAgIGppdC5uZWczMihtX3Jlc3VsdC5w
YXlsb2FkR1BSKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgaml0LmJveEludDMyKG1fcmVz
dWx0LnBheWxvYWRHUFIoKSwgbV9yZXN1bHQpOwogI2VuZGlmCi0gICAgbV9lbmRKdW1wTGlzdC5h
cHBlbmQoaml0Lmp1bXAoKSk7CisgICAgZW5kSnVtcExpc3QuYXBwZW5kKGppdC5qdW1wKCkpOwog
CiAgICAgc3JjTm90SW50LmxpbmsoJmppdCk7Ci0gICAgbV9zbG93UGF0aEp1bXBMaXN0LmFwcGVu
ZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIobV9zcmMsIG1fc2NyYXRjaEdQUikpOworICAgIHNsb3dQ
YXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihtX3NyYywgbV9zY3JhdGNo
R1BSKSk7CiAKICAgICAvLyBGb3IgYSBkb3VibGUsIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIHRvIGlu
dmVydCB0aGUgc2lnbiBiaXQuCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTY1LDYgKzEwNSw3IEBA
IHZvaWQgSklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0
KQogI2Vsc2UKICAgICBqaXQueG9yMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSA8PCAz
MSksIG1fcmVzdWx0LnRhZ0dQUigpKTsKICNlbmRpZgorICAgIHJldHVybiB0cnVlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUTmVnR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE5lZ0dlbmVy
YXRvci5oCmluZGV4IDZkYzJjODVhNmIyNTFhODNjMzJmYjUxOGM5M2Q1MGNhNzBiMTYxMTAuLjMw
ZGUyYzVjMTI2ZDIwNDE2ZDNmN2JmMDNmNTc5MzhmODRiNTYzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTmVnR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVROZWdHZW5lcmF0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksMzIgKzI5LDMyIEBACiAjaWYgRU5B
QkxFKEpJVCkKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIlNuaXBwZXRP
cGVyYW5kLmgiCisjaW5jbHVkZSAiSklUTWF0aElDLmgiCisjaW5jbHVkZSAiSklUTWF0aElDSW5s
aW5lUmVzdWx0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKSVROZWdHZW5lcmF0b3Ig
ewogcHVibGljOgotICAgIEpJVE5lZ0dlbmVyYXRvcihKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFs
dWVSZWdzIHNyYywgR1BSUmVnIHNjcmF0Y2hHUFIpCi0gICAgICAgIDogbV9yZXN1bHQocmVzdWx0
KQorICAgIEpJVE5lZ0dlbmVyYXRvcigpID0gZGVmYXVsdDsKKworICAgIEpJVE5lZ0dlbmVyYXRv
cihKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIHNyYywgR1BSUmVnIHNjcmF0Y2hHUFIs
IEFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlKQorICAgICAgICA6IG1fYXJpdGhQcm9maWxlKCZh
cml0aFByb2ZpbGUpCisgICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQogICAgICAgICAsIG1fc3Jj
KHNyYykKICAgICAgICAgLCBtX3NjcmF0Y2hHUFIoc2NyYXRjaEdQUikKICAgICB7IH0KIAotICAg
IHZvaWQgZ2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmKTsKKyAgICBKSVRNYXRoSUNJbmxp
bmVSZXN1bHQgZ2VuZXJhdGVJbmxpbmUoQ0NhbGxIZWxwZXJzJiwgTWF0aElDR2VuZXJhdGlvblN0
YXRlJik7CisgICAgYm9vbCBnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYsIENDYWxsSGVs
cGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93
UGF0aEp1bXBMaXN0LCBib29sIHNob3VsZEVtaXRQcm9maWxpbmcpOwogCi0gICAgYm9vbCBkaWRF
bWl0RmFzdFBhdGgoKSBjb25zdCB7IHJldHVybiBtX2RpZEVtaXRGYXN0UGF0aDsgfQotICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0KCkgeyByZXR1cm4gbV9lbmRKdW1wTGlz
dDsgfQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3QoKSB7IHJl
dHVybiBtX3Nsb3dQYXRoSnVtcExpc3Q7IH0KKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJpdGhQcm9maWxlOyB9CiAKIHByaXZhdGU6CisgICAgQXJp
dGhQcm9maWxlKiBtX2FyaXRoUHJvZmlsZSB7IG51bGxwdHIgfTsKICAgICBKU1ZhbHVlUmVncyBt
X3Jlc3VsdDsKICAgICBKU1ZhbHVlUmVncyBtX3NyYzsKICAgICBHUFJSZWcgbV9zY3JhdGNoR1BS
OwotICAgIGJvb2wgbV9kaWRFbWl0RmFzdFBhdGggeyBmYWxzZSB9OwotCi0gICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBtX2VuZEp1bXBMaXN0OwotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
bV9zbG93UGF0aEp1bXBMaXN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCBiN2ViNDlmYzNmNDA5ZDIy
MDU0ZDQzNTE3NDZhYTQ1NWQ1ZTllNTQ5Li5hYzllMzNiMzAyNWZkNTRjMjI1NDg1NzA5ZGM4ZjIx
ZjllYzFiZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKQEAgLTI0NjgsNiArMjQ2OCw5MCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZhbHVlTXVsUHJvZmlsZWROb09wdGltaXplKEV4ZWNTdGF0ZSogZXhlYwogICAgIHJl
dHVybiBwcm9maWxlZE11bCgqdm0sIGV4ZWMsIGVuY29kZWRPcDEsIGVuY29kZWRPcDIsIGFyaXRo
UHJvZmlsZSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHJv
ZmlsZWROZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFu
ZCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcGVyYW5kKTsKKyAgICBkb3VibGUgbnVtYmVyID0gb3BlcmFuZC50b051bWJlcihleGVjKTsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcigtbnVtYmVyKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IHByb2ZpbGVkTmVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
ZXJhbmQsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIEFTU0VSVChhcml0aFBy
b2ZpbGUpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKworICAgIEpTVmFsdWUgb3BlcmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3BlcmFuZCk7CisgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTKG9wZXJhbmQpOworICAgIGRv
dWJsZSBudW1iZXIgPSBvcGVyYW5kLnRvTnVtYmVyKGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC1udW1iZXIpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZShFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpCit7CisgICAgcmV0dXJuIHVucHJv
ZmlsZWROZWdhdGUoZXhlYywgb3BlcmFuZCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIG9wZXJhbmQsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIHJl
dHVybiBwcm9maWxlZE5lZ2F0ZShleGVjLCBvcGVyYW5kLCBhcml0aFByb2ZpbGUpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRP
cHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcGVyYW5kLCBK
SVROZWdJQyogbmVnSUMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIAorICAgIEpTVmFsdWUgb3BlcmFuZCA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3BlcmFuZCk7CisKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG5lZ0lDLT5tX2dlbmVyYXRvci5hcml0aFByb2ZpbGUoKTsKKyAgICBBU1NFUlQoYXJpdGhQ
cm9maWxlKTsKKyAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFMob3BlcmFuZCk7CisgICAgbmVn
SUMtPmdlbmVyYXRlT3V0T2ZMaW5lKHZtLCBleGVjLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZCk7CisKKyNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKKyAgICBleGVj
LT5jb2RlQmxvY2soKS0+ZHVtcE1hdGhJQ1N0YXRzKCk7CisjZW5kaWYKKyAgICAKKyAgICBkb3Vi
bGUgbnVtYmVyID0gb3BlcmFuZC50b051bWJlcihleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtbnVtYmVyKSk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcGVyYW5kLCBKSVROZWdJ
QyogbmVnSUMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcGVyYW5kKTsKKworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbmVnSUMt
Pm1fZ2VuZXJhdG9yLmFyaXRoUHJvZmlsZSgpOworICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwor
ICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIUyhvcGVyYW5kKTsKKyAgICBuZWdJQy0+Z2VuZXJh
dGVPdXRPZkxpbmUodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7
CisKKyNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKKyAgICBleGVjLT5jb2RlQmxvY2soKS0+ZHVt
cE1hdGhJQ1N0YXRzKCk7CisjZW5kaWYKKworICAgIGRvdWJsZSBudW1iZXIgPSBvcGVyYW5kLnRv
TnVtYmVyKGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKC1udW1iZXIpKTsKK30KKwogQUxXQVlTX0lOTElORSBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgdW5wcm9maWxlZFN1YihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDYwNDg4MmYwNWM3MzI2ODZjODVjNDA5ZDY5
MjFkNGQ2MjYwMWUyZTcuLjY3MjY0MDc0ZWU0N2NiMTUxNjFkYjA5MjdiNDNmZjc4MDgzYTVjN2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0xNDAsNiAr
MTQwLDcgQEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1YKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
KEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAq
Sl9KSVRPcGVyYXRpb25fRUpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7
CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9F
SkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7Cit0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkFycCkoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpJKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJ
VF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJ
T04gKkpfSklUT3BlcmF0aW9uX0VKSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTQ5LDYgKzE1MCw3IEBAIHR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSkopKEV4ZWNT
dGF0ZSosIEVuY29kZWRKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpK
X0pJVE9wZXJhdGlvbl9FSkpBcnApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgQXJpdGhQcm9maWxlKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BF
UkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpBcnBNaWMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgQXJpdGhQcm9maWxlKiwgdm9pZCopOwogdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKTWljKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHZvaWQqKTsKK3R5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKTWljKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklU
X09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpzc1opKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwg
aW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9w
ZXJhdGlvbl9FSnNzUmVvKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFJlZ0V4cE9iamVjdCopOwog
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpz
c1Jlb0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHBPYmplY3QqLCBKU1N0cmluZyop
OwpAQCAtNDM3LDYgKzQzOSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhbHVlTXVsTm9PcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYQogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkT3B0aW1pemUoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMiwgQXJpdGhQcm9maWxlKiwgSklUTXVsSUMqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWROb09wdGltaXplKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIsIEFyaXRoUHJvZmlsZSosIEpJVE11bElDKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFy
aXRoUHJvZmlsZSopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJpdGhOZWdhdGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCk7
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmls
ZWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCwgQXJpdGhQcm9maWxlKik7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRP
cHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCwgSklUTmVn
SUMqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVP
cHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCwgSklUTmVn
SUMqKTsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWIoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYWx1ZVN1YlByb2ZpbGVkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSopIFdURl9JTlRFUk5BTDsK
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyLCBKSVRTdWJJQyopIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCBkN2ExZGVlMzJkNGVj
OGUzMjU0ZGRmM2NiMGZkNTI4NWE4MzFlYzgxLi45OTdlZjM1ZTFhMmI1NzdmNTE0ZjA4NjNjZDMz
NGQ0YmMxMzYxZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0yNTMsNyArMjUzLDkgQEAgY29uc3QgSXNJbnZhbGlk
YXRlZCA9IDIKIGNvbnN0IFNoYWRvd0NoaWNrZW5UYWlsTWFya2VyID0gMHg3YTExCiAKICMgQXJp
dGhQcm9maWxlIGRhdGEKK2NvbnN0IEFyaXRoUHJvZmlsZUludCA9IDB4MTAwMDAwCiBjb25zdCBB
cml0aFByb2ZpbGVJbnRJbnQgPSAweDEyMDAwMAorY29uc3QgQXJpdGhQcm9maWxlTnVtYmVyID0g
MHgyMDAwMDAKIGNvbnN0IEFyaXRoUHJvZmlsZU51bWJlckludCA9IDB4MjIwMDAwCiBjb25zdCBB
cml0aFByb2ZpbGVOdW1iZXJOdW1iZXIgPSAweDI0MDAwMAogY29uc3QgQXJpdGhQcm9maWxlSW50
TnVtYmVyID0gMHgxNDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggNzBjOTI4NDk1NTQ4NmNiYTBh
Y2YxMGVlODExOGYxODQyMTg1NjYwNy4uYjU1Zjk1MmExYmY1OGQyZmI1ODg2YWIzNTVhNzhiZTY3
N2QzZTI1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KQEAgLTk0OCwyMiArOTQ4LDI3IEBAIF9sbGludF9v
cF9uZWdhdGU6CiAgICAgbG9hZGkgOFtQQ10sIHQwCiAgICAgbG9hZGkgNFtQQ10sIHQzCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEsIHQyKQorICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigzLCB0NCkKICAgICBiaW5lcSB0MSwgSW50MzJUYWcsIC5vcE5lZ2F0ZVNyY05vdEludAog
ICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKICAgICBuZWdpIHQyCisgICAg
b3JpIEFyaXRoUHJvZmlsZUludCwgdDQKICAgICBzdG9yZWkgSW50MzJUYWcsIFRhZ09mZnNldFtj
ZnIsIHQzLCA4XQorICAgIHN0b3JlaXNUb0luc3RydWN0aW9uKHQ0LCAzKQogICAgIHN0b3JlaSB0
MiwgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XQotICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0
Y2goNCkKIC5vcE5lZ2F0ZVNyY05vdEludDoKICAgICBiaWEgdDEsIExvd2VzdFRhZywgLm9wTmVn
YXRlU2xvdwogICAgIHhvcmkgMHg4MDAwMDAwMCwgdDEKLSAgICBzdG9yZWkgdDEsIFRhZ09mZnNl
dFtjZnIsIHQzLCA4XQorICAgIG9yaSBBcml0aFByb2ZpbGVOdW1iZXIsIHQ0CiAgICAgc3RvcmVp
IHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdCi0gICAgZGlzcGF0Y2goMykKKyAgICBzdG9y
ZWlzVG9JbnN0cnVjdGlvbih0NCwgMykKKyAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQz
LCA4XQorICAgIGRpc3BhdGNoKDQpCiAKIC5vcE5lZ2F0ZVNsb3c6CiAgICAgY2FsbE9wY29kZVNs
b3dQYXRoKF9zbG93X3BhdGhfbmVnYXRlKQotICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0Y2go
NCkKIAogCiBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKGludGVnZXJPcGVyYXRpb25BbmRTdG9y
ZSwgZG91YmxlT3BlcmF0aW9uLCBzbG93UGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggYTBmYTc4ZTliMTM0
MzRlZTdmNTY0YzBmNTUyMzM0YWU0NmFhM2ZlNC4uZDM0YTQzOWNjN2JkNjlmZjJkMTIzNTIxOTVh
ZTYzZWJiMTYyODM2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTgyNywyMiArODI3LDI3IEBAIF9sbGludF9v
cF9uZWdhdGU6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
bigyLCB0MCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCi0gICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZSh0MCwgdDIpCi0gICAgYnFiIHQyLCB0YWdUeXBlTnVtYmVyLCAub3BOZWdh
dGVOb3RJbnQKLSAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93Ci0gICAgbmVn
aSB0MgotICAgIG9ycSB0YWdUeXBlTnVtYmVyLCB0MgotICAgIHN0b3JlcSB0MiwgW2NmciwgdDEs
IDhdCi0gICAgZGlzcGF0Y2goMykKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MykK
KyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDIpCisgICAgYnFiIHQzLCB0YWdUeXBlTnVt
YmVyLCAub3BOZWdhdGVOb3RJbnQKKyAgICBidGl6IHQzLCAweDdmZmZmZmZmLCAub3BOZWdhdGVT
bG93CisgICAgbmVnaSB0MworICAgIG9yaSBBcml0aFByb2ZpbGVJbnQsIHQyCisgICAgb3JxIHRh
Z1R5cGVOdW1iZXIsIHQzCisgICAgc3RvcmVpc1RvSW5zdHJ1Y3Rpb24odDIsIDMpCisgICAgc3Rv
cmVxIHQzLCBbY2ZyLCB0MSwgOF0KKyAgICBkaXNwYXRjaCg0KQogLm9wTmVnYXRlTm90SW50Ogot
ICAgIGJ0cXogdDIsIHRhZ1R5cGVOdW1iZXIsIC5vcE5lZ2F0ZVNsb3cKLSAgICB4b3JxIDB4ODAw
MDAwMDAwMDAwMDAwMCwgdDIKLSAgICBzdG9yZXEgdDIsIFtjZnIsIHQxLCA4XQotICAgIGRpc3Bh
dGNoKDMpCisgICAgYnRxeiB0MywgdGFnVHlwZU51bWJlciwgLm9wTmVnYXRlU2xvdworICAgIHhv
cnEgMHg4MDAwMDAwMDAwMDAwMDAwLCB0MworICAgIG9yaSBBcml0aFByb2ZpbGVOdW1iZXIsIHQy
CisgICAgc3RvcmVxIHQzLCBbY2ZyLCB0MSwgOF0KKyAgICBzdG9yZWlzVG9JbnN0cnVjdGlvbih0
MiwgMykKKyAgICBkaXNwYXRjaCg0KQogCiAub3BOZWdhdGVTbG93OgogICAgIGNhbGxPcGNvZGVT
bG93UGF0aChfc2xvd19wYXRoX25lZ2F0ZSkKLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNo
KDQpCiAKIAogbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShpbnRlZ2VyT3BlcmF0aW9uQW5kU3Rv
cmUsIGRvdWJsZU9wZXJhdGlvbiwgc2xvd1BhdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBhMzE3MDkwZGMzZjc3NWY5Mjcy
MTVlMmQyM2EzZTgyODkxOGUwNDQ1Li5mN2Q3OTg1YjQwOGM2M2UxMDA0YmIzNDNkMDAzNTM3MTI1
ODY3M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKQEAgLTM1MCwxMCArMzUwLDQ0IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF90b19zdHJpbmcpCiAgICAgUkVUVVJOKE9QX0MoMikuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMp
KTsKIH0KIAorI2lmIEVOQUJMRShKSVQpCitzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVG
b3JVbmFyeUFyaXRoT3AoSW5zdHJ1Y3Rpb24qIHBjLCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBv
cGVyYW5kKQoreworICAgIEFyaXRoUHJvZmlsZSYgcHJvZmlsZSA9ICpiaXR3aXNlX2Nhc3Q8QXJp
dGhQcm9maWxlKj4oJnBjWzNdLnUub3BlcmFuZCk7CisgICAgcHJvZmlsZS5vYnNlcnZlTEhTKG9w
ZXJhbmQpOworICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSk7CisgICAgaWYgKCFyZXN1bHQu
aXNJbnQzMigpKSB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzSW50MzIoKSkKKyAgICAgICAgICAg
IHByb2ZpbGUuc2V0T2JzZXJ2ZWRJbnQzMk92ZXJmbG93KCk7CisKKyAgICAgICAgZG91YmxlIGRv
dWJsZVZhbCA9IHJlc3VsdC5hc051bWJlcigpOworICAgICAgICBpZiAoIWRvdWJsZVZhbCAmJiBz
dGQ6OnNpZ25iaXQoZG91YmxlVmFsKSkKKyAgICAgICAgICAgIHByb2ZpbGUuc2V0T2JzZXJ2ZWRO
ZWdaZXJvRG91YmxlKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcHJvZmlsZS5zZXRP
YnNlcnZlZE5vbk5lZ1plcm9Eb3VibGUoKTsKKworICAgICAgICAgICAgLy8gVGhlIEludDUyIG92
ZXJmbG93IGNoZWNrIGhlcmUgaW50ZW50aW9uYWxseSBvbWl0cyAxbGwgPDwgNTEgYXMgYSB2YWxp
ZCBuZWdhdGl2ZSBJbnQ1MiB2YWx1ZS4KKyAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgd2Ugd2ls
bCBnZXQgYSBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgcmVzdWx0IGlzIHRoYXQgdmFsdWUuIFRoaXMg
aXMgaW50ZW50aW9uYWxseQorICAgICAgICAgICAgLy8gZG9uZSB0byBzaW1wbGlmeSB0aGUgY2hl
Y2tpbmcgYWxnb3JpdGhtLgorICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludDY0X3QgaW50NTJP
dmVyZmxvd1BvaW50ID0gKDFsbCA8PCA1MSk7CisgICAgICAgICAgICBpbnQ2NF90IGludDY0VmFs
ID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjphYnMoZG91YmxlVmFsKSk7CisgICAgICAgICAg
ICBpZiAoaW50NjRWYWwgPj0gaW50NTJPdmVyZmxvd1BvaW50KQorICAgICAgICAgICAgICAgIHBy
b2ZpbGUuc2V0T2JzZXJ2ZWRJbnQ1Mk92ZXJmbG93KCk7CisgICAgICAgIH0KKyAgICB9Cit9Cisj
ZWxzZQorc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKEluc3Ry
dWN0aW9uKiwgSlNWYWx1ZSwgSlNWYWx1ZSkgeyB9CisjZW5kaWYKKwogU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX25lZ2F0ZSkKIHsKICAgICBCRUdJTigpOwotICAgIFJFVFVSTihqc051bWJlcigt
T1BfQygyKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYykpKTsKKyAgICBKU1ZhbHVlIG9wZXJhbmQg
PSBPUF9DKDIpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKC1vcGVy
YW5kLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7
CisgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChwYywgcmVzdWx0LCBv
cGVyYW5kKTsKKyAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA0OGJmY2FhM2M5Njdi
NTU3Nzk0N2Q1NGVjY2I2YmZjM2ZjNmRjMTBmLi41OTE2ZDUyOWFkNTQyNmYwNjVhYjQ5MWEyOTA2
ZGRmYzcxZjY1NjFhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTIxICBCZW5qYW1pbiBQb3VsYWlu
ICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFVzZSBhbiBpbmxpbmUgY2Fj
aGUgdG8gZ2VuZXJhdGUgb3BfbmVnYXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjIzNzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHN0cmVzcy9vcC1uZWdhdGUtaW5saW5lLWNhY2hlLmpzOiBBZGRl
ZC4KKwogMjAxNi0wOS0xOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNYWtlIEhhc093blByb3BlcnR5IGZhc3RlcgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3Mvb3AtbmVnYXRlLWlubGluZS1jYWNoZS5qcyBiL0pTVGVzdHMvc3RyZXNzL29wLW5lZ2F0ZS1p
bmxpbmUtY2FjaGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2M1NDA1OGRlYzgyZTBlOWNmZjg3Zjc2ZDJkZDI1
MzdkZDgyMTg3YwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL29wLW5lZ2F0ZS1p
bmxpbmUtY2FjaGUuanMKQEAgLTAsMCArMSwzMDAgQEAKKyJ1c2Ugc3RyaWN0IgorCisKK2Z1bmN0
aW9uIG9wYXF1ZUlkZW50aXR5KGFyZykgeworICAgIHJldHVybiBhcmc7Cit9Citub0lubGluZShv
cGFxdWVJZGVudGl0eSkKK2Z1bmN0aW9uIG5lZ2F0ZVdpdGhEb3VibGVTdWIoYXJnKSB7CisgICAg
Ly8gSW1wbGVtZW50IGludGVnZXIgbmVnYXRlIGFzIGEgZG91YmxlIHN1YiBvcGVyYXRpb24uCisg
ICAgcmV0dXJuIG9wYXF1ZUlkZW50aXR5KDYuNCAtIGFyZykgLSA2LjQ7Cit9Citub0lubGluZShu
ZWdhdGVXaXRoRG91YmxlU3ViKQorCitmdW5jdGlvbiBvcGFxdWVOb25aZXJvSW50ZWdlck5lZ2F0
ZShhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGluZShvcGFxdWVOb25aZXJvSW50
ZWdlck5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3ROb25aZXJvSW50ZWdlcigpCit7CisgICAgZm9y
IChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlTm9uWmVyb0lu
dGVnZXJOZWdhdGUoaSkgIT09IG5lZ2F0ZVdpdGhEb3VibGVTdWIoaSkpIHsKKyAgICAgICAgICAg
IHRocm93ICJGYWlsZWQgdGVzdE5vblplcm9JbnRlZ2VyKCkgYXQgaSA9ICIgKyBpOworICAgICAg
ICB9CisgICAgfQorfQordGVzdE5vblplcm9JbnRlZ2VyKCk7CisKKworZnVuY3Rpb24gb3BhcXVl
RG91YmxlTmVnYXRlKGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1
ZURvdWJsZU5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3REb3VibGUoKQoreworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVEb3VibGVOZWdhdGUo
aSArIDAuNSkpICsgMC41ICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0
ZXN0RG91YmxlKCkgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorfQordGVzdERvdWJs
ZSgpOworCisKK2Z1bmN0aW9uIG9wYXF1ZU9iamVjdE5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJu
IC1hcmc7Cit9Citub0lubGluZShvcGFxdWVPYmplY3ROZWdhdGUpOworCitmdW5jdGlvbiB0ZXN0
T2JqZWN0KCkKK3sKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IGlmICgob3BhcXVlT2JqZWN0TmVnYXRlKHsgdmFsdWVPZjogKCk9PnsgcmV0dXJuIGkgKyAwLjUg
fX0pKSArIDAuNSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdE9i
amVjdCgpIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RPYmplY3QoKTsK
KworCitmdW5jdGlvbiBvcGFxdWVJbnRlZ2VyQW5kRG91YmxlTmVnYXRlKGFyZykKK3sKKyAgICBy
ZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZUludGVnZXJBbmREb3VibGVOZWdhdGUpOwor
CitmdW5jdGlvbiB0ZXN0SW50ZWdlckFuZERvdWJsZSgpCit7CisgICAgZm9yIChsZXQgaSA9IDE7
IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9wYXF1ZUludGVnZXJBbmREb3VibGVOZWdh
dGUoaSkpICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdl
ckFuZERvdWJsZSgpIG9uIGludGVnZXJzIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoKG9wYXF1ZUludGVnZXJBbmREb3VibGVOZWdhdGUoaSArIDAuNSkpICsgMC41ICsgaSAh
PT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdlckFuZERvdWJsZSgp
IG9uIGRvdWJsZSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0SW50ZWdl
ckFuZERvdWJsZSgpOworCisKK2Z1bmN0aW9uIG9wYXF1ZUludGVnZXJUaGVuRG91YmxlTmVnYXRl
KGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZUludGVnZXJUaGVu
RG91YmxlTmVnYXRlKTsKKworZnVuY3Rpb24gdGVzdEludGVnZXJUaGVuRG91YmxlKCkKK3sKKyAg
ICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVlSW50
ZWdlclRoZW5Eb3VibGVOZWdhdGUoaSkpICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cg
IkZhaWxlZCB0ZXN0SW50ZWdlclRoZW5Eb3VibGUoKSBvbiBpbnRlZ2VycyBhdCBpID0gIiArIGk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgewor
ICAgICAgICBpZiAoKG9wYXF1ZUludGVnZXJUaGVuRG91YmxlTmVnYXRlKGkgKyAwLjUpKSArIDAu
NSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEludGVnZXJUaGVu
RG91YmxlKCkgb24gZG91YmxlIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KK30KK3Rl
c3RJbnRlZ2VyVGhlbkRvdWJsZSgpOworCisKK2Z1bmN0aW9uIG9wYXF1ZURvdWJsZVRoZW5JbnRl
Z2VyTmVnYXRlKGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZURv
dWJsZVRoZW5JbnRlZ2VyTmVnYXRlKTsKKworZnVuY3Rpb24gdGVzdERvdWJsZVRoZW5JbnRlZ2Vy
KCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgo
b3BhcXVlRG91YmxlVGhlbkludGVnZXJOZWdhdGUoaSArIDAuNSkpICsgMC41ICsgaSAhPT0gMCkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0RG91YmxlVGhlbkludGVnZXIoKSBvbiBk
b3VibGUgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAobGV0IGkgPSAx
OyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVEb3VibGVUaGVuSW50ZWdlck5l
Z2F0ZShpKSkgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3REb3Vi
bGVUaGVuSW50ZWdlcigpIG9uIGludGVnZXJzIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAg
IH0KK30KK3Rlc3REb3VibGVUaGVuSW50ZWdlcigpOworCisKK2Z1bmN0aW9uIG9wYXF1ZUludGVn
ZXJBbmRPYmplY3ROZWdhdGUoYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9JbmxpbmUo
b3BhcXVlSW50ZWdlckFuZE9iamVjdE5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3RJbnRlZ2VyQW5k
T2JqZWN0KCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IGlmICgob3BhcXVlSW50ZWdlckFuZE9iamVjdE5lZ2F0ZShpKSkgKyBpICE9PSAwKSB7CisgICAg
ICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRlZ2VyQW5kT2JqZWN0KCkgb24gaW50ZWdlcnMg
YXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgICAgIGlmICgob3BhcXVlSW50ZWdlckFuZE9i
amVjdE5lZ2F0ZSh7IHZhbHVlT2Y6ICgpPT57IHJldHVybiBpICsgMC41IH19KSkgKyAwLjUgKyBp
ICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRlZ2VyQW5kT2JqZWN0
KCkgb24gZG91YmxlIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RJbnRl
Z2VyQW5kT2JqZWN0KCk7CisKKworZnVuY3Rpb24gb3BhcXVlRG91YmxlQW5kT2JqZWN0TmVnYXRl
KGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZURvdWJsZUFuZE9i
amVjdE5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3REb3VibGVBbmRPYmplY3QoKQoreworICAgIGZv
ciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVEb3VibGVB
bmRPYmplY3ROZWdhdGUoaSArIDAuNSkpICsgaSArIDAuNSAhPT0gMCkgeworICAgICAgICAgICAg
dGhyb3cgIkZhaWxlZCB0ZXN0RG91YmxlQW5kT2JqZWN0KCkgb24gaW50ZWdlcnMgYXQgaSA9ICIg
KyBpOworICAgICAgICB9CisgICAgICAgIGlmICgob3BhcXVlRG91YmxlQW5kT2JqZWN0TmVnYXRl
KHsgdmFsdWVPZjogKCk9PnsgcmV0dXJuIGkgfX0pKSArIGkgIT09IDApIHsKKyAgICAgICAgICAg
IHRocm93ICJGYWlsZWQgdGVzdERvdWJsZUFuZE9iamVjdCgpIG9uIGRvdWJsZSBhdCBpID0gIiAr
IGk7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0RG91YmxlQW5kT2JqZWN0KCk7CisKKworZnVu
Y3Rpb24gb3BhcXVlSW50ZWdlclRoZW5PYmplY3ROZWdhdGUoYXJnKQoreworICAgIHJldHVybiAt
YXJnOworfQorbm9JbmxpbmUob3BhcXVlSW50ZWdlclRoZW5PYmplY3ROZWdhdGUpOworCitmdW5j
dGlvbiB0ZXN0SW50ZWdlclRoZW5PYmplY3QoKQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwg
MWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVJbnRlZ2VyVGhlbk9iamVjdE5lZ2F0ZShp
KSkgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRlZ2VyVGhl
bk9iamVjdCgpIG9uIGludGVnZXJzIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVlSW50
ZWdlclRoZW5PYmplY3ROZWdhdGUoeyB2YWx1ZU9mOiAoKT0+eyByZXR1cm4gaSArIDAuNSB9fSkp
ICsgMC41ICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdl
clRoZW5PYmplY3QoKSBvbiBkb3VibGUgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQor
fQordGVzdEludGVnZXJUaGVuT2JqZWN0KCk7CisKKworZnVuY3Rpb24gb3BhcXVlRG91YmxlVGhl
bk9iamVjdE5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGluZShvcGFx
dWVEb3VibGVUaGVuT2JqZWN0TmVnYXRlKTsKKworZnVuY3Rpb24gdGVzdERvdWJsZVRoZW5PYmpl
Y3QoKQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYg
KChvcGFxdWVEb3VibGVUaGVuT2JqZWN0TmVnYXRlKGkgKyAwLjUpKSArIGkgKyAwLjUgIT09IDAp
IHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdERvdWJsZVRoZW5PYmplY3QoKSBvbiBp
bnRlZ2VycyBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChsZXQgaSA9
IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9wYXF1ZURvdWJsZVRoZW5PYmplY3RO
ZWdhdGUoaSArIDAuNSkpICsgaSArIDAuNSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0RG91YmxlVGhlbk9iamVjdCgpIG9uIGludGVnZXJzIGF0IGkgPSAiICsgaTsKKyAg
ICAgICAgfQorICAgIH0KK30KK3Rlc3REb3VibGVUaGVuT2JqZWN0KCk7CisKKworZnVuY3Rpb24g
b3BhcXVlSW50ZWdlckFuZERvdWJsZUFuZE9iamVjdE5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJu
IC1hcmc7Cit9Citub0lubGluZShvcGFxdWVJbnRlZ2VyQW5kRG91YmxlQW5kT2JqZWN0TmVnYXRl
KTsKKworZnVuY3Rpb24gdGVzdEludGVnZXJBbmREb3VibGVBbmRPYmplY3QoKQoreworICAgIGZv
ciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVJbnRlZ2Vy
QW5kRG91YmxlQW5kT2JqZWN0TmVnYXRlKGkpKSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRo
cm93ICJGYWlsZWQgdGVzdEludGVnZXJBbmREb3VibGVBbmRPYmplY3QoKSBvbiBpbnRlZ2VycyBh
dCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChvcGFxdWVJbnRlZ2VyQW5kRG91
YmxlQW5kT2JqZWN0TmVnYXRlKGkgKyAwLjUpKSArIGkgKyAwLjUgIT09IDApIHsKKyAgICAgICAg
ICAgIHRocm93ICJGYWlsZWQgdGVzdEludGVnZXJBbmREb3VibGVBbmRPYmplY3QoKSBvbiBpbnRl
Z2VycyBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChvcGFxdWVJbnRlZ2Vy
QW5kRG91YmxlQW5kT2JqZWN0TmVnYXRlKHsgdmFsdWVPZjogKCk9PnsgcmV0dXJuIGkgfX0pKSAr
IGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEludGVnZXJBbmREb3Vi
bGVBbmRPYmplY3QoKSBvbiBkb3VibGUgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQor
fQordGVzdEludGVnZXJBbmREb3VibGVBbmRPYmplY3QoKTsKKworCitmdW5jdGlvbiBvcGFxdWVJ
bnRlZ2VyTmVnYXRlT3ZlcmZsb3coYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9Jbmxp
bmUob3BhcXVlSW50ZWdlck5lZ2F0ZU92ZXJmbG93KTsKKworZnVuY3Rpb24gdGVzdEludGVnZXJO
ZWdhdGVPdmVyZmxvdygpCit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgewor
ICAgICAgICBpZiAob3BhcXVlSW50ZWdlck5lZ2F0ZU92ZXJmbG93KDB4ODAwMDAwMDB8MCkgIT09
IDIxNDc0ODM2NDgpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgb3BhcXVlSW50ZWdlck5l
Z2F0ZU92ZXJmbG93KCkgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorfQordGVzdElu
dGVnZXJOZWdhdGVPdmVyZmxvdygpOworCisKK2Z1bmN0aW9uIG9wYXF1ZUludGVnZXJOZWdhdGVa
ZXJvKGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZUludGVnZXJO
ZWdhdGVaZXJvKTsKKworZnVuY3Rpb24gdGVzdEludGVnZXJOZWdhdGVaZXJvKCkKK3sKKyAgICBm
b3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgxIC8gb3BhcXVlSW50
ZWdlck5lZ2F0ZVplcm8oMCkgIT09IC1JbmZpbml0eSkgeworICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0SW50ZWdlck5lZ2F0ZVplcm8oKSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAg
ICB9Cit9Cit0ZXN0SW50ZWdlck5lZ2F0ZVplcm8oKTsKKworCitmdW5jdGlvbiBnYXRlZE5lZ2F0
ZShzZWxlY3RvciwgYXJnKQoreworICAgIGlmIChzZWxlY3RvciA9PT0gMCkgeworICAgICAgICBy
ZXR1cm4gLWFyZzsKKyAgICB9CisgICAgaWYgKHNlbGVjdG9yID09IDQyKSB7CisgICAgICAgIHJl
dHVybiAtYXJnOworICAgIH0KKyAgICByZXR1cm4gYXJnOworfQorbm9JbmxpbmUoZ2F0ZWROZWdh
dGUpOworCitmdW5jdGlvbiB0ZXN0VW51c2VkTmVnYXRlKCkKK3sKKyAgICBmb3IgKGxldCBpID0g
MTsgaSA8IDFlMjsgKytpKSB7CisgICAgICAgIGlmIChnYXRlZE5lZ2F0ZShNYXRoLlBJLCBpKSAh
PT0gaSkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBmaXJzdCBwaGFzZSBvZiB0ZXN0VW51
c2VkTmVnYXRlIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFl
NDsgKytpKSB7CisgICAgICAgIGlmIChnYXRlZE5lZ2F0ZSgwLCBpKSArIGkgIT09IDApIHsKKyAg
ICAgICAgICAgIHRocm93ICJGYWlsZWQgc2Vjb25kIHBoYXNlIG9mIHRlc3RVbnVzZWROZWdhdGUi
OworICAgICAgICB9CisgICAgfQorICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsK
KyAgICAgICAgaWYgKGdhdGVkTmVnYXRlKDQyLCBpICsgMC41KSArIDAuNSArIGkgIT09IDApIHsK
KyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGhpcmQgcGhhc2Ugb2YgdGVzdFVudXNlZE5lZ2F0
ZSI7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0VW51c2VkTmVnYXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289630</attachid>
            <date>2016-09-22 16:40:29 -0700</date>
            <delta_ts>2016-09-22 19:03:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162371-20160922163739.patch</filename>
            <type>text/plain</type>
            <size>61784</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2Mjc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YjM1NWIwYTkzZTZmOGE1YWE3ZjVlMWJhMjYwMmViOGI2MzdhMjViLi4zYmYzNjEzMDkyOTJlYTVm
NzU4ZmJhZDc0Mjc1ZmYzZWMwMWJmNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAxNi0wOS0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgYW4gaW5saW5lIGNhY2hlIHRvIGdlbmVyYXRlIG9w
X25lZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNlIGFuIGlubGluZSBjYWNoZSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBjb2RlCisgICAgICAg
IHJlcXVpcmVkIHRvIGltcGxlbWVudCBvcF9uZWdhdGUuCisKKyAgICAgICAgRm9yIHB1cmUgaW50
ZWdlciBuZWdhdGUsIHRoZSBnZW5lcmF0ZWQgYXNtIHNocmlua3MKKyAgICAgICAgZnJvbSAxNDcg
Ynl0ZXMgdG8gMTI1IGJ5dGVzICgxNCUpLgorICAgICAgICBGb3IgZG91YmxlIG5lZ2F0ZSwgdGhl
IGdlbmVyYXRlZCBhc20gc2hyaW5rcworICAgICAgICB0byAxMzAgYnl0ZXMgKDExJSkuCisgICAg
ICAgIFRoZSBhdmVyYWdlIHNpemUgb24gU3Vuc3BpZGVyIGlzIDEwMGJ5dGVzLCB0aGlzIGlzIGR1
ZQorICAgICAgICB0byB0aGUgb3BfbmVnYXRlcyB0aGF0IGFyZSBuZXZlciBleGVjdXRlZCBhbmQg
ZG8gbm90CisgICAgICAgIGdlbmVyYXRlIG11Y2guCisKKyAgICAgICAgKiBieXRlY29kZS9Bcml0
aFByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJpdGhQcm9maWxlOjpBcml0aFByb2ZpbGUpOgor
ICAgICAgICAoSlNDOjpBcml0aFByb2ZpbGU6Om9ic2VydmVMSFMpOgorICAgICAgICAoSlNDOjpB
cml0aFByb2ZpbGU6Om9ic2VydmVMSFNBbmRSSFMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6YWRkSklUTmVnSUMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnlPcCk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlVuYXJ5T3BOb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWF0aElDKToKKyAgICAg
ICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVn
YXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZWdhdGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElD
U2xvdyk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpj
YWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBqaXQvSklUTWF0aElDLmg6CisgICAgICAgIChKU0M6
OkpJVE1hdGhJQzo6Z2VuZXJhdGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpjYW5HZW5lcmF0ZVdp
dGhCaW5hcnlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Y2FuR2VuZXJhdGVXaXRoVW5hcnlQcm9m
aWxlKToKKyAgICAgICAgKiBqaXQvSklUTWF0aElDRm9yd2FyZHMuaDoKKyAgICAgICAgKiBqaXQv
SklUTmVnR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpnZW5l
cmF0ZUlubGluZSk6CisgICAgICAgIChKU0M6OkpJVE5lZ0dlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0
UGF0aCk6CisgICAgICAgICogaml0L0pJVE5lZ0dlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpK
SVROZWdHZW5lcmF0b3I6OkpJVE5lZ0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVE5lZ0dl
bmVyYXRvcjo6YXJpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpk
aWRFbWl0RmFzdFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVROZWdHZW5lcmF0b3I6
OmVuZEp1bXBMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpz
bG93UGF0aEp1bXBMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206Cisg
ICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjp1cGRh
dGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhf
REVDTCk6CisKIDIwMTYtMDktMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGZW5jZXMgb24geDg2IHNob3VsZCBiZSBhIGxvdCBjaGVhcGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmgKaW5kZXggZDQzMDExM2IyYjgw
OWUwNTZmNTAwMDY4OWNjMzhmODNiMWY4MWU3MC4uN2E2ZWU1ZDJlYWFmZDIyZTk3NDEyYWRmNDll
YTAxMjEyYjEyNjUyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FyaXRoUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Bcml0
aFByb2ZpbGUuaApAQCAtODcsNiArODcsMTQgQEAgcHVibGljOgogICAgIHN0YXRpY19hc3NlcnQo
c3BlY2lhbEZhc3RQYXRoQml0ICYgY2xlYXJMaHNPYnNlcnZlZFR5cGVCaXRNYXNrLCAiVGhlc2Ug
Yml0cyBzaG91bGQgaW50ZXJzZWN0LiIpOwogICAgIHN0YXRpY19hc3NlcnQoc3BlY2lhbEZhc3RQ
YXRoQml0ID4gfmNsZWFyTGhzT2JzZXJ2ZWRUeXBlQml0TWFzaywgIlRoZXNlIGJpdHMgc2hvdWxk
IG5vdCBpbnRlcnNlY3QgYW5kIHNwZWNpYWxGYXN0UGF0aEJpdCBzaG91bGQgYmUgYSBoaWdoZXIg
Yml0LiIpOwogCisgICAgQXJpdGhQcm9maWxlKFJlc3VsdFR5cGUgYXJnKQorICAgIHsKKyAgICAg
ICAgbV9iaXRzID0gKGFyZy5iaXRzKCkgPDwgbGhzUmVzdWx0VHlwZVNoaWZ0KTsKKyAgICAgICAg
QVNTRVJUKGxoc1Jlc3VsdFR5cGUoKS5iaXRzKCkgPT0gYXJnLmJpdHMoKSk7CisgICAgICAgIEFT
U0VSVChsaHNPYnNlcnZlZFR5cGUoKS5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQocmhzT2Jz
ZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpKTsKKyAgICB9CisKICAgICBBcml0aFByb2ZpbGUoUmVzdWx0
VHlwZSBsaHMsIFJlc3VsdFR5cGUgcmhzKQogICAgIHsKICAgICAgICAgbV9iaXRzID0gKGxocy5i
aXRzKCkgPDwgbGhzUmVzdWx0VHlwZVNoaWZ0KSB8IChyaHMuYml0cygpIDw8IHJoc1Jlc3VsdFR5
cGVTaGlmdCk7CkBAIC05NCw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChsaHNP
YnNlcnZlZFR5cGUoKS5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQocmhzT2JzZXJ2ZWRUeXBl
KCkuaXNFbXB0eSgpKTsKICAgICB9Ci0gICAgQXJpdGhQcm9maWxlKCkgeyB9CisgICAgQXJpdGhQ
cm9maWxlKCkgPSBkZWZhdWx0OwogCiAgICAgc3RhdGljIEFyaXRoUHJvZmlsZSBmcm9tSW50KHVp
bnQzMl90IGJpdHMpCiAgICAgewpAQCAtMTcwLDcgKzE3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJoc1Nhd051bWJlcigpIHsgc2V0UmhzT2JzZXJ2ZWRUeXBlKHJoc09ic2VydmVkVHlwZSgpLndp
dGhOdW1iZXIoKSk7IH0KICAgICB2b2lkIHJoc1Nhd05vbk51bWJlcigpIHsgc2V0UmhzT2JzZXJ2
ZWRUeXBlKHJoc09ic2VydmVkVHlwZSgpLndpdGhOb25OdW1iZXIoKSk7IH0KIAotICAgIHZvaWQg
b2JzZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlIGxocywgSlNWYWx1ZSByaHMpCisgICAgdm9pZCBvYnNl
cnZlTEhTKEpTVmFsdWUgbGhzKQogICAgIHsKICAgICAgICAgQXJpdGhQcm9maWxlIG5ld1Byb2Zp
bGUgPSAqdGhpczsKICAgICAgICAgaWYgKGxocy5pc051bWJlcigpKSB7CkBAIC0xODEsNiArMTg5
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXdQcm9maWxlLmxo
c1Nhd05vbk51bWJlcigpOwogCisgICAgICAgIG1fYml0cyA9IG5ld1Byb2ZpbGUuYml0cygpOwor
ICAgIH0KKworICAgIHZvaWQgb2JzZXJ2ZUxIU0FuZFJIUyhKU1ZhbHVlIGxocywgSlNWYWx1ZSBy
aHMpCisgICAgeworICAgICAgICBvYnNlcnZlTEhTKGxocyk7CisKKyAgICAgICAgQXJpdGhQcm9m
aWxlIG5ld1Byb2ZpbGUgPSAqdGhpczsKICAgICAgICAgaWYgKHJocy5pc051bWJlcigpKSB7CiAg
ICAgICAgICAgICBpZiAocmhzLmlzSW50MzIoKSkKICAgICAgICAgICAgICAgICBuZXdQcm9maWxl
LnJoc1Nhd0ludDMyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0Lmpzb24KaW5kZXggYjFhYmFiOWUwMWQ1MjkzMDI5NjEwNGQyNjE1YWQ4ZDMxZWJj
N2I1NC4uZGM1OTk4MDU2OTFjZGE1N2I1ZDM2MTE1OTlkZDVmMjhkNzEwMmRiZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgpAQCAtMzMs
NyArMzMsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGVjIiwgImxlbmd0aCIgOiAy
IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19udW1iZXIiLCAibGVuZ3RoIiA6IDQg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX3N0cmluZyIsICJsZW5ndGgiIDogMyB9
LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbmVnYXRlIiwgImxlbmd0aCIgOiAzIH0sCisg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9uZWdhdGUiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2FkZCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfbXVsIiwgImxlbmd0aCIgOiA1IH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9kaXYiLCAibGVuZ3RoIiA6IDUgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggYzBiMDMxYjQzNjVhODlkYzM5NDNlMjM2NzVjZjg5
ZWIzMzUxYzhiMC4uNTg3N2U4M2Q1MTVkMjliMzQ4M2ZjNmUyNTgyZGRkZmJiNDQ5MjkwZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTMwMTUs
NiArMzAxNSwxMSBAQCBKSVRTdWJJQyogQ29kZUJsb2NrOjphZGRKSVRTdWJJQygpCiAgICAgcmV0
dXJuIG1fc3ViSUNzLmFkZCgpOwogfQogCitKSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJ
QygpCit7CisgICAgcmV0dXJuIG1fbmVnSUNzLmFkZCgpOworfQorCiBTdHJ1Y3R1cmVTdHViSW5m
byogQ29kZUJsb2NrOjpmaW5kU3R1YkluZm8oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAg
IGZvciAoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvIDogbV9zdHViSW5mb3MpIHsKQEAgLTQ1
NjIsNiArNDU2Nyw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wTWF0aElDU3RhdHMoKQogICAgIGRv
dWJsZSB0b3RhbEFkZFNpemUgPSAwLjA7CiAgICAgZG91YmxlIG51bU11bHMgPSAwLjA7CiAgICAg
ZG91YmxlIHRvdGFsTXVsU2l6ZSA9IDAuMDsKKyAgICBkb3VibGUgbnVtTmVncyA9IDAuMDsKKyAg
ICBkb3VibGUgdG90YWxOZWdTaXplID0gMC4wOwogICAgIGRvdWJsZSBudW1TdWJzID0gMC4wOwog
ICAgIGRvdWJsZSB0b3RhbFN1YlNpemUgPSAwLjA7CiAKQEAgLTQ1NzYsNiArNDU4MywxMSBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRzKCkKICAgICAgICAgICAgIHRvdGFsTXVsU2l6
ZSArPSBtdWxJQy0+Y29kZVNpemUoKTsKICAgICAgICAgfQogCisgICAgICAgIGZvciAoSklUTmVn
SUMqIG5lZ0lDIDogY29kZUJsb2NrLT5tX25lZ0lDcykgeworICAgICAgICAgICAgbnVtTmVncysr
OworICAgICAgICAgICAgdG90YWxOZWdTaXplICs9IG5lZ0lDLT5jb2RlU2l6ZSgpOworICAgICAg
ICB9CisKICAgICAgICAgZm9yIChKSVRTdWJJQyogc3ViSUMgOiBjb2RlQmxvY2stPm1fc3ViSUNz
KSB7CiAgICAgICAgICAgICBudW1TdWJzKys7CiAgICAgICAgICAgICB0b3RhbFN1YlNpemUgKz0g
c3ViSUMtPmNvZGVTaXplKCk7CkBAIC00NTkzLDYgKzQ2MDUsMTAgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZGF0YUxvZygiVG90YWwgTXVsIHNpemUgaW4gYnl0ZXM6
ICIsIHRvdGFsTXVsU2l6ZSwgIlxuIik7CiAgICAgZGF0YUxvZygiQXZlcmFnZSBNdWwgc2l6ZTog
IiwgdG90YWxNdWxTaXplIC8gbnVtTXVscywgIlxuIik7CiAgICAgZGF0YUxvZygiXG4iKTsKKyAg
ICBkYXRhTG9nKCJOdW0gTmVnczogIiwgbnVtTmVncywgIlxuIik7CisgICAgZGF0YUxvZygiVG90
YWwgTmVnIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsTmVnU2l6ZSwgIlxuIik7CisgICAgZGF0YUxv
ZygiQXZlcmFnZSBOZWcgc2l6ZTogIiwgdG90YWxOZWdTaXplIC8gbnVtTmVncywgIlxuIik7Cisg
ICAgZGF0YUxvZygiXG4iKTsKICAgICBkYXRhTG9nKCJOdW0gU3ViczogIiwgbnVtU3VicywgIlxu
Iik7CiAgICAgZGF0YUxvZygiVG90YWwgU3ViIHNpemUgaW4gYnl0ZXM6ICIsIHRvdGFsU3ViU2l6
ZSwgIlxuIik7CiAgICAgZGF0YUxvZygiQXZlcmFnZSBTdWIgc2l6ZTogIiwgdG90YWxTdWJTaXpl
IC8gbnVtU3VicywgIlxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKaW5kZXggMjllZDdjNzMzODMxNTg2ZjliOTQ5NDY0MDJhMzRkZTBiMWQ2MDc0ZC4uODJj
MjQ4ODYxYzVhY2M3YzEzYzIzM2I1YzdlNjYyMTFmZTJiMTA2OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMjQ1LDYgKzI0NSw3IEBAIHB1YmxpYzoK
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogYWRkU3R1YkluZm8oQWNjZXNzVHlwZSk7CiAgICAgSklU
QWRkSUMqIGFkZEpJVEFkZElDKCk7CiAgICAgSklUTXVsSUMqIGFkZEpJVE11bElDKCk7CisgICAg
SklUTmVnSUMqIGFkZEpJVE5lZ0lDKCk7CiAgICAgSklUU3ViSUMqIGFkZEpJVFN1YklDKCk7CiAg
ICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0
dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+Ojpp
dGVyYXRvciBzdHViSW5mb0VuZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CkBAIC05
OTcsNiArOTk4LDcgQEAgcHJpdmF0ZToKICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1
YkluZm9zOwogICAgIEJhZzxKSVRBZGRJQz4gbV9hZGRJQ3M7CiAgICAgQmFnPEpJVE11bElDPiBt
X211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1fbmVnSUNzOwogICAgIEJhZzxKSVRTdWJJQz4g
bV9zdWJJQ3M7CiAgICAgQmFnPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwogICAgIEJhZzxDYWxs
TGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMDc1ZjVjZDk2
YWI5ZTJkNmZhMmE4YmUwNzAwMDYxZmUxYTUwMzk2ZC4uOTBlZjAyOWFkYzZhNThhMzFhMWZjMGVl
NmM1ZGM0NTc4ODhjZjQzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE1NzksMTAgKzE1NzksMjQg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogc3JjKQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFVuYXJ5T3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKQogewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uob3BfdG9fbnVtYmVyICE9IG9wY29kZUlE
LCAib3BfdG9fbnVtYmVyIGlzIHByb2ZpbGVkLiIpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
b3BfdG9fbnVtYmVyICE9IG9wY29kZUlELCAib3BfdG9fbnVtYmVyIGhhcyBhIFZhbHVlIFByb2Zp
bGUuIik7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShvcF9uZWdhdGUgIT0gb3Bjb2RlSUQsICJv
cF9uZWdhdGUgaGFzIGFuIEFyaXRoIFByb2ZpbGUuIik7CiAgICAgZW1pdE9wY29kZShvcGNvZGVJ
RCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CisKKyAgICByZXR1cm4gZHN0OworfQorCitS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5T3AoT3Bjb2RlSUQgb3Bjb2Rl
SUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjLCBPcGVyYW5kVHlwZXMgdHlwZXMp
Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShvcF90b19udW1iZXIgIT0gb3Bjb2RlSUQsICJv
cF90b19udW1iZXIgaGFzIGEgVmFsdWUgUHJvZmlsZS4iKTsKKyAgICBlbWl0T3Bjb2RlKG9wY29k
ZUlEKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsKKworICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9uZWdhdGUpCisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChBcml0aFByb2ZpbGUodHlw
ZXMuZmlyc3QoKSkuYml0cygpKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5k
ZXggOTA0NzNiZjAyZTY4NGNmYWFlNTNjMTM1NzJiODhkYjUxZGJhZmVhOS4uZjJlZGM4MGNiNDhi
YzU2YmIxZWQ4MDNjZTA5MmY2NzJjNDdlZDIwZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNTExLDYgKzUx
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZEdsb2Jh
bE9iamVjdChSZWdpc3RlcklEKiBkc3QpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmFy
eU9wKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRVbmFyeU9wKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIHNyYywgT3BlcmFuZFR5cGVzKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5
T3BQcm9maWxlZChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0QmluYXJ5T3AoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMiwgT3BlcmFuZFR5cGVzKTsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdEVxdWFsaXR5T3AoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJRCogc3JjMik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggMTg3MDJm
MGE0Y2ZmZGMyM2M1ZGRkYWZlMjFlNzFkNThiMGJkMzE4OC4uNWFhOWZjODEzZjc4YjkxNzI3ZWRh
MTViYzcxOWQwNWQ4OGRlODE0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMTYwNiw3ICsxNjA2LDcgQEAgUmVnaXN0
ZXJJRCogVW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKgogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzcmMgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHBv
c2l0aW9uKCksIHBvc2l0aW9uKCksIHBvc2l0aW9uKCkpOwotICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdFVuYXJ5T3Aob3Bjb2RlSUQoKSwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwg
c3JjLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wY29kZUlEKCks
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYy5nZXQoKSwgT3BlcmFuZFR5cGVz
KG1fZXhwci0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBVbmFyeVBsdXNOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCmluZGV4IDkzYjMyNTYzOTJkM2MzODJkZTZhMWY0YzZiOTkzMTIyNGVlN2FmYjEuLjhhYTgy
ZmEzZmJjNWM5Y2ZkMGExNzY2NjIzM2QyOGNmMDJlNmUwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0zNDMyLDcgKzM0MzIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kZSogbm9kZSkKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUmVwYXRjaGluZ0Z1bmN0aW9u
LCB0eXBlbmFtZSBOb25SZXBhdGNoaW5nRnVuY3Rpb24+Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGJv
b2wgbmVlZHNTY3JhdGNoR1BSUmVnLCBib29sIG5lZWRzU2NyYXRjaEZQUlJlZywgUmVwYXRjaGlu
Z0Z1bmN0aW9uIHJlcGF0Y2hpbmdGdW5jdGlvbiwgTm9uUmVwYXRjaGluZ0Z1bmN0aW9uIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9k
ZSogbm9kZSwgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgYm9vbCBuZWVkc1Nj
cmF0Y2hHUFJSZWcsIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24g
cmVwYXRjaGluZ0Z1bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rpb24gbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uKQogewogICAgIEVkZ2UmIGxlZnRDaGlsZCA9IG5vZGUtPmNoaWxkMSgpOwogICAgIEVk
Z2UmIHJpZ2h0Q2hpbGQgPSBub2RlLT5jaGlsZDIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA0N2VhZDMwYWM1YzU1ZjJjMzU4NmZkMjYw
ZmI0NDI4OGUwNjg3ZDliLi5lN2EyOWI0MzM0NmIyNDgyM2E5OTg5ZmVlOTVkNjQwNWMzMThkYTcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBA
IC0yNTE1LDcgKzI1MTUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlU2hpZnRPcChOb2Rl
Kik7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBSZXBhdGNo
aW5nRnVuY3Rpb24sIHR5cGVuYW1lIE5vblJlcGF0Y2hpbmdGdW5jdGlvbj4KLSAgICB2b2lkIGNv
bXBpbGVNYXRoSUMoTm9kZSosIEpJVE1hdGhJQzxHZW5lcmF0b3I+KiwgYm9vbCBuZWVkc1NjcmF0
Y2hHUFJSZWcsIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24sIE5v
blJlcGF0Y2hpbmdGdW5jdGlvbik7CisgICAgdm9pZCBjb21waWxlTWF0aElDKE5vZGUqLCBKSVRC
aW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGJvb2wgbmVlZHNTY3JhdGNoR1BSUmVnLCBib29sIG5l
ZWRzU2NyYXRjaEZQUlJlZywgUmVwYXRjaGluZ0Z1bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rp
b24pOwogCiAgICAgdm9pZCBjb21waWxlQXJpdGhEb3VibGVVbmFyeU9wKE5vZGUqLCBkb3VibGUg
KCpkb3VibGVGdW5jdGlvbikoZG91YmxlKSwgZG91YmxlICgqb3BlcmF0aW9uKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSkpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUqKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAyMTk4
MjY5YmJjY2M2OTVmM2EwOTE2YThjZGEzZjYxODYwNGY1YTlmLi5hZjVjYzM5N2E0ZTZmZDYwNjRl
MjdiMzY1YTZlNWM4NGFhMzVmMThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNTYwLDcgKzE1NjAsNyBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+Ci0gICAgdm9pZCBjb21waWxlTWF0
aElDKEpJVE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEZ1bmN0aW9uUHRyIHJlcGF0Y2hpbmdG
dW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQorICAgIHZvaWQgY29t
cGlsZU1hdGhJQyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBGdW5jdGlvblB0
ciByZXBhdGNoaW5nRnVuY3Rpb24sIEZ1bmN0aW9uUHRyIG5vblJlcGF0Y2hpbmdGdW5jdGlvbikK
ICAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CiAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKaW5kZXggODY0ZGY3NDlmYTVhYjM3ZjUwMzQ2
ODU0NDY5OGJkMWNiMDU3MDZiZC4uZTk2MTAwMWI1MGQ4YzY1NGYzZTY2MWY3ZGQxM2JkOTZiOTVh
NzA3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCkBAIC0zNjEs
NiArMzYxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwogICAg
IH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tUHRyIGFyZzMsIFRydXN0ZWRJbW1Q
dHIgYXJnNCkKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRD
YWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7
CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykK
ICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpAQCAtMjI2Niw2ICsyMjc2LDE1
IEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShhcmc0LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwog
ICAgIH0KICNlbmRpZgorCisgICAgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoSlNW
YWx1ZVJlZ3MgYXJnKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnLmdwcigpKTsKKyNlbHNlCisgICAgICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcucGF5bG9hZEdQUigp
LCBhcmcudGFnR1BSKCkpOworI2VuZGlmCisgICAgfQogICAgIAogICAgIHZvaWQgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCiAg
ICAgewpAQCAtMjI3Niw2ICsyMjk1LDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAg
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEpTVmFsdWVSZWdzIGFyZzEsIFRydXN0
ZWRJbW1QdHIgYXJnMikKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCksIGFyZzIpOworI2Vsc2UKKyAgICAgICAg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEucGF5
bG9hZEdQUigpLCBhcmcxLnRhZ0dQUigpLCBhcmcyKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVS
ZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
QEAgLTIyOTMsNiArMjMyMSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50
YWdHUFIoKSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCksIGFyZzMsIGFyZzQpOwog
I2VuZGlmCiAgICAgfQorCisgICAgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoSlNW
YWx1ZVJlZ3MgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyLCBUcnVzdGVkSW1tUHRyIGFyZzMpCisg
ICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLmdwcigpLCBhcmcyLCBhcmczKTsKKyNlbHNlCisgICAgICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwg
YXJnMS50YWdHUFIoKSwgYXJnMiwgYXJnMyk7CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgdm9p
ZCBzZXR1cEFyZ3VtZW50cyhKU1ZhbHVlUmVncyBhcmcxKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCmluZGV4IDNkMjIwOGIwZTE4YzY4YjU3ZWQwZDA5YzI2MzI3ZTg4MzhkNTI3MjcuLjFi
NzU4NWNkZjllZTE2ZGI4MDc4NGVhODU2YTRmNGQwZTAxYTIwMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaApAQCAtNjk3LDEwICs2OTcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5v
blByb2ZpbGVkRnVuY3Rpb24+Ci0gICAgICAgIHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUTWF0aElD
PEdlbmVyYXRvcj4qLCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVk
RnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdl
bmVyYXRvcj4qLCBJbnN0cnVjdGlvbiosIFByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVu
Y3Rpb24pOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQ
cm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgorICAgICAgICB2
b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiwgSW5zdHJ1Y3Rp
b24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9u
PgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93KEpJVE1hdGhJQzxHZW5lcmF0b3I+KiwgSW5z
dHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVw
YXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBlbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFt
ZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+CisgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIEluc3RydWN0aW9u
KiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5j
dGlvbik7CiAKICAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CkBAIC03NDUsNiArNzQ5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUMsIGludCwgSlNDZWxsKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMsIEpTQ2VsbCopOwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKLCBpbnQsIEdQ
UlJlZyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUosIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncyk7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FU3NpSkksIGludCwgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcsIFVuaXF1ZWRTdHJp
bmdJbXBsKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0
aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VTc2lKSSwgaW50LCBTdHJ1Y3R1cmVTdHViSW5m
byosIEdQUlJlZywgVW5pcXVlZFN0cmluZ0ltcGwqKTsKQEAgLTc1NCw5ICs3NTksMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkksIGludCwgR1BSUmVnLCBVbmlxdWVkU3RyaW5nSW1w
bCopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJlZyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBcnAsIEpTVmFsdWVSZWdzLCBK
U1ZhbHVlUmVncywgQXJpdGhQcm9maWxlKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQXJwLCBKU1ZhbHVlUmVncywgSlNWYWx1
ZVJlZ3MsIEpTVmFsdWVSZWdzLCBBcml0aFByb2ZpbGUqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkosIEpTVmFsdWVSZWdzLCBK
U1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycE1pYywgSlNWYWx1ZVJlZ3MsIEpTVmFs
dWVSZWdzLCBKU1ZhbHVlUmVncywgQXJpdGhQcm9maWxlKiwgVHJ1c3RlZEltbVB0cik7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpN
aWMsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgVHJ1c3RlZEltbVB0cik7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljLCBK
U1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBUcnVzdGVkSW1tUHRyKTsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
SkpBcCwgaW50LCBHUFJSZWcsIEdQUlJlZywgQXJyYXlQcm9maWxlKik7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKQnksIGludCwg
R1BSUmVnLCBHUFJSZWcsIEJ5VmFsSW5mbyopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYy5jcHAKaW5kZXggYzZiNzg1Mzc3ZGQ1ZDY3MTY4YTYyNTVmMThmNTU4MDMx
YTA4ZDQ2Yy4uN2FhNjU2ZTQ0NGI2NTFlYzk0MDYyMzNjMTRmNmQ0YTIwMzc5NjNmYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC00NjksMzcgKzQ2
OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpCiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCByZXN1bHQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBz
cmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBzcmNSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpT
VmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBzcmNSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVn
VDQ7Ci0jZW5kaWYKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBzcmNSZWdzKTsK
LQotICAgIEpJVE5lZ0dlbmVyYXRvciBnZW4ocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQ
Uik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCi0gICAgQVNTRVJUKGdlbi5k
aWRFbWl0RmFzdFBhdGgoKSk7Ci0gICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Ci0KLSAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoKTsKKyAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOworICAgIGVtaXRNYXRoSUNGYXN0KG5l
Z2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQs
IG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNl
dChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29kZU9mZnNldCk7CiAKLSAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX25l
Z2F0ZSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBi
aXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbikpOworICAgIGVtaXRNYXRoSUNTbG93KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+CkBAIC02OTgsNyArNjc4LDU2IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+Ci12
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUTWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1
bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVu
Y3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKK3sKKyAgICBp
bnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3Bl
cmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVn
aXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisgICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwg
dXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0
aC4KKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVTdGFydCA9
IGxhYmVsKCk7CisjZW5kaWYKKworICAgIEFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gKmJp
dHdpc2VfY2FzdDxBcml0aFByb2ZpbGUqPigmY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCk7CisgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNS
ZWdzLCBzY3JhdGNoR1BSLCBhcml0aFByb2ZpbGUpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKKworICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0
aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRl
LmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRv
ci0+dmFsdWU7CisKKyAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVy
YXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOworICAgIGlmICghZ2VuZXJh
dGVkSW5saW5lQ29kZSkgeworICAgICAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbihwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNS
ZWdzLCAmYXJpdGhQcm9maWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbihub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVt
cHMpOworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVFbmQgPSBs
YWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKKyAgICB9KTsK
KyNlbmRpZgorCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3Mp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1
bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgordm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9u
UHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQogewogICAgIGludCByZXN1bHQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGludCBvcDEgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwpAQCAtNzc0LDcgKzgwMyw1MiBAQCB2b2lkIEpJVDo6
ZW1pdE1hdGhJQ0Zhc3QoSklUTWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFt
ZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlw
ZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVE1hdGhJ
QzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1
bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24p
Cit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0
aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1
bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQoreworICAgIE1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0
aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CisgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworCisgICAgaW50
IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyNlbHNlCisg
ICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisjZW5k
aWYKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9
IGxhYmVsKCk7CisjZW5kaWYKKworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAg
ICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiaXR3aXNlX2Nhc3Q8QXJpdGhQcm9m
aWxlKj4oJmN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAobWF0
aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKKyAgICAgICAgICAgIG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKHJlaW50ZXJw
cmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
cmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb24ocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9m
aWxlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb24ocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1p
Yz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhF
bmQgPSBsYWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nh
c3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7
CisgICAgfSk7CisjZW5kaWYKKworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCBy
ZXN1bHRSZWdzKTsKKworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0
cnVjdGlvbiktPnZhbHVlOworICAgICAgICBtYXRoSUMtPmZpbmFsaXplSW5saW5lQ29kZShtYXRo
SUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtCdWZmZXIpOworICAgIH0pOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlw
ZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgordm9pZCBK
SVQ6OmVtaXRNYXRoSUNTbG93KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uIHBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24s
IFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCiB7CiAgICAgTWF0aElDR2VuZXJhdGlv
blN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5l
cmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IDAyMWMwYTZmZmRlZjk4NzQ2ODM5OWM4NjFhMzZkODE0
Y2Y0YTViYjEuLjQ1MTBhOWI2YmZhN2U1YmU5MDk0YWQyYzFjMmI1NzFlYzU0MTI4NzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00MTYsNiArNDE2LDE0IEBAIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKFZfSklU
T3BlcmF0aW9uX0VDSVpDIG9wZXJhCiAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKIH0KIAorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBKSVQ6OmNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBKU1ZhbHVl
UmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZykKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnKTsKKyAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7CisgICAgc2V0dXBSZXN1bHRzKHJlc3VsdCk7CisgICAgcmV0dXJuIGNh
bGw7Cit9CisKIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwg
SlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKIHsKICAgICBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CkBAIC00MjQsNiArNDMyLDE0IEBAIEFMV0FZU19J
TkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKSiBvcGVyYXRpCiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQXJw
IG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBvcGVyYW5kLCBBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUob3BlcmFuZCwgVHJ1c3RlZEltbVB0cihhcml0aFByb2ZpbGUpKTsKKyAgICBDYWxsIGNhbGwg
PSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgc2V0dXBSZXN1
bHRzKHJlc3VsdCk7CisgICAgcmV0dXJuIGNhbGw7Cit9CisKIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycCBv
cGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJl
Z3MgYXJnMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCiB7CiAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoYXJpdGhQcm9maWxlKSk7
CkBAIC00NDAsNiArNDU2LDE0IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
SklUOjpjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSkFycE1pYyBvCiAgICAgcmV0dXJu
IGNhbGw7CiB9CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKTWljIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVz
dWx0LCBKU1ZhbHVlUmVncyBhcmcsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQoreworICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcsIG1hdGhJQyk7CisgICAgQ2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIHNldHVwUmVzdWx0cyhy
ZXN1bHQpOworICAgIHJldHVybiBjYWxsOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMgb3BlcmF0
aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFy
ZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyLCBtYXRoSUMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRNYXRoSUMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElD
LmgKaW5kZXggNTE0ZDE0ZDY2N2ZiOGIyZTFjZTZkN2E0YjM1ZWEwMmUyOTc4NWJhZi4uMGRlYTE4
YmFiYjRkZDMzNzliYjFhNDQ4NGE0ZmM2N2NiYzNiZDg5OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE1hdGhJQy5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSklUQWRkR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSklUTWF0aElDSW5saW5lUmVzdWx0LmgiCiAjaW5jbHVkZSAiSklU
TXVsR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUTmVnR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
SklUU3ViR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJl
cGF0Y2guaCIKQEAgLTUyLDcgKzUzLDcgQEAgc3RydWN0IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSB7
CiAKICNkZWZpbmUgRU5BQkxFX01BVEhfSUNfU1RBVFMgMAogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yVHlwZT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3JUeXBlLCBib29sKCpw
cm9maWxlVmFsaWRhdG9yKShBcml0aFByb2ZpbGUqKT4KIGNsYXNzIEpJVE1hdGhJQyB7CiBwdWJs
aWM6CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZG9uZUxvY2F0aW9uKCkgeyByZXR1cm4gbV9pbmxp
bmVTdGFydC5sYWJlbEF0T2Zmc2V0KG1faW5saW5lU2l6ZSk7IH0KQEAgLTcyLDE3ICs3MywxNyBA
QCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBzdGFydFNpemUgPSBqaXQubV9hc3NlbWJsZXIuYnVm
ZmVyKCkuY29kZVNpemUoKTsKIAogICAgICAgICBpZiAoQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtX2dlbmVyYXRvci5hcml0aFByb2ZpbGUoKSkgewotICAgICAgICAgICAgaWYgKGFyaXRo
UHJvZmlsZS0+bGhzT2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpIHx8IGFyaXRoUHJvZmlsZS0+cmhz
T2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoIXByb2ZpbGVWYWxp
ZGF0b3IoYXJpdGhQcm9maWxlKSkgewogICAgICAgICAgICAgICAgIC8vIEl0IGxvb2tzIGxpa2Ug
dGhlIE1hdGhJQyBoYXMgeWV0IHRvIGV4ZWN1dGUuIFdlIGRvbid0IHdhbnQgdG8gZW1pdCBjb2Rl
IGluIHRoaXMKICAgICAgICAgICAgICAgICAvLyBjYXNlIGZvciBhIGNvdXBsZSByZWFzb25zLiBG
aXJzdCwgdGhlIG9wZXJhdGlvbiBtYXkgbmV2ZXIgZXhlY3V0ZSwgc28gaWYgd2UgZG9uJ3QgZW1p
dAogICAgICAgICAgICAgICAgIC8vIGNvZGUsIGl0J3MgYSB3aW4uIFNlY29uZCwgaWYgdGhlIG9w
ZXJhdGlvbiBkb2VzIGV4ZWN1dGUsIHdlIGNhbiBlbWl0IGJldHRlciBjb2RlCi0gICAgICAgICAg
ICAgICAgLy8gb25jZSB3ZSBoYXZlIGFuIGlkZWEgYWJvdXQgdGhlIHR5cGVzIG9mIGxocyBhbmQg
cmhzLgorICAgICAgICAgICAgICAgIC8vIG9uY2Ugd2UgaGF2ZSBhbiBpZGVhIGFib3V0IHRoZSB0
eXBlcy4KICAgICAgICAgICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQucGF0
Y2hhYmxlSnVtcCgpKTsKICAgICAgICAgICAgICAgICBzaXplX3QgaW5saW5lU2l6ZSA9IGppdC5t
X2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpIC0gc3RhcnRTaXplOwogICAgICAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoaW5saW5lU2l6ZSwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihpbmxp
bmVTaXplKSA8PSBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hhYmxlSnVtcFNpemUoKSk7CiAgICAgICAg
ICAgICAgICAgc3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBzdGF0ZS5mYXN0UGF0aEVuZCA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgIEFT
U0VSVCghbV9nZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoKTsgLy8gV2Ugc2hvdWxkIGhhdmUgZ2F0
aGVyZWQgc29tZSBvYnNlcnZlZCB0eXBlIGluZm8gZm9yIGxocyBhbmQgcmhzIGJlZm9yZSB0cnlp
bmcgdG8gcmVnZW5lcmF0ZSBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZ2VuZXJh
dGVGYXN0UGF0aE9uUmVwYXRjaCk7IC8vIFdlIHNob3VsZCBoYXZlIGdhdGhlcmVkIHNvbWUgb2Jz
ZXJ2ZWQgdHlwZSBpbmZvIGFib3V0IHRoZSB0eXBlcyBiZWZvcmUgdHJ5aW5nIHRvIHJlZ2VuZXJh
dGUgYWdhaW4uCiAgICAgICAgICAgICAgICAgbV9nZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTI0
Myw5ICsyNDQsMjYgQEAgcHVibGljOgogICAgIEdlbmVyYXRvclR5cGUgbV9nZW5lcmF0b3I7CiB9
OwogCi10eXBlZGVmIEpJVE1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+IEpJVEFkZElDOwotdHlwZWRl
ZiBKSVRNYXRoSUM8SklUTXVsR2VuZXJhdG9yPiBKSVRNdWxJQzsKLXR5cGVkZWYgSklUTWF0aElD
PEpJVFN1YkdlbmVyYXRvcj4gSklUU3ViSUM7CitpbmxpbmUgYm9vbCBjYW5HZW5lcmF0ZVdpdGhC
aW5hcnlQcm9maWxlKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiAh
YXJpdGhQcm9maWxlLT5saHNPYnNlcnZlZFR5cGUoKS5pc0VtcHR5KCkgJiYgIWFyaXRoUHJvZmls
ZS0+cmhzT2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIEdl
bmVyYXRvclR5cGU+CitjbGFzcyBKSVRCaW5hcnlNYXRoSUMgOiBwdWJsaWMgSklUTWF0aElDPEdl
bmVyYXRvclR5cGUsIGNhbkdlbmVyYXRlV2l0aEJpbmFyeVByb2ZpbGU+IHsgfTsKKwordHlwZWRl
ZiBKSVRCaW5hcnlNYXRoSUM8SklUQWRkR2VuZXJhdG9yPiBKSVRBZGRJQzsKK3R5cGVkZWYgSklU
QmluYXJ5TWF0aElDPEpJVE11bEdlbmVyYXRvcj4gSklUTXVsSUM7Cit0eXBlZGVmIEpJVEJpbmFy
eU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+IEpJVFN1YklDOworCisKK2lubGluZSBib29sIGNhbkdl
bmVyYXRlV2l0aFVuYXJ5UHJvZmlsZShBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAg
ICByZXR1cm4gIWFyaXRoUHJvZmlsZS0+bGhzT2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpOworfQor
dGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CitjbGFzcyBKSVRVbmFyeU1hdGhJQyA6
IHB1YmxpYyBKSVRNYXRoSUM8R2VuZXJhdG9yVHlwZSwgY2FuR2VuZXJhdGVXaXRoVW5hcnlQcm9m
aWxlPiB7IH07CisKK3R5cGVkZWYgSklUVW5hcnlNYXRoSUM8SklUTmVnR2VuZXJhdG9yPiBKSVRO
ZWdJQzsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUTWF0aElDRm9yd2FyZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUTWF0aElDRm9yd2FyZHMuaAppbmRleCAxZmJhMGZjNmE3Zjg5N2RiNzFhMDA0MDcyYWI2
ZjkwY2JlOGNmMzQ1Li4wOGJmZDEzMDE0MTkxZWQ5MjY1OTJiZWI4ZWE0ZDcwYjUzYzViM2YwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQ0ZvcndhcmRzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUNGb3J3YXJkcy5oCkBAIC0y
OSwxNCArMjksMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBH
ZW5lcmF0b3I+IGNsYXNzIEpJVE1hdGhJQzsKK3RlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+
IGNsYXNzIEpJVEJpbmFyeU1hdGhJQzsKK3RlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+IGNs
YXNzIEpJVFVuYXJ5TWF0aElDOwogY2xhc3MgSklUQWRkR2VuZXJhdG9yOwogY2xhc3MgSklUTXVs
R2VuZXJhdG9yOworY2xhc3MgSklUTmVnR2VuZXJhdG9yOwogY2xhc3MgSklUU3ViR2VuZXJhdG9y
OwogCi10eXBlZGVmIEpJVE1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+IEpJVEFkZElDOwotdHlwZWRl
ZiBKSVRNYXRoSUM8SklUTXVsR2VuZXJhdG9yPiBKSVRNdWxJQzsKLXR5cGVkZWYgSklUTWF0aElD
PEpJVFN1YkdlbmVyYXRvcj4gSklUU3ViSUM7Cit0eXBlZGVmIEpJVEJpbmFyeU1hdGhJQzxKSVRB
ZGRHZW5lcmF0b3I+IEpJVEFkZElDOwordHlwZWRlZiBKSVRCaW5hcnlNYXRoSUM8SklUTXVsR2Vu
ZXJhdG9yPiBKSVRNdWxJQzsKK3R5cGVkZWYgSklUVW5hcnlNYXRoSUM8SklUTmVnR2VuZXJhdG9y
PiBKSVROZWdJQzsKK3R5cGVkZWYgSklUQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4gSklU
U3ViSUM7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE5lZ0dlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE5lZ0dlbmVyYXRvci5jcHAKaW5kZXggYzY4NTE2NzZkNzQ1YTgwM2JmM2U1ZWMxZjU0
YmU4MTg0ZWVlODU3OS4uZWJkZWRhNGY2MDliOWU3YmE1N2I3YWYyZTdmNThjNzQ0ZGYzZTY2MiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVROZWdHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTmVnR2VuZXJhdG9yLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
MzcgKzI2LDg0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSklUTmVnR2VuZXJh
dG9yLmgiCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKKwogI2lmIEVOQUJMRShKSVQpCiAK
IG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVE5lZ0dlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0
aChDQ2FsbEhlbHBlcnMmIGppdCkKK0pJVE1hdGhJQ0lubGluZVJlc3VsdCBKSVROZWdHZW5lcmF0
b3I6OmdlbmVyYXRlSW5saW5lKENDYWxsSGVscGVycyYgaml0LCBNYXRoSUNHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogeworICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7
CiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBtX3NyYy5wYXlsb2FkR1BSKCkpOwogICAgIEFT
U0VSVChtX3NjcmF0Y2hHUFIgIT0gbV9yZXN1bHQucGF5bG9hZEdQUigpKTsKLSAgICBBU1NFUlQo
bV9zY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAg
ICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBtX3NyYy50YWdHUFIoKSk7CiAgICAgQVNTRVJUKG1f
c2NyYXRjaEdQUiAhPSBtX3Jlc3VsdC50YWdHUFIoKSk7CiAjZW5kaWYKIAotICAgIG1fZGlkRW1p
dEZhc3RQYXRoID0gdHJ1ZTsKKyAgICBPYnNlcnZlZFR5cGUgb2JzZXJ2ZWRUeXBlcyA9IG1fYXJp
dGhQcm9maWxlLT5saHNPYnNlcnZlZFR5cGUoKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFv
YnNlcnZlZFR5cGVzLmlzRW1wdHkoKSwgIldlIHNob3VsZCBub3QgYXR0ZW1wdCB0byBnZW5lcmF0
ZSBhbnl0aGluZyBpZiB3ZSBkbyBub3QgaGF2ZSBhIHByb2ZpbGUuIik7CisKKyAgICBpZiAob2Jz
ZXJ2ZWRUeXBlcy5pc09ubHlOb25OdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lu
bGluZVJlc3VsdDo6RG9udEdlbmVyYXRlOworCisgICAgaWYgKG9ic2VydmVkVHlwZXMuaXNPbmx5
SW50MzIoKSkgeworICAgICAgICBqaXQubW92ZVZhbHVlUmVncyhtX3NyYywgbV9yZXN1bHQpOwor
ICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMiht
X3NyYykpOworICAgICAgICBzdGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoVGVz
dDMyKENDYWxsSGVscGVyczo6WmVybywgbV9zcmMucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigweDdmZmZmZmZmKSkpOworICAgICAgICBqaXQubmVnMzIobV9yZXN1bHQu
cGF5bG9hZEdQUigpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBqaXQuYm94SW50MzIo
bV9yZXN1bHQucGF5bG9hZEdQUigpLCBtX3Jlc3VsdCk7CisjZW5kaWYKKworICAgICAgICByZXR1
cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpHZW5lcmF0ZWRGYXN0UGF0aDsKKyAgICB9CisgICAg
aWYgKG9ic2VydmVkVHlwZXMuaXNPbmx5TnVtYmVyKCkpIHsKKyAgICAgICAgc3RhdGUuc2xvd1Bh
dGhKdW1wcy5hcHBlbmQoaml0LmJyYW5jaElmSW50MzIobV9zcmMpKTsKKyAgICAgICAgc3RhdGUu
c2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKG1fc3JjLCBtX3NjcmF0
Y2hHUFIpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAobV9zcmMucGF5bG9hZEdQ
UigpICE9IG1fcmVzdWx0LnBheWxvYWRHUFIoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoKGludDY0X3QpKDF1bGwgPDwgNjMpKSwgbV9yZXN1bHQu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgIGppdC54b3I2NChtX3NyYy5wYXlsb2FkR1BSKCks
IG1fcmVzdWx0LnBheWxvYWRHUFIoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgoaW50NjRfdCkoMXVsbCA8PCA2Mykp
LCBtX3NjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LnhvcjY0KG1fc2NyYXRjaEdQUiwgbV9y
ZXN1bHQucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaml0Lm1vdmVW
YWx1ZVJlZ3MobV9zcmMsIG1fcmVzdWx0KTsKKyAgICAgICAgaml0LnhvcjMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpLCBtX3Jlc3VsdC50YWdHUFIoKSk7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJhdGVkRmFzdFBhdGg7Cisg
ICAgfQorICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6OkdlbmVyYXRlRnVsbFNuaXBw
ZXQ7Cit9CisKK2Jvb2wgSklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVs
cGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBlbmRKdW1wTGlzdCwgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCwgYm9vbCkKK3sKKyAgICBBU1NFUlQobV9z
Y3JhdGNoR1BSICE9IG1fc3JjLnBheWxvYWRHUFIoKSk7CisgICAgQVNTRVJUKG1fc2NyYXRjaEdQ
UiAhPSBtX3Jlc3VsdC5wYXlsb2FkR1BSKCkpOworICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0g
SW52YWxpZEdQUlJlZyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBBU1NFUlQobV9zY3Jh
dGNoR1BSICE9IG1fc3JjLnRhZ0dQUigpKTsKKyAgICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IG1f
cmVzdWx0LnRhZ0dQUigpKTsKKyNlbmRpZgogCiAgICAgaml0Lm1vdmVWYWx1ZVJlZ3MobV9zcmMs
IG1fcmVzdWx0KTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3JjTm90SW50ID0gaml0LmJyYW5j
aElmTm90SW50MzIobV9zcmMpOwogCiAgICAgLy8gLTAgc2hvdWxkIHByb2R1Y2UgYSBkb3VibGUs
IGFuZCBoZW5jZSBjYW5ub3QgYmUgbmVnYXRlZCBhcyBhbiBpbnQuCiAgICAgLy8gVGhlIG5lZ2F0
aXZlIGludDMyIDB4ODAwMDAwMDAgZG9lc24ndCBoYXZlIGEgcG9zaXRpdmUgaW50MzIgcmVwcmVz
ZW50YXRpb24sIGFuZCBoZW5jZSBjYW5ub3QgYmUgbmVnYXRlZCBhcyBhbiBpbnQuCi0gICAgbV9z
bG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVy
bywgbV9zcmMucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweDdmZmZm
ZmZmKSkpOworICAgIHNsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBtX3NyYy5wYXlsb2FkR1BSKCksIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDB4N2ZmZmZmZmYpKSk7CiAKICAgICBqaXQubmVnMzIobV9yZXN1bHQucGF5bG9hZEdQ
UigpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGppdC5ib3hJbnQzMihtX3Jlc3VsdC5wYXls
b2FkR1BSKCksIG1fcmVzdWx0KTsKICNlbmRpZgotICAgIG1fZW5kSnVtcExpc3QuYXBwZW5kKGpp
dC5qdW1wKCkpOworICAgIGVuZEp1bXBMaXN0LmFwcGVuZChqaXQuanVtcCgpKTsKIAogICAgIHNy
Y05vdEludC5saW5rKCZqaXQpOwotICAgIG1fc2xvd1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJy
YW5jaElmTm90TnVtYmVyKG1fc3JjLCBtX3NjcmF0Y2hHUFIpKTsKKyAgICBzbG93UGF0aEp1bXBM
aXN0LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIobV9zcmMsIG1fc2NyYXRjaEdQUikpOwog
CiAgICAgLy8gRm9yIGEgZG91YmxlLCBhbGwgd2UgbmVlZCB0byBkbyBpcyB0byBpbnZlcnQgdGhl
IHNpZ24gYml0LgogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC02NSw2ICsxMTIsNyBAQCB2b2lkIEpJ
VE5lZ0dlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKICNlbHNl
CiAgICAgaml0LnhvcjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpLCBtX3Jl
c3VsdC50YWdHUFIoKSk7CiAjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE5lZ0dl
bmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVROZWdHZW5lcmF0b3IuaApp
bmRleCA2ZGMyYzg1YTZiMjUxYTgzYzMyZmI1MThjOTNkNTBjYTcwYjE2MTEwLi4zMGRlMmM1YzEy
NmQyMDQxNmQzZjdiZjAzZjU3OTM4Zjg0YjU2M2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE5lZ0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUTmVnR2VuZXJhdG9yLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDMyICsyOSwzMiBAQAogI2lmIEVOQUJMRShKSVQp
CiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJTbmlwcGV0T3BlcmFuZC5o
IgorI2luY2x1ZGUgIkpJVE1hdGhJQy5oIgorI2luY2x1ZGUgIkpJVE1hdGhJQ0lubGluZVJlc3Vs
dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSklUTmVnR2VuZXJhdG9yIHsKIHB1Ymxp
YzoKLSAgICBKSVROZWdHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBz
cmMsIEdQUlJlZyBzY3JhdGNoR1BSKQotICAgICAgICA6IG1fcmVzdWx0KHJlc3VsdCkKKyAgICBK
SVROZWdHZW5lcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBKSVROZWdHZW5lcmF0b3IoSlNWYWx1
ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBzcmMsIEdQUlJlZyBzY3JhdGNoR1BSLCBBcml0aFBy
b2ZpbGUmIGFyaXRoUHJvZmlsZSkKKyAgICAgICAgOiBtX2FyaXRoUHJvZmlsZSgmYXJpdGhQcm9m
aWxlKQorICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKICAgICAgICAgLCBtX3NyYyhzcmMpCiAg
ICAgICAgICwgbV9zY3JhdGNoR1BSKHNjcmF0Y2hHUFIpCiAgICAgeyB9CiAKLSAgICB2b2lkIGdl
bmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJik7CisgICAgSklUTWF0aElDSW5saW5lUmVzdWx0
IGdlbmVyYXRlSW5saW5lKENDYWxsSGVscGVycyYsIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYpOwor
ICAgIGJvb2wgZ2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmLCBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0JiBlbmRKdW1wTGlzdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1w
TGlzdCwgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKIAotICAgIGJvb2wgZGlkRW1pdEZhc3RQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9kaWRFbWl0RmFzdFBhdGg7IH0KLSAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0JiBlbmRKdW1wTGlzdCgpIHsgcmV0dXJuIG1fZW5kSnVtcExpc3Q7IH0KLSAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93UGF0aEp1bXBMaXN0KCkgeyByZXR1cm4gbV9z
bG93UGF0aEp1bXBMaXN0OyB9CisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUoKSBjb25z
dCB7IHJldHVybiBtX2FyaXRoUHJvZmlsZTsgfQogCiBwcml2YXRlOgorICAgIEFyaXRoUHJvZmls
ZSogbV9hcml0aFByb2ZpbGUgeyBudWxscHRyIH07CiAgICAgSlNWYWx1ZVJlZ3MgbV9yZXN1bHQ7
CiAgICAgSlNWYWx1ZVJlZ3MgbV9zcmM7CiAgICAgR1BSUmVnIG1fc2NyYXRjaEdQUjsKLSAgICBi
b29sIG1fZGlkRW1pdEZhc3RQYXRoIHsgZmFsc2UgfTsKLQotICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QgbV9lbmRKdW1wTGlzdDsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1fc2xvd1Bh
dGhKdW1wTGlzdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggYzRkODc5YTkzZGVhZDkxN2U0ZjFkMGRj
ODliOTUwZjE0ZmJiMGM3Yy4uZDhiZGMxMDgxNjNhNWJmOTQzYzA1ZDAzOGI4ZDEwMzFhOTUyYjlj
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0y
NDY5LDYgKzI0NjksOTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkTm9PcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMKICAgICByZXR1cm4gcHJv
ZmlsZWRNdWwoKnZtLCBleGVjLCBlbmNvZGVkT3AxLCBlbmNvZGVkT3AyLCBhcml0aFByb2ZpbGUp
OwogfQogCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVkTmVn
YXRlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJhbmQpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIAorICAgIEpTVmFsdWUgb3BlcmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3BlcmFu
ZCk7CisgICAgZG91YmxlIG51bWJlciA9IG9wZXJhbmQudG9OdW1iZXIoZXhlYyk7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLW51
bWJlcikpOworfQorCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxl
ZE5lZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcGVyYW5kLCBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICBBU1NFUlQoYXJpdGhQcm9maWxlKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisKKyAgICBKU1ZhbHVlIG9wZXJhbmQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wZXJhbmQp
OworICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIUyhvcGVyYW5kKTsKKyAgICBkb3VibGUgbnVt
YmVyID0gb3BlcmFuZC50b051bWJlcihleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtbnVtYmVyKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGUoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKQoreworICAgIHJldHVybiB1bnByb2ZpbGVkTmVn
YXRlKGV4ZWMsIG9wZXJhbmQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBvcGVyYW5kLCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4gcHJv
ZmlsZWROZWdhdGUoZXhlYywgb3BlcmFuZCwgYXJpdGhQcm9maWxlKTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCwgSklUTmVnSUMq
IG5lZ0lDKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
JnZtLCBleGVjKTsKKyAgICAKKyAgICBKU1ZhbHVlIG9wZXJhbmQgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wZXJhbmQpOworCisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBuZWdJ
Qy0+bV9nZW5lcmF0b3IuYXJpdGhQcm9maWxlKCk7CisgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7
CisgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTKG9wZXJhbmQpOworICAgIG5lZ0lDLT5nZW5l
cmF0ZU91dE9mTGluZSh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRoTmVnYXRl
UHJvZmlsZWQpOworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgZXhlYy0+Y29kZUJs
b2NrKCktPmR1bXBNYXRoSUNTdGF0cygpOworI2VuZGlmCisgICAgCisgICAgZG91YmxlIG51bWJl
ciA9IG9wZXJhbmQudG9OdW1iZXIoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLW51bWJlcikpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUoRXhlY1N0
YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCwgSklUTmVnSUMqIG5lZ0lD
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKworICAgIEpTVmFsdWUgb3BlcmFuZCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Bl
cmFuZCk7CisKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG5lZ0lDLT5tX2dlbmVy
YXRvci5hcml0aFByb2ZpbGUoKTsKKyAgICBBU1NFUlQoYXJpdGhQcm9maWxlKTsKKyAgICBhcml0
aFByb2ZpbGUtPm9ic2VydmVMSFMob3BlcmFuZCk7CisgICAgbmVnSUMtPmdlbmVyYXRlT3V0T2ZM
aW5lKHZtLCBleGVjLT5jb2RlQmxvY2soKSwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOworCisjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgZXhlYy0+Y29kZUJsb2NrKCktPmR1bXBNYXRoSUNT
dGF0cygpOworI2VuZGlmCisKKyAgICBkb3VibGUgbnVtYmVyID0gb3BlcmFuZC50b051bWJlcihl
eGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcigtbnVtYmVyKSk7Cit9CisKIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHVucHJvZmlsZWRTdWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAppbmRleCA2MDQ4ODJmMDVjNzMyNjg2Yzg1YzQwOWQ2OTIxZDRkNjI2
MDFlMmU3Li42NzI2NDA3NGVlNDdjYjE1MTYxZGIwOTI3YjQzZmY3ODA4M2E1YzdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMTQwLDYgKzE0MCw3IEBA
IHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BF
UkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3Bl
cmF0aW9uX0VKQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOwogdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpBKShFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNBcnJheSopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpBcnApKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBBcml0aFByb2ZpbGUqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9P
UEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IFVuaXF1ZWRTdHJpbmdJbXBsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFU
SU9OICpKX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJ
VE9wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTE0OSw2ICsxNTAsNyBAQCB0eXBlZGVmIEVuY29kZWRK
U1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVy
YXRpb25fRUpKQXJwKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IEFyaXRoUHJvZmlsZSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAq
Sl9KSVRPcGVyYXRpb25fRUpKQXJwTWljKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIEFyaXRoUHJvZmlsZSosIHZvaWQqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKSk1pYykoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7Cit0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSk1pYykoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIHZvaWQqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJ
T04gKkpfSklUT3BlcmF0aW9uX0VKc3NaKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIGludDMyX3Qp
OwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25f
RUpzc1JlbykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBSZWdFeHBPYmplY3QqKTsKIHR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKc3NSZW9Kc3Mp
KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgUmVnRXhwT2JqZWN0KiwgSlNTdHJpbmcqKTsKQEAgLTQz
Nyw2ICs0MzksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1
ZU11bE5vT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmEKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFy
aXRoUHJvZmlsZSosIEpJVE11bElDKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkTm9PcHRpbWl6ZShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBB
cml0aFByb2ZpbGUqLCBKSVRNdWxJQyopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2Zp
bGUqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyaXRoTmVnYXRlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQpOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIG9wZXJhbmQsIEFyaXRoUHJvZmlsZSopOworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJhbmQsIEpJVE5lZ0lDKik7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJhbmQsIEpJVE5lZ0lDKik7CiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpIFdU
Rl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVT
dWJQcm9maWxlZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0aFByb2ZpbGUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemUoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwg
SklUU3ViSUMqKSBXVEZfSU5URVJOQUw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggZDdhMWRlZTMyZDRlYzhlMzI1NGRk
ZjNjYjBmZDUyODVhODMxZWM4MS4uOTk3ZWYzNWUxYTJiNTc3ZjUxNGYwODYzY2QzMzRkNGJjMTM2
MWQzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQpAQCAtMjUzLDcgKzI1Myw5IEBAIGNvbnN0IElzSW52YWxpZGF0ZWQgPSAy
CiBjb25zdCBTaGFkb3dDaGlja2VuVGFpbE1hcmtlciA9IDB4N2ExMQogCiAjIEFyaXRoUHJvZmls
ZSBkYXRhCitjb25zdCBBcml0aFByb2ZpbGVJbnQgPSAweDEwMDAwMAogY29uc3QgQXJpdGhQcm9m
aWxlSW50SW50ID0gMHgxMjAwMDAKK2NvbnN0IEFyaXRoUHJvZmlsZU51bWJlciA9IDB4MjAwMDAw
CiBjb25zdCBBcml0aFByb2ZpbGVOdW1iZXJJbnQgPSAweDIyMDAwMAogY29uc3QgQXJpdGhQcm9m
aWxlTnVtYmVyTnVtYmVyID0gMHgyNDAwMDAKIGNvbnN0IEFyaXRoUHJvZmlsZUludE51bWJlciA9
IDB4MTQwMDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCmluZGV4IDcwYzkyODQ5NTU0ODZjYmEwYWNmMTBlZTgx
MThmMTg0MjE4NTY2MDcuLmMzZWJjNjIxZjAyZjMzMzg4OGE3YzY1MDRhY2M4MGYyM2Q3ZWYxNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCkBAIC05NDgsMjIgKzk0OCwyNyBAQCBfbGxpbnRfb3BfbmVnYXRl
OgogICAgIGxvYWRpIDhbUENdLCB0MAogICAgIGxvYWRpIDRbUENdLCB0MwogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUodDAsIHQxLCB0MikKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywg
dDApCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNOb3RJbnQKICAgICBidGl6
IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CiAgICAgbmVnaSB0MgorICAgIG9yaSBBcml0
aFByb2ZpbGVJbnQsIHQwCiAgICAgc3RvcmVpIEludDMyVGFnLCBUYWdPZmZzZXRbY2ZyLCB0Mywg
OF0KKyAgICBzdG9yZWlzVG9JbnN0cnVjdGlvbih0MCwgMykKICAgICBzdG9yZWkgdDIsIFBheWxv
YWRPZmZzZXRbY2ZyLCB0MywgOF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNoKDQpCiAu
b3BOZWdhdGVTcmNOb3RJbnQ6CiAgICAgYmlhIHQxLCBMb3dlc3RUYWcsIC5vcE5lZ2F0ZVNsb3cK
ICAgICB4b3JpIDB4ODAwMDAwMDAsIHQxCi0gICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0
MywgOF0KKyAgICBvcmkgQXJpdGhQcm9maWxlTnVtYmVyLCB0MAogICAgIHN0b3JlaSB0MiwgUGF5
bG9hZE9mZnNldFtjZnIsIHQzLCA4XQotICAgIGRpc3BhdGNoKDMpCisgICAgc3RvcmVpc1RvSW5z
dHJ1Y3Rpb24odDAsIDMpCisgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MywgOF0KKyAg
ICBkaXNwYXRjaCg0KQogCiAub3BOZWdhdGVTbG93OgogICAgIGNhbGxPcGNvZGVTbG93UGF0aChf
c2xvd19wYXRoX25lZ2F0ZSkKLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNoKDQpCiAKIAog
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUsIGRvdWJs
ZU9wZXJhdGlvbiwgc2xvd1BhdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGEwZmE3OGU5YjEzNDM0ZWU3ZjU2
NGMwZjU1MjMzNGFlNDZhYTNmZTQuLmQzNGE0MzljYzdiZDY5ZmYyZDEyMzUyMTk1YWU2M2ViYjE2
MjgzNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCkBAIC04MjcsMjIgKzgyNywyNyBAQCBfbGxpbnRfb3BfbmVnYXRl
OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDAp
CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQotICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUodDAsIHQyKQotICAgIGJxYiB0MiwgdGFnVHlwZU51bWJlciwgLm9wTmVnYXRlTm90SW50
Ci0gICAgYnRpeiB0MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwotICAgIG5lZ2kgdDIKLSAg
ICBvcnEgdGFnVHlwZU51bWJlciwgdDIKLSAgICBzdG9yZXEgdDIsIFtjZnIsIHQxLCA4XQotICAg
IGRpc3BhdGNoKDMpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDMpCisgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDMsIHQyKQorICAgIGJxYiB0MywgdGFnVHlwZU51bWJlciwgLm9w
TmVnYXRlTm90SW50CisgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdworICAg
IG5lZ2kgdDMKKyAgICBvcmkgQXJpdGhQcm9maWxlSW50LCB0MgorICAgIG9ycSB0YWdUeXBlTnVt
YmVyLCB0MworICAgIHN0b3JlaXNUb0luc3RydWN0aW9uKHQyLCAzKQorICAgIHN0b3JlcSB0Mywg
W2NmciwgdDEsIDhdCisgICAgZGlzcGF0Y2goNCkKIC5vcE5lZ2F0ZU5vdEludDoKLSAgICBidHF6
IHQyLCB0YWdUeXBlTnVtYmVyLCAub3BOZWdhdGVTbG93Ci0gICAgeG9ycSAweDgwMDAwMDAwMDAw
MDAwMDAsIHQyCi0gICAgc3RvcmVxIHQyLCBbY2ZyLCB0MSwgOF0KLSAgICBkaXNwYXRjaCgzKQor
ICAgIGJ0cXogdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcE5lZ2F0ZVNsb3cKKyAgICB4b3JxIDB4ODAw
MDAwMDAwMDAwMDAwMCwgdDMKKyAgICBvcmkgQXJpdGhQcm9maWxlTnVtYmVyLCB0MgorICAgIHN0
b3JlcSB0MywgW2NmciwgdDEsIDhdCisgICAgc3RvcmVpc1RvSW5zdHJ1Y3Rpb24odDIsIDMpCisg
ICAgZGlzcGF0Y2goNCkKIAogLm9wTmVnYXRlU2xvdzoKICAgICBjYWxsT3Bjb2RlU2xvd1BhdGgo
X3Nsb3dfcGF0aF9uZWdhdGUpCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNwYXRjaCg0KQogCiAK
IG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUoaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3Vi
bGVPcGVyYXRpb24sIHNsb3dQYXRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggYTMxNzA5MGRjM2Y3NzVmOTI3MjE1ZTJkMjNh
M2U4Mjg5MThlMDQ0NS4uZjdkNzk4NWI0MDhjNjNlMTAwNGJiMzQzZDAwMzUzNzEyNTg2NzNhYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCkBAIC0zNTAsMTAgKzM1MCw0NCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fc3Ry
aW5nKQogICAgIFJFVFVSTihPUF9DKDIpLmpzVmFsdWUoKS50b1N0cmluZyhleGVjKSk7CiB9CiAK
KyNpZiBFTkFCTEUoSklUKQorc3RhdGljIHZvaWQgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlB
cml0aE9wKEluc3RydWN0aW9uKiBwYywgSlNWYWx1ZSByZXN1bHQsIEpTVmFsdWUgb3BlcmFuZCkK
K3sKKyAgICBBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSAqYml0d2lzZV9jYXN0PEFyaXRoUHJvZmls
ZSo+KCZwY1szXS51Lm9wZXJhbmQpOworICAgIHByb2ZpbGUub2JzZXJ2ZUxIUyhvcGVyYW5kKTsK
KyAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkpOworICAgIGlmICghcmVzdWx0LmlzSW50MzIo
KSkgeworICAgICAgICBpZiAob3BlcmFuZC5pc0ludDMyKCkpCisgICAgICAgICAgICBwcm9maWxl
LnNldE9ic2VydmVkSW50MzJPdmVyZmxvdygpOworCisgICAgICAgIGRvdWJsZSBkb3VibGVWYWwg
PSByZXN1bHQuYXNOdW1iZXIoKTsKKyAgICAgICAgaWYgKCFkb3VibGVWYWwgJiYgc3RkOjpzaWdu
Yml0KGRvdWJsZVZhbCkpCisgICAgICAgICAgICBwcm9maWxlLnNldE9ic2VydmVkTmVnWmVyb0Rv
dWJsZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHByb2ZpbGUuc2V0T2JzZXJ2ZWRO
b25OZWdaZXJvRG91YmxlKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBJbnQ1MiBvdmVyZmxvdyBj
aGVjayBoZXJlIGludGVudGlvbmFsbHkgb21pdHMgMWxsIDw8IDUxIGFzIGEgdmFsaWQgbmVnYXRp
dmUgSW50NTIgdmFsdWUuCisgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIHdpbGwgZ2V0IGEg
ZmFsc2UgcG9zaXRpdmUgaWYgdGhlIHJlc3VsdCBpcyB0aGF0IHZhbHVlLiBUaGlzIGlzIGludGVu
dGlvbmFsbHkKKyAgICAgICAgICAgIC8vIGRvbmUgdG8gc2ltcGxpZnkgdGhlIGNoZWNraW5nIGFs
Z29yaXRobS4KKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IGludDUyT3ZlcmZsb3dQ
b2ludCA9ICgxbGwgPDwgNTEpOworICAgICAgICAgICAgaW50NjRfdCBpbnQ2NFZhbCA9IHN0YXRp
Y19jYXN0PGludDY0X3Q+KHN0ZDo6YWJzKGRvdWJsZVZhbCkpOworICAgICAgICAgICAgaWYgKGlu
dDY0VmFsID49IGludDUyT3ZlcmZsb3dQb2ludCkKKyAgICAgICAgICAgICAgICBwcm9maWxlLnNl
dE9ic2VydmVkSW50NTJPdmVyZmxvdygpOworICAgICAgICB9CisgICAgfQorfQorI2Vsc2UKK3N0
YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChJbnN0cnVjdGlvbios
IEpTVmFsdWUsIEpTVmFsdWUpIHsgfQorI2VuZGlmCisKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9uZWdhdGUpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBSRVRVUk4oanNOdW1iZXIoLU9QX0MoMiku
anNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgSlNWYWx1ZSBvcGVyYW5kID0gT1BfQygy
KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcigtb3BlcmFuZC50b051
bWJlcihleGVjKSk7CisgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgeworICAgICAg
ICB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AocGMsIHJlc3VsdCwgb3BlcmFuZCk7
CisgICAgfSk7CiB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
Q2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTA4YjhjM2UwODdmNGU3MzlkNzlm
NmZkYmJhZDgzNmY5N2Q4NjRmMy4uOGRlNWMxNDMxZTBkMzFhMmVkNjM1Njg5ZDgyOTQ5ZDE2NmU3
OGUwMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNi0wOS0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3Vs
YWluQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgYW4gaW5saW5lIGNhY2hlIHRvIGdl
bmVyYXRlIG9wX25lZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyMzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzdHJlc3Mvb3AtbmVnYXRlLWlubGluZS1jYWNoZS5qczogQWRkZWQuCisKIDIw
MTYtMDktMjIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAg
ICB0ZXN0MjYyOiBGdW5jdGlvbiBsZW5ndGggc2hvdWxkIGJlIG51bWJlciBvZiBwYXJhbWV0ZXJz
IGJlZm9yZSBwYXJhbWV0ZXJzIHdpdGggZGVmYXVsdCB2YWx1ZXMKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL29wLW5lZ2F0ZS1pbmxpbmUtY2FjaGUuanMgYi9KU1Rlc3RzL3N0cmVzcy9vcC1u
ZWdhdGUtaW5saW5lLWNhY2hlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjNTQwNThkZWM4MmUwZTljZmY4N2Y3
NmQyZGQyNTM3ZGQ4MjE4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9vcC1u
ZWdhdGUtaW5saW5lLWNhY2hlLmpzCkBAIC0wLDAgKzEsMzAwIEBACisidXNlIHN0cmljdCIKKwor
CitmdW5jdGlvbiBvcGFxdWVJZGVudGl0eShhcmcpIHsKKyAgICByZXR1cm4gYXJnOworfQorbm9J
bmxpbmUob3BhcXVlSWRlbnRpdHkpCitmdW5jdGlvbiBuZWdhdGVXaXRoRG91YmxlU3ViKGFyZykg
eworICAgIC8vIEltcGxlbWVudCBpbnRlZ2VyIG5lZ2F0ZSBhcyBhIGRvdWJsZSBzdWIgb3BlcmF0
aW9uLgorICAgIHJldHVybiBvcGFxdWVJZGVudGl0eSg2LjQgLSBhcmcpIC0gNi40OworfQorbm9J
bmxpbmUobmVnYXRlV2l0aERvdWJsZVN1YikKKworZnVuY3Rpb24gb3BhcXVlTm9uWmVyb0ludGVn
ZXJOZWdhdGUoYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3BhcXVlTm9u
WmVyb0ludGVnZXJOZWdhdGUpOworCitmdW5jdGlvbiB0ZXN0Tm9uWmVyb0ludGVnZXIoKQorewor
ICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZU5v
blplcm9JbnRlZ2VyTmVnYXRlKGkpICE9PSBuZWdhdGVXaXRoRG91YmxlU3ViKGkpKSB7CisgICAg
ICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3ROb25aZXJvSW50ZWdlcigpIGF0IGkgPSAiICsgaTsK
KyAgICAgICAgfQorICAgIH0KK30KK3Rlc3ROb25aZXJvSW50ZWdlcigpOworCisKK2Z1bmN0aW9u
IG9wYXF1ZURvdWJsZU5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGlu
ZShvcGFxdWVEb3VibGVOZWdhdGUpOworCitmdW5jdGlvbiB0ZXN0RG91YmxlKCkKK3sKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVlRG91Ymxl
TmVnYXRlKGkgKyAwLjUpKSArIDAuNSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJG
YWlsZWQgdGVzdERvdWJsZSgpIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KK30KK3Rl
c3REb3VibGUoKTsKKworCitmdW5jdGlvbiBvcGFxdWVPYmplY3ROZWdhdGUoYXJnKQoreworICAg
IHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3BhcXVlT2JqZWN0TmVnYXRlKTsKKworZnVuY3Rp
b24gdGVzdE9iamVjdCgpCit7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgewor
ICAgICAgICBpZiAoKG9wYXF1ZU9iamVjdE5lZ2F0ZSh7IHZhbHVlT2Y6ICgpPT57IHJldHVybiBp
ICsgMC41IH19KSkgKyAwLjUgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVk
IHRlc3RPYmplY3QoKSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0T2Jq
ZWN0KCk7CisKKworZnVuY3Rpb24gb3BhcXVlSW50ZWdlckFuZERvdWJsZU5lZ2F0ZShhcmcpCit7
CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGluZShvcGFxdWVJbnRlZ2VyQW5kRG91YmxlTmVn
YXRlKTsKKworZnVuY3Rpb24gdGVzdEludGVnZXJBbmREb3VibGUoKQoreworICAgIGZvciAobGV0
IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVJbnRlZ2VyQW5kRG91
YmxlTmVnYXRlKGkpKSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVz
dEludGVnZXJBbmREb3VibGUoKSBvbiBpbnRlZ2VycyBhdCBpID0gIiArIGk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKChvcGFxdWVJbnRlZ2VyQW5kRG91YmxlTmVnYXRlKGkgKyAwLjUpKSArIDAu
NSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEludGVnZXJBbmRE
b3VibGUoKSBvbiBkb3VibGUgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorfQordGVz
dEludGVnZXJBbmREb3VibGUoKTsKKworCitmdW5jdGlvbiBvcGFxdWVJbnRlZ2VyVGhlbkRvdWJs
ZU5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGluZShvcGFxdWVJbnRl
Z2VyVGhlbkRvdWJsZU5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3RJbnRlZ2VyVGhlbkRvdWJsZSgp
Cit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9w
YXF1ZUludGVnZXJUaGVuRG91YmxlTmVnYXRlKGkpKSArIGkgIT09IDApIHsKKyAgICAgICAgICAg
IHRocm93ICJGYWlsZWQgdGVzdEludGVnZXJUaGVuRG91YmxlKCkgb24gaW50ZWdlcnMgYXQgaSA9
ICIgKyBpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyAr
K2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVJbnRlZ2VyVGhlbkRvdWJsZU5lZ2F0ZShpICsgMC41
KSkgKyAwLjUgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRl
Z2VyVGhlbkRvdWJsZSgpIG9uIGRvdWJsZSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9
Cit9Cit0ZXN0SW50ZWdlclRoZW5Eb3VibGUoKTsKKworCitmdW5jdGlvbiBvcGFxdWVEb3VibGVU
aGVuSW50ZWdlck5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGluZShv
cGFxdWVEb3VibGVUaGVuSW50ZWdlck5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3REb3VibGVUaGVu
SW50ZWdlcigpCit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAg
ICBpZiAoKG9wYXF1ZURvdWJsZVRoZW5JbnRlZ2VyTmVnYXRlKGkgKyAwLjUpKSArIDAuNSArIGkg
IT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdERvdWJsZVRoZW5JbnRlZ2Vy
KCkgb24gZG91YmxlIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGxl
dCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVlRG91YmxlVGhlbklu
dGVnZXJOZWdhdGUoaSkpICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0
ZXN0RG91YmxlVGhlbkludGVnZXIoKSBvbiBpbnRlZ2VycyBhdCBpID0gIiArIGk7CisgICAgICAg
IH0KKyAgICB9Cit9Cit0ZXN0RG91YmxlVGhlbkludGVnZXIoKTsKKworCitmdW5jdGlvbiBvcGFx
dWVJbnRlZ2VyQW5kT2JqZWN0TmVnYXRlKGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30KK25v
SW5saW5lKG9wYXF1ZUludGVnZXJBbmRPYmplY3ROZWdhdGUpOworCitmdW5jdGlvbiB0ZXN0SW50
ZWdlckFuZE9iamVjdCgpCit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgewor
ICAgICAgICBpZiAoKG9wYXF1ZUludGVnZXJBbmRPYmplY3ROZWdhdGUoaSkpICsgaSAhPT0gMCkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdlckFuZE9iamVjdCgpIG9uIGlu
dGVnZXJzIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG9wYXF1ZUludGVn
ZXJBbmRPYmplY3ROZWdhdGUoeyB2YWx1ZU9mOiAoKT0+eyByZXR1cm4gaSArIDAuNSB9fSkpICsg
MC41ICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdlckFu
ZE9iamVjdCgpIG9uIGRvdWJsZSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9Cit9Cit0
ZXN0SW50ZWdlckFuZE9iamVjdCgpOworCisKK2Z1bmN0aW9uIG9wYXF1ZURvdWJsZUFuZE9iamVj
dE5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGluZShvcGFxdWVEb3Vi
bGVBbmRPYmplY3ROZWdhdGUpOworCitmdW5jdGlvbiB0ZXN0RG91YmxlQW5kT2JqZWN0KCkKK3sK
KyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVl
RG91YmxlQW5kT2JqZWN0TmVnYXRlKGkgKyAwLjUpKSArIGkgKyAwLjUgIT09IDApIHsKKyAgICAg
ICAgICAgIHRocm93ICJGYWlsZWQgdGVzdERvdWJsZUFuZE9iamVjdCgpIG9uIGludGVnZXJzIGF0
IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG9wYXF1ZURvdWJsZUFuZE9iamVj
dE5lZ2F0ZSh7IHZhbHVlT2Y6ICgpPT57IHJldHVybiBpIH19KSkgKyBpICE9PSAwKSB7CisgICAg
ICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3REb3VibGVBbmRPYmplY3QoKSBvbiBkb3VibGUgYXQg
aSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorfQordGVzdERvdWJsZUFuZE9iamVjdCgpOwor
CisKK2Z1bmN0aW9uIG9wYXF1ZUludGVnZXJUaGVuT2JqZWN0TmVnYXRlKGFyZykKK3sKKyAgICBy
ZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZUludGVnZXJUaGVuT2JqZWN0TmVnYXRlKTsK
KworZnVuY3Rpb24gdGVzdEludGVnZXJUaGVuT2JqZWN0KCkKK3sKKyAgICBmb3IgKGxldCBpID0g
MTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVlSW50ZWdlclRoZW5PYmplY3RO
ZWdhdGUoaSkpICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50
ZWdlclRoZW5PYmplY3QoKSBvbiBpbnRlZ2VycyBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9w
YXF1ZUludGVnZXJUaGVuT2JqZWN0TmVnYXRlKHsgdmFsdWVPZjogKCk9PnsgcmV0dXJuIGkgKyAw
LjUgfX0pKSArIDAuNSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVz
dEludGVnZXJUaGVuT2JqZWN0KCkgb24gZG91YmxlIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQor
ICAgIH0KK30KK3Rlc3RJbnRlZ2VyVGhlbk9iamVjdCgpOworCisKK2Z1bmN0aW9uIG9wYXF1ZURv
dWJsZVRoZW5PYmplY3ROZWdhdGUoYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9Jbmxp
bmUob3BhcXVlRG91YmxlVGhlbk9iamVjdE5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3REb3VibGVU
aGVuT2JqZWN0KCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAg
ICAgIGlmICgob3BhcXVlRG91YmxlVGhlbk9iamVjdE5lZ2F0ZShpICsgMC41KSkgKyBpICsgMC41
ICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3REb3VibGVUaGVuT2JqZWN0
KCkgb24gaW50ZWdlcnMgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAo
bGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVEb3VibGVUaGVu
T2JqZWN0TmVnYXRlKGkgKyAwLjUpKSArIGkgKyAwLjUgIT09IDApIHsKKyAgICAgICAgICAgIHRo
cm93ICJGYWlsZWQgdGVzdERvdWJsZVRoZW5PYmplY3QoKSBvbiBpbnRlZ2VycyBhdCBpID0gIiAr
IGk7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0RG91YmxlVGhlbk9iamVjdCgpOworCisKK2Z1
bmN0aW9uIG9wYXF1ZUludGVnZXJBbmREb3VibGVBbmRPYmplY3ROZWdhdGUoYXJnKQoreworICAg
IHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3BhcXVlSW50ZWdlckFuZERvdWJsZUFuZE9iamVj
dE5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3RJbnRlZ2VyQW5kRG91YmxlQW5kT2JqZWN0KCkKK3sK
KyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVl
SW50ZWdlckFuZERvdWJsZUFuZE9iamVjdE5lZ2F0ZShpKSkgKyBpICE9PSAwKSB7CisgICAgICAg
ICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRlZ2VyQW5kRG91YmxlQW5kT2JqZWN0KCkgb24gaW50
ZWdlcnMgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgICAgIGlmICgob3BhcXVlSW50ZWdl
ckFuZERvdWJsZUFuZE9iamVjdE5lZ2F0ZShpICsgMC41KSkgKyBpICsgMC41ICE9PSAwKSB7Cisg
ICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRlZ2VyQW5kRG91YmxlQW5kT2JqZWN0KCkg
b24gaW50ZWdlcnMgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgICAgIGlmICgob3BhcXVl
SW50ZWdlckFuZERvdWJsZUFuZE9iamVjdE5lZ2F0ZSh7IHZhbHVlT2Y6ICgpPT57IHJldHVybiBp
IH19KSkgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRlZ2Vy
QW5kRG91YmxlQW5kT2JqZWN0KCkgb24gZG91YmxlIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQor
ICAgIH0KK30KK3Rlc3RJbnRlZ2VyQW5kRG91YmxlQW5kT2JqZWN0KCk7CisKKworZnVuY3Rpb24g
b3BhcXVlSW50ZWdlck5lZ2F0ZU92ZXJmbG93KGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30K
K25vSW5saW5lKG9wYXF1ZUludGVnZXJOZWdhdGVPdmVyZmxvdyk7CisKK2Z1bmN0aW9uIHRlc3RJ
bnRlZ2VyTmVnYXRlT3ZlcmZsb3coKQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyAr
K2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZUludGVnZXJOZWdhdGVPdmVyZmxvdygweDgwMDAwMDAw
fDApICE9PSAyMTQ3NDgzNjQ4KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIG9wYXF1ZUlu
dGVnZXJOZWdhdGVPdmVyZmxvdygpIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KK30K
K3Rlc3RJbnRlZ2VyTmVnYXRlT3ZlcmZsb3coKTsKKworCitmdW5jdGlvbiBvcGFxdWVJbnRlZ2Vy
TmVnYXRlWmVybyhhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGluZShvcGFxdWVJ
bnRlZ2VyTmVnYXRlWmVybyk7CisKK2Z1bmN0aW9uIHRlc3RJbnRlZ2VyTmVnYXRlWmVybygpCit7
CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoMSAvIG9w
YXF1ZUludGVnZXJOZWdhdGVaZXJvKDApICE9PSAtSW5maW5pdHkpIHsKKyAgICAgICAgICAgIHRo
cm93ICJGYWlsZWQgdGVzdEludGVnZXJOZWdhdGVaZXJvKCkgYXQgaSA9ICIgKyBpOworICAgICAg
ICB9CisgICAgfQorfQordGVzdEludGVnZXJOZWdhdGVaZXJvKCk7CisKKworZnVuY3Rpb24gZ2F0
ZWROZWdhdGUoc2VsZWN0b3IsIGFyZykKK3sKKyAgICBpZiAoc2VsZWN0b3IgPT09IDApIHsKKyAg
ICAgICAgcmV0dXJuIC1hcmc7CisgICAgfQorICAgIGlmIChzZWxlY3RvciA9PSA0MikgeworICAg
ICAgICByZXR1cm4gLWFyZzsKKyAgICB9CisgICAgcmV0dXJuIGFyZzsKK30KK25vSW5saW5lKGdh
dGVkTmVnYXRlKTsKKworZnVuY3Rpb24gdGVzdFVudXNlZE5lZ2F0ZSgpCit7CisgICAgZm9yIChs
ZXQgaSA9IDE7IGkgPCAxZTI7ICsraSkgeworICAgICAgICBpZiAoZ2F0ZWROZWdhdGUoTWF0aC5Q
SSwgaSkgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgZmlyc3QgcGhhc2Ugb2Yg
dGVzdFVudXNlZE5lZ2F0ZSI7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDE7
IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoZ2F0ZWROZWdhdGUoMCwgaSkgKyBpICE9PSAw
KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHNlY29uZCBwaGFzZSBvZiB0ZXN0VW51c2Vk
TmVnYXRlIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsg
KytpKSB7CisgICAgICAgIGlmIChnYXRlZE5lZ2F0ZSg0MiwgaSArIDAuNSkgKyAwLjUgKyBpICE9
PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRoaXJkIHBoYXNlIG9mIHRlc3RVbnVz
ZWROZWdhdGUiOworICAgICAgICB9CisgICAgfQorfQordGVzdFVudXNlZE5lZ2F0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289647</attachid>
            <date>2016-09-22 19:04:01 -0700</date>
            <delta_ts>2016-09-22 20:52:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162371-20160922190111.patch</filename>
            <type>text/plain</type>
            <size>65883</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2Mjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
OGRhYjE3MGQ0NDQxMDUxOGU5ZDEzOWY4ZjJiZDhlODJlMzk3OTZmLi5lZjIzZWZjNWY2MGY3YTUx
N2IxZGUzZGI1Y2NhZjMxYTQ2N2UyZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAxNi0wOS0yMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBVc2UgYW4gaW5saW5lIGNhY2hlIHRvIGdlbmVyYXRlIG9w
X25lZ2F0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyMzcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgVXNl
IGFuIGlubGluZSBjYWNoZSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBjb2RlCisgICAgICAgIHJl
cXVpcmVkIHRvIGltcGxlbWVudCBvcF9uZWdhdGUuCisKKyAgICAgICAgRm9yIHB1cmUgaW50ZWdl
ciBuZWdhdGUsIHRoZSBnZW5lcmF0ZWQgYXNtIHNocmlua3MKKyAgICAgICAgZnJvbSAxNDcgYnl0
ZXMgdG8gMTI1IGJ5dGVzICgxNCUpLgorICAgICAgICBGb3IgZG91YmxlIG5lZ2F0ZSwgdGhlIGdl
bmVyYXRlZCBhc20gc2hyaW5rcworICAgICAgICB0byAxMzAgYnl0ZXMgKDExJSkuCisgICAgICAg
IFRoZSBhdmVyYWdlIHNpemUgb24gU3Vuc3BpZGVyIGlzIDEwMGJ5dGVzLCB0aGlzIGlzIGR1ZQor
ICAgICAgICB0byB0aGUgb3BfbmVnYXRlcyB0aGF0IGFyZSBuZXZlciBleGVjdXRlZCBhbmQgZG8g
bm90CisgICAgICAgIGdlbmVyYXRlIG11Y2guCisKKyAgICAgICAgKiBieXRlY29kZS9Bcml0aFBy
b2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6QXJpdGhQcm9maWxlOjpBcml0aFByb2ZpbGUpOgorICAg
ICAgICAoSlNDOjpBcml0aFByb2ZpbGU6Om9ic2VydmVMSFMpOgorICAgICAgICAoSlNDOjpBcml0
aFByb2ZpbGU6Om9ic2VydmVMSFNBbmRSSFMpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkSklUTmVnSUMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnlPcCk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlVuYXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWF0aElDKToKKyAgICAgICAg
KiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6c2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICog
aml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZWdhdGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRNYXRoSUNGYXN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDU2xv
dyk6CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjYWxs
T3BlcmF0aW9uKToKKyAgICAgICAgKiBqaXQvSklUTWF0aElDLmg6CisgICAgICAgIChKU0M6OkpJ
VE1hdGhJQzo6Z2VuZXJhdGVJbmxpbmUpOgorICAgICAgICAoSlNDOjpjYW5HZW5lcmF0ZVdpdGhC
aW5hcnlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Y2FuR2VuZXJhdGVXaXRoVW5hcnlQcm9maWxl
KToKKyAgICAgICAgKiBqaXQvSklUTWF0aElDRm9yd2FyZHMuaDoKKyAgICAgICAgKiBqaXQvSklU
TmVnR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0
ZUlubGluZSk6CisgICAgICAgIChKU0M6OkpJVE5lZ0dlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0
aCk6CisgICAgICAgICogaml0L0pJVE5lZ0dlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpKSVRO
ZWdHZW5lcmF0b3I6OkpJVE5lZ0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVE5lZ0dlbmVy
YXRvcjo6YXJpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpkaWRF
bWl0RmFzdFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVROZWdHZW5lcmF0b3I6OmVu
ZEp1bXBMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpzbG93
UGF0aEp1bXBMaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAg
ICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjp1cGRhdGVB
cml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVD
TCk6CisKIDIwMTYtMDktMjIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZWQgdW51c2VkIGhhc0Vycm9ySW5mbygpLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FyaXRoUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FyaXRoUHJvZmlsZS5oCmluZGV4IGQ0MzAxMTNiMmI4MDllMDU2ZjUwMDA2
ODljYzM4ZjgzYjFmODFlNzAuLjdhNmVlNWQyZWFhZmQyMmU5NzQxMmFkZjQ5ZWEwMTIxMmIxMjY1
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Bcml0aFByb2Zp
bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJpdGhQcm9maWxlLmgK
QEAgLTg3LDYgKzg3LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWNfYXNzZXJ0KHNwZWNpYWxGYXN0
UGF0aEJpdCAmIGNsZWFyTGhzT2JzZXJ2ZWRUeXBlQml0TWFzaywgIlRoZXNlIGJpdHMgc2hvdWxk
IGludGVyc2VjdC4iKTsKICAgICBzdGF0aWNfYXNzZXJ0KHNwZWNpYWxGYXN0UGF0aEJpdCA+IH5j
bGVhckxoc09ic2VydmVkVHlwZUJpdE1hc2ssICJUaGVzZSBiaXRzIHNob3VsZCBub3QgaW50ZXJz
ZWN0IGFuZCBzcGVjaWFsRmFzdFBhdGhCaXQgc2hvdWxkIGJlIGEgaGlnaGVyIGJpdC4iKTsKIAor
ICAgIEFyaXRoUHJvZmlsZShSZXN1bHRUeXBlIGFyZykKKyAgICB7CisgICAgICAgIG1fYml0cyA9
IChhcmcuYml0cygpIDw8IGxoc1Jlc3VsdFR5cGVTaGlmdCk7CisgICAgICAgIEFTU0VSVChsaHNS
ZXN1bHRUeXBlKCkuYml0cygpID09IGFyZy5iaXRzKCkpOworICAgICAgICBBU1NFUlQobGhzT2Jz
ZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKHJoc09ic2VydmVkVHlwZSgp
LmlzRW1wdHkoKSk7CisgICAgfQorCiAgICAgQXJpdGhQcm9maWxlKFJlc3VsdFR5cGUgbGhzLCBS
ZXN1bHRUeXBlIHJocykKICAgICB7CiAgICAgICAgIG1fYml0cyA9IChsaHMuYml0cygpIDw8IGxo
c1Jlc3VsdFR5cGVTaGlmdCkgfCAocmhzLmJpdHMoKSA8PCByaHNSZXN1bHRUeXBlU2hpZnQpOwpA
QCAtOTQsNyArMTAyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobGhzT2JzZXJ2ZWRUeXBl
KCkuaXNFbXB0eSgpKTsKICAgICAgICAgQVNTRVJUKHJoc09ic2VydmVkVHlwZSgpLmlzRW1wdHko
KSk7CiAgICAgfQotICAgIEFyaXRoUHJvZmlsZSgpIHsgfQorICAgIEFyaXRoUHJvZmlsZSgpID0g
ZGVmYXVsdDsKIAogICAgIHN0YXRpYyBBcml0aFByb2ZpbGUgZnJvbUludCh1aW50MzJfdCBiaXRz
KQogICAgIHsKQEAgLTE3MCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByaHNTYXdOdW1i
ZXIoKSB7IHNldFJoc09ic2VydmVkVHlwZShyaHNPYnNlcnZlZFR5cGUoKS53aXRoTnVtYmVyKCkp
OyB9CiAgICAgdm9pZCByaHNTYXdOb25OdW1iZXIoKSB7IHNldFJoc09ic2VydmVkVHlwZShyaHNP
YnNlcnZlZFR5cGUoKS53aXRoTm9uTnVtYmVyKCkpOyB9CiAKLSAgICB2b2lkIG9ic2VydmVMSFNB
bmRSSFMoSlNWYWx1ZSBsaHMsIEpTVmFsdWUgcmhzKQorICAgIHZvaWQgb2JzZXJ2ZUxIUyhKU1Zh
bHVlIGxocykKICAgICB7CiAgICAgICAgIEFyaXRoUHJvZmlsZSBuZXdQcm9maWxlID0gKnRoaXM7
CiAgICAgICAgIGlmIChsaHMuaXNOdW1iZXIoKSkgewpAQCAtMTgxLDYgKzE4OSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmV3UHJvZmlsZS5saHNTYXdOb25OdW1i
ZXIoKTsKIAorICAgICAgICBtX2JpdHMgPSBuZXdQcm9maWxlLmJpdHMoKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9ic2VydmVMSFNBbmRSSFMoSlNWYWx1ZSBsaHMsIEpTVmFsdWUgcmhzKQorICAgIHsK
KyAgICAgICAgb2JzZXJ2ZUxIUyhsaHMpOworCisgICAgICAgIEFyaXRoUHJvZmlsZSBuZXdQcm9m
aWxlID0gKnRoaXM7CiAgICAgICAgIGlmIChyaHMuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAg
aWYgKHJocy5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgbmV3UHJvZmlsZS5yaHNTYXdJbnQz
MigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5q
c29uCmluZGV4IGIxYWJhYjllMDFkNTI5MzAyOTYxMDRkMjYxNWFkOGQzMWViYzdiNTQuLmRjNTk5
ODA1NjkxY2RhNTdiNWQzNjExNTk5ZGQ1ZjI4ZDcxMDJkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24KQEAgLTMzLDcgKzMzLDcgQEAK
ICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2RlYyIsICJsZW5ndGgiIDogMiB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfdG9fbnVtYmVyIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF90b19zdHJpbmciLCAibGVuZ3RoIiA6IDMgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX25lZ2F0ZSIsICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfbmVnYXRlIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9hZGQiLCAibGVuZ3RoIiA6IDUgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX211bCIsICJsZW5ndGgiIDogNSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZGl2
IiwgImxlbmd0aCIgOiA1IH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCmluZGV4IGMwYjAzMWI0MzY1YTg5ZGMzOTQzZTIzNjc1Y2Y4OWViMzM1MWM4YjAu
LmYwMGQ5OGMzMDY5ZjEzMGViOTAyOGNiNzNlZWEwMWFkODA3MjUyZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0zMDE1LDYgKzMwMTUsMTEg
QEAgSklUU3ViSUMqIENvZGVCbG9jazo6YWRkSklUU3ViSUMoKQogICAgIHJldHVybiBtX3N1YklD
cy5hZGQoKTsKIH0KIAorSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMoKQoreworICAg
IHJldHVybiBtX25lZ0lDcy5hZGQoKTsKK30KKwogU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9j
azo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBmb3IgKFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IG1fc3R1YkluZm9zKSB7CkBAIC00MzU0LDggKzQzNTks
MTUgQEAgdW5zaWduZWQgQ29kZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudEZvckJ5dGVjb2Rl
T2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKIAogQXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKIHsKLSAgICBh
dXRvIG9wY29kZUlEID0gdm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9u
cygpW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSk7CisgICAgcmV0dXJuIGFyaXRoUHJvZmlsZUZv
clBDKGluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieXRlY29kZU9mZnNldCk7Cit9CisKK0FyaXRo
UHJvZmlsZSogQ29kZUJsb2NrOjphcml0aFByb2ZpbGVGb3JQQyhJbnN0cnVjdGlvbiogcGMpCit7
CisgICAgYXV0byBvcGNvZGVJRCA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChwY1sw
XS51Lm9wY29kZSk7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgIGNhc2Ugb3BfbmVnYXRl
OgorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFyaXRoUHJvZmlsZSo+KCZwY1szXS51Lm9w
ZXJhbmQpOwogICAgIGNhc2Ugb3BfYml0b3I6CiAgICAgY2FzZSBvcF9iaXRhbmQ6CiAgICAgY2Fz
ZSBvcF9iaXR4b3I6CkBAIC00MzYzLDM0ICs0Mzc1LDEyIEBAIEFyaXRoUHJvZmlsZSogQ29kZUJs
b2NrOjphcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCiAg
ICAgY2FzZSBvcF9tdWw6CiAgICAgY2FzZSBvcF9zdWI6CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFyaXRoUHJvZmlsZSo+KCZw
Y1s0XS51Lm9wZXJhbmQpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIHJldHVybiAmYXJpdGhQcm9maWxlRm9yUEMoaW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSArIGJ5dGVjb2RlT2Zmc2V0KTsKLX0KLQotQXJpdGhQcm9maWxlJiBDb2RlQmxvY2s6OmFy
aXRoUHJvZmlsZUZvclBDKEluc3RydWN0aW9uKiBwYykKLXsKLSAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkgewotICAgICAgICBBU1NFUlQocGMgPj0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiBw
YyA8IGluc3RydWN0aW9ucygpLmVuZCgpKTsKLSAgICAgICAgYXV0byBvcGNvZGVJRCA9IHZtKCkt
PmludGVycHJldGVyLT5nZXRPcGNvZGVJRChwY1swXS51Lm9wY29kZSk7Ci0gICAgICAgIHN3aXRj
aCAob3Bjb2RlSUQpIHsKLSAgICAgICAgY2FzZSBvcF9iaXRvcjoKLSAgICAgICAgY2FzZSBvcF9i
aXRhbmQ6Ci0gICAgICAgIGNhc2Ugb3BfYml0eG9yOgotICAgICAgICBjYXNlIG9wX2FkZDoKLSAg
ICAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIGNhc2Ugb3Bfc3ViOgotICAgICAgICBjYXNlIG9w
X2RpdjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QXJpdGhQcm9maWxlKj4oJnBjWzRdLnUub3BlcmFu
ZCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIGJvb2wgQ29kZUJsb2NrOjpjb3VsZFRha2VT
cGVjaWFsRmFzdENhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNDU2Miw2ICs0NTUyLDggQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXBNYXRoSUNTdGF0cygpCiAgICAgZG91YmxlIHRvdGFsQWRkU2l6
ZSA9IDAuMDsKICAgICBkb3VibGUgbnVtTXVscyA9IDAuMDsKICAgICBkb3VibGUgdG90YWxNdWxT
aXplID0gMC4wOworICAgIGRvdWJsZSBudW1OZWdzID0gMC4wOworICAgIGRvdWJsZSB0b3RhbE5l
Z1NpemUgPSAwLjA7CiAgICAgZG91YmxlIG51bVN1YnMgPSAwLjA7CiAgICAgZG91YmxlIHRvdGFs
U3ViU2l6ZSA9IDAuMDsKIApAQCAtNDU3Niw2ICs0NTY4LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wTWF0aElDU3RhdHMoKQogICAgICAgICAgICAgdG90YWxNdWxTaXplICs9IG11bElDLT5jb2Rl
U2l6ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgZm9yIChKSVROZWdJQyogbmVnSUMgOiBjb2Rl
QmxvY2stPm1fbmVnSUNzKSB7CisgICAgICAgICAgICBudW1OZWdzKys7CisgICAgICAgICAgICB0
b3RhbE5lZ1NpemUgKz0gbmVnSUMtPmNvZGVTaXplKCk7CisgICAgICAgIH0KKwogICAgICAgICBm
b3IgKEpJVFN1YklDKiBzdWJJQyA6IGNvZGVCbG9jay0+bV9zdWJJQ3MpIHsKICAgICAgICAgICAg
IG51bVN1YnMrKzsKICAgICAgICAgICAgIHRvdGFsU3ViU2l6ZSArPSBzdWJJQy0+Y29kZVNpemUo
KTsKQEAgLTQ1OTMsNiArNDU5MCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcE1hdGhJQ1N0YXRz
KCkKICAgICBkYXRhTG9nKCJUb3RhbCBNdWwgc2l6ZSBpbiBieXRlczogIiwgdG90YWxNdWxTaXpl
LCAiXG4iKTsKICAgICBkYXRhTG9nKCJBdmVyYWdlIE11bCBzaXplOiAiLCB0b3RhbE11bFNpemUg
LyBudW1NdWxzLCAiXG4iKTsKICAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIk51bSBO
ZWdzOiAiLCBudW1OZWdzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJUb3RhbCBOZWcgc2l6ZSBpbiBi
eXRlczogIiwgdG90YWxOZWdTaXplLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJBdmVyYWdlIE5lZyBz
aXplOiAiLCB0b3RhbE5lZ1NpemUgLyBudW1OZWdzLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJcbiIp
OwogICAgIGRhdGFMb2coIk51bSBTdWJzOiAiLCBudW1TdWJzLCAiXG4iKTsKICAgICBkYXRhTG9n
KCJUb3RhbCBTdWIgc2l6ZSBpbiBieXRlczogIiwgdG90YWxTdWJTaXplLCAiXG4iKTsKICAgICBk
YXRhTG9nKCJBdmVyYWdlIFN1YiBzaXplOiAiLCB0b3RhbFN1YlNpemUgLyBudW1TdWJzLCAiXG4i
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCAyOWVk
N2M3MzM4MzE1ODZmOWI5NDk0NjQwMmEzNGRlMGIxZDYwNzRkLi5hNmY1OTAzMWJjY2NkZDcxMmE1
OTk1NWI3ZmMzNzhjZWExNGI3ODliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCkBAIC0yNDUsNiArMjQ1LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBKSVRBZGRJQyogYWRkSklUQWRk
SUMoKTsKICAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoKTsKKyAgICBKSVROZWdJQyogYWRkSklU
TmVnSUMoKTsKICAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoKTsKICAgICBCYWc8U3RydWN0dXJl
U3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0JlZ2luKCkgeyByZXR1cm4gbV9zdHViSW5mb3Mu
YmVnaW4oKTsgfQogICAgIEJhZzxTdHJ1Y3R1cmVTdHViSW5mbz46Oml0ZXJhdG9yIHN0dWJJbmZv
RW5kKCkgeyByZXR1cm4gbV9zdHViSW5mb3MuZW5kKCk7IH0KQEAgLTQ0Nyw3ICs0NDgsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIEFyaXRoUHJvZmlsZSYgYXJpdGhQcm9m
aWxlRm9yUEMoSW5zdHJ1Y3Rpb24qKTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZUZv
clBDKEluc3RydWN0aW9uKik7CiAKICAgICBib29sIGNvdWxkVGFrZVNwZWNpYWxGYXN0Q2FzZShp
bnQgYnl0ZWNvZGVPZmZzZXQpOwogCkBAIC05OTcsNiArOTk4LDcgQEAgcHJpdmF0ZToKICAgICBC
YWc8U3RydWN0dXJlU3R1YkluZm8+IG1fc3R1YkluZm9zOwogICAgIEJhZzxKSVRBZGRJQz4gbV9h
ZGRJQ3M7CiAgICAgQmFnPEpJVE11bElDPiBtX211bElDczsKKyAgICBCYWc8SklUTmVnSUM+IG1f
bmVnSUNzOwogICAgIEJhZzxKSVRTdWJJQz4gbV9zdWJJQ3M7CiAgICAgQmFnPEJ5VmFsSW5mbz4g
bV9ieVZhbEluZm9zOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKaW5kZXggMDc1ZjVjZDk2YWI5ZTJkNmZhMmE4YmUwNzAwMDYxZmUxYTUwMzk2
ZC4uOTBlZjAyOWFkYzZhNThhMzFhMWZjMGVlNmM1ZGM0NTc4ODhjZjQzNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKQEAgLTE1NzksMTAgKzE1NzksMjQgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRNb3ZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFVuYXJ5T3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogewotICAgIEFTU0VSVF9XSVRIX01FU1NB
R0Uob3BfdG9fbnVtYmVyICE9IG9wY29kZUlELCAib3BfdG9fbnVtYmVyIGlzIHByb2ZpbGVkLiIp
OworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uob3BfdG9fbnVtYmVyICE9IG9wY29kZUlELCAib3Bf
dG9fbnVtYmVyIGhhcyBhIFZhbHVlIFByb2ZpbGUuIik7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShvcF9uZWdhdGUgIT0gb3Bjb2RlSUQsICJvcF9uZWdhdGUgaGFzIGFuIEFyaXRoIFByb2ZpbGUu
Iik7CiAgICAgZW1pdE9wY29kZShvcGNvZGVJRCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7
CisKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFVuYXJ5T3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogc3JjLCBPcGVyYW5kVHlwZXMgdHlwZXMpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShv
cF90b19udW1iZXIgIT0gb3Bjb2RlSUQsICJvcF90b19udW1iZXIgaGFzIGEgVmFsdWUgUHJvZmls
ZS4iKTsKKyAgICBlbWl0T3Bjb2RlKG9wY29kZUlEKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgp
KTsKKworICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZWdhdGUpCisgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChBcml0aFByb2ZpbGUodHlwZXMuZmlyc3QoKSkuYml0cygpKTsKICAgICByZXR1
cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggOTA0NzNiZjAyZTY4NGNmYWFlNTNjMTM1NzJi
ODhkYjUxZGJhZmVhOS4uZjJlZGM4MGNiNDhiYzU2YmIxZWQ4MDNjZTA5MmY2NzJjNDdlZDIwZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaApAQCAtNTExLDYgKzUxMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0TG9hZEdsb2JhbE9iamVjdChSZWdpc3RlcklEKiBkc3QpOwogCiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmFyeU9wKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIHNyYyk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmFyeU9wKE9wY29k
ZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgT3BlcmFuZFR5cGVzKTsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5T3BQcm9maWxlZChPcGNvZGVJRCwgUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0QmluYXJ5
T3AoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJ
RCogc3JjMiwgT3BlcmFuZFR5cGVzKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVxdWFsaXR5
T3AoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjMSwgUmVnaXN0ZXJJ
RCogc3JjMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAKaW5kZXggMTg3MDJmMGE0Y2ZmZGMyM2M1ZGRkYWZlMjFlNzFkNThiMGJk
MzE4OC4uNWFhOWZjODEzZjc4YjkxNzI3ZWRhMTViYzcxOWQwNWQ4OGRlODE0NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApA
QCAtMTYwNiw3ICsxNjA2LDcgQEAgUmVnaXN0ZXJJRCogVW5hcnlPcE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKgogewogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzcmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHBvc2l0aW9uKCksIHBvc2l0aW9uKCksIHBvc2l0aW9u
KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3Bjb2RlSUQoKSwgZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRVbmFyeU9wKG9wY29kZUlEKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRz
dCksIHNyYy5nZXQoKSwgT3BlcmFuZFR5cGVzKG1fZXhwci0+cmVzdWx0RGVzY3JpcHRvcigpKSk7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVbmFyeVBsdXNOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDkzYjMyNTYzOTJkM2MzODJkZTZh
MWY0YzZiOTkzMTIyNGVlN2FmYjEuLjhhYTgyZmEzZmJjNWM5Y2ZkMGExNzY2NjIzM2QyOGNmMDJl
NmUwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCkBAIC0zNDMyLDcgKzM0MzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
VmFsdWVBZGQoTm9kZSogbm9kZSkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwg
dHlwZW5hbWUgUmVwYXRjaGluZ0Z1bmN0aW9uLCB0eXBlbmFtZSBOb25SZXBhdGNoaW5nRnVuY3Rp
b24+Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUqIG5vZGUsIEpJVE1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGJvb2wgbmVlZHNTY3JhdGNoR1BSUmVnLCBib29sIG5l
ZWRzU2NyYXRjaEZQUlJlZywgUmVwYXRjaGluZ0Z1bmN0aW9uIHJlcGF0Y2hpbmdGdW5jdGlvbiwg
Tm9uUmVwYXRjaGluZ0Z1bmN0aW9uIG5vblJlcGF0Y2hpbmdGdW5jdGlvbikKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVNYXRoSUMoTm9kZSogbm9kZSwgSklUQmluYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgYm9vbCBuZWVkc1NjcmF0Y2hHUFJSZWcsIGJvb2wgbmVlZHNTY3JhdGNo
RlBSUmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24gcmVwYXRjaGluZ0Z1bmN0aW9uLCBOb25SZXBhdGNo
aW5nRnVuY3Rpb24gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQogewogICAgIEVkZ2UmIGxlZnRDaGls
ZCA9IG5vZGUtPmNoaWxkMSgpOwogICAgIEVkZ2UmIHJpZ2h0Q2hpbGQgPSBub2RlLT5jaGlsZDIo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRl
eCA0N2VhZDMwYWM1YzU1ZjJjMzU4NmZkMjYwZmI0NDI4OGUwNjg3ZDliLi5lN2EyOWI0MzM0NmIy
NDgyM2E5OTg5ZmVlOTVkNjQwNWMzMThkYTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0yNTE1LDcgKzI1MTUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjb21waWxlU2hpZnRPcChOb2RlKik7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSBSZXBhdGNoaW5nRnVuY3Rpb24sIHR5cGVuYW1lIE5vblJlcGF0
Y2hpbmdGdW5jdGlvbj4KLSAgICB2b2lkIGNvbXBpbGVNYXRoSUMoTm9kZSosIEpJVE1hdGhJQzxH
ZW5lcmF0b3I+KiwgYm9vbCBuZWVkc1NjcmF0Y2hHUFJSZWcsIGJvb2wgbmVlZHNTY3JhdGNoRlBS
UmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24sIE5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CisgICAgdm9p
ZCBjb21waWxlTWF0aElDKE5vZGUqLCBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGJvb2wg
bmVlZHNTY3JhdGNoR1BSUmVnLCBib29sIG5lZWRzU2NyYXRjaEZQUlJlZywgUmVwYXRjaGluZ0Z1
bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rpb24pOwogCiAgICAgdm9pZCBjb21waWxlQXJpdGhE
b3VibGVVbmFyeU9wKE5vZGUqLCBkb3VibGUgKCpkb3VibGVGdW5jdGlvbikoZG91YmxlKSwgZG91
YmxlICgqb3BlcmF0aW9uKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkpOwogICAgIHZvaWQg
Y29tcGlsZVZhbHVlQWRkKE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAppbmRleCAyMTk4MjY5YmJjY2M2OTVmM2EwOTE2YThjZGEzZjYxODYw
NGY1YTlmLi5hZjVjYzM5N2E0ZTZmZDYwNjRlMjdiMzY1YTZlNWM4NGFhMzVmMThlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xNTYwLDcg
KzE1NjAsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3I+Ci0gICAgdm9pZCBjb21waWxlTWF0aElDKEpJVE1hdGhJQzxHZW5lcmF0b3I+KiBtYXRo
SUMsIEZ1bmN0aW9uUHRyIHJlcGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRj
aGluZ0Z1bmN0aW9uKQorICAgIHZvaWQgY29tcGlsZU1hdGhJQyhKSVRCaW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBGdW5jdGlvblB0ciByZXBhdGNoaW5nRnVuY3Rpb24sIEZ1bmN0aW9u
UHRyIG5vblJlcGF0Y2hpbmdGdW5jdGlvbikKICAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X25vZGU7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
Q2FsbEhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgK
aW5kZXggODY0ZGY3NDlmYTVhYjM3ZjUwMzQ2ODU0NDY5OGJkMWNiMDU3MDZiZC4uZTk2MTAwMWI1
MGQ4YzY1NGYzZTY2MWY3ZGQxM2JkOTZiOTVhNzA3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCkBAIC0zNjEsNiArMzYxLDE2IEBAIHB1YmxpYzoKICAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVz
dGVkSW1tUHRyIGFyZzMsIFRydXN0ZWRJbW1QdHIgYXJnNCkKKyAgICB7CisgICAgICAgIHJlc2V0
Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFk
ZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbTMy
IGFyZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3Vt
ZW50cygpOwpAQCAtMjI2Niw2ICsyMjc2LDE1IEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShhcmc0
LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwogICAgIH0KICNlbmRpZgorCisgICAgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoSlNWYWx1ZVJlZ3MgYXJnKQorICAgIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnLmdwcigp
KTsKKyNlbHNlCisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklU
X0RVTU1ZX0FSRyBhcmcucGF5bG9hZEdQUigpLCBhcmcudGFnR1BSKCkpOworI2VuZGlmCisgICAg
fQogICAgIAogICAgIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEpTVmFsdWVSZWdz
IGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCiAgICAgewpAQCAtMjI3Niw2ICsyMjk1LDE1IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEpTVmFsdWVSZWdzIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMikKKyAgICB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3By
KCksIGFyZzIpOworI2Vsc2UKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVB
QklfMzJCSVRfRFVNTVlfQVJHIGFyZzEucGF5bG9hZEdQUigpLCBhcmcxLnRhZ0dQUigpLCBhcmcy
KTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykK
ICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTIyOTMsNiArMjMyMSwxNSBAQCBwdWJsaWM6
CiAgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FS
RyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSwgYXJnMi5wYXlsb2FkR1BSKCksIGFy
ZzIudGFnR1BSKCksIGFyZzMsIGFyZzQpOwogI2VuZGlmCiAgICAgfQorCisgICAgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoSlNWYWx1ZVJlZ3MgYXJnMSwgVHJ1c3RlZEltbVB0ciBh
cmcyLCBUcnVzdGVkSW1tUHRyIGFyZzMpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLmdwcigpLCBhcmcyLCBhcmczKTsK
KyNlbHNlCisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RV
TU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSwgYXJnMiwgYXJnMyk7Cisj
ZW5kaWYKKyAgICB9CiAgICAgCiAgICAgdm9pZCBzZXR1cEFyZ3VtZW50cyhKU1ZhbHVlUmVncyBh
cmcxKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDNkMjIwOGIwZTE4YzY4YjU3
ZWQwZDA5YzI2MzI3ZTg4MzhkNTI3MjcuLjFiNzU4NWNkZjllZTE2ZGI4MDc4NGVhODU2YTRmNGQw
ZTAxYTIwMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNjk3LDEwICs2OTcsMTQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBz
cmMpOwogCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+Ci0gICAgICAgIHZv
aWQgZW1pdE1hdGhJQ0Zhc3QoSklUTWF0aElDPEdlbmVyYXRvcj4qLCBJbnN0cnVjdGlvbiosIFBy
b2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOworICAgICAgICB2b2lkIGVtaXRN
YXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBJbnN0cnVjdGlvbiosIFByb2Zp
bGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24pOworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Q
cm9maWxlZEZ1bmN0aW9uPgorICAgICAgICB2b2lkIGVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiwgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9m
aWxlZEZ1bmN0aW9uKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0
eXBlbmFtZSBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlv
biwgdHlwZW5hbWUgUmVwYXRjaEZ1bmN0aW9uPgotICAgICAgICB2b2lkIGVtaXRNYXRoSUNTbG93
KEpJVE1hdGhJQzxHZW5lcmF0b3I+KiwgSW5zdHJ1Y3Rpb24qLCBQcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgUHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBl
bWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIEluc3RydWN0aW9uKiwg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlv
bik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2Zp
bGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBS
ZXBhdGNoRnVuY3Rpb24+CisgICAgICAgIHZvaWQgZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiosIEluc3RydWN0aW9uKiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFBy
b2ZpbGVkRnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbik7CiAKICAgICAgICAgSnVtcCBnZXRTbG93
Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CkBA
IC03NDUsNiArNzQ5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUMsIGludCwgSlNDZWxsKik7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25f
RUMsIEpTQ2VsbCopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VKLCBpbnQsIEdQUlJlZyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUosIEpTVmFsdWVSZWdzLCBKU1Zh
bHVlUmVncyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FU3NpSkksIGludCwgU3RydWN0dXJlU3R1
YkluZm8qLCBHUFJSZWcsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGVUYWcsIEpfSklUT3BlcmF0aW9uX0VT
c2lKSSwgaW50LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEdQUlJlZywgVW5pcXVlZFN0cmluZ0ltcGwq
KTsKQEAgLTc1NCw5ICs3NTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkksIGlu
dCwgR1BSUmVnLCBVbmlxdWVkU3RyaW5nSW1wbCopOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSiwgaW50LCBHUFJSZWcsIEdQUlJl
Zyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRUpBcnAsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgQXJpdGhQcm9maWxlKik7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25f
RUpKQXJwLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBBcml0aFByb2Zp
bGUqKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FSkosIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VK
SkFycE1pYywgSlNWYWx1ZVJlZ3MsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywgQXJpdGhQcm9m
aWxlKiwgVHJ1c3RlZEltbVB0cik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpNaWMsIEpTVmFsdWVSZWdzLCBKU1ZhbHVlUmVncywg
VHJ1c3RlZEltbVB0cik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUpKTWljLCBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3MsIEpTVmFs
dWVSZWdzLCBUcnVzdGVkSW1tUHRyKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpBcCwgaW50LCBHUFJSZWcsIEdQUlJlZywgQXJy
YXlQcm9maWxlKik7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUpKQnksIGludCwgR1BSUmVnLCBHUFJSZWcsIEJ5VmFsSW5mbyopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggYzZiNzg1
Mzc3ZGQ1ZDY3MTY4YTYyNTVmMThmNTU4MDMxYTA4ZDQ2Yy4uNzgwYmNhOTM4ZmQxMGVmYjFmMjc1
ZjQ1ODNkYjg0MWVlYjRjM2ZmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCkBAIC00NjksMzcgKzQ2OSwxNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bW9kKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCiAKIHZv
aWQgSklUOjplbWl0X29wX25lZ2F0ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBzcmNSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBzcmNSZWdzOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCBzcmNSZWdzKTsKLQotICAgIEpJVE5lZ0dlbmVyYXRvciBnZW4ocmVz
dWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotCi0gICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7Ci0gICAgZ2VuLmVu
ZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dCwgcmVzdWx0UmVncyk7Ci0KLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgp
KTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTmVnSUMoKTsK
KyAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRl
SUMpOworICAgIGVtaXRNYXRoSUNGYXN0KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lZ2F0ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtB
bGxTbG93Q2FzZXNGb3JCeXRlY29kZU9mZnNldChtX3Nsb3dDYXNlcywgaXRlciwgbV9ieXRlY29k
ZU9mZnNldCk7CiAKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX25lZ2F0ZSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKKyAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOworICAgIGVtaXRNYXRoSUNT
bG93KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmls
ZWRPcHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhO
ZWdhdGVPcHRpbWl6ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+
CkBAIC02OTgsNyArNjc4LDU2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUTWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5v
blByb2ZpbGVkRnVuY3Rpb24pCit2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9u
UHJvZmlsZWRGdW5jdGlvbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVm
aXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisgICAgLy8g
U2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJl
Z2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDEpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyNlbHNlCisgICAg
SlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCisgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CisjZW5kaWYKKworICAgIEFyaXRo
UHJvZmlsZSYgYXJpdGhQcm9maWxlID0gKmJpdHdpc2VfY2FzdDxBcml0aFByb2ZpbGUqPigmY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9
IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBzY3JhdGNoR1BSLCBhcml0aFByb2ZpbGUp
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKKworICAg
IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVj
dGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICBib29sIGdlbmVyYXRl
ZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUpOworICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgeworICAgICAgICBpZiAo
c2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzLCAmYXJpdGhQcm9maWxlKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1
bHRSZWdzLCBzcmNSZWdzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoSnVtcHMpOworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCisgICAgYXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19j
YXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRk
cmVzcygpKSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5l
U3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVk
Q29kZVNpemUgKz0gc2l6ZTsKKyAgICB9KTsKKyNlbmRpZgorCisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2Vu
ZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1
bmN0aW9uPgordm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkRnVu
Y3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxlZEZ1
bmN0aW9uKQogewogICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwogICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwpAQCAt
NzIyLDcgKzc1MSw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRNYXRoSUM8R2VuZXJh
dG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RyCiAKICAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgYXJpdGhQcm9maWxlID0gJm1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQ
QyhjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9j
ay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVudEluc3RydWN0aW9uKTsKIAogICAgIFNuaXBwZXRP
cGVyYW5kIGxlZnRPcGVyYW5kKHR5cGVzLmZpcnN0KCkpOwogICAgIFNuaXBwZXRPcGVyYW5kIHJp
Z2h0T3BlcmFuZCh0eXBlcy5zZWNvbmQoKSk7CkBAIC03NzQsNyArODAzLDUyIEBAIHZvaWQgSklU
OjplbWl0TWF0aElDRmFzdChKSVRNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RyCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVu
YW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0
eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUTWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVk
RnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlv
bikKK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBt
YXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVkUmVwYXRjaEZ1
bmN0aW9uIHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVk
RnVuY3Rpb24sIFJlcGF0Y2hGdW5jdGlvbiByZXBhdGNoRnVuY3Rpb24pCit7CisgICAgTWF0aElD
R2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9N
YXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKKyAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CisKKyAgICBp
bnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworI2Vsc2UK
KyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBzbG93UGF0aFN0YXJ0
ID0gbGFiZWwoKTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewor
ICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJpdHdpc2VfY2FzdDxBcml0aFBy
b2ZpbGUqPigmY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGlmICht
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNoKQorICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24ocmVpbnRl
cnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24p
LCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbihwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgIH0gZWxzZQorICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbihyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VK
TWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBzbG93UGF0
aEVuZCA9IGxhYmVsKCk7CisgICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZm
ZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBzdGF0aWNf
Y2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6
ZTsKKyAgICB9KTsKKyNlbmRpZgorCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQs
IHJlc3VsdFJlZ3MpOworCisgICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0
YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudElu
c3RydWN0aW9uKS0+dmFsdWU7CisgICAgICAgIG1hdGhJQy0+ZmluYWxpemVJbmxpbmVDb2RlKG1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CisgICAgfSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Cit2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24g
cHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlv
biwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKIHsKICAgICBNYXRoSUNHZW5lcmF0
aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwogICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKQEAgLTgxNSw3ICs4ODks
NyBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUTWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cgogI2VuZGlmCiAKICAgICBpZiAoc2hvdWxkRW1p
dFByb2ZpbGluZygpKSB7Ci0gICAgICAgIEFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gbV9j
b2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAg
IEFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gKm1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVG
b3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0
YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKICAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJh
dGlvbl9FSkpBcnBNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgJmFyaXRoUHJvZmlsZSwgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsK
ICAgICAgICAgZWxzZQpAQCAtODYyLDcgKzkzNiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RpdihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgIGFyaXRoUHJvZmlsZSA9ICZtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVu
dEluc3RydWN0aW9uKTsKKyAgICAgICAgYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRo
UHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKICAgICBTbmlwcGV0T3BlcmFuZCBs
ZWZ0T3BlcmFuZCh0eXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQodHlwZXMuc2Vjb25kKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApp
bmRleCAwMjFjMGE2ZmZkZWY5ODc0NjgzOTljODYxYTM2ZDgxNGNmNGE1YmIxLi40NTEwYTliNmJm
YTdlNWJlOTA5NGFkMmMxYzJiNTcxZWM1NDEyODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaApAQCAtNDE2LDYgKzQxNiwxNCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0laQyBvcGVy
YQogICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiB9
CiAKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjpjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVl
UmVncyBhcmcpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZyk7CisgICAg
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAg
IHNldHVwUmVzdWx0cyhyZXN1bHQpOworICAgIHJldHVybiBjYWxsOworfQorCiBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FSkogb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpT
VmFsdWVSZWdzIGFyZzIpCiB7CiAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwpAQCAtNDI0LDYgKzQzMiwxNCBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aQogICAg
IHJldHVybiBjYWxsOwogfQogCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJ
VDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkFycCBvcGVyYXRpb24sIEpTVmFsdWVS
ZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3Mgb3BlcmFuZCwgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUpCit7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9wZXJhbmQsIFRydXN0ZWRJ
bW1QdHIoYXJpdGhQcm9maWxlKSk7CisgICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIHNldHVwUmVzdWx0cyhyZXN1bHQpOworICAgIHJl
dHVybiBjYWxsOworfQorCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpBcnAgb3BlcmF0aW9uLCBKU1ZhbHVlUmVn
cyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKQogewogICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLCBUcnVzdGVkSW1tUHRyKGFyaXRoUHJvZmlsZSkpOwpAQCAtNDQwLDYgKzQ1NiwxNCBA
QCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSkpBcnBNaWMgbwogICAgIHJldHVybiBjYWxsOwogfQogCitBTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6Y2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJn
LCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKK3sKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnLCBtYXRoSUMpOworICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKKyAgICBzZXR1cFJlc3VsdHMocmVzdWx0KTsKKyAgICByZXR1cm4g
Y2FsbDsKK30KKwogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmNhbGxP
cGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVz
dWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyLCBUcnVzdGVkSW1tUHRyIG1h
dGhJQykKIHsKICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgbWF0
aElDKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE1hdGhJQy5oCmluZGV4IDUxNGQxNGQ2Njdm
YjhiMmUxY2U2ZDdhNGIzNWVhMDJlMjk3ODViYWYuLjFjYTRiMWY0YTQ5ZTA5YmFlOWZjOWIxZmUx
YmJiMzM4ODcyZWFkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
TWF0aElDLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRoSUMuaApAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpJVEFkZEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJ
VE1hdGhJQ0lubGluZVJlc3VsdC5oIgogI2luY2x1ZGUgIkpJVE11bEdlbmVyYXRvci5oIgorI2lu
Y2x1ZGUgIkpJVE5lZ0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCkBAIC01Miw3ICs1
Myw3IEBAIHN0cnVjdCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUgewogCiAjZGVmaW5lIEVOQUJMRV9N
QVRIX0lDX1NUQVRTIDAKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yVHlwZSwgYm9vbCgqaXNQcm9maWxlRW1wdHkpKEFyaXRo
UHJvZmlsZSopPgogY2xhc3MgSklUTWF0aElDIHsKIHB1YmxpYzoKICAgICBDb2RlTG9jYXRpb25M
YWJlbCBkb25lTG9jYXRpb24oKSB7IHJldHVybiBtX2lubGluZVN0YXJ0LmxhYmVsQXRPZmZzZXQo
bV9pbmxpbmVTaXplKTsgfQpAQCAtNzIsMTcgKzczLDE3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6
ZV90IHN0YXJ0U2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpOwogCiAg
ICAgICAgIGlmIChBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fZ2VuZXJhdG9yLmFyaXRo
UHJvZmlsZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXJpdGhQcm9maWxlLT5saHNPYnNlcnZlZFR5
cGUoKS5pc0VtcHR5KCkgfHwgYXJpdGhQcm9maWxlLT5yaHNPYnNlcnZlZFR5cGUoKS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGlmICghaXNQcm9maWxlRW1wdHkoYXJpdGhQcm9maWxlKSkgewog
ICAgICAgICAgICAgICAgIC8vIEl0IGxvb2tzIGxpa2UgdGhlIE1hdGhJQyBoYXMgeWV0IHRvIGV4
ZWN1dGUuIFdlIGRvbid0IHdhbnQgdG8gZW1pdCBjb2RlIGluIHRoaXMKICAgICAgICAgICAgICAg
ICAvLyBjYXNlIGZvciBhIGNvdXBsZSByZWFzb25zLiBGaXJzdCwgdGhlIG9wZXJhdGlvbiBtYXkg
bmV2ZXIgZXhlY3V0ZSwgc28gaWYgd2UgZG9uJ3QgZW1pdAogICAgICAgICAgICAgICAgIC8vIGNv
ZGUsIGl0J3MgYSB3aW4uIFNlY29uZCwgaWYgdGhlIG9wZXJhdGlvbiBkb2VzIGV4ZWN1dGUsIHdl
IGNhbiBlbWl0IGJldHRlciBjb2RlCi0gICAgICAgICAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGFu
IGlkZWEgYWJvdXQgdGhlIHR5cGVzIG9mIGxocyBhbmQgcmhzLgorICAgICAgICAgICAgICAgIC8v
IG9uY2Ugd2UgaGF2ZSBhbiBpZGVhIGFib3V0IHRoZSB0eXBlcy4KICAgICAgICAgICAgICAgICBz
dGF0ZS5zbG93UGF0aEp1bXBzLmFwcGVuZChqaXQucGF0Y2hhYmxlSnVtcCgpKTsKICAgICAgICAg
ICAgICAgICBzaXplX3QgaW5saW5lU2l6ZSA9IGppdC5tX2Fzc2VtYmxlci5idWZmZXIoKS5jb2Rl
U2l6ZSgpIC0gc3RhcnRTaXplOwogICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5saW5l
U2l6ZSwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihpbmxpbmVTaXplKSA8PSBNYWNyb0Fzc2VtYmxl
cjo6cGF0Y2hhYmxlSnVtcFNpemUoKSk7CiAgICAgICAgICAgICAgICAgc3RhdGUuc2hvdWxkU2xv
d1BhdGhSZXBhdGNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzdGF0ZS5mYXN0UGF0aEVuZCA9
IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9nZW5lcmF0ZUZhc3RQYXRo
T25SZXBhdGNoKTsgLy8gV2Ugc2hvdWxkIGhhdmUgZ2F0aGVyZWQgc29tZSBvYnNlcnZlZCB0eXBl
IGluZm8gZm9yIGxocyBhbmQgcmhzIGJlZm9yZSB0cnlpbmcgdG8gcmVnZW5lcmF0ZSBhZ2Fpbi4K
KyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZ2VuZXJhdGVGYXN0UGF0aE9uUmVwYXRjaCk7IC8v
IFdlIHNob3VsZCBoYXZlIGdhdGhlcmVkIHNvbWUgb2JzZXJ2ZWQgdHlwZSBpbmZvIGFib3V0IHRo
ZSB0eXBlcyBiZWZvcmUgdHJ5aW5nIHRvIHJlZ2VuZXJhdGUgYWdhaW4uCiAgICAgICAgICAgICAg
ICAgbV9nZW5lcmF0ZUZhc3RQYXRoT25SZXBhdGNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTI0Myw5ICsyNDQsMjYgQEAgcHVibGljOgog
ICAgIEdlbmVyYXRvclR5cGUgbV9nZW5lcmF0b3I7CiB9OwogCi10eXBlZGVmIEpJVE1hdGhJQzxK
SVRBZGRHZW5lcmF0b3I+IEpJVEFkZElDOwotdHlwZWRlZiBKSVRNYXRoSUM8SklUTXVsR2VuZXJh
dG9yPiBKSVRNdWxJQzsKLXR5cGVkZWYgSklUTWF0aElDPEpJVFN1YkdlbmVyYXRvcj4gSklUU3Vi
SUM7CitpbmxpbmUgYm9vbCBjYW5HZW5lcmF0ZVdpdGhCaW5hcnlQcm9maWxlKEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKQoreworICAgIHJldHVybiAhYXJpdGhQcm9maWxlLT5saHNPYnNlcnZl
ZFR5cGUoKS5pc0VtcHR5KCkgJiYgIWFyaXRoUHJvZmlsZS0+cmhzT2JzZXJ2ZWRUeXBlKCkuaXNF
bXB0eSgpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CitjbGFzcyBKSVRC
aW5hcnlNYXRoSUMgOiBwdWJsaWMgSklUTWF0aElDPEdlbmVyYXRvclR5cGUsIGNhbkdlbmVyYXRl
V2l0aEJpbmFyeVByb2ZpbGU+IHsgfTsKKwordHlwZWRlZiBKSVRCaW5hcnlNYXRoSUM8SklUQWRk
R2VuZXJhdG9yPiBKSVRBZGRJQzsKK3R5cGVkZWYgSklUQmluYXJ5TWF0aElDPEpJVE11bEdlbmVy
YXRvcj4gSklUTXVsSUM7Cit0eXBlZGVmIEpJVEJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+
IEpJVFN1YklDOworCisKK2lubGluZSBib29sIGNhbkdlbmVyYXRlV2l0aFVuYXJ5UHJvZmlsZShB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK3sKKyAgICByZXR1cm4gIWFyaXRoUHJvZmlsZS0+
bGhzT2JzZXJ2ZWRUeXBlKCkuaXNFbXB0eSgpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvclR5cGU+CitjbGFzcyBKSVRVbmFyeU1hdGhJQyA6IHB1YmxpYyBKSVRNYXRoSUM8R2VuZXJh
dG9yVHlwZSwgY2FuR2VuZXJhdGVXaXRoVW5hcnlQcm9maWxlPiB7IH07CisKK3R5cGVkZWYgSklU
VW5hcnlNYXRoSUM8SklUTmVnR2VuZXJhdG9yPiBKSVROZWdJQzsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDRm9y
d2FyZHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTWF0aElDRm9yd2FyZHMuaApp
bmRleCAxZmJhMGZjNmE3Zjg5N2RiNzFhMDA0MDcyYWI2ZjkwY2JlOGNmMzQ1Li4wOGJmZDEzMDE0
MTkxZWQ5MjY1OTJiZWI4ZWE0ZDcwYjUzYzViM2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE1hdGhJQ0ZvcndhcmRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRNYXRoSUNGb3J3YXJkcy5oCkBAIC0yOSwxNCArMjksMTcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+IGNsYXNzIEpJVE1hdGhJ
QzsKK3RlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+IGNsYXNzIEpJVEJpbmFyeU1hdGhJQzsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+IGNsYXNzIEpJVFVuYXJ5TWF0aElDOwogY2xh
c3MgSklUQWRkR2VuZXJhdG9yOwogY2xhc3MgSklUTXVsR2VuZXJhdG9yOworY2xhc3MgSklUTmVn
R2VuZXJhdG9yOwogY2xhc3MgSklUU3ViR2VuZXJhdG9yOwogCi10eXBlZGVmIEpJVE1hdGhJQzxK
SVRBZGRHZW5lcmF0b3I+IEpJVEFkZElDOwotdHlwZWRlZiBKSVRNYXRoSUM8SklUTXVsR2VuZXJh
dG9yPiBKSVRNdWxJQzsKLXR5cGVkZWYgSklUTWF0aElDPEpJVFN1YkdlbmVyYXRvcj4gSklUU3Vi
SUM7Cit0eXBlZGVmIEpJVEJpbmFyeU1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+IEpJVEFkZElDOwor
dHlwZWRlZiBKSVRCaW5hcnlNYXRoSUM8SklUTXVsR2VuZXJhdG9yPiBKSVRNdWxJQzsKK3R5cGVk
ZWYgSklUVW5hcnlNYXRoSUM8SklUTmVnR2VuZXJhdG9yPiBKSVROZWdJQzsKK3R5cGVkZWYgSklU
QmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4gSklUU3ViSUM7CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE5lZ0dlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE5lZ0dlbmVyYXRvci5jcHAK
aW5kZXggYzY4NTE2NzZkNzQ1YTgwM2JmM2U1ZWMxZjU0YmU4MTg0ZWVlODU3OS4uNGRlMWY2YzNi
ZGNmNTEwYTdiYjU3ZDI5MTA2ZjQxN2I2YTViZmZjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVROZWdHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUTmVnR2VuZXJhdG9yLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzcgKzI2LDg0IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSklUTmVnR2VuZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJBcml0
aFByb2ZpbGUuaCIKKwogI2lmIEVOQUJMRShKSVQpCiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lk
IEpJVE5lZ0dlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGppdCkKK0pJ
VE1hdGhJQ0lubGluZVJlc3VsdCBKSVROZWdHZW5lcmF0b3I6OmdlbmVyYXRlSW5saW5lKENDYWxs
SGVscGVycyYgaml0LCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQogeworICAgIEFTU0VS
VChtX3NjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZyk7CiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQ
UiAhPSBtX3NyYy5wYXlsb2FkR1BSKCkpOwogICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIgIT0gbV9y
ZXN1bHQucGF5bG9hZEdQUigpKTsKLSAgICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IEludmFsaWRH
UFJSZWcpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAh
PSBtX3NyYy50YWdHUFIoKSk7CiAgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBtX3Jlc3VsdC50
YWdHUFIoKSk7CiAjZW5kaWYKIAotICAgIG1fZGlkRW1pdEZhc3RQYXRoID0gdHJ1ZTsKKyAgICBP
YnNlcnZlZFR5cGUgb2JzZXJ2ZWRUeXBlcyA9IG1fYXJpdGhQcm9maWxlLT5saHNPYnNlcnZlZFR5
cGUoKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFvYnNlcnZlZFR5cGVzLmlzRW1wdHkoKSwg
IldlIHNob3VsZCBub3QgYXR0ZW1wdCB0byBnZW5lcmF0ZSBhbnl0aGluZyBpZiB3ZSBkbyBub3Qg
aGF2ZSBhIHByb2ZpbGUuIik7CisKKyAgICBpZiAob2JzZXJ2ZWRUeXBlcy5pc09ubHlOb25OdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6RG9udEdlbmVyYXRl
OworCisgICAgaWYgKG9ic2VydmVkVHlwZXMuaXNPbmx5SW50MzIoKSkgeworICAgICAgICBqaXQu
bW92ZVZhbHVlUmVncyhtX3NyYywgbV9yZXN1bHQpOworICAgICAgICBzdGF0ZS5zbG93UGF0aEp1
bXBzLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihtX3NyYykpOworICAgICAgICBzdGF0ZS5z
bG93UGF0aEp1bXBzLmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywg
bV9zcmMucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweDdmZmZmZmZm
KSkpOworICAgICAgICBqaXQubmVnMzIobV9yZXN1bHQucGF5bG9hZEdQUigpKTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICBqaXQuYm94SW50MzIobV9yZXN1bHQucGF5bG9hZEdQUigpLCBt
X3Jlc3VsdCk7CisjZW5kaWYKKworICAgICAgICByZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0
OjpHZW5lcmF0ZWRGYXN0UGF0aDsKKyAgICB9CisgICAgaWYgKG9ic2VydmVkVHlwZXMuaXNPbmx5
TnVtYmVyKCkpIHsKKyAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0LmJyYW5j
aElmSW50MzIobV9zcmMpKTsKKyAgICAgICAgc3RhdGUuc2xvd1BhdGhKdW1wcy5hcHBlbmQoaml0
LmJyYW5jaElmTm90TnVtYmVyKG1fc3JjLCBtX3NjcmF0Y2hHUFIpKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICBpZiAobV9zcmMucGF5bG9hZEdQUigpICE9IG1fcmVzdWx0LnBheWxvYWRH
UFIoKSkgeworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
c3RhdGljX2Nhc3Q8aW50NjRfdD4oMXVsbCA8PCA2MykpLCBtX3Jlc3VsdC5wYXlsb2FkR1BSKCkp
OworICAgICAgICAgICAgaml0LnhvcjY0KG1fc3JjLnBheWxvYWRHUFIoKSwgbV9yZXN1bHQucGF5
bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTY0KHN0YXRpY19jYXN0PGludDY0X3Q+KDF1bGwgPDwgNjMpKSwg
bV9zY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC54b3I2NChtX3NjcmF0Y2hHUFIsIG1fcmVz
dWx0LnBheWxvYWRHUFIoKSk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGppdC5tb3ZlVmFs
dWVSZWdzKG1fc3JjLCBtX3Jlc3VsdCk7CisgICAgICAgIGppdC54b3IzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxIDw8IDMxKSwgbV9yZXN1bHQudGFnR1BSKCkpOworI2VuZGlmCisgICAg
ICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6OkdlbmVyYXRlZEZhc3RQYXRoOworICAg
IH0KKyAgICByZXR1cm4gSklUTWF0aElDSW5saW5lUmVzdWx0OjpHZW5lcmF0ZUZ1bGxTbmlwcGV0
OworfQorCitib29sIEpJVE5lZ0dlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBl
cnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZW5kSnVtcExpc3QsIENDYWxsSGVscGVy
czo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExpc3QsIGJvb2wpCit7CisgICAgQVNTRVJUKG1fc2Ny
YXRjaEdQUiAhPSBtX3NyYy5wYXlsb2FkR1BSKCkpOworICAgIEFTU0VSVChtX3NjcmF0Y2hHUFIg
IT0gbV9yZXN1bHQucGF5bG9hZEdQUigpKTsKKyAgICBBU1NFUlQobV9zY3JhdGNoR1BSICE9IElu
dmFsaWRHUFJSZWcpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgQVNTRVJUKG1fc2NyYXRj
aEdQUiAhPSBtX3NyYy50YWdHUFIoKSk7CisgICAgQVNTRVJUKG1fc2NyYXRjaEdQUiAhPSBtX3Jl
c3VsdC50YWdHUFIoKSk7CisjZW5kaWYKIAogICAgIGppdC5tb3ZlVmFsdWVSZWdzKG1fc3JjLCBt
X3Jlc3VsdCk7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNyY05vdEludCA9IGppdC5icmFuY2hJ
Zk5vdEludDMyKG1fc3JjKTsKIAogICAgIC8vIC0wIHNob3VsZCBwcm9kdWNlIGEgZG91YmxlLCBh
bmQgaGVuY2UgY2Fubm90IGJlIG5lZ2F0ZWQgYXMgYW4gaW50LgogICAgIC8vIFRoZSBuZWdhdGl2
ZSBpbnQzMiAweDgwMDAwMDAwIGRvZXNuJ3QgaGF2ZSBhIHBvc2l0aXZlIGludDMyIHJlcHJlc2Vu
dGF0aW9uLCBhbmQgaGVuY2UgY2Fubm90IGJlIG5lZ2F0ZWQgYXMgYW4gaW50LgotICAgIG1fc2xv
d1BhdGhKdW1wTGlzdC5hcHBlbmQoaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8s
IG1fc3JjLnBheWxvYWRHUFIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHg3ZmZmZmZm
ZikpKTsKKyAgICBzbG93UGF0aEp1bXBMaXN0LmFwcGVuZChqaXQuYnJhbmNoVGVzdDMyKENDYWxs
SGVscGVyczo6WmVybywgbV9zcmMucGF5bG9hZEdQUigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigweDdmZmZmZmZmKSkpOwogCiAgICAgaml0Lm5lZzMyKG1fcmVzdWx0LnBheWxvYWRHUFIo
KSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBqaXQuYm94SW50MzIobV9yZXN1bHQucGF5bG9h
ZEdQUigpLCBtX3Jlc3VsdCk7CiAjZW5kaWYKLSAgICBtX2VuZEp1bXBMaXN0LmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICBlbmRKdW1wTGlzdC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKICAgICBzcmNO
b3RJbnQubGluaygmaml0KTsKLSAgICBtX3Nsb3dQYXRoSnVtcExpc3QuYXBwZW5kKGppdC5icmFu
Y2hJZk5vdE51bWJlcihtX3NyYywgbV9zY3JhdGNoR1BSKSk7CisgICAgc2xvd1BhdGhKdW1wTGlz
dC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKG1fc3JjLCBtX3NjcmF0Y2hHUFIpKTsKIAog
ICAgIC8vIEZvciBhIGRvdWJsZSwgYWxsIHdlIG5lZWQgdG8gZG8gaXMgdG8gaW52ZXJ0IHRoZSBz
aWduIGJpdC4KICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNjUsNiArMTEyLDcgQEAgdm9pZCBKSVRO
ZWdHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiBqaXQpCiAjZWxzZQog
ICAgIGppdC54b3IzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxIDw8IDMxKSwgbV9yZXN1
bHQudGFnR1BSKCkpOwogI2VuZGlmCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVROZWdHZW5l
cmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTmVnR2VuZXJhdG9yLmgKaW5k
ZXggNmRjMmM4NWE2YjI1MWE4M2MzMmZiNTE4YzkzZDUwY2E3MGIxNjExMC4uMzBkZTJjNWMxMjZk
MjA0MTZkM2Y3YmYwM2Y1NzkzOGY4NGI1NjNlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVROZWdHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE5lZ0dlbmVyYXRvci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwzMiArMjksMzIgQEAKICNpZiBFTkFCTEUoSklUKQog
CiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiU25pcHBldE9wZXJhbmQuaCIK
KyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUNJbmxpbmVSZXN1bHQu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpJVE5lZ0dlbmVyYXRvciB7CiBwdWJsaWM6
Ci0gICAgSklUTmVnR2VuZXJhdG9yKEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3Mgc3Jj
LCBHUFJSZWcgc2NyYXRjaEdQUikKLSAgICAgICAgOiBtX3Jlc3VsdChyZXN1bHQpCisgICAgSklU
TmVnR2VuZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgSklUTmVnR2VuZXJhdG9yKEpTVmFsdWVS
ZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3Mgc3JjLCBHUFJSZWcgc2NyYXRjaEdQUiwgQXJpdGhQcm9m
aWxlJiBhcml0aFByb2ZpbGUpCisgICAgICAgIDogbV9hcml0aFByb2ZpbGUoJmFyaXRoUHJvZmls
ZSkKKyAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQpCiAgICAgICAgICwgbV9zcmMoc3JjKQogICAg
ICAgICAsIG1fc2NyYXRjaEdQUihzY3JhdGNoR1BSKQogICAgIHsgfQogCi0gICAgdm9pZCBnZW5l
cmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYpOworICAgIEpJVE1hdGhJQ0lubGluZVJlc3VsdCBn
ZW5lcmF0ZUlubGluZShDQ2FsbEhlbHBlcnMmLCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmKTsKKyAg
ICBib29sIGdlbmVyYXRlRmFzdFBhdGgoQ0NhbGxIZWxwZXJzJiwgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCYgZW5kSnVtcExpc3QsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIHNsb3dQYXRoSnVtcExp
c3QsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyk7CiAKLSAgICBib29sIGRpZEVtaXRGYXN0UGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkRW1pdEZhc3RQYXRoOyB9Ci0gICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCYgZW5kSnVtcExpc3QoKSB7IHJldHVybiBtX2VuZEp1bXBMaXN0OyB9Ci0gICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCgpIHsgcmV0dXJuIG1fc2xv
d1BhdGhKdW1wTGlzdDsgfQorICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9hcml0aFByb2ZpbGU7IH0KIAogcHJpdmF0ZToKKyAgICBBcml0aFByb2ZpbGUq
IG1fYXJpdGhQcm9maWxlIHsgbnVsbHB0ciB9OwogICAgIEpTVmFsdWVSZWdzIG1fcmVzdWx0Owog
ICAgIEpTVmFsdWVSZWdzIG1fc3JjOwogICAgIEdQUlJlZyBtX3NjcmF0Y2hHUFI7Ci0gICAgYm9v
bCBtX2RpZEVtaXRGYXN0UGF0aCB7IGZhbHNlIH07Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IG1fZW5kSnVtcExpc3Q7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBtX3Nsb3dQYXRo
SnVtcExpc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IGM0ZDg3OWE5M2RlYWQ5MTdlNGYxZDBkYzg5
Yjk1MGYxNGZiYjBjN2MuLmQ4YmRjMTA4MTYzYTViZjk0M2MwNWQwMzhiOGQxMDMxYTk1MmI5Yzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjQ2
OSw2ICsyNDY5LDkwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFs
dWVNdWxQcm9maWxlZE5vT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIHByb2Zp
bGVkTXVsKCp2bSwgZXhlYywgZW5jb2RlZE9wMSwgZW5jb2RlZE9wMiwgYXJpdGhQcm9maWxlKTsK
IH0KIAorQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcm9maWxlZE5lZ2F0
ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcGVyYW5kKQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICAKKyAgICBKU1ZhbHVlIG9wZXJhbmQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wZXJhbmQp
OworICAgIGRvdWJsZSBudW1iZXIgPSBvcGVyYW5kLnRvTnVtYmVyKGV4ZWMpOworICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC1udW1i
ZXIpKTsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmlsZWRO
ZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3BlcmFuZCwgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
CisgICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcGVyYW5kKTsK
KyAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFMob3BlcmFuZCk7CisgICAgZG91YmxlIG51bWJl
ciA9IG9wZXJhbmQudG9OdW1iZXIoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLW51bWJlcikpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgb3BlcmFuZCkKK3sKKyAgICByZXR1cm4gdW5wcm9maWxlZE5lZ2F0
ZShleGVjLCBvcGVyYW5kKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
b3BlcmFuZCwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCit7CisgICAgcmV0dXJuIHByb2Zp
bGVkTmVnYXRlKGV4ZWMsIG9wZXJhbmQsIGFyaXRoUHJvZmlsZSk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJhbmQsIEpJVE5lZ0lDKiBu
ZWdJQykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSBvcGVyYW5kID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcGVyYW5kKTsKKworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbmVnSUMt
Pm1fZ2VuZXJhdG9yLmFyaXRoUHJvZmlsZSgpOworICAgIEFTU0VSVChhcml0aFByb2ZpbGUpOwor
ICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIUyhvcGVyYW5kKTsKKyAgICBuZWdJQy0+Z2VuZXJh
dGVPdXRPZkxpbmUodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVBy
b2ZpbGVkKTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGV4ZWMtPmNvZGVCbG9j
aygpLT5kdW1wTWF0aElDU3RhdHMoKTsKKyNlbmRpZgorICAgIAorICAgIGRvdWJsZSBudW1iZXIg
PSBvcGVyYW5kLnRvTnVtYmVyKGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC1udW1iZXIpKTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wZXJhbmQsIEpJVE5lZ0lDKiBuZWdJQykK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisKKyAgICBKU1ZhbHVlIG9wZXJhbmQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wZXJh
bmQpOworCisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBuZWdJQy0+bV9nZW5lcmF0
b3IuYXJpdGhQcm9maWxlKCk7CisgICAgQVNTRVJUKGFyaXRoUHJvZmlsZSk7CisgICAgYXJpdGhQ
cm9maWxlLT5vYnNlcnZlTEhTKG9wZXJhbmQpOworICAgIG5lZ0lDLT5nZW5lcmF0ZU91dE9mTGlu
ZSh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKKworI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5kdW1wTWF0aElDU3Rh
dHMoKTsKKyNlbmRpZgorCisgICAgZG91YmxlIG51bWJlciA9IG9wZXJhbmQudG9OdW1iZXIoZXhl
Yyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoLW51bWJlcikpOworfQorCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSB1bnByb2ZpbGVkU3ViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgKaW5kZXggNjA0ODgyZjA1YzczMjY4NmM4NWM0MDlkNjkyMWQ0ZDYyNjAx
ZTJlNy4uNjcyNjQwNzRlZTQ3Y2IxNTE2MWRiMDkyN2I0M2ZmNzgwODNhNWM3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTE0MCw2ICsxNDAsNyBAQCB0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSiko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJB
VElPTiAqSl9KSVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50
MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJh
dGlvbl9FSkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqKTsKIHR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKQSkoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
KEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VKQXJwKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgQXJpdGhQcm9maWxlKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BF
UkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkkpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBV
bmlxdWVkU3RyaW5nSW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElP
TiAqSl9KSVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRP
cGVyYXRpb25fRUpKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0xNDksNiArMTUwLDcgQEAgdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpKSikoRXhlY1N0YXRlKiwgRW5j
b2RlZEoKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0
aW9uX0VKSkFycCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBB
cml0aFByb2ZpbGUqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpf
SklUT3BlcmF0aW9uX0VKSkFycE1pYykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBBcml0aFByb2ZpbGUqLCB2b2lkKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSkpNaWMpKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSAoSklUX09QRVJBVElPTiAqSl9KSVRPcGVyYXRpb25fRUpNaWMpKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCB2b2lkKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9O
ICpKX0pJVE9wZXJhdGlvbl9FSnNzWikoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBpbnQzMl90KTsK
IHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKEpJVF9PUEVSQVRJT04gKkpfSklUT3BlcmF0aW9uX0VK
c3NSZW8pKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgUmVnRXhwT2JqZWN0Kik7CiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIChKSVRfT1BFUkFUSU9OICpKX0pJVE9wZXJhdGlvbl9FSnNzUmVvSnNzKShF
eGVjU3RhdGUqLCBKU1N0cmluZyosIFJlZ0V4cE9iamVjdCosIEpTU3RyaW5nKik7CkBAIC00Mzcs
NiArNDM5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVN
dWxOb09wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhCiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyLCBBcml0
aFByb2ZpbGUqLCBKSVRNdWxJQyopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZE5vT3B0aW1pemUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJp
dGhQcm9maWxlKiwgSklUTXVsSUMqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxl
KikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cml0aE5lZ2F0ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kKTsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBvcGVyYW5kLCBBcml0aFByb2ZpbGUqKTsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcGVyYW5kLCBKSVROZWdJQyopOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcGVyYW5kLCBKSVROZWdJQyopOwogRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1YihFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlU3Vi
UHJvZmlsZWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEpJ
VFN1YklDKikgV1RGX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IGQ3YTFkZWUzMmQ0ZWM4ZTMyNTRkZGYz
Y2IwZmQ1Mjg1YTgzMWVjODEuLjk5N2VmMzVlMWEyYjU3N2Y1MTRmMDg2M2NkMzM0ZDRiYzEzNjFk
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KQEAgLTI1Myw3ICsyNTMsOSBAQCBjb25zdCBJc0ludmFsaWRhdGVkID0gMgog
Y29uc3QgU2hhZG93Q2hpY2tlblRhaWxNYXJrZXIgPSAweDdhMTEKIAogIyBBcml0aFByb2ZpbGUg
ZGF0YQorY29uc3QgQXJpdGhQcm9maWxlSW50ID0gMHgxMDAwMDAKIGNvbnN0IEFyaXRoUHJvZmls
ZUludEludCA9IDB4MTIwMDAwCitjb25zdCBBcml0aFByb2ZpbGVOdW1iZXIgPSAweDIwMDAwMAog
Y29uc3QgQXJpdGhQcm9maWxlTnVtYmVySW50ID0gMHgyMjAwMDAKIGNvbnN0IEFyaXRoUHJvZmls
ZU51bWJlck51bWJlciA9IDB4MjQwMDAwCiBjb25zdCBBcml0aFByb2ZpbGVJbnROdW1iZXIgPSAw
eDE0MDAwMApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQppbmRleCA3MGM5Mjg0OTU1NDg2Y2JhMGFjZjEwZWU4MTE4
ZjE4NDIxODU2NjA3Li5jM2ViYzYyMWYwMmYzMzM4ODhhN2M2NTA0YWNjODBmMjNkN2VmMTRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQpAQCAtOTQ4LDIyICs5NDgsMjcgQEAgX2xsaW50X29wX25lZ2F0ZToK
ICAgICBsb2FkaSA4W1BDXSwgdDAKICAgICBsb2FkaSA0W1BDXSwgdDMKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHQwLCB0MSwgdDIpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQw
KQogICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0
MiwgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDIKKyAgICBvcmkgQXJpdGhQ
cm9maWxlSW50LCB0MAogICAgIHN0b3JlaSBJbnQzMlRhZywgVGFnT2Zmc2V0W2NmciwgdDMsIDhd
CisgICAgc3RvcmVpc1RvSW5zdHJ1Y3Rpb24odDAsIDMpCiAgICAgc3RvcmVpIHQyLCBQYXlsb2Fk
T2Zmc2V0W2NmciwgdDMsIDhdCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNwYXRjaCg0KQogLm9w
TmVnYXRlU3JjTm90SW50OgogICAgIGJpYSB0MSwgTG93ZXN0VGFnLCAub3BOZWdhdGVTbG93CiAg
ICAgeG9yaSAweDgwMDAwMDAwLCB0MQotICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDMs
IDhdCisgICAgb3JpIEFyaXRoUHJvZmlsZU51bWJlciwgdDAKICAgICBzdG9yZWkgdDIsIFBheWxv
YWRPZmZzZXRbY2ZyLCB0MywgOF0KLSAgICBkaXNwYXRjaCgzKQorICAgIHN0b3JlaXNUb0luc3Ry
dWN0aW9uKHQwLCAzKQorICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDMsIDhdCisgICAg
ZGlzcGF0Y2goNCkKIAogLm9wTmVnYXRlU2xvdzoKICAgICBjYWxsT3Bjb2RlU2xvd1BhdGgoX3Ns
b3dfcGF0aF9uZWdhdGUpCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNwYXRjaCg0KQogCiAKIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUoaW50ZWdlck9wZXJhdGlvbkFuZFN0b3JlLCBkb3VibGVP
cGVyYXRpb24sIHNsb3dQYXRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQppbmRleCBhMGZhNzhlOWIxMzQzNGVlN2Y1NjRj
MGY1NTIzMzRhZTQ2YWEzZmU0Li5kMzRhNDM5Y2M3YmQ2OWZmMmQxMjM1MjE5NWFlNjNlYmIxNjI4
MzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQpAQCAtODI3LDIyICs4MjcsMjcgQEAgX2xsaW50X29wX25lZ2F0ZToK
ICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQwKQog
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQwLCB0MikKLSAgICBicWIgdDIsIHRhZ1R5cGVOdW1iZXIsIC5vcE5lZ2F0ZU5vdEludAot
ICAgIGJ0aXogdDIsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKLSAgICBuZWdpIHQyCi0gICAg
b3JxIHRhZ1R5cGVOdW1iZXIsIHQyCi0gICAgc3RvcmVxIHQyLCBbY2ZyLCB0MSwgOF0KLSAgICBk
aXNwYXRjaCgzKQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDAsIHQzKQorICAgIGxvYWRp
c0Zyb21JbnN0cnVjdGlvbigzLCB0MikKKyAgICBicWIgdDMsIHRhZ1R5cGVOdW1iZXIsIC5vcE5l
Z2F0ZU5vdEludAorICAgIGJ0aXogdDMsIDB4N2ZmZmZmZmYsIC5vcE5lZ2F0ZVNsb3cKKyAgICBu
ZWdpIHQzCisgICAgb3JpIEFyaXRoUHJvZmlsZUludCwgdDIKKyAgICBvcnEgdGFnVHlwZU51bWJl
ciwgdDMKKyAgICBzdG9yZWlzVG9JbnN0cnVjdGlvbih0MiwgMykKKyAgICBzdG9yZXEgdDMsIFtj
ZnIsIHQxLCA4XQorICAgIGRpc3BhdGNoKDQpCiAub3BOZWdhdGVOb3RJbnQ6Ci0gICAgYnRxeiB0
MiwgdGFnVHlwZU51bWJlciwgLm9wTmVnYXRlU2xvdwotICAgIHhvcnEgMHg4MDAwMDAwMDAwMDAw
MDAwLCB0MgotICAgIHN0b3JlcSB0MiwgW2NmciwgdDEsIDhdCi0gICAgZGlzcGF0Y2goMykKKyAg
ICBidHF6IHQzLCB0YWdUeXBlTnVtYmVyLCAub3BOZWdhdGVTbG93CisgICAgeG9ycSAweDgwMDAw
MDAwMDAwMDAwMDAsIHQzCisgICAgb3JpIEFyaXRoUHJvZmlsZU51bWJlciwgdDIKKyAgICBzdG9y
ZXEgdDMsIFtjZnIsIHQxLCA4XQorICAgIHN0b3JlaXNUb0luc3RydWN0aW9uKHQyLCAzKQorICAg
IGRpc3BhdGNoKDQpCiAKIC5vcE5lZ2F0ZVNsb3c6CiAgICAgY2FsbE9wY29kZVNsb3dQYXRoKF9z
bG93X3BhdGhfbmVnYXRlKQotICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0Y2goNCkKIAogCiBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKGludGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91Ymxl
T3BlcmF0aW9uLCBzbG93UGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IGEzMTcwOTBkYzNmNzc1ZjkyNzIxNWUyZDIzYTNl
ODI4OTE4ZTA0NDUuLmNhZjgyNmRjMmFjZGFiNmQ5YTM5NThhMGNmMDMxMTQzNjIzYmJhM2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cApAQCAtMzUwLDE3ICszNTAsNTEgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3N0cmlu
ZykKICAgICBSRVRVUk4oT1BfQygyKS5qc1ZhbHVlKCkudG9TdHJpbmcoZXhlYykpOwogfQogCisj
aWYgRU5BQkxFKEpJVCkKK3N0YXRpYyB2b2lkIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJp
dGhPcChJbnN0cnVjdGlvbiogcGMsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCit7
CisgICAgQXJpdGhQcm9maWxlJiBwcm9maWxlID0gKmJpdHdpc2VfY2FzdDxBcml0aFByb2ZpbGUq
PigmcGNbM10udS5vcGVyYW5kKTsKKyAgICBwcm9maWxlLm9ic2VydmVMSFMob3BlcmFuZCk7Cisg
ICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc0ludDMyKCkp
IHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNJbnQzMigpKQorICAgICAgICAgICAgcHJvZmlsZS5z
ZXRPYnNlcnZlZEludDMyT3ZlcmZsb3coKTsKKworICAgICAgICBkb3VibGUgZG91YmxlVmFsID0g
cmVzdWx0LmFzTnVtYmVyKCk7CisgICAgICAgIGlmICghZG91YmxlVmFsICYmIHN0ZDo6c2lnbmJp
dChkb3VibGVWYWwpKQorICAgICAgICAgICAgcHJvZmlsZS5zZXRPYnNlcnZlZE5lZ1plcm9Eb3Vi
bGUoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwcm9maWxlLnNldE9ic2VydmVkTm9u
TmVnWmVyb0RvdWJsZSgpOworCisgICAgICAgICAgICAvLyBUaGUgSW50NTIgb3ZlcmZsb3cgY2hl
Y2sgaGVyZSBpbnRlbnRpb25hbGx5IG9taXRzIDFsbCA8PCA1MSBhcyBhIHZhbGlkIG5lZ2F0aXZl
IEludDUyIHZhbHVlLgorICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSB3aWxsIGdldCBhIGZh
bHNlIHBvc2l0aXZlIGlmIHRoZSByZXN1bHQgaXMgdGhhdCB2YWx1ZS4gVGhpcyBpcyBpbnRlbnRp
b25hbGx5CisgICAgICAgICAgICAvLyBkb25lIHRvIHNpbXBsaWZ5IHRoZSBjaGVja2luZyBhbGdv
cml0aG0uCisgICAgICAgICAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBpbnQ1Mk92ZXJmbG93UG9p
bnQgPSAoMWxsIDw8IDUxKTsKKyAgICAgICAgICAgIGludDY0X3QgaW50NjRWYWwgPSBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihzdGQ6OmFicyhkb3VibGVWYWwpKTsKKyAgICAgICAgICAgIGlmIChpbnQ2
NFZhbCA+PSBpbnQ1Mk92ZXJmbG93UG9pbnQpCisgICAgICAgICAgICAgICAgcHJvZmlsZS5zZXRP
YnNlcnZlZEludDUyT3ZlcmZsb3coKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbHNlCitzdGF0
aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AoSW5zdHJ1Y3Rpb24qLCBK
U1ZhbHVlLCBKU1ZhbHVlKSB7IH0KKyNlbmRpZgorCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bmVnYXRlKQogewogICAgIEJFR0lOKCk7Ci0gICAgUkVUVVJOKGpzTnVtYmVyKC1PUF9DKDIpLmpz
VmFsdWUoKS50b051bWJlcihleGVjKSkpOworICAgIEpTVmFsdWUgb3BlcmFuZCA9IE9QX0MoMiku
anNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoLW9wZXJhbmQudG9OdW1i
ZXIoZXhlYykpOworICAgIFJFVFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKKyAgICAgICAg
dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKHBjLCByZXN1bHQsIG9wZXJhbmQpOwor
ICAgIH0pOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0
aFByb2ZpbGVGb3JCaW5hcnlBcml0aE9wKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBj
LCBKU1ZhbHVlIHJlc3VsdCwgSlNWYWx1ZSBsZWZ0LCBKU1ZhbHVlIHJpZ2h0KQogewogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgQXJpdGhQcm9maWxl
JiBwcm9maWxlID0gY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhwYyk7CisgICAgQXJpdGhQ
cm9maWxlJiBwcm9maWxlID0gKmNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMocGMpOwogCiAg
ICAgaWYgKHJlc3VsdC5pc051bWJlcigpKSB7CiAgICAgICAgIGlmICghcmVzdWx0LmlzSW50MzIo
KSkgewpAQCAtNDA0LDcgKzQzOCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9hZGQpCiAg
ICAgSlNWYWx1ZSB2MiA9IE9QX0MoMykuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmVzdWx0Owog
Ci0gICAgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSBleGVjLT5jb2RlQmxvY2soKS0+YXJp
dGhQcm9maWxlRm9yUEMocGMpOworICAgIEFyaXRoUHJvZmlsZSYgYXJpdGhQcm9maWxlID0gKmV4
ZWMtPmNvZGVCbG9jaygpLT5hcml0aFByb2ZpbGVGb3JQQyhwYyk7CiAgICAgYXJpdGhQcm9maWxl
Lm9ic2VydmVMSFNBbmRSSFModjEsIHYyKTsKIAogICAgIGlmICh2MS5pc1N0cmluZygpICYmICF2
Mi5pc09iamVjdCgpKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0No
YW5nZUxvZwppbmRleCBmY2YwNGE3NDcxZTU3YjI4NmY2M2Y1MmM5OGYxYmQ3MmJiZTdmZGYzLi45
MDg2ZGY0ZDQ4NjAzYWU3ZWI4MjY5OGZmZTVjNTYxNDdhODIyOGM2IDEwMDY0NAotLS0gYS9KU1Rl
c3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDE2LTA5LTIyICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFtKU0NdIFVzZSBhbiBpbmxpbmUgY2FjaGUgdG8gZ2VuZXJhdGUgb3BfbmVnYXRlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzNzEKKworICAg
ICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICAqIHN0cmVzcy9vcC1uZWdh
dGUtaW5saW5lLWNhY2hlLmpzOiBBZGRlZC4KKwogMjAxNi0wOS0yMiAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQXJyYXkucHJvdG90eXBlLmpvaW4gc2hvdWxkIGRv
IG92ZXJmbG93IGNoZWNrcyBvbiBzdHJpbmcgam9pbnMuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9vcC1uZWdhdGUtaW5saW5lLWNhY2hlLmpzIGIvSlNUZXN0cy9zdHJlc3Mvb3AtbmVnYXRl
LWlubGluZS1jYWNoZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YzU0MDU4ZGVjODJlMGU5Y2ZmODdmNzZkMmRk
MjUzN2RkODIxODdjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvb3AtbmVnYXRl
LWlubGluZS1jYWNoZS5qcwpAQCAtMCwwICsxLDMwMCBAQAorInVzZSBzdHJpY3QiCisKKworZnVu
Y3Rpb24gb3BhcXVlSWRlbnRpdHkoYXJnKSB7CisgICAgcmV0dXJuIGFyZzsKK30KK25vSW5saW5l
KG9wYXF1ZUlkZW50aXR5KQorZnVuY3Rpb24gbmVnYXRlV2l0aERvdWJsZVN1YihhcmcpIHsKKyAg
ICAvLyBJbXBsZW1lbnQgaW50ZWdlciBuZWdhdGUgYXMgYSBkb3VibGUgc3ViIG9wZXJhdGlvbi4K
KyAgICByZXR1cm4gb3BhcXVlSWRlbnRpdHkoNi40IC0gYXJnKSAtIDYuNDsKK30KK25vSW5saW5l
KG5lZ2F0ZVdpdGhEb3VibGVTdWIpCisKK2Z1bmN0aW9uIG9wYXF1ZU5vblplcm9JbnRlZ2VyTmVn
YXRlKGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZU5vblplcm9J
bnRlZ2VyTmVnYXRlKTsKKworZnVuY3Rpb24gdGVzdE5vblplcm9JbnRlZ2VyKCkKK3sKKyAgICBm
b3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVOb25aZXJv
SW50ZWdlck5lZ2F0ZShpKSAhPT0gbmVnYXRlV2l0aERvdWJsZVN1YihpKSkgeworICAgICAgICAg
ICAgdGhyb3cgIkZhaWxlZCB0ZXN0Tm9uWmVyb0ludGVnZXIoKSBhdCBpID0gIiArIGk7CisgICAg
ICAgIH0KKyAgICB9Cit9Cit0ZXN0Tm9uWmVyb0ludGVnZXIoKTsKKworCitmdW5jdGlvbiBvcGFx
dWVEb3VibGVOZWdhdGUoYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3Bh
cXVlRG91YmxlTmVnYXRlKTsKKworZnVuY3Rpb24gdGVzdERvdWJsZSgpCit7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9wYXF1ZURvdWJsZU5lZ2F0
ZShpICsgMC41KSkgKyAwLjUgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVk
IHRlc3REb3VibGUoKSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0RG91
YmxlKCk7CisKKworZnVuY3Rpb24gb3BhcXVlT2JqZWN0TmVnYXRlKGFyZykKK3sKKyAgICByZXR1
cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZU9iamVjdE5lZ2F0ZSk7CisKK2Z1bmN0aW9uIHRl
c3RPYmplY3QoKQoreworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAg
ICAgaWYgKChvcGFxdWVPYmplY3ROZWdhdGUoeyB2YWx1ZU9mOiAoKT0+eyByZXR1cm4gaSArIDAu
NSB9fSkpICsgMC41ICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0
T2JqZWN0KCkgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorfQordGVzdE9iamVjdCgp
OworCisKK2Z1bmN0aW9uIG9wYXF1ZUludGVnZXJBbmREb3VibGVOZWdhdGUoYXJnKQoreworICAg
IHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3BhcXVlSW50ZWdlckFuZERvdWJsZU5lZ2F0ZSk7
CisKK2Z1bmN0aW9uIHRlc3RJbnRlZ2VyQW5kRG91YmxlKCkKK3sKKyAgICBmb3IgKGxldCBpID0g
MTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVlSW50ZWdlckFuZERvdWJsZU5l
Z2F0ZShpKSkgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRl
Z2VyQW5kRG91YmxlKCkgb24gaW50ZWdlcnMgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAg
ICAgIGlmICgob3BhcXVlSW50ZWdlckFuZERvdWJsZU5lZ2F0ZShpICsgMC41KSkgKyAwLjUgKyBp
ICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRlZ2VyQW5kRG91Ymxl
KCkgb24gZG91YmxlIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RJbnRl
Z2VyQW5kRG91YmxlKCk7CisKKworZnVuY3Rpb24gb3BhcXVlSW50ZWdlclRoZW5Eb3VibGVOZWdh
dGUoYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3BhcXVlSW50ZWdlclRo
ZW5Eb3VibGVOZWdhdGUpOworCitmdW5jdGlvbiB0ZXN0SW50ZWdlclRoZW5Eb3VibGUoKQorewor
ICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVJ
bnRlZ2VyVGhlbkRvdWJsZU5lZ2F0ZShpKSkgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJv
dyAiRmFpbGVkIHRlc3RJbnRlZ2VyVGhlbkRvdWJsZSgpIG9uIGludGVnZXJzIGF0IGkgPSAiICsg
aTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7
CisgICAgICAgIGlmICgob3BhcXVlSW50ZWdlclRoZW5Eb3VibGVOZWdhdGUoaSArIDAuNSkpICsg
MC41ICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdlclRo
ZW5Eb3VibGUoKSBvbiBkb3VibGUgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorfQor
dGVzdEludGVnZXJUaGVuRG91YmxlKCk7CisKKworZnVuY3Rpb24gb3BhcXVlRG91YmxlVGhlbklu
dGVnZXJOZWdhdGUoYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3BhcXVl
RG91YmxlVGhlbkludGVnZXJOZWdhdGUpOworCitmdW5jdGlvbiB0ZXN0RG91YmxlVGhlbkludGVn
ZXIoKQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYg
KChvcGFxdWVEb3VibGVUaGVuSW50ZWdlck5lZ2F0ZShpICsgMC41KSkgKyAwLjUgKyBpICE9PSAw
KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3REb3VibGVUaGVuSW50ZWdlcigpIG9u
IGRvdWJsZSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChsZXQgaSA9
IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9wYXF1ZURvdWJsZVRoZW5JbnRlZ2Vy
TmVnYXRlKGkpKSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdERv
dWJsZVRoZW5JbnRlZ2VyKCkgb24gaW50ZWdlcnMgYXQgaSA9ICIgKyBpOworICAgICAgICB9Cisg
ICAgfQorfQordGVzdERvdWJsZVRoZW5JbnRlZ2VyKCk7CisKKworZnVuY3Rpb24gb3BhcXVlSW50
ZWdlckFuZE9iamVjdE5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lubGlu
ZShvcGFxdWVJbnRlZ2VyQW5kT2JqZWN0TmVnYXRlKTsKKworZnVuY3Rpb24gdGVzdEludGVnZXJB
bmRPYmplY3QoKQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAg
ICAgaWYgKChvcGFxdWVJbnRlZ2VyQW5kT2JqZWN0TmVnYXRlKGkpKSArIGkgIT09IDApIHsKKyAg
ICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEludGVnZXJBbmRPYmplY3QoKSBvbiBpbnRlZ2Vy
cyBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChvcGFxdWVJbnRlZ2VyQW5k
T2JqZWN0TmVnYXRlKHsgdmFsdWVPZjogKCk9PnsgcmV0dXJuIGkgKyAwLjUgfX0pKSArIDAuNSAr
IGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEludGVnZXJBbmRPYmpl
Y3QoKSBvbiBkb3VibGUgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQorfQordGVzdElu
dGVnZXJBbmRPYmplY3QoKTsKKworCitmdW5jdGlvbiBvcGFxdWVEb3VibGVBbmRPYmplY3ROZWdh
dGUoYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3BhcXVlRG91YmxlQW5k
T2JqZWN0TmVnYXRlKTsKKworZnVuY3Rpb24gdGVzdERvdWJsZUFuZE9iamVjdCgpCit7CisgICAg
Zm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9wYXF1ZURvdWJs
ZUFuZE9iamVjdE5lZ2F0ZShpICsgMC41KSkgKyBpICsgMC41ICE9PSAwKSB7CisgICAgICAgICAg
ICB0aHJvdyAiRmFpbGVkIHRlc3REb3VibGVBbmRPYmplY3QoKSBvbiBpbnRlZ2VycyBhdCBpID0g
IiArIGk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChvcGFxdWVEb3VibGVBbmRPYmplY3ROZWdh
dGUoeyB2YWx1ZU9mOiAoKT0+eyByZXR1cm4gaSB9fSkpICsgaSAhPT0gMCkgeworICAgICAgICAg
ICAgdGhyb3cgIkZhaWxlZCB0ZXN0RG91YmxlQW5kT2JqZWN0KCkgb24gZG91YmxlIGF0IGkgPSAi
ICsgaTsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3REb3VibGVBbmRPYmplY3QoKTsKKworCitm
dW5jdGlvbiBvcGFxdWVJbnRlZ2VyVGhlbk9iamVjdE5lZ2F0ZShhcmcpCit7CisgICAgcmV0dXJu
IC1hcmc7Cit9Citub0lubGluZShvcGFxdWVJbnRlZ2VyVGhlbk9iamVjdE5lZ2F0ZSk7CisKK2Z1
bmN0aW9uIHRlc3RJbnRlZ2VyVGhlbk9iamVjdCgpCit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9wYXF1ZUludGVnZXJUaGVuT2JqZWN0TmVnYXRl
KGkpKSArIGkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEludGVnZXJU
aGVuT2JqZWN0KCkgb24gaW50ZWdlcnMgYXQgaSA9ICIgKyBpOworICAgICAgICB9CisgICAgfQor
ICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKChvcGFxdWVJ
bnRlZ2VyVGhlbk9iamVjdE5lZ2F0ZSh7IHZhbHVlT2Y6ICgpPT57IHJldHVybiBpICsgMC41IH19
KSkgKyAwLjUgKyBpICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RJbnRl
Z2VyVGhlbk9iamVjdCgpIG9uIGRvdWJsZSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9
Cit9Cit0ZXN0SW50ZWdlclRoZW5PYmplY3QoKTsKKworCitmdW5jdGlvbiBvcGFxdWVEb3VibGVU
aGVuT2JqZWN0TmVnYXRlKGFyZykKK3sKKyAgICByZXR1cm4gLWFyZzsKK30KK25vSW5saW5lKG9w
YXF1ZURvdWJsZVRoZW5PYmplY3ROZWdhdGUpOworCitmdW5jdGlvbiB0ZXN0RG91YmxlVGhlbk9i
amVjdCgpCit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBp
ZiAoKG9wYXF1ZURvdWJsZVRoZW5PYmplY3ROZWdhdGUoaSArIDAuNSkpICsgaSArIDAuNSAhPT0g
MCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0RG91YmxlVGhlbk9iamVjdCgpIG9u
IGludGVnZXJzIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGxldCBp
ID0gMTsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmICgob3BhcXVlRG91YmxlVGhlbk9iamVj
dE5lZ2F0ZShpICsgMC41KSkgKyBpICsgMC41ICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAi
RmFpbGVkIHRlc3REb3VibGVUaGVuT2JqZWN0KCkgb24gaW50ZWdlcnMgYXQgaSA9ICIgKyBpOwor
ICAgICAgICB9CisgICAgfQorfQordGVzdERvdWJsZVRoZW5PYmplY3QoKTsKKworCitmdW5jdGlv
biBvcGFxdWVJbnRlZ2VyQW5kRG91YmxlQW5kT2JqZWN0TmVnYXRlKGFyZykKK3sKKyAgICByZXR1
cm4gLWFyZzsKK30KK25vSW5saW5lKG9wYXF1ZUludGVnZXJBbmREb3VibGVBbmRPYmplY3ROZWdh
dGUpOworCitmdW5jdGlvbiB0ZXN0SW50ZWdlckFuZERvdWJsZUFuZE9iamVjdCgpCit7CisgICAg
Zm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAoKG9wYXF1ZUludGVn
ZXJBbmREb3VibGVBbmRPYmplY3ROZWdhdGUoaSkpICsgaSAhPT0gMCkgeworICAgICAgICAgICAg
dGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdlckFuZERvdWJsZUFuZE9iamVjdCgpIG9uIGludGVnZXJz
IGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG9wYXF1ZUludGVnZXJBbmRE
b3VibGVBbmRPYmplY3ROZWdhdGUoaSArIDAuNSkpICsgaSArIDAuNSAhPT0gMCkgeworICAgICAg
ICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdlckFuZERvdWJsZUFuZE9iamVjdCgpIG9uIGlu
dGVnZXJzIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG9wYXF1ZUludGVn
ZXJBbmREb3VibGVBbmRPYmplY3ROZWdhdGUoeyB2YWx1ZU9mOiAoKT0+eyByZXR1cm4gaSB9fSkp
ICsgaSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0SW50ZWdlckFuZERv
dWJsZUFuZE9iamVjdCgpIG9uIGRvdWJsZSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9
Cit9Cit0ZXN0SW50ZWdlckFuZERvdWJsZUFuZE9iamVjdCgpOworCisKK2Z1bmN0aW9uIG9wYXF1
ZUludGVnZXJOZWdhdGVPdmVyZmxvdyhhcmcpCit7CisgICAgcmV0dXJuIC1hcmc7Cit9Citub0lu
bGluZShvcGFxdWVJbnRlZ2VyTmVnYXRlT3ZlcmZsb3cpOworCitmdW5jdGlvbiB0ZXN0SW50ZWdl
ck5lZ2F0ZU92ZXJmbG93KCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNDsgKytpKSB7
CisgICAgICAgIGlmIChvcGFxdWVJbnRlZ2VyTmVnYXRlT3ZlcmZsb3coMHg4MDAwMDAwMHwwKSAh
PT0gMjE0NzQ4MzY0OCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVJbnRlZ2Vy
TmVnYXRlT3ZlcmZsb3coKSBhdCBpID0gIiArIGk7CisgICAgICAgIH0KKyAgICB9Cit9Cit0ZXN0
SW50ZWdlck5lZ2F0ZU92ZXJmbG93KCk7CisKKworZnVuY3Rpb24gb3BhcXVlSW50ZWdlck5lZ2F0
ZVplcm8oYXJnKQoreworICAgIHJldHVybiAtYXJnOworfQorbm9JbmxpbmUob3BhcXVlSW50ZWdl
ck5lZ2F0ZVplcm8pOworCitmdW5jdGlvbiB0ZXN0SW50ZWdlck5lZ2F0ZVplcm8oKQoreworICAg
IGZvciAobGV0IGkgPSAxOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKDEgLyBvcGFxdWVJ
bnRlZ2VyTmVnYXRlWmVybygwKSAhPT0gLUluZmluaXR5KSB7CisgICAgICAgICAgICB0aHJvdyAi
RmFpbGVkIHRlc3RJbnRlZ2VyTmVnYXRlWmVybygpIGF0IGkgPSAiICsgaTsKKyAgICAgICAgfQor
ICAgIH0KK30KK3Rlc3RJbnRlZ2VyTmVnYXRlWmVybygpOworCisKK2Z1bmN0aW9uIGdhdGVkTmVn
YXRlKHNlbGVjdG9yLCBhcmcpCit7CisgICAgaWYgKHNlbGVjdG9yID09PSAwKSB7CisgICAgICAg
IHJldHVybiAtYXJnOworICAgIH0KKyAgICBpZiAoc2VsZWN0b3IgPT0gNDIpIHsKKyAgICAgICAg
cmV0dXJuIC1hcmc7CisgICAgfQorICAgIHJldHVybiBhcmc7Cit9Citub0lubGluZShnYXRlZE5l
Z2F0ZSk7CisKK2Z1bmN0aW9uIHRlc3RVbnVzZWROZWdhdGUoKQoreworICAgIGZvciAobGV0IGkg
PSAxOyBpIDwgMWUyOyArK2kpIHsKKyAgICAgICAgaWYgKGdhdGVkTmVnYXRlKE1hdGguUEksIGkp
ICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIGZpcnN0IHBoYXNlIG9mIHRlc3RV
bnVzZWROZWdhdGUiOworICAgICAgICB9CisgICAgfQorICAgIGZvciAobGV0IGkgPSAxOyBpIDwg
MWU0OyArK2kpIHsKKyAgICAgICAgaWYgKGdhdGVkTmVnYXRlKDAsIGkpICsgaSAhPT0gMCkgewor
ICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBzZWNvbmQgcGhhc2Ugb2YgdGVzdFVudXNlZE5lZ2F0
ZSI7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTQ7ICsraSkg
eworICAgICAgICBpZiAoZ2F0ZWROZWdhdGUoNDIsIGkgKyAwLjUpICsgMC41ICsgaSAhPT0gMCkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0aGlyZCBwaGFzZSBvZiB0ZXN0VW51c2VkTmVn
YXRlIjsKKyAgICAgICAgfQorICAgIH0KK30KK3Rlc3RVbnVzZWROZWdhdGUoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>