<?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>181977</bug_id>
          
          <creation_ts>2018-01-23 01:37:47 -0800</creation_ts>
          <short_desc>[Cairo] Use GraphicsContextImplCairo for ImageBuffer context</short_desc>
          <delta_ts>2018-01-24 23:19:18 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1392005</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-01-23 01:37:47 -0800</bug_when>
    <thetext>[Cairo] Use GraphicsContextImplCairo for ImageBuffer context</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392006</commentid>
    <comment_count>1</comment_count>
      <attachid>332015</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-01-23 01:38:30 -0800</bug_when>
    <thetext>Created attachment 332015
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392461</commentid>
    <comment_count>2</comment_count>
      <attachid>332128</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-01-23 23:44:25 -0800</bug_when>
    <thetext>Created attachment 332128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392462</commentid>
    <comment_count>3</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-01-23 23:48:46 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #2)
&gt; Created attachment 332128 [details]
&gt; Patch

Given this changes code in GraphicsContext, GraphicsContextImpl and DisplayList::Recorder, I&apos;d prefer if Simon or Myles can review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392465</commentid>
    <comment_count>4</comment_count>
      <attachid>332128</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-24 00:04:16 -0800</bug_when>
    <thetext>Comment on attachment 332128
Patch

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

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:60
&gt; +    bool hasPlatformContext() const override { return false; }
&gt; +    PlatformGraphicsContext* platformContext() const override { return nullptr; }

I wonder why we have hasPlatformContext, since platformContext() returns a pointer we could simply check its return value no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392466</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-24 00:07:20 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #3)
&gt; (In reply to Zan Dobersek from comment #2)
&gt; &gt; Created attachment 332128 [details]
&gt; &gt; Patch
&gt; 
&gt; Given this changes code in GraphicsContext, GraphicsContextImpl and
&gt; DisplayList::Recorder, I&apos;d prefer if Simon or Myles can review this.

I was already reviewing this when you added this comment. Changes look sane to me, but I agree it would be better if graphics guys double check it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392726</commentid>
    <comment_count>6</comment_count>
      <attachid>332128</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-01-24 13:54:25 -0800</bug_when>
    <thetext>Comment on attachment 332128
Patch

I like this. At some point I&apos;d like the CG drawing to be a graphicsContextImpl too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392929</commentid>
    <comment_count>7</comment_count>
      <attachid>332128</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-01-24 23:16:33 -0800</bug_when>
    <thetext>Comment on attachment 332128
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:60
&gt;&gt; +    PlatformGraphicsContext* platformContext() const override { return nullptr; }
&gt; 
&gt; I wonder why we have hasPlatformContext, since platformContext() returns a pointer we could simply check its return value no?

This was done to exactly mirror the GraphicsContext methods. It might be possible to just deduce this from the platformContext() value like you propose, but I&apos;d wait on that until more implementations (e.g. GraphicsContextImplCG) see whether the extra method is necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392930</commentid>
    <comment_count>8</comment_count>
      <attachid>332128</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-01-24 23:18:26 -0800</bug_when>
    <thetext>Comment on attachment 332128
Patch

Clearing flags on attachment: 332128

Committed r227594: &lt;https://trac.webkit.org/changeset/227594&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392931</commentid>
    <comment_count>9</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-01-24 23:18:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1392932</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-24 23:19:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/36856107&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332015</attachid>
            <date>2018-01-23 01:38:30 -0800</date>
            <delta_ts>2018-01-23 23:44:21 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-181977-20180123103828.patch</filename>
            <type>text/plain</type>
            <size>49977</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3Mzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTVjMjFkNmEzMmE4MGUx
NDEzMGM1NWJlYWU3YTlkYjdmYjAyODAyOC4uM2U0MjdhNmUyZDY3NTdkYTdlYTU4MDc1ZjQ1NGU4
NDcyYWQyNjEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDE4LTAxLTIzICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbQ2Fpcm9dIFVzZSBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gZm9yIEltYWdlQnVmZmVyIGNvbnRleHQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTk3NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBu
byBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
Omhhc1BsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdUaWxlZEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzUGxhdGZvcm1Db250
ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGw6
OmRyYXdJbWFnZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbDo6
ZHJhd1RpbGVkSW1hZ2VJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpwbGF0
Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xlYXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0dseXBocyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaWxlZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd05h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpy
b3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Y2xpcEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisKIDIwMTgtMDEtMjIgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgT3B0aW1pemUgYnVpbGRp
bmcgdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUgcmVnaW9uIHdpdGggbXVsdGlwbGUgaWZyYW1lcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggMDY4YjliOGQ3ZDZkZDYzMGEyYzhkNmE5ZDkzNGY1ZjA5MWZiNWVmNC4uNzZi
YWQ3ZmM3NDYzNzhmMzFlNGUxY2ZmNGYwYWJmMGUxYWFkZTk1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zNDgs
NiArMzQ4LDEzIEBAIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiAgICAgcGxh
dGZvcm1EZXN0cm95KCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdAoreworICAgIGlmIChtX2ltcGwpCisgICAgICAgIHJldHVybiBtX2ltcGwt
Pmhhc1BsYXRmb3JtQ29udGV4dCgpOworICAgIHJldHVybiAhIW1fZGF0YTsKK30KKwogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNhdmUoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBA
IC03MDksMTAgKzcxNiw4IEBAIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluCiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGlu
ZzsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3SW1hZ2UoaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwotICAgIH0KKyAgICBpZiAobV9pbXBsKQor
ICAgICAgICByZXR1cm4gbV9pbXBsLT5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgaW1hZ2VQYWlu
dGluZ09wdGlvbnMubV9pbnRlcnBvbGF0aW9uUXVhbGl0eSk7CiAgICAgcmV0dXJuIGltYWdlLmRy
YXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zLm1fY29t
cG9zaXRlT3BlcmF0b3IsIGltYWdlUGFpbnRpbmdPcHRpb25zLm1fYmxlbmRNb2RlLCBpbWFnZVBh
aW50aW5nT3B0aW9ucy5tX2RlY29kaW5nTW9kZSwgaW1hZ2VQYWludGluZ09wdGlvbnMubV9vcmll
bnRhdGlvbkRlc2NyaXB0aW9uKTsKQEAgLTcyMywxMCArNzI4LDggQEAgSW1hZ2VEcmF3UmVzdWx0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGQKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gSW1h
Z2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotICAgICAgICByZXR1cm4gSW1hZ2VE
cmF3UmVzdWx0OjpEaWRSZWNvcmQ7Ci0gICAgfQorICAgIGlmIChtX2ltcGwpCisgICAgICAgIHJl
dHVybiBtX2ltcGwtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogCiAgICAgSW50ZXJwb2xh
dGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0
aGlzLCBpbWFnZVBhaW50aW5nT3B0aW9ucy5tX2ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICBy
ZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMubV9jb21wb3NpdGVPcGVyYXRvciwgaW1h
Z2VQYWludGluZ09wdGlvbnMubV9ibGVuZE1vZGUsIGltYWdlUGFpbnRpbmdPcHRpb25zLm1fZGVj
b2RpbmdNb2RlKTsKQEAgLTczOCwxMCArNzQxLDggQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRy
YXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3Is
IGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwotICAgICAgICByZXR1cm4gSW1h
Z2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7Ci0gICAgfQorICAgIGlmIChtX2ltcGwpCisgICAgICAg
IHJldHVybiBtX2ltcGwtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwog
CiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6
U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxMmI2
NmE1NDllZGY2YmI3MzA2NzY2ZThjZDljMTkwNDQzN2QxMWFiLi45ZWQyNTcxNTUzMWRkOWY0YjVj
MWU5YWMxZDI1YzViMThiMDg2YmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMjY1LDcgKzI2NSw3IEBAIHB1YmxpYzoK
ICAgICB9OwogICAgIEdyYXBoaWNzQ29udGV4dChOb25QYWludGluZ1JlYXNvbnMpOwogCi0gICAg
Ym9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKIAogICAgIGJvb2wg
cGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2RhdGEgJiYgIW1faW1wbDsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRJbXBsLmNwcAppbmRleCAxMTZlY2JlNDg3ZjEyNzMwYzkzMzJmYTExMDc2YzI2NzkxNzdm
ZTZiLi44NmFkNDE3NTkxODcwNGZjNWFjNmZlNzdlNGFiOTZkNTQ2NjJjNGM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcApAQCAtMzcsNCArMzcsMjcgQEAgR3JhcGhpY3NDb250ZXh0SW1wbDo6fkdyYXBoaWNz
Q29udGV4dEltcGwoKQogewogfQogCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0SW1w
bDo6ZHJhd0ltYWdlSW1wbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlz
U2NvcGUoY29udGV4dCwgaW1hZ2VQYWludGluZ09wdGlvbnMubV9pbnRlcnBvbGF0aW9uUXVhbGl0
eSk7CisgICAgcmV0dXJuIGltYWdlLmRyYXcoY29udGV4dCwgZGVzdGluYXRpb24sIHNvdXJjZSwg
aW1hZ2VQYWludGluZ09wdGlvbnMubV9jb21wb3NpdGVPcGVyYXRvciwgaW1hZ2VQYWludGluZ09w
dGlvbnMubV9ibGVuZE1vZGUsIGltYWdlUGFpbnRpbmdPcHRpb25zLm1fZGVjb2RpbmdNb2RlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucy5tX29yaWVudGF0aW9uRGVzY3JpcHRpb24pOworfQorCitJbWFn
ZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd1RpbGVkSW1hZ2VJbXBsKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNp
emUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShjb250ZXh0LCBpbWFnZVBhaW50
aW5nT3B0aW9ucy5tX2ludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICByZXR1cm4gaW1hZ2UuZHJh
d1RpbGVkKGNvbnRleHQsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBp
bWFnZVBhaW50aW5nT3B0aW9ucy5tX2NvbXBvc2l0ZU9wZXJhdG9yLCBpbWFnZVBhaW50aW5nT3B0
aW9ucy5tX2JsZW5kTW9kZSwgaW1hZ2VQYWludGluZ09wdGlvbnMubV9kZWNvZGluZ01vZGUpOwor
fQorCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd1RpbGVkSW1hZ2VJ
bXBsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
IHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
Cit7CisgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFn
ZTo6U3RyZXRjaFRpbGUpIHsKKyAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgorICAgICAgICBy
ZXR1cm4gZHJhd0ltYWdlSW1wbChjb250ZXh0LCBpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpOworICAgIH0KKworICAgIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShjb250ZXh0LCBpbWFn
ZVBhaW50aW5nT3B0aW9ucy5tX2ludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICByZXR1cm4gaW1h
Z2UuZHJhd1RpbGVkKGNvbnRleHQsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3Rv
ciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucy5tX2NvbXBvc2l0ZU9wZXJhdG9y
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmluZGV4IGMzYjQwMGM0
MzVkNTc2ZDcwNGRkOGU5NWU0YzcwYmYwNjJmZDExNmYuLjM3YjdhM2I5NWNhNTA2N2Y2NmRjYjg3
ZDQ4ZmEyMzBjOTU4MmM5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKQEAgLTM3LDYgKzM3LDkgQEAgcHVibGlj
OgogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX2dyYXBoaWNzQ29udGV4dDsgfQogCisgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpID0gMDsK
IApAQCAtNjUsOSArNjgsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5n
TW9kZSkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRy
YXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFn
ZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgSW1h
Z2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVT
aXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgPSAwOworICAgIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7
CiAjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCiAgICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJ
bWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbikgPSAwOwogI2VuZGlmCkBA
IC05MCw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSA9IDA7CkBAIC05OCw5ICsxMDMsMTcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChj
b25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5k
cygpID0gMDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCkgPSAwOwogCisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgPSAwOworCitw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2VJbXBsKEdyYXBo
aWNzQ29udGV4dCYsIEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICBzdGF0aWMgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlSW1wbChHcmFwaGljc0NvbnRleHQmLCBJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHN0YXRpYyBJbWFnZURyYXdS
ZXN1bHQgZHJhd1RpbGVkSW1hZ2VJbXBsKEdyYXBoaWNzQ29udGV4dCYsIEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRp
bGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBHcmFwaGlj
c0NvbnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgKaW5kZXggZDlhNDZkYTQwYTUxOWUzYWQ0YzIyZDg0NTY2MzQ3Y2Q5NDU2ZThk
OS4uOGI2OTNjMjkyY2VjMTIzNTJjMWNkZGMwN2IwZTc3M2M5MmMxM2U0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC02Niw2ICs2Niw3IEBAIGNsYXNzIEFm
ZmluZVRyYW5zZm9ybTsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgU2hh
cmVkQnVmZmVyOwogY2xhc3MgVVJMOwogc3RydWN0IExlbmd0aDsKQEAgLTc1LDYgKzc2LDcgQEAg
Y2xhc3MgSW1hZ2VPYnNlcnZlcjsKIAogY2xhc3MgSW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
bWFnZT4gewogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dEltcGw7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW1hZ2UoKTsK
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCA2OTEzNjA0M2ZlMWIzMTdk
MGVhY2E0ODE0YzMyNjU3ODc0MDRmZmRlLi5mYTI1ZjhhNzMxN2I4ZTAzNGE3ZmRjM2MzNTk5NDU3
YmZmMGZlM2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC04MCwxNSArODAs
MTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAgfQogfQog
Ci1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNj
YWxlKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1
ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkg
aXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAg
ICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0gICAgfQorICAgIGlmIChtX2ltcGwpCisgICAg
ICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwogCiAgICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0oKnBs
YXRmb3JtQ29udGV4dCgpKTsKQEAgLTk2LDYgKzk0LDggQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBo
aWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIAogUGxhdGZvcm1D
b250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsK
KyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1cm4gbV9pbXBsLT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICByZXR1cm4gJm1fZGF0YS0+cGxhdGZvcm1Db250ZXh0OwogfQogCkBAIC0yODQsMTAg
KzI4NCw4IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdldHRpbmcgdGhlIGNsaXAg
Ym91bmRzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggZGlzcGxheSBsaXN0cyIpOwotICAgICAgICBy
ZXR1cm4gSW50UmVjdCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOyAvLyBGSVhNRTogZGlzcGxh
eSBsaXN0cy4KLSAgICB9CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+
Y2xpcEJvdW5kcygpOwogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBy
ZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CkBA
IC0zNjIsMTUgKzM2MCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0CiAgICAgQ2Fpcm86OmRy
YXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBvcmlnaW4sIHdpZHRo
LCBzdHlsZSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUpCitGbG9hdFJlY3QgR3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Um91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm4gcmVjdDsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3Qg
eWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Ci0gICAgICAgIHJldHVy
biByZWN0OwotICAgIH0KKyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1cm4gbV9pbXBsLT5y
b3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7CiAKICAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7
CiB9CkBAIC00NDQsNyArNDQwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KCkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7CisgICAgICAg
IG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IDBmZGNkY2JhODZkNTBmNTM1
NjU2MWU4YjJiYWFhNzc5ZTJhNGM2MjkuLjI1ZDU4NDMxNmM1ZTQ3NjgxOTUwODQzMTk0YWE1MzZi
ZWIyYmRlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtMjks
NiArMjksMTAgQEAKIAogI2lmIFVTRShDQUlSTykKIAorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGxhdGZvcm1Db250ZXh0Q2Fp
cm8mIHBsYXRmb3JtQ29udGV4dCkKQEAgLTM5LDE4NiArNDMsMzUxIEBAIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgUGxhCiAKIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6fkdyYXBoaWNzQ29udGV4dElt
cGxDYWlybygpID0gZGVmYXVsdDsKIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnVw
ZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MpCitib29sIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGxhdGZv
cm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cGxhdGZvcm1Db250ZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKK3sKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tu
ZXNzQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3Bs
YXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKworICAgIGlmIChmbGFncyAm
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86
OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5
bGUpOworCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5n
ZSkgeworICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29u
dGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7CisgICAgICAgIEZsb2F0U2l6
ZSBhZGp1c3RlZE9mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAgaWYgKHN0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQg
dGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQKKyAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQg
SFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCisgICAgICAgICAgICBhZGp1c3RlZE9m
ZnNldC5zZXRIZWlnaHQoLXN0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0ID0gYWRqdXN0ZWRPZmZzZXQ7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRl
T3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJs
ZW5kTW9kZSk7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxk
QW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlh
cyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyU2hhZG93KCkKIHsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKKyAgICBDYWly
bzo6c2V0TGluZUNhcChtX3BsYXRmb3JtQ29udGV4dCwgbGluZUNhcCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKKyAgICBDYWlybzo6c2V0TGluZURh
c2gobV9wbGF0Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9pbikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKIHsKKyAg
ICBDYWlybzo6c2V0TGluZUpvaW4obV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVKb2luKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldE1pdGVyTGltaXQoZmxvYXQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0
KQogeworICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxp
bWl0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIGF1dG8mIGNvbnRleHQgPSBncmFwaGljc0NvbnRl
eHQoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IGNvbnRleHQuc3RhdGUoKTsKKyAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CisgICAgYXV0byYgY29udGV4dCA9IGdyYXBo
aWNzQ29udGV4dCgpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShjb250ZXh0LnN0YXRlKCkpLCBjb250ZXh0KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKKyAgICBSZWZQ
dHI8Y2Fpcm9fcGF0dGVybl90PiBwbGF0Zm9ybUdyYWRpZW50ID0gYWRvcHRSZWYoZ3JhZGllbnQu
Y3JlYXRlUGxhdGZvcm1HcmFkaWVudCgxLjApKTsKKworICAgIENhaXJvOjpzYXZlKG1fcGxhdGZv
cm1Db250ZXh0KTsKKyAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IHBsYXRmb3JtR3JhZGllbnQuZ2V0KCkpOworICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1D
b250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CisgICAgYXV0byYgY29udGV4dCA9IGdy
YXBoaWNzQ29udGV4dCgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3Ig
PSBjb250ZXh0LnN0YXRlKCkuY29tcG9zaXRlT3BlcmF0b3I7CisKKyAgICBDYWlybzo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0
b3IsIGJsZW5kTW9kZSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGNvbnRleHQuc3RhdGUoKSksIGNvbnRleHQp
OworICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250
ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGVOb3JtYWwpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogeworICAgIGF1dG8mIGNvbnRleHQg
PSBncmFwaGljc0NvbnRleHQoKTsKKworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3Bl
cmF0b3IgPSBjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAgIENhaXJvOjpTdGF0ZTo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9y
LCBibGVuZE1vZGUpOworCisgICAgQ2Fpcm86OlNoYWRvd1N0YXRlIHNoYWRvd1N0YXRlKGNvbnRl
eHQuc3RhdGUoKSk7CisKKyAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKKyAgICAgICAgQ2Fpcm86
OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0
YXRlLCBjb250ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSwgY29udGV4dCk7CisK
KyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4
dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlTm9ybWFsKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJikKIHsKKyAgICBhdXRvJiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0KCk7CisgICAgQ2Fp
cm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIHsgfSwgQ2Fpcm86OlNoYWRvd1N0YXRlKGNvbnRleHQuc3RhdGUoKSksIGNv
bnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKKyAgICBhdXRvJiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0KCk7Cisg
ICAgYXV0byYgc3RhdGUgPSBjb250ZXh0LnN0YXRlKCk7CisgICAgQ2Fpcm86OmZpbGxQYXRoKG1f
cGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSksIGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAg
UGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKKyAgICBmaWxsUGF0aChwYXRo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKKyAgICBhdXRv
JiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0KCk7CisgICAgYXV0byYgc3RhdGUgPSBjb250ZXh0
LnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSksIGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
c3Ryb2tlUGF0aChjb25zdCBQYXRoJikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CisgICAgYXV0byYgY29udGV4dCA9IGdyYXBo
aWNzQ29udGV4dCgpOworICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOworICAgIENh
aXJvOjpzdHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgY29udGV4dCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShy
ZWN0KTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBDYWly
bzo6Y2xlYXJSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGlu
Z01vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7CisgICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcp
OworICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhf
dD4gZ2x5cGhzKG51bUdseXBocyk7CisgICAgeworICAgICAgICBBU1NFUlQoZnJvbSArIG51bUds
eXBocyA8PSBnbHlwaEJ1ZmZlci5zaXplKCkpOworICAgICAgICBhdXRvKiBnbHlwaHNEYXRhID0g
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOworICAgICAgICBhdXRvKiBhZHZhbmNlcyA9IGdseXBo
QnVmZmVyLmFkdmFuY2VzKGZyb20pOworCisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50Lnko
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAg
ICAgICAgICAgZ2x5cGhzW2ldID0geyBnbHlwaHNEYXRhW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0IH07
CisgICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gZm9udC5wbGF0
Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7CisgICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQg
PSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKworICAgIGF1dG8mIGNvbnRleHQgPSBncmFw
aGljc0NvbnRleHQoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IGNvbnRleHQuc3RhdGUoKTsKKyAgICBD
YWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKKyAgICAgICAgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBo
cywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsIGNvbnRleHQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKIHsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd0ltYWdlSW1w
bChncmFwaGljc0NvbnRleHQoKSwgaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFp
bnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdU
aWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaWxl
ZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKIHsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd1RpbGVkSW1h
Z2VJbXBsKGdyYXBoaWNzQ29udGV4dCgpLCBpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGls
ZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJ
bWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKK0ltYWdlRHJhd1Jl
c3VsdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQogeworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRJbXBsOjpkcmF3
VGlsZWRJbWFnZUltcGwoZ3JhcGhpY3NDb250ZXh0KCksIGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd05hdGl2ZUltYWdlKGNv
bnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmll
bnRhdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TmF0aXZlSW1hZ2Uo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKKyAgICBVTlVTRURfUEFSQU0oaW1hZ2VTaXpl
KTsKKyAgICBhdXRvJiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0KCk7CisgICAgYXV0byYgc3Rh
dGUgPSBjb250ZXh0LnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdOYXRpdmVJbWFnZShtX3BsYXRm
b3JtQ29udGV4dCwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCBjb21wb3NpdGVPcGVy
YXRvciwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbiwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIGdyYXBoaWNzQ29u
dGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXR0ZXJu
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKKyAgICBp
ZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKKyAg
ICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgp
LCBJbnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7CisgICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3UmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7CisgICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRmb3Jt
Q29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogeworICAgIFVOVVNFRF9QQVJB
TShzdHJva2VUaGlja25lc3MpOworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKKyAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwg
cG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNv
bG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIENhaXJvOjpkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKG1fcGxhdGZvcm1Db250ZXh0LCBvcmlnaW4sIHdpZHRoLCBzdHlsZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKQor
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
CisgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUu
ZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
UGF0aChjb25zdCBQYXRoJikKIHsKKyAgICAvLyBGSVhNRTogbm90IGFwcGxpY2FibGUgdG8gQ2Fp
cm8uCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKKyAgICBVTlVTRURfUEFSQU0o
b2Zmc2V0KTsKKyAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcGF0
aCwgd2lkdGgsIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogeworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIENh
aXJvOjpkcmF3Rm9jdXNSaW5nKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0cywgd2lkdGgsIGNvbG9y
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNhdmUoKQogeworICAgIENh
aXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnJlc3RvcmUoKQogeworICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250
ZXh0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnRyYW5zbGF0ZShmbG9h
dCB4LCBmbG9hdCB5KQoreworICAgIENhaXJvOjp0cmFuc2xhdGUobV9wbGF0Zm9ybUNvbnRleHQs
IHgsIHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cm90YXRlKGZsb2F0
IGFuZ2xlSW5SYWRpYW5zKQoreworICAgIENhaXJvOjpyb3RhdGUobV9wbGF0Zm9ybUNvbnRleHQs
IGFuZ2xlSW5SYWRpYW5zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnRy
YW5zbGF0ZShmbG9hdCwgZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogeworICAgIENhaXJvOjpzY2FsZShtX3BsYXRmb3Jt
Q29udGV4dCwgc2l6ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3Rh
dGUoZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogeworICAgIENhaXJvOjpjb25jYXRDVE0obV9w
bGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUmKQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKKyAgICBD
YWlybzo6U3RhdGU6OnNldENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKQorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Z2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQogeworICAgIHJldHVybiBDYWly
bzo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQordm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSkKIHsKKyAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4
dCwgb3BhY2l0eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCiB7CisgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKG1fcGxh
dGZvcm1Db250ZXh0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXAo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIENhaXJvOjpjbGlwKG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXAoY29u
c3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBDYWlybzo6Y2xpcE91dChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0
KGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQogeworICAgIENhaXJvOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250
ZXh0LCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBPdXQo
Y29uc3QgUGF0aCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFBhdGgoY29u
c3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7CisgICAgQ2Fpcm86OmNsaXBQYXRo
KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpCitJbnRSZWN0
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJvdW5kcygpCiB7CisgICAgcmV0dXJuIENh
aXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhtX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQog
ewogfQogCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01v
ZGUpCit7CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyhtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKaW5kZXgg
MzNjZGRiZmFkZTYxZmZjMDk2NTMwNGQzZWQ3ZmIyNTU0MGNjZjgyMC4uNjBhZDQyZTg5Mzc2NWE1
MzVhYjM4MjExMjA3Y2M5YjU0ZWM0MGYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmgKQEAgLTQxLDYgKzQxLDkgQEAgcHVibGljOgogICAgIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybyhHcmFwaGljc0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHRDYWlybyYpOwogICAgIHZpcnR1
YWwgfkdyYXBoaWNzQ29udGV4dEltcGxDYWlybygpOwogCisgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZv
cm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIApAQCAt
NjQsOSArNjcsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3SW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxl
ZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29u
c3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVu
dGF0aW9uKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1v
ZGUgPSBCbGVuZE1vZGVOb3JtYWwpIG92ZXJyaWRlOwogCkBAIC04Nyw2ICs5MCw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzY2FsZShjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKSBvdmVycmlkZTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXll
cigpIG92ZXJyaWRlOwpAQCAtOTUsOSArMTAwLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkg
b3ZlcnJpZGU7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7CiAgICAgCiAgICAg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKIAorICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4
dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAgICBQbGF0Zm9ybUNvbnRl
eHRDYWlybyYgbV9wbGF0Zm9ybUNvbnRleHQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRl
eCAxYjlkODFiZDEyMjdhNzY5MjU0ZWI5NWNiMTY5OTE5MDdkZjdkY2E5Li5iYjdhZDNlMGViMGMx
N2U3NDIxYWRmMTc3ZWJlMWY3MzczNWE2ODMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29s
b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCkBAIC0yNDYsNyArMjQ3
LDE0IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjCiAKICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3Ig
PSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwogICAgIG1f
ZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9kYXRhLm1fY29u
dGV4dCA9IHN0ZDo6bWFrZV91bmlxdWU8R3JhcGhpY3NDb250ZXh0PigmbV9kYXRhLm1fcGxhdGZv
cm1Db250ZXh0KTsKKyAgICBpZiAodHJ1ZSkgeworICAgICAgICBtX2RhdGEubV9jb250ZXh0ID0g
c3RkOjptYWtlX3VuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KAorICAgICAgICAgICAgW3RoaXNdKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQs
IG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dCk7CisgICAgICAgICAgICB9KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9kYXRhLm1fY29udGV4dCA9IHN0ZDo6bWFrZV91bmlxdWU8R3JhcGhpY3NDb250
ZXh0PigmbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDRjODJmZTU4YThhZDQ0YWU1ZjFkMWU1NDcyYmZlODEy
Y2ViNWE3ZDcuLmM4NWExNTQ3MTFiYjk4ZmQ2MGMwODA5ZDI4YmU3MGE1NmQyZDgyZTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKQEAgLTExNDUsMTAgKzExNDUsOCBAQCBJbnRSZWN0IEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RG
TG9nQWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRo
IGRpc3BsYXkgbGlzdHMiKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4LCA0
MDk2LCA0MDk2KTsgLy8gRklYTUU6IGRpc3BsYXkgbGlzdHMuCi0gICAgfQorICAgIGlmIChtX2lt
cGwpCisgICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKIAogICAgIHJldHVybiBl
bmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRl
eHQoKSkpOwogfQpAQCAtMTUwMCw3ICsxNDk4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4
dDo6c2V0Q1RNKCkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7
CisgICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTE1MTQsMTAgKzE1MTIsOCBAQCBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7
CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0oKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4
dHMuIik7Ci0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICB9CisgICAgaWYg
KG1faW1wbCkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7CiAK
ICAgICAvLyBUaGUgQ1RNIHVzdWFsbHkgaW5jbHVkZXMgdGhlIGRldmljZVNjYWxlRmFjdG9yIGV4
Y2VwdCBpbiBXZWJLaXQgMSB3aGVuIHRoZQogICAgIC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBvc2l0
ZWQsIHNpbmNlIHRoZSBzY2FsZSBmYWN0b3IgaXMgaW50ZWdyYXRlZCBhdCBhIGxvd2VyCkBAIC0x
NTMzLDEwICsxNTI5LDggQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW8KICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVjdDsKIAotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Ci0g
ICAgICAgIHJldHVybiByZWN0OwotICAgIH0KKyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1
cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7CiAKICAg
ICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBz
cGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBt
YXRyaXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhpcyBjb252ZXJzaW9uIGlmIHdl
IGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGQ4
NzYxYmVmOTQ3MTMwYzQwZjliMDMyYWI3Y2FhOGQ5NGU4MjNlMzcuLjMwNTQ0MjM5NDViNWQ2OTRm
NjQ2YmVkNTBjYTU0MDY3ZmNjM2UzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTEwNSwzMSArMTA1LDM0IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNp
CiAgICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKK0ltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsK
ICAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJ
dGVtKERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBh
aW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworICAgIHJl
dHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQorSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9p
bnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
CiB7CiAgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBw
ZW5kSXRlbShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CiAgICAgdXBkYXRl
SXRlbUV4dGVudChuZXdJdGVtKTsKKyAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNv
cmQ7CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLXZvaWQgUmVjb3JkZXI6OmRyYXdO
YXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQorSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGls
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBEcmF3aW5nSXRlbSYg
bmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdOYXRpdmVJbWFn
ZTo6Y3JlYXRlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRN
b2RlLCBvcmllbnRhdGlvbikpKTsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0
PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwor
ICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KLSNlbmRpZgogCi12b2lk
IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyNp
ZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShj
b25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVz
dGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFp
bnRpbmdPcHRpb25zKSkpOworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJh
d2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd05hdGl2ZUltYWdlOjpjcmVhdGUoaW1hZ2UsIGltYWdl
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSkpOwog
ICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CisjZW5kaWYKIAogdm9pZCBSZWNvcmRl
cjo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewpAQCAtMTkz
LDYgKzE5NiwxNyBAQCB2b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCiAgICAgYXBwZW5kSXRlbShDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKHRy
YW5zZm9ybSkpOwogfQogCit2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikKK3sKKyAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKCkgaXMg
bm90IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Cit9CisKK0FmZmlu
ZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmlj
ZVNjYWxlKQoreworICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBp
cyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7CisgICAg
cmV0dXJuIHsgfTsKK30KKwogdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQogewogICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJh
d2luZ0l0ZW0+KGFwcGVuZEl0ZW0oQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKG9wYWNp
dHkpKSk7CkBAIC0zNTgsNiArMzcyLDEyIEBAIHZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogICAgIGFwcGVuZEl0ZW0oQ2xpcFBhdGg6
OmNyZWF0ZShwYXRoLCB3aW5kUnVsZSkpOwogfQogCitJbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91
bmRzKCkKK3sKKyAgICBXVEZMb2dBbHdheXMoIkdldHRpbmcgdGhlIGNsaXAgYm91bmRzIG5vdCB5
ZXQgc3VwcG9ydGVkIHdpdGggRGlzcGxheUxpc3Q6OlJlY29yZGVyLiIpOworICAgIHJldHVybiBJ
bnRSZWN0KC0yMDQ4LCAtMjA0OCwgNDA5NiwgNDA5Nik7Cit9CisKIHZvaWQgUmVjb3JkZXI6OmFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgLy8g
RklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFs
bCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCkBAIC0zNjUsNiArMzg1LDEyIEBAIHZvaWQgUmVjb3Jk
ZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiAgICAg
YXBwZW5kSXRlbShBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoZGV2aWNlU2NhbGVGYWN0
b3IpKTsKIH0KIAorRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit7CisgICAg
V1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBu
b3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7CisgICAgcmV0
dXJuIHJlY3Q7Cit9CisKIEl0ZW0mIFJlY29yZGVyOjphcHBlbmRJdGVtKFJlZjxJdGVtPiYmIGl0
ZW0pCiB7CiAgICAgd2lsbEFwcGVuZEl0ZW0oaXRlbS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBmOWU0OWE1OTBiOWNiODEwOTljNDIzMGJhNzA4ZGU0
MzI0MGJkMTM2Li41OGRkMDdlOTg0MTQzZTJkODBkYmFlMjQ1M2VjM2FlN2U1ZDU0ODM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU2LDYgKzU2LDkgQEAgcHVi
bGljOgogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0
Lml0ZW1Db3VudCgpOyB9CiAKIHByaXZhdGU6CisgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRy
OyB9CisKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwogICAgIHZv
aWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIApAQCAtODQsOSArODcsOSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9y
UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhd0ltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVG
YWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIEltYWdlRHJhd1Jlc3VsdCBk
cmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAg
ICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBvdmVycmlkZTsKKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVs
ZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOwogI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQogICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKSBvdmVycmlkZTsKICNlbmRp
ZgpAQCAtMTA5LDYgKzExMiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpIG92ZXJyaWRlOwogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7
CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92
ZXJyaWRlOwpAQCAtMTE3LDkgKzEyMiwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xpcE91dChj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVy
cmlkZTsKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKICAgICAKICAgICB2b2lk
IGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwogCisgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpS
b3VuZGluZ01vZGUpIG92ZXJyaWRlOworCiAgICAgSXRlbSYgYXBwZW5kSXRlbShSZWY8SXRlbT4m
Jik7CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332128</attachid>
            <date>2018-01-23 23:44:25 -0800</date>
            <delta_ts>2018-01-24 23:18:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181977-20180124084423.patch</filename>
            <type>text/plain</type>
            <size>52995</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3NDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAyZTYyM2NhZWVkNmMw
OTVmMGQzNzhiZDcyYzgyOTFkOWFhMjlmNy4uMjkwZjk5NGQyMjBlYWQxMjRjMmE0ZDc0ZDQ2NWQ4
M2VlMjU3ZmI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAxOC0wMS0yMyAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0NhaXJvXSBVc2Ug
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvIGZvciBJbWFnZUJ1ZmZlciBjb250ZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE5NzcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmhhbmNlIHRoZSBHcmFw
aGljc0NvbnRleHRJbXBsIGludGVyZmFjZSB0byB0aGUgcG9pbnQgb2YgZW5hYmxpbmcgdGhlCisg
ICAgICAgIENhaXJvLWJhc2VkIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQgZm9yIEdyYXBoaWNz
Q29udGV4dCBjb25zdHJ1Y3Rpb24KKyAgICAgICAgaW4gSW1hZ2VCdWZmZXJDYWlyby5jcHAuCisK
KyAgICAgICAgSW4gb3JkZXIgdG8gZW5hYmxlIEdyYXBoaWNzQ29udGV4dEltcGwgaW1wbGVtZW50
YXRpb25zIHRvIHByb3Blcmx5CisgICAgICAgIG1hbmFnZSBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCBvYmplY3RzLCB0aGUgaGFzUGxhdGZvcm1Db250ZXh0KCkgYW5kCisgICAgICAgIHBsYXRmb3Jt
Q29udGV4dCgpIG1ldGhvZHMgYXJlIGFkZGVkLiBDYWlybyBpbXBsZW1lbnRhdGlvbiByZXR1cm5z
IHRydWUKKyAgICAgICAgaW4gdGhlIGZpcnN0IG1ldGhvZCwgYW5kIHJldHVybnMgcG9pbnRlciB0
byB0aGUgUGxhdGZvcm1Db250ZXh0Q2Fpcm8KKyAgICAgICAgb2JqZWN0IGluIHRoZSBzZWNvbmQu
IFRoZSBEaXNwbGF5TGlzdDo6UmVjb3JkZXIsIGR1ZSB0byBpdHMgcmVjb3JkaW5nCisgICAgICAg
IG5hdHVyZSwgZG9lc24ndCBtYW5hZ2Ugc3VjaCBhbiBvYmplY3QsIHNvIGl0IHJldHVybnMgZmFs
c2UgYW5kIG51bGxwdHIsCisgICAgICAgIHJlc3BlY3RpdmVseS4KKworICAgICAgICBHcmFwaGlj
c0NvbnRleHRJbXBsIGFsc28gZ2FpbnMgdGhlIHNldENUTSgpLCBnZXRDVE0oKSwgY2xpcEJvdW5k
cygpIGFuZAorICAgICAgICByb3VuZFRvRGV2aWNlUGl4ZWxzKCkgbWV0aG9kcywgY29ycmVzcG9u
ZGluZyB0byB0aGUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIG1ldGhvZHMgdGhhdCBub3cgaW52
b2tlIHRoZXNlIG5ldyBtZXRob2RzIG9uIGFueSBleGlzdGluZyBtX2ltcGwgb2JqZWN0LgorICAg
ICAgICBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gaW1wbGVtZW50YXRpb25zIG1pbWljIHRoZSBl
eGlzdGluZyBiZWhhdmlvciBpbgorICAgICAgICB0aGUgQ2Fpcm8tc3BlY2lmaWMgR3JhcGhpY3ND
b250ZXh0IG1ldGhvZHMsIGJ1dCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIKKyAgICAgICAgaW1wbGVt
ZW50YXRpb25zIHJlbWFpbiBuby1vcCwgbG9nZ2luZyB0aGUgaW52b2NhdGlvbiBidXQgZG9pbmcg
bm90aGluZworICAgICAgICBvdGhlcndpc2UuCisKKyAgICAgICAgZHJhd0ltYWdlKCkgYW5kIGRy
YXdUaWxlZEltYWdlKCkgbWV0aG9kcyBvbiB0aGUgR3JhcGhpY3NDb250ZXh0SW1wbAorICAgICAg
ICBpbnRlcmZhY2UgYXJlIGNoYW5nZWQgdG8gcmV0dXJuIHRoZSBJbWFnZURyYXdSZXN1bHQgdmFs
dWUsIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgdG8gd2hhdCdzIGJlZW4gZG9uZSBpbiB0aGUgbWV0
aG9kLiBJbiBEaXNwbGF5TGlzdDo6UmVjb3JkZXIsIHRoZSBtZXRob2RzCisgICAgICAgIHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZCwgd2hpbGUgaW4gR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvIHRoZQorICAgICAgICBtZXRob2RzIHJldHVybiB0aGUgcmV0dXJuIHJlc3VsdCBvZiBJ
bWFnZTo6ZHJhdygpIG9yIEltYWdlOjpkcmF3VGlsZWQoKQorICAgICAgICBjYWxsLgorCisgICAg
ICAgIFRvIG1ha2UgdGhlIHByb3RlY3RlZCBJbWFnZTo6ZHJhdygpIGFuZCBJbWFnZTo6ZHJhd1Rp
bGVkKCkgbWV0aG9kcworICAgICAgICBhY2Nlc3NpYmxlLCBpbnZvY2F0aW9ucyBvZiB0aG9zZSBh
cmUgcGFja2VkIGludG8gc3RhdGljIGRyYXdJbWFnZUltcGwoKQorICAgICAgICBhbmQgZHJhd1Rp
bGVkSW1hZ2VJbXBsKCkgZnVuY3Rpb25zIG9uIHRoZSBHcmFwaGljc0NvbnRleHRJbXBsIGNsYXNz
LgorICAgICAgICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNpbXBseSBkZWNsYXJlIEdyYXBo
aWNzQ29udGV4dEltcGwgY2xhc3MgYXMgYQorICAgICAgICBmcmllbmQgY2xhc3Mgb2YgSW1hZ2Us
IGFuZCBub3QgZXZlcnkgc3BlY2lmaWMgR3JhcGhpY3NDb250ZXh0SW1wbAorICAgICAgICBkZXJp
dmF0aW9uLiBJbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIG1pcnJvciBiZWhhdmlv
ciBvZiB0aGUKKyAgICAgICAgZHJhd0ltYWdlKCkgYW5kIGRyYXdUaWxlZEltYWdlKCkgbWV0aG9k
cyBvbiB0aGUgR3JhcGhpY3NDb250ZXh0IGNsYXNzLAorICAgICAgICB3aGVuIGFuIG1faW1wbCBv
YmplY3QgaXNuJ3QgcHJlc2VudCwgY29uc3RydWN0aW5nIGEgc2NvcGUtdGllZAorICAgICAgICBJ
bnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgb2JqZWN0IGFuZCBpbnZva2luZyB0aGUgcmVs
ZXZhbnQgSW1hZ2UKKyAgICAgICAgbWV0aG9kLgorCisgICAgICAgIFRvIG1ha2UgaW1tZWRpYXRl
IHVzZSBvZiB0aGUgbmV3IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybyBmdW5jdGlvbmFsaXR5LAor
ICAgICAgICB0aGUgR3JhcGhpY3NDb250ZXh0IGNvbnN0cnVjdGlvbiBpbiBDYWlyby1zcGVjaWZp
YyBJbWFnZUJ1ZmZlcgorICAgICAgICBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBhIGZhY3Rvcnkg
ZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgbmV3CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybyBvYmplY3QgdGhyb3VnaCB3aGljaCB0aGUgZ2l2ZW4KKyAgICAgICAgUGxhdGZvcm1Db250
ZXh0Q2Fpcm8gaXMgdXNlZCBmb3IgcGFpbnRpbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0t
IG5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNv
bnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1w
bDo6ZHJhd0ltYWdlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBs
OjpkcmF3VGlsZWRJbWFnZUltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptX3ByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjp+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cGxhdGZvcm1Db250
ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
dXBkYXRlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpzZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdHbHlwaHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3SW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3VGlsZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdOYXRpdmVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5l
c0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpk
cmF3TGluZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3Jl
OjptX3BsYXRmb3JtQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpk
cmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpnZXRD
VE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwQm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm91bmRUb0Rldmlj
ZVBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuaDoKKwogMjAxOC0wMS0yMyAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5T
dXp1a2lAc29ueS5jb20+CiAKICAgICAgICAgW0N1cmxdIEZpeCB3cm9uZyByZWRpcmVjdGlvbiB3
aXRoIHJlbGF0aXZlIHVybCB3aGVuIGl0IGhhcHBlbnMgZnJvbQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggMDY4Yjli
OGQ3ZDZkZDYzMGEyYzhkNmE5ZDkzNGY1ZjA5MWZiNWVmNC4uNzZiYWQ3ZmM3NDYzNzhmMzFlNGUx
Y2ZmNGYwYWJmMGUxYWFkZTk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zNDgsNiArMzQ4LDEzIEBAIEdyYXBo
aWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiAgICAgcGxhdGZvcm1EZXN0cm95KCk7CiB9
CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorewor
ICAgIGlmIChtX2ltcGwpCisgICAgICAgIHJldHVybiBtX2ltcGwtPmhhc1BsYXRmb3JtQ29udGV4
dCgpOworICAgIHJldHVybiAhIW1fZGF0YTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNh
dmUoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC03MDksMTAgKzcxNiw4IEBA
IEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKIAotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKLSAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkUmVjb3JkOwotICAgIH0KKyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1cm4gbV9p
bXBsLT5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdP
cHRpb25zKTsKIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0
aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgaW1hZ2VQYWludGluZ09wdGlvbnMubV9pbnRl
cnBvbGF0aW9uUXVhbGl0eSk7CiAgICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zLm1fY29tcG9zaXRlT3BlcmF0b3IsIGlt
YWdlUGFpbnRpbmdPcHRpb25zLm1fYmxlbmRNb2RlLCBpbWFnZVBhaW50aW5nT3B0aW9ucy5tX2Rl
Y29kaW5nTW9kZSwgaW1hZ2VQYWludGluZ09wdGlvbnMubV9vcmllbnRhdGlvbkRlc2NyaXB0aW9u
KTsKQEAgLTcyMywxMCArNzI4LDggQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRO
b3RoaW5nOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdUaWxlZElt
YWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQ
YWludGluZ09wdGlvbnMpOwotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNv
cmQ7Ci0gICAgfQorICAgIGlmIChtX2ltcGwpCisgICAgICAgIHJldHVybiBtX2ltcGwtPmRyYXdU
aWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywg
aW1hZ2VQYWludGluZ09wdGlvbnMpOwogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBpbWFnZVBhaW50aW5n
T3B0aW9ucy5tX2ludGVycG9sYXRpb25RdWFsaXR5KTsKICAgICByZXR1cm4gaW1hZ2UuZHJhd1Rp
bGVkKCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQ
YWludGluZ09wdGlvbnMubV9jb21wb3NpdGVPcGVyYXRvciwgaW1hZ2VQYWludGluZ09wdGlvbnMu
bV9ibGVuZE1vZGUsIGltYWdlUGFpbnRpbmdPcHRpb25zLm1fZGVjb2RpbmdNb2RlKTsKQEAgLTcz
OCwxMCArNzQxLDggQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwog
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdUaWxlZEltYWdlKGltYWdl
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1h
Z2VQYWludGluZ09wdGlvbnMpOwotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRS
ZWNvcmQ7Ci0gICAgfQorICAgIGlmIChtX2ltcGwpCisgICAgICAgIHJldHVybiBtX2ltcGwtPmRy
YXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3Is
IGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogCiAgICAgaWYgKGhSdWxlID09
IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAg
ICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxMmI2NmE1NDllZGY2YmI3MzA2NzY2
ZThjZDljMTkwNDQzN2QxMWFiLi45ZWQyNTcxNTUzMWRkOWY0YjVjMWU5YWMxZDI1YzViMThiMDg2
YmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaApAQCAtMjY1LDcgKzI2NSw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIEdyYXBo
aWNzQ29udGV4dChOb25QYWludGluZ1JlYXNvbnMpOwogCi0gICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBib29sIGhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKIAogICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgp
IGNvbnN0IHsgcmV0dXJuICFtX2RhdGEgJiYgIW1faW1wbDsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAppbmRl
eCAxMTZlY2JlNDg3ZjEyNzMwYzkzMzJmYTExMDc2YzI2NzkxNzdmZTZiLi44NmFkNDE3NTkxODcw
NGZjNWFjNmZlNzdlNGFiOTZkNTQ2NjJjNGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcApAQCAtMzcsNCAr
MzcsMjcgQEAgR3JhcGhpY3NDb250ZXh0SW1wbDo6fkdyYXBoaWNzQ29udGV4dEltcGwoKQogewog
fQogCitJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd0ltYWdlSW1wbChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoY29udGV4dCwgaW1h
Z2VQYWludGluZ09wdGlvbnMubV9pbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgcmV0dXJuIGlt
YWdlLmRyYXcoY29udGV4dCwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlv
bnMubV9jb21wb3NpdGVPcGVyYXRvciwgaW1hZ2VQYWludGluZ09wdGlvbnMubV9ibGVuZE1vZGUs
IGltYWdlUGFpbnRpbmdPcHRpb25zLm1fZGVjb2RpbmdNb2RlLCBpbWFnZVBhaW50aW5nT3B0aW9u
cy5tX29yaWVudGF0aW9uRGVzY3JpcHRpb24pOworfQorCitJbWFnZURyYXdSZXN1bHQgR3JhcGhp
Y3NDb250ZXh0SW1wbDo6ZHJhd1RpbGVkSW1hZ2VJbXBsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRp
b25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9u
UXVhbGl0eUZvclRoaXNTY29wZShjb250ZXh0LCBpbWFnZVBhaW50aW5nT3B0aW9ucy5tX2ludGVy
cG9sYXRpb25RdWFsaXR5KTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKGNvbnRleHQsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9u
cy5tX2NvbXBvc2l0ZU9wZXJhdG9yLCBpbWFnZVBhaW50aW5nT3B0aW9ucy5tX2JsZW5kTW9kZSwg
aW1hZ2VQYWludGluZ09wdGlvbnMubV9kZWNvZGluZ01vZGUpOworfQorCitJbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd1RpbGVkSW1hZ2VJbXBsKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3Is
IEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCit7CisgICAgaWYgKGhSdWxl
ID09IEltYWdlOjpTdHJldGNoVGlsZSAmJiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsK
KyAgICAgICAgLy8gSnVzdCBkbyBhIHNjYWxlLgorICAgICAgICByZXR1cm4gZHJhd0ltYWdlSW1w
bChjb250ZXh0LCBpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlv
bnMpOworICAgIH0KKworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBv
bGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShjb250ZXh0LCBpbWFnZVBhaW50aW5nT3B0aW9ucy5t
X2ludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKGNvbnRl
eHQsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucy5tX2NvbXBvc2l0ZU9wZXJhdG9yKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmluZGV4IGMzYjQwMGM0MzVkNTc2ZDcwNGRkOGU5NWU0
YzcwYmYwNjJmZDExNmYuLjM3YjdhM2I5NWNhNTA2N2Y2NmRjYjg3ZDQ4ZmEyMzBjOTU4MmM5MzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmgKQEAgLTM3LDYgKzM3LDkgQEAgcHVibGljOgogCiAgICAgR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4
dDsgfQogCisgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdCA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpID0gMDsKIApAQCAtNjUsOSArNjgsOSBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29u
c3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSkgPSAwOwogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7
CisgICAgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdU
aWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1
YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2
UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiAjaWYgVVNFKENHKSB8fCBV
U0UoQ0FJUk8pCiAgICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSwgSW1hZ2VPcmllbnRhdGlvbikgPSAwOwogI2VuZGlmCkBAIC05MCw2ICs5Myw4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFs
IEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2Nh
bGUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9
IDA7CkBAIC05OCw5ICsxMDMsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUpID0gMDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwogCisgICAg
dmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBH
cmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2VJbXBsKEdyYXBoaWNzQ29udGV4dCYsIEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKTsKKyAgICBzdGF0aWMgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlSW1w
bChHcmFwaGljc0NvbnRleHQmLCBJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpOworICAgIHN0YXRpYyBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1h
Z2VJbXBsKEdyYXBoaWNzQ29udGV4dCYsIEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGls
ZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhp
Y3NDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXgg
ZDlhNDZkYTQwYTUxOWUzYWQ0YzIyZDg0NTY2MzQ3Y2Q5NDU2ZThkOS4uOGI2OTNjMjkyY2VjMTIz
NTJjMWNkZGMwN2IwZTc3M2M5MmMxM2U0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCkBAIC02Niw2ICs2Niw3IEBAIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNs
YXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CitjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3Mg
VVJMOwogc3RydWN0IExlbmd0aDsKQEAgLTc1LDYgKzc2LDcgQEAgY2xhc3MgSW1hZ2VPYnNlcnZl
cjsKIAogY2xhc3MgSW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZT4gewogICAgIGZyaWVu
ZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4
dEltcGw7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW1hZ2UoKTsKICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAppbmRleCA2OTEzNjA0M2ZlMWIzMTdkMGVhY2E0ODE0YzMyNjU3ODc0
MDRmZmRlLi5mYTI1ZjhhNzMxN2I4ZTAzNGE3ZmRjM2MzNTk5NDU3YmZmMGZlM2Y2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC04MCwxNSArODAsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCiAgICAgfQogfQogCi1BZmZpbmVUcmFuc2Zvcm0g
R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlKSBjb25zdAorQWZmaW5l
VHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNs
dWRlU2NhbGUpIGNvbnN0CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBX
VEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKCkgaXMgbm90IHlldCBjb21wYXRp
YmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKCk7Ci0gICAgfQorICAgIGlmIChtX2ltcGwpCisgICAgICAgIHJldHVybiBtX2ltcGwt
PmdldENUTShpbmNsdWRlU2NhbGUpOwogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpKTsK
QEAgLTk2LDYgKzk0LDggQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RN
KEluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIAogUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKKyAgICBpZiAobV9pbXBsKQor
ICAgICAgICByZXR1cm4gbV9pbXBsLT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICByZXR1cm4gJm1f
ZGF0YS0+cGxhdGZvcm1Db250ZXh0OwogfQogCkBAIC0yODQsMTAgKzI4NCw4IEBAIEludFJlY3Qg
R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBXVEZMb2dBbHdheXMoIkdldHRpbmcgdGhlIGNsaXAgYm91bmRzIG5vdCB5ZXQgc3Vw
cG9ydGVkIHdpdGggZGlzcGxheSBsaXN0cyIpOwotICAgICAgICByZXR1cm4gSW50UmVjdCgtMjA0
OCwgLTIwNDgsIDQwOTYsIDQwOTYpOyAvLyBGSVhNRTogZGlzcGxheSBsaXN0cy4KLSAgICB9Cisg
ICAgaWYgKG1faW1wbCkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwogCiAg
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gQ2Fpcm86OlN0YXRl
OjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CkBAIC0zNjIsMTUgKzM2MCwxMyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0CiAgICAgQ2Fpcm86OmRyYXdMaW5lRm9yRG9jdW1lbnRN
YXJrZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBvcmlnaW4sIHdpZHRoLCBzdHlsZSk7CiB9CiAKLUZs
b2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZ01vZGUpCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5k
aW5nTW9kZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4g
cmVjdDsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0
aCByZWNvcmRpbmcgY29udGV4dHMuIik7Ci0gICAgICAgIHJldHVybiByZWN0OwotICAgIH0KKyAg
ICBpZiAobV9pbXBsKQorICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxz
KHJlY3QsIHJvdW5kaW5nTW9kZSk7CiAKICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CkBAIC00NDQsNyArNDQw
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKCkgaXMgbm90IGNvbXBhdGli
bGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7CisgICAgICAgIG1faW1wbC0+c2V0Q1RNKHRy
YW5zZm9ybSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCmluZGV4IDBmZGNkY2JhODZkNTBmNTM1NjU2MWU4YjJiYWFhNzc5ZTJh
NGM2MjkuLmUxYThlMGNmZGNmZmNiOWI4MmE5ZTdhMTc0OGE2ZDUwNDVmYzlhNzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtMjksMTk2ICsyOSwzNzAgQEAKIAog
I2lmIFVTRShDQUlSTykKIAorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQog
ICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0LCBGbG9hdFJlY3QgeyB9LCBBZmZpbmVU
cmFuc2Zvcm0geyB9KQogICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQor
ICAgICwgbV9wcml2YXRlKHN0ZDo6bWFrZV91bmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCiB7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+
c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6fkdyYXBoaWNzQ29udGV4dEltcGxDYWlybygpID0gZGVmYXVsdDsKK0dyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6fkdyYXBoaWNzQ29udGV4dEltcGxDYWlybygpCit7CisgICAg
bV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1BsYXRmb3JtQ29udGV4dENhaXJvKiBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKK30KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBD
YWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKTsKKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHls
ZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOworCisgICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3Rh
dGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhh
dCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFu
ZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIG11
dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpKTsKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRl
LnNoYWRvd09mZnNldDsKKyAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7
IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRl
LmJsZW5kTW9kZSk7CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlh
bGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyU2hhZG93KCkKIHsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKKyAgICBD
YWlybzo6c2V0TGluZUNhcChtX3BsYXRmb3JtQ29udGV4dCwgbGluZUNhcCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBm
bG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKKyAgICBDYWlybzo6c2V0TGlu
ZURhc2gobV9wbGF0Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9pbikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKIHsK
KyAgICBDYWlybzo6c2V0TGluZUpvaW4obV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVKb2luKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldE1pdGVyTGltaXQoZmxvYXQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQogeworICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRl
ckxpbWl0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIGF1dG8mIGNvbnRleHQgPSBncmFwaGljc0Nv
bnRleHQoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IGNvbnRleHQuc3RhdGUoKTsKKyAgICBDYWlybzo6
ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CisgICAgYXV0byYgY29udGV4dCA9IGdy
YXBoaWNzQ29udGV4dCgpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShjb250ZXh0LnN0YXRlKCkpLCBjb250ZXh0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIEdyYWRpZW50JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKKyAgICBS
ZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwbGF0Zm9ybUdyYWRpZW50ID0gYWRvcHRSZWYoZ3JhZGll
bnQuY3JlYXRlUGxhdGZvcm1HcmFkaWVudCgxLjApKTsKKworICAgIENhaXJvOjpzYXZlKG1fcGxh
dGZvcm1Db250ZXh0KTsKKyAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIHBsYXRmb3JtR3JhZGllbnQuZ2V0KCkpOworICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZv
cm1Db250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CisgICAgYXV0byYgY29udGV4dCA9
IGdyYXBoaWNzQ29udGV4dCgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0
b3IgPSBjb250ZXh0LnN0YXRlKCkuY29tcG9zaXRlT3BlcmF0b3I7CisKKyAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3Bl
cmF0b3IsIGJsZW5kTW9kZSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGNvbnRleHQuc3RhdGUoKSksIGNvbnRl
eHQpOworICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1D
b250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGVOb3JtYWwpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogeworICAgIGF1dG8mIGNvbnRl
eHQgPSBncmFwaGljc0NvbnRleHQoKTsKKworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3Vz
T3BlcmF0b3IgPSBjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpOworICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJh
dG9yLCBibGVuZE1vZGUpOworCisgICAgQ2Fpcm86OlNoYWRvd1N0YXRlIHNoYWRvd1N0YXRlKGNv
bnRleHQuc3RhdGUoKSk7CisKKyAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKKyAgICAgICAgQ2Fp
cm86OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRv
d1N0YXRlLCBjb250ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIENhaXJvOjpmaWxsUmVjdChtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSwgY29udGV4dCk7
CisKKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29u
dGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlTm9ybWFsKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJikKIHsKKyAgICBhdXRvJiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0KCk7CisgICAg
Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIHsgfSwgQ2Fpcm86OlNoYWRvd1N0YXRlKGNvbnRleHQuc3RhdGUoKSks
IGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKKyAgICBhdXRvJiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0KCk7
CisgICAgYXV0byYgc3RhdGUgPSBjb250ZXh0LnN0YXRlKCk7CisgICAgQ2Fpcm86OmZpbGxQYXRo
KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSksIGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Cisg
ICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKKyAgICBmaWxsUGF0aChw
YXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKKyAgICBh
dXRvJiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0KCk7CisgICAgYXV0byYgc3RhdGUgPSBjb250
ZXh0LnN0YXRlKCk7CisgICAgQ2Fpcm86OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSksIGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CisgICAgYXV0byYgY29udGV4dCA9IGdy
YXBoaWNzQ29udGV4dCgpOworICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOworICAg
IENhaXJvOjpzdHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6U3Ryb2tl
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgY29udGV4dCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAgUGF0aCBwYXRoOworICAgIHBhdGguYWRkRWxsaXBz
ZShyZWN0KTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKKyAgICBD
YWlybzo6Y2xlYXJSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290
aGluZ01vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9v
dGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7CisgICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhp
bmcpOworICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5
cGhfdD4gZ2x5cGhzKG51bUdseXBocyk7CisgICAgeworICAgICAgICBBU1NFUlQoZnJvbSArIG51
bUdseXBocyA8PSBnbHlwaEJ1ZmZlci5zaXplKCkpOworICAgICAgICBhdXRvKiBnbHlwaHNEYXRh
ID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOworICAgICAgICBhdXRvKiBhZHZhbmNlcyA9IGds
eXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pOworCisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50
LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewor
ICAgICAgICAgICAgZ2x5cGhzW2ldID0geyBnbHlwaHNEYXRhW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0
IH07CisgICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gZm9udC5w
bGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7CisgICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKworICAgIGF1dG8mIGNvbnRleHQgPSBn
cmFwaGljc0NvbnRleHQoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IGNvbnRleHQuc3RhdGUoKTsKKyAg
ICBDYWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKKyAgICAgICAgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGds
eXBocywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsIGNvbnRl
eHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKQorSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd0ltYWdl
SW1wbChncmFwaGljc0NvbnRleHQoKSwgaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdl
UGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikKK0ltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdU
aWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0SW1wbDo6ZHJhd1RpbGVk
SW1hZ2VJbXBsKGdyYXBoaWNzQ29udGV4dCgpLCBpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
dGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKK0ltYWdlRHJh
d1Jlc3VsdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdUaWxlZEltYWdlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1
bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQogeworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRJbXBsOjpk
cmF3VGlsZWRJbWFnZUltcGwoZ3JhcGhpY3NDb250ZXh0KCksIGltYWdlLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlv
bnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd05hdGl2ZUltYWdl
KGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgSW1hZ2VP
cmllbnRhdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TmF0aXZlSW1h
Z2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSwg
SW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKKyAgICBVTlVTRURfUEFSQU0oaW1hZ2VT
aXplKTsKKyAgICBhdXRvJiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0KCk7CisgICAgYXV0byYg
c3RhdGUgPSBjb250ZXh0LnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdOYXRpdmVJbWFnZShtX3Bs
YXRmb3JtQ29udGV4dCwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCBjb21wb3NpdGVP
cGVyYXRvciwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbiwgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIGdyYXBoaWNz
Q29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXR0
ZXJuKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKKyAg
ICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkK
KyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdl
dCgpLCBJbnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7CisgICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3UmVjdChtX3BsYXRmb3Jt
Q29udGV4dCwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7CisgICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRm
b3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJv
a2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlVW5kZXJsaW5lcywgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQogeworICAgIFVOVVNFRF9Q
QVJBTShzdHJva2VUaGlja25lc3MpOworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKKyAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4
dCwgcG9pbnQsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFBvaW50Jiwg
ZmxvYXQsIEdyYXBoaWNzQ29udGV4dDo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFBvaW50JiBvcmlnaW4sIGZsb2F0IHdpZHRoLCBHcmFwaGljc0NvbnRleHQ6OkRvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIENhaXJvOjpkcmF3TGluZUZvckRvY3VtZW50
TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCBvcmlnaW4sIHdpZHRoLCBzdHlsZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3Rh
dGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRl
LnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpk
cmF3UGF0aChjb25zdCBQYXRoJikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
KQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0
aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
eworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKG1f
cGxhdGZvcm1Db250ZXh0LCBwYXRoLCB3aWR0aCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CisgICAgVU5VU0VEX1BB
UkFNKG9mZnNldCk7CisgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3RzLCB3aWR0aCwgY29sb3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6c2F2ZSgpCiB7CisgICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9yZSgpCiB7CisgICAgQ2Fpcm86OnJl
c3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6dHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKKyAgICBDYWlybzo6dHJhbnNsYXRl
KG1fcGxhdGZvcm1Db250ZXh0LCB4LCB5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnJvdGF0ZShmbG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3Rh
dGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCiB7CisgICAgQ2Fpcm86OnJvdGF0ZShtX3BsYXRmb3Jt
Q29udGV4dCwgYW5nbGVJblJhZGlhbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CisgICAgQ2Fpcm86OnNjYWxlKG1f
cGxhdGZvcm1Db250ZXh0LCBzaXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKQordm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
IHsKKyAgICBDYWlybzo6Y29uY2F0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0obV9w
bGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZSkKK3sKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0obV9wbGF0Zm9ybUNvbnRl
eHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKKyAgICBDYWlybzo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgQ2Fpcm86
OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmKQordm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIENhaXJvOjpj
bGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7CisgICAgQ2Fpcm86OmNs
aXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsK
KyAgICBDYWlybzo6Y2xpcFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIGNsaXBSdWxlKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSkKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRz
KCkKIHsKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1D
b250ZXh0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQpCiB7CiB9CiAKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKK3sKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uaAppbmRleCAzM2NkZGJmYWRlNjFmZmMwOTY1MzA0ZDNlZDdmYjI1NTQwY2Nm
ODIwLi44NGFlYjdiNzNmNmU2YjM2MTA3Y2I2YjJjOTQ2OTNjOTIzNjZiMzM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaApAQCAtNDEsNiArNDEsOSBAQCBwdWJsaWM6CiAgICAg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4
dENhaXJvJik7CiAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCk7CiAKKyAg
ICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFBsYXRmb3Jt
Q29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKwogICAgIHZv
aWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclNoYWRv
dygpIG92ZXJyaWRlOwogCkBAIC02NCw5ICs2Nyw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJh
d0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWdu
ZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGls
ZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxv
YXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICBJbWFn
ZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpU
aWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24pIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd1BhdHRl
cm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbCkgb3ZlcnJpZGU7CiAKQEAg
LTg3LDYgKzkwLDggQEAgcHVibGljOgogICAgIHZvaWQgcm90YXRlKGZsb2F0KSBvdmVycmlkZTsK
ICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOworICAgIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOwogCiAg
ICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lk
IGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7CkBAIC05NSwxMSArMTAwLDE1IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
b3ZlcnJpZGU7CiAgICAgCiAgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBv
dmVycmlkZTsKIAorICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKKwogcHJpdmF0
ZToKICAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyYgbV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCAx
YjlkODFiZDEyMjdhNzY5MjU0ZWI5NWNiMTY5OTE5MDdkZjdkY2E5Li4xNGI5YWY3NTJkNjA1MzU0
NjlmNDhiYzI1OWNhMjViNjUzNWFlN2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCkBAIC0yNDYsNyArMjQ3LDgg
QEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWMKIAogICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFk
b3B0UmVmKGNhaXJvX2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7CiAgICAgbV9kYXRh
Lm1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0
ID0gc3RkOjptYWtlX3VuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KCZtX2RhdGEubV9wbGF0Zm9ybUNv
bnRleHQpOworICAgIG1fZGF0YS5tX2NvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEdyYXBoaWNz
Q29udGV4dD4oCisgICAgICAgIFt0aGlzXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvPihjb250ZXh0LCBt
X2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpOyB9KTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwCmluZGV4IDRjODJmZTU4YThhZDQ0YWU1ZjFkMWU1NDcyYmZlODEyY2Vi
NWE3ZDcuLmM4NWExNTQ3MTFiYjk4ZmQ2MGMwODA5ZDI4YmU3MGE1NmQyZDgyZTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKQEAgLTExNDUsMTAgKzExNDUsOCBAQCBJbnRSZWN0IEdyYXBoaWNzQ29udGV4
dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9n
QWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIGRp
c3BsYXkgbGlzdHMiKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4LCA0MDk2
LCA0MDk2KTsgLy8gRklYTUU6IGRpc3BsYXkgbGlzdHMuCi0gICAgfQorICAgIGlmIChtX2ltcGwp
CisgICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKIAogICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQo
KSkpOwogfQpAQCAtMTUwMCw3ICsxNDk4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKCkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Cisg
ICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTE1MTQsMTAgKzE1MTIsOCBAQCBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0
OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CiAK
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0
OjpnZXRDVE0oKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMu
Iik7Ci0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICB9CisgICAgaWYgKG1f
aW1wbCkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7CiAKICAg
ICAvLyBUaGUgQ1RNIHVzdWFsbHkgaW5jbHVkZXMgdGhlIGRldmljZVNjYWxlRmFjdG9yIGV4Y2Vw
dCBpbiBXZWJLaXQgMSB3aGVuIHRoZQogICAgIC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBvc2l0ZWQs
IHNpbmNlIHRoZSBzY2FsZSBmYWN0b3IgaXMgaW50ZWdyYXRlZCBhdCBhIGxvd2VyCkBAIC0xNTMz
LDEwICsxNTI5LDggQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW8KICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVjdDsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
KSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Ci0gICAg
ICAgIHJldHVybiByZWN0OwotICAgIH0KKyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1cm4g
bV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7CiAKICAgICAv
LyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFj
ZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBtYXRy
aXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhpcyBjb252ZXJzaW9uIGlmIHdlIGhh
dmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGQ4NzYx
YmVmOTQ3MTMwYzQwZjliMDMyYWI3Y2FhOGQ5NGU4MjNlMzcuLjMwNTQ0MjM5NDViNWQ2OTRmNjQ2
YmVkNTBjYTU0MDY3ZmNjM2UzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKQEAgLTEwNSwzMSArMTA1LDM0IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpCiAg
ICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKK0ltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKICAg
ICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVt
KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50
aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworICAgIHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQorSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7
CiAgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKSk7CiAgICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKKyAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7
CiB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLXZvaWQgUmVjb3JkZXI6OmRyYXdOYXRp
dmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQorSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6
OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdOYXRpdmVJbWFnZTo6
Y3JlYXRlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRNb2Rl
LCBvcmllbnRhdGlvbikpKTsKKyAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERy
YXdpbmdJdGVtPihhcHBlbmRJdGVtKERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucykpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOworICAg
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KLSNlbmRpZgogCi12b2lkIFJl
Y29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVT
Y2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyNpZiBV
U0UoQ0cpIHx8IFVTRShDQUlSTykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShjb25z
dCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQogewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0
ZW0+KGFwcGVuZEl0ZW0oRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRp
bmdPcHRpb25zKSkpOworICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd05hdGl2ZUltYWdlOjpjcmVhdGUoaW1hZ2UsIGltYWdlU2l6
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKSkpOwogICAg
IHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7CiB9CisjZW5kaWYKIAogdm9pZCBSZWNvcmRlcjo6
ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewpAQCAtMTkzLDYg
KzE5NiwxNyBAQCB2b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCiAgICAgYXBwZW5kSXRlbShDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKHRyYW5z
Zm9ybSkpOwogfQogCit2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikKK3sKKyAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKCkgaXMgbm90
IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Cit9CisKK0FmZmluZVRy
YW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKQoreworICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBpcyBu
b3QgeWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7CisgICAgcmV0
dXJuIHsgfTsKK30KKwogdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQogewogICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2lu
Z0l0ZW0+KGFwcGVuZEl0ZW0oQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKG9wYWNpdHkp
KSk7CkBAIC0zNTgsNiArMzcyLDEyIEBAIHZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogICAgIGFwcGVuZEl0ZW0oQ2xpcFBhdGg6OmNy
ZWF0ZShwYXRoLCB3aW5kUnVsZSkpOwogfQogCitJbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRz
KCkKK3sKKyAgICBXVEZMb2dBbHdheXMoIkdldHRpbmcgdGhlIGNsaXAgYm91bmRzIG5vdCB5ZXQg
c3VwcG9ydGVkIHdpdGggRGlzcGxheUxpc3Q6OlJlY29yZGVyLiIpOworICAgIHJldHVybiBJbnRS
ZWN0KC0yMDQ4LCAtMjA0OCwgNDA5NiwgNDA5Nik7Cit9CisKIHZvaWQgUmVjb3JkZXI6OmFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgLy8gRklY
TUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBv
ZiBvdXIgY2FjaGVkIGV4dGVudHMuCkBAIC0zNjUsNiArMzg1LDEyIEBAIHZvaWQgUmVjb3JkZXI6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgYXBw
ZW5kSXRlbShBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoZGV2aWNlU2NhbGVGYWN0b3Ip
KTsKIH0KIAorRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit7CisgICAgV1RG
TG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKSBpcyBub3Qg
eWV0IGNvbXBhdGlibGUgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7CisgICAgcmV0dXJu
IHJlY3Q7Cit9CisKIEl0ZW0mIFJlY29yZGVyOjphcHBlbmRJdGVtKFJlZjxJdGVtPiYmIGl0ZW0p
CiB7CiAgICAgd2lsbEFwcGVuZEl0ZW0oaXRlbS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuaAppbmRleCBmOWU0OWE1OTBiOWNiODEwOTljNDIzMGJhNzA4ZGU0MzI0
MGJkMTM2Li41OGRkMDdlOTg0MTQzZTJkODBkYmFlMjQ1M2VjM2FlN2U1ZDU0ODM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTU2LDYgKzU2LDkgQEAgcHVibGlj
OgogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0Lml0
ZW1Db3VudCgpOyB9CiAKIHByaXZhdGU6CisgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9
CisKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwogICAgIHZvaWQg
Y2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIApAQCAtODQsOSArODcsOSBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9p
bnQsIEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZHJhd0ltYWdlKElt
YWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0
b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICBJ
bWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSBvdmVycmlkZTsKKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOwogI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQogICAgIHZvaWQgZHJhd05hdGl2ZUltYWdl
KGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKSBvdmVycmlkZTsKICNlbmRpZgpA
QCAtMTA5LDYgKzExMiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpIG92ZXJyaWRlOwogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJy
aWRlOwpAQCAtMTE3LDkgKzEyMiwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92
ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlk
ZTsKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKICAgICAKICAgICB2b2lkIGFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwogCisgICAgRmxvYXRSZWN0IHJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3Vu
ZGluZ01vZGUpIG92ZXJyaWRlOworCiAgICAgSXRlbSYgYXBwZW5kSXRlbShSZWY8SXRlbT4mJik7
CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>