<?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>226107</bug_id>
          
          <creation_ts>2021-05-21 13:29:35 -0700</creation_ts>
          <short_desc>Reduce Baseline JIT emitted code size for op_jfalse, op_jtrue, op_get_from_scope, op_resolve_scope.</short_desc>
          <delta_ts>2021-05-25 11:04:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762559</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-21 13:29:35 -0700</bug_when>
    <thetext>Using more JIT thunks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762587</commentid>
    <comment_count>1</comment_count>
      <attachid>429340</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-21 14:20:26 -0700</bug_when>
    <thetext>Created attachment 429340
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762588</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-21 14:21:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/78328476&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762591</commentid>
    <comment_count>3</comment_count>
      <attachid>429342</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-21 14:27:06 -0700</bug_when>
    <thetext>Created attachment 429342
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762672</commentid>
    <comment_count>4</comment_count>
      <attachid>429342</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-05-21 16:53:33 -0700</bug_when>
    <thetext>Comment on attachment 429342
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1890
&gt; +        if constexpr (thunkNotUsedForResolveScope(resolveType)) { \
&gt; +            RELEASE_ASSERT_NOT_REACHED(); \
&gt; +            return { }; \
&gt; +        } \

Why not just RELEASE_ASSERT in generateOpResolveScopeThunk

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1910
&gt; +#if CPU(X86_64)
&gt; +    jit.push(X86Registers::ebp);
&gt; +#elif CPU(ARM64)
&gt; +    jit.pushPair(framePointerRegister, linkRegister);
&gt; +#endif

not just emit a prologue?

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1924
&gt; +    jit.setupArguments&lt;decltype(operationGetFromScope)&gt;(globalObjectGPR, instructionGPR);

operationResolveScopeForBaseline, not operationGetFromScope

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1933
&gt; +#if CPU(X86_64)
&gt; +    jit.pop(X86Registers::ebp);
&gt; +#elif CPU(ARM64)
&gt; +    jit.popPair(CCallHelpers::framePointerRegister, CCallHelpers::linkRegister);
&gt; +#endif

ditto for epilogue

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:2353
&gt; +    jit.move(metadataGPR, GPRInfo::numberTagRegister); // Preserve metadata in a callee saved register.

I&apos;d assert numberTagRegister is a CSR

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:2360
&gt; +    jit.move(TrustedImm64(JSValue::NumberTag), GPRInfo::numberTagRegister);

I&apos;d do this before the exception check for sanity</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762725</commentid>
    <comment_count>5</comment_count>
      <attachid>429342</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-21 19:17:18 -0700</bug_when>
    <thetext>Comment on attachment 429342
proposed patch.

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

Thanks for the review.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1890
&gt;&gt; +        } \
&gt; 
&gt; Why not just RELEASE_ASSERT in generateOpResolveScopeThunk

I will do that.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1910
&gt;&gt; +#endif
&gt; 
&gt; not just emit a prologue?

We can&apos;t use emitFunctionPrologue() because we don&apos;t want to modify the framePointerRegister.  emitFunctionPrologue() will move the sp into fp.  The thunk should preserve the frame of the JS function that called it.  The only reason for pushing here is to preserve the return address because this thunk can make a call, and hence, trash the linkRegister.  For both ARM64 and x86_64, we push the framePointerRegister here just to keep the stack aligned.  We could have pushed any other register, but fp seems natural.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1924
&gt;&gt; +    jit.setupArguments&lt;decltype(operationGetFromScope)&gt;(globalObjectGPR, instructionGPR);
&gt; 
&gt; operationResolveScopeForBaseline, not operationGetFromScope

Will fix.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:1933
&gt;&gt; +#endif
&gt; 
&gt; ditto for epilogue

Ditto: emitFunctionEpilogue() modifies sp with fp.  We also don&apos;t want to do that.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:2353
&gt;&gt; +    jit.move(metadataGPR, GPRInfo::numberTagRegister); // Preserve metadata in a callee saved register.
&gt; 
&gt; I&apos;d assert numberTagRegister is a CSR

Will assert.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:2360
&gt;&gt; +    jit.move(TrustedImm64(JSValue::NumberTag), GPRInfo::numberTagRegister);
&gt; 
&gt; I&apos;d do this before the exception check for sanity

Can&apos;t do that.  Before we restore the numberTagRegister, we need to store the result in the profile.  However, we only want to store the result in the profile if the result is valid because we don&apos;t want to pollute the profile with junk.  In the presence of an exception, it&apos;s not valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762728</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-21 19:23:23 -0700</bug_when>
    <thetext>I&apos;m going to invert thunkNotUsedForGetFromScope =&gt; thunkIsUsedForGetFromScope to avoid a double negative with the new assert I have to add.

Ditto for thunkNotUsedForResolveScope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762731</commentid>
    <comment_count>7</comment_count>
      <attachid>429390</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-21 19:35:38 -0700</bug_when>
    <thetext>Created attachment 429390
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762737</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-21 19:58:51 -0700</bug_when>
    <thetext>The JSC EWS bot failures appear to be real.  However, they only reproduce on x86_64.  I will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762959</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-23 14:11:21 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; The JSC EWS bot failures appear to be real.  However, they only reproduce on
&gt; x86_64.  I will investigate.

The jsc bot failures are due to flaky test failures.  I&apos;ll try to address that in another bug before landing this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763403</commentid>
    <comment_count>10</comment_count>
      <attachid>429618</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-24 20:06:21 -0700</bug_when>
    <thetext>Created attachment 429618
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763581</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-25 11:04:16 -0700</bug_when>
    <thetext>Landed in r278029: &lt;http://trac.webkit.org/r278029&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429340</attachid>
            <date>2021-05-21 14:20:26 -0700</date>
            <delta_ts>2021-05-21 14:36:24 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226107.patch</filename>
            <type>text/plain</type>
            <size>58100</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3ODgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDIxLTA1LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWR1Y2UgQmFzZWxpbmUgSklUIGVtaXR0ZWQgY29kZSBzaXplIGZvciBvcF9qZmFsc2UsIG9wX2p0
cnVlLCBvcF9nZXRfZnJvbV9zY29wZSwgb3BfcmVzb2x2ZV9zY29wZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjEwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVz
IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKS4K
KyAgICAgICAgZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yKSB3YXMgbm90IGJlaW5nIHVz
ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiAgU28sIHdlJ2xsCisgICAgICAgIGp1c3QgbWFrZSBpdCBu
b24tbG9ja2luZy4KKworICAgICAgICBCZW5jaG1hcmtpbmcgd2l0aCBKZXRTdHJlYW0yIGFuZCBT
cGVlZG9tZXRlcjIgb24gTTEgTWFjIHNob3dzIHRoYXQgcGVyZm9ybWFuY2UgaXMKKyAgICAgICAg
bmV1dHJhbC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgQmFzZWxpbmUgSklUIGVtaXR0
ZWQgY29kZSBzaWRlIG9uIGEgcnVuIG9mIEpldFN0cmVhbTIgQ0xJIGJ5CisgICAgICAgIGFub3Ro
ZXIgfjYuNk06CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAgICAgICAgICAgICAg
ICAgTmV3ICAgICAgICAgICAgICAgICAgICAgIERpZmYKKworICAgICAgICAgICBCYXNlbGluZUpJ
VDogNjQ5NTUxMTYgKDYxLjk0NjAyNiBNQikgIDU3OTkxNzA0ICg1NS4zMDUxOTkgTUIpICAwLjg5
eCAocmVkdWN0aW9uKQorICAgICAgICAgICAgICAgICAgIERGRzogMzYzODIwMTIgKDM0LjY5NjU5
MCBNQikgIDM2NTQwNjUyICgzNC44NDc4ODEgTUIpICAxLjAweAorICAgICAgICAgICAgICAgICBU
aHVuazogMjMyMTc2OTIgKDIyLjE0MjExNyBNQikgIDIzMTE1ODUyICgyMi4wNDQ5OTQgTUIpICAx
LjAweAorICAgICAgICAgICBJbmxpbmVDYWNoZTogMjIyMjgxNDAgKDIxLjE5ODQwNiBNQikgIDIy
MjYyNTcyICgyMS4yMzEyNDMgTUIpICAxLjAweAorICAgICAgICAgICAgICAgICAgIEZUTDogNjAy
NTMyMCAoNS43NDYxOTMgTUIpICAgIDYxNjQzMzIgKDUuODc4NzY1IE1CKSAgICAxLjAyeAorICAg
ICAgICAgICAgICAgICAgV2FzbTogMjMyNzYwNCAoMi4yMTk3NzYgTUIpICAgIDIyOTcwMzYgKDIu
MTkwNjI0IE1CKSAgICAwLjk5eAorICAgICAgICAgICAgICAgWWFyckpJVDogMTU0NzE3MiAoMS40
NzU0OTggTUIpICAgIDE1MjI1ODQgKDEuNDUyMDQ5IE1CKSAgICAwLjk4eAorICAgICAgICAgICAg
ICAgIENTU0pJVDogMCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgIFVuY2F0ZWdv
cml6ZWQ6IDAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKyAgICAgICAgQ3VtdWxhdGl2ZSBk
aWZmIHNpbmNlIHRoZSBzdGFydCBvZiB0aGlzIGVmZm9ydCB0byByZWR1Y2UgQmFzZWxpbmUgSklU
IGNvZGUgc2l6ZToKKworICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgICAgICAgICAg
ICAgICAgIE5ldyAgICAgICAgICAgICAgICAgICAgICBEaWZmCisKKyAgICAgICAgICAgQmFzZWxp
bmVKSVQ6IDg5MDg5OTY0ICg4NC45NjI4MTEgTUIpICA1Nzk5MTcwNCAoNTUuMzA1MTk5IE1CKSAg
MC42NXggKHJlZHVjdGlvbikKKyAgICAgICAgICAgICAgICAgICBERkc6IDM5MTE3MzYwICgzNy4z
MDUyMjIgTUIpICAzNjU0MDY1MiAoMzQuODQ3ODgxIE1CKSAgMC45M3ggKHJlZHVjdGlvbikKKyAg
ICAgICAgICAgICAgICAgVGh1bms6IDIzMjMwOTY4ICgyMi4xNTQ3NzggTUIpICAyMzExNTg1MiAo
MjIuMDQ0OTk0IE1CKSAgMS4wMHgKKyAgICAgICAgICAgSW5saW5lQ2FjaGU6IDIyMDI3NDE2ICgy
MS4wMDY5ODEgTUIpICAyMjI2MjU3MiAoMjEuMjMxMjQzIE1CKSAgMS4wMXgKKyAgICAgICAgICAg
ICAgICAgICBGVEw6IDY1NzU3NzIgKDYuMjcxMTQ1IE1CKSAgICA2MTY0MzMyICg1Ljg3ODc2NSBN
QikgICAgMC45NHggKHJlZHVjdGlvbikKKyAgICAgICAgICAgICAgICAgIFdhc206IDIzMDI3MjQg
KDIuMTk2MDQ5IE1CKSAgICAyMjk3MDM2ICgyLjE5MDYyNCBNQikgICAgMS4wMHgKKyAgICAgICAg
ICAgICAgIFlhcnJKSVQ6IDE1Mzg5NTYgKDEuNDY3NjYzIE1CKSAgICAxNTIyNTg0ICgxLjQ1MjA0
OSBNQikgICAgMC45OXgKKyAgICAgICAgICAgICAgICBDU1NKSVQ6IDAgICAgICAgICAgICAgICAg
ICAgICAgICAwCisgICAgICAgICBVbmNhdGVnb3JpemVkOiAwICAgICAgICAgICAgICAgICAgICAg
ICAgMAorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmVmFsdWUpOgorICAg
ICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpicmFuY2hJZlRydXRoeSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZGYWxzZXkpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNl
KToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1
dGh5R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3Jlc29s
dmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQv
SklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OnByZWluaXRpYWxpemVDVElUaHVua3MpOgorICAg
ICAgICAqIGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqaXQvU2xvd1BhdGhDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUU2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKToKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6cG9wVGh1bmtTdGFja1By
ZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0dldFB1dEluZm8uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCk6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpOgorCiAy
MDIxLTA1LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRy
b2R1Y2luZyBKSVRUaHVua3M6OnByZWluaXRpYWxpemVDVElUaHVua3MoKS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3Nzg4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtODkyLDYgKzg5MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8TWV0YWRhdGEqPihtX21ldGFkYXRhLT5nZXQob3Bjb2RlSUQpKVttZXRhZGF0YUlEXTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KKyAgICBwdHJkaWZmX3Qg
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKE1ldGFkYXRhKiBtZXRhZGF0YSkKKyAgICB7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1ldGFkYXRhKSAtIGJpdHdpc2VfY2FzdDx1
aW50OF90Kj4obWV0YWRhdGFUYWJsZSgpKTsKKyAgICB9CisKICAgICBzaXplX3QgbWV0YWRhdGFT
aXplSW5CeXRlcygpCiAgICAgewogICAgICAgICByZXR1cm4gbV91bmxpbmtlZENvZGUtPm1ldGFk
YXRhU2l6ZUluQnl0ZXMoKTsKQEAgLTkwMCw2ICs5MDYsNyBAQCBwdWJsaWM6CiAgICAgTWV0YWRh
dGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KICAg
ICBjb25zdCB2b2lkKiBpbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gbV9pbnN0cnVj
dGlvbnNSYXdQb2ludGVyOyB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEp
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1Bv
aW50ZXIpOyB9CiAKICAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHJldmlzaW9uIDI3Nzg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk3LDcgKzc5Nyw3IEBAIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0Q29udmVydFZhbHVlVG8KICAgICBkb25lLmxpbmsodGhp
cyk7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFu
Y2hJZlZhbHVlKFZNJiB2bSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBHUFJS
ZWcgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGUFJSZWcgdmFs
dWVBc0ZQUiwgRlBSUmVnIHRlbXBGUFIsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIGludmVydCkKK0Fzc2Vt
Ymx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZlZhbHVlKFZNJiB2
bSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgc2NyYXRjaElmU2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGUFJSZWcgdmFsdWVBc0ZQUiwgRlBSUmVn
IHRlbXBGUFIsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBWYXJpYW50
PEpTR2xvYmFsT2JqZWN0KiwgR1BSUmVnPiBnbG9iYWxPYmplY3QsIGJvb2wgaW52ZXJ0KQogewog
ICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgc3RydWN0dXJlOgog
ICAgIC8vIGlmICh2YWx1ZSBpcyBjZWxsKSB7CkBAIC04MjksNyArODI5LDEwIEBAIEFzc2VtYmx5
SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXIKICAgICAgICAgSnVtcExpc3QgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkOwogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQuYXBwZW5kKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSkpOwogICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSwgdmFsdWUucGF5bG9h
ZEdQUigpLCBzY3JhdGNoLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaElm
U2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8SlNHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKFdURjo6Z2V0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2Jq
ZWN0KSksIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmUoV1RGOjpnZXQ8R1BSUmVnPihnbG9iYWxPYmplY3Qp
LCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOwogICAgICAgICBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaElm
U2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKICAgICAgICAgLy8gV2UgYWN0
IGxpa2Ugd2UgYXJlICJ1bmRlZmluZWQiIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI3Nzg4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJUYWdSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiVHlw
ZW9mVHlwZS5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE4OTYsMTIgKzE4OTcsMTIgQEAgcHVibGljOgogICAgICAg
ICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgfQogCi0gICAgSnVtcExpc3QgYnJhbmNo
SWZWYWx1ZShWTSYsIEpTVmFsdWVSZWdzLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJ
ZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnLCBGUFJSZWcsIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9iamVjdCosIGJvb2wg
bmVnYXRlUmVzdWx0KTsKLSAgICBKdW1wTGlzdCBicmFuY2hJZlRydXRoeShWTSYgdm0sIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHNjcmF0Y2hGUFIwLCBGUFJSZWcgc2NyYXRj
aEZQUjEsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQorICAgIEp1bXBMaXN0IGJyYW5jaElmVmFsdWUoVk0mLCBKU1Zh
bHVlUmVncywgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIEZQUlJlZywgRlBSUmVnLCBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgVmFyaWFudDxKU0dsb2JhbE9iamVjdCosIEdQUlJlZz4sIGJvb2wg
bmVnYXRlUmVzdWx0KTsKKyAgICBKdW1wTGlzdCBicmFuY2hJZlRydXRoeShWTSYgdm0sIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHNjcmF0Y2hGUFIwLCBGUFJSZWcgc2NyYXRj
aEZQUjEsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBWYXJpYW50PEpT
R2xvYmFsT2JqZWN0KiwgR1BSUmVnPiBnbG9iYWxPYmplY3QpCiAgICAgewogICAgICAgICByZXR1
cm4gYnJhbmNoSWZWYWx1ZSh2bSwgdmFsdWUsIHNjcmF0Y2gsIHNjcmF0Y2hJZlNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgc2NyYXRjaEZQUjAsIHNjcmF0Y2hGUFIxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgZmFsc2UpOwogICAgIH0K
LSAgICBKdW1wTGlzdCBicmFuY2hJZkZhbHNleShWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBH
UFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgRlBSUmVnIHNjcmF0Y2hGUFIwLCBGUFJSZWcgc2NyYXRjaEZQUjEsIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIEp1bXBMaXN0IGJyYW5jaElmRmFsc2V5KFZNJiB2bSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBGUFJSZWcgc2NyYXRjaEZQUjAsIEZQUlJlZyBzY3JhdGNoRlBSMSwgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIFZhcmlhbnQ8SlNHbG9iYWxPYmpl
Y3QqLCBHUFJSZWc+IGdsb2JhbE9iamVjdCkKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2hJ
ZlZhbHVlKHZtLCB2YWx1ZSwgc2NyYXRjaCwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBzY3JhdGNoRlBSMCwgc2NyYXRjaEZQUjEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCB0cnVlKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzc4ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MSw3ICs1OTEsOSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eSkKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfcHV0X3RvX3Njb3BlKQogCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9p
dGVyYXRvcl9vcGVuKQpAQCAtNjI2LDcgKzYyOCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19lbnVtZXJh
YmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSkKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCisjZW5kaWYK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoY2hlY2tfdGR6KQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUCh0b19wcm9wZXJ0eV9rZXkpCiAgICAgICAgIGRlZmF1bHQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3Nzg4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworI2VuZGlmCiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBT
bG93UGF0aEZ1bmN0aW9uKTsKQEAgLTc5OSwxMiArODAxLDQ1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJh
dG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBz
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXRf
aGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJik7Ci0jZW5k
aWYKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtOb3RVc2VkRm9yR2V0RnJv
bVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBHbG9iYWxWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0
aGFuIHVzZSBhIHRodW5rLgorICAgICAgICAgICAgLy8gTG9jYWxDbG9zdXJlVmFyIGFuZCBNb2R1
bGVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9nZXRfZnJvbV9z
Y29wZS4KKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gTG9jYWxDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcjsK
KyAgICAgICAgfQorCisjZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBcCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYp
OworICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IpCisjdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKworICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtOb3RVc2VkRm9yUmVzb2x2ZVNjb3BlKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBNb2R1bGVW
YXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBh
IHRodW5rLgorICAgICAgICAgICAgLy8gTG9jYWxDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3Qg
dXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KKyAgICAgICAgICAgIHJldHVy
biByZXNvbHZlVHlwZSA9PSBMb2NhbENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyOworICAgICAgICB9CisKKyNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYpOworICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUikKKyN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJ
c0ZhbHNleUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CisKKyNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgICAgICBKdW1wIGdldFNsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjc3ODgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQ3LDE1ICs0NDcsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0
IEluc3RydWN0aQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJl
Z1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisjZWxzZQorICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QwKSwgdGFyZ2V0KTsKKyNlbmRpZgogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc0Zh
bHNleUdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQg
YmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KKyAgICBKSVQgaml0KHZtKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsK
KyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGds
b2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgYXV0byBpc0ZhbHNleSA9IGppdC5icmFuY2hJZkZhbHNleSh2bSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICBKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworCisgICAg
aXNGYWxzZXkubGluaygmaml0KTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKKworICAgIGRvbmUubGluaygmaml0KTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiQmFzZWxpbmU6IHZhbHVlSXNmYWxzZXkiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7CkBAIC01NjgsMTMgKzYwNyw1MyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IHRydWU7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworI2Vsc2UKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CisjZW5kaWYKK30K
KworI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mIHZtKQoreworICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGF1dG8gaXNUcnV0aHkgPSBqaXQuYnJhbmNo
SWZUcnV0aHkodm0sIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9i
amVjdEdQUik7CisgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgSnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKKworICAgIGlzVHJ1dGh5LmxpbmsoJmppdCk7CisgICAgaml0
Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisKKyAgICBkb25lLmxpbmsoJmppdCk7Cisg
ICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiB2YWx1ZUlzZmFs
c2V5Iik7CiB9CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklU
OjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpA
QCAtMTQ1OSw3ICsxNTM4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0
aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhbmRsZVRyYXBzKSk7
Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNl
c3NhcnkpOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIo
cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxl
ci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfY2hlY2tfdHJhcHNfaGFu
ZGxlciIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNzc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODU5LDYgKzI4NTksNjAgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFz
ZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CisgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOworICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUp
LlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29w
ZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CisgICAgLy8gUHJveHkgY2Fu
IHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5z
Y29wYWJsZXMuCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKKworICAgIC8v
IE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBp
biBERkcuCisgICAgQVNTRVJUKHJlc29sdmVUeXBlICE9IE1vZHVsZVZhcik7CisKKyAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgaWYgKHJlc29sdmVkU2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxP
YmplY3QqPihyZXNvbHZlZFNjb3BlKTsKKyAgICAgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBn
bG9iYWxPYmplY3QtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnQpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICAgICAgaWYg
KGhhc1Byb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9yZXNvbHZl
VHlwZSA9IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbFByb3BlcnR5OworICAgICAgICAgICAg
ICAgIG1ldGFkYXRhLm1fZ2xvYmFsT2JqZWN0LnNldCh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmVkU2NvcGUtPmlzR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KCkpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KiBn
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQqPihyZXNvbHZlZFNjb3BlKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSA9IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcjsKKyAgICAgICAgICAg
IG1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LnNldCh2bSwgY29kZUJsb2NrLCBn
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc29sdmVkU2NvcGUpOworfQorI2VuZGlmCisKIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMs
OSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNo
YXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUlu
ZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25T
d2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBr
ZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7
CisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKKyNlbmRpZgogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1Zh
bHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODksNiArMTU4OSw3IEBAIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZl
U2NvcGU+KCk7CkBAIC0xNjkyLDYgKzE2OTMsMjU2IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgYnJlYWs7CiAgICAgfQogfQorI2Vsc2UgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCisKK3ZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7CisKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKworICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5t
X2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRUaHVuazsKKyAgICAgICAg
cHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFU
YWJsZSgmbWV0YWRhdGEpOworCisjZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKKyAgICAg
ICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyAgICAgICAg
ICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAg
ICAgfTsKKyN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICAgICAgaml0VGh1
bmsgPSB2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKTsKKworICAgICAgICBl
bWl0TmFrZWROZWFyQ2FsbChqaXRUaHVuay5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAg
IH0KKworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVu
ayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQoreworICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgdXNpbmcgTWV0YWRhdGEgPSBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQ
UiA9IHJlZ1Q3OyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUNjsgLy8gaW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KKyAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OworCisgICAgVU5VU0VEX1BBUkFN
KGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CisKKyAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSks
IHJlZ1QzKTsKKyAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRhR1BSKTsKKworICAgIEp1bXBMaXN0
IHNsb3dDYXNlOworCisgICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CisgICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICB9CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH07CisKKyAgICBh
dXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykgeworICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpOworICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdUMCk7CisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fbG9jYWxTY29wZURl
cHRoKSksIHJlZ1QxKTsKKworICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKKyAgICAgICAg
SnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKKyAgICAgICAgeworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAg
ICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgfTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2Nv
cGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgorICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGdsb2Jh
bE9iamVjdEdQUik7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JK
RUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpKSwgcmVn
VDEpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIG1vdmUoZ2xvYmFsT2JqZWN0
R1BSLCByZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2UgR2xvYmFsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CisgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgLy8gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkgZm9yIEdsb2JhbFZhciosCisgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxW
YXIqLgorICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOworICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zm
c2V0T2ZHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgICAgIGVtaXRSZXNvbHZl
Q2xvc3VyZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRHluYW1pYzoKKyAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqdW1wKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9jYWxDbG9z
dXJlVmFyOgorICAgICAgICBjYXNlIE1vZHVsZVZhcjoKKyAgICAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHk6CisgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisKKyAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAgZW1pdENvZGUobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKKworICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgorICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7CisgICAgICAgIGxvYWQzMihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUp
KSwgcmVnVDApOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKworICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsK
KyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhp
Y2FsVmFyLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29k
ZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7
CisgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dGhpcywgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAg
YXV0byBzbG93Q2FzZUhhbmRsZXIgPSB2bSgpLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIoc2xv
d19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlLCBDb2RlTG9jYXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCB0aHVua05hbWUpOworfQorCisjZGVmaW5lIERFRklORV9SRVNPTFZFX1NDT1BFX0dF
TkVSQVRPUihyZXNvbHZlVHlwZSkgXAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2
bSkgXAorICAgIHsgXAorICAgICAgICBpZiBjb25zdGV4cHIgKHRodW5rTm90VXNlZEZvclJlc29s
dmVTY29wZShyZXNvbHZlVHlwZSkpIHsgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgXAorICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAorICAgICAgICB9IFwKKyAg
ICAgICAgSklUIGppdCh2bSk7IFwKKyAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsocmVzb2x2ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNy
ZXNvbHZlVHlwZSk7IFwKKyAgICB9CitGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09M
VkVfU0NPUEVfR0VORVJBVE9SKQorI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UgorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9y
ZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorICAgIEpJVCBqaXQodm0pOworCisgICAgLy8gVGhlIGZhc3QgcGF0aCBh
bHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBq
aXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnB1
c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgaml0LnN0
b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykpOworCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIg
PSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBh
cmd1bWVudEdQUjA7CisgICAgY29uc3RleHByIEdQUlJlZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3Vt
ZW50R1BSMTsKKworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9j
a0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQu
YWRkUHRyKGJ5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7CisKKyAgICBqaXQuc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0RnJvbVNjb3BlKT4oZ2xvYmFsT2JqZWN0
R1BSLCBpbnN0cnVjdGlvbkdQUik7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
KyAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVt
cCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0p
OworCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNl
bGlmIENQVShBUk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICBqaXQu
cmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVy
YXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uUmVzb2x2ZVNjb3Bl
Rm9yQmFzZWxpbmUpKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdD
VElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3Ip
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVs
KGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcmVz
b2x2ZV9zY29wZSIpOworfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2
b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
LCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewpAQCAtMTcxOSw2ICsxOTcwLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVy
YW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0KIAorI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC0xODQyLDI4ICsyMDk0LDIz
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOworCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0
aW9uKTsKLSNlbHNlCit9CisKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RnJvbVNjb3BlPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVU
eXBlKCk7CisKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2Rl
T2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVj
dGlvbik7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1l
bnRHUFIyOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworCisgICAgaWYgKHJlc29sdmVUeXBlID09IEds
b2JhbFZhcikgeworICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKKyAgICAgICAgZW1pdEdldFZh
ckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDAp
OworICAgIH0gZWxzZSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gaml0VGh1bmsgPSB2bS5nZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKTsK
KyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldElu
TWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOwogCi0gICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOworI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUp
IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKKyAgICAgICAgc3Rh
dGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyAgICAgICAgICAgIEZP
Ul9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCisgICAgICAgIH07
CisjdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChqaXRUaHVuay5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOworICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9
CiAKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK3sKKyAgICAvLyBUaGUgdGh1
bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTElu
dCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJv
dXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25n
aW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2Nv
cGU6Ok1ldGFkYXRhOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisKKyAgICB0YWdSZXR1cm5B
ZGRyZXNzKCk7CisKKyAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgcmVnVDMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZk1ldGFkYXRhVGFibGUoKSksIHJlZ1QzKTsKKyAgICBhZGRQdHIocmVnVDMsIG1ldGFkYXRh
R1BSKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlOworCisgICAgYXV0byBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBpbnQzMl90IG1ldGFkYXRhU3Ry
dWN0dXJlT2Zmc2V0KSB7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgbWV0
YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpLCByZWdUMSk7CisgICAgICAgIG1vdmUoc2NvcGVHUFIsIHJl
Z1QwKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEp
KTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OworICAgIH07CisKKyAgICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZz
ZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9OworICAg
IAorICAgIGF1dG8gZW1pdEdldFZhckZyb21Qb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQs
IEdQUlJlZyByZWcpIHsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVy
YW5kKSwgcmVnKTsKKyAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7CisgICAgfTsKKworICAgIGF1
dG8gZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwg
R1BSUmVnIHJlZykgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJh
bmQpLCByZWcpOworICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKKyAgICB9OworCisgICAgYXV0
byBlbWl0R2V0Q2xvc3VyZVZhciA9IFsmXSAoR1BSUmVnIHNjb3BlR1BSLCBHUFJSZWcgb3BlcmFu
ZEdQUikgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIp
KTsKKyAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBvcGVyYW5kR1BSKTsKKyAgICAg
ICAgYWRkUHRyKHNjb3BlR1BSLCBvcGVyYW5kR1BSKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KG9wZXJhbmRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwg
cmVnVDApOworICAgIH07CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fc3RydWN0dXJlKSk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorCisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IGJhc2UgPSByZWdUMDsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgcmVzdWx0ID0gcmVn
VDA7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG9mZnNldCA9IHJlZ1QxOworICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisKKyAgICAgICAgICAgIGpp
dEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgeworICAgICAg
ICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBy
ZWdUMyk7CisgICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgcmVnVDMpOworICAgICAgICAgICAgfSkpOworCisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9vcGVyYW5kKSksIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpIHsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OworICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGlu
ZSk7CisgICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7CisgICAgICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2xvYmFsVmFyOgorICAgICAgICBj
YXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpCisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
T0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKE9CSkVDVF9PRkZT
RVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KKyAgICAgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFu
ZCkpLCByZWdUMyk7CisgICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZUdQUiwgcmVn
VDMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRHluYW1pYzoKKyAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTG9jYWxDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIE1vZHVsZVZhcjoKKyAgICAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
eworICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X2dldFB1dEluZm8pKSwgcmVnVDApOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0
SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorCisg
ICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlLCBmYWxzZSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKworICAgICAg
ICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDb2RlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisKKyAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKKyAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOworICAgICAgICBsb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2dldFB1dElu
Zm8pKSwgcmVnVDApOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlw
ZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorCisgICAgICAgIEp1
bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3Bl
cnR5LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1
ZSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqdW1wKCkpOworCisgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzdGF0aWNfYXNzZXJ0KFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOworICAgIHN0b3JlNjQocmVnVDAsIEFkZHJl
c3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOwor
CisgICAgcmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBhdXRvIHNsb3dDYXNl
SGFuZGxlciA9IHZtKCkuaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1YihzbG93X29wX2dldF9mcm9t
X3Njb3BlR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlLCBDb2RlTG9j
YXRpb25MYWJlbChzbG93Q2FzZUhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCB0aHVu
a05hbWUpOworfQorCisjZGVmaW5lIERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVz
b2x2ZVR5cGUpIFwKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpv
cF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCisgICAg
eyBcCisgICAgICAgIGlmIGNvbnN0ZXhwciAodGh1bmtOb3RVc2VkRm9yR2V0RnJvbVNjb3BlKHJl
c29sdmVUeXBlKSkgeyBcCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyBcCisgICAgICAgICAgICByZXR1cm4geyB9OyBcCisgICAgICAgIH0gXAorICAgICAgICBKSVQg
aml0KHZtKTsgXAorICAgICAgICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayhyZXNvbHZlVHlwZSwgIkJhc2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlw
ZSk7IFwKKyAgICB9CitGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUikKKyN1bmRlZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9t
X3Njb3BlR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCkBAIC0xODc1LDExICsyMzM3LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSkkKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lz
dGVyczo6ZWJwKTsKICNlbGlmIENQVShBUk02NCkKLSAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygp
OwogICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsK
ICNlbmRpZgogCi0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3Vt
ZW50R1BSMjsKKyAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMyKGJ5dGVj
b2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpKTsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRH
UFIzOwpAQCAtMTg5MSwxMCArMjM1NCwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJCiAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVC
bG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7
CiAgICAgaml0LmFkZFB0cihieXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogCisg
ICAgaml0Lm1vdmUobWV0YWRhdGFHUFIsIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsgLy8g
UHJlc2VydmUgbWV0YWRhdGEgaW4gYSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXIuCiAgICAgaml0LnNl
dHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldEZyb21TY29wZSk+KGdsb2JhbE9iamVj
dEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7
Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXRO
b25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CisgICAgQ2FsbCBvcGVyYXRpb24gPSBqaXQu
Y2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuZW1p
dE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKworICAgIGppdC5zdG9yZTY0KHJlZ1Qw
LCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwogCiAjaWYgQ1BVKFg4Nl82
NCkKICAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAgLTE5MDMsMTAgKzIzNzAsMTQg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogI2VuZGlmCiAgICAg
aml0LnJldCgpOwogCisgICAgZXhjZXB0aW9uQ2hlY2subGluaygmaml0KTsKKyAgICBqaXQubW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIpOworICAgIEp1bXAganVtcFRvSGFuZGxlciA9IGppdC5qdW1wKCk7CisKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24sIEZ1bmN0aW9uUHRy
PE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0RnJvbVNjb3BlKSk7Ci0gICAgYXV0byBoYW5k
bGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVz
QW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1
YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0
aW9uR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVM
b2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6
IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKQEAgLTIxMjYsNyArMjU5Nyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSkkKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25QdXRU
b1Njb3BlKSk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1
Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xv
Y2tpbmdOZWNlc3NhcnkpOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGlu
Z0NUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRv
cik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFi
ZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9w
dXRfdG9fc2NvcGUiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5jcHAJKHJldmlzaW9uIDI3Nzg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDIyICsxNDEsMTcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHJldHVybiBlbnRyeS5pdGVyYXRv
ci0+dmFsdWU7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1
bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgcmV0dXJuIGV4aXN0aW5nQ1RJU3R1YihnZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2Fy
eSk7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtz
OjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNl
c3NhcnlUYWcpCi17CiAgICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3IgZW50cnkgPSBtX2N0aVN0dWJN
YXAuZmluZChnZW5lcmF0b3IpOwogICAgIGlmIChlbnRyeSA9PSBtX2N0aVN0dWJNYXAuZW5kKCkp
CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+KCk7
Ci0gICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKKyAgICBhdXRvIHRodW5rID0gZW50cnktPnZhbHVl
OworICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rKTsKKyAgICByZXR1cm4gdGh1bms7CiB9CiAKLSNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKFZNJiB2bSwgU2xv
d1BhdGhGdW5jdGlvbiBzbG93UGF0aEZ1bmN0aW9uKQogewogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CkBAIC0zNTIsNyArMzQ3LDYgQEAgdm9pZCBKSVRUaHVua3M6OnByZWluaXRpYWxp
emVDVElUaHVua3MoVgogICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSho
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOwogICAgIElOSVRfQkFTRUxJTkVfU0xP
V19QQVRIX0NBTExfUk9VVElORShoYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CiAgICAgSU5J
VF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSk7
Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHJlc29sdmVfc2NvcGUp
OwogICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShjaGVja190ZHopOwog
ICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORSh0b19wcm9wZXJ0eV9rZXkp
OwogCkBAIC0zNzEsMTggKzM2NSwzMyBAQCB2b2lkIEpJVFRodW5rczo6cHJlaW5pdGlhbGl6ZUNU
SVRodW5rcyhWCiAgICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29wX3B1dF9ieV92YWxfcHJlcGFy
ZUNhbGxHZW5lcmF0b3IpOwogICAgIGN0aVN0dWIodm0sIEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKICAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3df
b3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKTsKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7CiAKICAgICBjdGlTdHViKHZtLCBKSVQ6Om9wX2NoZWNr
X3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IpOwogICAgIGN0aVN0dWIodm0sIEpJVDo6b3BfZW50ZXJf
aGFuZGxlckdlbmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwgSklUOjpvcF9yZXRfaGFuZGxlckdl
bmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwgSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9y
KTsKKworI2RlZmluZSBJTklUX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAorICAgIGlmIGNvbnN0ZXhwciAoIUpJVDo6dGh1bmtOb3RVc2VkRm9yR2V0RnJvbVNjb3BlKHJl
c29sdmVUeXBlKSkgXAorICAgICAgICBjdGlTdHViKHZtLCBKSVQ6Om9wX2dldF9mcm9tX3Njb3Bl
XyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcik7CisgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKElO
SVRfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQorI3VuZGVmIElOSVRfR0VUX0ZST01fU0NPUEVf
R0VORVJBVE9SCisKKyNkZWZpbmUgSU5JVF9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZl
VHlwZSkgXAorICAgIGlmIGNvbnN0ZXhwciAoIUpJVDo6dGh1bmtOb3RVc2VkRm9yUmVzb2x2ZVNj
b3BlKHJlc29sdmVUeXBlKSkgXAorICAgICAgICBjdGlTdHViKHZtLCBKSVQ6Om9wX3Jlc29sdmVf
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKTsKKyAgICBGT1JfRUFDSF9SRVNPTFZFX1RZ
UEUoSU5JVF9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRlZiBJTklUX1JFU09MVkVfU0NP
UEVfR0VORVJBVE9SCisKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0
b3IpOworICAgIGN0aVN0dWIodm0sIEpJVDo6dmFsdWVJc1RydXRoeUdlbmVyYXRvcik7CiAjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBjdGlTdHViKHZtLCBsaW5rQ2Fs
bFRodW5rR2VuZXJhdG9yKTsKICAgICBjdGlTdHViKHZtLCBhcml0eUZpeHVwR2VuZXJhdG9yKTsK
IH0KIAotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHJldmlzaW9uIDI3Nzg4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDkgKzYzLDggQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVu
a1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSYpOwogCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTdHViKFZNJiwgVGh1bmtHZW5lcmF0
b3IpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdD
VElTdHViKFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNz
YXJ5VGFnKTsKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvcik7
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTbG93UGF0aEZ1
bmN0aW9uU3R1YihWTSYsIFNsb3dQYXRoRnVuY3Rpb24pOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDI3Nzg4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsNyArODQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5q
aXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVy
ID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oc2xvd1Bh
dGhGdW5jdGlvbikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw4ICs5MCw3IEBA
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG8KICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5r
KTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICBSRUxFQVNFX0FT
U0VSVChoYW5kbGVyKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdD
VElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhj
b250aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwogfQpA
QCAtMTMyLDcgKzEzMSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
Y2gKICNlbmRpZgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAgIHBhdGNoQnVmZmVyLmxpbmso
aGFuZGxlRXhjZXB0aW9uLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5qaXRTdHVicy0+ZXhpc3RpbmdD
VElTdHViKGhhbmRsZXJHZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSkucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIoaGFuZGxlckdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQ2hlY2tFeGNlcHRpb24iKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0UHV0SW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldFB1dEluZm8uaAkocmV2aXNp
b24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0UHV0SW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArMzksMjEgQEAgZW51bSBSZXNvbHZlTW9kZSB7CiAg
ICAgRG9Ob3RUaHJvd0lmTm90Rm91bmQKIH07CiAKKyNkZWZpbmUgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKHYpIFwKKyAgICB2KEdsb2JhbFByb3BlcnR5KSBcCisgICAgdihHbG9iYWxWYXIpIFwKKyAg
ICB2KEdsb2JhbExleGljYWxWYXIpIFwKKyAgICB2KENsb3N1cmVWYXIpIFwKKyAgICB2KExvY2Fs
Q2xvc3VyZVZhcikgXAorICAgIHYoTW9kdWxlVmFyKSBcCisgICAgdihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpIFwKKyAgICB2KEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpIFwKKyAgICB2KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSBc
CisgICAgdihDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgXAorICAgIHYoVW5yZXNv
bHZlZFByb3BlcnR5KSBcCisgICAgdihVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSBcCisgICAgdihEeW5hbWljKQorCiBlbnVtIFJlc29sdmVUeXBlIDogdW5zaWduZWQg
ewogICAgIC8vIExleGljYWwgc2NvcGUgZ3VhcmFudGVlZCBhIGNlcnRhaW4gdHlwZSBvZiB2YXJp
YWJsZSBhY2Nlc3MuCiAgICAgR2xvYmFsUHJvcGVydHksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3Nzg4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg4Myw2ICs4ODMsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBy
ZWdFeHBHbG9iYWxEYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFs
T2JqZWN0LCBtX3JlZ0V4cEdsb2JhbERhdGEpOyB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mVk0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdm0p
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9nbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2goKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCk7IH0KIAogI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQogICAgIEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9s
bGVyJiBpbnNwZWN0b3JDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gKm1faW5zcGVjdG9yQ29u
dHJvbGxlci5nZXQoKTsgfQo=
</data>
<flag name="commit-queue"
          id="450505"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429342</attachid>
            <date>2021-05-21 14:27:06 -0700</date>
            <delta_ts>2021-05-21 16:53:33 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226107.patch</filename>
            <type>text/plain</type>
            <size>57943</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3ODgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDIxLTA1LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWR1Y2UgQmFzZWxpbmUgSklUIGVtaXR0ZWQgY29kZSBzaXplIGZvciBvcF9qZmFsc2UsIG9wX2p0
cnVlLCBvcF9nZXRfZnJvbV9zY29wZSwgb3BfcmVzb2x2ZV9zY29wZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjEwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVz
IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKS4K
KyAgICAgICAgZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yKSB3YXMgbm90IGJlaW5nIHVz
ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiAgU28sIHdlJ2xsCisgICAgICAgIGp1c3QgbWFrZSBpdCBu
b24tbG9ja2luZy4KKworICAgICAgICBCZW5jaG1hcmtpbmcgd2l0aCBKZXRTdHJlYW0yIGFuZCBT
cGVlZG9tZXRlcjIgb24gTTEgTWFjIHNob3dzIHRoYXQgcGVyZm9ybWFuY2UgaXMKKyAgICAgICAg
bmV1dHJhbC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgQmFzZWxpbmUgSklUIGVtaXR0
ZWQgY29kZSBzaWRlIG9uIGEgcnVuIG9mIEpldFN0cmVhbTIgQ0xJIGJ5CisgICAgICAgIGFub3Ro
ZXIgfjYuNk06CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAgICAgICAgICAgICAg
ICAgTmV3ICAgICAgICAgICAgICAgICAgICAgIERpZmYKKworICAgICAgICAgICBCYXNlbGluZUpJ
VDogNjQ5NTUxMTYgKDYxLjk0NjAyNiBNQikgIDU3OTkxNzA0ICg1NS4zMDUxOTkgTUIpICAwLjg5
eCAocmVkdWN0aW9uKQorICAgICAgICAgICAgICAgICAgIERGRzogMzYzODIwMTIgKDM0LjY5NjU5
MCBNQikgIDM2NTQwNjUyICgzNC44NDc4ODEgTUIpICAxLjAweAorICAgICAgICAgICAgICAgICBU
aHVuazogMjMyMTc2OTIgKDIyLjE0MjExNyBNQikgIDIzMTE1ODUyICgyMi4wNDQ5OTQgTUIpICAx
LjAweAorICAgICAgICAgICBJbmxpbmVDYWNoZTogMjIyMjgxNDAgKDIxLjE5ODQwNiBNQikgIDIy
MjYyNTcyICgyMS4yMzEyNDMgTUIpICAxLjAweAorICAgICAgICAgICAgICAgICAgIEZUTDogNjAy
NTMyMCAoNS43NDYxOTMgTUIpICAgIDYxNjQzMzIgKDUuODc4NzY1IE1CKSAgICAxLjAyeAorICAg
ICAgICAgICAgICAgICAgV2FzbTogMjMyNzYwNCAoMi4yMTk3NzYgTUIpICAgIDIyOTcwMzYgKDIu
MTkwNjI0IE1CKSAgICAwLjk5eAorICAgICAgICAgICAgICAgWWFyckpJVDogMTU0NzE3MiAoMS40
NzU0OTggTUIpICAgIDE1MjI1ODQgKDEuNDUyMDQ5IE1CKSAgICAwLjk4eAorICAgICAgICAgICAg
ICAgIENTU0pJVDogMCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgIFVuY2F0ZWdv
cml6ZWQ6IDAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKyAgICAgICAgQ3VtdWxhdGl2ZSBk
aWZmIHNpbmNlIHRoZSBzdGFydCBvZiB0aGlzIGVmZm9ydCB0byByZWR1Y2UgQmFzZWxpbmUgSklU
IGNvZGUgc2l6ZToKKworICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgICAgICAgICAg
ICAgICAgIE5ldyAgICAgICAgICAgICAgICAgICAgICBEaWZmCisKKyAgICAgICAgICAgQmFzZWxp
bmVKSVQ6IDg5MDg5OTY0ICg4NC45NjI4MTEgTUIpICA1Nzk5MTcwNCAoNTUuMzA1MTk5IE1CKSAg
MC42NXggKHJlZHVjdGlvbikKKyAgICAgICAgICAgICAgICAgICBERkc6IDM5MTE3MzYwICgzNy4z
MDUyMjIgTUIpICAzNjU0MDY1MiAoMzQuODQ3ODgxIE1CKSAgMC45M3ggKHJlZHVjdGlvbikKKyAg
ICAgICAgICAgICAgICAgVGh1bms6IDIzMjMwOTY4ICgyMi4xNTQ3NzggTUIpICAyMzExNTg1MiAo
MjIuMDQ0OTk0IE1CKSAgMS4wMHgKKyAgICAgICAgICAgSW5saW5lQ2FjaGU6IDIyMDI3NDE2ICgy
MS4wMDY5ODEgTUIpICAyMjI2MjU3MiAoMjEuMjMxMjQzIE1CKSAgMS4wMXgKKyAgICAgICAgICAg
ICAgICAgICBGVEw6IDY1NzU3NzIgKDYuMjcxMTQ1IE1CKSAgICA2MTY0MzMyICg1Ljg3ODc2NSBN
QikgICAgMC45NHggKHJlZHVjdGlvbikKKyAgICAgICAgICAgICAgICAgIFdhc206IDIzMDI3MjQg
KDIuMTk2MDQ5IE1CKSAgICAyMjk3MDM2ICgyLjE5MDYyNCBNQikgICAgMS4wMHgKKyAgICAgICAg
ICAgICAgIFlhcnJKSVQ6IDE1Mzg5NTYgKDEuNDY3NjYzIE1CKSAgICAxNTIyNTg0ICgxLjQ1MjA0
OSBNQikgICAgMC45OXgKKyAgICAgICAgICAgICAgICBDU1NKSVQ6IDAgICAgICAgICAgICAgICAg
ICAgICAgICAwCisgICAgICAgICBVbmNhdGVnb3JpemVkOiAwICAgICAgICAgICAgICAgICAgICAg
ICAgMAorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpvZmZzZXRPZk1ldGFkYXRhVGFibGUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmVmFsdWUpOgorICAg
ICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpicmFuY2hJZlRydXRoeSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZGYWxzZXkpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNl
KToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1
dGh5R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9jaGVja190cmFwc19oYW5kbGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJh
dGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3Jlc29s
dmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToK
KyAgICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAg
ICAoSlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQv
SklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OnByZWluaXRpYWxpemVDVElUaHVua3MpOgorICAg
ICAgICAqIGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqaXQvU2xvd1BhdGhDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUU2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKToKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6cG9wVGh1bmtTdGFja1By
ZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0dldFB1dEluZm8uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCk6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpOgorCiAy
MDIxLTA1LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRy
b2R1Y2luZyBKSVRUaHVua3M6OnByZWluaXRpYWxpemVDVElUaHVua3MoKS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI3Nzg4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtODkyLDYgKzg5MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8TWV0YWRhdGEqPihtX21ldGFkYXRhLT5nZXQob3Bjb2RlSUQpKVttZXRhZGF0YUlEXTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KKyAgICBwdHJkaWZmX3Qg
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKE1ldGFkYXRhKiBtZXRhZGF0YSkKKyAgICB7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1ldGFkYXRhKSAtIGJpdHdpc2VfY2FzdDx1
aW50OF90Kj4obWV0YWRhdGFUYWJsZSgpKTsKKyAgICB9CisKICAgICBzaXplX3QgbWV0YWRhdGFT
aXplSW5CeXRlcygpCiAgICAgewogICAgICAgICByZXR1cm4gbV91bmxpbmtlZENvZGUtPm1ldGFk
YXRhU2l6ZUluQnl0ZXMoKTsKQEAgLTkwMCw2ICs5MDYsNyBAQCBwdWJsaWM6CiAgICAgTWV0YWRh
dGFUYWJsZSogbWV0YWRhdGFUYWJsZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEuZ2V0KCk7IH0KICAg
ICBjb25zdCB2b2lkKiBpbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gbV9pbnN0cnVj
dGlvbnNSYXdQb2ludGVyOyB9CiAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbWV0YWRhdGEp
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2luc3RydWN0aW9uc1Jhd1Bv
aW50ZXIpOyB9CiAKICAgICBib29sIGxvb3BIaW50c0FyZUVsaWdpYmxlRm9yRnV6emluZ0Vhcmx5
UmV0dXJuKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHJldmlzaW9uIDI3Nzg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzk3LDcgKzc5Nyw3IEBAIHZv
aWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0Q29udmVydFZhbHVlVG8KICAgICBkb25lLmxpbmsodGhp
cyk7CiB9CiAKLUFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFu
Y2hJZlZhbHVlKFZNJiB2bSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBHUFJS
ZWcgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGUFJSZWcgdmFs
dWVBc0ZQUiwgRlBSUmVnIHRlbXBGUFIsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIGludmVydCkKK0Fzc2Vt
Ymx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZlZhbHVlKFZNJiB2
bSwgSlNWYWx1ZVJlZ3MgdmFsdWUsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgc2NyYXRjaElmU2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGUFJSZWcgdmFsdWVBc0ZQUiwgRlBSUmVn
IHRlbXBGUFIsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBWYXJpYW50
PEpTR2xvYmFsT2JqZWN0KiwgR1BSUmVnPiBnbG9iYWxPYmplY3QsIGJvb2wgaW52ZXJ0KQogewog
ICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgc3RydWN0dXJlOgog
ICAgIC8vIGlmICh2YWx1ZSBpcyBjZWxsKSB7CkBAIC04MjksNyArODI5LDEwIEBAIEFzc2VtYmx5
SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXIKICAgICAgICAgSnVtcExpc3QgaXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkOwogICAgICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQuYXBwZW5kKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3ModmFsdWUucGF5bG9hZEdQUigpLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKSkpOwogICAgICAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSwgdmFsdWUucGF5bG9h
ZEdQUigpLCBzY3JhdGNoLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpOwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaElm
U2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKTsKKyAgICAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8SlNHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKQorICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKFdURjo6Z2V0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2Jq
ZWN0KSksIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1vdmUoV1RGOjpnZXQ8R1BSUmVnPihnbG9iYWxPYmplY3Qp
LCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOwogICAgICAgICBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaElm
U2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKICAgICAgICAgLy8gV2UgYWN0
IGxpa2Ugd2UgYXJlICJ1bmRlZmluZWQiIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI3Nzg4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJUYWdSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiVHlw
ZW9mVHlwZS5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE4OTYsMTIgKzE4OTcsMTIgQEAgcHVibGljOgogICAgICAg
ICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CiAgICAgfQogCi0gICAgSnVtcExpc3QgYnJhbmNo
SWZWYWx1ZShWTSYsIEpTVmFsdWVSZWdzLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJ
ZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnLCBGUFJSZWcsIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9iamVjdCosIGJvb2wg
bmVnYXRlUmVzdWx0KTsKLSAgICBKdW1wTGlzdCBicmFuY2hJZlRydXRoeShWTSYgdm0sIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHNjcmF0Y2hGUFIwLCBGUFJSZWcgc2NyYXRj
aEZQUjEsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQorICAgIEp1bXBMaXN0IGJyYW5jaElmVmFsdWUoVk0mLCBKU1Zh
bHVlUmVncywgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIEZQUlJlZywgRlBSUmVnLCBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgVmFyaWFudDxKU0dsb2JhbE9iamVjdCosIEdQUlJlZz4sIGJvb2wg
bmVnYXRlUmVzdWx0KTsKKyAgICBKdW1wTGlzdCBicmFuY2hJZlRydXRoeShWTSYgdm0sIEpTVmFs
dWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHNjcmF0Y2hGUFIwLCBGUFJSZWcgc2NyYXRj
aEZQUjEsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBWYXJpYW50PEpT
R2xvYmFsT2JqZWN0KiwgR1BSUmVnPiBnbG9iYWxPYmplY3QpCiAgICAgewogICAgICAgICByZXR1
cm4gYnJhbmNoSWZWYWx1ZSh2bSwgdmFsdWUsIHNjcmF0Y2gsIHNjcmF0Y2hJZlNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgc2NyYXRjaEZQUjAsIHNjcmF0Y2hGUFIxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgZmFsc2UpOwogICAgIH0K
LSAgICBKdW1wTGlzdCBicmFuY2hJZkZhbHNleShWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBH
UFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgRlBSUmVnIHNjcmF0Y2hGUFIwLCBGUFJSZWcgc2NyYXRjaEZQUjEsIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIEp1bXBMaXN0IGJyYW5jaElmRmFsc2V5KFZNJiB2bSwgSlNWYWx1ZVJlZ3MgdmFs
dWUsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBGUFJSZWcgc2NyYXRjaEZQUjAsIEZQUlJlZyBzY3JhdGNoRlBSMSwgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIFZhcmlhbnQ8SlNHbG9iYWxPYmpl
Y3QqLCBHUFJSZWc+IGdsb2JhbE9iamVjdCkKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2hJ
ZlZhbHVlKHZtLCB2YWx1ZSwgc2NyYXRjaCwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBzY3JhdGNoRlBSMCwgc2NyYXRjaEZQUjEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0LCB0cnVlKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNzc4ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MSw3ICs1OTEsOSBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eSkKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKKyNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfcHV0X3RvX3Njb3BlKQogCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9p
dGVyYXRvcl9vcGVuKQpAQCAtNjI2LDcgKzYyOCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19lbnVtZXJh
YmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSkKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCisjZW5kaWYK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoY2hlY2tfdGR6KQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUCh0b19wcm9wZXJ0eV9rZXkpCiAgICAgICAgIGRlZmF1bHQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI3Nzg4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTczMyw3ICs3MzMsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKik7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworI2VuZGlmCiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2Fs
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBT
bG93UGF0aEZ1bmN0aW9uKTsKQEAgLTc5OSwxMiArODAxLDQ1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJh
dG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogCiAgICAgICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2NoZWNrX3RyYXBz
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAg
ICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXRf
aGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJik7Ci0jZW5k
aWYKKworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtOb3RVc2VkRm9yR2V0RnJv
bVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBHbG9iYWxWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0
aGFuIHVzZSBhIHRodW5rLgorICAgICAgICAgICAgLy8gTG9jYWxDbG9zdXJlVmFyIGFuZCBNb2R1
bGVWYXIgYmVjYXVzZSB3ZSBkb24ndCB1c2UgdGhlc2UgdHlwZXMgd2l0aCBvcF9nZXRfZnJvbV9z
Y29wZS4KKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gTG9jYWxDbG9zdXJlVmFyIHx8IHJlc29sdmVUeXBlID09IE1vZHVsZVZhcjsK
KyAgICAgICAgfQorCisjZGVmaW5lIERFQ0xBUkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBcCisgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYp
OworICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IpCisjdW5kZWYgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhSZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKTsKKworICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdGh1bmtOb3RVc2VkRm9yUmVzb2x2ZVNjb3BlKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBNb2R1bGVW
YXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBh
IHRodW5rLgorICAgICAgICAgICAgLy8gTG9jYWxDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3Qg
dXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KKyAgICAgICAgICAgIHJldHVy
biByZXNvbHZlVHlwZSA9PSBMb2NhbENsb3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gTW9kdWxl
VmFyOworICAgICAgICB9CisKKyNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UihyZXNvbHZlVHlwZSkgXAorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYpOworICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUikKKyN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVz
b2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisKKyAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJ
c0ZhbHNleUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CisKKyNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgICAgICBKdW1wIGdldFNsb3dDYXNl
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjc3ODgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQ3LDE1ICs0NDcsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0
IEluc3RydWN0aQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJl
Z1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9
IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQorICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisjZWxzZQorICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QwKSwgdGFyZ2V0KTsKKyNlbmRpZgogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc0Zh
bHNleUdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQg
YmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KKyAgICBKSVQgaml0KHZtKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSBy
ZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBqaXQudGFnUmV0dXJuQWRk
cmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsK
KyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGds
b2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgYXV0byBpc0ZhbHNleSA9IGppdC5icmFuY2hJZkZhbHNleSh2bSwgSlNWYWx1ZVJlZ3ModmFs
dWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICBKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworCisgICAg
aXNGYWxzZXkubGluaygmaml0KTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKKworICAgIGRvbmUubGluaygmaml0KTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiQmFzZWxpbmU6IHZhbHVlSXNmYWxzZXkiKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7CkBAIC01NjgsMTMgKzYwNyw1MyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisgICAgY29uc3RleHByIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRp
dGlvbiwgdmFsdWUpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IHRydWU7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVl
UmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOworI2Vsc2UKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CisjZW5kaWYKK30K
KworI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mIHZtKQoreworICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2bSk7CisKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0
cnVlOworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGF1dG8gaXNUcnV0aHkgPSBqaXQuYnJhbmNo
SWZUcnV0aHkodm0sIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9i
amVjdEdQUik7CisgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgSnVt
cCBkb25lID0gaml0Lmp1bXAoKTsKKworICAgIGlzVHJ1dGh5LmxpbmsoJmppdCk7CisgICAgaml0
Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisKKyAgICBkb25lLmxpbmsoJmppdCk7Cisg
ICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiB2YWx1ZUlzZmFs
c2V5Iik7CiB9CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklU
OjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpA
QCAtMTQ1OSw3ICsxNTM4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0
aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhbmRsZVRyYXBzKSk7
Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNl
c3NhcnkpOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIo
cG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxl
ci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfY2hlY2tfdHJhcHNfaGFu
ZGxlciIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNzc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODU5LDYgKzI4NTksNjAgQEAgSlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFz
ZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSW5zdHJ1Y3Rpb24qIHBjKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKworICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CisgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOworICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUp
LlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29w
ZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CisgICAgLy8gUHJveHkgY2Fu
IHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQncyBAdW5z
Y29wYWJsZXMuCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworCisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKKworICAgIC8v
IE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBp
biBERkcuCisgICAgQVNTRVJUKHJlc29sdmVUeXBlICE9IE1vZHVsZVZhcik7CisKKyAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgaWYgKHJlc29sdmVkU2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxP
YmplY3QqPihyZXNvbHZlZFNjb3BlKTsKKyAgICAgICAgICAgIGJvb2wgaGFzUHJvcGVydHkgPSBn
bG9iYWxPYmplY3QtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnQpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAgICAgICAgaWYg
KGhhc1Byb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9yZXNvbHZl
VHlwZSA9IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbFByb3BlcnR5OworICAgICAgICAgICAg
ICAgIG1ldGFkYXRhLm1fZ2xvYmFsT2JqZWN0LnNldCh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmVkU2NvcGUtPmlzR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KCkpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KiBn
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQqPihyZXNvbHZlZFNjb3BlKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgbWV0YWRhdGEubV9yZXNvbHZlVHlw
ZSA9IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcjsKKyAgICAgICAgICAg
IG1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LnNldCh2bSwgY29kZUJsb2NrLCBn
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc29sdmVkU2NvcGUpOworfQorI2VuZGlmCisKIEpTQ19ERUZJTkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMs
OSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGNo
YXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUlu
ZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25T
d2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVkSlNWYWx1ZSBr
ZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4KSk7
CisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKKyNlbmRpZgogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1Zh
bHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2b2lkLCAoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODksNiArMTU4OSw3IEBAIHZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZl
U2NvcGU+KCk7CkBAIC0xNjkyLDYgKzE2OTMsMjUzIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgYnJlYWs7CiAgICAgfQogfQorI2Vsc2UgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCisKK3ZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fcmVzb2x2ZVR5cGU7CisKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOworICAgIHVpbnQz
Ml90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOworICAgIEFTU0VS
VChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0g
cmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgIGNvbnN0
ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKworICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5t
X2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
cHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFU
YWJsZSgmbWV0YWRhdGEpOworCisjZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29s
dmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvciwKKyAgICAg
ICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsKKyAgICAgICAg
ICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyAgICAg
ICAgfTsKKyN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICB9CisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpn
ZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGNvbnN0
IGNoYXIqIHRodW5rTmFtZSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMg
ZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNh
dXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9i
amVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8v
IERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9i
amVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgorICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCisgICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhy
dSB0byBzbG93IHBhdGguCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBy
ZWdUNDsKKworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7CisgICAgdGFnUmV0
dXJuQWRkcmVzcygpOworCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6
b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgYWRkUHRyKHJlZ1QzLCBtZXRh
ZGF0YUdQUik7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKworICAgIGF1dG8gZW1pdFZhcklu
amVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBpZiAoIW5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoZ2xvYmFs
T2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQ
UiA9IHJlZ1Q0OworICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICAgICAgfQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdU
Myk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1Qz
LCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpKTsKKyAgICB9OworCisgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgbW92ZShzY29wZUdQUiwgcmVn
VDApOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0aCkpLCByZWdUMSk7CisKKyAgICAgICAgTGFiZWwg
bG9vcCA9IGxhYmVsKCk7CisgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH07CisKKyAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CisgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAg
ICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKS4KKyAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgbG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxM
ZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAg
ICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQUiwgcmVnVDApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXI6CisgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBs
b2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAorICAgICAgICAg
ICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KKyAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkp
LCByZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CisgICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIER5bmFtaWM6
CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBNb2R1bGVWYXI6
CisgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgorICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihN
ZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29s
dmVUeXBlKSk7CisgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhp
cyk7CisgICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhcik7CisKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9G
KE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSksIHJlZ1QwKTsKKworICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsUHJvcGVydHkpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAg
IHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOworICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXQoKTsKKworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZl
cjo6UHJvZmlsZTo6VGh1bmspOworICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5qaXRT
dHVicy0+ZXhpc3RpbmdDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7Cisg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nhc2VI
YW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworI2RlZmlu
ZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNvbHZlX3Njb3BlXyMjcmVz
b2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKKyAgICB7IFwKKyAgICAgICAgaWYgY29uc3Rl
eHByICh0aHVua05vdFVzZWRGb3JSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSB7IFwKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IFwKKyAgICAgICAgICAgIHJldHVy
biB7IH07IFwKKyAgICAgICAgfSBcCisgICAgICAgIEpJVCBqaXQodm0pOyBcCisgICAgICAgIHJl
dHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxp
bmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCisgICAgfQorRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRlZiBERUZJ
TkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0pCit7
CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdv
cmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICBKSVQgaml0KHZtKTsK
KworICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNz
LgorI2lmIENQVShYODZfNjQpCisgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOworI2Vs
aWYgQ1BVKEFSTTY0KQorICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlu
a1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OworICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7CisKKyAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CisgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2Rl
QmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBp
bnN0cnVjdGlvbkdQUik7CisgICAgaml0LmFkZFB0cihieXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1
Y3Rpb25HUFIpOworCisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEZyb21TY29wZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOworICAgIGppdC5w
cmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgQ2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChP
cGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuZW1pdE5vblBh
dGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKworI2lmIENQVShYODZfNjQpCisgICAgaml0LnBv
cChYODZSZWdpc3RlcnM6OmVicCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnBvcFBhaXIo
Q0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVn
aXN0ZXIpOworI2VuZGlmCisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwor
ICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKSk7CisgICAgYXV0byBoYW5kbGVy
ID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlv
bkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4o
KSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKIHsK
QEAgLTE3MTksNiArMTk2Nyw3IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFs
UmVnaXMKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7
CiB9CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3Bl
PigpOwpAQCAtMTg0MiwyOCArMjA5MSwyMzcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKKwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUobWV0YWRhdGEsIG9wZXJh
dGlvbkdldEZyb21TY29wZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0jZWxzZQorfQorCisjZWxzZSAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworCiAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKICAgICB1aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KTsKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29k
ZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBi
eXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1Q2OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKwor
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIpIHsKKyAgICAgICAgdWludHB0cl90KiBv
cGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3Bl
cmFuZCk7CisgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdHJkaWZm
X3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVCbG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZt
ZXRhZGF0YSk7CiAKLSAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisjZGVm
aW5lIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgb3BfZ2V0X2Zyb21fc2Nv
cGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yLAorICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtH
ZW5lcmF0b3IgZ2VuZXJhdG9yc1tdID0geworICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9U
WVBFKEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKKyAgICAgICAgfTsKKyN1bmRlZiBHRVRfRlJP
TV9TQ09QRV9HRU5FUkFUT1IKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEs
IHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwotI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YU9mZnNldCksIG1ldGFkYXRhR1BSKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CisgICAgICAg
IGVtaXROYWtlZE5lYXJDYWxsKHZtLmdldENUSVN0dWIoZ2VuZXJhdG9yc1tyZXNvbHZlVHlwZV0p
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgfQorICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayhSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQorewor
ICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3Jr
IHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBm
cm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1
bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBt
YXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgdXNpbmcgTWV0YWRhdGEg
PSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKwor
ICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJh
bWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGFkZFB0cihy
ZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAgICBhdXRv
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMy
X3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZzZXQpIHsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVjdHVyZU9mZnNldCksIHJlZ1QxKTsKKyAgICAgICAgbW92
ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMSkpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKSk7CisgICAgfTsKKworICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNr
ID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGlmICghbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmVnVDMpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRP
RihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNo
cG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkp
OworICAgIH07CisgICAgCisgICAgYXV0byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGlu
dDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJlZykgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcpOworICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKKyAg
ICB9OworCisgICAgYXV0byBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50
MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVnKSB7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRh
ZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7CisgICAgICAgIGxvYWRQdHIocmVnLCByZWcpOworICAg
IH07CisKKyAgICBhdXRvIGVtaXRHZXRDbG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIs
IEdQUlJlZyBvcGVyYW5kR1BSKSB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNp
emVvZihSZWdpc3RlcikpOworICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJh
bmRHUFIpOworICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIG9wZXJhbmRHUFIpOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkpLCByZWdUMCk7CisgICAgfTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsK
KyAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgorICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9zdHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFu
eXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCisKKyAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJlZ1QwOworICAgICAgICAgICAgY29uc3RleHByIEdQUlJl
ZyByZXN1bHQgPSByZWdUMDsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0g
cmVnVDE7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKwor
ICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAg
ICB9KSk7CisKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNU
X09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlm
IChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNl
dElzTm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgbmVnMzIob2Zm
c2V0KTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1
bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHbG9iYWxW
YXI6CisgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBpZiAo
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUlu
ZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50
ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAg
ICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgorICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRh
ZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1QzKTsKKyAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFy
KHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEeW5h
bWljOgorICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgTW9kdWxl
VmFyOgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7CisgICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCisKKyAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOworCisgICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAg
ZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsK
KworICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Cisg
ICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fZ2V0UHV0SW5mbykpLCByZWdUMCk7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
CisKKyAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAg
IGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHksIGZhbHNlKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAg
ICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisKKyAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyLCB0cnVlKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cywgdHJ1ZSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisKKyAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN0YXRp
Y19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7CisgICAgc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBt
X3Byb2ZpbGUpKSk7CisKKyAgICByZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAg
IGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9CisKKyNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BF
X0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihW
TSYgdm0pIFwKKyAgICB7IFwKKyAgICAgICAgaWYgY29uc3RleHByICh0aHVua05vdFVzZWRGb3JH
ZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSB7IFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IFwKKyAgICAgICAgICAgIHJldHVybiB7IH07IFwKKyAgICAgICAgfSBc
CisgICAgICAgIEpJVCBqaXQodm0pOyBcCisgICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKHJlc29sdmVUeXBlLCAiQmFzZWxpbmU6IG9wX2dldF9mcm9tX3Njb3Bl
XyIgI3Jlc29sdmVUeXBlKTsgXAorICAgIH0KK0ZPUl9FQUNIX1JFU09MVkVfVFlQRShERUZJTkVf
R0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQorI3VuZGVmIERFRklORV9HRVRfRlJPTV9TQ09QRV9H
RU5FUkFUT1IKKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIC8vIFRoZSB0aHVu
ayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50
IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKQEAgLTE4NzUsMTEgKzIzMzMsMTIgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogI2lmIENQVShYODZfNjQpCiAgICAgaml0
LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwogI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC50YWdS
ZXR1cm5BZGRyZXNzKCk7CiAgICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBs
aW5rUmVnaXN0ZXIpOwogI2VuZGlmCiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zm
c2V0R1BSID0gYXJndW1lbnRHUFIyOworICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2Nv
cGU6Ok1ldGFkYXRhOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CiAgICAgaml0
LnN0b3JlMzIoYnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpOwogCiAgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tH
UFIgPSBhcmd1bWVudEdQUjM7CkBAIC0xODkxLDEwICsyMzUwLDE0IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVC
bG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGlu
c3RydWN0aW9uR1BSKTsKICAgICBqaXQuYWRkUHRyKGJ5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVj
dGlvbkdQUik7CiAKKyAgICBqaXQubW92ZShtZXRhZGF0YUdQUiwgR1BSSW5mbzo6bnVtYmVyVGFn
UmVnaXN0ZXIpOyAvLyBQcmVzZXJ2ZSBtZXRhZGF0YSBpbiBhIGNhbGxlZSBzYXZlZCByZWdpc3Rl
ci4KICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0RnJvbVNjb3Bl
KT4oZ2xvYmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAgICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNh
bGwoT3BlcmF0aW9uUHRyVGFnKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXhjZXB0aW9uQ2hl
Y2sgPSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKyAgICBDYWxsIG9w
ZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBleGNlcHRpb25D
aGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOworCisgICAgaml0
LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5tb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAK
ICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTkw
MywxMCArMjM2NiwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
CiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAKKyAgICBleGNlcHRpb25DaGVjay5saW5rKCZqaXQp
OworICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgSnVtcCBqdW1wVG9IYW5kbGVyID0gaml0Lmp1bXAo
KTsKKwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExp
bmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlv
biwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRGcm9tU2NvcGUpKTsK
LSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vz
c2FyeSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9u
TGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBhdXRvIGhhbmRs
ZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNB
bmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoanVtcFRv
SGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJU
YWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQogI2VuZGlmIC8vIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQpAQCAtMjEyNiw3ICsyNTkzLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+
KG9wZXJhdGlvblB1dFRvU2NvcGUpKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+
ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgYXV0byBoYW5kbGVyID0gdm0uaml0
U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBD
b2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2Vs
aW5lOiBzbG93X29wX3B1dF90b19zY29wZSIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMjIgKzE0MSwx
NyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAgcmV0dXJu
IGVudHJ5Lml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmV4aXN0
aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgTG9ja0hvbGRlciBs
b2NrZXIobV9sb2NrKTsKLSAgICByZXR1cm4gZXhpc3RpbmdDVElTdHViKGdlbmVyYXRvciwgTm9M
b2NraW5nTmVjZXNzYXJ5KTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Is
IE5vTG9ja2luZ05lY2Vzc2FyeVRhZykKLXsKICAgICBDVElTdHViTWFwOjppdGVyYXRvciBlbnRy
eSA9IG1fY3RpU3R1Yk1hcC5maW5kKGdlbmVyYXRvcik7CiAgICAgaWYgKGVudHJ5ID09IG1fY3Rp
U3R1Yk1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4oKTsKLSAgICByZXR1cm4gZW50cnktPnZhbHVlOworICAgIGF1dG8gdGh1bmsg
PSBlbnRyeS0+dmFsdWU7CisgICAgUkVMRUFTRV9BU1NFUlQodGh1bmspOworICAgIHJldHVybiB0
aHVuazsKIH0KIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpU2xvd1BhdGhGdW5jdGlvblN0
dWIoVk0mIHZtLCBTbG93UGF0aEZ1bmN0aW9uIHNsb3dQYXRoRnVuY3Rpb24pCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9sb2NrKTsKQEAgLTM1Miw3ICszNDcsNiBAQCB2b2lkIEpJVFRodW5r
czo6cHJlaW5pdGlhbGl6ZUNUSVRodW5rcyhWCiAgICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhf
Q0FMTF9ST1VUSU5FKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CiAgICAgSU5J
VF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGhhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5KTsKICAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUoaW5fc3RydWN0
dXJlX3Byb3BlcnR5KTsKLSAgICBJTklUX0JBU0VMSU5FX1NMT1dfUEFUSF9DQUxMX1JPVVRJTkUo
cmVzb2x2ZV9zY29wZSk7CiAgICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5F
KGNoZWNrX3Rkeik7CiAgICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKHRv
X3Byb3BlcnR5X2tleSk7CiAKQEAgLTM3MSwxOCArMzY1LDMzIEBAIHZvaWQgSklUVGh1bmtzOjpw
cmVpbml0aWFsaXplQ1RJVGh1bmtzKFYKICAgICBjdGlTdHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0
X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwgSklUOjpzbG93
X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwogICAgIGN0aVN0dWIo
dm0sIEpJVDo6c2xvd19vcF9wdXRfdG9fc2NvcGVHZW5lcmF0b3IpOworICAgIGN0aVN0dWIodm0s
IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKTsKIAogICAgIGN0aVN0dWIodm0s
IEpJVDo6b3BfY2hlY2tfdHJhcHNfaGFuZGxlckdlbmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwg
SklUOjpvcF9lbnRlcl9oYW5kbGVyR2VuZXJhdG9yKTsKICAgICBjdGlTdHViKHZtLCBKSVQ6Om9w
X3JldF9oYW5kbGVyR2VuZXJhdG9yKTsKICAgICBjdGlTdHViKHZtLCBKSVQ6Om9wX3Rocm93X2hh
bmRsZXJHZW5lcmF0b3IpOworCisjZGVmaW5lIElOSVRfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9S
KHJlc29sdmVUeXBlKSBcCisgICAgaWYgY29uc3RleHByICghSklUOjp0aHVua05vdFVzZWRGb3JH
ZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKSBcCisgICAgICAgIGN0aVN0dWIodm0sIEpJVDo6b3Bf
Z2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKTsKKyAgICBGT1JfRUFDSF9S
RVNPTFZFX1RZUEUoSU5JVF9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IpCisjdW5kZWYgSU5JVF9H
RVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IKKworI2RlZmluZSBJTklUX1JFU09MVkVfU0NPUEVfR0VO
RVJBVE9SKHJlc29sdmVUeXBlKSBcCisgICAgaWYgY29uc3RleHByICghSklUOjp0aHVua05vdFVz
ZWRGb3JSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUpKSBcCisgICAgICAgIGN0aVN0dWIodm0sIEpJ
VDo6b3BfcmVzb2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IpOworICAgIEZPUl9F
QUNIX1JFU09MVkVfVFlQRShJTklUX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKQorI3VuZGVmIElO
SVRfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworICAgIGN0aVN0dWIodm0sIEpJVDo6dmFsdWVJ
c0ZhbHNleUdlbmVyYXRvcik7CisgICAgY3RpU3R1Yih2bSwgSklUOjp2YWx1ZUlzVHJ1dGh5R2Vu
ZXJhdG9yKTsKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgIGN0aVN0
dWIodm0sIGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgIGN0aVN0dWIodm0sIGFyaXR5Rml4
dXBHZW5lcmF0b3IpOwogfQogCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkocmV2aXNp
b24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAkod29y
a2luZyBjb3B5KQpAQCAtNjMsOSArNjMsOCBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpJVFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJik7
CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0m
LCBUaHVua0dlbmVyYXRvcik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yLCBO
b0xvY2tpbmdOZWNlc3NhcnlUYWcpOwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZXhpc3RpbmdDVElTdHViKFRo
dW5rR2VuZXJhdG9yKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGN0aVNsb3dQYXRoRnVuY3Rpb25TdHViKFZNJiwgU2xvd1BhdGhGdW5jdGlvbik7CiAjZW5kaWYK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAkocmV2
aXNpb24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbG93UGF0aENhbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSkkKICNlbmRpZgogICAgIGppdC5yZXQoKTsKIAotICAgIGF1dG8g
aGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAg
ICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOwogCiAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6
VGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0aW9u
UHRyVGFnPihzbG93UGF0aEZ1bmN0aW9uKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyNzc4ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkwLDggKzkwLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwbwog
ICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOwogCiAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6VGh1bmspOwotICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGlu
Z0NUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKGhhbmRsZXIpOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0
dWJzLT5leGlzdGluZ0NUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNvbnRpbnVhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhj
ZXB0aW9uIik7CiB9CkBAIC0xMzIsNyArMTMxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBjaAogI2VuZGlmCiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHZtLmppdFN0
dWJzLT5leGlzdGluZ0NUSVN0dWIoaGFuZGxlckdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGhhbmRs
ZUV4Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1
YihoYW5kbGVyR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJDaGVja0V4Y2Vw
dGlvbiIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXRQdXRJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0UHV0
SW5mby5oCShyZXZpc2lvbiAyNzc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZXRQdXRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSwyMSBAQCBlbnVtIFJl
c29sdmVNb2RlIHsKICAgICBEb05vdFRocm93SWZOb3RGb3VuZAogfTsKIAorI2RlZmluZSBGT1Jf
RUFDSF9SRVNPTFZFX1RZUEUodikgXAorICAgIHYoR2xvYmFsUHJvcGVydHkpIFwKKyAgICB2KEds
b2JhbFZhcikgXAorICAgIHYoR2xvYmFsTGV4aWNhbFZhcikgXAorICAgIHYoQ2xvc3VyZVZhcikg
XAorICAgIHYoTG9jYWxDbG9zdXJlVmFyKSBcCisgICAgdihNb2R1bGVWYXIpIFwKKyAgICB2KEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgXAorICAgIHYoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykgXAorICAgIHYoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpIFwKKyAgICB2KENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSBc
CisgICAgdihVbnJlc29sdmVkUHJvcGVydHkpIFwKKyAgICB2KFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpIFwKKyAgICB2KER5bmFtaWMpCisKIGVudW0gUmVzb2x2ZVR5
cGUgOiB1bnNpZ25lZCB7CiAgICAgLy8gTGV4aWNhbCBzY29wZSBndWFyYW50ZWVkIGEgY2VydGFp
biB0eXBlIG9mIHZhcmlhYmxlIGFjY2Vzcy4KICAgICBHbG9iYWxQcm9wZXJ0eSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNp
b24gMjc3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtODgzLDYgKzg4Myw4IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgcHRyZGlmZl90IHJlZ0V4cEdsb2JhbERhdGFPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fcmVnRXhwR2xvYmFsRGF0YSk7IH0KIAogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWTSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0dsb2Jh
bE9iamVjdCwgbV92bSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFsTGV4
aWNhbEVudmlyb25tZW50KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX2dsb2JhbExleGljYWxFbnZpcm9ubWVudCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0dsb2JhbE9iamVjdCwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKTsgfQogCiAjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgSW5zcGVjdG9yOjpKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXImIGluc3BlY3RvckNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiAq
bV9pbnNwZWN0b3JDb250cm9sbGVyLmdldCgpOyB9Cg==
</data>
<flag name="review"
          id="450506"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429390</attachid>
            <date>2021-05-21 19:35:38 -0700</date>
            <delta_ts>2021-05-24 20:06:21 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-226107.patch</filename>
            <type>text/plain</type>
            <size>58061</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDIxLTA1LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWR1Y2UgQmFzZWxpbmUgSklUIGVtaXR0ZWQgY29kZSBzaXplIGZvciBvcF9qZmFsc2UsIG9wX2p0
cnVlLCBvcF9nZXRfZnJvbV9zY29wZSwgb3BfcmVzb2x2ZV9zY29wZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjEwNworCisgICAgICAgIFJldmll
d2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIGV4
aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKS4KKyAg
ICAgICAgZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yKSB3YXMgbm90IGJlaW5nIHVzZWQg
aW4gdGhlIGZpcnN0IHBsYWNlLiAgU28sIHdlJ2xsCisgICAgICAgIGp1c3QgbWFrZSBpdCBub24t
bG9ja2luZy4KKworICAgICAgICBCZW5jaG1hcmtpbmcgd2l0aCBKZXRTdHJlYW0yIGFuZCBTcGVl
ZG9tZXRlcjIgb24gTTEgTWFjIHNob3dzIHRoYXQgcGVyZm9ybWFuY2UgaXMKKyAgICAgICAgbmV1
dHJhbC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgQmFzZWxpbmUgSklUIGVtaXR0ZWQg
Y29kZSBzaWRlIG9uIGEgcnVuIG9mIEpldFN0cmVhbTIgQ0xJIGJ5CisgICAgICAgIGFub3RoZXIg
fjYuNk06CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAgICAgICAgICAgICAgICAg
TmV3ICAgICAgICAgICAgICAgICAgICAgIERpZmYKKworICAgICAgICAgICBCYXNlbGluZUpJVDog
NjQ5NTUxMTYgKDYxLjk0NjAyNiBNQikgIDU3OTkxNzA0ICg1NS4zMDUxOTkgTUIpICAwLjg5eCAo
cmVkdWN0aW9uKQorICAgICAgICAgICAgICAgICAgIERGRzogMzYzODIwMTIgKDM0LjY5NjU5MCBN
QikgIDM2NTQwNjUyICgzNC44NDc4ODEgTUIpICAxLjAweAorICAgICAgICAgICAgICAgICBUaHVu
azogMjMyMTc2OTIgKDIyLjE0MjExNyBNQikgIDIzMTE1ODUyICgyMi4wNDQ5OTQgTUIpICAxLjAw
eAorICAgICAgICAgICBJbmxpbmVDYWNoZTogMjIyMjgxNDAgKDIxLjE5ODQwNiBNQikgIDIyMjYy
NTcyICgyMS4yMzEyNDMgTUIpICAxLjAweAorICAgICAgICAgICAgICAgICAgIEZUTDogNjAyNTMy
MCAoNS43NDYxOTMgTUIpICAgIDYxNjQzMzIgKDUuODc4NzY1IE1CKSAgICAxLjAyeAorICAgICAg
ICAgICAgICAgICAgV2FzbTogMjMyNzYwNCAoMi4yMTk3NzYgTUIpICAgIDIyOTcwMzYgKDIuMTkw
NjI0IE1CKSAgICAwLjk5eAorICAgICAgICAgICAgICAgWWFyckpJVDogMTU0NzE3MiAoMS40NzU0
OTggTUIpICAgIDE1MjI1ODQgKDEuNDUyMDQ5IE1CKSAgICAwLjk4eAorICAgICAgICAgICAgICAg
IENTU0pJVDogMCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgIFVuY2F0ZWdvcml6
ZWQ6IDAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKyAgICAgICAgQ3VtdWxhdGl2ZSBkaWZm
IHNpbmNlIHRoZSBzdGFydCBvZiB0aGlzIGVmZm9ydCB0byByZWR1Y2UgQmFzZWxpbmUgSklUIGNv
ZGUgc2l6ZToKKworICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgICAgICAgICAgICAg
ICAgIE5ldyAgICAgICAgICAgICAgICAgICAgICBEaWZmCisKKyAgICAgICAgICAgQmFzZWxpbmVK
SVQ6IDg5MDg5OTY0ICg4NC45NjI4MTEgTUIpICA1Nzk5MTcwNCAoNTUuMzA1MTk5IE1CKSAgMC42
NXggKHJlZHVjdGlvbikKKyAgICAgICAgICAgICAgICAgICBERkc6IDM5MTE3MzYwICgzNy4zMDUy
MjIgTUIpICAzNjU0MDY1MiAoMzQuODQ3ODgxIE1CKSAgMC45M3ggKHJlZHVjdGlvbikKKyAgICAg
ICAgICAgICAgICAgVGh1bms6IDIzMjMwOTY4ICgyMi4xNTQ3NzggTUIpICAyMzExNTg1MiAoMjIu
MDQ0OTk0IE1CKSAgMS4wMHgKKyAgICAgICAgICAgSW5saW5lQ2FjaGU6IDIyMDI3NDE2ICgyMS4w
MDY5ODEgTUIpICAyMjI2MjU3MiAoMjEuMjMxMjQzIE1CKSAgMS4wMXgKKyAgICAgICAgICAgICAg
ICAgICBGVEw6IDY1NzU3NzIgKDYuMjcxMTQ1IE1CKSAgICA2MTY0MzMyICg1Ljg3ODc2NSBNQikg
ICAgMC45NHggKHJlZHVjdGlvbikKKyAgICAgICAgICAgICAgICAgIFdhc206IDIzMDI3MjQgKDIu
MTk2MDQ5IE1CKSAgICAyMjk3MDM2ICgyLjE5MDYyNCBNQikgICAgMS4wMHgKKyAgICAgICAgICAg
ICAgIFlhcnJKSVQ6IDE1Mzg5NTYgKDEuNDY3NjYzIE1CKSAgICAxNTIyNTg0ICgxLjQ1MjA0OSBN
QikgICAgMC45OXgKKyAgICAgICAgICAgICAgICBDU1NKSVQ6IDAgICAgICAgICAgICAgICAgICAg
ICAgICAwCisgICAgICAgICBVbmNhdGVnb3JpemVkOiAwICAgICAgICAgICAgICAgICAgICAgICAg
MAorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpv
ZmZzZXRPZk1ldGFkYXRhVGFibGUpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmVmFsdWUpOgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjpicmFuY2hJZlRydXRoeSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNo
SWZGYWxzZXkpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICog
aml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToK
KyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjpvcF9jaGVja190cmFwc19oYW5kbGVyR2Vu
ZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6
OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9t
X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAg
ICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAgICAo
SlNDOjpKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvSklU
VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OnByZWluaXRpYWxpemVDVElUaHVua3MpOgorICAgICAg
ICAqIGppdC9KSVRUaHVua3MuaDoKKyAgICAgICAgKiBqaXQvU2xvd1BhdGhDYWxsLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUU2xvd1BhdGhDYWxsOjpnZW5lcmF0ZVRodW5rKToKKyAgICAgICAgKiBq
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6cG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0dldFB1dEluZm8uaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2gpOgorCiAyMDIx
LTA1LTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
dGhlIHVubmVjZXNzYXJ5IHVzZSBvZiBDb21waWxlT3BTdHJpY3RFcVR5cGUuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzc5MDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg5Miw2ICs4OTIsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PE1ldGFkYXRhKj4obV9tZXRhZGF0YS0+Z2V0KG9wY29kZUlEKSlbbWV0YWRhdGFJRF07
CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+CisgICAgcHRyZGlmZl90
IG9mZnNldEluTWV0YWRhdGFUYWJsZShNZXRhZGF0YSogbWV0YWRhdGEpCisgICAgeworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihtZXRhZGF0YSkgLSBiaXR3aXNlX2Nhc3Q8
dWludDhfdCo+KG1ldGFkYXRhVGFibGUoKSk7CisgICAgfQorCiAgICAgc2l6ZV90IG1ldGFkYXRh
U2l6ZUluQnl0ZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5tZXRh
ZGF0YVNpemVJbkJ5dGVzKCk7CkBAIC05MDAsNiArOTA2LDcgQEAgcHVibGljOgogICAgIE1ldGFk
YXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAg
ICAgY29uc3Qgdm9pZCogaW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpIHsgcmV0dXJuIG1faW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcjsgfQogCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFk
YXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRh
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVy
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQ
b2ludGVyKTsgfQogCiAgICAgYm9vbCBsb29wSGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJs
eVJldHVybigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCShyZXZpc2lvbiAyNzc5MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5Nyw3ICs3OTcsNyBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENvbnZlcnRWYWx1ZVRvCiAgICAgZG9uZS5saW5rKHRo
aXMpOwogfQogCi1Bc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZWYWx1ZShWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BS
UmVnIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHZh
bHVlQXNGUFIsIEZQUlJlZyB0ZW1wRlBSLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCBpbnZlcnQpCitBc3Nl
bWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZWYWx1ZShWTSYg
dm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHZhbHVlQXNGUFIsIEZQUlJl
ZyB0ZW1wRlBSLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgVmFyaWFu
dDxKU0dsb2JhbE9iamVjdCosIEdQUlJlZz4gZ2xvYmFsT2JqZWN0LCBib29sIGludmVydCkKIHsK
ICAgICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgY29udHJvbCBmbG93IHN0cnVjdHVyZToK
ICAgICAvLyBpZiAodmFsdWUgaXMgY2VsbCkgewpAQCAtODI5LDcgKzgyOSwxMCBAQCBBc3NlbWJs
eUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyCiAgICAgICAgIEp1bXBMaXN0IGlzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmFwcGVuZChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpKTsKICAgICAgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxv
YWRHUFIoKSwgc2NyYXRjaCwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIHNjcmF0Y2hJ
ZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCk7CisgICAgICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihXVEY6OmdldDxKU0dsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKFdURjo6Z2V0PEdQUlJlZz4oZ2xvYmFsT2JqZWN0
KSwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKTsKICAgICAgICAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hJ
ZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogCiAgICAgICAgIC8vIFdlIGFj
dCBsaWtlIHdlIGFyZSAidW5kZWZpbmVkIiBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNzc5MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiVGFnUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlR5
cGVvZlR5cGUuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0xODk2LDEyICsxODk3LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwogICAgIH0KIAotICAgIEp1bXBMaXN0IGJyYW5j
aElmVmFsdWUoVk0mLCBKU1ZhbHVlUmVncywgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNo
SWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZQUlJlZywgRlBSUmVnLCBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNHbG9iYWxPYmplY3QqLCBib29s
IG5lZ2F0ZVJlc3VsdCk7Ci0gICAgSnVtcExpc3QgYnJhbmNoSWZUcnV0aHkoVk0mIHZtLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZQUlJlZyBzY3JhdGNoRlBSMCwgRlBSUmVnIHNjcmF0
Y2hGUFIxLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICBKdW1wTGlzdCBicmFuY2hJZlZhbHVlKFZNJiwgSlNW
YWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoLCBHUFJSZWcgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBGUFJSZWcsIEZQUlJlZywgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIFZhcmlhbnQ8SlNHbG9iYWxPYmplY3QqLCBHUFJSZWc+LCBib29s
IG5lZ2F0ZVJlc3VsdCk7CisgICAgSnVtcExpc3QgYnJhbmNoSWZUcnV0aHkoVk0mIHZtLCBKU1Zh
bHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZQUlJlZyBzY3JhdGNoRlBSMCwgRlBSUmVnIHNjcmF0
Y2hGUFIxLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgVmFyaWFudDxK
U0dsb2JhbE9iamVjdCosIEdQUlJlZz4gZ2xvYmFsT2JqZWN0KQogICAgIHsKICAgICAgICAgcmV0
dXJuIGJyYW5jaElmVmFsdWUodm0sIHZhbHVlLCBzY3JhdGNoLCBzY3JhdGNoSWZTaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIHNjcmF0Y2hGUFIwLCBzY3JhdGNoRlBSMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3QsIGZhbHNlKTsKICAgICB9
Ci0gICAgSnVtcExpc3QgYnJhbmNoSWZGYWxzZXkoVk0mIHZtLCBKU1ZhbHVlUmVncyB2YWx1ZSwg
R1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIEZQUlJlZyBzY3JhdGNoRlBSMCwgRlBSUmVnIHNjcmF0Y2hGUFIxLCBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKKyAgICBKdW1wTGlzdCBicmFuY2hJZkZhbHNleShWTSYgdm0sIEpTVmFsdWVSZWdzIHZh
bHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHNjcmF0Y2hGUFIwLCBGUFJSZWcgc2NyYXRjaEZQUjEsIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBWYXJpYW50PEpTR2xvYmFsT2Jq
ZWN0KiwgR1BSUmVnPiBnbG9iYWxPYmplY3QpCiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNo
SWZWYWx1ZSh2bSwgdmFsdWUsIHNjcmF0Y2gsIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgc2NyYXRjaEZQUjAsIHNjcmF0Y2hGUFIxLCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdCwgdHJ1ZSk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjc3OTA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTEsNyArNTkxLDkgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkpCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX3B1dF90b19zY29wZSkKIAogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
aXRlcmF0b3Jfb3BlbikKQEAgLTYyNiw3ICs2MjgsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChoYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQorI2VuZGlm
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGNoZWNrX3RkeikKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX1NMT1dfT1AodG9fcHJvcGVydHlfa2V5KQogICAgICAgICBkZWZhdWx0OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyNzc5MDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNyArNzMwLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50
cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyNlbmRpZgogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
U2xvd1BhdGhGdW5jdGlvbik7CkBAIC03OTYsMTIgKzc5OCw0NSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVy
YXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFw
c19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2VudGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0
X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwotI2Vu
ZGlmCisKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BHZXRG
cm9tU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIEdsb2JhbFZhciBiZWNhdXNlIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5l
IHRoYW4gdXNlIGEgdGh1bmsuCisgICAgICAgICAgICAvLyBMb2NhbENsb3N1cmVWYXIgYW5kIE1v
ZHVsZVZhciBiZWNhdXNlIHdlIGRvbid0IHVzZSB0aGVzZSB0eXBlcyB3aXRoIG9wX2dldF9mcm9t
X3Njb3BlLgorICAgICAgICAgICAgcmV0dXJuICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8
IHJlc29sdmVUeXBlID09IExvY2FsQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVW
YXIpOworICAgICAgICB9CisKKyNkZWZpbmUgREVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFU
T1IocmVzb2x2ZVR5cGUpIFwKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21fc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9y
KFZNJik7CisgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1ND
T1BFX0dFTkVSQVRPUikKKyN1bmRlZiBERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgor
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOwor
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNj
b3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBN
b2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFu
IHVzZSBhIHRodW5rLgorICAgICAgICAgICAgLy8gTG9jYWxDbG9zdXJlVmFyIGJlY2F1c2Ugd2Ug
ZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGggb3BfcmVzb2x2ZV9zY29wZS4KKyAgICAgICAgICAg
IHJldHVybiAhKHJlc29sdmVUeXBlID09IExvY2FsQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpOworICAgICAgICB9CisKKyNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAorICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dl
bmVyYXRvcihWTSYpOworICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNP
TFZFX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRlZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJB
VE9SCisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5l
cmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFt
ZSk7CisKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7
CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgICAgICBKdW1wIGdl
dFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNp
b24gMjc3OTA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQ3LDE1ICs0NDcsNTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZh
bHNlKGNvbnN0IEluc3RydWN0aQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisjZWxzZQor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKKyNlbmRpZgogfQogCisjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
dmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVy
YXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNl
bGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KKyAgICBKSVQgaml0KHZtKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWUgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSByZWdUMzsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIGdsb2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxP
YmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVj
dEdQUik7CisgICAgYXV0byBpc0ZhbHNleSA9IGppdC5icmFuY2hJZkZhbHNleSh2bSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQu
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICBKdW1wIGRvbmUgPSBqaXQuanVtcCgp
OworCisgICAgaXNGYWxzZXkubGluaygmaml0KTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKKworICAgIGRvbmUubGluaygmaml0KTsKKyAgICBqaXQucmV0KCk7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHZhbHVlSXNmYWxzZXkiKTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7CkBAIC01NjgsMTMgKzYw
Nyw1MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXRMYWJlbCk7CiAKLSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisgICAgY29uc3RleHByIEdQ
UlJlZyB2YWx1ZSA9IHJlZ1QwOworCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJl
ZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAgICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdU
MSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCB0YXJnZXQpOworI2Vsc2UKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdl
dENUSVN0dWIodmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigp
KTsKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7Cisj
ZW5kaWYKK30KKworI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mIHZt
KQoreworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25s
eSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBt
YWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWls
YWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5s
aW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5
IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgSklUIGppdCh2
bSk7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIg
PSByZWdUMjsKKyAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSB0cnVlOworCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CisgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBnbG9iYWxPYmplY3RHUFIpOworICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGF1dG8gaXNUcnV0aHkgPSBq
aXQuYnJhbmNoSWZUcnV0aHkodm0sIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IGdsb2JhbE9iamVjdEdQUik7CisgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CisgICAgSnVtcCBkb25lID0gaml0Lmp1bXAoKTsKKworICAgIGlzVHJ1dGh5LmxpbmsoJmppdCk7
CisgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisKKyAgICBkb25lLmxpbmso
JmppdCk7CisgICAgaml0LnJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiB2
YWx1ZUlzZmFsc2V5Iik7CiB9CisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
IHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewpAQCAtMTQ1OSw3ICsxNTM4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSQogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsob3BlcmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhbmRs
ZVRyYXBzKSk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1
Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xv
Y2tpbmdOZWNlc3NhcnkpOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmppdFN0dWJzLT5leGlzdGlu
Z0NUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRv
cik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFi
ZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogb3BfY2hlY2tf
dHJhcHNfaGFuZGxlciIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzc5MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODU5LDYgKzI4NTks
NjAgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaAogICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCisjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNj
b3BlRm9yQmFzZWxpbmUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
KworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CisgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92
YXIpOworICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
Lm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3Bl
ID0gSlNTY29wZTo6cmVzb2x2ZShnbG9iYWxPYmplY3QsIHNjb3BlLCBpZGVudCk7CisgICAgLy8g
UHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1l
bnQncyBAdW5zY29wYWJsZXMuCisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOworCisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsK
KworICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1
ZSBhbGl2ZSBpbiBERkcuCisgICAgQVNTRVJUKHJlc29sdmVUeXBlICE9IE1vZHVsZVZhcik7CisK
KyAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICAgICAgaWYgKHJlc29sdmVkU2NvcGUtPmlzR2xvYmFsT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8
SlNHbG9iYWxPYmplY3QqPihyZXNvbHZlZFNjb3BlKTsKKyAgICAgICAgICAgIGJvb2wgaGFzUHJv
cGVydHkgPSBnbG9iYWxPYmplY3QtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgaWRlbnQpOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOworICAgICAg
ICAgICAgaWYgKGhhc1Byb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSA9IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbFByb3BlcnR5OworICAg
ICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2xvYmFsT2JqZWN0LnNldCh2bSwgY29kZUJsb2NrLCBn
bG9iYWxPYmplY3QpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlc29sdmVkU2NvcGUtPmlzR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50KCkpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVudmly
b25tZW50KiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQqPihyZXNvbHZlZFNjb3BlKTsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZSA9IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcjsKKyAg
ICAgICAgICAgIG1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LnNldCh2bSwgY29k
ZUJsb2NrLCBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc29sdmVkU2NvcGUpOworfQorI2VuZGlmCisKIEpTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVuY29kZWRKU1ZhbHVl
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSW5zdHJ1Y3Rpb24qIHBjKSkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjc3OTA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
Myw2ICsyODMsOSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktl
eVR5cGUsIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVf
dCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIGNoYXIqLCAoVk0qLCBFbmNvZGVk
SlNWYWx1ZSBrZXksIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90IG1pbikpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUs
IGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSBrZXksIHNpemVfdCB0YWJs
ZUluZGV4KSk7CisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lLCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpKTsKKyNl
bmRpZgogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRGcm9tU2NvcGUsIEVu
Y29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNv
ZGVQQykpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25QdXRUb1Njb3BlLCB2
b2lkLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0ZWNvZGVQQykpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkocmV2aXNpb24gMjc3OTA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1ODksNiArMTU4OSw3IEBAIHZv
aWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2kKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKKyNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGU+KCk7CkBAIC0xNjkyLDYgKzE2OTMsMjUyIEBAIHZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICAgICAgYnJlYWs7CiAgICAgfQogfQorI2Vs
c2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKK3ZvaWQgSklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CisKKyAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwor
ICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwor
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5k
ZXgpOworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5k
ZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CisKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1Q2Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKworICAgIGlm
IChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
ZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9jb2RlQmxvY2stPm9mZnNldElu
TWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOworCisjZGVmaW5lIFJFU09MVkVfU0NPUEVfR0VORVJB
VE9SKHJlc29sdmVUeXBlKSBvcF9yZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRv
ciwKKyAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9IHsK
KyAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShSRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UikKKyAgICAgICAgfTsKKyN1bmRlZiBSRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0YWRhdGFHUFIpOworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICAg
ICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBl
XSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICB9CisKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVk
IGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5l
IEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0
IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygp
LgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVy
IGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgorICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsgLy8gaW5jb21pbmcK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7IC8vIGluY29taW5nCisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAt
IHBhc3MgdGhydSB0byBzbG93IHBhdGguCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNDsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOworICAg
IFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2ZVR5cGUp
KTsKKworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKKworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGFk
ZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAg
ICBhdXRvIGVtaXRWYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFsaWRHUFJSZWcpIHsKKyAgICAg
ICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAg
ICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKKyAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2Jh
bE9iamVjdEdQUik7CisgICAgICAgIH0KKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVh
bCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfTsKKworICAgIGF1dG8gZW1pdFJlc29sdmVD
bG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIG1v
dmUoc2NvcGVHUFIsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9sb2NhbFNjb3BlRGVwdGgpKSwgcmVnVDEpOwor
CisgICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOworICAgICAgICBKdW1wIGRvbmUgPSBicmFu
Y2hUZXN0MzIoWmVybywgcmVnVDEpOworICAgICAgICB7CisgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgICAgICAg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgICAgICBqdW1wKCkubGlu
a1RvKGxvb3AsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICB9OworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUp
IHsKKyAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgorICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogeworICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygp
IGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCisgICAgICAgICAgICBsb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICAgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0
YWRhdGEsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCkpLCByZWdUMSk7CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoZ2xvYmFsT2JqZWN0
R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkp
LCByZWdUMSkpOworICAgICAgICAgICAgbW92ZShnbG9iYWxPYmplY3RHUFIsIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBHbG9iYWxWYXI6Cisg
ICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFs
VmFyKiwKKyAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCisgICAgICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGlj
YWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBEeW5hbWljOgorICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CisgICAgICAg
IGNhc2UgTW9kdWxlVmFyOgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICAg
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBK
dW1wTGlzdCBza2lwVG9FbmQ7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcmVzb2x2ZVR5cGUpKSwgcmVnVDApOworCisgICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyA6IEdsb2JhbExleGljYWxWYXIpOworCisgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CisgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIs
IE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCByZWdUMCk7CisKKyAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFBy
b3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0
Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0
aGlzKTsKKworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBHTE9CQUxfVEhV
TktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBhdXRvIHNsb3dDYXNlSGFu
ZGxlciA9IHZtKCkuaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1YihzbG93X29wX3Jlc29sdmVfc2Nv
cGVHZW5lcmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlv
bkxhYmVsKHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFt
ZSk7Cit9CisKKyNkZWZpbmUgREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SKHJlc29sdmVU
eXBlKSBcCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfcmVz
b2x2ZV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IoVk0mIHZtKSBcCisgICAgeyBcCisg
ICAgICAgIGlmIGNvbnN0ZXhwciAoIXRodW5rSXNVc2VkRm9yT3BSZXNvbHZlU2NvcGUocmVzb2x2
ZVR5cGUpKSBcCisgICAgICAgICAgICByZXR1cm4geyB9OyBcCisgICAgICAgIEpJVCBqaXQodm0p
OyBcCisgICAgICAgIHJldHVybiBqaXQuZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKHJlc29s
dmVUeXBlLCAiQmFzZWxpbmU6IG9wX3Jlc29sdmVfc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCisg
ICAgfQorRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRP
UikKKyN1bmRlZiBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IKKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVy
YXRvcihWTSYgdm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0
aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQor
ICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3Qg
YmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcv
RlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3Rz
LCB3aGljaCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAg
ICBKSVQgaml0KHZtKTsKKworICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhl
IHJldHVybiBhZGRyZXNzLgorI2lmIENQVShYODZfNjQpCisgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50
ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgY29uc3RleHByIEdQUlJl
ZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zm
c2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
KTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7CisKKyAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9j
a0dQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNS
YXdQb2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7CisgICAgaml0LmFkZFB0cihieXRlY29kZU9m
ZnNldEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOworCisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKT4oZ2xvYmFsT2JqZWN0R1BSLCBp
bnN0cnVjdGlvbkdQUik7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBD
YWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBleGNl
cHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOworCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKKyNlbGlmIENQ
VShBUk02NCkKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZW5kaWYKKyAgICBqaXQucmV0KCk7
CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhvcGVyYXRpb24s
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFz
ZWxpbmUpKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHVi
KHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRs
ZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcmVzb2x2ZV9z
Y29wZSIpOworfQorI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJ
VDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewpAQCAtMTcxOSw2ICsxOTY2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpcwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKIH0KIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC0xODQyLDI4ICsyMDkwLDIzNiBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOworCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShtZXRhZGF0YSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3RydWN0aW9uKTsK
LSNlbHNlCit9CisKKyNlbHNlIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbVNjb3BlPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
CisKICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwogICAgIHVpbnQzMl90IGJ5dGVjb2RlT2Zmc2V0
ID0gbV9ieXRlY29kZUluZGV4Lm9mZnNldCgpOwogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5
dGVjb2RlT2Zmc2V0KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIy
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRH
UFIpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworCisgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZh
cikgeworICAgICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKKyAgICAgICAgZW1pdEdldFZhckZyb21Q
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAg
IH0gZWxzZSB7CisgICAgICAgIHB0cmRpZmZfdCBtZXRhZGF0YU9mZnNldCA9IG1fY29kZUJsb2Nr
LT5vZmZzZXRJbk1ldGFkYXRhVGFibGUoJm1ldGFkYXRhKTsKIAotICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKKyNkZWZpbmUgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJl
c29sdmVUeXBlKSBvcF9nZXRfZnJvbV9zY29wZV8jI3Jlc29sdmVUeXBlIyNHZW5lcmF0b3IsCisg
ICAgICAgIHN0YXRpYyBjb25zdCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3JzW10gPSB7CisgICAg
ICAgICAgICBGT1JfRUFDSF9SRVNPTFZFX1RZUEUoR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQor
ICAgICAgICB9OworI3VuZGVmIEdFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgogCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgcmV0dXJuVmFsdWVHUFIpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci0jZW5kaWYgLy8gRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNj
b3BlR1BSKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhT2Zmc2V0KSwgbWV0
YWRhdGFHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5
dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1
YihnZW5lcmF0b3JzW3Jlc29sdmVUeXBlXSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAg
ICB9CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi0jaWYgRU5BQkxFKEVY
VFJBX0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBj
b25zdCBjaGFyKiB0aHVua05hbWUpCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQg
YmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9i
YWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAg
ICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9i
YWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KKyAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHByIEdQ
UlJlZyBzY29wZUdQUiA9IHJlZ1Q2OworICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rSXNVc2VkRm9y
T3BHZXRGcm9tU2NvcGUocmVzb2x2ZVR5cGUpKTsKKworICAgIHRhZ1JldHVybkFkZHJlc3MoKTsK
KworICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRh
dGFUYWJsZSgpKSwgcmVnVDMpOworICAgIGFkZFB0cihyZWdUMywgbWV0YWRhdGFHUFIpOworCisg
ICAgSnVtcExpc3Qgc2xvd0Nhc2U7CisKKyAgICBhdXRvIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNo
ZWNrID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIGludDMyX3QgbWV0YWRhdGFTdHJ1Y3R1cmVPZmZz
ZXQpIHsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBtZXRhZGF0YVN0cnVj
dHVyZU9mZnNldCksIHJlZ1QxKTsKKyAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOworICAg
ICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgfTsK
KworICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgIH07CisgICAgCisgICAgYXV0
byBlbWl0R2V0VmFyRnJvbVBvaW50ZXIgPSBbJl0gKGludDMyX3Qgb3BlcmFuZCwgR1BSUmVnIHJl
ZykgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG9wZXJhbmQpLCByZWcp
OworICAgICAgICBsb2FkUHRyKHJlZywgcmVnKTsKKyAgICB9OworCisgICAgYXV0byBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBHUFJSZWcgcmVn
KSB7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFuZCksIHJlZyk7
CisgICAgICAgIGxvYWRQdHIocmVnLCByZWcpOworICAgIH07CisKKyAgICBhdXRvIGVtaXRHZXRD
bG9zdXJlVmFyID0gWyZdIChHUFJSZWcgc2NvcGVHUFIsIEdQUlJlZyBvcGVyYW5kR1BSKSB7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOworICAgICAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIG9wZXJhbmRHUFIpOworICAgICAgICBhZGRQdHIo
c2NvcGVHUFIsIG9wZXJhbmRHUFIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3Mob3BlcmFuZEdQ
UiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Cisg
ICAgfTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
LCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKKyAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgeworICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgorICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGVHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9z
dHJ1Y3R1cmUpKTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNl
IHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2Jq
ZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhl
IHZhciBpbmplY3Rpb24uCisKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZSA9IHJl
Z1QwOworICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyByZXN1bHQgPSByZWdUMDsKKyAgICAg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgb2Zmc2V0ID0gcmVnVDE7CisgICAgICAgICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKworICAgICAgICAgICAgaml0QXNzZXJ0KHNj
b3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7CisgICAgICAgICAgICAgICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAg
ICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KEVxdWFsLCBiYXNlLCByZWdUMyk7CisgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29w
ZXJhbmQpKSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAg
ICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1
YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKKyAgICAg
ICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHNjcmF0Y2gpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKKyAgICAgICAgICAgIHNpZ25F
eHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5k
ZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
OgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihPQkpFQ1RfT0ZG
U0VUT0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX29wZXJhbmQpLCByZWdUMCk7CisgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgorICAgICAgICAgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgorICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSksIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlR1BSLCByZWdUMyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEeW5hbWljOgorICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2Nh
bENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgTW9kdWxlVmFyOgorICAgICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogeworICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7CisgICAgICAgIGxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5m
bykpLCByZWdUMCk7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBl
Qml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisKKyAgICAgICAgSnVt
cCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNl
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworCisgICAgICAgIGlzTm90R2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKKyAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKworICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgorICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fZ2V0UHV0SW5mbykpLCByZWdU
MCk7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisKKyAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJv
cGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0
aGlzKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2Fs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNh
bFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7CisKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7
CisKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGRlZmF1bHQ6CisgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHN0YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpu
dW1iZXJPZkJ1Y2tldHMgPT0gMSk7CisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0
YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Byb2ZpbGUpKSk7CisKKyAgICByZXQo
KTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIEdMT0JBTF9USFVOS19JRCwg
TGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIGF1dG8gc2xvd0Nhc2VIYW5kbGVyID0g
dm0oKS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5l
cmF0b3IpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2UsIENvZGVMb2NhdGlvbkxhYmVs
KHNsb3dDYXNlSGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsIHRodW5rTmFtZSk7Cit9
CisKKyNkZWZpbmUgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkg
XAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX2dldF9mcm9t
X3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKKyAgICB7IFwKKyAgICAg
ICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlw
ZSkpIFwKKyAgICAgICAgICAgIHJldHVybiB7IH07IFwKKyAgICAgICAgSklUIGppdCh2bSk7IFwK
KyAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsocmVzb2x2ZVR5
cGUsICJCYXNlbGluZTogb3BfZ2V0X2Zyb21fc2NvcGVfIiAjcmVzb2x2ZVR5cGUpOyBcCisgICAg
fQorRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKERFRklORV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1Ip
CisjdW5kZWYgREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVy
YXRvcihWTSYgdm0pCiB7CiAgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0
aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQpA
QCAtMTg3NSwxMSArMjMzMSwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7
CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKICAgICBqaXQu
cHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAjZW5kaWYKIAot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7Cisg
ICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0
ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKICAgICBqaXQuc3RvcmUzMihieXRlY29kZU9mZnNldEdQ
UiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3VtZW50R1BSMzsKQEAgLTE4
OTEsMTAgKzIzNDgsMTUgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SQogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNl
dE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5h
ZGRQdHIoYnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKIAorICAgIEFTU0VSVChS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5zKEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyKSk7CisgICAgaml0Lm1vdmUobWV0YWRhdGFHUFIsIEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyKTsgLy8gUHJlc2VydmUgbWV0YWRhdGEgaW4gYSBjYWxsZWUgc2F2ZWQgcmVn
aXN0ZXIuCiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldEZyb21T
Y29wZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5wcmVwYXJl
Q2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJhdGlvbiA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGV4Y2VwdGlv
bkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CisgICAgQ2Fs
bCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOworICAgIEp1bXAgZXhjZXB0
aW9uQ2hlY2sgPSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKworICAg
IGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBP
QkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKyAgICBqaXQubW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIp
OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKQEAg
LTE5MDMsMTAgKzIzNjUsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSQogI2VuZGlmCiAgICAgaml0LnJldCgpOwogCisgICAgZXhjZXB0aW9uQ2hlY2subGluaygm
aml0KTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BS
SW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgIEp1bXAganVtcFRvSGFuZGxlciA9IGppdC5q
dW1wKCk7CisKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhvcGVy
YXRpb24sIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0RnJvbVNjb3Bl
KSk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BU
aHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdO
ZWNlc3NhcnkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgYXV0byBo
YW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2Vy
dmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGp1
bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRy
VGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5r
UHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KICNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKQEAgLTIxMjYsNyArMjU5Miw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25QdXRUb1Njb3BlKSk7Ci0gICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1
YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0
aW9uR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIGF1dG8gaGFuZGxlciA9IHZt
LmppdFN0dWJzLT5leGlzdGluZ0NUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVj
aywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJC
YXNlbGluZTogc2xvd19vcF9wdXRfdG9fc2NvcGUiKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHJldmlzaW9uIDI3NzkwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDIyICsx
NDEsMTcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSQogICAgIHJl
dHVybiBlbnRyeS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpl
eGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgcmV0dXJuIGV4aXN0aW5nQ1RJU3R1YihnZW5lcmF0b3Is
IE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yLCBOb0xvY2tpbmdOZWNlc3NhcnlUYWcpCi17CiAgICAgQ1RJU3R1Yk1hcDo6aXRlcmF0b3Ig
ZW50cnkgPSBtX2N0aVN0dWJNYXAuZmluZChnZW5lcmF0b3IpOwogICAgIGlmIChlbnRyeSA9PSBt
X2N0aVN0dWJNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+KCk7Ci0gICAgcmV0dXJuIGVudHJ5LT52YWx1ZTsKKyAgICBhdXRvIHRo
dW5rID0gZW50cnktPnZhbHVlOworICAgIFJFTEVBU0VfQVNTRVJUKHRodW5rKTsKKyAgICByZXR1
cm4gdGh1bms7CiB9CiAKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aVNsb3dQYXRoRnVuY3Rp
b25TdHViKFZNJiB2bSwgU2xvd1BhdGhGdW5jdGlvbiBzbG93UGF0aEZ1bmN0aW9uKQogewogICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkBAIC0zNTIsNyArMzQ3LDYgQEAgdm9pZCBKSVRU
aHVua3M6OnByZWluaXRpYWxpemVDVElUaHVua3MoVgogICAgIElOSVRfQkFTRUxJTkVfU0xPV19Q
QVRIX0NBTExfUk9VVElORShoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOwogICAg
IElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElORShoYXNfb3duX3N0cnVjdHVyZV9w
cm9wZXJ0eSk7CiAgICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VUSU5FKGluX3N0
cnVjdHVyZV9wcm9wZXJ0eSk7Ci0gICAgSU5JVF9CQVNFTElORV9TTE9XX1BBVEhfQ0FMTF9ST1VU
SU5FKHJlc29sdmVfc2NvcGUpOwogICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9V
VElORShjaGVja190ZHopOwogICAgIElOSVRfQkFTRUxJTkVfU0xPV19QQVRIX0NBTExfUk9VVElO
RSh0b19wcm9wZXJ0eV9rZXkpOwogCkBAIC0zNzEsMTggKzM2NSwzMyBAQCB2b2lkIEpJVFRodW5r
czo6cHJlaW5pdGlhbGl6ZUNUSVRodW5rcyhWCiAgICAgY3RpU3R1Yih2bSwgSklUOjpzbG93X29w
X3B1dF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IpOwogICAgIGN0aVN0dWIodm0sIEpJVDo6
c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsR2VuZXJhdG9yKTsKICAgICBjdGlT
dHViKHZtLCBKSVQ6OnNsb3dfb3BfcHV0X3RvX3Njb3BlR2VuZXJhdG9yKTsKKyAgICBjdGlTdHVi
KHZtLCBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik7CiAKICAgICBjdGlTdHVi
KHZtLCBKSVQ6Om9wX2NoZWNrX3RyYXBzX2hhbmRsZXJHZW5lcmF0b3IpOwogICAgIGN0aVN0dWIo
dm0sIEpJVDo6b3BfZW50ZXJfaGFuZGxlckdlbmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwgSklU
OjpvcF9yZXRfaGFuZGxlckdlbmVyYXRvcik7CiAgICAgY3RpU3R1Yih2bSwgSklUOjpvcF90aHJv
d19oYW5kbGVyR2VuZXJhdG9yKTsKKworI2RlZmluZSBJTklUX0dFVF9GUk9NX1NDT1BFX0dFTkVS
QVRPUihyZXNvbHZlVHlwZSkgXAorICAgIGlmIGNvbnN0ZXhwciAoSklUOjp0aHVua0lzVXNlZEZv
ck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAorICAgICAgICBjdGlTdHViKHZtLCBKSVQ6
Om9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcik7CisgICAgRk9SX0VB
Q0hfUkVTT0xWRV9UWVBFKElOSVRfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKQorI3VuZGVmIElO
SVRfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisKKyNkZWZpbmUgSU5JVF9SRVNPTFZFX1NDT1BF
X0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAorICAgIGlmIGNvbnN0ZXhwciAoSklUOjp0aHVua0lz
VXNlZEZvck9wUmVzb2x2ZVNjb3BlKHJlc29sdmVUeXBlKSkgXAorICAgICAgICBjdGlTdHViKHZt
LCBKSVQ6Om9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKTsKKyAgICBG
T1JfRUFDSF9SRVNPTFZFX1RZUEUoSU5JVF9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRl
ZiBJTklUX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICBjdGlTdHViKHZtLCBKSVQ6OnZh
bHVlSXNGYWxzZXlHZW5lcmF0b3IpOworICAgIGN0aVN0dWIodm0sIEpJVDo6dmFsdWVJc1RydXRo
eUdlbmVyYXRvcik7CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICBj
dGlTdHViKHZtLCBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICBjdGlTdHViKHZtLCBhcml0
eUZpeHVwR2VuZXJhdG9yKTsKIH0KIAotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJKHJl
dmlzaW9uIDI3NzkwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDggQEAgcHVibGljOgogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChW
TSYpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjdGlTdHVi
KFZNJiwgVGh1bmtHZW5lcmF0b3IpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gZXhpc3RpbmdDVElTdHViKFRodW5rR2VuZXJhdG9yKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRv
ciwgTm9Mb2NraW5nTmVjZXNzYXJ5VGFnKTsKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGV4aXN0aW5nQ1RJU3R1
YihUaHVua0dlbmVyYXRvcik7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBjdGlTbG93UGF0aEZ1bmN0aW9uU3R1YihWTSYsIFNsb3dQYXRoRnVuY3Rpb24pOwogI2Vu
ZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nsb3dQYXRoQ2FsbC5jcHAJ
KHJldmlzaW9uIDI3NzkwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2xvd1BhdGhD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAKLSAgICBh
dXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKHBvcFRodW5rU3RhY2tQ
cmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vzc2FyeSk7
CisgICAgYXV0byBoYW5kbGVyID0gdm0uaml0U3R1YnMtPmV4aXN0aW5nQ1RJU3R1Yihwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKTsKIAogICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2Zp
bGU6OlRodW5rKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4oc2xvd1BhdGhGdW5jdGlvbikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjc3OTA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw4ICs5MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
cG8KICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKLSAgICBhdXRvIGhhbmRsZXIgPSB2bS5qaXRTdHVicy0+ZXhp
c3RpbmdDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChoYW5kbGVyKTsKKyAgICBhdXRvIGhhbmRsZXIgPSB2bS5q
aXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRs
ZUV4Y2VwdGlvbiIpOwogfQpAQCAtMTMyLDcgKzEzMSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gY2gKICNlbmRpZgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwotICAg
IHBhdGNoQnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9uLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5q
aXRTdHVicy0+ZXhpc3RpbmdDVElTdHViKGhhbmRsZXJHZW5lcmF0b3IsIE5vTG9ja2luZ05lY2Vz
c2FyeSkucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayho
YW5kbGVFeGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHZtLmppdFN0dWJzLT5leGlzdGluZ0NU
SVN0dWIoaGFuZGxlckdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQ2hlY2tF
eGNlcHRpb24iKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0
UHV0SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
dFB1dEluZm8uaAkocmV2aXNpb24gMjc3OTA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0UHV0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArMzksMjEgQEAgZW51
bSBSZXNvbHZlTW9kZSB7CiAgICAgRG9Ob3RUaHJvd0lmTm90Rm91bmQKIH07CiAKKyNkZWZpbmUg
Rk9SX0VBQ0hfUkVTT0xWRV9UWVBFKHYpIFwKKyAgICB2KEdsb2JhbFByb3BlcnR5KSBcCisgICAg
dihHbG9iYWxWYXIpIFwKKyAgICB2KEdsb2JhbExleGljYWxWYXIpIFwKKyAgICB2KENsb3N1cmVW
YXIpIFwKKyAgICB2KExvY2FsQ2xvc3VyZVZhcikgXAorICAgIHYoTW9kdWxlVmFyKSBcCisgICAg
dihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIFwKKyAgICB2KEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpIFwKKyAgICB2KEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSBcCisgICAgdihDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykgXAorICAgIHYoVW5yZXNvbHZlZFByb3BlcnR5KSBcCisgICAgdihVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSBcCisgICAgdihEeW5hbWljKQorCiBlbnVtIFJlc29s
dmVUeXBlIDogdW5zaWduZWQgewogICAgIC8vIExleGljYWwgc2NvcGUgZ3VhcmFudGVlZCBhIGNl
cnRhaW4gdHlwZSBvZiB2YXJpYWJsZSBhY2Nlc3MuCiAgICAgR2xvYmFsUHJvcGVydHksCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDI3NzkwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg4Myw2ICs4ODMsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHB0cmRpZmZfdCByZWdFeHBHbG9iYWxEYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3JlZ0V4cEdsb2JhbERhdGEpOyB9CiAKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVk0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fdm0pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2Jh
bExleGljYWxFbnZpcm9ubWVudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV9nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCk7IH0KIAog
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQogICAgIEluc3BlY3Rvcjo6SlNHbG9iYWxPYmpl
Y3RJbnNwZWN0b3JDb250cm9sbGVyJiBpbnNwZWN0b3JDb250cm9sbGVyKCkgY29uc3QgeyByZXR1
cm4gKm1faW5zcGVjdG9yQ29udHJvbGxlci5nZXQoKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429618</attachid>
            <date>2021-05-24 20:06:21 -0700</date>
            <delta_ts>2021-05-24 20:06:21 -0700</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-226107.patch</filename>
            <type>text/plain</type>
            <size>50870</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDIxLTA1LTI0ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWR1Y2UgQmFzZWxpbmUgSklUIGVtaXR0ZWQgY29kZSBzaXplIGZvciBvcF9qZmFsc2UsIG9wX2p0
cnVlLCBvcF9nZXRfZnJvbV9zY29wZSwgb3BfcmVzb2x2ZV9zY29wZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjEwNworCisgICAgICAgIFJldmll
d2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgIEJlbmNobWFya2luZyB3aXRoIEpldFN0cmVh
bTIgYW5kIFNwZWVkb21ldGVyMiBvbiBNMSBNYWMgc2hvd3MgdGhhdCBwZXJmb3JtYW5jZSBpcwor
ICAgICAgICBuZXV0cmFsLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVkdWNlcyBCYXNlbGluZSBK
SVQgZW1pdHRlZCBjb2RlIHNpZGUgb24gYSBydW4gb2YgSmV0U3RyZWFtMiBDTEkgYnkKKyAgICAg
ICAgYW5vdGhlciB+Ni42TToKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2UgICAgICAgICAg
ICAgICAgICAgICBOZXcgICAgICAgICAgICAgICAgICAgICAgRGlmZgorCisgICAgICAgICAgIEJh
c2VsaW5lSklUOiA2NDk1NTExNiAoNjEuOTQ2MDI2IE1CKSAgNTc5OTE3MDQgKDU1LjMwNTE5OSBN
QikgIDAuODl4IChyZWR1Y3Rpb24pCisgICAgICAgICAgICAgICAgICAgREZHOiAzNjM4MjAxMiAo
MzQuNjk2NTkwIE1CKSAgMzY1NDA2NTIgKDM0Ljg0Nzg4MSBNQikgIDEuMDB4CisgICAgICAgICAg
ICAgICAgIFRodW5rOiAyMzIxNzY5MiAoMjIuMTQyMTE3IE1CKSAgMjMxMTU4NTIgKDIyLjA0NDk5
NCBNQikgIDEuMDB4CisgICAgICAgICAgIElubGluZUNhY2hlOiAyMjIyODE0MCAoMjEuMTk4NDA2
IE1CKSAgMjIyNjI1NzIgKDIxLjIzMTI0MyBNQikgIDEuMDB4CisgICAgICAgICAgICAgICAgICAg
RlRMOiA2MDI1MzIwICg1Ljc0NjE5MyBNQikgICAgNjE2NDMzMiAoNS44Nzg3NjUgTUIpICAgIDEu
MDJ4CisgICAgICAgICAgICAgICAgICBXYXNtOiAyMzI3NjA0ICgyLjIxOTc3NiBNQikgICAgMjI5
NzAzNiAoMi4xOTA2MjQgTUIpICAgIDAuOTl4CisgICAgICAgICAgICAgICBZYXJySklUOiAxNTQ3
MTcyICgxLjQ3NTQ5OCBNQikgICAgMTUyMjU4NCAoMS40NTIwNDkgTUIpICAgIDAuOTh4CisgICAg
ICAgICAgICAgICAgQ1NTSklUOiAwICAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAg
VW5jYXRlZ29yaXplZDogMCAgICAgICAgICAgICAgICAgICAgICAgIDAKKworICAgICAgICBDdW11
bGF0aXZlIGRpZmYgc2luY2UgdGhlIHN0YXJ0IG9mIHRoaXMgZWZmb3J0IHRvIHJlZHVjZSBCYXNl
bGluZSBKSVQgY29kZSBzaXplOgorCisgICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAg
ICAgICAgICAgICAgICAgTmV3ICAgICAgICAgICAgICAgICAgICAgIERpZmYKKworICAgICAgICAg
ICBCYXNlbGluZUpJVDogODkwODk5NjQgKDg0Ljk2MjgxMSBNQikgIDU3OTkxNzA0ICg1NS4zMDUx
OTkgTUIpICAwLjY1eCAocmVkdWN0aW9uKQorICAgICAgICAgICAgICAgICAgIERGRzogMzkxMTcz
NjAgKDM3LjMwNTIyMiBNQikgIDM2NTQwNjUyICgzNC44NDc4ODEgTUIpICAwLjkzeCAocmVkdWN0
aW9uKQorICAgICAgICAgICAgICAgICBUaHVuazogMjMyMzA5NjggKDIyLjE1NDc3OCBNQikgIDIz
MTE1ODUyICgyMi4wNDQ5OTQgTUIpICAxLjAweAorICAgICAgICAgICBJbmxpbmVDYWNoZTogMjIw
Mjc0MTYgKDIxLjAwNjk4MSBNQikgIDIyMjYyNTcyICgyMS4yMzEyNDMgTUIpICAxLjAxeAorICAg
ICAgICAgICAgICAgICAgIEZUTDogNjU3NTc3MiAoNi4yNzExNDUgTUIpICAgIDYxNjQzMzIgKDUu
ODc4NzY1IE1CKSAgICAwLjk0eCAocmVkdWN0aW9uKQorICAgICAgICAgICAgICAgICAgV2FzbTog
MjMwMjcyNCAoMi4xOTYwNDkgTUIpICAgIDIyOTcwMzYgKDIuMTkwNjI0IE1CKSAgICAxLjAweAor
ICAgICAgICAgICAgICAgWWFyckpJVDogMTUzODk1NiAoMS40Njc2NjMgTUIpICAgIDE1MjI1ODQg
KDEuNDUyMDQ5IE1CKSAgICAwLjk5eAorICAgICAgICAgICAgICAgIENTU0pJVDogMCAgICAgICAg
ICAgICAgICAgICAgICAgIDAKKyAgICAgICAgIFVuY2F0ZWdvcml6ZWQ6IDAgICAgICAgICAgICAg
ICAgICAgICAgICAwCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpvZmZzZXRJbk1ldGFkYXRhVGFibGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5
SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZWYWx1
ZSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmJyYW5jaElmVHJ1dGh5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpicmFuY2hJZkZhbHNleSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoK
KyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnZh
bHVlSXNUcnV0aHlHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBqaXQv
SklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6
SklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6OnNs
b3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVu
ayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik6
CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBvcFRo
dW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvR2V0UHV0SW5mby5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCk6CisKIDIwMjEtMDUtMjQgIFNhYW0gQmFyYXRpICA8c2JhcmF0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgQ1RJIHN0dWJzIHRvIGJlIGdlbmVyYXRlZCBv
ZmYgdGhlIG1haW4gdGhyZWFkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5MCw2ICs4OTAsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE1ldGFkYXRhKj4obV9tZXRhZGF0
YS0+Z2V0KG9wY29kZUlEKSlbbWV0YWRhdGFJRF07CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWV0YWRhdGE+CisgICAgcHRyZGlmZl90IG9mZnNldEluTWV0YWRhdGFUYWJsZShNZXRh
ZGF0YSogbWV0YWRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ4
X3QqPihtZXRhZGF0YSkgLSBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KG1ldGFkYXRhVGFibGUoKSk7
CisgICAgfQorCiAgICAgc2l6ZV90IG1ldGFkYXRhU2l6ZUluQnl0ZXMoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5tZXRhZGF0YVNpemVJbkJ5dGVzKCk7CkBAIC04OTgs
NiArOTA0LDcgQEAgcHVibGljOgogICAgIE1ldGFkYXRhVGFibGUqIG1ldGFkYXRhVGFibGUoKSB7
IHJldHVybiBtX21ldGFkYXRhLmdldCgpOyB9CiAgICAgY29uc3Qgdm9pZCogaW5zdHJ1Y3Rpb25z
UmF3UG9pbnRlcigpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcjsgfQogCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX21ldGFkYXRhKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KENvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnNSYXdQb2ludGVyKTsgfQogCiAgICAgYm9vbCBsb29w
SGludHNBcmVFbGlnaWJsZUZvckZ1enppbmdFYXJseVJldHVybigpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNzc5NzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5Nyw3ICs3OTcsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdENv
bnZlcnRWYWx1ZVRvCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQogCi1Bc3NlbWJseUhlbHBlcnM6
Okp1bXBMaXN0IEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZWYWx1ZShWTSYgdm0sIEpTVmFsdWVS
ZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHZhbHVlQXNGUFIsIEZQUlJlZyB0ZW1wRlBSLCBi
b29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgYm9vbCBpbnZlcnQpCitBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2Vt
Ymx5SGVscGVyczo6YnJhbmNoSWZWYWx1ZShWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJS
ZWcgc2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgRlBSUmVnIHZhbHVlQXNGUFIsIEZQUlJlZyB0ZW1wRlBSLCBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgVmFyaWFudDxKU0dsb2JhbE9iamVjdCosIEdQUlJlZz4g
Z2xvYmFsT2JqZWN0LCBib29sIGludmVydCkKIHsKICAgICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xs
b3dpbmcgY29udHJvbCBmbG93IHN0cnVjdHVyZToKICAgICAvLyBpZiAodmFsdWUgaXMgY2VsbCkg
ewpAQCAtODI5LDcgKzgyOSwxMCBAQCBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0IEFzc2VtYmx5
SGVscGVyCiAgICAgICAgIEp1bXBMaXN0IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsKICAg
ICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKICAgICAgICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxvYWRHUFIoKSwgc2NyYXRjaCwgc2NyYXRjaElm
U2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdsb2JhbE9iamVjdCksIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCk7CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpTR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihXVEY6
OmdldDxKU0dsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLCBzY3JhdGNoSWZTaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3Zl
KFdURjo6Z2V0PEdQUlJlZz4oZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKTsKICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwogCiAgICAgICAgIC8vIFdlIGFjdCBsaWtlIHdlIGFyZSAidW5kZWZpbmVkIiBo
ZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiVGFn
UmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlR5cGVvZlR5cGUuaCIKICNpbmNsdWRlICJWTS5o
IgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xODk2
LDEyICsxODk3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihu
dWxscHRyKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkp
OwogICAgIH0KIAotICAgIEp1bXBMaXN0IGJyYW5jaElmVmFsdWUoVk0mLCBKU1ZhbHVlUmVncywg
R1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIEZQUlJlZywgRlBSUmVnLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgSlNHbG9iYWxPYmplY3QqLCBib29sIG5lZ2F0ZVJlc3VsdCk7Ci0gICAgSnVtcExp
c3QgYnJhbmNoSWZUcnV0aHkoVk0mIHZtLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0
Y2gsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZQ
UlJlZyBzY3JhdGNoRlBSMCwgRlBSUmVnIHNjcmF0Y2hGUFIxLCBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICBK
dW1wTGlzdCBicmFuY2hJZlZhbHVlKFZNJiwgSlNWYWx1ZVJlZ3MsIEdQUlJlZyBzY3JhdGNoLCBH
UFJSZWcgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGUFJSZWcs
IEZQUlJlZywgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIFZhcmlhbnQ8
SlNHbG9iYWxPYmplY3QqLCBHUFJSZWc+LCBib29sIG5lZ2F0ZVJlc3VsdCk7CisgICAgSnVtcExp
c3QgYnJhbmNoSWZUcnV0aHkoVk0mIHZtLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0
Y2gsIEdQUlJlZyBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZQ
UlJlZyBzY3JhdGNoRlBSMCwgRlBSUmVnIHNjcmF0Y2hGUFIxLCBib29sIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgVmFyaWFudDxKU0dsb2JhbE9iamVjdCosIEdQUlJlZz4gZ2xv
YmFsT2JqZWN0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGJyYW5jaElmVmFsdWUodm0sIHZhbHVl
LCBzY3JhdGNoLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIHNj
cmF0Y2hGUFIwLCBzY3JhdGNoRlBSMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBnbG9iYWxPYmplY3QsIGZhbHNlKTsKICAgICB9Ci0gICAgSnVtcExpc3QgYnJhbmNoSWZGYWxz
ZXkoVk0mIHZtLCBKU1ZhbHVlUmVncyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gsIEdQUlJlZyBzY3Jh
dGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZQUlJlZyBzY3JhdGNoRlBS
MCwgRlBSUmVnIHNjcmF0Y2hGUFIxLCBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICBKdW1wTGlzdCBicmFuY2hJ
ZkZhbHNleShWTSYgdm0sIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCwgR1BSUmVn
IHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRlBSUmVnIHNjcmF0
Y2hGUFIwLCBGUFJSZWcgc2NyYXRjaEZQUjEsIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBWYXJpYW50PEpTR2xvYmFsT2JqZWN0KiwgR1BSUmVnPiBnbG9iYWxPYmplY3Qp
CiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNoSWZWYWx1ZSh2bSwgdmFsdWUsIHNjcmF0Y2gs
IHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgc2NyYXRjaEZQUjAs
IHNjcmF0Y2hGUFIxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9i
amVjdCwgdHJ1ZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2
aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODksNyArNTg5LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCisjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUp
CisjZW5kaWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19zY29wZSkKIAog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKQEAgLTYyNCw3ICs2
MjYsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkp
CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChyZXNvbHZlX3Njb3BlKQorI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKGNoZWNrX3RkeikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodG9fcHJv
cGVydHlfa2V5KQogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MzAsNyArNzMwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiopOwor
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyNlbmRpZgogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
IAogICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhGdW5jdGlvbik7CkBAIC03OTYs
MTIgKzc5OCw0NSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBzbG93X29wX3B1dF90b19zY29wZUdlbmVyYXRvcihWTSYpOworICAgICAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2Nv
cGVHZW5lcmF0b3IoVk0mKTsKIAogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2VuZXJhdG9yKFZNJik7CiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9wX2Vu
dGVyX2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfcmV0X2hhbmRsZXJHZW5lcmF0b3IoVk0mKTsKICAg
ICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfdGhy
b3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwotI2VuZGlmCisKKyAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHRodW5rSXNVc2VkRm9yT3BHZXRGcm9tU2NvcGUoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEdsb2JhbFZhciBiZWNhdXNlIGl0IGlz
IG1vcmUgZWZmaWNpZW50IHRvIGVtaXQgaW5saW5lIHRoYW4gdXNlIGEgdGh1bmsuCisgICAgICAg
ICAgICAvLyBMb2NhbENsb3N1cmVWYXIgYW5kIE1vZHVsZVZhciBiZWNhdXNlIHdlIGRvbid0IHVz
ZSB0aGVzZSB0eXBlcyB3aXRoIG9wX2dldF9mcm9tX3Njb3BlLgorICAgICAgICAgICAgcmV0dXJu
ICEocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IExvY2FsQ2xvc3Vy
ZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOworICAgICAgICB9CisKKyNkZWZpbmUg
REVDTEFSRV9HRVRfRlJPTV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIFwKKyAgICAgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3BfZ2V0X2Zyb21f
c2NvcGVfIyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJik7CisgICAgICAgIEZPUl9FQUNIX1JF
U09MVkVfVFlQRShERUNMQVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRlZiBERUNM
QVJFX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUgorCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFJlc29sdmVU
eXBlLCBjb25zdCBjaGFyKiB0aHVua05hbWUpOworCisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB0aHVua0lzVXNlZEZvck9wUmVzb2x2ZVNjb3BlKFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBNb2R1bGVWYXIgYmVjYXVzZSBpdCBpcyBtb3Jl
IGVmZmljaWVudCB0byBlbWl0IGlubGluZSB0aGFuIHVzZSBhIHRodW5rLgorICAgICAgICAgICAg
Ly8gTG9jYWxDbG9zdXJlVmFyIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZXNlIHR5cGVzIHdpdGgg
b3BfcmVzb2x2ZV9zY29wZS4KKyAgICAgICAgICAgIHJldHVybiAhKHJlc29sdmVUeXBlID09IExv
Y2FsQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpOworICAgICAgICB9CisK
KyNkZWZpbmUgREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUihyZXNvbHZlVHlwZSkgXAor
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9y
ZXNvbHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYpOworICAgICAgICBGT1Jf
RUFDSF9SRVNPTFZFX1RZUEUoREVDTEFSRV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRl
ZiBERUNMQVJFX1JFU09MVkVfU0NPUEVfR0VORVJBVE9SCisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoUmVz
b2x2ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSk7CisKKyAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihW
TSYpOworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAogICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDE0ICs0
NDcsNTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aQogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBz
Y3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHZhbHVlID0gcmVnVDA7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZt
KCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7CisjZWxzZQorICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCku
Z2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOworICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsK
KyNlbmRpZgorfQorCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYg
dm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBv
bmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0
IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZh
aWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBp
bmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBt
YXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICBKSVQgaml0
KHZtKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IHRydWU7CisKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKKyAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0
T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgYXV0byBpc0ZhbHNleSA9
IGppdC5icmFuY2hJZkZhbHNleSh2bSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2Ny
YXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKKyAgICBKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworCisgICAgaXNGYWxzZXkubGluaygmaml0
KTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKworICAgIGRvbmUubGlu
aygmaml0KTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6
IHZhbHVlSXNmYWxzZXkiKTsKIH0KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKQEAgLTU2OCwxNCArNjA3LDU0IEBAIHZvaWQgSklUOjplbWl0X29wX2p0
cnVlKGNvbnN0IEluc3RydWN0aW8KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEp0cnVlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CisjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CisgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAg
ICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CisjZWxzZQor
ICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzVHJ1dGh5R2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKKyNlbmRpZgogfQogCisjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
dmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgLy8gVGhlIHRodW5rIGdlbmVy
YXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdvcmsgd2l0aCB0aGUgTExJbnQgLyBCYXNl
bGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBy
aWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxlIGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxv
Y2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBv
dGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1l
Ojpjb2RlQmxvY2soKS4KKyAgICBKSVQgaml0KHZtKTsKKworICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWUgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBqaXQudGFn
UmV0dXJuQWRkcmVzcygpOworCisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIg
PSByZWdUMzsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIGdsb2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxP
YmplY3RHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVj
dEdQUik7CisgICAgYXV0byBpc1RydXRoeSA9IGppdC5icmFuY2hJZlRydXRoeSh2bSwgSlNWYWx1
ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3Vs
ZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQu
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKyAgICBKdW1wIGRvbmUgPSBqaXQuanVtcCgp
OworCisgICAgaXNUcnV0aHkubGluaygmaml0KTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKKworICAgIGRvbmUubGluaygmaml0KTsKKyAgICBqaXQucmV0KCk7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpUaHVuayk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHZhbHVlSXNmYWxzZXkiKTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4OTgsNiArMjg5OCw2MCBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dp
dGNoCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKKyNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0cnVjdGlvbiogcGMpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOworCisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29w
ZT4oKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Zhcik7CisgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNPYmplY3Qq
IHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGdsb2JhbE9iamVjdCwgc2NvcGUsIGlk
ZW50KTsKKyAgICAvLyBQcm94eSBjYW4gdGhyb3cgYW4gZXJyb3IgaGVyZSwgZS5nLiBQcm94eSBp
biB3aXRoIHN0YXRlbWVudCdzIEB1bnNjb3BhYmxlcy4KKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHsgfSk7CisKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jayk7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5t
X3Jlc29sdmVUeXBlOworCisgICAgLy8gTW9kdWxlVmFyIGRvZXMgbm90IGtlZXAgdGhlIHNjb3Bl
IHJlZ2lzdGVyIHZhbHVlIGFsaXZlIGluIERGRy4KKyAgICBBU1NFUlQocmVzb2x2ZVR5cGUgIT0g
TW9kdWxlVmFyKTsKKworICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgorICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgorICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBpZiAocmVzb2x2ZWRTY29wZS0+
aXNHbG9iYWxPYmplY3QoKSkgeworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KHJlc29sdmVkU2NvcGUpOworICAgICAgICAg
ICAgYm9vbCBoYXNQcm9wZXJ0eSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBpZGVudCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7CisgICAgICAgICAgICBpZiAoaGFzUHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICBD
b25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAg
ICAgICBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlID0gbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFs
UHJvcGVydHk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9nbG9iYWxPYmplY3Quc2V0KHZt
LCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9n
bG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRT
Y29wZS0+aXNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSkgeworICAgICAgICAgICAgSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQqIGdsb2JhbExleGljYWxFbnZpcm9ubWVudCA9IGpzQ2FzdDxK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudCo+KHJlc29sdmVkU2NvcGUpOworICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAg
ICBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlID0gbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxM
ZXhpY2FsVmFyOworICAgICAgICAgICAgbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuc2V0KHZtLCBjb2RlQmxvY2ssIGdsb2JhbExleGljYWxFbnZpcm9ubWVudCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzb2x2ZWRTY29wZSk7Cit9Cisj
ZW5kaWYKKwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldEZyb21TY29wZSwg
RW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJbnN0
cnVjdGlvbiogcGMpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNzc5
NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg1LDYgKzI4NSw5IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uR2V0UHIKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoQ2hh
cldpdGhVbmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWluKSk7CiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgY2hhcios
IChWTSosIEVuY29kZWRKU1ZhbHVlIGtleSwgc2l6ZV90IHRhYmxlSW5kZXgsIGludDMyX3QgbWlu
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhV
bmtub3duS2V5VHlwZSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlIGtl
eSwgc2l6ZV90IHRhYmxlSW5kZXgpKTsKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUs
IEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBJbnN0cnVjdGlvbiogYnl0
ZWNvZGVQQykpOworI2VuZGlmCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdl
dEZyb21TY29wZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3Ry
dWN0aW9uKiBieXRlY29kZVBDKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blB1dFRvU2NvcGUsIHZvaWQsIChKU0dsb2JhbE9iamVjdCosIGNvbnN0IEluc3RydWN0aW9uKiBi
eXRlY29kZVBDKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzc5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4OSw2
ICsxNTg5LDcgQEAgdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaQogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAorI2lmICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKQEAgLTE2OTIsNiArMTY5MywyNTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICBicmVhazsK
ICAgICB9CiB9CisjZWxzZSAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwordm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVz
b2x2ZVNjb3BlPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOworICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKKworICAgIFZNJiB2bSA9
IHRoaXMtPnZtKCk7CisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09
IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0
KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKKworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDY7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1Q1OworCisgICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikKKyAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDAp
OworICAgIGVsc2UgeworICAgICAgICBwdHJkaWZmX3QgbWV0YWRhdGFPZmZzZXQgPSBtX2NvZGVC
bG9jay0+b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKCZtZXRhZGF0YSk7CisKKyNkZWZpbmUgUkVTT0xW
RV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5cGUpIG9wX3Jlc29sdmVfc2NvcGVfIyNyZXNvbHZl
VHlwZSMjR2VuZXJhdG9yLAorICAgICAgICBzdGF0aWMgY29uc3QgVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yc1tdID0geworICAgICAgICAgICAgRk9SX0VBQ0hfUkVTT0xWRV9UWVBFKFJFU09MVkVf
U0NPUEVfR0VORVJBVE9SKQorICAgICAgICB9OworI3VuZGVmIFJFU09MVkVfU0NPUEVfR0VORVJB
VE9SCisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwor
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZzZXQpLCBtZXRhZGF0YUdQUik7
CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZz
ZXRHUFIpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5nZXRDVElTdHViKGdlbmVyYXRv
cnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIH0KKworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgY29uc3QgY2hhciogdGh1bmtOYW1lKQoreworICAgIC8vIFRoZSB0
aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExM
SW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBh
Ym91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFt
ZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxv
bmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8v
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgdXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVT
Y29wZTo6TWV0YWRhdGE7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3
OyAvLyBpbmNvbWluZworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsgLy8g
aW5jb21pbmcKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7
IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9m
ZnNldEdQUik7CisgICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29w
ZShyZXNvbHZlVHlwZSkpOworCisgICAgdGFnUmV0dXJuQWRkcmVzcygpOworCisgICAgbG9hZFB0
cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBy
ZWdUMyk7CisgICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQUik7CisKKyAgICBKdW1wTGlzdCBz
bG93Q2FzZTsKKworICAgIGF1dG8gZW1pdFZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQ
UlJlZykgeworICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OworICAgICAgICAgICAgbG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgfQorICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1f
dmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICB9OworCisgICAgYXV0
byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
IHsKKyAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKKyAgICAgICAgbW92ZShzY29wZUdQUiwgcmVnVDApOworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX2xvY2FsU2NvcGVEZXB0
aCkpLCByZWdUMSk7CisKKyAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7CisgICAgICAgIEp1
bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdU
MCk7CisgICAgICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgZG9uZS5s
aW5rKHRoaXMpOworICAgIH07CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSkgeworICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CisgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KKyAgICAgICAg
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBnbG9iYWxP
YmplY3RHUFIpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVD
VF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKSksIHJlZ1Qx
KTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhnbG9iYWxPYmplY3RHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxC
aW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBtb3ZlKGdsb2JhbE9iamVjdEdQ
UiwgcmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIC8vIEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpIGZvciBHbG9iYWxWYXIqLAorICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFy
Ki4KKyAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCByZWdUMyk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9j
azo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAg
ICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBlbWl0UmVzb2x2ZUNs
b3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIER5bmFtaWM6CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKKyAgICAgICAgY2FzZSBNb2R1bGVWYXI6CisgICAgICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgorICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9yZXNvbHZlVHlwZSkpLCBy
ZWdUMCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworCisgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDb2RlKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7CisKKyAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOworICAgICAgICBsb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX3Jlc29sdmVUeXBlKSks
IHJlZ1QwKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7
CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Cisg
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwor
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRo
aXMsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmspOworICAgIGF1
dG8gc2xvd0Nhc2VIYW5kbGVyID0gdm0oKS5nZXRDVElTdHViKHNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcik7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9u
TGFiZWwoc2xvd0Nhc2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1l
KTsKK30KKworI2RlZmluZSBERUZJTkVfUkVTT0xWRV9TQ09QRV9HRU5FUkFUT1IocmVzb2x2ZVR5
cGUpIFwKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF9yZXNv
bHZlX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVyYXRvcihWTSYgdm0pIFwKKyAgICB7IFwKKyAg
ICAgICAgaWYgY29uc3RleHByICghdGh1bmtJc1VzZWRGb3JPcFJlc29sdmVTY29wZShyZXNvbHZl
VHlwZSkpIFwKKyAgICAgICAgICAgIHJldHVybiB7IH07IFwKKyAgICAgICAgSklUIGppdCh2bSk7
IFwKKyAgICAgICAgcmV0dXJuIGppdC5nZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsocmVzb2x2
ZVR5cGUsICJCYXNlbGluZTogb3BfcmVzb2x2ZV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKKyAg
ICB9CitGT1JfRUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX1JFU09MVkVfU0NPUEVfR0VORVJBVE9S
KQorI3VuZGVmIERFRklORV9SRVNPTFZFX1NDT1BFX0dFTkVSQVRPUgorCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJh
dG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisg
ICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBi
ZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9G
VEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMs
IHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAg
IEpJVCBqaXQodm0pOworCisgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUg
cmV0dXJuIGFkZHJlc3MuCisjaWYgQ1BVKFg4Nl82NCkKKyAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgaml0LnN0b3JlMzIoYnl0ZWNvZGVPZmZz
ZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
OworCisgICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQUjM7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CisgICAg
Y29uc3RleHByIEdQUlJlZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3VtZW50R1BSMTsKKworICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2Nr
R1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubG9hZFB0
cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0aW9uc1Jh
d1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQuYWRkUHRyKGJ5dGVjb2RlT2Zm
c2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7CisKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5
cGUob3BlcmF0aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUpPihnbG9iYWxPYmplY3RHUFIsIGlu
c3RydWN0aW9uR1BSKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIENh
bGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBKdW1wIGV4Y2Vw
dGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CisKKyNp
ZiBDUFUoWDg2XzY0KQorICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOworI2VsaWYgQ1BV
KEFSTTY0KQorICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbmRpZgorICAgIGppdC5yZXQoKTsK
KworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKG9wZXJhdGlvbiwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNl
bGluZSkpOworICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIocG9wVGh1bmtTdGFja1By
ZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7CisgICAgcGF0Y2hCdWZmZXIubGlu
ayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjplbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVy
ZVNsb3QpCiB7CkBAIC0xNzE5LDYgKzE5NjYsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgcmVnVDApOwogfQogCisjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKQEAgLTE4NDQsMjYgKzIwOTIsMjMyIEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZShjb24KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0KLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotI2Vsc2UKK30KKworI2Vsc2UgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisK
K3ZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Cisg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKKwogICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7CiAgICAgdWludDMyX3QgYnl0ZWNv
ZGVPZmZzZXQgPSBtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCk7CiAgICAgQVNTRVJUKEJ5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3Ry
dWN0aW9uKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1
bWVudEdQUjI7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29k
ZU9mZnNldEdQUik7CisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q3Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUNjsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsVmFyKSB7CisgICAgICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOworICAgICAgICBlbWl0R2V0
VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdU
MCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHRyZGlmZl90IG1ldGFkYXRhT2Zmc2V0ID0gbV9j
b2RlQmxvY2stPm9mZnNldEluTWV0YWRhdGFUYWJsZSgmbWV0YWRhdGEpOwogCi0gICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworI2RlZmluZSBHRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IocmVzb2x2ZVR5cGUpIG9wX2dldF9mcm9tX3Njb3BlXyMjcmVzb2x2ZVR5cGUjI0dlbmVy
YXRvciwKKyAgICAgICAgc3RhdGljIGNvbnN0IFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcnNbXSA9
IHsKKyAgICAgICAgICAgIEZPUl9FQUNIX1JFU09MVkVfVFlQRShHRVRfRlJPTV9TQ09QRV9HRU5F
UkFUT1IpCisgICAgICAgIH07CisjdW5kZWYgR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLSNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgc2NvcGVHUFIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGFPZmZz
ZXQpLCBtZXRhZGF0YUdQUik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zm
c2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bS5n
ZXRDVElTdHViKGdlbmVyYXRvcnNbcmVzb2x2ZVR5cGVdKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOworICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKLSNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUsIGNvbnN0IGNoYXIqIHRodW5rTmFtZSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJh
dGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2Vs
aW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJp
Z2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9j
aygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90
aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6
OmNvZGVCbG9jaygpLgorICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFk
YXRhOworICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDY7CisgICAgUkVMRUFTRV9BU1NFUlQodGh1bmtJ
c1VzZWRGb3JPcEdldEZyb21TY29wZShyZXNvbHZlVHlwZSkpOworCisgICAgdGFnUmV0dXJuQWRk
cmVzcygpOworCisgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0
T2ZNZXRhZGF0YVRhYmxlKCkpLCByZWdUMyk7CisgICAgYWRkUHRyKHJlZ1QzLCBtZXRhZGF0YUdQ
Uik7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZTsKKworICAgIGF1dG8gZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2sgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgaW50MzJfdCBtZXRhZGF0YVN0cnVj
dHVyZU9mZnNldCkgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIG1ldGFk
YXRhU3RydWN0dXJlT2Zmc2V0KSwgcmVnVDEpOworICAgICAgICBtb3ZlKHNjb3BlR1BSLCByZWdU
MCk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7
CisgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsK
KyAgICB9OworCisgICAgYXV0byBlbWl0VmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKKyAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7CisgICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgfTsKKyAgICAK
KyAgICBhdXRvIGVtaXRHZXRWYXJGcm9tUG9pbnRlciA9IFsmXSAoaW50MzJfdCBvcGVyYW5kLCBH
UFJSZWcgcmVnKSB7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgb3BlcmFu
ZCksIHJlZyk7CisgICAgICAgIGxvYWRQdHIocmVnLCByZWcpOworICAgIH07CisKKyAgICBhdXRv
IGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyID0gWyZdIChpbnQzMl90IG9wZXJhbmQsIEdQ
UlJlZyByZWcpIHsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBvcGVyYW5k
KSwgcmVnKTsKKyAgICAgICAgbG9hZFB0cihyZWcsIHJlZyk7CisgICAgfTsKKworICAgIGF1dG8g
ZW1pdEdldENsb3N1cmVWYXIgPSBbJl0gKEdQUlJlZyBzY29wZUdQUiwgR1BSUmVnIG9wZXJhbmRH
UFIpIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7
CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgb3BlcmFuZEdQUik7CisgICAgICAg
IGFkZFB0cihzY29wZUdQUiwgb3BlcmFuZEdQUik7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhv
cGVyYW5kR1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJl
Z1QwKTsKKyAgICB9OworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CisgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CisgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFk
YXRhLCBtX3N0cnVjdHVyZSkpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KKworICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBi
YXNlID0gcmVnVDA7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHJlc3VsdCA9IHJlZ1Qw
OworICAgICAgICAgICAgY29uc3RleHByIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKKyAgICAgICAg
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworCisgICAgICAgICAgICBqaXRB
c3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAg
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOworICAgICAgICAgICAgICAgIHJldHVybiBi
cmFuY2hQdHIoRXF1YWwsIGJhc2UsIHJlZ1QzKTsKKyAgICAgICAgICAgIH0pKTsKKworICAgICAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRh
dGEsIG1fb3BlcmFuZCkpLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsK
KyAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUp
OworICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgICAgICBuZWczMihvZmZzZXQpOworICAgICAgICAg
ICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDY0
KEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdsb2JhbFZhcjoKKyAgICAgICAgY2Fz
ZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKQorICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKE9C
SkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9vcGVyYW5kKSwgcmVnVDApOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihPQkpFQ1RfT0ZGU0VU
T0YoTWV0YWRhdGEsIG1fb3BlcmFuZCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCisgICAgICAgICAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgT0JKRUNUX09GRlNFVE9GKE1ldGFkYXRhLCBtX29wZXJhbmQp
KSwgcmVnVDMpOworICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGVHUFIsIHJlZ1Qz
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIER5bmFtaWM6CisgICAgICAgICAg
ICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBNb2R1bGVWYXI6CisgICAgICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
KyAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgorICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKKyAgICAgICAg
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9n
ZXRQdXRJbmZvKSksIHJlZ1QwKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKworICAg
ICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAg
aXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBlbWl0Q29kZShuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOworCisgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKKyAgICAgICAgbG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE9CSkVDVF9PRkZTRVRPRihNZXRhZGF0YSwgbV9nZXRQdXRJbmZv
KSksIHJlZ1QwKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKworICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwor
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUp
OworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
anVtcCgpKTsKKworICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZh
bHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3RhdGljX2Fzc2VydChWYWx1ZVBy
b2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKKyAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoTWV0YWRhdGEsIG1fcHJvZmlsZSkpKTsKKwor
ICAgIHJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CisgICAgYXV0byBzbG93Q2FzZUhh
bmRsZXIgPSB2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik7
CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZSwgQ29kZUxvY2F0aW9uTGFiZWwoc2xvd0Nh
c2VIYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgdGh1bmtOYW1lKTsKK30KKworI2Rl
ZmluZSBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SKHJlc29sdmVUeXBlKSBcCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfZ2V0X2Zyb21fc2NvcGVf
IyNyZXNvbHZlVHlwZSMjR2VuZXJhdG9yKFZNJiB2bSkgXAorICAgIHsgXAorICAgICAgICBpZiBj
b25zdGV4cHIgKCF0aHVua0lzVXNlZEZvck9wR2V0RnJvbVNjb3BlKHJlc29sdmVUeXBlKSkgXAor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsgXAorICAgICAgICBKSVQgaml0KHZtKTsgXAorICAgICAg
ICByZXR1cm4gaml0LmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhyZXNvbHZlVHlwZSwgIkJh
c2VsaW5lOiBvcF9nZXRfZnJvbV9zY29wZV8iICNyZXNvbHZlVHlwZSk7IFwKKyAgICB9CitGT1Jf
RUFDSF9SRVNPTFZFX1RZUEUoREVGSU5FX0dFVF9GUk9NX1NDT1BFX0dFTkVSQVRPUikKKyN1bmRl
ZiBERUZJTkVfR0VUX0ZST01fU0NPUEVfR0VORVJBVE9SCisKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bSkKIHsKICAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2Fu
IG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCkBAIC0xODc1
LDExICsyMzI5LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSkkK
ICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKICNlbGlm
IENQVShBUk02NCkKLSAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogICAgIGppdC5wdXNoUGFp
cihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICNlbmRpZgogCi0gICAgY29u
c3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IGFyZ3VtZW50R1BSMjsKKyAgICB1c2lu
ZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDc7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9m
ZnNldEdQUiA9IHJlZ1Q1OwogICAgIGppdC5zdG9yZTMyKGJ5dGVjb2RlT2Zmc2V0R1BSLCB0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOwpAQCAtMTg5MSwxMCAr
MjM0NiwxNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0
cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7CiAgICAgaml0LmFkZFB0cihi
eXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogCisgICAgQVNTRVJUKFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIpKTsKKyAgICBqaXQubW92ZShtZXRhZGF0YUdQUiwgR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIpOyAvLyBQcmVzZXJ2ZSBtZXRhZGF0YSBpbiBhIGNhbGxlZSBzYXZlZCByZWdpc3Rlci4K
ICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0RnJvbVNjb3BlKT4o
Z2xvYmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3Bl
cmF0aW9uKHZtKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwo
T3BlcmF0aW9uUHRyVGFnKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXhjZXB0aW9uQ2hlY2sg
PSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKKyAgICBDYWxsIG9wZXJh
dGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CisgICAgSnVtcCBleGNlcHRpb25DaGVj
ayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOworCisgICAgaml0LnN0
b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE9CSkVDVF9P
RkZTRVRPRihNZXRhZGF0YSwgbV9wcm9maWxlKSkpOworICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CiAKICNp
ZiBDUFUoWDg2XzY0KQogICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOwpAQCAtMTkwMywx
MCArMjM2MywxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJCiAj
ZW5kaWYKICAgICBqaXQucmV0KCk7CiAKKyAgICBleGNlcHRpb25DaGVjay5saW5rKCZqaXQpOwor
ICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7CisgICAgSnVtcCBqdW1wVG9IYW5kbGVyID0gaml0Lmp1bXAoKTsK
KwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwogICAgIHBhdGNoQnVmZmVyLmxpbmsob3Bl
cmF0aW9uLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldEZyb21TY29w
ZSkpOwogICAgIGF1dG8gaGFuZGxlciA9IHZtLmdldENUSVN0dWIocG9wVGh1bmtTdGFja1ByZXNl
cnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcik7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhl
eGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2Nh
dGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUiKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAJKHJldmlzaW9uIDI3Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNiBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvCiAKICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNU
SVRodW5rKTsKICAgICBhdXRvIGhhbmRsZXIgPSB2bS5nZXRDVElTdHViKGhhbmRsZUV4Y2VwdGlv
bkdlbmVyYXRvcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaGFuZGxlcik7CiAgICAgcGF0Y2hCdWZm
ZXIubGluayhjb250aW51YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlv
biIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0UHV0SW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldFB1dEluZm8u
aAkocmV2aXNpb24gMjc3OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0
UHV0SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksNiArMzksMjEgQEAgZW51bSBSZXNvbHZl
TW9kZSB7CiAgICAgRG9Ob3RUaHJvd0lmTm90Rm91bmQKIH07CiAKKyNkZWZpbmUgRk9SX0VBQ0hf
UkVTT0xWRV9UWVBFKHYpIFwKKyAgICB2KEdsb2JhbFByb3BlcnR5KSBcCisgICAgdihHbG9iYWxW
YXIpIFwKKyAgICB2KEdsb2JhbExleGljYWxWYXIpIFwKKyAgICB2KENsb3N1cmVWYXIpIFwKKyAg
ICB2KExvY2FsQ2xvc3VyZVZhcikgXAorICAgIHYoTW9kdWxlVmFyKSBcCisgICAgdihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIFwKKyAgICB2KEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIFwKKyAgICB2KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSBcCisgICAgdihDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgXAorICAg
IHYoVW5yZXNvbHZlZFByb3BlcnR5KSBcCisgICAgdihVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSBcCisgICAgdihEeW5hbWljKQorCiBlbnVtIFJlc29sdmVUeXBlIDog
dW5zaWduZWQgewogICAgIC8vIExleGljYWwgc2NvcGUgZ3VhcmFudGVlZCBhIGNlcnRhaW4gdHlw
ZSBvZiB2YXJpYWJsZSBhY2Nlc3MuCiAgICAgR2xvYmFsUHJvcGVydHksCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3
Nzk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg4Myw2ICs4ODMsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0
cmRpZmZfdCByZWdFeHBHbG9iYWxEYXRhT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTR2xvYmFsT2JqZWN0LCBtX3JlZ0V4cEdsb2JhbERhdGEpOyB9CiAKICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mVk0oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmpl
Y3QsIG1fdm0pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkdsb2JhbExleGljYWxF
bnZpcm9ubWVudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9n
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNH
bG9iYWxPYmplY3QsIG1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCk7IH0KIAogI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQogICAgIEluc3BlY3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyJiBpbnNwZWN0b3JDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gKm1faW5z
cGVjdG9yQ29udHJvbGxlci5nZXQoKTsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>