<?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>105750</bug_id>
          
          <creation_ts>2012-12-25 19:40:47 -0800</creation_ts>
          <short_desc>All JIT stubs should go through the getCTIStub API</short_desc>
          <delta_ts>2012-12-27 23:48:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>105744</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>797215</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-25 19:40:47 -0800</bug_when>
    <thetext>Some of them are currently generated using the privateCompileCTITrampoline method.  That method is starting to get messy and has a lot of 8-way code duplication (link versus virtual, call versus construct, 32_64 versus 64).

Work in progress patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797216</commentid>
    <comment_count>1</comment_count>
      <attachid>180723</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-25 19:41:44 -0800</bug_when>
    <thetext>Created attachment 180723
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797314</commentid>
    <comment_count>2</comment_count>
      <attachid>180749</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-26 08:20:52 -0800</bug_when>
    <thetext>Created attachment 180749
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797315</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-26 08:24:17 -0800</bug_when>
    <thetext>Attachment 180749 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/jit/ThunkGenerators.cpp:237:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/ThunkGenerators.cpp:261:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/ThunkGenerators.cpp:284:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/ThunkGenerators.cpp:326:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 4 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797624</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-27 10:46:01 -0800</bug_when>
    <thetext>This appears to have set the bots on fire.

Before: http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r138412%20(5567)/results.html
After: http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r138413%20(5568)/results.html

Locally, I&apos;m getting crashes on each test run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797625</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-27 10:49:50 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This appears to have set the bots on fire.
&gt; 
&gt; Before: http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r138412%20(5567)/results.html
&gt; After: http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r138413%20(5568)/results.html
&gt; 
&gt; Locally, I&apos;m getting crashes on each test run.

Oh noes, I commented on the wrong bug. :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797685</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-27 15:13:57 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/138516</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797775</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-12-27 23:48:06 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Landed in http://trac.webkit.org/changeset/138516

It broke the MIPS, SH4 and the ARM build:

SH4 build log:
/local/wkit/slavebuildbot/workspace/qt-linux-sh4-release/build/Source/JavaScriptCore/jit/ThunkGenerators.cpp: In function ‘JSC::MacroAssemblerCodeRef JSC::nativeForGenerator(JSC::JSGlobalData*, JSC::CodeSpecializationKind)’:
/local/wkit/slavebuildbot/workspace/qt-linux-sh4-release/build/Source/JavaScriptCore/jit/ThunkGenerators.cpp:311:41: error: ‘regT5’ was not declared in this scope
/local/wkit/slavebuildbot/workspace/qt-linux-sh4-release/build/Source/JavaScriptCore/jit/ThunkGenerators.cpp:384:12: error: ‘toCString’ was not declared in this scope


MIPS build log:
/data/buildbot/mips-1/qt-linux-mipsel-mips32r2-release/build/Source/JavaScriptCore/jit/ThunkGenerators.cpp: In function &apos;JSC::MacroAssemblerCodeRef JSC::nativeForGenerator(JSC::JSGlobalData*, JSC::CodeSpecializationKind)&apos;:
/data/buildbot/mips-1/qt-linux-mipsel-mips32r2-release/build/Source/JavaScriptCore/jit/ThunkGenerators.cpp:384: error: &apos;toCString&apos; was not declared in this scope


ARM build log:
/mnt/raptor2/slaves/qt5-linux-armv7-release/build/Source/JavaScriptCore/jit/ThunkGenerators.cpp: In function &apos;JSC::MacroAssemblerCodeRef JSC::nativeForGenerator(JSC::JSGlobalData*, JSC::CodeSpecializationKind)&apos;:
/mnt/raptor2/slaves/qt5-linux-armv7-release/build/Source/JavaScriptCore/jit/ThunkGenerators.cpp:293:42: error: &apos;regT3&apos; was not declared in this scope


Trivial fixes landed in:
- https://trac.webkit.org/changeset/138522
- https://trac.webkit.org/changeset/138523</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180723</attachid>
            <date>2012-12-25 19:41:44 -0800</date>
            <delta_ts>2012-12-26 08:20:52 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>ctistubs.patch</filename>
            <type>text/plain</type>
            <size>51650</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NDcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEyLTEyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWxsIEpJVCBzdHVicyBzaG91bGQgZ28gdGhyb3VnaCB0aGUgZ2V0Q1RJU3R1YiBBUEkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTc1MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBp
biBwcm9ncmVzcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9w
Q2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAg
ICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuaDoK
KyAgICAgICAgKEpJVFRodW5rcyk6CisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6Cisg
ICAgICAgIChKU0ludGVyZmFjZUpJVCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjpl
bWl0SnVtcElmTm90SlNDZWxsKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTSW50
ZXJmYWNlSklUOjplbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKToKKyAgICAgICAgKEpTQzo6
SlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RUeXBlKToKKyAgICAgICAgKEpTQzo6SlNJbnRl
cmZhY2VKSVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKToKKyAgICAgICAgKEpTQzo6
SlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6
OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIpOgorICAg
ICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcik6
CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6cmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4pOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFjZUpJVDo6cmVzdG9yZUFy
Z3VtZW50UmVmZXJlbmNlKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAg
ICAgICAgKEpTQzo6Z2VuZXJhdGVTbG93Q2FzZUZvcik6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpsaW5rRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua0NhbGxHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ29uc3RydWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6dmlydHVhbEZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnZpcnR1YWxDYWxsR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbENvbnN0cnVjdEdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OnN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9U
aHVua0dlbmVyYXRvcnMuaDoKKyAgICAgICAgKEpTQyk6CisKIDIwMTItMTItMjUgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKSVRUaHVua3Mgc2hvdWxkIGJlIGlu
IGl0cyBvd24gZmlsZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDEzODQ2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoSlNHbG9iYWxEYXRhJiAKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKICAgICB9IGVsc2UKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbFJldHVybkxvY2F0aW9uLCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3Qg
PyBnbG9iYWxEYXRhLmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpIDogZ2xvYmFs
RGF0YS5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkpOworICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGds
b2JhbERhdGEuZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkgOiBnbG9i
YWxEYXRhLmdldENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgaGFzU2Vl
blNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKICAgICBjYWxsZWUuY2xlYXIoKTsKICAgICBzdHViLmNs
ZWFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMzg0NjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3MCwxMiArODcwLDEyIEBAIHZvaWQgSklUOjpsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwg
Q28KIAogICAgIC8vIFBhdGNoIHRoZSBzbG93IHBhdGNoIHNvIHdlIGRvIG5vdCBjb250aW51ZSB0
byB0cnkgdG8gbGluay4KICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsKCkpOworICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+
Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdCgpKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiwgZ2xvYmFsRGF0YS0+
Z2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKS5jb2RlKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTM4
NDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQxLDcgKzQ0MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRMb2Fk
RG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKICAgICAgICAgdm9pZCBlbWl0
TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogICAgICAg
ICBKdW1wIGVtaXRKdW1wSWZOb3RPYmplY3QoUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcpOwotICAg
ICAgICBKdW1wIGVtaXRKdW1wSWZOb3RUeXBlKFJlZ2lzdGVySUQgYmFzZVJlZywgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnLCBKU1R5cGUpOwogCiAgICAgICAgIEp1bXAgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKEpTQ2VsbCosIFN0cnVjdHVyZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgUmVnaXN0
ZXJJRCBzY3JhdGNoKTsKICAgICAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
SlNDZWxsKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBSZWdpc3RlcklEIHNjcmF0Y2gpOwpAQCAtNTk2LDcgKzU5NSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRKdW1wSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAg
ICAgIEp1bXAgZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJl
Z2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZkpTQ2VsbChSZWdpc3Rl
cklEKTsKLSAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwogICAg
ICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCwgaW50IFZSZWcp
OwogICAgICAgICBKdW1wIGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQpOwpA
QCAtNjA3LDcgKzYwNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXJzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJl
Z2lzdGVySUQpOwogCiAgICAgICAgIHZvaWQgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpOwotICAgICAgICB2b2lkIGVtaXRGYXN0QXJp
dGhJbnRUb0ltbU5vQ2hlY2soUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCk7CiAKICAg
ICAgICAgdm9pZCBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFJlZ2lzdGVySUQgcmVnKTsKICAgICAg
ICAgdm9pZCBjb21waWxlQmluYXJ5QXJpdGhPcChPcGNvZGVJRCwgdW5zaWduZWQgZHN0LCB1bnNp
Z25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyLCBPcGVyYW5kVHlwZXMgb3BpKTsKQEAgLTgyMywxMCAr
ODIwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVy
KHVuc2lnbmVkIGRzdCk7CiAKLSAgICAgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
UmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSk7Ci0gICAgICAg
IHZvaWQgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5KTsKICAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxs
RnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQq
IHZhbHVlLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSk7CiAgICAgICAgIHZvaWQgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnks
IFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAg
ICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjMyKEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTg1NywxNiArODUxLDExIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIEp1bXAgY2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCByZWcs
IFN0cnVjdHVyZSogc3RydWN0dXJlKTsKIAotICAgICAgICB2b2lkIHJlc3RvcmVBcmd1bWVudFJl
ZmVyZW5jZSgpOwogICAgICAgICB2b2lkIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1w
b2xpbmUoKTsKICAgICAgICAgdm9pZCB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKIAogICAgICAgICBD
YWxsIGVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbiA9IENvZGVQdHIoKSk7CiAKLSAgICAg
ICAgdm9pZCBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCk7Ci0gICAg
ICAgIHZvaWQgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCk7Ci0g
ICAgICAgIHZvaWQgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyk7Ci0K
ICAgICAgICAgLy8gTG9hZHMgdGhlIGNoYXJhY3RlciB2YWx1ZSBvZiBhIHNpbmdsZSBjaGFyYWN0
ZXIgc3RyaW5nIGludG8gZHN0LgogICAgICAgICB2b2lkIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5n
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKTsKICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3Bw
CShyZXZpc2lvbiAxMzg0NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIEpJVDo6Y29t
cGlsZUNhbGxFdmFsU2xvd0Nhc2UoVmVjdG9yCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAg
ICAgZW1pdExvYWQoSlNTdGFjazo6Q2FsbGVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROYWtl
ZENhbGwobV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CisgICAgZW1p
dE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5lcmF0b3Ip
KTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiB9CkBAIC0yOTcsNyArMjk3
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRAogICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgCi0gICAgbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVy
bkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX2ds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpIDogbV9nbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkpOworICAgIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV9nbG9iYWxEYXRh
LT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fZ2xvYmFsRGF0
YS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNv
ZGVCbG9jayhtX2NvZGVCbG9jayk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAJKHJldmlzaW9uIDEzODQ2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoVmVjdG9yCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwog
CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsZWUsIHJlZ1Qw
KTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxD
YWxsKCkpOworICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1
YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJs
b2NrKTsKIH0KQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKE9wY29kZUlECiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgCi0gICAgbV9jYWxs
U3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVy
bkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX2ds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluaygpIDogbV9nbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGxMaW5rKCkpOworICAgIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IGVtaXROYWtlZENhbGwob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gbV9nbG9iYWxEYXRh
LT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fZ2xvYmFsRGF0
YS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKIAogICAgIHNhbXBsZUNv
ZGVCbG9jayhtX2NvZGVCbG9jayk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkocmV2aXNpb24gMTM4NDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE2ICs0Miw2IEBAIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3AKICAgICByZXR1cm4gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRD
ZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSkKLXsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoZW50cnksIGNhbGxGcmFtZVJl
Z2lzdGVyKSk7Ci0gICAgc3RvcmUzMihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVS
ZWdpc3RlcikpOwotI2Vsc2UKLSAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNh
bGxGcmFtZVJlZ2lzdGVyKSk7Ci0jZW5kaWYKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2Fs
bEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCiB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTYy
LDIwICs1Miw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGwKICNl
bmRpZgogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFk
ZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkK
LXsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHN0b3JlUHRyKGZyb20sIHBheWxvYWRGb3Io
ZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHN0b3JlNjQoZnJvbSwgYWRk
cmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSNlbmRpZgotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCog
dmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQotewotICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRy
eSAqIHNpemVvZihSZWdpc3RlcikpKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkg
ZW50cnksIFJlZ2lzdGVySUQgdG8sIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAgICBsb2FkUHRyKEFk
ZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOwpAQCAtMTk1LDgxICsx
NzEsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbmRVbmludGVycnVwdGVkCiAKICNlbmRp
ZgogCi0jaWYgQ1BVKEFSTSkKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJlc2VydmVSZXR1
cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIG1vdmUobGlua1JlZ2lz
dGVyLCByZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBtb3ZlKHJlZywgbGlua1Jl
Z2lzdGVyKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQotewotICAgIGxvYWRQdHIoYWRkcmVzcywg
bGlua1JlZ2lzdGVyKTsKLX0KLSNlbGlmIENQVShTSDQpCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKLXsKLSAg
ICBtX2Fzc2VtYmxlci5zdHNwcihyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKLXsKLSAgICBt
X2Fzc2VtYmxlci5sZHNwcihyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCi17Ci0gICAgbG9h
ZFB0ckxpbmtSZWcoYWRkcmVzcyk7Ci19Ci0KLSNlbGlmIENQVShNSVBTKQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCBy
ZWcpCi17Ci0gICAgbW92ZShyZXR1cm5BZGRyZXNzUmVnaXN0ZXIsIHJlZyk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lz
dGVySUQgcmVnKQotewotICAgIG1vdmUocmVnLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihBZGRyZXNzIGFkZHJlc3MpCi17Ci0gICAgbG9hZFB0cihhZGRyZXNzLCByZXR1cm5BZGRyZXNz
UmVnaXN0ZXIpOwotfQotCi0jZWxzZSAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0
ZXJJRCByZWcpCi17Ci0gICAgcG9wKHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewotICAg
IHB1c2gocmVnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQotewotICAgIHB1c2goYWRkcmVzcyk7
Ci19Ci0KLSNlbmRpZgotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRS
ZWZlcmVuY2UoKQotewotICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1l
bnRSZWdpc3Rlcik7Ci0gICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9G
KHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFtZSgpCiB7CiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludD4obV9ieXRlY29kZU9mZnNldCkgPj0gMCk7CkBAIC0zNTEsMTIg
KzI1Miw2IEBAIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk4KICAgICBy
ZXR1cm4gYnJhbmNoOChCZWxvdywgQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpOwogfQogCi1BTFdB
WVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RUeXBlKFJlZ2lzdGVySUQgYmFz
ZVJlZywgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnLCBKU1R5cGUgdHlwZSkKLXsKLSAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hSZWcp
OwotICAgIHJldHVybiBicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hSZWcsIFN0cnVj
dHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSkpOwotfQotCiAj
aWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6c2V0U2Ft
cGxpbmdGbGFnKGludDMyX3QgZmxhZykKIHsKQEAgLTkyOCwxMSArODIzLDYgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1w
SWZKU0NlbGwocmVnKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1
bXBJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZykKLXsKLSAgICByZXR1cm4gYnJhbmNoVGVzdDY0
KE5vblplcm8sIHJlZywgdGFnTWFza1JlZ2lzdGVyKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQogewogICAg
IGFkZFNsb3dDYXNlKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnKSk7CkBAIC05OTksMTQgKzg4OSw2
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhSZVQKICAgICBlbWl0RmFz
dEFyaXRoSW50VG9JbW1Ob0NoZWNrKHNyYywgZGVzdCk7CiB9CiAKLS8vIG9wZXJhbmQgaXMgaW50
MzJfdCwgbXVzdCBoYXZlIGJlZW4gemVyby1leHRlbmRlZCBpZiByZWdpc3RlciBpcyA2NC1iaXQu
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCi17Ci0gICAgaWYgKHNyYyAhPSBkZXN0KQot
ICAgICAgICBtb3ZlKHNyYywgZGVzdCk7Ci0gICAgb3I2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IGRlc3QpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0VGFnQXNCb29sSW1tZWRp
YXRlKFJlZ2lzdGVySUQgcmVnKQogewogICAgIG9yMzIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDEzODQ2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTgxICs0MywxOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogUGFzc1JlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGlu
ZXMpCiB7Ci0gICAgLy8gKDEpIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBh
Y2Nlc3MgZm9yIHN0cmluZyBsZW5ndGgKLSAgICBMYWJlbCBzdHJpbmdMZW5ndGhCZWdpbiA9IGFs
aWduKCk7Ci0KLSAgICAvLyByZWdUMCBob2xkcyBwYXlsb2FkLCByZWdUMSBob2xkcyB0YWcKLQot
ICAgIEp1bXAgc3RyaW5nX2ZhaWx1cmVDYXNlczEgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgSnVtcCBzdHJpbmdfZmFpbHVy
ZUNhc2VzMiA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKSk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJv
bSB0aGUgVXN0cmluZy4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9G
KEpTU3RyaW5nLCBtX2xlbmd0aCkpLCByZWdUMik7Ci0KLSAgICBKdW1wIHN0cmluZ19mYWlsdXJl
Q2FzZXMzID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSU5UX01BWCkpOwot
ICAgIG1vdmUocmVnVDIsIHJlZ1QwKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlZ1QxKTsKLQotICAgIHJldCgpOwotICAgIAotICAgIEp1bXBMaXN0IGNhbGxT
bG93Q2FzZTsKLSAgICBKdW1wTGlzdCBjb25zdHJ1Y3RTbG93Q2FzZTsKLQotICAgIC8vIFZpcnR1
YWxDYWxsTGluayBUcmFtcG9saW5lCi0gICAgLy8gcmVnVDEsIHJlZ1QwIGhvbGRzIGNhbGxlZTsg
Y2FsbEZyYW1lIGlzIG1vdmVkIGFuZCBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuCi0gICAgTGFiZWwg
dmlydHVhbENhbGxMaW5rQmVnaW4gPSBhbGlnbigpOwotICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
KTsKLSAgICBjYWxsU2xvd0Nhc2UuYXBwZW5kKGVtaXRKdW1wSWZOb3RUeXBlKHJlZ1QwLCByZWdU
MSwgSlNGdW5jdGlvblR5cGUpKTsKLQotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6
YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7Ci0gICAgZW1p
dFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0K
LSAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgZm9yIHVzZSBieSBsYXp5IGxpbmtpbmcg
YW5kIGV4Y2VwdGlvbnMuCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1Qz
KTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIEpTU3RhY2s6OlJldHVyblBD
KTsKLSAgICAKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+
dG9wQ2FsbEZyYW1lKTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxs
IGNhbGxMYXp5TGlua0NhbGwgPSBjYWxsKCk7Ci0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZv
cmVSZXR1cm4ocmVnVDMpOwotICAgIGp1bXAocmVnVDApOwotCi0gICAgLy8gVmlydHVhbENvbnN0
cnVjdExpbmsgVHJhbXBvbGluZQotICAgIC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWU7IGNh
bGxGcmFtZSBpcyBtb3ZlZCBhbmQgcGFydGlhbGx5IGluaXRpYWxpemVkLgotICAgIExhYmVsIHZp
cnR1YWxDb25zdHJ1Y3RMaW5rQmVnaW4gPSBhbGlnbigpOwotICAgIGNvbnN0cnVjdFNsb3dDYXNl
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSkpOwotICAgIGNvbnN0cnVjdFNsb3dDYXNlLmFwcGVuZChlbWl0SnVtcElmTm90VHlw
ZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7Ci0KLSAgICAvLyBGaW5pc2ggY2Fub25p
Y2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxsLgotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVn
VDEpOwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pOwotCi0gICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGZvciB1c2UgYnkg
bGF6eSBsaW5raW5nIGFuZCBleGVwdGlvbnMuCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0
ZXJDYWxsKHJlZ1QzKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIEpTU3Rh
Y2s6OlJldHVyblBDKTsKLSAgICAKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1f
Z2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2Uo
KTsKLSAgICBDYWxsIGNhbGxMYXp5TGlua0NvbnN0cnVjdCA9IGNhbGwoKTsKLSAgICByZXN0b3Jl
UmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAganVtcChyZWdUMCk7Ci0KLSAg
ICAvLyBWaXJ0dWFsQ2FsbCBUcmFtcG9saW5lCi0gICAgLy8gcmVnVDEsIHJlZ1QwIGhvbGRzIGNh
bGxlZTsgcmVnVDIgd2lsbCBob2xkIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUuCi0gICAgTGFiZWwg
dmlydHVhbENhbGxCZWdpbiA9IGFsaWduKCk7Ci0gICAgY2FsbFNsb3dDYXNlLmFwcGVuZChicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwot
ICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBK
U0Z1bmN0aW9uVHlwZSkpOwotCi0gICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlv
biBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJlZ1QxKTsKLSAgICBlbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhl
Y3V0YWJsZSkpLCByZWdUMik7Ci0gICAgSnVtcCBoYXNDb2RlQmxvY2sxID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25F
eGVjdXRhYmxlLCBtX251bVBhcmFtZXRlcnNGb3JDYWxsKSksIFRydXN0ZWRJbW0zMigwKSk7Ci0g
ICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKLSAgICAKLSAgICBzdG9y
ZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLSAg
ICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxDb21waWxlQ2FsbCA9
IGNhbGwoKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9l
eGVjdXRhYmxlKSksIHJlZ1QyKTsKLQotICAgIGhhc0NvZGVCbG9jazEubGluayh0aGlzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFi
bGUsIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaykpLCByZWdUMCk7Ci0gICAganVtcChy
ZWdUMCk7Ci0KLSAgICAvLyBWaXJ0dWFsQ29uc3RydWN0IFRyYW1wb2xpbmUKLSAgICAvLyByZWdU
MSwgcmVnVDAgaG9sZHMgY2FsbGVlOyByZWdUMiB3aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhlY3V0
YWJsZS4KLSAgICBMYWJlbCB2aXJ0dWFsQ29uc3RydWN0QmVnaW4gPSBhbGlnbigpOwotICAgIGNv
bnN0cnVjdFNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgIGNvbnN0cnVjdFNsb3dDYXNlLmFwcGVuZChl
bWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7Ci0KLSAgICAv
LyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxs
LgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24s
IG1fc2NvcGUpKSwgcmVnVDEpOwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVn
VDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKLSAgICBK
dW1wIGhhc0NvZGVCbG9jazIgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVy
c0ZvckNvbnN0cnVjdCkpLCBUcnVzdGVkSW1tMzIoMCkpOwotICAgIHByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChyZWdUMyk7Ci0gICAgCi0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Ci0gICAgcmVzdG9yZUFyZ3VtZW50UmVm
ZXJlbmNlKCk7Ci0gICAgQ2FsbCBjYWxsQ29tcGlsZUNvbnN0cnVjdCA9IGNhbGwoKTsKLSAgICBy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJl
Z1QyKTsKLQotICAgIGhhc0NvZGVCbG9jazIubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKSksIHJlZ1QwKTsKLSAgICBqdW1wKHJlZ1QwKTsKLQot
ICAgIGNhbGxTbG93Q2FzZS5saW5rKHRoaXMpOwotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5p
dGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0gICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMiwgcmVnVDIp
OwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDIsIEpTU3RhY2s6OlNjb3Bl
Q2hhaW4pOwotCi0gICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGFuZCBDb2RlQmxvY2ss
IGxpa2UgYSBKUyBmdW5jdGlvbiB3b3VsZC4KLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwocmVnVDMpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgSlNTdGFj
azo6UmV0dXJuUEMpOwotICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcigwLCBK
U1N0YWNrOjpDb2RlQmxvY2spOwotCi0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZt
X2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Ci0gICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
KCk7Ci0gICAgQ2FsbCBjYWxsQ2FsbE5vdEpTRnVuY3Rpb24gPSBjYWxsKCk7Ci0gICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0g
ICAgcmV0KCk7Ci0KLSAgICBjb25zdHJ1Y3RTbG93Q2FzZS5saW5rKHRoaXMpOwotICAgIC8vIEZp
bmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0g
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIHJl
Z1QyKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNo
YWluLCByZWdUMiwgcmVnVDIpOwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVn
VDIsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCi0gICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVy
blBDIGFuZCBDb2RlQmxvY2ssIGxpa2UgYSBKUyBmdW5jdGlvbiB3b3VsZC4KLSAgICBwcmVzZXJ2
ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOwotICAgIGVtaXRQdXRJbW1lZGlhdGVUb0Nh
bGxGcmFtZUhlYWRlcigwLCBKU1N0YWNrOjpDb2RlQmxvY2spOwotCi0gICAgc3RvcmVQdHIoY2Fs
bEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Ci0gICAgcmVzdG9y
ZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgQ2FsbCBjYWxsQ29uc3RydWN0Tm90SlNGdW5jdGlv
biA9IGNhbGwoKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpD
YWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKHJlZ1QzKTsKLSAgICByZXQoKTsKLQogICAgIC8vIE5hdGl2ZUNhbGwgVHJh
bXBvbGluZQogICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IHByaXZhdGVDb21waWxlQ1RJTmF0
aXZlQ2FsbChnbG9iYWxEYXRhKTsgICAgCiAgICAgTGFiZWwgbmF0aXZlQ29uc3RydWN0VGh1bmsg
PSBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgdHJ1ZSk7ICAgIAogCi0g
ICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzMUNhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwo
c3RyaW5nX2ZhaWx1cmVDYXNlczEpOwotICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxs
ID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMyKTsKLSAgICBDYWxs
IHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdf
ZmFpbHVyZUNhc2VzMyk7Ci0KICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNv
cHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBN
YWNoaW5lIG9iamVjdC4KICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIEdMT0JBTF9USFVOS19JRCk7CiAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19m
YWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFp
bCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5j
dGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgcGF0Y2hCdWZmZXIu
bGluayhzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlf
aWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGlua0NhbGws
IEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5r
KGNhbGxMYXp5TGlua0NvbnN0cnVjdCwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ29uc3Ry
dWN0KSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZUNhbGwsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9jYWxsX2ppdENvbXBpbGUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21w
aWxlQ29uc3RydWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsK
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDYWxsTm90SlNGdW5jdGlvbiwgRnVuY3Rpb25QdHIo
Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbikpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENv
bnN0cnVjdE5vdEpTRnVuY3Rpb24sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlND
b25zdHJ1Y3QpKTsKLQogICAgIENvZGVSZWYgZmluYWxDb2RlID0gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJKSVQgQ1RJIG1hY2hpbmUgdHJhbXBvbGluZXMiKSk7CiAgICAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0
YWJsZU1lbW9yeSgpOwogCi0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHBh
dGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbExpbmtCZWdpbik7Ci0gICAgdHJhbXBv
bGluZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0
KHZpcnR1YWxDb25zdHJ1Y3RMaW5rQmVnaW4pOwotICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFs
Q2FsbCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbEJlZ2luKTsKLSAgICB0
cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVB
dCh2aXJ0dWFsQ29uc3RydWN0QmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlOYXRpdmVDYWxs
ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7CiAgICAgdHJhbXBv
bGluZXMtPmN0aU5hdGl2ZUNvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRp
dmVDb25zdHJ1Y3RUaHVuayk7Ci0gICAgdHJhbXBvbGluZXMtPmN0aVN0cmluZ0xlbmd0aFRyYW1w
b2xpbmUgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQoc3RyaW5nTGVuZ3RoQmVnaW4pOwogCiAg
ICAgcmV0dXJuIGV4ZWN1dGFibGVNZW1vcnkucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMzg0NjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxODIgKzQ1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBQYXNzUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykK
IHsKLSAgICAvLyAoMikgVGhlIHNlY29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5
IGFjY2VzcyBmb3Igc3RyaW5nIGxlbmd0aAotICAgIExhYmVsIHN0cmluZ0xlbmd0aEJlZ2luID0g
YWxpZ24oKTsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhIHN0cmluZwotICAgIEp1bXAgc3RyaW5n
X2ZhaWx1cmVDYXNlczEgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKLSAgICBKdW1wIHN0
cmluZ19mYWlsdXJlQ2FzZXMyID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhl
IGxlbmd0aCBmcm9tIHRoZSBVc3RyaW5nLgotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNTdHJpbmcsIG1fbGVuZ3RoKSksIHJlZ1QwKTsKLQotICAgIEp1bXAgc3Ry
aW5nX2ZhaWx1cmVDYXNlczMgPSBicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0z
MigwKSk7Ci0KLSAgICAvLyByZWdUMCBjb250YWlucyBhIDY0IGJpdCB2YWx1ZSAoaXMgcG9zaXRp
dmUsIGlzIHplcm8gZXh0ZW5kZWQpIHNvIHdlIGRvbid0IG5lZWQgc2lnbiBleHRlbmQgaGVyZS4K
LSAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QwLCByZWdUMCk7Ci0gICAgCi0g
ICAgcmV0KCk7Ci0KLSAgICAvLyAoMykgVHJhbXBvbGluZXMgZm9yIHRoZSBzbG93IGNhc2VzIG9m
IG9wX2NhbGwgLyBvcF9jYWxsX2V2YWwgLyBvcF9jb25zdHJ1Y3QuCi0gICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKENvZGVUeXBlKSA9PSA0LCBDb2RlVHlwZUVudW1NdXN0QmUzMkJpdCk7Ci0KLSAg
ICBKdW1wTGlzdCBjYWxsU2xvd0Nhc2U7Ci0gICAgSnVtcExpc3QgY29uc3RydWN0U2xvd0Nhc2U7
Ci0KLSAgICAvLyBWaXJ0dWFsQ2FsbExpbmsgVHJhbXBvbGluZQotICAgIC8vIHJlZ1QwIGhvbGRz
IGNhbGxlZTsgY2FsbEZyYW1lIGlzIG1vdmVkIGFuZCBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuCi0g
ICAgTGFiZWwgdmlydHVhbENhbGxMaW5rQmVnaW4gPSBhbGlnbigpOwotICAgIGNhbGxTbG93Q2Fz
ZS5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCkpOwotICAgIGNhbGxTbG93Q2FzZS5h
cHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBKU0Z1bmN0aW9uVHlwZSkpOwot
Ci0gICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rp
b24gY2FsbC4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1
bmN0aW9uLCBtX3Njb3BlKSksIHJlZ1QxKTsKLSAgICBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVh
ZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIC8vIEFsc28gaW5pdGlhbGl6
ZSBSZXR1cm5QQyBmb3IgdXNlIGJ5IGxhenkgbGlua2luZyBhbmQgZXhjZXB0aW9ucy4KLSAgICBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwotICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOwotICAgIAotICAgIHN0b3JlUHRy
KGNhbGxGcmFtZVJlZ2lzdGVyLCAmbV9nbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOwotICAgIHJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIENhbGwgY2FsbExhenlMaW5rQ2FsbCA9IGNh
bGwoKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAg
anVtcChyZWdUMCk7Ci0KLSAgICAvLyBWaXJ0dWFsQ29uc3RydWN0TGluayBUcmFtcG9saW5lCi0g
ICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVlOyBjYWxsRnJhbWUgaXMgbW92ZWQgYW5kIHBhcnRpYWxs
eSBpbml0aWFsaXplZC4KLSAgICBMYWJlbCB2aXJ0dWFsQ29uc3RydWN0TGlua0JlZ2luID0gYWxp
Z24oKTsKLSAgICBjb25zdHJ1Y3RTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChy
ZWdUMCkpOwotICAgIGNvbnN0cnVjdFNsb3dDYXNlLmFwcGVuZChlbWl0SnVtcElmTm90VHlwZShy
ZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7Ci0KLSAgICAvLyBGaW5pc2ggY2Fub25pY2Fs
IGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxsLgotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVnVDEp
OwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNjb3Bl
Q2hhaW4pOwotCi0gICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGZvciB1c2UgYnkgbGF6
eSBsaW5raW5nIGFuZCBleGVwdGlvbnMuCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKHJlZ1QzKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIEpTU3RhY2s6
OlJldHVyblBDKTsKLSAgICAKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xv
YmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
LSAgICBDYWxsIGNhbGxMYXp5TGlua0NvbnN0cnVjdCA9IGNhbGwoKTsKLSAgICByZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAganVtcChyZWdUMCk7Ci0KLSAgICAv
LyBWaXJ0dWFsQ2FsbCBUcmFtcG9saW5lCi0gICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVlOyByZWdU
MiB3aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZS4KLSAgICBMYWJlbCB2aXJ0dWFsQ2Fs
bEJlZ2luID0gYWxpZ24oKTsKLSAgICBjYWxsU2xvd0Nhc2UuYXBwZW5kKGVtaXRKdW1wSWZOb3RK
U0NlbGwocmVnVDApKTsKLSAgICBjYWxsU2xvd0Nhc2UuYXBwZW5kKGVtaXRKdW1wSWZOb3RUeXBl
KHJlZ1QwLCByZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsKLQotICAgIC8vIEZpbmlzaCBjYW5vbmlj
YWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdU
MSk7Ci0gICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6U2Nv
cGVDaGFpbik7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwotICAgIEp1bXAgaGFzQ29kZUJsb2Nr
MSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09G
RlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCkpLCBUcnVz
dGVkSW1tMzIoMCkpOwotICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7
Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxG
cmFtZSk7Ci0gICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgQ2FsbCBjYWxsQ29t
cGlsZUNhbGwgPSBjYWxsKCk7Ci0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
cmVnVDMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdUMik7Ci0KLSAgICBoYXNDb2RlQmxvY2sxLmxpbmso
dGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rp
b25FeGVjdXRhYmxlLCBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spKSwgcmVnVDApOwot
ICAgIGp1bXAocmVnVDApOwotCi0gICAgLy8gVmlydHVhbENvbnN0cnVjdCBUcmFtcG9saW5lCi0g
ICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVlOyByZWdUMiB3aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhl
Y3V0YWJsZS4KLSAgICBMYWJlbCB2aXJ0dWFsQ29uc3RydWN0QmVnaW4gPSBhbGlnbigpOwotICAg
IGNvbnN0cnVjdFNsb3dDYXNlLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKSk7Ci0g
ICAgY29uc3RydWN0U2xvd0Nhc2UuYXBwZW5kKGVtaXRKdW1wSWZOb3RUeXBlKHJlZ1QwLCByZWdU
MSwgSlNGdW5jdGlvblR5cGUpKTsKLQotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6
YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7Ci0gICAgZW1p
dFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0K
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBt
X2V4ZWN1dGFibGUpKSwgcmVnVDIpOwotICAgIEp1bXAgaGFzQ29kZUJsb2NrMiA9IGJyYW5jaDMy
KEdyZWF0ZXJUaGFuT3JFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0
aW9uRXhlY3V0YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksIFRydXN0ZWRJbW0z
MigwKSk7Ci0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKLSAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsK
LSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxDb21waWxlQ29u
c3RydWN0ID0gY2FsbCgpOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJl
Z1QzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0
aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwotCi0gICAgaGFzQ29kZUJsb2NrMi5saW5rKHRo
aXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9u
RXhlY3V0YWJsZSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spKSwgcmVnVDAp
OwotICAgIGp1bXAocmVnVDApOwotCi0gICAgY2FsbFNsb3dDYXNlLmxpbmsodGhpcyk7Ci0gICAg
Ly8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2Fs
bC4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFt
ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNj
b3BlQ2hhaW4sIHJlZ1QyLCByZWdUMik7Ci0gICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRl
cihyZWdUMiwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0KLSAgICAvLyBBbHNvIGluaXRpYWxpemUg
UmV0dXJuUEMgYW5kIENvZGVCbG9jaywgbGlrZSBhIEpTIGZ1bmN0aW9uIHdvdWxkLgotICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKHJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7Ci0gICAgZW1pdFB1dEltbWVkaWF0
ZVRvQ2FsbEZyYW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7Ci0KLSAgICBzdG9yZVB0
cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICBy
ZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxDYWxsTm90SlNGdW5jdGlv
biA9IGNhbGwoKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpD
YWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKHJlZ1QzKTsKLSAgICByZXQoKTsKLQotICAgIGNvbnN0cnVjdFNsb3dDYXNl
LmxpbmsodGhpcyk7Ci0gICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZv
cmUgSlMgZnVuY3Rpb24gY2FsbC4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpDYWxsZXJGcmFtZSwgcmVnVDIpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1QyLCByZWdUMik7Ci0gICAgZW1pdFB1dENl
bGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMiwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0KLSAgICAv
LyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgYW5kIENvZGVCbG9jaywgbGlrZSBhIEpTIGZ1bmN0
aW9uIHdvdWxkLgotICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7Ci0g
ICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7Ci0g
ICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9j
ayk7Ci0KLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9w
Q2FsbEZyYW1lKTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNh
bGxDb25zdHJ1Y3ROb3RKU0Z1bmN0aW9uID0gY2FsbCgpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0g
ICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwotICAgIHJldCgpOwot
CiAgICAgLy8gTmF0aXZlQ2FsbCBUcmFtcG9saW5lCiAgICAgTGFiZWwgbmF0aXZlQ2FsbFRodW5r
ID0gcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEpOyAgICAKICAgICBMYWJl
bCBuYXRpdmVDb25zdHJ1Y3RUaHVuayA9IHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9i
YWxEYXRhLCB0cnVlKTsgICAgCiAKLSAgICBDYWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCA9
IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMSk7Ci0gICAgQ2FsbCBz
dHJpbmdfZmFpbHVyZUNhc2VzMkNhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2Zh
aWx1cmVDYXNlczIpOwotICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxsID0gbWFrZVRh
aWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMzKTsKLQogICAgIC8vIEFsbCB0cmFt
cG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNl
dCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgogICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKIAotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlf
b3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdf
ZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2Zh
aWwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCwgRnVu
Y3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwotICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbExhenlMaW5rQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCkp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rQ29uc3RydWN0LCBGdW5jdGlvblB0
cihjdGlfdm1fbGF6eUxpbmtDb25zdHJ1Y3QpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxD
b21waWxlQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGlsZSkpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9j
b25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENhbGxOb3RK
U0Z1bmN0aW9uLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsQ29uc3RydWN0Tm90SlNGdW5jdGlvbiwgRnVuY3Rpb25QdHIo
Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCkpOwotCiAgICAgQ29kZVJlZiBmaW5hbENv
ZGUgPSBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkpJVCBDVEkgbWFjaGluZSB0cmFtcG9s
aW5lcyIpKTsKICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1l
bW9yeSA9IGZpbmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CiAKLSAgICB0cmFtcG9saW5lcy0+
Y3RpVmlydHVhbENhbGxMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxs
TGlua0JlZ2luKTsKLSAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsgPSBw
YXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENvbnN0cnVjdExpbmtCZWdpbik7Ci0gICAg
dHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZp
cnR1YWxDYWxsQmVnaW4pOwotICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0g
cGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7CiAgICAgdHJh
bXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQobmF0aXZl
Q2FsbFRodW5rKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpTmF0aXZlQ29uc3RydWN0ID0gcGF0Y2hC
dWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNvbnN0cnVjdFRodW5rKTsKLSAgICB0cmFtcG9saW5l
cy0+Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChz
dHJpbmdMZW5ndGhCZWdpbik7CiAgICAgCiAgICAgcmV0dXJuIGV4ZWN1dGFibGVNZW1vcnkucmVs
ZWFzZSgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJl
dmlzaW9uIDEzODQ2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDcgQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2
b2lkIHRyeUNhY2hlR2V0QnlJRAogICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJv
cGVydHlOYW1lID09IGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAgICAg
ICAvLyBUaGUgdHJhZGVvZmYgb2YgY29tcGlsaW5nIGFuIHBhdGNoZWQgaW5saW5lIHN0cmluZyBs
ZW5ndGggYWNjZXNzIHJvdXRpbmUgZG9lcyBub3Qgc2VlbQogICAgICAgICAvLyB0byBwYXkgb2Zm
LCBzbyB3ZSBjdXJyZW50bHkgb25seSBkbyB0aGlzIGZvciBhcnJheXMuCi0gICAgICAgIGN0aVBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lKCkpOworICAgICAgICBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBnbG9iYWxE
YXRhLT5nZXRDVElTdHViKHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpLmNvZGUoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuaAkocmV2aXNpb24gMTM4NDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTEgKzQ1LDYgQEAgY2xhc3MgSlNH
bG9iYWxEYXRhOwogY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKIAogc3RydWN0IFRyYW1wb2xpbmVT
dHJ1Y3R1cmUgewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTdHJpbmdMZW5ndGhUcmFt
cG9saW5lOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ2FsbExpbms7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3RpVmlydHVhbENvbnN0cnVjdDsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3Rp
TmF0aXZlQ2FsbDsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0aXZlQ29uc3RydWN0
OwogfTsKQEAgLTYxLDExICs1Niw2IEBAIHB1YmxpYzoKICAgICBKSVRUaHVua3MoSlNHbG9iYWxE
YXRhKik7CiAgICAgfkpJVFRodW5rcygpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0
aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUu
Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZTsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
dGlWaXJ0dWFsQ2FsbExpbmsoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpVmly
dHVhbENhbGxMaW5rOyB9Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDb25z
dHJ1Y3RMaW5rKCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aVZpcnR1YWxDb25z
dHJ1Y3RMaW5rOyB9Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDYWxsKCkg
eyByZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aVZpcnR1YWxDYWxsOyB9Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDb25zdHJ1Y3QoKSB7IHJldHVybiBtX3RyYW1w
b2xpbmVTdHJ1Y3R1cmUuY3RpVmlydHVhbENvbnN0cnVjdDsgfQogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjdGlOYXRpdmVDYWxsKCkKICAgICB7CiAjaWYgRU5BQkxFKExMSU5UKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAkocmV2aXNpb24gMTM4
NDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODksMTEgKzE4OSwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SlNDZWxsKFJl
Z2lzdGVySUQpOwogICAgICAgICBKdW1wIGVtaXRKdW1wSWZJbW1lZGlhdGVOdW1iZXIoUmVnaXN0
ZXJJRCByZWcpOwogICAgICAgICBKdW1wIGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIoUmVn
aXN0ZXJJRCByZWcpOwogICAgICAgICB2b2lkIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChSZWdpc3Rl
cklEIHJlZyk7CisgICAgICAgIHZvaWQgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KTsKICNlbmRpZgogCisgICAgICAgIEp1bXAgZW1p
dEp1bXBJZk5vdFR5cGUoUmVnaXN0ZXJJRCBiYXNlUmVnLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcs
IEpTVHlwZSk7CisKKyAgICAgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBm
cm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5KTsK
KyAgICAgICAgdm9pZCBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFs
dWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyRW50cnkpOworCisgICAgICAgIHZvaWQgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKFJlZ2lzdGVySUQpOworICAgICAgICB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKFJlZ2lzdGVySUQpOworICAgICAgICB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEFkZHJlc3MpOworICAgICAgICB2b2lkIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZSgpOworCiAgICAgICAgIGlubGluZSBBZGRyZXNzIHBheWxvYWRGb3IoaW50IGluZGV4LCBSZWdp
c3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIGlubGluZSBBZGRyZXNz
IGludFBheWxvYWRGb3IoaW50IGluZGV4LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdp
c3Rlcik7CiAgICAgICAgIGlubGluZSBBZGRyZXNzIGludFRhZ0ZvcihpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKQEAgLTI2OCw2ICsyODIsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgQUxXQVlTX0lO
TElORSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdEpT
Q2VsbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0NjQo
Tm9uWmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJ
TkUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZJbW1lZGlh
dGVOdW1iZXIoUmVnaXN0ZXJJRCByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDY0KE5vblplcm8sIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKQEAgLTMwOCw2ICszMjcs
MTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KICAgICAKKyAgICAvLyBvcGVyYW5k
IGlzIGludDMyX3QsIG11c3QgaGF2ZSBiZWVuIHplcm8tZXh0ZW5kZWQgaWYgcmVnaXN0ZXIgaXMg
NjQtYml0LgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdEZhc3RB
cml0aEludFRvSW1tTm9DaGVjayhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3Qp
OworICAgICAgICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVzdCk7CisgICAgfQogI2Vu
ZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzI5LDEyICszNTUsMTIyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIH0KICNlbmRpZgogCisgICAgQUxXQVlTX0lOTElORSBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdFR5cGUoUmVnaXN0ZXJJRCBiYXNl
UmVnLCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcsIEpTVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3Jh
dGNoUmVnKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRj
aFJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBl
KSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBl
bnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQorICAgIHsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5
IGVudHJ5KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdG9yZVB0cihm
cm9tLCBwYXlsb2FkRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworI2Vsc2UKKyAgICAg
ICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOwor
I2VuZGlmCisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpl
bWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQorICAgIHsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9m
KFJlZ2lzdGVyKSkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFn
Rm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOworICAgICAgICBzdG9yZTMyKGZyb20sIHBh
eWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxzZQorICAgICAgICBzdG9y
ZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZW5kaWYK
KyAgICB9CisKICAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MgSlNJbnRlcmZhY2VK
SVQ6OmFkZHJlc3NGb3IoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4LCBSZWdpc3RlcklEIGJhc2Up
CiAgICAgewogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVySW5kZXggPCBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKGJhc2UsIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odmlydHVhbFJlZ2lzdGVySW5kZXgpICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OwogICAgIH0KIAorI2lmIENQVShBUk0pCisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRl
cmZhY2VKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykK
KyAgICB7CisgICAgICAgIG1vdmUobGlua1JlZ2lzdGVyLCByZWcpOworICAgIH0KKyAgICAKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgbW92ZShyZWcsIGxp
bmtSZWdpc3Rlcik7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVy
ZmFjZUpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzLCBsaW5rUmVnaXN0ZXIpOworICAgIH0K
KyNlbGlmIENQVShTSDQpCisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6
OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLnN0c3ByKHJlZyk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5sZHNwcihyZWcp
OworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIGxvYWRQdHJMaW5rUmVnKGFkZHJlc3MpOworICAgIH0KKyAgICAKKyNlbGlmIENQVShN
SVBTKQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpwcmVzZXJ2ZVJl
dHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBtb3Zl
KHJldHVybkFkZHJlc3NSZWdpc3RlciwgcmVnKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIG1vdmUocmVnLCByZXR1cm5BZGRyZXNz
UmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZh
Y2VKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIGxvYWRQdHIoYWRkcmVzcywgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsK
KyAgICB9CisgICAgCisjZWxzZSAvLyBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRl
ckNhbGwoUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBwb3AocmVnKTsKKyAgICB9Cisg
ICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpyZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHB1c2go
cmVnKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklU
OjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBwdXNoKGFkZHJlc3MpOworICAgIH0KKyAgICAKKyNlbmRpZgorCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2Uo
KQorICAgIHsKKyAgICAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVu
dFJlZ2lzdGVyKTsKKyAgICAgICAgcG9rZShjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNF
VE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Cisg
ICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZp
c2lvbiAxMzg0NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDE4NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorc3RhdGljIEpTSW50ZXJmYWNlSklUOjpDYWxsIGdlbmVyYXRlU2xvd0Nhc2VGb3IoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBKU0ludGVyZmFjZUpJVCYgaml0KQoreworICAgIGppdC5lbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QyKTsKKyAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNT
dGFjazo6U2NvcGVDaGFpbiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBKU0ludGVyZmFjZUpJVDo6
cmVnVDIpOworICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNl
SklUOjpyZWdUMiwgSlNTdGFjazo6U2NvcGVDaGFpbik7CisKKyAgICAvLyBBbHNvIGluaXRpYWxp
emUgUmV0dXJuUEMgYW5kIENvZGVCbG9jaywgbGlrZSBhIEpTIGZ1bmN0aW9uIHdvdWxkLgorICAg
IGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qz
KTsKKyAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdU
MywgSlNTdGFjazo6UmV0dXJuUEMpOworICAgIGppdC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJh
bWVIZWFkZXIoMCwgSlNTdGFjazo6Q29kZUJsb2NrKTsKKworICAgIGppdC5zdG9yZVB0cihKU0lu
dGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUp
OworICAgIGppdC5yZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBKU0ludGVyZmFjZUpJ
VDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9IGppdC5jYWxsKCk7CisgICAgaml0LmVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJ
VDo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihKU0ludGVyZmFjZUpJVDo6cmVnVDMpOworICAgIGppdC5yZXQoKTsKKyAgICAKKyAg
ICByZXR1cm4gY2FsbE5vdEpTRnVuY3Rpb247Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGlua0ZvckdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEZ1bmN0aW9u
UHRyIGxhenlMaW5rLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1l
KQoreworICAgIEpTSW50ZXJmYWNlSklUIGppdDsKKyAgICAKKyAgICBKU0ludGVyZmFjZUpJVDo6
SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmVtaXRKdW1wSWZOb3RKU0NlbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKSk7
CisgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5lbWl0SnVtcElmTm90VHlwZShKU0ludGVyZmFjZUpJ
VDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsKKyNlbHNl
IC8vIFVTRShKU1ZBTFVFNjQpCisgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihKU0lu
dGVyZmFjZUpJVDo6Tm90RXF1YWwsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNJbnRlcmZhY2VK
SVQ6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuZW1pdEp1bXBJZk5vdFR5cGUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkK
KworICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0
aW9uIGNhbGwuCisgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIEpTSW50
ZXJmYWNlSklUOjpyZWdUMSk7CisgICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIo
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKKworICAgIC8vIEFs
c28gaW5pdGlhbGl6ZSBSZXR1cm5QQyBmb3IgdXNlIGJ5IGxhenkgbGlua2luZyBhbmQgZXhjZXB0
aW9ucy4KKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNl
SklUOjpyZWdUMyk7CisgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFj
ZUpJVDo6cmVnVDMsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICAKKyAgICBqaXQuc3RvcmVQdHIo
SlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZy
YW1lKTsKKyAgICBqaXQucmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgSlNJbnRlcmZh
Y2VKSVQ6OkNhbGwgY2FsbExhenlMaW5rID0gaml0LmNhbGwoKTsKKyAgICBqaXQucmVzdG9yZVJl
dHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKKyAgICBqaXQu
anVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDApOworICAgIAorICAgIHNsb3dDYXNlLmxpbmsoJmpp
dCk7CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpTRnVuY3Rpb24gPSBnZW5lcmF0
ZVNsb3dDYXNlRm9yKGdsb2JhbERhdGEsIGppdCk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKGNhbGxMYXp5TGluaywgbGF6eUxpbmspOworICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbE5vdEpTRnVuY3Rpb24sIG5vdEpTRnVuY3Rpb24pOworICAgIAorICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoImxpbmsgJXMgdHJhbXBvbGluZSIsIG5hbWUpKTsKK30K
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gbGlua0ZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBG
dW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDYWxsKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxf
Tm90SlNGdW5jdGlvbiksICJjYWxsIik7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5r
Q29uc3RydWN0R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1
cm4gbGlua0ZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxp
bmtDb25zdHJ1Y3QpLCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0
KSwgImNvbnN0cnVjdCIpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxGb3JHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBGdW5jdGlvblB0ciBjb21w
aWxlLCBGdW5jdGlvblB0ciBub3RKU0Z1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgSlNJbnRlcmZhY2VKSVQgaml0OworICAgIAor
ICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wTGlzdCBzbG93Q2FzZTsKKworI2lmIFVTRShKU1ZBTFVF
NjQpICAgIAorICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuZW1pdEp1bXBJZk5vdEpTQ2VsbChKU0lu
dGVyZmFjZUpJVDo6cmVnVDApKTsKKyNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCisgICAgY2FsbFNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuZW1pdEp1bXBJZk5vdFR5cGUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7CisKKyAgICAvLyBGaW5pc2gg
Y2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxsLgorICAgIGpp
dC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEp
OworICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CisKKyAgICBqaXQubG9hZFB0cihKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9m
RXhlY3V0YWJsZSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKKyAgICBKU0ludGVyZmFjZUpJ
VDo6SnVtcCBoYXNDb2RlQmxvY2sxID0gaml0LmJyYW5jaDMyKEpTSW50ZXJmYWNlSklUOjpHcmVh
dGVyVGhhbk9yRXF1YWwsIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMiwgRnVuY3Rpb25FeGVjdXRhYmxlOjpvZmZzZXRPZk51bVBhcmFtZXRlcnNGb3Ioa2luZCkp
LCBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApKTsKKyAgICBqaXQucHJlc2VydmVSZXR1
cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CisgICAgaml0LnN0b3Jl
UHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJmdsb2JhbERhdGEtPnRvcENh
bGxGcmFtZSk7CisgICAgaml0LnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIEpTSW50
ZXJmYWNlSklUOjpDYWxsIGNhbGxDb21waWxlID0gaml0LmNhbGwoKTsKKyAgICBqaXQucmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKKyAgICBq
aXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDAs
IEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qy
KTsKKworICAgIGhhc0NvZGVCbG9jazEubGluaygmaml0KTsKKyAgICBqaXQubG9hZFB0cihKU0lu
dGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Ioa2luZCkpLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDApOworICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CisgICAg
CisgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxs
Tm90SlNGdW5jdGlvbiA9IGdlbmVyYXRlU2xvd0Nhc2VGb3IoZ2xvYmFsRGF0YSwgaml0KTsKKyAg
ICAKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGUsIGNvbXBpbGUpOwor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbE5vdEpTRnVuY3Rpb24sIG5vdEpTRnVuY3Rpb24pOwor
ICAgIAorICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoInZpcnR1YWwgJXMg
dHJhbXBvbGluZSIsIG5hbWUpKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxD
YWxsR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1cm4gdmly
dHVhbEZvckdlbmVyYXRvcihnbG9iYWxEYXRhLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9qaXRD
b21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbiksICJjYWxsIiwg
Q29kZUZvckNhbGwpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0cnVj
dEdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIHZpcnR1
YWxGb3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9q
aXRDb21waWxlKSwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCks
ICJjb25zdHJ1Y3QiLCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQoreworICAgIEpTSW50ZXJmYWNlSklUIGppdDsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIC8vIENoZWNrIGVheCBpcyBhIHN0cmluZworICAgIEpTSW50ZXJmYWNlSklUOjpKdW1w
IGZhaWx1cmVDYXNlczEgPSBqaXQuZW1pdEp1bXBJZk5vdEpTQ2VsbChKU0ludGVyZmFjZUpJVDo6
cmVnVDApOworICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczIgPSBqaXQuYnJh
bmNoUHRyKAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1YWwsIEpTSW50ZXJmYWNlSklU
OjpBZGRyZXNzKAorICAgICAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIo
Z2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisKKyAgICAvLyBDaGVja3Mgb3V0
IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4KKyAgICBqaXQubG9hZDMy
KAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDAs
IEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QwKTsKKworICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVDYXNlczMgPSBqaXQuYnJh
bmNoMzIoCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpMZXNzVGhhbiwgSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwLCBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApKTsKKworICAgIC8vIHJlZ1Qw
IGNvbnRhaW5zIGEgNjQgYml0IHZhbHVlIChpcyBwb3NpdGl2ZSwgaXMgemVybyBleHRlbmRlZCkg
c28gd2UgZG9uJ3QgbmVlZCBzaWduIGV4dGVuZCBoZXJlLgorICAgIGppdC5lbWl0RmFzdEFyaXRo
SW50VG9JbW1Ob0NoZWNrKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QwKTsKKyAgICAKKyNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCisgICAgLy8gcmVnVDAgaG9sZHMg
cGF5bG9hZCwgcmVnVDEgaG9sZHMgdGFnCisKKyAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWls
dXJlQ2FzZXMxID0gaml0LmJyYW5jaDMyKAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1
YWwsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZmFp
bHVyZUNhc2VzMiA9IGppdC5icmFuY2hQdHIoCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpOb3RF
cXVhbCwKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisKKyAg
ICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4K
KyAgICBqaXQubG9hZDMyKAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVy
ZmFjZUpJVDo6cmVnVDAsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwKKyAgICAgICAgSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QyKTsKKworICAgIEp1bXAgZmFpbHVyZUNhc2VzMyA9IGppdC5icmFu
Y2gzMigKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFib3ZlLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDIsIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSU5UX01BWCkpOworICAgIGppdC5tb3Zl
KEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKKyAgICBqaXQu
bW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QxKTsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCisgICAgaml0
LnJldCgpOworICAgIAorICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGZhaWx1cmVDYXNlczFDYWxs
ID0gaml0Lm1ha2VUYWlsUmVjdXJzaXZlQ2FsbChmYWlsdXJlQ2FzZXMxKTsKKyAgICBKU0ludGVy
ZmFjZUpJVDo6Q2FsbCBmYWlsdXJlQ2FzZXMyQ2FsbCA9IGppdC5tYWtlVGFpbFJlY3Vyc2l2ZUNh
bGwoZmFpbHVyZUNhc2VzMik7CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZmFpbHVyZUNhc2Vz
M0NhbGwgPSBqaXQubWFrZVRhaWxSZWN1cnNpdmVDYWxsKGZhaWx1cmVDYXNlczMpOworICAgIAor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVO
S19JRCk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxQ2FsbCwgRnVu
Y3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOworICAgIHBhdGNoQnVmZmVy
LmxpbmsoZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3Ry
aW5nX2ZhaWwpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczNDYWxsLCBGdW5j
dGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CisgICAgCisgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgic3RyaW5nIGxlbmd0aCB0cmFtcG9saW5lIikp
OworfQorCiBzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFsaXplZFRodW5rSklUJiBq
aXQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICAvLyBsb2FkIHN0cmluZwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lv
biAxMzg0NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSwxMiBAQAogI2lmIEVOQUJMRShKSVQpCiBuYW1l
c3BhY2UgSlNDIHsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENhbGxHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbENvbnN0
cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHJp
bmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180749</attachid>
            <date>2012-12-26 08:20:52 -0800</date>
            <delta_ts>2012-12-27 07:28:12 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>jitthunks.patch</filename>
            <type>text/plain</type>
            <size>90035</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NDc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxMi0xMi0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFsbCBKSVQgc3R1YnMgc2hvdWxkIGdvIHRocm91Z2ggdGhlIGdldENUSVN0dWIgQVBJCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU3NTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFByZXZp
b3VzbHkgSklUVGh1bmtzIGhhZCB0d28gc2V0cyBvZiB0aHVua3M6IG9uZSBzdGF0aWMgc2V0IHN0
b3JlZCBpbiBhIHN0cnVjdCwKKyAgICAgICAgd2hpY2ggd2FzIGZpbGxlZCBieSBKSVQ6OnByaXZh
dGVDb21waWxlQ1RJVHJhbXBvbGluZXMsIGFuZCBhbm90aGVyIHNldCBzdG9yZWQgaW4KKyAgICAg
ICAgYSBIYXNoTWFwLiBNb3Jlb3ZlciwgdGhlIGNvZGUgdG8gZ2VuZXJhdGUgdGhlIGNvZGUgZm9y
IHRoZSBDVEkgdHJhbXBvbGluZSBzdHJ1Y3QKKyAgICAgICAgaGFkIGxvYWRzIG9mIGNvcHktcGFz
dGUgYmV0d2VlbiBKU1ZBTFVFMzJfNjQgYW5kIEpTVkFMVUU2NCwgYW5kIHdhcyB0b3RhbAorICAg
ICAgICB1bm1vZHVsYXIgd2l0aCByZXNwZWN0IHRvIGNhbGxzIHZlcnN1cyBjb25zdHJ1Y3RvcnMs
IGFtb25nIG90aGVyIHRoaW5ncy4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICBUaGlzIGNo
YW5nZXNldCByZW1vdmVzIHRoaXMgc3RydWN0IGFuZCByYXRpb25hbGl6ZXMgdGhlIGNvZGUgdGhh
dCBnZW5lcmF0ZXMgdGhvc2UKKyAgICAgICAgdGh1bmtzLiBBbGwgb2YgdGh1bmtzIGFyZSBub3cg
Z2VuZXJhdGVkIHRocm91Z2ggdGhlIGdldENUSVN0dWIgSGFzaE1hcCBBUEkuIEFsbAorICAgICAg
ICB0aHVua3MgZm9yIHRoZSBiYXNlbGluZSBKSVQgbm93IHVzZSB0aGUgSlNJbnRlcmZhY2VKSVQg
YW5kIGhhdmUgdGhlaXIgY29kZWdlbgorICAgICAgICBsb2NhdGVkIGluIFRodW5rR2VuZXJhdG9y
cy5jcHAuIEFsbCB0aHVua3Mgbm93IHNoYXJlIGFzIG11Y2ggY29kZSBhcyBwb3NzaWJsZSAtCisg
ICAgICAgIGl0IHR1cm5zIG91dCB0aGF0IHRoZXkgYXJlIGFsbW9zdCAxMDAlIGlkZW50aWNhbCBi
ZXR3ZWVuIDMyXzY0IGFuZCA2NCwgc28gdGhhdAorICAgICAgICB3b3JrcyBvdXQgZ3JlYXQuIEEg
YnVuY2ggb2YgY2FsbCB2cy4gY29uc3RydWN0IGR1cGxpY2F0aW9uIHdhcyBlbGltaW5hdGVkLiBB
bmQsCisgICAgICAgIG1vc3Qgb2YgdGhlIGNhbGwgbGluayB2ZXJzdXMgdmlydHVhbCBjYWxsIGR1
cGxpY2F0aW9uIHdhcyBhbHNvIGVsaW1pbmF0ZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGRv
ZXMgbm90IGNoYW5nZSBiZWhhdmlvciBidXQgaXQgZG9lcyBtYWtlIGl0IGVhc2llciB0byBhZGQg
bW9yZSB0aHVua3MgaW4KKyAgICAgICAgdGhlIGZ1dHVyZS4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rRm9yKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRDYWxs
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklU
Q2FsbDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAg
KiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2Rlcy5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6
OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAg
IChKU0M6OkpJVFRodW5rczo6SklUVGh1bmtzKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpj
dGlOYXRpdmVDYWxsKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rp
b25TdHViKToKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAoSklUVGh1bmtzKToKKyAgICAgICAgKiBqaXQvSlNJbnRlcmZhY2VKSVQuaDoKKyAgICAg
ICAgKEpTSW50ZXJmYWNlSklUKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OmVtaXRK
dW1wSWZOb3RKU0NlbGwpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNJbnRlcmZh
Y2VKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2spOgorICAgICAgICAoSlNDOjpKU0lu
dGVyZmFjZUpJVDo6ZW1pdEp1bXBJZk5vdFR5cGUpOgorICAgICAgICAoSlNDOjpKU0ludGVyZmFj
ZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIpOgorICAgICAgICAoSlNDOjpKU0lu
dGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SlNJ
bnRlcmZhY2VKSVQ6OmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAg
IChKU0M6OkpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAg
ICAgICAgKEpTQzo6SlNJbnRlcmZhY2VKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2Fs
bCk6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybik6CisgICAgICAgIChKU0M6OkpTSW50ZXJmYWNlSklUOjpyZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2UpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAg
ICAoSlNDOjpnZW5lcmF0ZVNsb3dDYXNlRm9yKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChK
U0M6OmxpbmtGb3JHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbEdlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OmxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjp2
aXJ0dWFsRm9yR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6dmlydHVhbENhbGxHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjp2aXJ0dWFsQ29uc3RydWN0R2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om5hdGl2
ZUZvckdlbmVyYXRvcik6CisgICAgICAgIChKU0M6Om5hdGl2ZUNhbGxHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjaGFy
Q29kZUF0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpjaGFyQXRUaHVua0dlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6c3FydFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Zmxvb3JUaHVua0dlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OmNlaWxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OnJvdW5kVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpleHBUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YWJzVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpwb3dUaHVua0dlbmVyYXRvcik6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50
aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKE5hdGl2ZUV4ZWN1dGFibGUpOgorICAgICAgICAo
SlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpuYXRpdmVGdW5jdGlvbkZvcik6CisgICAgICAgIChKU0M6
Ok5hdGl2ZUV4ZWN1dGFibGU6Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3IpOgorCiAyMDEyLTEy
LTI1ICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W0NNQUtFXSBSZW1vdmUgaGVhZGVyIGZpbGVzIGluIEphdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAkocmV2aXNpb24gMTM4NDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9p
ZCBDYWxsTGlua0luZm86OnVubGluayhKU0dsb2JhbERhdGEmIAogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICNlbmRpZgogICAgIH0gZWxzZQotICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhjYWxsUmV0dXJuTG9jYXRpb24sIGNhbGxUeXBlID09IENvbnN0cnVjdCA/IGdsb2JhbERh
dGEuaml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgOiBnbG9iYWxEYXRhLmppdFN0
dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxSZXR1cm5Mb2NhdGlvbiwgY2FsbFR5cGUgPT0gQ29uc3RydWN0ID8gZ2xvYmFsRGF0YS5n
ZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IGdsb2JhbERhdGEuZ2V0
Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsKICAgICBoYXNTZWVuU2hvdWxkUmVw
YXRjaCA9IGZhbHNlOwogICAgIGNhbGxlZS5jbGVhcigpOwogICAgIHN0dWIuY2xlYXIoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEzODQ2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcwLDEyICs4
NzAsMTIgQEAgdm9pZCBKSVQ6OmxpbmtGb3IoSlNGdW5jdGlvbiogY2FsbGVlLCBDbwogCiAgICAg
Ly8gUGF0Y2ggdGhlIHNsb3cgcGF0Y2ggc28gd2UgZG8gbm90IGNvbnRpbnVlIHRvIHRyeSB0byBs
aW5rLgogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpVmlydHVhbENhbGwoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHVi
KHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0KCkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCBnbG9iYWxEYXRhLT5nZXRDVElTdHVi
KHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxMzg0NjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksMTQg
KzM1OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
UHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gY29t
cGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1w
b2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBqaXQu
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgdHJhbXBvbGlu
ZXMpOwotICAgICAgICB9Ci0KICAgICAgICAgc3RhdGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2
ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKSB7CkBAIC00
MTUsNyArNDA3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIAotICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFs
RGF0YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7
CiAgICAgICAgIENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0
YSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKQEAgLTQ0MSw3ICs0
MzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQg
aW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CiAgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRv
RG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKICAgICAgICAgSnVtcCBlbWl0
SnVtcElmTm90T2JqZWN0KFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnKTsKLSAgICAgICAgSnVtcCBl
bWl0SnVtcElmTm90VHlwZShSZWdpc3RlcklEIGJhc2VSZWcsIFJlZ2lzdGVySUQgc2NyYXRjaFJl
ZywgSlNUeXBlKTsKIAogICAgICAgICBKdW1wIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhK
U0NlbGwqLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFJlZ2lzdGVySUQgc2NyYXRj
aCk7CiAgICAgICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCosIFN0
cnVjdHVyZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgSnVtcExpc3QmIGZhaWx1cmVDYXNlcywgUmVn
aXN0ZXJJRCBzY3JhdGNoKTsKQEAgLTU5Niw3ICs1ODYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSnVtcCBlbWl0SnVtcElmSlNDZWxsKFJlZ2lzdGVySUQpOwogICAgICAgICBKdW1wIGVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAg
ICAgIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIGludCBWUmVnKTsKICAgICAgICAg
SnVtcCBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihSZWdpc3RlcklEKTsKQEAgLTYwNyw3ICs1
OTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbW1lZGlhdGVJbnRlZ2VycyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsK
IAogICAgICAgICB2b2lkIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShSZWdpc3RlcklEIHNy
YywgUmVnaXN0ZXJJRCBkZXN0KTsKLSAgICAgICAgdm9pZCBlbWl0RmFzdEFyaXRoSW50VG9JbW1O
b0NoZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpOwogCiAgICAgICAgIHZvaWQg
ZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShSZWdpc3RlcklEIHJlZyk7CiAgICAgICAgIHZvaWQgY29t
cGlsZUJpbmFyeUFyaXRoT3AoT3Bjb2RlSUQsIHVuc2lnbmVkIGRzdCwgdW5zaWduZWQgc3JjMSwg
dW5zaWduZWQgc3JjMiwgT3BlcmFuZFR5cGVzIG9waSk7CkBAIC04MjMsMTAgKzgxMSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBk
c3QpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkpOwotICAgICAgICB2b2lkIGVtaXRQ
dXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJh
bWVIZWFkZXJFbnRyeSk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEludFRvQ2FsbEZyYW1lSGVhZGVy
KFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkpOwotICAgICAg
ICB2b2lkIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkpOwogICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklE
IHRvLCBSZWdpc3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwog
I2lmIFVTRShKU1ZBTFVFNjQpCkBAIC04NTcsMTYgKzg0MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBKdW1wIGNoZWNrU3RydWN0dXJlKFJlZ2lzdGVySUQgcmVnLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSk7CiAKLSAgICAgICAgdm9pZCByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
ICAgICAgICAgdm9pZCByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAg
ICAgICAgIHZvaWQgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAKICAgICAgICAgQ2FsbCBlbWl0TmFr
ZWRDYWxsKENvZGVQdHIgZnVuY3Rpb24gPSBDb2RlUHRyKCkpOwogCi0gICAgICAgIHZvaWQgcHJl
c2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIHJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lk
IHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MpOwotCiAgICAgICAgIC8v
IExvYWRzIHRoZSBjaGFyYWN0ZXIgdmFsdWUgb2YgYSBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZyBp
bnRvIGRzdC4KICAgICAgICAgdm9pZCBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkc3QsIEp1bXBMaXN0JiBmYWlsdXJlcyk7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24g
MTM4NDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKFZlY3RvcgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIAogICAgIGVtaXRMb2Fk
KEpTU3RhY2s6OkNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsKCkpOworICAgIGVtaXROYWtlZENhbGwo
bV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHZpcnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwog
CiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKIH0KQEAgLTI5Nyw3ICsyOTcsNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9j
YXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgOiBtX2dsb2JhbERhdGEt
PmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0g
ZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX2dsb2JhbERhdGEtPmdl
dENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV9nbG9iYWxEYXRhLT5n
ZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJs
b2NrKG1fY29kZUJsb2NrKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMTM4NDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShWZWN0b3IKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKICAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KEpTU3RhY2s6OkNhbGxlZSwgcmVnVDApOwot
ICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENhbGwo
KSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIodmlydHVhbENh
bGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2sp
OwogfQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
T3Bjb2RlSUQKIAogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAKLSAgICBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9j
YXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgOiBtX2dsb2JhbERhdGEt
PmppdFN0dWJzLT5jdGlWaXJ0dWFsQ2FsbExpbmsoKSk7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1
YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0g
ZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX2dsb2JhbERhdGEtPmdl
dENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpIDogbV9nbG9iYWxEYXRhLT5n
ZXRDVElTdHViKGxpbmtDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJs
b2NrKG1fY29kZUJsb2NrKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCShyZXZpc2lvbiAxMzg0NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTYgKzQyLDYgQEAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcAogICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENlbGxU
b0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
ckVudHJ5IGVudHJ5KQotewotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0
ZXIpKTsKLSAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lz
dGVyKSk7Ci0jZWxzZQotICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZy
YW1lUmVnaXN0ZXIpKTsKLSNlbmRpZgotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpDYWxsRnJh
bWVIZWFkZXJFbnRyeSBlbnRyeSkKIHsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtNjIsMjAg
KzUyLDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2FsbAogI2VuZGlm
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQotewot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgc3RvcmVQdHIoZnJvbSwgcGF5bG9hZEZvcihlbnRy
eSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKLSNlbHNlCi0gICAgc3RvcmU2NChmcm9tLCBhZGRyZXNz
Rm9yKGVudHJ5LCBjYWxsRnJhbWVSZWdpc3RlcikpOwotI2VuZGlmCi19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1
ZSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCi17Ci0gICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICog
c2l6ZW9mKFJlZ2lzdGVyKSkpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRy
eSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQogewogICAgIGxvYWRQdHIoQWRkcmVz
cyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CkBAIC0xOTUsODEgKzE3MSw2
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuZFVuaW50ZXJydXB0ZWQKIAogI2VuZGlmCiAK
LSNpZiBDUFUoQVJNKQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgbW92ZShsaW5rUmVnaXN0ZXIs
IHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewotICAgIG1vdmUocmVnLCBsaW5rUmVnaXN0
ZXIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCi17Ci0gICAgbG9hZFB0cihhZGRyZXNzLCBsaW5r
UmVnaXN0ZXIpOwotfQotI2VsaWYgQ1BVKFNINCkKLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIG1f
YXNzZW1ibGVyLnN0c3ByKHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQotewotICAgIG1fYXNz
ZW1ibGVyLmxkc3ByKHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKLXsKLSAgICBsb2FkUHRy
TGlua1JlZyhhZGRyZXNzKTsKLX0KLQotI2VsaWYgQ1BVKE1JUFMpCi0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykK
LXsKLSAgICBtb3ZlKHJldHVybkFkZHJlc3NSZWdpc3RlciwgcmVnKTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJ
RCByZWcpCi17Ci0gICAgbW92ZShyZWcsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFk
ZHJlc3MgYWRkcmVzcykKLXsKLSAgICBsb2FkUHRyKGFkZHJlc3MsIHJldHVybkFkZHJlc3NSZWdp
c3Rlcik7Ci19Ci0KLSNlbHNlIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCi0KLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklE
IHJlZykKLXsKLSAgICBwb3AocmVnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgcHVz
aChyZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCi17Ci0gICAgcHVzaChhZGRyZXNzKTsKLX0K
LQotI2VuZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVy
ZW5jZSgpCi17Ci0gICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJl
Z2lzdGVyKTsKLSAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3Ry
dWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKLX0KLQogQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6dXBkYXRlVG9wQ2FsbEZyYW1lKCkKIHsKICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8aW50PihtX2J5dGVjb2RlT2Zmc2V0KSA+PSAwKTsKQEAgLTM1MSwxMiArMjUy
LDYgQEAgQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTgogICAgIHJldHVy
biBicmFuY2g4KEJlbG93LCBBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdFR5cGUoUmVnaXN0ZXJJRCBiYXNlUmVn
LCBSZWdpc3RlcklEIHNjcmF0Y2hSZWcsIEpTVHlwZSB0eXBlKQotewotICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0g
ICAgcmV0dXJuIGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0dXJl
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSk7Ci19Ci0KICNpZiBF
TkFCTEUoU0FNUExJTkdfRkxBR1MpCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzZXRTYW1wbGlu
Z0ZsYWcoaW50MzJfdCBmbGFnKQogewpAQCAtOTI4LDExICs4MjMsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlCiAgICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZkpT
Q2VsbChyZWcpKTsKIH0KIAotQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElm
Tm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQotewotICAgIHJldHVybiBicmFuY2hUZXN0NjQoTm9u
WmVybywgcmVnLCB0YWdNYXNrUmVnaXN0ZXIpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcpCiB7CiAgICAgYWRk
U2xvd0Nhc2UoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWcpKTsKQEAgLTk5OSwxNCArODg5LDYgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFJlVAogICAgIGVtaXRGYXN0QXJp
dGhJbnRUb0ltbU5vQ2hlY2soc3JjLCBkZXN0KTsKIH0KIAotLy8gb3BlcmFuZCBpcyBpbnQzMl90
LCBtdXN0IGhhdmUgYmVlbiB6ZXJvLWV4dGVuZGVkIGlmIHJlZ2lzdGVyIGlzIDY0LWJpdC4KLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKLXsKLSAgICBpZiAoc3JjICE9IGRlc3QpCi0gICAg
ICAgIG1vdmUoc3JjLCBkZXN0KTsKLSAgICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVz
dCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUo
UmVnaXN0ZXJJRCByZWcpCiB7CiAgICAgb3IzMihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCByZWcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTM4NDY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVy
IDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQxLDMyNCArNDEsNiBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCi17Ci0gICAgLy8g
KDEpIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIHN0cmlu
ZyBsZW5ndGgKLSAgICBMYWJlbCBzdHJpbmdMZW5ndGhCZWdpbiA9IGFsaWduKCk7Ci0KLSAgICAv
LyByZWdUMCBob2xkcyBwYXlsb2FkLCByZWdUMSBob2xkcyB0YWcKLQotICAgIEp1bXAgc3RyaW5n
X2ZhaWx1cmVDYXNlczEgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgSnVtcCBzdHJpbmdfZmFpbHVyZUNhc2VzMiA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Ci0KLSAg
ICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4K
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTU3RyaW5nLCBtX2xl
bmd0aCkpLCByZWdUMik7Ci0KLSAgICBKdW1wIHN0cmluZ19mYWlsdXJlQ2FzZXMzID0gYnJhbmNo
MzIoQWJvdmUsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSU5UX01BWCkpOwotICAgIG1vdmUocmVnVDIs
IHJlZ1QwKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1Qx
KTsKLQotICAgIHJldCgpOwotICAgIAotICAgIEp1bXBMaXN0IGNhbGxTbG93Q2FzZTsKLSAgICBK
dW1wTGlzdCBjb25zdHJ1Y3RTbG93Q2FzZTsKLQotICAgIC8vIFZpcnR1YWxDYWxsTGluayBUcmFt
cG9saW5lCi0gICAgLy8gcmVnVDEsIHJlZ1QwIGhvbGRzIGNhbGxlZTsgY2FsbEZyYW1lIGlzIG1v
dmVkIGFuZCBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuCi0gICAgTGFiZWwgdmlydHVhbENhbGxMaW5r
QmVnaW4gPSBhbGlnbigpOwotICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSAgICBjYWxsU2xv
d0Nhc2UuYXBwZW5kKGVtaXRKdW1wSWZOb3RUeXBlKHJlZ1QwLCByZWdUMSwgSlNGdW5jdGlvblR5
cGUpKTsKLQotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIEpT
IGZ1bmN0aW9uIGNhbGwuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7Ci0gICAgZW1pdFB1dENlbGxUb0NhbGxG
cmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0KLSAgICAvLyBBbHNvIGlu
aXRpYWxpemUgUmV0dXJuUEMgZm9yIHVzZSBieSBsYXp5IGxpbmtpbmcgYW5kIGV4Y2VwdGlvbnMu
Ci0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKLSAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIEpTU3RhY2s6OlJldHVyblBDKTsKLSAgICAKLSAgICBz
dG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsK
LSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxMYXp5TGlua0Nh
bGwgPSBjYWxsKCk7Ci0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMp
OwotICAgIGp1bXAocmVnVDApOwotCi0gICAgLy8gVmlydHVhbENvbnN0cnVjdExpbmsgVHJhbXBv
bGluZQotICAgIC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWU7IGNhbGxGcmFtZSBpcyBtb3Zl
ZCBhbmQgcGFydGlhbGx5IGluaXRpYWxpemVkLgotICAgIExhYmVsIHZpcnR1YWxDb25zdHJ1Y3RM
aW5rQmVnaW4gPSBhbGlnbigpOwotICAgIGNvbnN0cnVjdFNsb3dDYXNlLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAg
IGNvbnN0cnVjdFNsb3dDYXNlLmFwcGVuZChlbWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDEs
IEpTRnVuY3Rpb25UeXBlKSk7Ci0KLSAgICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0
aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxsLgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
T0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVnVDEpOwotICAgIGVtaXRQ
dXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCi0g
ICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGZvciB1c2UgYnkgbGF6eSBsaW5raW5nIGFu
ZCBleGVwdGlvbnMuCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsK
LSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIEpTU3RhY2s6OlJldHVyblBDKTsK
LSAgICAKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9w
Q2FsbEZyYW1lKTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNh
bGxMYXp5TGlua0NvbnN0cnVjdCA9IGNhbGwoKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihyZWdUMyk7Ci0gICAganVtcChyZWdUMCk7Ci0KLSAgICAvLyBWaXJ0dWFsQ2Fs
bCBUcmFtcG9saW5lCi0gICAgLy8gcmVnVDEsIHJlZ1QwIGhvbGRzIGNhbGxlZTsgcmVnVDIgd2ls
bCBob2xkIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUuCi0gICAgTGFiZWwgdmlydHVhbENhbGxCZWdp
biA9IGFsaWduKCk7Ci0gICAgY2FsbFNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwotICAgIGNhbGxTbG93Q2Fz
ZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5cGUocmVnVDAsIHJlZ1QxLCBKU0Z1bmN0aW9uVHlwZSkp
OwotCi0gICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVu
Y3Rpb24gY2FsbC4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJlZ1QxKTsKLSAgICBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1l
SGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkpLCByZWdU
Mik7Ci0gICAgSnVtcCBoYXNDb2RlQmxvY2sxID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFs
LCBBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX251
bVBhcmFtZXRlcnNGb3JDYWxsKSksIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgcHJlc2VydmVSZXR1
cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKLSAgICAKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVS
ZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICByZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxDb21waWxlQ2FsbCA9IGNhbGwoKTsKLSAgICBy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJl
Z1QyKTsKLQotICAgIGhhc0NvZGVCbG9jazEubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1faml0Q29kZUZv
ckNhbGxXaXRoQXJpdHlDaGVjaykpLCByZWdUMCk7Ci0gICAganVtcChyZWdUMCk7Ci0KLSAgICAv
LyBWaXJ0dWFsQ29uc3RydWN0IFRyYW1wb2xpbmUKLSAgICAvLyByZWdUMSwgcmVnVDAgaG9sZHMg
Y2FsbGVlOyByZWdUMiB3aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZS4KLSAgICBMYWJl
bCB2aXJ0dWFsQ29uc3RydWN0QmVnaW4gPSBhbGlnbigpOwotICAgIGNvbnN0cnVjdFNsb3dDYXNl
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSkpOwotICAgIGNvbnN0cnVjdFNsb3dDYXNlLmFwcGVuZChlbWl0SnVtcElmTm90VHlw
ZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rpb25UeXBlKSk7Ci0KLSAgICAvLyBGaW5pc2ggY2Fub25p
Y2FsIGluaXRpYWxpemF0aW9uIGJlZm9yZSBKUyBmdW5jdGlvbiBjYWxsLgotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVn
VDEpOwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKLSAgICBKdW1wIGhhc0NvZGVCbG9j
azIgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIEFkZHJlc3MocmVnVDIsIE9CSkVDVF9P
RkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCkp
LCBUcnVzdGVkSW1tMzIoMCkpOwotICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChy
ZWdUMyk7Ci0gICAgCi0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERh
dGEtPnRvcENhbGxGcmFtZSk7Ci0gICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAg
Q2FsbCBjYWxsQ29tcGlsZUNvbnN0cnVjdCA9IGNhbGwoKTsKLSAgICByZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKLQotICAgIGhh
c0NvZGVCbG9jazIubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihGdW5jdGlvbkV4ZWN1dGFibGUsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhB
cml0eUNoZWNrKSksIHJlZ1QwKTsKLSAgICBqdW1wKHJlZ1QwKTsKLQotICAgIGNhbGxTbG93Q2Fz
ZS5saW5rKHRoaXMpOwotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVm
b3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
SlNTdGFjazo6Q2FsbGVyRnJhbWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMiwgcmVnVDIpOwotICAgIGVtaXRQdXRD
ZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDIsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCi0gICAg
Ly8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGFuZCBDb2RlQmxvY2ssIGxpa2UgYSBKUyBmdW5j
dGlvbiB3b3VsZC4KLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOwot
ICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOwot
ICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcigwLCBKU1N0YWNrOjpDb2RlQmxv
Y2spOwotCi0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRv
cENhbGxGcmFtZSk7Ci0gICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgQ2FsbCBj
YWxsQ2FsbE5vdEpTRnVuY3Rpb24gPSBjYWxsKCk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBy
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAgcmV0KCk7Ci0KLSAg
ICBjb25zdHJ1Y3RTbG93Q2FzZS5saW5rKHRoaXMpOwotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwg
aW5pdGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIHJlZ1QyKTsKLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMiwgcmVn
VDIpOwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDIsIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pOwotCi0gICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGFuZCBDb2RlQmxv
Y2ssIGxpa2UgYSBKUyBmdW5jdGlvbiB3b3VsZC4KLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwocmVnVDMpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgSlNT
dGFjazo6UmV0dXJuUEMpOwotICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcigw
LCBKU1N0YWNrOjpDb2RlQmxvY2spOwotCi0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIs
ICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Ci0gICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7Ci0gICAgQ2FsbCBjYWxsQ29uc3RydWN0Tm90SlNGdW5jdGlvbiA9IGNhbGwoKTsKLSAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2Fs
bEZyYW1lUmVnaXN0ZXIpOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJl
Z1QzKTsKLSAgICByZXQoKTsKLQotICAgIC8vIE5hdGl2ZUNhbGwgVHJhbXBvbGluZQotICAgIExh
YmVsIG5hdGl2ZUNhbGxUaHVuayA9IHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxE
YXRhKTsgICAgCi0gICAgTGFiZWwgbmF0aXZlQ29uc3RydWN0VGh1bmsgPSBwcml2YXRlQ29tcGls
ZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgdHJ1ZSk7ICAgIAotCi0gICAgQ2FsbCBzdHJpbmdf
ZmFpbHVyZUNhc2VzMUNhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVD
YXNlczEpOwotICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsID0gbWFrZVRhaWxSZWN1
cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMyKTsKLSAgICBDYWxsIHN0cmluZ19mYWlsdXJl
Q2FzZXMzQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMyk7
Ci0KLSAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxp
bmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4K
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIEdMT0JBTF9U
SFVOS19JRCk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2Fs
bCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3Bf
Z2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFp
bHVyZUNhc2VzM0NhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwp
KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGlua0NhbGwsIEZ1bmN0aW9uUHRyKGN0
aV92bV9sYXp5TGlua0NhbGwpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGlua0Nv
bnN0cnVjdCwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ29uc3RydWN0KSk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZUNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2pp
dENvbXBpbGUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlQ29uc3RydWN0LCBG
dW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxDYWxsTm90SlNGdW5jdGlvbiwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfTm90
SlNGdW5jdGlvbikpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbnN0cnVjdE5vdEpTRnVu
Y3Rpb24sIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpKTsKLQot
ICAgIENvZGVSZWYgZmluYWxDb2RlID0gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJKSVQg
Q1RJIG1hY2hpbmUgdHJhbXBvbGluZXMiKSk7Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0YWJsZU1lbW9yeSgpOwot
Ci0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHBhdGNoQnVmZmVyLnRyYW1w
b2xpbmVBdCh2aXJ0dWFsQ2FsbExpbmtCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1
YWxDb25zdHJ1Y3RMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDb25zdHJ1
Y3RMaW5rQmVnaW4pOwotICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbCA9IHBhdGNoQnVm
ZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbEJlZ2luKTsKLSAgICB0cmFtcG9saW5lcy0+Y3Rp
VmlydHVhbENvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ29uc3Ry
dWN0QmVnaW4pOwotICAgIHRyYW1wb2xpbmVzLT5jdGlOYXRpdmVDYWxsID0gcGF0Y2hCdWZmZXIu
dHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7Ci0gICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2
ZUNvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDb25zdHJ1Y3RUaHVu
ayk7Ci0gICAgdHJhbXBvbGluZXMtPmN0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUgPSBwYXRjaEJ1
ZmZlci50cmFtcG9saW5lQXQoc3RyaW5nTGVuZ3RoQmVnaW4pOwotCi0gICAgcmV0dXJuIGV4ZWN1
dGFibGVNZW1vcnkucmVsZWFzZSgpOwotfQotCi1KSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0NvbnN0cnVj
dCkKLXsKLSAgICBpbnQgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24gPSBpc0NvbnN0cnVjdCA/
IE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBtX2NvbnN0cnVjdG9yKSA6IE9CSkVD
VF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBtX2Z1bmN0aW9uKTsKLQotICAgIExhYmVsIG5h
dGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7Ci0KLSAgICBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJh
bWVIZWFkZXIoMCwgSlNTdGFjazo6Q29kZUJsb2NrKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVS
ZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLQotI2lmIENQVShYODYpCi0g
ICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1l
IHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KLSAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBk
YXRhLgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZy
YW1lLCByZWdUMCk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVh
ZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAgIHBlZWsocmVnVDEpOwotICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6UmV0dXJuUEMpOwotCi0g
ICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoZWN4LCBlZHgsIC4uLik7Ci0gICAgLy8g
SG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7Ci0gICAgbW92ZShjYWxsRnJh
bWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOwotCi0gICAgc3ViUHRyKFRydXN0ZWRJbW0z
MigxNiAtIHNpemVvZih2b2lkKikpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7IC8vIEFsaWduIHN0
YWNrIGFmdGVyIGNhbGwuCi0KLSAgICAvLyBjYWxsIHRoZSBmdW5jdGlvbgotICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlZSwgcmVnVDEpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJs
ZSkpLCByZWdUMSk7Ci0gICAgbW92ZShyZWdUMCwgY2FsbEZyYW1lUmVnaXN0ZXIpOyAvLyBFYWdl
cmx5IHJlc3RvcmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBz
dGFjay4KLSAgICBjYWxsKEFkZHJlc3MocmVnVDEsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9u
KSk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9mKHZvaWQqKSksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLQotI2VsaWYgQ1BVKEFSTSkKLSAgICAvLyBMb2FkIGNhbGxlciBm
cmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3
ZSBjYWxsIGNhbgotICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIHJlZ1QyKTsKLSAgICBl
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMSwg
cmVnVDIpOwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6
OlNjb3BlQ2hhaW4pOwotCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1Qz
KTsgLy8gQ2FsbGVlIHByZXNlcnZlZAotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdU
MywgSlNTdGFjazo6UmV0dXJuUEMpOwotCi0gICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAg
IGYocjAgPT0gcmVnVDAsIHIxID09IHJlZ1QxLCAuLi4pOwotICAgIC8vIEhvc3QgZnVuY3Rpb24g
c2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwotICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIEFS
TVJlZ2lzdGVyczo6cjApOwotCi0gICAgLy8gY2FsbCB0aGUgZnVuY3Rpb24KLSAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZWUsIEFSTVJlZ2lzdGVyczo6cjEp
OwotICAgIG1vdmUocmVnVDIsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3Jl
IGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3RhY2suCi0gICAg
bG9hZFB0cihBZGRyZXNzKEFSTVJlZ2lzdGVyczo6cjEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0
aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIpOwotICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKLQotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKHJlZ1QzKTsKLSNlbGlmIENQVShTSDQpCi0gICAgLy8gTG9hZCBjYWxsZXIgZnJh
bWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2Ug
Y2FsbCBjYW4KLSAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgotICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCByZWdUMik7Ci0gICAgZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgcmVnVDEsIHJl
Z1QyKTsKLSAgICBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpT
Y29wZUNoYWluKTsKLQotICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7
IC8vIENhbGxlZSBwcmVzZXJ2ZWQKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMs
IEpTU3RhY2s6OlJldHVyblBDKTsKLQotICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogZihyMCA9
PSByZWdUNCwgcjEgPT0gcmVnVDUsIC4uLik7Ci0gICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1
cmU6IGYoRXhlY1N0YXRlKik7Ci0gICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDQpOwot
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVlLCByZWdU
NSk7Ci0gICAgbW92ZShyZWdUMiwgY2FsbEZyYW1lUmVnaXN0ZXIpOyAvLyBFYWdlcmx5IHJlc3Rv
cmUgY2FsbGVyIGZyYW1lIHJlZ2lzdGVyIHRvIGF2b2lkIGxvYWRpbmcgZnJvbSBzdGFjay4KLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDUsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4
ZWN1dGFibGUpKSwgcmVnVDIpOwotCi0gICAgY2FsbChBZGRyZXNzKHJlZ1QyLCBleGVjdXRhYmxl
T2Zmc2V0VG9GdW5jdGlvbiksIHJlZ1QwKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihyZWdUMyk7Ci0jZWxpZiBDUFUoTUlQUykKLSAgICAvLyBMb2FkIGNhbGxlciBmcmFt
ZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBj
YWxsIGNhbgotICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMSwgcmVn
VDApOwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pOwotCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsg
Ly8gQ2FsbGVlIHByZXNlcnZlZAotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywg
SlNTdGFjazo6UmV0dXJuUEMpOwotCi0gICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYo
YTAsIGExLCBhMiwgYTMpOwotICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNT
dGF0ZSopOwotCi0gICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9yIDE2IGJ5dGVzICg4LWJ5
dGUgYWxpZ25lZCkKLSAgICAvLyAxNiBieXRlcyAodW51c2VkKSBmb3IgNCBhcmd1bWVudHMKLSAg
ICBzdWJQdHIoVHJ1c3RlZEltbTMyKDE2KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAg
Ly8gU2V0dXAgYXJnMAotICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6
OmEwKTsKLQotICAgIC8vIENhbGwKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpDYWxsZWUsIE1JUFNSZWdpc3RlcnM6OmEyKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
TUlQU1JlZ2lzdGVyczo6YTIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFi
bGUpKSwgcmVnVDIpOwotICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFn
ZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20g
c3RhY2suCi0gICAgY2FsbChBZGRyZXNzKHJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlv
bikpOwotCi0gICAgLy8gUmVzdG9yZSBzdGFjayBzcGFjZQotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoMTYpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICByZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihyZWdUMyk7Ci0KLSNlbHNlCi0jZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVk
IG9uIHRoaXMgcGxhdGZvcm0uIgotICAgIFVOVVNFRF9QQVJBTShleGVjdXRhYmxlT2Zmc2V0VG9G
dW5jdGlvbik7Ci0gICAgYnJlYWtwb2ludCgpOwotI2VuZGlmIC8vIENQVShYODYpCi0KLSAgICAv
LyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uCi0gICAgSnVtcCBzYXdFeGNlcHRpb24gPSBicmFuY2gz
MihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZnbG9i
YWxEYXRhLT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotCi0gICAgLy8gUmV0
dXJuLgotICAgIHJldCgpOwotCi0gICAgLy8gSGFuZGxlIGFuIGV4Y2VwdGlvbgotICAgIHNhd0V4
Y2VwdGlvbi5saW5rKHRoaXMpOwotCi0gICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0g
ICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QxKTsKLQotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pLCByZWdUMik7Ci0gICAg
c3RvcmVQdHIocmVnVDEsIHJlZ1QyKTsKLSAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9p
ZCopKTsKLSAgICAKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0
YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAvLyBTZXQgdGhlIHJldHVybiBhZGRyZXNzLgotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihjdGlWTVRocm93VHJhbXBvbGluZSkudmFsdWUo
KSksIHJlZ1QxKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMSk7
Ci0KLSAgICByZXQoKTsKLQotICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7Ci19Ci0KIEpJVDo6
Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAgICAgQ2FsbCBuYXRpdmVDYWxsOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAx
Mzg0NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MywzMDggKzQzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogCi1QYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKLXsKLSAgICAvLyAoMikgVGhlIHNl
Y29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxl
bmd0aAotICAgIExhYmVsIHN0cmluZ0xlbmd0aEJlZ2luID0gYWxpZ24oKTsKLQotICAgIC8vIENo
ZWNrIGVheCBpcyBhIHN0cmluZwotICAgIEp1bXAgc3RyaW5nX2ZhaWx1cmVDYXNlczEgPSBlbWl0
SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKLSAgICBKdW1wIHN0cmluZ19mYWlsdXJlQ2FzZXMyID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbVB0cihnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsK
LQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBVc3Ry
aW5nLgotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNTdHJpbmcs
IG1fbGVuZ3RoKSksIHJlZ1QwKTsKLQotICAgIEp1bXAgc3RyaW5nX2ZhaWx1cmVDYXNlczMgPSBi
cmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSk7Ci0KLSAgICAvLyByZWdU
MCBjb250YWlucyBhIDY0IGJpdCB2YWx1ZSAoaXMgcG9zaXRpdmUsIGlzIHplcm8gZXh0ZW5kZWQp
IHNvIHdlIGRvbid0IG5lZWQgc2lnbiBleHRlbmQgaGVyZS4KLSAgICBlbWl0RmFzdEFyaXRoSW50
VG9JbW1Ob0NoZWNrKHJlZ1QwLCByZWdUMCk7Ci0gICAgCi0gICAgcmV0KCk7Ci0KLSAgICAvLyAo
MykgVHJhbXBvbGluZXMgZm9yIHRoZSBzbG93IGNhc2VzIG9mIG9wX2NhbGwgLyBvcF9jYWxsX2V2
YWwgLyBvcF9jb25zdHJ1Y3QuCi0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKENvZGVUeXBlKSA9
PSA0LCBDb2RlVHlwZUVudW1NdXN0QmUzMkJpdCk7Ci0KLSAgICBKdW1wTGlzdCBjYWxsU2xvd0Nh
c2U7Ci0gICAgSnVtcExpc3QgY29uc3RydWN0U2xvd0Nhc2U7Ci0KLSAgICAvLyBWaXJ0dWFsQ2Fs
bExpbmsgVHJhbXBvbGluZQotICAgIC8vIHJlZ1QwIGhvbGRzIGNhbGxlZTsgY2FsbEZyYW1lIGlz
IG1vdmVkIGFuZCBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQuCi0gICAgTGFiZWwgdmlydHVhbENhbGxM
aW5rQmVnaW4gPSBhbGlnbigpOwotICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5v
dEpTQ2VsbChyZWdUMCkpOwotICAgIGNhbGxTbG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdFR5
cGUocmVnVDAsIHJlZ1QxLCBKU0Z1bmN0aW9uVHlwZSkpOwotCi0gICAgLy8gRmluaXNoIGNhbm9u
aWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJl
Z1QxKTsKLSAgICBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpT
Y29wZUNoYWluKTsKLQotICAgIC8vIEFsc28gaW5pdGlhbGl6ZSBSZXR1cm5QQyBmb3IgdXNlIGJ5
IGxhenkgbGlua2luZyBhbmQgZXhjZXB0aW9ucy4KLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwocmVnVDMpOwotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgSlNT
dGFjazo6UmV0dXJuUEMpOwotICAgIAotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCAm
bV9nbG9iYWxEYXRhLT50b3BDYWxsRnJhbWUpOwotICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZSgpOwotICAgIENhbGwgY2FsbExhenlMaW5rQ2FsbCA9IGNhbGwoKTsKLSAgICByZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7Ci0gICAganVtcChyZWdUMCk7Ci0KLSAgICAv
LyBWaXJ0dWFsQ29uc3RydWN0TGluayBUcmFtcG9saW5lCi0gICAgLy8gcmVnVDAgaG9sZHMgY2Fs
bGVlOyBjYWxsRnJhbWUgaXMgbW92ZWQgYW5kIHBhcnRpYWxseSBpbml0aWFsaXplZC4KLSAgICBM
YWJlbCB2aXJ0dWFsQ29uc3RydWN0TGlua0JlZ2luID0gYWxpZ24oKTsKLSAgICBjb25zdHJ1Y3RT
bG93Q2FzZS5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCkpOwotICAgIGNvbnN0cnVj
dFNsb3dDYXNlLmFwcGVuZChlbWl0SnVtcElmTm90VHlwZShyZWdUMCwgcmVnVDEsIEpTRnVuY3Rp
b25UeXBlKSk7Ci0KLSAgICAvLyBGaW5pc2ggY2Fub25pY2FsIGluaXRpYWxpemF0aW9uIGJlZm9y
ZSBKUyBmdW5jdGlvbiBjYWxsLgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09G
RlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVnVDEpOwotICAgIGVtaXRQdXRDZWxsVG9D
YWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCi0gICAgLy8gQWxz
byBpbml0aWFsaXplIFJldHVyblBDIGZvciB1c2UgYnkgbGF6eSBsaW5raW5nIGFuZCBleGVwdGlv
bnMuCi0gICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKLSAgICBlbWl0
UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIEpTU3RhY2s6OlJldHVyblBDKTsKLSAgICAKLSAg
ICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1l
KTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxMYXp5TGlu
a0NvbnN0cnVjdCA9IGNhbGwoKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVy
bihyZWdUMyk7Ci0gICAganVtcChyZWdUMCk7Ci0KLSAgICAvLyBWaXJ0dWFsQ2FsbCBUcmFtcG9s
aW5lCi0gICAgLy8gcmVnVDAgaG9sZHMgY2FsbGVlOyByZWdUMiB3aWxsIGhvbGQgdGhlIEZ1bmN0
aW9uRXhlY3V0YWJsZS4KLSAgICBMYWJlbCB2aXJ0dWFsQ2FsbEJlZ2luID0gYWxpZ24oKTsKLSAg
ICBjYWxsU2xvd0Nhc2UuYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApKTsKLSAgICBj
YWxsU2xvd0Nhc2UuYXBwZW5kKGVtaXRKdW1wSWZOb3RUeXBlKHJlZ1QwLCByZWdUMSwgSlNGdW5j
dGlvblR5cGUpKTsKLQotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVm
b3JlIEpTIGZ1bmN0aW9uIGNhbGwuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7Ci0gICAgZW1pdFB1dENlbGxU
b0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0KLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFi
bGUpKSwgcmVnVDIpOwotICAgIEp1bXAgaGFzQ29kZUJsb2NrMSA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuT3JFcXVhbCwgQWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0
YWJsZSwgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCkpLCBUcnVzdGVkSW1tMzIoMCkpOwotICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7Ci0gICAgc3RvcmVQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxGcmFtZSk7Ci0gICAgcmVzdG9yZUFy
Z3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgQ2FsbCBjYWxsQ29tcGlsZUNhbGwgPSBjYWxsKCk7Ci0g
ICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSkp
LCByZWdUMik7Ci0KLSAgICBoYXNDb2RlQmxvY2sxLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoRnVuY3Rpb25FeGVjdXRhYmxlLCBtX2ppdENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spKSwgcmVnVDApOwotICAgIGp1bXAocmVnVDApOwotCi0g
ICAgLy8gVmlydHVhbENvbnN0cnVjdCBUcmFtcG9saW5lCi0gICAgLy8gcmVnVDAgaG9sZHMgY2Fs
bGVlOyByZWdUMiB3aWxsIGhvbGQgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZS4KLSAgICBMYWJlbCB2
aXJ0dWFsQ29uc3RydWN0QmVnaW4gPSBhbGlnbigpOwotICAgIGNvbnN0cnVjdFNsb3dDYXNlLmFw
cGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKSk7Ci0gICAgY29uc3RydWN0U2xvd0Nhc2Uu
YXBwZW5kKGVtaXRKdW1wSWZOb3RUeXBlKHJlZ1QwLCByZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsK
LQotICAgIC8vIEZpbmlzaCBjYW5vbmljYWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIEpTIGZ1bmN0
aW9uIGNhbGwuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9zY29wZSkpLCByZWdUMSk7Ci0gICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhl
YWRlcihyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwgcmVnVDIp
OwotICAgIEp1bXAgaGFzQ29kZUJsb2NrMiA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
QWRkcmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9udW1Q
YXJhbWV0ZXJzRm9yQ29uc3RydWN0KSksIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgcHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdp
c3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICByZXN0b3JlQXJndW1lbnRS
ZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxDb21waWxlQ29uc3RydWN0ID0gY2FsbCgpOwotICAg
IHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwg
cmVnVDIpOwotCi0gICAgaGFzQ29kZUJsb2NrMi5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMiwgT0JKRUNUX09GRlNFVE9GKEZ1bmN0aW9uRXhlY3V0YWJsZSwgbV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spKSwgcmVnVDApOwotICAgIGp1bXAocmVnVDApOwot
Ci0gICAgY2FsbFNsb3dDYXNlLmxpbmsodGhpcyk7Ci0gICAgLy8gRmluaXNoIGNhbm9uaWNhbCBp
bml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KLSAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgcmVnVDIpOwotICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1QyLCByZWdU
Mik7Ci0gICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMiwgSlNTdGFjazo6U2Nv
cGVDaGFpbik7Ci0KLSAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0dXJuUEMgYW5kIENvZGVCbG9j
aywgbGlrZSBhIEpTIGZ1bmN0aW9uIHdvdWxkLgotICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChyZWdUMyk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBKU1N0
YWNrOjpSZXR1cm5QQyk7Ci0gICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKDAs
IEpTU3RhY2s6OkNvZGVCbG9jayk7Ci0KLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3Rlciwg
Jm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVu
Y2UoKTsKLSAgICBDYWxsIGNhbGxDYWxsTm90SlNGdW5jdGlvbiA9IGNhbGwoKTsKLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsK
LSAgICByZXQoKTsKLQotICAgIGNvbnN0cnVjdFNsb3dDYXNlLmxpbmsodGhpcyk7Ci0gICAgLy8g
RmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4K
LSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwg
cmVnVDIpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3Bl
Q2hhaW4sIHJlZ1QyLCByZWdUMik7Ci0gICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihy
ZWdUMiwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0KLSAgICAvLyBBbHNvIGluaXRpYWxpemUgUmV0
dXJuUEMgYW5kIENvZGVCbG9jaywgbGlrZSBhIEpTIGZ1bmN0aW9uIHdvdWxkLgotICAgIHByZXNl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKHJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7Ci0gICAgZW1pdFB1dEltbWVkaWF0ZVRv
Q2FsbEZyYW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7Ci0KLSAgICBzdG9yZVB0cihj
YWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICByZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBDYWxsIGNhbGxDb25zdHJ1Y3ROb3RKU0Z1bmN0
aW9uID0gY2FsbCgpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6
OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgcmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4ocmVnVDMpOwotICAgIHJldCgpOwotCi0gICAgLy8gTmF0aXZlQ2FsbCBU
cmFtcG9saW5lCi0gICAgTGFiZWwgbmF0aXZlQ2FsbFRodW5rID0gcHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKGdsb2JhbERhdGEpOyAgICAKLSAgICBMYWJlbCBuYXRpdmVDb25zdHJ1Y3RUaHVu
ayA9IHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCB0cnVlKTsgICAgCi0K
LSAgICBDYWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2Fs
bChzdHJpbmdfZmFpbHVyZUNhc2VzMSk7Ci0gICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzMkNh
bGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczIpOwotICAgIENh
bGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxsID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmlu
Z19mYWlsdXJlQ2FzZXMzKTsKLQotICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEg
Y29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhl
IE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcywgR0xPQkFMX1RIVU5LX0lEKTsKLQotICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5n
X2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19m
YWlsKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMkNhbGwsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9zdHJpbmdfZmFpbCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rQ2Fs
bCwgRnVuY3Rpb25QdHIoY3RpX3ZtX2xhenlMaW5rQ2FsbCkpOwotICAgIHBhdGNoQnVmZmVyLmxp
bmsoY2FsbExhenlMaW5rQ29uc3RydWN0LCBGdW5jdGlvblB0cihjdGlfdm1fbGF6eUxpbmtDb25z
dHJ1Y3QpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlQ2FsbCwgRnVuY3Rpb25Q
dHIoY3RpX29wX2NhbGxfaml0Q29tcGlsZSkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENv
bXBpbGVDb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENhbGxOb3RKU0Z1bmN0aW9uLCBGdW5jdGlvblB0
cihjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
Q29uc3RydWN0Tm90SlNGdW5jdGlvbiwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9Ob3RK
U0NvbnN0cnVjdCkpOwotCi0gICAgQ29kZVJlZiBmaW5hbENvZGUgPSBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAoIkpJVCBDVEkgbWFjaGluZSB0cmFtcG9saW5lcyIpKTsKLSAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1lbW9yeSA9IGZpbmFsQ29kZS5leGVj
dXRhYmxlTWVtb3J5KCk7Ci0KLSAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENhbGxMaW5rID0g
cGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKLSAgICB0cmFt
cG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5l
QXQodmlydHVhbENvbnN0cnVjdExpbmtCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1
YWxDYWxsID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsQmVnaW4pOwotICAg
IHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGlu
ZUF0KHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7Ci0gICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNh
bGwgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQobmF0aXZlQ2FsbFRodW5rKTsKLSAgICB0cmFt
cG9saW5lcy0+Y3RpTmF0aXZlQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5h
dGl2ZUNvbnN0cnVjdFRodW5rKTsKLSAgICB0cmFtcG9saW5lcy0+Y3RpU3RyaW5nTGVuZ3RoVHJh
bXBvbGluZSA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChzdHJpbmdMZW5ndGhCZWdpbik7Ci0g
ICAgCi0gICAgcmV0dXJuIGV4ZWN1dGFibGVNZW1vcnkucmVsZWFzZSgpOwotfQotCi1KSVQ6Okxh
YmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgYm9vbCBpc0NvbnN0cnVjdCkKLXsKLSAgICBpbnQgZXhlY3V0YWJsZU9mZnNldFRvRnVu
Y3Rpb24gPSBpc0NvbnN0cnVjdCA/IE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBt
X2NvbnN0cnVjdG9yKSA6IE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBtX2Z1bmN0
aW9uKTsKLQotICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7Ci0gICAgCi0gICAg
ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKDAsIEpTU3RhY2s6OkNvZGVCbG9jayk7
Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsICZtX2dsb2JhbERhdGEtPnRvcENhbGxG
cmFtZSk7Ci0KLSNpZiBDUFUoWDg2XzY0KQotICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2Nv
cGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2Fu
Ci0gICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgcmVnVDApOwotICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFp
bik7Ci0KLSAgICBwZWVrKHJlZ1QxKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVn
VDEsIEpTU3RhY2s6OlJldHVyblBDKTsKLQotICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAg
ICBmKGVkaSwgZXNpLCBlZHgsIGVjeCwgLi4uKTsKLSAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25h
dHVyZTogZihFeGVjU3RhdGUqKTsKLSAgICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdp
c3RlcnM6OmVkaSk7Ci0KLSAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9mKGludDY0
X3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBBbGlnbiBzdGFjayBhZnRlciBjYWxsLgot
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVlLCBYODZS
ZWdpc3RlcnM6OmVzaSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZXNpLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIFg4NlJlZ2lzdGVyczo6
cjkpOwotICAgIG1vdmUocmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSByZXN0
b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3RhY2suCi0g
ICAgY2FsbChBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0
aW9uKSk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9mKGludDY0X3QpKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0jZWxpZiBDUFUoQVJNKQotICAgIC8vIExvYWQgY2Fs
bGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRl
dmVyIHdlIGNhbGwgY2FuCi0gICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgcmVnVDIpOwot
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJl
Z1QxLCByZWdUMik7Ci0gICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNT
dGFjazo6U2NvcGVDaGFpbik7Ci0KLSAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
cmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCi0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVy
KHJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7Ci0KLSAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246
ICAgICAgZihyMCA9PSByZWdUMCwgcjEgPT0gcmVnVDEsIC4uLik7Ci0gICAgLy8gSG9zdCBmdW5j
dGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7Ci0gICAgbW92ZShjYWxsRnJhbWVSZWdpc3Rl
ciwgQVJNUmVnaXN0ZXJzOjpyMCk7Ci0KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU1N0YWNrOjpDYWxsZWUsIEFSTVJlZ2lzdGVyczo6cjEpOwotICAgIG1vdmUocmVnVDIsIGNh
bGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3Rl
ciB0byBhdm9pZCBsb2FkaW5nIGZyb20gc3RhY2suCi0gICAgbG9hZFB0cihBZGRyZXNzKEFSTVJl
Z2lzdGVyczo6cjEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2V4ZWN1dGFibGUpKSwg
cmVnVDIpOwotICAgIGNhbGwoQWRkcmVzcyhyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rp
b24pKTsKLQotICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QzKTsKLQot
I2VsaWYgQ1BVKE1JUFMpCi0gICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBp
bnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KLSAgICAvLyBn
ZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KEpTU3RhY2s6OkNhbGxlckZyYW1lLCByZWdUMCk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQotICAg
IHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2
ZWQKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVnVDMsIEpTU3RhY2s6OlJldHVyblBD
KTsKLQotICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKGEwLCBhMSwgYTIsIGEzKTsK
LSAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKLQotICAgIC8v
IEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciAxNiBieXRlcyAoOC1ieXRlIGFsaWduZWQpCi0gICAg
Ly8gMTYgYnl0ZXMgKHVudXNlZCkgZm9yIDQgYXJndW1lbnRzCi0gICAgc3ViUHRyKFRydXN0ZWRJ
bW0zMigxNiksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIC8vIFNldHVwIGFyZzAKLSAg
ICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjphMCk7Ci0KLSAgICAvLyBD
YWxsCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVlLCBN
SVBTUmVnaXN0ZXJzOjphMik7Ci0gICAgbG9hZFB0cihBZGRyZXNzKE1JUFNSZWdpc3RlcnM6OmEy
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9leGVjdXRhYmxlKSksIHJlZ1QyKTsKLSAg
ICBtb3ZlKHJlZ1QwLCBjYWxsRnJhbWVSZWdpc3Rlcik7IC8vIEVhZ2VybHkgcmVzdG9yZSBjYWxs
ZXIgZnJhbWUgcmVnaXN0ZXIgdG8gYXZvaWQgbG9hZGluZyBmcm9tIHN0YWNrLgotICAgIGNhbGwo
QWRkcmVzcyhyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKLQotICAgIC8vIFJl
c3RvcmUgc3RhY2sgc3BhY2UKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKDE2KSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwotCi0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVn
VDMpOwotCi0jZWxzZQotI2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3Jt
LiIKLSAgICBVTlVTRURfUEFSQU0oZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pOwotICAgIGJy
ZWFrcG9pbnQoKTsKLSNlbmRpZgotCi0gICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbgotICAg
IGxvYWQ2NCgmKGdsb2JhbERhdGEtPmV4Y2VwdGlvbiksIHJlZ1QyKTsKLSAgICBKdW1wIGV4Y2Vw
dGlvbkhhbmRsZXIgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcmVnVDIpOwotCi0gICAgLy8gUmV0
dXJuLgotICAgIHJldCgpOwotCi0gICAgLy8gSGFuZGxlIGFuIGV4Y2VwdGlvbgotICAgIGV4Y2Vw
dGlvbkhhbmRsZXIubGluayh0aGlzKTsKLQotICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNz
LgotICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMSk7Ci0KLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoJmdsb2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uKSwgcmVnVDIpOwot
ICAgIHN0b3JlUHRyKHJlZ1QxLCByZWdUMik7Ci0gICAgcG9rZShjYWxsRnJhbWVSZWdpc3Rlciwg
T0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9m
KHZvaWQqKSk7Ci0KLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgJm1fZ2xvYmFsRGF0
YS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAvLyBTZXQgdGhlIHJldHVybiBhZGRyZXNzLgotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihGdW5jdGlvblB0cihjdGlWTVRocm93VHJhbXBvbGluZSkudmFsdWUo
KSksIHJlZ1QxKTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMSk7
Ci0KLSAgICByZXQoKTsKLQotICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7Ci19Ci0KIEpJVDo6
Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uKQogewotICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7
CisgICAgcmV0dXJuIGdsb2JhbERhdGEtPmdldENUSVN0dWIobmF0aXZlQ2FsbEdlbmVyYXRvcik7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9u
IDEzODQ2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDcgQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRy
eUNhY2hlR2V0QnlJRAogICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkgJiYgcHJvcGVydHlO
YW1lID09IGNhbGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewogICAgICAgICAvLyBU
aGUgdHJhZGVvZmYgb2YgY29tcGlsaW5nIGFuIHBhdGNoZWQgaW5saW5lIHN0cmluZyBsZW5ndGgg
YWNjZXNzIHJvdXRpbmUgZG9lcyBub3Qgc2VlbQogICAgICAgICAvLyB0byBwYXkgb2ZmLCBzbyB3
ZSBjdXJyZW50bHkgb25seSBkbyB0aGlzIGZvciBhcnJheXMuCi0gICAgICAgIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lKCkpOworICAgICAgICBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBnbG9iYWxEYXRhLT5n
ZXRDVElTdHViKHN0cmluZ0xlbmd0aFRyYW1wb2xpbmVHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5jcHAJKHJldmlzaW9uIDEzODQ2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsNiBAQCBKSVRUaHVua3M6
OkpJVFRodW5rcyhKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5V
c2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gSklU
Ojpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGdsb2JhbERhdGEsICZtX3RyYW1wb2xpbmVT
dHJ1Y3R1cmUpOwotICAgIEFTU0VSVCghIW1fZXhlY3V0YWJsZU1lbW9yeSk7CiAjaWYgQ1BVKEFS
TV9USFVNQjIpCiAgICAgLy8gVW5mb3J0dW5hdGUgdGhlIGFybSBjb21waWxlciBkb2VzIG5vdCBs
aWtlIHRoZSB1c2Ugb2Ygb2Zmc2V0b2Ygb24gSklUU3RhY2tGcmFtZSAoc2luY2UgaXQgY29udGFp
bnMgbm9uIFBPRCB0eXBlcyksCiAgICAgLy8gYW5kIHRoZSBPQkpFQ1RfT0ZGU0VUT0YgbWFjcm8g
ZG9lcyBub3QgYXBwZWFyIGNvbnN0YW50aXNoIGVub3VnaCBmb3IgaXQgdG8gYmUgaGFwcHkgd2l0
aCBpdHMgdXNlIGluIENPTVBJTEVfQVNTRVJUCkBAIC04Niw2ICs4NCwyMyBAQCBKSVRUaHVua3M6
On5KSVRUaHVua3MoKQogewogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpj
dGlOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyNpZiBFTkFCTEUoTExJ
TlQpCisgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKKyAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X25hdGl2ZV9jYWxs
X3RyYW1wb2xpbmUpOworI2VuZGlmCisgICAgcmV0dXJuIGN0aVN0dWIoZ2xvYmFsRGF0YSwgbmF0
aXZlQ2FsbEdlbmVyYXRvcikuY29kZSgpOworfQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRo
dW5rczo6Y3RpTmF0aXZlQ29uc3RydWN0KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyNp
ZiBFTkFCTEUoTExJTlQpCisgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50
X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7CisjZW5kaWYKKyAgICByZXR1cm4gY3RpU3R1
YihnbG9iYWxEYXRhLCBuYXRpdmVDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKK30KKwogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKICAgICBDVElTdHViTWFwOjpBZGRS
ZXN1bHQgZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmKCkpOwpAQCAtOTksNyArMTE0LDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtz
Ojpob3N0RnVuY3RpbwogICAgIGlmIChOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxl
ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5nZXQoZnVuY3Rpb24pKQogICAgICAgICByZXR1cm4g
bmF0aXZlRXhlY3V0YWJsZTsKIAotICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFi
bGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNU
SU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkp
LCBjb25zdHJ1Y3RvciwgTm9JbnRyaW5zaWMpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2
ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6
Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29u
c3RydWN0KGdsb2JhbERhdGEpKSwgY29uc3RydWN0b3IsIE5vSW50cmluc2ljKTsKICAgICB3ZWFr
QWRkKCptX2hvc3RGdW5jdGlvblN0dWJNYXAsIGZ1bmN0aW9uLCBQYXNzV2VhazxOYXRpdmVFeGVj
dXRhYmxlPihuYXRpdmVFeGVjdXRhYmxlKSk7CiAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFibGU7
CiB9CkBAIC0xMTgsNyArMTMzLDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0
RnVuY3RpbwogICAgIH0gZWxzZQogICAgICAgICBjb2RlID0gSklUOjpjb21waWxlQ1RJTmF0aXZl
Q2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbik7CiAKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRp
dmVFeGVjdXRhYmxlID0gTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2Rl
LCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvciwg
aW50cmluc2ljKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0
aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3Ry
dWN0KGdsb2JhbERhdGEpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIGludHJpbnNp
Yyk7CiAgICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBmdW5jdGlvbiwgUGFzc1dl
YWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSkpOwogICAgIHJldHVybiBuYXRp
dmVFeGVjdXRhYmxlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5o
CShyZXZpc2lvbiAxMzg0NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw0NCArNDQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiBj
bGFzcyBKU0dsb2JhbERhdGE7CiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwogCi1zdHJ1Y3QgVHJh
bXBvbGluZVN0cnVjdHVyZSB7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVN0cmluZ0xl
bmd0aFRyYW1wb2xpbmU7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDYWxs
TGluazsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpVmlydHVhbENvbnN0cnVjdExpbms7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDYWxsOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ29uc3RydWN0OwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjdGlOYXRpdmVDYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVD
b25zdHJ1Y3Q7Ci19OwotCi1jbGFzcyBKSVRUaHVua3NQcml2YXRlRGF0YTsKLQogY2xhc3MgSklU
VGh1bmtzIHsKIHB1YmxpYzoKICAgICBKSVRUaHVua3MoSlNHbG9iYWxEYXRhKik7CiAgICAgfkpJ
VFRodW5rcygpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVN0cmluZ0xlbmd0aFRy
YW1wb2xpbmUoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpU3RyaW5nTGVuZ3Ro
VHJhbXBvbGluZTsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlWaXJ0dWFsQ2FsbExp
bmsoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpVmlydHVhbENhbGxMaW5rOyB9
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rKCkgeyBy
ZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rOyB9Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVZpcnR1YWxDYWxsKCkgeyByZXR1cm4gbV90cmFt
cG9saW5lU3RydWN0dXJlLmN0aVZpcnR1YWxDYWxsOyB9Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGN0aVZpcnR1YWxDb25zdHJ1Y3QoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUu
Y3RpVmlydHVhbENvbnN0cnVjdDsgfQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRp
dmVDYWxsKCkKLSAgICB7Ci0jaWYgRU5BQkxFKExMSU5UKQotICAgICAgICBpZiAoIW1fZXhlY3V0
YWJsZU1lbW9yeSkKLSAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNy
ZWF0ZUxMSW50Q29kZVB0cihsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lKTsKLSNlbmRpZgot
ICAgICAgICByZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aU5hdGl2ZUNhbGw7Ci0gICAg
fQotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoKQotICAgIHsK
LSNpZiBFTkFCTEUoTExJTlQpCi0gICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQotICAg
ICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRy
KGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0
dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlOYXRpdmVDb25zdHJ1Y3Q7Ci0gICAgfQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhKik7
CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3RpU3R1YihKU0dsb2JhbERhdGEqLCBUaHVu
a0dlbmVyYXRvcik7CiAKQEAgLTk1LDkgKzY0LDYgQEAgcHJpdmF0ZToKICAgICBDVElTdHViTWFw
IG1fY3RpU3R1Yk1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8TmF0aXZlRnVuY3Rpb24sIFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4gPiBIb3N0RnVuY3Rpb25TdHViTWFwOwogICAgIE93blB0cjxIb3N0
RnVuY3Rpb25TdHViTWFwPiBtX2hvc3RGdW5jdGlvblN0dWJNYXA7Ci0gICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKLQotICAgIFRyYW1wb2xpbmVT
dHJ1Y3R1cmUgbV90cmFtcG9saW5lU3RydWN0dXJlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCShyZXZp
c2lvbiAxMzg0NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxMSArMTg5LDI1IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBKdW1wIGVtaXRKdW1wSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZkltbWVkaWF0ZU51bWJl
cihSZWdpc3RlcklEIHJlZyk7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51
bWJlcihSZWdpc3RlcklEIHJlZyk7CiAgICAgICAgIHZvaWQgZW1pdEZhc3RBcml0aEltbVRvSW50
KFJlZ2lzdGVySUQgcmVnKTsKKyAgICAgICAgdm9pZCBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0No
ZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpOwogI2VuZGlmCiAKKyAgICAgICAg
SnVtcCBlbWl0SnVtcElmTm90VHlwZShSZWdpc3RlcklEIGJhc2VSZWcsIFJlZ2lzdGVySUQgc2Ny
YXRjaFJlZywgSlNUeXBlKTsKKworICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdp
c3RlcklEIGZyb20gPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIHZvaWQgZW1pdFB1dFRv
Q2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
RW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2
b2lkKiB2YWx1ZSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkpOworICAgICAgICB2b2lk
IGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJFbnRyeSk7CisKKyAgICAgICAgdm9pZCBwcmVzZXJ2ZVJldHVybkFkZHJl
c3NBZnRlckNhbGwoUmVnaXN0ZXJJRCk7CisgICAgICAgIHZvaWQgcmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCk7CisgICAgICAgIHZvaWQgcmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyk7CisgICAgICAgIHZvaWQgcmVzdG9yZUFyZ3VtZW50
UmVmZXJlbmNlKCk7CisKICAgICAgICAgaW5saW5lIEFkZHJlc3MgcGF5bG9hZEZvcihpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgaW5saW5l
IEFkZHJlc3MgaW50UGF5bG9hZEZvcihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxG
cmFtZVJlZ2lzdGVyKTsKICAgICAgICAgaW5saW5lIEFkZHJlc3MgaW50VGFnRm9yKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMjY4LDYgKzI4Miwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBB
TFdBWVNfSU5MSU5FIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVt
cElmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWcsIHRhZ01hc2tSZWdpc3Rlcik7CisgICAgfQorCiAgICAgQUxX
QVlTX0lOTElORSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdEp1bXBJ
ZkltbWVkaWF0ZU51bWJlcihSZWdpc3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiBi
cmFuY2hUZXN0NjQoTm9uWmVybywgcmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwpAQCAtMzA4
LDYgKzMyNywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogICAgIAorICAgIC8v
IG9wZXJhbmQgaXMgaW50MzJfdCwgbXVzdCBoYXZlIGJlZW4gemVyby1leHRlbmRlZCBpZiByZWdp
c3RlciBpcyA2NC1iaXQuCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpl
bWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNy
YywgZGVzdCk7CisgICAgICAgIG9yNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCBkZXN0KTsKKyAg
ICB9CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0zMjksMTIgKzM1NSwxMjIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKKyAgICBBTFdBWVNfSU5MSU5FIEpTSW50
ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJmYWNlSklUOjplbWl0SnVtcElmTm90VHlwZShSZWdpc3Rl
cklEIGJhc2VSZWcsIFJlZ2lzdGVySUQgc2NyYXRjaFJlZywgSlNUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHNjcmF0Y2hSZWcpOworICAgICAgICByZXR1cm4gYnJhbmNoOChOb3RFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKHR5cGUpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
ckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCisgICAgeworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8p
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyRW50cnkgZW50cnkpCisgICAgeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0
b3JlUHRyKGZyb20sIHBheWxvYWRGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisjZWxz
ZQorICAgICAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lz
dGVyKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZh
Y2VKSVQ6OmVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCisgICAgeworICAgICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIEpT
SW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJv
bSwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCisgICAgeworI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCB0YWdGb3IoZW50cnksIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgICAgIHN0b3JlMzIo
ZnJvbSwgcGF5bG9hZEZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyNlbHNlCisgICAg
ICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0ZvcihlbnRyeSwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsK
KyNlbmRpZgorICAgIH0KKwogICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyBKU0lu
dGVyZmFjZUpJVDo6YWRkcmVzc0ZvcihpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVy
SUQgYmFzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2aXJ0dWFsUmVnaXN0ZXJJbmRleCA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKICAgICAgICAgcmV0dXJuIEFkZHJlc3MoYmFzZSwg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSk7CiAgICAgfQogCisjaWYgQ1BVKEFSTSkKKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU0ludGVyZmFjZUpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVy
SUQgcmVnKQorICAgIHsKKyAgICAgICAgbW92ZShsaW5rUmVnaXN0ZXIsIHJlZyk7CisgICAgfQor
ICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6cmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICBtb3Zl
KHJlZywgbGlua1JlZ2lzdGVyKTsKKyAgICB9CisgICAgCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IEpTSW50ZXJmYWNlSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7
CisgICAgfQorI2VsaWYgQ1BVKFNINCkKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVy
ZmFjZUpJVDo6cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3RzcHIocmVnKTsKKyAgICB9CisgICAgCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIEpTSW50ZXJmYWNlSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmxk
c3ByKHJlZyk7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFj
ZUpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbG9hZFB0ckxpbmtSZWcoYWRkcmVzcyk7CisgICAgfQorICAgIAorI2Vs
aWYgQ1BVKE1JUFMpCisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OnBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAg
ICAgIG1vdmUocmV0dXJuQWRkcmVzc1JlZ2lzdGVyLCByZWcpOworICAgIH0KKyAgICAKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAgICAgbW92ZShyZWcsIHJldHVy
bkFkZHJlc3NSZWdpc3Rlcik7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBK
U0ludGVyZmFjZUpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzLCByZXR1cm5BZGRyZXNzUmVn
aXN0ZXIpOworICAgIH0KKyAgICAKKyNlbHNlIC8vIENQVShYODYpIHx8IENQVShYODZfNjQpCisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OnByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKKyAgICB7CisgICAgICAgIHBvcChyZWcpOwor
ICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKFJlZ2lzdGVySUQgcmVnKQorICAgIHsKKyAgICAg
ICAgcHVzaChyZWcpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRl
cmZhY2VKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHB1c2goYWRkcmVzcyk7CisgICAgfQorICAgIAorI2VuZGlmCisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VKSVQ6OnJlc3RvcmVBcmd1bWVudFJl
ZmVyZW5jZSgpCisgICAgeworICAgICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmaXJz
dEFyZ3VtZW50UmVnaXN0ZXIpOworICAgICAgICBwb2tlKGNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9p
ZCopKTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHJldmlzaW9uIDEzODQ2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsMzY0IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCitzdGF0aWMgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZ2VuZXJhdGVTbG93Q2FzZUZv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTSW50ZXJmYWNlSklUJiBqaXQpCit7CisgICAg
aml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIsIEpTSW50ZXJm
YWNlSklUOjpyZWdUMik7CisgICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QyLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKKworICAgIC8vIEFsc28g
aW5pdGlhbGl6ZSBSZXR1cm5QQyBhbmQgQ29kZUJsb2NrLCBsaWtlIGEgSlMgZnVuY3Rpb24gd291
bGQuCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVyZmFjZUpJ
VDo6cmVnVDMpOworICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7CisgICAgaml0LmVtaXRQdXRJbW1lZGlhdGVU
b0NhbGxGcmFtZUhlYWRlcigwLCBKU1N0YWNrOjpDb2RlQmxvY2spOworCisgICAgaml0LnN0b3Jl
UHRyKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJmdsb2JhbERhdGEtPnRvcENh
bGxGcmFtZSk7CisgICAgaml0LnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIEpTSW50
ZXJmYWNlSklUOjpDYWxsIGNhbGxOb3RKU0Z1bmN0aW9uID0gaml0LmNhbGwoKTsKKyAgICBqaXQu
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEpTSW50
ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CisgICAgaml0LnJldCgpOwor
ICAgIAorICAgIHJldHVybiBjYWxsTm90SlNGdW5jdGlvbjsKK30KKworc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rRm9yR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
RnVuY3Rpb25QdHIgbGF6eUxpbmssIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNo
YXIqIG5hbWUpCit7CisgICAgSlNJbnRlcmZhY2VKSVQgaml0OworICAgIAorICAgIEpTSW50ZXJm
YWNlSklUOjpKdW1wTGlzdCBzbG93Q2FzZTsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IHNsb3dDYXNlLmFwcGVuZChqaXQuZW1pdEp1bXBJZk5vdEpTQ2VsbChKU0ludGVyZmFjZUpJVDo6
cmVnVDApKTsKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmVtaXRKdW1wSWZOb3RUeXBlKEpTSW50
ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0aW9uVHlwZSkp
OworI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKKyAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDMyKEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0lu
dGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5lbWl0SnVtcElmTm90VHlwZShKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpT
SW50ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvblR5cGUpKTsKKyNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KQorCisgICAgLy8gRmluaXNoIGNhbm9uaWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUg
SlMgZnVuY3Rpb24gY2FsbC4KKyAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVz
cyhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigp
KSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKKyAgICBqaXQuZW1pdFB1dENlbGxUb0NhbGxGcmFt
ZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOworCisg
ICAgLy8gQWxzbyBpbml0aWFsaXplIFJldHVyblBDIGZvciB1c2UgYnkgbGF6eSBsaW5raW5nIGFu
ZCBleGNlcHRpb25zLgorICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QzKTsKKyAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEpT
SW50ZXJmYWNlSklUOjpyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOworICAgIAorICAgIGppdC5z
dG9yZVB0cihKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50
b3BDYWxsRnJhbWUpOworICAgIGppdC5yZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBK
U0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTGF6eUxpbmsgPSBqaXQuY2FsbCgpOworICAgIGppdC5y
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwor
ICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CisgICAgCisgICAgc2xvd0Nhc2Uu
bGluaygmaml0KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBjYWxsTm90SlNGdW5jdGlvbiA9
IGdlbmVyYXRlU2xvd0Nhc2VGb3IoZ2xvYmFsRGF0YSwgaml0KTsKKyAgICAKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
IHBhdGNoQnVmZmVyLmxpbmsoY2FsbExhenlMaW5rLCBsYXp5TGluayk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsTm90SlNGdW5jdGlvbiwgbm90SlNGdW5jdGlvbik7CisgICAgCisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibGluayAlcyB0cmFtcG9saW5lIiwgbmFt
ZSkpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKGdsb2Jh
bERhdGEsIEZ1bmN0aW9uUHRyKGN0aV92bV9sYXp5TGlua0NhbGwpLCBGdW5jdGlvblB0cihjdGlf
b3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKSwgImNhbGwiKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorewor
ICAgIHJldHVybiBsaW5rRm9yR2VuZXJhdG9yKGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyKGN0aV92
bV9sYXp5TGlua0NvbnN0cnVjdCksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlND
b25zdHJ1Y3QpLCAiY29uc3RydWN0Iik7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgdmlydHVhbEZvckdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEZ1bmN0aW9u
UHRyIGNvbXBpbGUsIEZ1bmN0aW9uUHRyIG5vdEpTRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBKU0ludGVyZmFjZUpJVCBqaXQ7
CisgICAgCisgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXBMaXN0IHNsb3dDYXNlOworCisjaWYgVVNF
KEpTVkFMVUU2NCkgICAgCisgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5lbWl0SnVtcElmTm90SlND
ZWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMCkpOworI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKKyAg
ICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKEpTSW50ZXJmYWNlSklUOjpOb3RFcXVhbCwg
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKSk7CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKyAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmVtaXRKdW1wSWZOb3RUeXBlKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0aW9uVHlwZSkpOworCisgICAgLy8gRmluaXNoIGNhbm9u
aWNhbCBpbml0aWFsaXphdGlvbiBiZWZvcmUgSlMgZnVuY3Rpb24gY2FsbC4KKyAgICBqaXQubG9h
ZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTRnVu
Y3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKKyAg
ICBqaXQuZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDEs
IEpTU3RhY2s6OlNjb3BlQ2hhaW4pOworCisgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1
dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CisgICAgSlNJbnRlcmZhY2VKSVQ6Okp1
bXAgaGFzQ29kZUJsb2NrMSA9IGppdC5icmFuY2gzMihKU0ludGVyZmFjZUpJVDo6R3JlYXRlclRo
YW5PckVxdWFsLCBKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIs
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6b2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzRm9yKGtpbmQpKSwgSlNJ
bnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSk7CisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRk
cmVzc0FmdGVyQ2FsbChKU0ludGVyZmFjZUpJVDo6cmVnVDMpOworICAgIGppdC5zdG9yZVB0cihK
U0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZnbG9iYWxEYXRhLT50b3BDYWxsRnJh
bWUpOworICAgIGppdC5yZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBKU0ludGVyZmFj
ZUpJVDo6Q2FsbCBjYWxsQ29tcGlsZSA9IGppdC5jYWxsKCk7CisgICAgaml0LnJlc3RvcmVSZXR1
cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CisgICAgaml0Lmxv
YWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CisK
KyAgICBoYXNDb2RlQmxvY2sxLmxpbmsoJmppdCk7CisgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZh
Y2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBGdW5jdGlvbkV4ZWN1dGFibGU6
Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKGtpbmQpKSwgSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwKTsKKyAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDApOworICAgIAorICAg
IHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgY2FsbE5vdEpT
RnVuY3Rpb24gPSBnZW5lcmF0ZVNsb3dDYXNlRm9yKGdsb2JhbERhdGEsIGppdCk7CisgICAgCisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlLCBjb21waWxlKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxOb3RKU0Z1bmN0aW9uLCBub3RKU0Z1bmN0aW9uKTsKKyAgICAK
KyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJ2aXJ0dWFsICVzIHRyYW1w
b2xpbmUiLCBuYW1lKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsQ2FsbEdl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIHZpcnR1YWxG
b3JHZW5lcmF0b3IoZ2xvYmFsRGF0YSwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxfaml0Q29tcGls
ZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pLCAiY2FsbCIsIENvZGVG
b3JDYWxsKTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIHJldHVybiB2aXJ0dWFsRm9y
R2VuZXJhdG9yKGdsb2JhbERhdGEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29t
cGlsZSksIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25zdHJ1Y3QpLCAiY29u
c3RydWN0IiwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHJpbmdMZW5ndGhUcmFtcG9saW5lR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
K3sKKyAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAvLyBDaGVjayBlYXggaXMgYSBzdHJpbmcKKyAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWls
dXJlQ2FzZXMxID0gaml0LmVtaXRKdW1wSWZOb3RKU0NlbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qw
KTsKKyAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWlsdXJlQ2FzZXMyID0gaml0LmJyYW5jaFB0
cigKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLCBKU0ludGVyZmFjZUpJVDo6QWRk
cmVzcygKKyAgICAgICAgICAgIEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKGdsb2Jh
bERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworCisgICAgLy8gQ2hlY2tzIG91dCBva2F5
ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCisgICAgaml0LmxvYWQzMigKKyAg
ICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCBKU1N0
cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
CisKKyAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWlsdXJlQ2FzZXMzID0gaml0LmJyYW5jaDMy
KAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6TGVzc1RoYW4sIEpTSW50ZXJmYWNlSklUOjpyZWdU
MCwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigwKSk7CisKKyAgICAvLyByZWdUMCBjb250
YWlucyBhIDY0IGJpdCB2YWx1ZSAoaXMgcG9zaXRpdmUsIGlzIHplcm8gZXh0ZW5kZWQpIHNvIHdl
IGRvbid0IG5lZWQgc2lnbiBleHRlbmQgaGVyZS4KKyAgICBqaXQuZW1pdEZhc3RBcml0aEludFRv
SW1tTm9DaGVjayhKU0ludGVyZmFjZUpJVDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
CisgICAgCisjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQorICAgIC8vIHJlZ1QwIGhvbGRzIHBheWxv
YWQsIHJlZ1QxIGhvbGRzIHRhZworCisgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZmFpbHVyZUNh
c2VzMSA9IGppdC5icmFuY2gzMigKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFsLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDEsCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgIEpTSW50ZXJmYWNlSklUOjpKdW1wIGZhaWx1cmVD
YXNlczIgPSBqaXQuYnJhbmNoUHRyKAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6Tm90RXF1YWws
CisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgIEpTSW50ZXJmYWNlSklUOjpUcnVz
dGVkSW1tUHRyKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworCisgICAgLy8g
Q2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCisgICAg
aml0LmxvYWQzMigKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QwLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksCisgICAgICAgIEpTSW50ZXJm
YWNlSklUOjpyZWdUMik7CisKKyAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBmYWlsdXJlQ2FzZXMz
ID0gaml0LmJyYW5jaDMyKAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJvdmUsIEpTSW50ZXJm
YWNlSklUOjpyZWdUMiwgSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihJTlRfTUFYKSk7Cisg
ICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDAp
OworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOworI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQp
CisKKyAgICBqaXQucmV0KCk7CisgICAgCisgICAgSlNJbnRlcmZhY2VKSVQ6OkNhbGwgZmFpbHVy
ZUNhc2VzMUNhbGwgPSBqaXQubWFrZVRhaWxSZWN1cnNpdmVDYWxsKGZhaWx1cmVDYXNlczEpOwor
ICAgIEpTSW50ZXJmYWNlSklUOjpDYWxsIGZhaWx1cmVDYXNlczJDYWxsID0gaml0Lm1ha2VUYWls
UmVjdXJzaXZlQ2FsbChmYWlsdXJlQ2FzZXMyKTsKKyAgICBKU0ludGVyZmFjZUpJVDo6Q2FsbCBm
YWlsdXJlQ2FzZXMzQ2FsbCA9IGppdC5tYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoZmFpbHVyZUNhc2Vz
Myk7CisgICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNl
czFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZF9zdHJpbmdfZmFpbCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2Vz
M0NhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKKyAgICAK
KyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJzdHJpbmcgbGVuZ3RoIHRy
YW1wb2xpbmUiKSk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9y
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQoreworICAgIGludCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiA9IE5hdGl2ZUV4
ZWN1dGFibGU6Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCk7CisgICAgCisgICAgSlNJ
bnRlcmZhY2VKSVQgaml0OworICAgIAorICAgIGppdC5lbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJh
bWVIZWFkZXIoMCwgSlNTdGFjazo6Q29kZUJsb2NrKTsKKyAgICBqaXQuc3RvcmVQdHIoSlNJbnRl
cmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsK
KworI2lmIENQVShYODYpCisgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBp
bnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KKyAgICAvLyBn
ZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgorICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKKyAgICBq
aXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOworICAgIGppdC5lbWl0
UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6
U2NvcGVDaGFpbik7CisKKyAgICBqaXQucGVlayhKU0ludGVyZmFjZUpJVDo6cmVnVDEpOworICAg
IGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0
YWNrOjpSZXR1cm5QQyk7CisKKyAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlY3gs
IGVkeCwgLi4uKTsKKyAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUq
KTsKKyAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJl
Z2lzdGVyczo6ZWN4KTsKKworICAgIGppdC5zdWJQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJ
bW0zMigxNiAtIHNpemVvZih2b2lkKikpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOyAvLyBBbGlnbiBzdGFjayBhZnRlciBjYWxsLgorCisgICAgLy8gY2FsbCB0aGUgZnVu
Y3Rpb24KKyAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2Fs
bGVlLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOworICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOworICAgIGppdC5tb3ZlKEpTSW50
ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8g
RWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZy
b20gc3RhY2suCisgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QxLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOworCisgICAgaml0LmFk
ZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDE2IC0gc2l6ZW9mKHZvaWQqKSksIEpT
SW50ZXJmYWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyNlbGlmIENQVShYODZfNjQp
CisgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZy
YW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KKyAgICAvLyBnZXQgdG8gaXRzIGdsb2Jh
bCBkYXRhLgorICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpD
YWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKKyAgICBqaXQuZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QxLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOworICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZy
YW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CisK
KyAgICBqaXQucGVlayhKU0ludGVyZmFjZUpJVDo6cmVnVDEpOworICAgIGppdC5lbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpSZXR1cm5QQyk7
CisKKyAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlZGksIGVzaSwgZWR4LCBlY3gs
IC4uLik7CisgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7Cisg
ICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBYODZSZWdpc3Rl
cnM6OmVkaSk7CisKKyAgICBqaXQuc3ViUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIo
MTYgLSBzaXplb2YoaW50NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOyAvLyBBbGlnbiBzdGFjayBhZnRlciBjYWxsLgorCisgICAgaml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlZSwgWDg2UmVnaXN0ZXJzOjplc2kpOworICAg
IGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZXNpLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIFg4NlJlZ2lzdGVyczo6cjkpOworICAg
IGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsgLy8gRWFnZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBh
dm9pZCBsb2FkaW5nIGZyb20gc3RhY2suCisgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFk
ZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pKTsKKwor
ICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigxNiAtIHNpemVvZihp
bnQ2NF90KSksIEpTSW50ZXJmYWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyNlbGlm
IENQVShBUk0pCisgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRo
aXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KKyAgICAvLyBnZXQgdG8g
aXRzIGdsb2JhbCBkYXRhLgorICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKKyAgICBqaXQuZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAgIGppdC5lbWl0UHV0Q2Vs
bFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVD
aGFpbik7CisKKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJm
YWNlSklUOjpyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAgICBqaXQuZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOwor
CisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYocjAgPT0gcmVnVDAsIHIxID09IHJl
Z1QxLCAuLi4pOworICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSop
OworICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgQVJNUmVn
aXN0ZXJzOjpyMCk7CisKKyAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNT
dGFjazo6Q2FsbGVlLCBBUk1SZWdpc3RlcnM6OnIxKTsKKyAgICBqaXQubW92ZShKU0ludGVyZmFj
ZUpJVDo6cmVnVDIsIEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlcik7IC8vIEVhZ2Vy
bHkgcmVzdG9yZSBjYWxsZXIgZnJhbWUgcmVnaXN0ZXIgdG8gYXZvaWQgbG9hZGluZyBmcm9tIHN0
YWNrLgorICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEFSTVJlZ2lzdGVy
czo6cjEsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QyKTsKKyAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFj
ZUpJVDo6cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CisKKyAgICBqaXQucmVz
dG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDMpOworCisjZWxpZiBDUFUoU0g0KQor
ICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFt
ZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCisgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwg
ZGF0YS4KKyAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2Fs
bGVyRnJhbWUsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CisgICAgaml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIEpTSW50ZXJmYWNlSklUOjpyZWdU
MSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKKyAgICBqaXQuZW1pdFB1dENlbGxUb0NhbGxGcmFt
ZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOworCisg
ICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVyZmFjZUpJVDo6cmVn
VDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihKU0ludGVyZmFjZUpJVDo6cmVnVDMsIEpTU3RhY2s6OlJldHVyblBDKTsKKworICAgIC8vIENh
bGxpbmcgY29udmVudGlvbjogZihyMCA9PSByZWdUNCwgcjEgPT0gcmVnVDUsIC4uLik7CisgICAg
Ly8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CisgICAgaml0Lm1vdmUo
SlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDQp
OworCisgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxl
ZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Q1KTsKKyAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6
cmVnVDIsIEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlcik7IC8vIEVhZ2VybHkgcmVz
dG9yZSBjYWxsZXIgZnJhbWUgcmVnaXN0ZXIgdG8gYXZvaWQgbG9hZGluZyBmcm9tIHN0YWNrLgor
ICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKHJlZ1Q1LCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CisKKyAgICBq
aXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4
ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKKyAgICBq
aXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qz
KTsKKworI2VsaWYgQ1BVKE1JUFMpCisgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBj
aGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KKyAg
ICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgorICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsK
KyAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFp
biwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOworICAgIGpp
dC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNT
dGFjazo6U2NvcGVDaGFpbik7CisKKyAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAgICBqaXQu
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMywgSlNTdGFjazo6
UmV0dXJuUEMpOworCisgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoYTAsIGExLCBh
MiwgYTMpOworICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwor
CisgICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9yIDE2IGJ5dGVzICg4LWJ5dGUgYWxpZ25l
ZCkKKyAgICAvLyAxNiBieXRlcyAodW51c2VkKSBmb3IgNCBhcmd1bWVudHMKKyAgICBqaXQuc3Vi
UHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMTYpLCBKU0ludGVyZmFjZUpJVDo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gU2V0dXAgYXJnMAorICAgIGppdC5tb3ZlKEpT
SW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6YTApOworCisg
ICAgLy8gQ2FsbAorICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNr
OjpDYWxsZWUsIE1JUFNSZWdpc3RlcnM6OmEyKTsKKyAgICBqaXQubG9hZFB0cihKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcyhNSVBTUmVnaXN0ZXJzOjphMiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAgIGppdC5tb3ZlKEpTSW50ZXJm
YWNlSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyKTsgLy8gRWFn
ZXJseSByZXN0b3JlIGNhbGxlciBmcmFtZSByZWdpc3RlciB0byBhdm9pZCBsb2FkaW5nIGZyb20g
c3RhY2suCisgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOworCisgICAgLy8gUmVzdG9y
ZSBzdGFjayBzcGFjZQorICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0z
MigxNiksIEpTSW50ZXJmYWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBqaXQu
cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsK
KyNlbHNlCisjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgorICAg
IFVOVVNFRF9QQVJBTShleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbik7CisgICAgYnJlYWtwb2lu
dCgpOworI2VuZGlmCisKKyAgICAvLyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBqaXQubG9hZDY0KCYoZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKSwgSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QyKTsKKyAgICBKU0ludGVyZmFjZUpJVDo6SnVtcCBleGNlcHRpb25IYW5k
bGVyID0gaml0LmJyYW5jaFRlc3Q2NChKU0ludGVyZmFjZUpJVDo6Tm9uWmVybywgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QyKTsKKyNlbHNlCisgICAgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgZXhjZXB0aW9u
SGFuZGxlciA9IGppdC5icmFuY2gzMigKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6Ok5vdEVxdWFs
LAorICAgICAgICBKU0ludGVyZmFjZUpJVDo6QWJzb2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZnbG9iYWxEYXRhLT5leGNlcHRpb24pICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwKKyAgICAgICAgSlNJbnRlcmZhY2VKSVQ6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisjZW5kaWYKKworICAgIC8v
IFJldHVybi4KKyAgICBqaXQucmV0KCk7CisKKyAgICAvLyBIYW5kbGUgYW4gZXhjZXB0aW9uCisg
ICAgZXhjZXB0aW9uSGFuZGxlci5saW5rKCZqaXQpOworCisgICAgLy8gR3JhYiB0aGUgcmV0dXJu
IGFkZHJlc3MuCisgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVy
ZmFjZUpJVDo6cmVnVDEpOworCisgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJ
bW1QdHIoJmdsb2JhbERhdGEtPmV4Y2VwdGlvbkxvY2F0aW9uKSwgSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QyKTsKKyAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDIpOworICAgIGppdC5wb2tlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdp
c3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8g
c2l6ZW9mKHZvaWQqKSk7CisKKyAgICBqaXQuc3RvcmVQdHIoSlNJbnRlcmZhY2VKSVQ6OmNhbGxG
cmFtZVJlZ2lzdGVyLCAmZ2xvYmFsRGF0YS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAvLyBTZXQgdGhl
IHJldHVybiBhZGRyZXNzLgorICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
UHRyKEZ1bmN0aW9uUHRyKGN0aVZNVGhyb3dUcmFtcG9saW5lKS52YWx1ZSgpKSwgSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QxKTsKKyAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKKworICAgIGppdC5yZXQoKTsKKworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgibmF0aXZlICVzIHRyYW1wb2xpbmUi
LCB0b0NTdHJpbmcoa2luZCkuZGF0YSgpKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVDYWxsR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAgICByZXR1
cm4gbmF0aXZlRm9yR2VuZXJhdG9yKGdsb2JhbERhdGEsIENvZGVGb3JDYWxsKTsKK30KKworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCit7CisgICAgcmV0dXJuIG5hdGl2ZUZvckdlbmVyYXRvcihnbG9iYWxEYXRh
LCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKwogc3RhdGljIHZvaWQgc3RyaW5nQ2hhckxvYWQoU3Bl
Y2lhbGl6ZWRUaHVua0pJVCYgaml0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAg
Ly8gbG9hZCBzdHJpbmcKQEAgLTc5LDcgKzQzNyw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
aGFyQ29kZUF0VGh1bmtHZW4KICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBz
dHJpbmdDaGFyTG9hZChqaXQsIGdsb2JhbERhdGEpOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSwgImNoYXJDb2RlQXQi
KTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImNoYXJDb2RlQXQiKTsKIH0KIAogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKQEAgLTg4LDcgKzQ0Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRU
aHVua0dlbmVyYXQKICAgICBzdHJpbmdDaGFyTG9hZChqaXQsIGdsb2JhbERhdGEpOwogICAgIGNo
YXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwog
ICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIHJl
dHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKCksICJjaGFyQXQiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImNo
YXJBdCIpOwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpAQCAtOTgsMTkgKzQ1NiwxOSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHCiAgICAgaml0LmxvYWRJbnQzMkFy
Z3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBjaGFyVG9TdHJpbmco
aml0LCBnbG9iYWxEYXRhLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0
dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZp
bmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgp
LCAiZnJvbUNoYXJDb2RlIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJmcm9tQ2hh
ckNvZGUiKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpKQotICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7CiAKICAgICBqaXQubG9hZERvdWJs
ZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpm
cFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICBqaXQucmV0dXJuRG91
YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxp
emUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCksICJz
cXJ0Iik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJzcXJ0Iik7CiB9CiAKIApAQCAt
MTg2LDcgKzU0NCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG8K
ICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub25JbnRKdW1wOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpIHx8ICFq
aXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKGdsb2JhbERhdGEpKTsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgbm9uSW50SnVtcC5saW5rKCZqaXQpOwpAQCAt
MjEwLDE0ICs1NjgsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0
bwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAg
ZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXpl
ZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpLCAiZmxvb3IiKTsKKyAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImZsb29yIik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAg
IFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBw
ZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtMjI5LDE0ICs1ODcsMTQgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcgogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMCk7CiAgICAgZG91YmxlUmVzdWx0LmxpbmsoJmppdCk7CiAgICAgaml0
LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4g
aml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpLCAiY2VpbCIpOworICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpLCAiY2VpbCIpOwog
fQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCiB7CiAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSk7CiAgICAg
aWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2Vk
Q29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSk7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMy
QXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAg
IGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC0yNjMsNDAg
KzYyMSw0MCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvCiAgICAg
aml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBkb3VibGVS
ZXN1bHQubGluaygmaml0KTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDApOwotICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCksICJyb3VuZCIpOworICAgIHJldHVybiBq
aXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKGdsb2JhbERhdGEpLCAicm91bmQiKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4
cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBpZiAoIVVu
YXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpCi0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KGdsb2JhbERhdGEpKTsKICAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAo
IWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAg
IGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAg
aml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1
cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCgpLCAiZXhwIik7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJleHAiKTsK
IH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKIHsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0g
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKGdsb2JhbERhdGEpKTsKICAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkpOwogICAgIGpp
dC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5h
cnlEb3VibGVPcFdyYXBwZXIobG9nKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXpl
ZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpLCAibG9nIik7CisgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoZ2xvYmFsRGF0YSksICJsb2ciKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCgxKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnRBYnMoKSkKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSkpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFy
Z3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBq
aXQucnNoaWZ0MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMzEpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CkBAIC0zMDksMTQg
KzY2NywxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoCiAgICAg
aml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmFic0RvdWJsZShTcGVjaWFsaXpl
ZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKICAgICBq
aXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwotICAgIHJldHVy
biBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCksICJhYnMiKTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbChnbG9iYWxEYXRhKSwgImFicyIpOwog
fQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogewogICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDIpOwogICAgIGlm
ICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbChnbG9iYWxEYXRhKSk7CiAKICAgICBqaXQubG9hZERvdWJsZSgmb25lQ29uc3RhbnQs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1l
bnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwpAQCAtMzYxLDcgKzcxOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVu
a0dlbmVyYXRvcigKICAgICB9IGVsc2UKICAgICAgICAgaml0LmFwcGVuZEZhaWx1cmUobm9uSW50
RXhwb25lbnQpOwogCi0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSwgInBvdyIpOworICAgIHJldHVybiBqaXQu
ZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KGdsb2JhbERhdGEpLCAicG93Iik7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTM4NDY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiAr
MzEsMTQgQEAKICNpZiBFTkFCTEUoSklUKQogbmFtZXNwYWNlIEpTQyB7CiAKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rQ2FsbEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rQ29uc3RydWN0R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDYWxsR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxDb25zdHJ1Y3RHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
Kik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3RyaW5nTGVuZ3RoVHJhbXBvbGluZUdlbmVyYXRv
cihKU0dsb2JhbERhdGEqKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVj
dEdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJD
b2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDEzODQ2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBO
YXRpdmVGdW5jdGlvbiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KICAgICAgICAg
TmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IoKSB7IHJldHVybiBtX2NvbnN0cnVjdG9yOyB9Cisg
ICAgICAgIAorICAgICAgICBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbkZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09
IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpOworICAgICAg
ICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICByZXR1
cm4gY29uc3RydWN0b3IoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBt
X2Z1bmN0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OworICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihOYXRpdmVFeGVjdXRhYmxlLCBt
X2NvbnN0cnVjdG9yKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKExlYWZUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOyB9CiAgICAgICAgIAo=
</data>
<flag name="review"
          id="198126"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>