<?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>155566</bug_id>
          
          <creation_ts>2016-03-16 16:38:37 -0700</creation_ts>
          <short_desc>Make the ImageFrameDecoder notify the image observer when a frame image finishes decoding</short_desc>
          <delta_ts>2017-08-21 12:17:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>155546</dependson>
          <blocked>155322</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>beidson</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1175554</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-16 16:38:37 -0700</bug_when>
    <thetext>With the synchronous image, CachedImage::finishLoading() notifies the observers (which are the renderers) by calling CachedImage::notifyObservers(). With the asynchronous we need to do the same when a frame image finished decoding. Since ImageSource has a reference to an Image object, and the Image::m_observer is actually an instance of CachedImage, the calling sequence should be straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175568</commentid>
    <comment_count>1</comment_count>
      <attachid>274237</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-16 16:59:25 -0700</bug_when>
    <thetext>Created attachment 274237
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175596</commentid>
    <comment_count>2</comment_count>
      <attachid>274250</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-03-16 18:24:49 -0700</bug_when>
    <thetext>Created attachment 274250
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1175597</commentid>
    <comment_count>3</comment_count>
      <attachid>274250</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-16 18:27:23 -0700</bug_when>
    <thetext>Comment on attachment 274250
Patch for review

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

&gt; Source/WebCore/loader/cache/CachedImage.cpp:482
&gt; +void CachedImage::decodedImageChanged(const Image* image)

Can this be a const Image&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340428</commentid>
    <comment_count>4</comment_count>
      <attachid>274250</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-19 16:01:05 -0700</bug_when>
    <thetext>Comment on attachment 274250
Patch for review

r-, as this has been pending review for over a year now. It is near-impossible that this patch still applies to trunk and unlikely to still be relevant in its current form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340695</commentid>
    <comment_count>5</comment_count>
      <attachid>274250</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-08-21 12:17:25 -0700</bug_when>
    <thetext>Comment on attachment 274250
Patch for review

This bug was marked as s invalid. I was not aware that duplicate bugs can also appear as requesting-review bugs. I think removing the flags is more appropriate in this case.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274237</attachid>
            <date>2016-03-16 16:59:25 -0700</date>
            <delta_ts>2016-03-16 16:59:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155566-20160316165914.patch</filename>
            <type>text/plain</type>
            <size>195461</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FjOThmYzYxZmI4ZmUx
ZTAxYTY5MWNjNzg0OTM0NmU1YTkwNzI1MC4uYzFiYzRhNmE0ZmIyZDk1YTZkYWRjOWE4ZDRiODUw
OTY0M2FlNGY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0MyBAQAorMjAxNi0wMy0xNiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIE1ha2Ug
dGhlIEltYWdlRnJhbWVEZWNvZGVyIG5vdGlmaWVzIHRoZSBpbWFnZSBvYnNlcnZlciB3aGVuIGEg
ZnJhbWUgaW1hZ2UgZmluaXNoZXMgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTU2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbm90IGZvciByZXZpZXcuIEl0IGlz
IG9ubHkgZm9yIEVXUy4gSXQgY29udGFpbnMgdGhlIGZpeCBvZgorICAgICAgICB3ZWJraXQgYnVn
cyAxNTU0MTIsIDE1NTQyMiwgMTU1NDQ0LCAxNTU0NTYsIDE1NTQ5OCwgMTU1NTQ2IGFuZCAxNTU1
NjYuCisgICAgICAgIEEgc2VwYXJhdGUgcGF0Y2ggd2lsbCBiZSBwb3N0ZWQgZm9yIHJldmlldyBv
bmNlIHRoaXMgY29tYmluZWQgcGF0Y2gKKyAgICAgICAgcGFzc2VzIHRoZSBFV1MuIAorICAgICAg
ICAKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2lu
LmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
R1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VTaXplRm9yUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmRlY29kZWRJbWFnZUNoYW5nZWQpOgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6YWRkSW1hZ2VUb0NhY2hl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0SG90U3BvdCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZGF0YUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmlzU29saWRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bWF5RmlsbFdpdGhTb2xpZENvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZl
RnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkaWRE
ZWNvZGVQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
Ojp1cGRhdGVTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpm
cmFtZUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc1Np
emVBdmFpbGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmVu
c3VyZUZyYW1lSXNDYWNoZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25vd25U
b0JlT3BhcXVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZU9yaWVudGF0aW9uQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6cmVwZXRpdGlvbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURh
dGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpzb2xp
ZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjp+SW1hZ2VGcmFtZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVEYXRhOjpjYWNoZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhQnVm
ZmVyOjpJbWFnZUZyYW1lRGF0YUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
RGF0YUJ1ZmZlcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0
YUJ1ZmZlcjo6aXNGcmFtZVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRh
QnVmZmVyOjpmcmFtZXNCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YUJ1
ZmZlcjo6cGFydGlhbEZyYW1lc0J5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVE
YXRhQnVmZmVyOjpjbGVhckZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0
YUJ1ZmZlcjo6Y2xlYXJQYXJ0aWFsRnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUZyYW1lRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVE
YXRhOjpoYXNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YUJ1ZmZlcjo6
c2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyRnJhbWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjbGVhclBhcnRpYWxGcmFtZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmVuc3VyZURlY29kZXJJc0NyZWF0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmRlY29kZWRTaXplSW5jcmVtZW50ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmRlY29kZWRTaXplRGVjcmVtZW50ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmRpZERlY29kZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OmRlY29kZWRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6ZGVjb2RlZEltYWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6Y2FsY3VsYXRlTWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6Y2FjaGVNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
c3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpjYWNoZUZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJh
bWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxl
dGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUhhc0FscGhh
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6YWxsb3dTdWJzYW1wbGlu
Z09mRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUR1
cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OnNldEFsbG93U3Vic2FtcGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemVS
ZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6Om1h
eGltdW1TdWJzYW1wbGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpm
cmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjptYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldE1heFBpeGVsc1Bl
ckRlY29kZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmF0
aXZlSW1hZ2VQdHIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50
c1RvSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdl
Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lRGF0YTo6Y2xlYXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0
YTo6c29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5l
TWluaW11bVN1YnNhbXBsaW5nTGV2ZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lRGF0YTo6Y2xlYXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
RGF0YTo6c29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFw
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZlbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUF0SW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNE
Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFj
dG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50VG9DYW52YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bh
dHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjppbWFnZVNvdXJjZU9wdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRC
dWZmZXJHZXRCeXRlc0F0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkQnVmZmVy
UmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2Fs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJt
aW5lUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZpbGVuYW1l
RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpob3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVTaXpl
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpvcmllbnRhdGlvbkF0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmFsbG93U3Vic2FtcGxpbmdP
ZkZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSGFz
QWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRl
c0F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUlt
YWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6fkltYWdlRGVjb2Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzQXN5bmNEZWNvZGluZyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VGcmFtZURlY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEZWNvZGVyOjpJbWFnZUZyYW1lRGVjb2Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGVjb2Rlcjo6ZGVjb2RlUXVldWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURlY29kZXI6OmlzQXN5bmNEZWNvZGluZ05lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lRGVjb2Rlcjo6c3RhcnRBc3luY0RlY29kaW5nSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lRGVjb2Rlcjo6ZW5xdWV1ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURlY29kZXI6OmNhY2hlQ3VycmVudEZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUZyYW1lRGVjb2Rlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNvbklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6Oklj
b246Okljb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorCisyMDE2LTAzLTE2ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgQWRkIHRoZSBhc3luY2hyb25v
dXMgaW1hZ2UgZGVjb2RpbmcgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTU1NTQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgbiBjYXNlIG9mIGxhcmdlIGltYWdlcywgdGhlIGltYWdlIGRlY29kaW5n
IHdpbGwgc3RhcnQgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICAgaGF2aW5nIHRoZSBzaXplIG9m
IHRoZSBpbWFnZS4gQSBuZXcgY2xhc3MgbmFtZWQgSW1hZ2VGcmFtZURlY29kZXIgd2hpY2gKKyAg
ICAgICAgaW5oZXJpdHMgZm9ybSBJbWFnZURlY29kZXIgd2lsbCBiZSBhZGRlZCB0byBtYW5hZ2Ug
dGhlIGZvcmsuIEluCisgICAgICAgIEltYWdlRnJhbWVEZWNvZGVyOjogc2V0RGF0YSgpIGFuZCBh
ZnRlciBrbm93aW5nIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpcworICAgICAgICBhdmFpbGFibGUs
IGEgaGVyZXRpYyB3aWxsIGJlIGNoZWNrZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYW4gYXN5bmNo
cm9ub3VzCisgICAgICAgIGltYWdlIGRlY29kaW5nIGlzIG5lZWRlZCBvciBub3QuICBJZiBpdCBp
cyBuZWVkZWQsIGEgc2VwYXJhdGUgdGhyZWFkIHdpbGwKKyAgICAgICAgYmUgY3JlYXRlZCB0byBk
byB0aGUgZGVjb2Rpbmcgc3VjaCB0aGF0IHRoZSBtYWluIHRocmVhZCBpcyBub3QgYmxvY2tlZC4K
KyAgICAgICAgSW4gdGhlIG1haW4gdGhyZWFkIHNpZGUsIEltYWdlU291cmNlOjpmcmFtZUF0SW5k
ZXgoKSB3aWxsIGNoZWNrIHdoZXRoZXIKKyAgICAgICAgdGhlIEltYWdlRGVjb2RlciBpcyBpbiBh
c3luY2hyb25vdXMgZGVjb2RpbmcgbW9kZSBvciBub3QuIElmIGl0IGlzLCBubworICAgICAgICBj
YWNoaW5nIHdpbGwgYmUgY2FycmllZCBvdXQgb24gdGhlIG1haW4gdGhyZWFkLiBJbWFnZVNvdXJj
ZTo6ZnJhbWVBdEluZGV4KCksCisgICAgICAgIHdpbGwgcmV0dXJuIHdoYXRldmVyIGlzIHN0b3Jl
ZCBpbiB0aGUgSW1hZ2VGcmFlRGF0YUJ1ZmZlcltpbmRleF0gcmVnYXJkbGVzcworICAgICAgICB3
aGV0aGVyIGl0IGlzIGNvbXBsZXRlIG9yIG5vdC4KKworICAgICAgICBUaGUgcGxhbiBvZiB0aGUg
Y2hhbmdlIGlzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIC0tIEFkZCBhIG5ldyBjbGFzcyBuYW1l
ZCBJbWFnZUZyYW1lRGVjb2RlciB3aGljaCBpbmhlcml0cyBJbWFnZURlY29kZXIuCisgICAgICAg
IC0tIEluIEltYWdlU291cmNlOjplbnN1cmVEZWNvZGVySXNDcmVhdGVkKCksIGNyZWF0ZSBhbiBp
bnN0YW5jZSBvZgorICAgICAgICAgICBJbWFnZUZyYW1lRGVjb2RlciBpZiBVU0UoQ0cpLgorICAg
ICAgICAtLSBJbiBJbWFnZVNvdXJjZTo6ZnJhbWVBdEluZGV4KCkgYW5kIGlmIFVTRShDRyksIGNo
ZWNrIGlmIHRoZSBkZWNvZGVyCisgICAgICAgICAgIGlzQXN5bmNEZWNvZGluZygpLiBBbmQgaWYg
eWVzLCBnZXQgdGhlIGNhY2hlZCB2YWx1ZSByZWdhcmRsZXNzIHdoZXRoZXIKKyAgICAgICAgICAg
aXQgaXMgY29tcGxldGUgb3Igbm90LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEZpeCBX
aW5kb3dzIGJ1aWxkIGZyb20gdGhlIGxhc3QgcGF0Y2guIEltYWdlU291cmNlLmNwcAorICAgICAg
ICBpcyBuZWVkZWQgYmVjYXVzZSBpdCByZXBsYWNlcyBJbWFnZVNvdXJjZUNHLmNwcCB3aGljaCB3
YXMgZGVsZXRlZC4KKyAgICAgICAgCisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToK
KyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6IEFkZCB0aGUgSW1hZ2VGcmFtZURlY29kZXIgZmlsZXMuCisgICAg
ICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjp+SW1hZ2VGcmFtZURhdGEpOiBDbGVhciB0
aGUgaW1hZ2UgbWVtYmVyIG9ubHkuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6OmNsZWFyKTogTW92ZSBpdCBmcm9tIHRoZSBwbGF0Zm9ybSBkaXJlY3Rvcnkgc2lu
Y2UKKyAgICAgICAgbW9zdCBvZiBpdCBpcyB0aGUgc2FtZS4gTWFrZSBpdCBzaW1wbGVyIGFuZCBl
bnN1cmUgd2UgYXJlIHJlc2V0dGluZyB0aGUgCisgICAgICAgIGNsYXNzIG1lbWJlciBjb3JyZWN0
bHkuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN0YXR1cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YUJ1ZmZlcjo6ZnJhbWVz
Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGFCdWZmZXI6OnBhcnRpYWxG
cmFtZXNCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YUJ1ZmZlcjo6Y2xl
YXJGcmFtZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIFRoZXJlIGlzIG5vIHJlYWwgbmVlZCBmb3IgdGhlIEltYWdlRnJhbWVEYXRhOjpz
dGF0dXMoKS4gQXMgbG9uZyBhcyBtX2ZyYW1lQnl0ZXMKKyAgICAgICAgaXMgbm9uZS16ZXJvIGlm
IGFuZCBvbmx5IGlmIG1faW1hZ2UgaXMgbm90IG51bGwsIHdlIGNhbiBhZGQgbV9mcmFtZUJ5dGVz
CisgICAgICAgIHNhZmVseSB3aXRob3V0IGhhdmluZyB0byBjaGVjayB0aGUgdmFsdWUgb2YgbV9p
bWFnZS4gRm9yIGtub3dpbmcgaXQgYSBmcmFtZQorICAgICAgICBpcyBwYXJ0aWFsbHkgbG9hZGVk
LCBtX2lzQ29tcGxldGUgY2FuIGJlIHVzZWQgZm9yIHRoYXQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZCk6CisgICAgICAgIENyZWF0ZSBhbiBpbnN0YW5jZSBm
b3IgSW1hZ2VGcmFtZURlY29kZXIgaWYgVVNFKENHKSAmJiBPUyhVTklYKS4KKyAgICAgICAgCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVBdEluZGV4KToKKyAgICAgICAgSWYg
dGhlIGRlY29kZXIgaXMgcnVubmluZyBhc3luYyBkZWNvZGluZywgcmV0dXJuIHRoZSBjYWNoZWQg
ZnJhbWUuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
Lmg6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcElt
YWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFySW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFySW1hZ2UpOgorICAgICAgICBD
bGVhciB0aGUgbV9pbWFnZSBvZiBhbiBJbWFnZUZyYW1lRGF0YSBvYmplY3QuCisgICAgICAgIAor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICBBZGQgYSBoZWxwZXIgZnVuY3Rpb24g
Zm9yIHNldHRpbmcgdGhlIGRlY29kZXIgZGF0YS4gVGhpcyBoZWxwZXIgZnVuY3Rpb24KKyAgICAg
ICAgaXMgZ29pbmcgdG8gYmUgdXNlZCBieSB0aGUgZGVyaXZlZCBjYWxsIEltYWdlRnJhbWVEZWNv
ZGVyLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUZyYW1l
RGVjb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURlY29kZXI6
OkltYWdlRnJhbWVEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEZWNvZGVy
OjpkZWNvZGVRdWV1ZSk6IENyZWF0ZXMgYSB3b3JraW5nIHF1ZXVlIGZvcgorICAgICAgICBpbWFn
ZSBkZWNvZGluZy4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGVjb2Rl
cjo6c2V0RGF0YSk6IENyZWF0ZXMgYSBkZWNvZGluZyB0aHJlYWQgaWYgbmVlZGVkLgorICAgICAg
ICBFbnF1ZXVlIHRoZSBkYXRhIGlmIGEgdGhyZWFkIGlzIHJ1bm5pbmcuIFNldHMgdGhlIGRhdGEg
aWYgc2l6ZSBpcyBzdGlsbAorICAgICAgICB1bmF2YWlsYWJsZSBvciBubyBkZWNvZGluZyB0aHJl
YWQgd2lsbCBiZSBuZWVkZWQuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZURlY29kZXI6OmlzQXN5bmNEZWNvZGluZ05lZWRlZCk6IERlY2lkZXMgd2hldGhlciBhbgorICAg
ICAgICBhc3luY2hyb25vdXMgaW1hZ2UgZGVjb2RpbmcgaXMgbmVlZGVkIG9yIG5vdC4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGVjb2Rlcjo6c3RhcnRBc3luY0RlY29k
aW5nSWZOZWVkZWQpOiBTdGFydCB0aGUgYXN5bmNocm9ub3VzIAorICAgICAgICBpbWFnZSBkZWNv
ZGluZyB0aHJlYWQgaWYgbmVlZGVkLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEZWNvZGVyOjpkZWNvZGUpOiBJbmNsdWRlcyB0aGUgY29kZSBjaHVuayB3aGljaCBydW5z
IG9uCisgICAgICAgIGEgc2VwYXJhdGUgdGhyZWFkLiBJdCBpbXBsZW1lbnRzIGEgcHJvZHVjZXIt
Y29uc3VtZXIgcHJvYmxlbS4gSXQgY29uc3VtZXMgCisgICAgICAgIHRoZSBkYXRhIHdoaWNoIGlz
IHByb2R1Y2VkIGJ5IEltYWdlRnJhbWVEZWNvZGVyOjplbnF1ZXVlRGF0YSgpLiBJdCBkb2VzIG5v
dAorICAgICAgICB1c2UgbG9ja3MgYnV0IGl0IG9ubHkgdXNlcyBzY2hlZF95aWVsZCgpIHdoZW4g
dGhlIGJ1ZmZlciBpcyBlbXB0eS4gSXQgZG9lcworICAgICAgICBpbmNyZW1lbnQgbV9jb25zdW1l
Q291bnQgd2hlbiBhIGRhdGEgaXRlbSBpcyBjb25zdW1lZC4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGVjb2Rlcjo6ZW5xdWV1ZURhdGEpOiBJdCBlbnF1ZXVlcyBhIGRh
dGEgaXRlbSB0byBiZQorICAgICAgICBjb25zdW1lZCBieSB0aGUgZGVjb2RpbmcgdGhyZWFkLiBJ
dCBkb2VzIGRlY3JlbWVudCBtX3Byb2R1Y2VDb3VudCB3aGVuIGEKKyAgICAgICAgZGF0YSBpdGVt
IGlzIHByb2R1Y2VkLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEZWNv
ZGVyOjpjYWNoZUN1cnJlbnRGcmFtZSk6IEFmdGVyIGNhbGxpbmcgSW1hZ2VEZWNvZGVyCisgICAg
ICAgIDo6c2V0RGF0YSgpLCB0aGUgbGFzdCBpbmNvbXBsZXRlIGZyYW1lIGlzIHJlY2FjaGVkIG9y
IGEgbmV3IGZyYW1lIGlzIGNhY2hlZAorICAgICAgICBmb3IgdGhlIGZpcnN0IHRpbWUuIE5vdGlm
eWluZyB0aGUgaW1hZ2Ugb2JzZXJ2ZXIgYnkgdGhlIGRlY29kaW5nIHNpemUgY2hhbmdlCisgICAg
ICAgIGhhcyB0byBydW4gb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAgICAKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUZyYW1lRGVjb2Rlci5oOiBBZGRlZC4KKworMjAxNi0w
My0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAg
ICAgIE1vdmUgY2FjaGluZyB0aGUgSW1hZ2VGcmFtZURhdGEgZnJvbSBCaXRtYXBJbWFnZSB0byBJ
bWFnZVNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU1NDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW92aW5nIHRoZSBJbWFnZUZyYW1lRGF0YSBjYWNoaW5nIGZyb20gQml0bWFwSW1hZ2UgdG8g
SW1hZ2VTb3VyY2Ugd2lsbCBtYWtlCisgICAgICAgIGl0IGVhc3kgdG8gZm9yayB0aGUgaW1hZ2Ug
ZGVjb2RpbmcgdG8gYW4gYXN5bmNocm9ub3VzIG1vZGUuIFRoaXMgY2FjaGUgd2lsbAorICAgICAg
ICBiZSBwYXNzZWQgdG8gdGhlIEltYWdlRGVjb2RlciBjbGFzcyB3aGljaCB3aWxsIGZpbGwgaXQg
b24gYSBzZXBhcmF0ZSB0aHJlYWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xs
b3dpbmc6CisgICAgICAgIAorICAgICAgICAtLSBBZGQgYSBuZXcgY2xhc3MgbmFtZWQgSW1hZ2VG
cmFtZURhdGFCdWZmZXIgZm9yIEltYWdlRnJhbWVEYXRhIGNhY2hpbmcuCisgICAgICAgICAgIEl0
IGlzIGEgd3JhcHBlciBmb3IgYSB2ZWN0b3Igb2JqZWN0IGFuZCBvdGhlciB1dGlsaXR5IGZ1bmN0
aW9ucy4KKyAgICAgICAgCisgICAgICAgIC0tIE1vdmUgbm90aWZ5aW5nIHRoZSBpbWFnZSBvYnNl
cnZlciBhYm91dCB0aGUgZGVjb2Rpbmcgc2l6ZSBjaGFuZ2UgZnJvbQorICAgICAgICAgICBCaXRt
YXBJbWFnZSB0byBJbWFnZVNvdXJjZS4gVGhpcyBpcyBuYXR1cmFsIHNpbmNlIHRoZSBJbWFnZVNv
dXJjZSBtYW5hZ2VzCisgICAgICAgICAgIGFsbCB0aGUgZGVjb2RpbmcgZm9yIGltYWdlIG1ldGFk
YXRhLCBmcmFtZSBtZXRhZGF0YSBhbmQgZnJhbWUgaW1hZ2UuCisgICAgICAgICAgIAorICAgICAg
ICAtLSBNb3ZlIGFsbCB0aGUgaW1hZ2UgbWV0YWRhdGEgcXVlcmllcyBhbmQgY2FjaGluZyBmcm9t
IEJpdG1hcEltYWdlIHRvCisgICAgICAgICAgIEltYWdlU291cmNlLiBUaGlzIGlzIGFsc28gbmF0
dXJhbCBzaW5jZSB0aGUgaW1hZ2UgbWV0YWRhdGEgYXJlIGNvbnN0YW50cworICAgICAgICAgICBh
bmQgb25jZSB0aGUgaXNTaXplQXZhaWxhYmxlKCksIHRoZXkgY2FuIGFsbCBiZSBmZXRjaGVkIGFu
ZCBjYWNoZWQuCisgICAgICAgICAgIAorICAgICAgICAtLSBNb3ZlIGNhY2hpbmcgYW5kIHVuY2Fj
aGluZyB0aGUgY29tcGxldGVkIGFuZCBwYXJ0aWFsbHkgZGVjb2RlZCBmcmFtZXMKKyAgICAgICAg
ICAgZnJvbSBCaXRtYXBJbWFnZSB0byBJbWFnZVNvdXJjZSBhbmQgSW1hZ2VGcmFtZURhdGFCdWZm
ZXIuCisgICAgICAgICAgIAorICAgICAgICAtLSBDYWNoZSB0aGUgaW1hZ2UgZGF0YSBpbiB0aGUg
SW1hZ2VTb3VyY2Ugb25jZSBpc1NpemVBdmFpbGFibGUoKS4gQW5kIG1ha2UKKyAgICAgICAgICAg
YWxsIHRoZSBtZXRhZGF0YSBxdWVyaWVzIHJldHVybiBhbHdheXMgdGhlIGNhY2hlZCB2YWx1ZXMu
CisgICAgICAgICAgIAorICAgICAgICAtLSBNYWtlIGFsbCB0aGUgZnJhbWUgbWV0YWRhdGEgcXVl
cmllcyBnbyB0aHJvdWdoIHRoZSBjYWNoZWQgSW1hZ2VGcmFtZURhdGEuCisgICAgICAgICAgIFRo
aXMgd29ya3MgbmljZWx5IHdpdGggdGhlIGNhc2Ugb2YgYW4gSW1hZ2VTb3VyY2UgcmVwcmVzZW50
aW5nIGEgZGVjb2RlZAorICAgICAgICAgICBpbWFnZSB3aXRoIG5vIEltYWdlRGVjb2Rlci4gSW4g
dGhpcyBjYXNlLCBhbGwgdGhlIGltYWdlIGFuZCBmcmFtZSBtZXRhZGF0YQorICAgICAgICAgICBh
cmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBkZWNvZGVkIGltYWdlIGFuZCBjYWNoZWQgaW4gdGhlIElt
YWdlU291cmNlIGFuZAorICAgICAgICAgICBpbiB0aGUgSW1hZ2VGcmFtZURhdGEuCisgICAgICAg
IAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpz
aXplUmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpnZXRIb3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHVtcCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6aGF2ZUZyYW1lQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6ZGlkRGVjb2RlUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6dXBkYXRlU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6aXNTaXplQXZhaWxhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxw
aGFBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjdXJy
ZW50RnJhbWVLbm93blRvQmVPcGFxdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRpb25BdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpyZXBldGl0aW9uQ291bnQpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VGcmFtZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6OkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjp+
SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNhY2hl
TWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGFCdWZmZXI6OkltYWdlRnJhbWVEYXRhQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhQnVmZmVyOjpvcGVyYXRvcltdKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhQnVmZmVyOjppc0ZyYW1lVmFsaWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGFCdWZmZXI6OmZyYW1lc0J5dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhQnVmZmVyOjpwYXJ0aWFsRnJhbWVzQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGFCdWZmZXI6OmNsZWFyRnJhbWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhQnVmZmVyOjpjbGVhclBhcnRpYWxGcmFt
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZURhdGFCdWZmZXI6OnNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJbWFn
ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNsZWFyRnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpjbGVhclBhcnRpYWxGcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OmRlY29kZWRTaXplSW5jcmVtZW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OmRlY29kZWRTaXplRGVjcmVtZW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OmRpZERlY29kZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmRlY29kZWRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6Y2FsY3VsYXRlTWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6Y2FjaGVNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Z2V0
SG90U3BvdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFn
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNhY2hlRnJhbWVBdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzZXRBbGxvd1N1YnNhbXBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjptYXhpbXVt
U3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6bWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXRNYXhQaXhlbHNQZXJEZWNv
ZGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Jp
dG1hcEltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1h
cEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVt
U3Vic2FtcGxpbmdMZXZlbCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUlt
YWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVk
RnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXRlcm1pbmVN
aW5pbXVtU3Vic2FtcGxpbmdMZXZlbCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6aG90U3BvdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmdldEhvdFNwb3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJh
Y3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorCisyMDE2LTAzLTE0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgTWVyZ2UgQ0cg
SW1hZ2VTb3VyY2UgYW5kIG5vbiBDRyBJbWFnZVNvdXJjZSBpbXBsZW1lbnRhdGlvbiBpbiBvbmUg
ZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1
NDU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92
aW5nIHRoZSBJbWFnZUZyYW1lRGF0YSBjYWNoaW5nIHRvIEltYWdlU291cmNlIGlzIGhhcmQgd2l0
aCB0d28gc2VwYXJhdGUKKyAgICAgICAgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgc2FtZSBjbGFz
cy4gSW1hZ2VTb3VyY2UuY3BwIGFuZCBJbWFnZVNvdXJjZUNHLmNwcAorICAgICAgICBoYXZlIGEg
bG90IG9mIGR1cGxpY2F0ZWQgY29kZS4gU28gbWVyZ2luZyB0aGVtIGluIG9uZSBmaWxlIHdpbGwg
cmVtb3ZlIHRoZQorICAgICAgICBkdXBsaWNhdGVkIGNvZGUgYW5kIGl0IGlzIGEgc3RlcCBmb3J3
YXJkIGZvciB0aGUgYXN5bmNocm9ub3VzIGltYWdlIGRlY29kaW5nLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAg
KiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6ZW5zdXJlRGVjb2RlcklzQ3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6Z2V0SG90U3BvdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjph
bGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFt
ZVNpemVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXpl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVB
dEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjptYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldE1heFBpeGVsc1BlckRlY29k
ZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgICogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6IERlbGV0ZWQuCisKKzIwMTYtMDMtMTQgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBSZW5hbWUg
RnJhbWVEYXRhIHRvIEltYWdlRnJhbWVEYXRhIGFuZCBtb3ZlIGl0IHRvIGEgc2VwYXJhdGUgZmls
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NDQ0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHBs
YW4gaXMgdG8gaGF2ZSBjYWNoaW5nIHRoZSBJbWFnZUZyYW1lRGF0YSBiZSBkb25lIGJ5IHRoZSBJ
bWFnZVNvdXJjZS4KKyAgICAgICAgU28gbW92ZSB0aGUgSW1hZ2VGcmFtZURhdGEgdG8gYSBzZXBh
cmF0ZSBmaWxlIHNvIGl0IGNhbiBiZSByZWZlcmVuY2VkIGJ5CisgICAgICAgIEltYWdlU291cmNl
IGFuZCBCaXRtYXBJbWFnZS4gQWxzbyBkbyB0aGUgZm9sbG93aW5nIGNsZWFudXA6CisgICAgICAg
IDEuIENhbGN1bGF0ZSB0aGUgaW1hZ2Ugc29saWRDb2xvcigpIGluIHRoZSBJbWFnZUZyYW1lRGF0
YSB3aGVuIGl0IGlzIG5lZWRlZC4KKyAgICAgICAgMi4gSGF2ZSBhIHNpbmdsZSBmdW5jdGlvbiBC
aXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkuCisgICAgICAgIDMuIEdldCByaWQgb2Yg
Qml0bWFwSW1hZ2U6Om1faGFzVW5pZm9ybUZyYW1lU2l6ZSBzaW5jZSBpdCBpcyBub3QgdXNlZC4K
KyAgICAgICAgNC4gUmVwbGFjZSBCaXRtYXBJbWFnZSBtX2lzU29saWRDb2xvciBhbmQgbV9jaGVj
a2VkRm9yU29saWRDb2xvciBieSBhIHRyaXN0YXRlIAorICAgICAgICAgICBtZW1iZXIgbmFtZWQg
bV9zb2xpZENvbG9yVmFsdWUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAg
ICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3Rp
ZnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnVwZGF0ZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJh
bWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpm
cmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc1Nv
bGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om1heUZpbGxXaXRoU29s
aWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c29saWRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHVtcCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJh
bWVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0
YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpzb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVE
YXRhOjp+SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6
OnN0YXR1cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWly
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lRGF0YTo6c29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0
YTo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1h
cEltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OkltYWdlRnJh
bWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c29saWRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJh
bWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9y
KTogRGVsZXRlZC4KKworMjAxNi0wMy0xMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUsY29tPgorCisgICAgICAgIENyZWF0ZSBhIENHIEltYWdlRGVjb2RlciBjbGFzcyBp
bnN0ZWFkIG9mIGRlZmluaW5nIGl0IGFzIENHSW1hZ2VTb3VyY2VSZWYgCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0MjIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBpbWFnZSBkZWNvZGlu
ZyBjb2RlIGZyb20gSW1hZ2VTb3VyY2VDRy5jcHAgb3V0IHRvIGEgbmV3IGNsYXNzIG5hbWVkCisg
ICAgICAgIEltYWdlRGVjb2Rlci4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBzcGxpdCBpcyB0byBoYXZl
IHRoZSBDRyBJbWFnZVNvdXJjZSBzaW1pbGFyCisgICAgICAgIHRvIHRoZSBub25lIENHIEltYWdl
U291cmNlIHdoZXJlIHRoZXJlIGlzIGEgc2VwYXJhdGUgY2xhc3MgZm9yIGRlY29kaW5nLiBUaGUK
KyAgICAgICAgcGxhbiBpcyB0byBtZXJnZSB0aGUgSW1hZ2VTb3VyY2UuY3BwIGFuZCBJbWFnZVNv
dXJjZUNHLmNwcCBpbiBvbmUgZmlsZSBzbworICAgICAgICBkZWNpZGluZyB3aGV0aGVyIHRoZSBk
ZWNvZGluZyBzaG91bGQgaGFwcGVuIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkKKyAg
ICAgICAgY2FuIGhhcHBlbiBpbiBvbmUgcGxhY2UgYW5kIHRoZSBjYWNoaW5nIG9mIHRoZSBmcmFt
ZXMgY2FuIGJlIGhhbmRsZWQgYnkgdGhlCisgICAgICAgIEltYWdlU291cmNlIGFzIHdlbGwuCisK
KyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFj
LmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRlcmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
dXBkYXRlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2l6ZVJlc3BlY3Rp
bmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFn
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmR1bXApOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemVSZXNw
ZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1l
U2l6ZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZURlY29kZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUltYWdlU291cmNlT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjppbWFnZVNvdXJjZU9wdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9uKTsK
KyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZEJ1ZmZlclJlbGVhc2UpOworICAgICAgICAoV2ViQ29y
ZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnN1
YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpnZXRIb3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZnJhbWVTaXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpvcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VE
ZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6fklt
YWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y2xlYXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmVuc3VyZURlY29kZXJJc0NyZWF0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
U291cmNlOjphbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2l6ZVJlc3BlY3Rp
bmdPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Z2V0SG90U3Bv
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpzaGFy
ZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
c2hhcmVkQnVmZmVyUmVsZWFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6SW1hZ2VTb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1h
Z2VTb3VyY2VPcHRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmltYWdlU291cmNl
T3B0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aW5pdGlh
bGl6ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3JpZW50YXRpb25Gcm9tUHJvcGVy
dGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJh
bWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXRlcm1pbmVNaW5pbXVtU3Vic2FtcGxpbmdMZXZl
bCk6CisKKzIwMTYtMDMtMTMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxl
LGNvbT4KKworICAgICAgICBDaGFuZ2UgTmF0aXZlSW1hZ2VQdHIgZm9yIENHIHRvIGJlIFJldGFp
blB0cjxDR0ltYWdlUmVmPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1NDEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSGF2aW5nIE5hdGl2ZUltYWdlUHRyIGFzIGEgcmF3IHBvaW50ZXIgbWFrZXMgbWFu
YWdpbmcgdGhlIGxpZmUgY3ljbGUgb2YKKyAgICAgICAgdGhlIENHSW1hZ2VSZWYgaGFyZC4gQSBs
b3Qgb2Ygd29ya3Mgd2FzIGRvbmUgdG8gbWFrZSBzdXJlIHRoZSBDRyBwb2ludGVyCisgICAgICAg
IGlzIG1haW50YWluZWQgY29ycmVjdGx5LiBJdCB3YXMgYWxzbyBub3QgcG9zc2libGUgdG8gbW92
ZSBhIEZyYW1lRGF0YSBzaW5jZQorICAgICAgICBjYWxsaW5nIHRoZSBkZXN0cnVjdG9yIHdhcyBy
ZWxlYXNpbmcgdGhlIENHSW1hZ2VSZWYuCisKKyAgICAgICAgSSBhbSBnb2luZyB0byBmb2xsb3cg
dGhpcyBuYW1pbmcgY29udmVudGlvbjoKKyAgICAgICAgMS4gQW4gSW1hZ2Ugb2JqZWN0IGNhbiBo
YXZlIG9uZSBvciBtb3JlIEZyYW1lRGF0YS4gQSBGcmFtZURhdGEgY2FuIGJlIG5hbWVkCisgICAg
ICAgICAgIGZvciBzaG9ydG5lc3MgYXMgImZyYW1lIiwgIm1fZnJhbWVzIiwgZXRjLgorICAgICAg
ICAyLiBBIEZyYW1lRGF0YSBjYW4gaGF2ZSB6ZXJvIG9yIG9uZSBOYXRpdmVJbWFnZVB0ci4gQSBO
YXRpdmVJbWFnZVB0ciBjYW4KKyAgICAgICAgICAgYmUgbmFtZWQgYXMgImltYWdlIiwgIm1faW1h
Z2UiLCBldGMuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5z
dXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJ
bWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJh
bWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6Y3JlYXRlRnJhbWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUlt
YWdlUHRyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0lt
YWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0
YTo6Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0JpdG1hcEltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZik6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxl
ZEZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjb3B5
VW5zY2FsZWRGcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpjcmVhdGVGcmFtZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ljb25JT1MubW06CisgICAgICAgIChXZWJDb3JlOjpJY29u
OjpJY29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKToKKwogMjAx
Ni0wMy0xMiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtGb3Jt
czogZm9jdXNdIGZvY3VzIHJpbmdzIGFyb3VuZCB0ZXh0IGZpZWxkcyBkbyBub3QgZm9sbG93IGNv
bnRvdXIgKGJvcmRlci1yYWRpdXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDZkYzU4YjI3OGQ4
YzBhYzAzZTk3MDQyMWUxMWU0MmI5NTlhNjg2ZDYuLjI0MTk2YTUzNjUzODFlMTgwYzhkOTM1ZTU5
ZTg5ZGRjNWQ5M2FkZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjE4LDcgKzIyMTgsOSBA
QCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNPVlRUQ3VlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9p
bnQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbnRTaXplLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5k
ZXggZTUyMDljYjIwY2YwMzM4N2EyNTI2NDNkZjRlMGIyMTUxNDkyMDRmNy4uZGZlM2ZhMTcyZDRk
NjQ5ZDRiMzU5ODk2NmJhZjBlZWQ1ZDYxOTA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlCkBAIC03MSw3ICs3MSw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUZyYW1lRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCBlY2UyYzUzMDkxYTU2Y2Q5MzMwNmU1YmFiZmE0ODg2NjM0
ZjI1OWY5Li5hZDdjN2Y0Y2MyNzY2NGU1Y2U1YjUxODY4YWM5NzQyYTc4ZDk5YzgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTIzLDYgKzEyMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5jcHAKICAgICBw
bGF0Zm9ybS9nbGliL0tleWVkRW5jb2RlckdsaWIuY3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUZyYW1lRGF0YS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvV09GRkZpbGVGb3JtYXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IGU2Yzg3YjJkN2U5NDFlMzQ5YTY3YWE2YzY4M2FhMzRkYzYwYWRjMWYuLjk0OTg0OTUzZDM5
YThiNWU3ZWJiMGNlOWI1MjIyMmY4NTJjM2YyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC05NCw2ICs5NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1l
RGF0YS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9XT0ZGRmlsZUZvcm1hdC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFr
ZQppbmRleCA4MzViOWFhMjI0YWE5ZWFhZWUwNDYyMzM5N2U5OTAxNmU5ZjdlZWJmLi5kMDBlMmQ3
YmJmNTVkZWNjYmM0MjZmNzE0MjU0OTUxM2U3YTE0NjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5j
bWFrZQpAQCAtNDAwLDcgKzQwMCw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUZyYW1lRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAzOGEwMjhjNWI4OTFiY2IxZmRkZTJkZGViMmEz
MWJmODEzZDUzOGNkLi4yNDhjODlhMGIwNTdkMWU1ZDZlNDQxZWViYzRjMzhmZjgyNGYyMjFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTM5LDYgKzM5LDcgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRl
eHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwMzA3YmEzOGZmMGYz
YTRjNDcxYjlkNDI5MTQ2MTYyYTk1OWVlNzY2Li5lZWYzMDA1MWI1OGI5ZDMzZTA5YTRmYzhkN2Ew
MjIwNzFlNDZkOGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yMjkxLDYgKzIyOTEsMTIgQEAKIAkJNTNFRjc2NkMxNjUzMTk5
NDAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VGNzY2QTE2NTMwQTYxMDA0Q0JF
NDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
ICovOyB9OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NTlCQjg3OTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1h
Z2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU1OUJCODc3MUM5NjQ2NTgwMDI0MTNDRCAvKiBJbWFnZURlY29kZXIuY3BwICovOyB9Owor
CQk1NTlCQjg3QTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTlCQjg3ODFDOTY0NjU4MDAyNDEz
Q0QgLyogSW1hZ2VEZWNvZGVyLmggKi87IH07CisJCTU1OUJCODdEMUM5NkIyQzgwMDI0MTNDRCAv
KiBJbWFnZUZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTlCQjg3QjFDOTZCMkM4MDAyNDEzQ0QgLyogSW1hZ2VGcmFtZURhdGEuY3Bw
ICovOyB9OworCQk1NTlCQjg3RTFDOTZCMkM5MDAyNDEzQ0QgLyogSW1hZ2VGcmFtZURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OUJCODdDMUM5
NkIyQzgwMDI0MTNDRCAvKiBJbWFnZUZyYW1lRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU1OUJCODgxMUM5OEJCNzYwMDI0MTNDRCAvKiBJ
bWFnZUZyYW1lRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NTlCQjg3RjFDOThCQjc2MDAyNDEzQ0QgLyogSW1hZ2VGcmFtZURlY29kZXIu
Y3BwICovOyB9OworCQk1NTlCQjg4MjFDOThCQjc3MDAyNDEzQ0QgLyogSW1hZ2VGcmFtZURlY29k
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1OUJC
ODgwMUM5OEJCNzYwMDI0MTNDRCAvKiBJbWFnZUZyYW1lRGVjb2Rlci5oICovOyB9OwogCQk1NzJB
N0YyMTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAv
KiBTaW11bGF0ZWRDbGljay5oICovOyB9OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAq
LzsgfTsKIAkJNTgwMzcxNjExQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MDM3MTVGMUE2NkYwMEEw
MEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgKi87IH07CkBAIC01MDAyLDcgKzUwMDgsNiBAQAogCQlC
Mjc1MzU1QTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UmVjdENHLmNwcCAqLzsgfTsKIAkJQjI3NTM1NUIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0U2l6ZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi87IH07
CiAJCUIyNzUzNTVFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTMwMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbWFnZUNHLmNwcCAqLzsgfTsKLQkJQjI3NTM1NUYwQjA1MzgxNDAwMkNFNjRGIC8qIElt
YWdlU291cmNlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwICovOyB9
OwogCQlCMjc1MzU2MDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzMjBCMDUzODE0MDAy
Q0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi87IH07CiAJCUIyNzUzNTYxMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1MzMwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RDRy5jcHAgKi87IH07
CiAJCUIyNzUzNTYyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MzQwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFNpemVDRy5jcHAgKi87IH07CkBAIC05ODc1LDYgKzk4ODAsMTIgQEAKIAkJNTNF
Rjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1
YWxpZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5h
bWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKKwkJNTU5QkI4NzcxQzk2NDY1ODAwMjQxM0NEIC8qIEltYWdlRGVjb2Rl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZURlY29kZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTlCQjg3ODFDOTY0NjU4MDAyNDEz
Q0QgLyogSW1hZ2VEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NTlCQjg3QjFDOTZC
MkM4MDAyNDEzQ0QgLyogSW1hZ2VGcmFtZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VGcmFtZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1NTlCQjg3QzFDOTZCMkM4MDAyNDEzQ0QgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5QkI4N0YxQzk4QkI3NjAwMjQxM0NEIC8qIEltYWdlRnJh
bWVEZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU5QkI4ODAx
Qzk4QkI3NjAwMjQxM0NEIC8qIEltYWdlRnJhbWVEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlRnJhbWVEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11
bGF0ZWRDbGljay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRD
bGljay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5
QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI5MDUsNyArMTI5MTYsNiBAQAogCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0
UmVjdENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkQwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGbG9hdFNpemVDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyNzUzNTMwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjI3NTM1MzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlU291cmNlQ0cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzMjBCMDUzODE0MDAyQ0U2NEYgLyog
SW50UG9pbnRDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50
UG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTMzMEIwNTM4
MTQwMDJDRTY0RiAvKiBJbnRSZWN0Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEludFJlY3RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
NzUzNTM0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplQ0cuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludFNpemVDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMTgzMyw3ICsyMTg0MywxMCBAQAogCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENG
MTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCiAJCQkJMjJCRDlGODAxMzUzNjRGRTAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCiAJCQkJQjI3NTM1MzAwQjA1MzgxNDAw
MkNFNjRGIC8qIEltYWdlQ0cuY3BwICovLAotCQkJCUIyNzUzNTMxMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbWFnZVNvdXJjZUNHLmNwcCAqLywKKwkJCQk1NTlCQjg3NzFDOTY0NjU4MDAyNDEzQ0QgLyog
SW1hZ2VEZWNvZGVyLmNwcCAqLywKKwkJCQk1NTlCQjg3ODFDOTY0NjU4MDAyNDEzQ0QgLyogSW1h
Z2VEZWNvZGVyLmggKi8sCisJCQkJNTU5QkI4N0YxQzk4QkI3NjAwMjQxM0NEIC8qIEltYWdlRnJh
bWVEZWNvZGVyLmNwcCAqLywKKwkJCQk1NTlCQjg4MDFDOThCQjc2MDAyNDEzQ0QgLyogSW1hZ2VG
cmFtZURlY29kZXIuaCAqLywKIAkJCQk0QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VT
b3VyY2VDRy5oICovLAogCQkJCTRCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJj
ZUNHTWFjLm1tICovLAogCQkJCUIyNzUzNTMyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludENH
LmNwcCAqLywKQEAgLTIxOTk1LDYgKzIyMDA4LDggQEAKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2
MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlci5oICovLAogCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk1NTlCQjg3QjFDOTZCMkM4MDAyNDEzQ0QgLyogSW1h
Z2VGcmFtZURhdGEuY3BwICovLAorCQkJCTU1OUJCODdDMUM5NkIyQzgwMDI0MTNDRCAvKiBJbWFn
ZUZyYW1lRGF0YS5oICovLAogCQkJCUJDN0Y0NEE3MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9i
c2VydmVyLmggKi8sCiAJCQkJQTg3NDhENzQxMkNDM0Y4OTAwMUZCQTQxIC8qIEltYWdlT3JpZW50
YXRpb24uY3BwICovLAogCQkJCUE4NzQ4RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVu
dGF0aW9uLmggKi8sCkBAIC0yNTQ3NSw2ICsyNTQ5MCw3IEBACiAJCQkJOTdCQzZBMjQxNTA1RjA4
MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUz
MzcxQTIxNjdDMTFENDAwRURCNzUyIC8qIERhdGFiYXNlQmFzaWNUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTdCQzZBMjUxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAorCQkJCTU1OUJCODdFMUM5NkIyQzkwMDI0MTNDRCAvKiBJbWFnZUZyYW1l
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBMjgxNTA1RjA4MTAwMUI3NEFDIC8qIERh
dGFiYXNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBMjkxNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlRGV0YWlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUwOURCNDkxNjlF
MkQ2RTAwNjIyNTU3IC8qIERhdGFiYXNlRXJyb3IuaCBpbiBIZWFkZXJzICovLApAQCAtMjY4MTIs
NiArMjY4MjgsNyBAQAogCQkJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgzQSAvKiBKU1NjcmlwdFBy
b2Nlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGQTM3RUZCMTE3MkZEQTYwMEM0Q0Q1
NSAvKiBKU1NjcmlwdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGQTM3RUZEMTE3MkZE
QTYwMEM0Q0Q1NSAvKiBKU1NjcmlwdFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
NTlCQjg3QTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRUQwNkFEMTFDNzc3NTQ4MDBGREZBRjEgLyogSlNTZWN1cml0eVBvbGljeVZpb2xhdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5QkRBNjREODFCOTc1Q0YyMDA5QzQzODcgLyog
SlNTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDlERTE3QjE3QUFDNzVCMDBFQTM4
NkQgLyogSlNTb3VyY2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc5MDYsNiArMjc5MjMs
NyBAQAogCQkJCTUxMzI3RDYwMTFBMzNBMkIwMDRGOUQ2NSAvKiBTaW5rRG9jdW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGODcxNjcwMUM4NjlEODMwMDRGRjBERSAvKiBMZW5ndGhQb2ludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQ0QwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTU1OUJCODgyMUM5OEJCNzcwMDI0
MTNDRCAvKiBJbWFnZUZyYW1lRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE1MEY5RjEx
MkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOUI1MzJFQTQxQkE5Mjg1NzAwMzhBODI3IC8qIFNsb3RBc3NpZ25tZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0QjZGQTZGNDBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmggaW4g
SGVhZGVycyAqLywKQEAgLTI5MjAzLDYgKzI5MjIxLDcgQEAKIAkJCQlCMjc1MzU2NjBCMDUzODE0
MDAyQ0U2NEYgLyogQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMzMjQwRjJCOTcx
NTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCQTc2QzkxMUQy
MEU0NzAwNEMyMDFDIC8qIENvbG9yRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1NTlCQjg3
OTFDOTY0NjU4MDAyNDEzQ0QgLyogSW1hZ2VEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDMjk5MzVEMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjc1MzU3NzBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3JNYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQk0M0VERDY3RTFCNDg1REJGMDA2NDBFNzUgLyogQ29tYmluZWRGaWx0ZXJz
QWxwaGFiZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTU5OCw2ICsyOTYxNyw3IEBACiAJCQkJ
ODUzQkY0REMwQUJCNkI1NTAwODY0N0JCIC8qIERPTU5vZGUubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk4NTUyNkMzODBBQjBBMTdFMDAwMzAyRUEgLyogRE9NTm9kZUl0ZXJhdG9yLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODVBQ0FBOEUwQTlCNzU5QzAwNjcxRTkwIC8qIERPTU5vZGVMaXN0Lm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTU5QkI4N0QxQzk2QjJDODAwMjQxM0NEIC8qIEltYWdlRnJhbWVE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NkM4QUU1MEE5MTI2NDkwMDVDNjg3QiAvKiBE
T01PYmplY3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUM3RjVEMTBBQUZCOEQ5MDA0MDE0REQg
LyogRE9NT3ZlcmZsb3dFdmVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxMjg0QkQ1MTA0NEEw
MUUwMEVBRUI1MiAvKiBET01QYWdlVHJhbnNpdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCkBA
IC0zMDA2MCw3ICszMDA4MCw2IEBACiAJCQkJMkQ1QTU5MkYxNTI1MjUyMzAwMzZFRTUxIC8qIElt
YWdlT3JpZW50YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjUxQTJGNDExN0Q3RDVERTAw
NzI1MTdBIC8qIEltYWdlUXVhbGl0eUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYzQzcyNUUxOTc0ODc0QjAwQUVERDBDIC8qIEltYWdlU291cmNlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUIyNzUzNTVGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZUNHLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTRCMzQ4MDkzMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNH
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2RkUxMTcwRTZFMURBNzAwQkY2MDg4IC8qIElt
cGxpY2l0QW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFOTYxQzU0MThBRDMzODUw
MEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAz
ODksNiArMzA0MDgsNyBAQAogCQkJCUE4MEU3RTlDMEExQTgzRTMwMDdGQjhDNSAvKiBKU0hUTUxP
cHRHcm91cEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdFOUEwQTFBODNFMzAw
N0ZCOEM1IC8qIEpTSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQ4
QTI5QzAwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTU1OUJCODgxMUM5OEJCNzYwMDI0MTNDRCAvKiBJbWFnZUZyYW1lRGVj
b2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDhBRDI3QzBBNDgxMzdBMDAyM0QxNzkgLyog
SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEFE
MDE3M0MxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFFMkFCQTYwQTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFBhcmFncmFwaEVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmNwcAppbmRleCBmMzc4NzUyMWRkZmZmNjgyYmQ4OGU2NDcyY2FmMDYyNWUzZjA0
NTQ0Li4xYmZhZGVkZDZiMmRiNTNlYzY5NjMwZWU4NWQyNDBlYWMyY2Y1ZTk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKQEAgLTI3OCw3ICsyNzgsNyBA
QCBMYXlvdXRTaXplIENhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBmbG9hdAogICAgIGlmIChyZW5kZXJlciAmJiBpczxCaXRtYXBJ
bWFnZT4oKm1faW1hZ2UpKSB7CiAgICAgICAgIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBv
cmllbnRhdGlvbkRlc2NyaXB0aW9uKHJlbmRlcmVyLT5zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbigpLCByZW5kZXJlci0+c3R5bGUoKS5pbWFnZU9yaWVudGF0aW9uKCkpOwogICAgICAgICBp
ZiAob3JpZW50YXRpb25EZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICAgICAgaW1hZ2VTaXplID0gTGF5b3V0U2l6
ZShkb3duY2FzdDxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24ob3JpZW50YXRpb25EZXNjcmlwdGlvbikpOworICAgICAgICAgICAgaW1hZ2VTaXplID0gTGF5
b3V0U2l6ZShkb3duY2FzdDxCaXRtYXBJbWFnZT4oKm1faW1hZ2UpLnNpemVSZXNwZWN0aW5nT3Jp
ZW50YXRpb24oKSk7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoaXM8Qml0bWFwSW1hZ2U+KCptX2lt
YWdlKSAmJiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pKQpAQCAtNDc4LDYgKzQ3OCwxNCBAQCB2
b2lkIENhY2hlZEltYWdlOjpkZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3QgSW1hZ2UqIGltYWdlLCBp
bnQgZGVsdGEpCiAgICAgCiAgICAgc2V0RGVjb2RlZFNpemUoZGVjb2RlZFNpemUoKSArIGRlbHRh
KTsKIH0KKyAgICAKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRJbWFnZUNoYW5nZWQoY29uc3Qg
SW1hZ2UqIGltYWdlKQoreworICAgIGlmICghaW1hZ2UgfHwgaW1hZ2UgIT0gbV9pbWFnZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIG5vdGlmeU9ic2VydmVycygpOworfQogCiB2b2lkIENh
Y2hlZEltYWdlOjpkaWREcmF3KGNvbnN0IEltYWdlKiBpbWFnZSkKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKaW5kZXggMzRlYWVjMGRiMjBmZThiMDg2MWFkOWJj
M2NiYTIyZmQ0YWFjMjhhNC4uNWI1OTUyYjM3Y2QyYTJiYWUyMzAzMDk4YzFiM2FiYzkzM2NiMmRk
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKQEAgLTExOCw5
ICsxMTgsMTEgQEAgcHJpdmF0ZToKIAogICAgIC8vIEltYWdlT2JzZXJ2ZXIKICAgICB2b2lkIGRl
Y29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSosIGludCBkZWx0YSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBkZWNvZGVkSW1hZ2VDaGFuZ2VkKGNvbnN0IEltYWdlKikgb3ZlcnJpZGU7CisgICAgCiAg
ICAgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlKikgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIGFuaW1h
dGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGNoYW5nZWRJ
blJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IGFkZEluY3JlbWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCmluZGV4IDk5OTQ2NWVhMzkwNjk3Y2JlMDBm
ZTZmYTg4MzhjMTM4ZTU0NDdhMTcuLjg0NmMwZGM5Mzg0ZTc1ZGJhMDgyMGMyODBmYjY0MWNlOGEw
OGYxNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcApA
QCAtMjI1LDggKzIyNSw2IEBAIGJvb2wgTWVtb3J5Q2FjaGU6OmFkZEltYWdlVG9DYWNoZShOYXRp
dmVJbWFnZVB0ciBpbWFnZSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FjaGVkSW1hZ2U+IGNhY2hlZEltYWdlID0gc3RkOjptYWtlX3VuaXF1ZTxDYWNo
ZWRJbWFnZT4odXJsLCBiaXRtYXBJbWFnZS5nZXQoKSwgQ2FjaGVkSW1hZ2U6Ok1hbnVhbGx5Q2Fj
aGVkLCBzZXNzaW9uSUQpOwogCi0gICAgLy8gQWN0dWFsIHJlbGVhc2Ugb2YgdGhlIENHSW1hZ2VS
ZWYgaXMgZG9uZSBpbiBCaXRtYXBJbWFnZS4KLSAgICBDRlJldGFpbihpbWFnZSk7CiAgICAgY2Fj
aGVkSW1hZ2UtPmFkZENsaWVudCgmZHVtbXlDYWNoZWRJbWFnZUNsaWVudCgpKTsKICAgICBjYWNo
ZWRJbWFnZS0+c2V0RGVjb2RlZFNpemUoYml0bWFwSW1hZ2UtPmRlY29kZWRTaXplKCkpOwogI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggZmFmMGY4Njk2MmMzZmI2NTc3NzQ1YmZh
Zjc1YjRjODRkODBjYzA2MC4uYzdhNjk3Nzc5Y2RlYzJhNGNiNTc3NDE0NDViNTQzMWE3MDI0YmIy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcApAQCAtNDcsMzMgKzQ3LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2Jz
ZXJ2ZXIpCi0gICAgLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKDApCi0gICAgLCBtX2ltYWdl
T3JpZW50YXRpb24oT3JpZ2luVG9wTGVmdCkKLSAgICAsIG1fc2hvdWxkUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24oZmFsc2UpCisgICAgLCBtX3NvdXJjZSh0aGlzKQogICAgICwgbV9jdXJyZW50RnJh
bWUoMCkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9y
ZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikKICAgICAsIG1fcmVwZXRpdGlvbnNDb21wbGV0
ZSgwKQogICAgICwgbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUoMCkKLSAgICAsIG1fZGVjb2RlZFNp
emUoMCkKLSAgICAsIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplKDApCi0gICAgLCBtX2ZyYW1lQ291
bnQoMCkKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBleHBvc2Ug
YSBzZXR0aW5nIHRvIGVuYWJsZS9kaXNhYmxlIHByb2dyZXNzaXZlIGxvYWRpbmcgcmVtb3ZlIHRo
ZSBQTEFURk9STShJT1MpLWd1YXJkLgogICAgICwgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWUo
MCkKICAgICAsIG1fcHJvZ3Jlc3NpdmVMb2FkQ2h1bmtDb3VudCgwKQotICAgICwgbV9hbGxvd1N1
YnNhbXBsaW5nKHRydWUpCi0jZWxzZQotICAgICwgbV9hbGxvd1N1YnNhbXBsaW5nKGZhbHNlKQog
I2VuZGlmCi0gICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKLSAgICAsIG1fY2hlY2tlZEZvclNv
bGlkQ29sb3IoZmFsc2UpCiAgICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKGZhbHNlKQogICAgICwg
bV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCi0gICAgLCBtX2hhdmVTaXplKGZhbHNlKQotICAgICwg
bV9zaXplQXZhaWxhYmxlKGZhbHNlKQotICAgICwgbV9oYXNVbmlmb3JtRnJhbWVTaXplKHRydWUp
Ci0gICAgLCBtX2hhdmVGcmFtZUNvdW50KGZhbHNlKQogICAgICwgbV9hbmltYXRpb25GaW5pc2hl
ZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogewogfQpAQCAtOTYsMTcgKzgyLDYgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6c3RhcnRUaW1lcihkb3VibGUgZGVsYXkpCiAgICAgbV9mcmFtZVRpbWVyLT5zdGFy
dE9uZVNob3QoZGVsYXkpOwogfQogCi1ib29sIEJpdG1hcEltYWdlOjpoYXZlRnJhbWVBdEluZGV4
KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWU7
Ci19Ci0KIGJvb2wgQml0bWFwSW1hZ2U6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QK
IHsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNCwyMyArODksOSBAQCBib29sIEJpdG1hcEltYWdl
OjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmRl
c3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiB7Ci0gICAgdW5zaWduZWQgZnJhbWVC
eXRlc0NsZWFyZWQgPSAwOwotICAgIGNvbnN0IHNpemVfdCBjbGVhckJlZm9yZUZyYW1lID0gZGVz
dHJveUFsbCA/IG1fZnJhbWVzLnNpemUoKSA6IG1fY3VycmVudEZyYW1lOwotCi0gICAgLy8gQmVj
YXVzZSB3ZSBjYW4gYWR2YW5jZSBmcmFtZXMgd2l0aG91dCBhbHdheXMgbmVlZGluZyB0byBkZWNv
ZGUgdGhlIGFjdHVhbAotICAgIC8vIGJpdG1hcCBkYXRhLCB8bV9jdXJyZW50RnJhbWV8IG1heSBi
ZSBsYXJnZXIgdGhhbiBtX2ZyYW1lcy5zaXplKCk7Ci0gICAgLy8gbWFrZSBzdXJlIG5vdCB0byB3
YWxrIG9mZiB0aGUgZW5kIG9mIHRoZSBjb250YWluZXIgaW4gdGhpcyBjYXNlLgotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgIHN0ZDo6bWluKGNsZWFyQmVmb3JlRnJhbWUsIG1fZnJhbWVzLnNp
emUoKSk7ICsraSkgewotICAgICAgICAvLyBUaGUgdW5kZXJseWluZyBmcmFtZSBpc24ndCBhY3R1
YWxseSBjaGFuZ2luZyAod2UncmUganVzdCB0cnlpbmcgdG8KLSAgICAgICAgLy8gc2F2ZSB0aGUg
bWVtb3J5IGZvciB0aGUgZnJhbWVidWZmZXIgZGF0YSksIHNvIHdlIGRvbid0IG5lZWQgdG8gY2xl
YXIKLSAgICAgICAgLy8gdGhlIG1ldGFkYXRhLgotICAgICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVz
ID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFtZXNbaV0uY2xl
YXIoZmFsc2UpKQotICAgICAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gZnJhbWVCeXRlczsK
LSAgICB9Ci0KLSAgICBtX3NvdXJjZS5jbGVhcihkZXN0cm95QWxsLCBjbGVhckJlZm9yZUZyYW1l
LCBkYXRhKCksIG1fYWxsRGF0YVJlY2VpdmVkKTsKLSAgICBkZXN0cm95TWV0YWRhdGFBbmROb3Rp
ZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6Olllcyk7CisgICAgSW1hZ2VGcmFt
ZUluZGV4IGNsZWFyQmVmb3JlRnJhbWUgPSBkZXN0cm95QWxsID8gbV9zb3VyY2UubV9mcmFtZXMu
c2l6ZSgpIDogbV9jdXJyZW50RnJhbWU7CisgICAgbV9zb3VyY2UuY2xlYXJGcmFtZXMoY2xlYXJC
ZWZvcmVGcmFtZSwgZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CisgICAgZGVzdHJveU1ldGFk
YXRhQW5kTm90aWZ5KCk7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0
YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFsbCkKQEAgLTE0NSwxMzggKzEwNiwzOCBAQCB2b2lk
IEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeShib29sIGRlc3Ryb3lB
bGwpCiAKICAgICAvLyBJZiB3ZSBoYXZlIGRlY29kZWQgZnJhbWVzIGJ1dCB0aGVyZSBpcyBubyBl
bmNvZGVkIGRhdGEsIHdlIHNob3VsZG4ndCBkZXN0cm95CiAgICAgLy8gdGhlIGRlY29kZWQgaW1h
Z2Ugc2luY2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byByZWNvbnN0cnVjdCBpdCBsYXRlci4KLSAgICBp
ZiAoIWRhdGEoKSAmJiBtX2ZyYW1lcy5zaXplKCkpCisgICAgaWYgKCFkYXRhKCkgJiYgbV9zb3Vy
Y2UubV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBhbGxG
cmFtZUJ5dGVzID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUo
KTsgKytpKQotICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRl
czsKLQotICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRvZmYpCisgICAg
aWYgKG1fc291cmNlLm1fZnJhbWVzLmZyYW1lc0J5dGVzKCkgPiBsYXJnZUFuaW1hdGlvbkN1dG9m
ZikKICAgICAgICAgZGVzdHJveURlY29kZWREYXRhKGRlc3Ryb3lBbGwpOwogfQogCi12b2lkIEJp
dG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5zaWduZWQgZnJhbWVCeXRlc0Ns
ZWFyZWQsIENsZWFyZWRTb3VyY2UgY2xlYXJlZFNvdXJjZSkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRl
c3Ryb3lNZXRhZGF0YUFuZE5vdGlmeSgpCiB7Ci0gICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsK
LSAgICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gZmFsc2U7CisgICAgbV9zb2xpZENvbG9yVmFs
dWUgPSBUcmlTdGF0ZTo6VW5jaGVja2VkOwogICAgIGludmFsaWRhdGVQbGF0Zm9ybURhdGEoKTsK
LQotICAgIEFTU0VSVChtX2RlY29kZWRTaXplID49IGZyYW1lQnl0ZXNDbGVhcmVkKTsKLSAgICBt
X2RlY29kZWRTaXplIC09IGZyYW1lQnl0ZXNDbGVhcmVkOwotCi0gICAgLy8gQ2xlYXJpbmcgdGhl
IEltYWdlU291cmNlIGRlc3Ryb3lzIHRoZSBleHRyYSBkZWNvZGVkIGRhdGEgdXNlZCBmb3IgZGV0
ZXJtaW5pbmcgaW1hZ2UgcHJvcGVydGllcy4KLSAgICBpZiAoY2xlYXJlZFNvdXJjZSA9PSBDbGVh
cmVkU291cmNlOjpZZXMpIHsKLSAgICAgICAgZnJhbWVCeXRlc0NsZWFyZWQgKz0gbV9kZWNvZGVk
UHJvcGVydGllc1NpemU7Ci0gICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsKLSAg
ICB9Ci0KLSAgICBpZiAoZnJhbWVCeXRlc0NsZWFyZWQgJiYgaW1hZ2VPYnNlcnZlcigpKQotICAg
ICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8
aW50PihmcmFtZUJ5dGVzQ2xlYXJlZCkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZy
YW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFn
ZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hpbmcpCi17Ci0gICAgc2l6ZV90IG51bUZyYW1lcyA9IGZy
YW1lQ291bnQoKTsKLSAgICBBU1NFUlQobV9kZWNvZGVkU2l6ZSA9PSAwIHx8IG51bUZyYW1lcyA+
IDEpOwotICAgIAotICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCi0gICAgICAg
IG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKLQotICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2Fj
aGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0g
bV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLSAg
ICAgICAgbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2
ZWw7Ci0gICAgICAgIGlmIChudW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFt
ZSkKLSAgICAgICAgICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwotICAgIH0KLQotICAgIG1fZnJh
bWVzW2luZGV4XS5tX29yaWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGlu
ZGV4KTsKLSAgICBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1f
ZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdElu
ZGV4KGluZGV4KTsKLQotICAgIGlmIChyZXBldGl0aW9uQ291bnQoZmFsc2UpICE9IGNBbmltYXRp
b25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbiA9IG1fc291cmNlLmZy
YW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKLQotICAgIG1fZnJhbWVzW2luZGV4XS5tX2hhc0Fs
cGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwotICAgIG1fZnJhbWVz
W2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5dGVzQXRJbmRleChpbmRleCwg
c3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBjb25zdCBJbnRTaXplIGZyYW1lU2l6ZShpbmRleCA/
IG1fc291cmNlLmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbV9z
aXplKTsKLSAgICBpZiAoIXN1YnNhbXBsaW5nTGV2ZWwgJiYgZnJhbWVTaXplICE9IG1fc2l6ZSkK
LSAgICAgICAgbV9oYXNVbmlmb3JtRnJhbWVTaXplID0gZmFsc2U7Ci0KLSAgICBpZiAobV9mcmFt
ZXNbaW5kZXhdLm1fZnJhbWUpIHsKLSAgICAgICAgaW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxp
bnQ+KG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMpOwotICAgICAgICBtX2RlY29kZWRTaXpl
ICs9IGRlbHRhQnl0ZXM7Ci0gICAgICAgIC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwg
c3Vic3VtZSB0aGUgcGFydGlhbGx5IGRlY29kZWQgZGF0YSB1c2VkCi0gICAgICAgIC8vIHRvIGRl
dGVybWluZSBpbWFnZSBwcm9wZXJ0aWVzLgotICAgICAgICBkZWx0YUJ5dGVzIC09IG1fZGVjb2Rl
ZFByb3BlcnRpZXNTaXplOwotICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7Ci0g
ICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgICAgICBpbWFnZU9ic2VydmVyKCkt
PmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKLSAgICB9Ci19Ci0KLXZvaWQg
Qml0bWFwSW1hZ2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAotewotICAgIGlmIChtX2Rl
Y29kZWRTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgdXBkYXRlZFNpemUgPSBt
X3NvdXJjZS5ieXRlc0RlY29kZWRUb0RldGVybWluZVByb3BlcnRpZXMoKTsKLSAgICBpZiAobV9k
ZWNvZGVkUHJvcGVydGllc1NpemUgPT0gdXBkYXRlZFNpemUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGludCBkZWx0YUJ5dGVzID0gdXBkYXRlZFNpemUgLSBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgYm9vbCBvdmVyZmxvdyA9IHVwZGF0ZWRTaXpl
ID4gbV9kZWNvZGVkUHJvcGVydGllc1NpemUgJiYgZGVsdGFCeXRlcyA8IDA7Ci0gICAgYm9vbCB1
bmRlcmZsb3cgPSB1cGRhdGVkU2l6ZSA8IG1fZGVjb2RlZFByb3BlcnRpZXNTaXplICYmIGRlbHRh
Qnl0ZXMgPiAwOwotICAgIEFTU0VSVCghb3ZlcmZsb3cgJiYgIXVuZGVyZmxvdyk7Ci0jZW5kaWYK
LSAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IHVwZGF0ZWRTaXplOwotICAgIGlmIChpbWFn
ZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2Vk
KHRoaXMsIGRlbHRhQnl0ZXMpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjp1cGRhdGVTaXplKElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBpZiAo
IW1fc2l6ZUF2YWlsYWJsZSB8fCBtX2hhdmVTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3NpemUgPSBtX3NvdXJjZS5zaXplKGRlc2NyaXB0aW9uKTsKLSAgICBtX3NpemVSZXNwZWN0aW5n
T3JpZW50YXRpb24gPSBtX3NvdXJjZS5zaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKSk7
Ci0KLSAgICBtX2ltYWdlT3JpZW50YXRpb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVzY3Jp
cHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBtX3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKCkpOwotCi0gICAgbV9oYXZlU2l6ZSA9IHRydWU7Ci0KLSAgICBkZXRlcm1pbmVN
aW5pbXVtU3Vic2FtcGxpbmdMZXZlbCgpOwotICAgIGRpZERlY29kZVByb3BlcnRpZXMoKTsKIH0K
IAogRmxvYXRTaXplIEJpdG1hcEltYWdlOjpzaXplKCkgY29uc3QKIHsKLSAgICB1cGRhdGVTaXpl
KCk7Ci0gICAgcmV0dXJuIG1fc2l6ZTsKKyAgICByZXR1cm4gbV9zb3VyY2Uuc2l6ZSgpOwogfQog
Ci1JbnRTaXplIEJpdG1hcEltYWdlOjpzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKK0ludFNpemUgQml0bWFwSW1h
Z2U6OnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHVwZGF0ZVNpemUo
ZGVzY3JpcHRpb24pOwotICAgIHJldHVybiBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb247Cisg
ICAgcmV0dXJuIG1fc291cmNlLnNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKTsKIH0KIAogYm9v
bCBCaXRtYXBJbWFnZTo6Z2V0SG90U3BvdChJbnRQb2ludCYgaG90U3BvdCkgY29uc3QKIHsKLSAg
ICBib29sIHJlc3VsdCA9IG1fc291cmNlLmdldEhvdFNwb3QoaG90U3BvdCk7Ci0gICAgZGlkRGVj
b2RlUHJvcGVydGllcygpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fc291cmNl
LmdldEhvdFNwb3QoaG90U3BvdCk7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2Vk
KGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewogICAgIC8vIEJlY2F1c2Ugd2UncmUgbW9kaWZ5aW5n
IHRoZSBjdXJyZW50IGZyYW1lLCBjbGVhciBpdHMgKG5vdyBwb3NzaWJseQogICAgIC8vIGluYWNj
dXJhdGUpIG1ldGFkYXRhIGFzIHdlbGwuCi0jaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBDbGVh
ciBhbGwgcGFydGlhbGx5LWRlY29kZWQgZnJhbWVzLiBGb3IgbW9zdCBpbWFnZSBmb3JtYXRzLCB0
aGVyZSBpcyBvbmx5CiAgICAgLy8gb25lIGZyYW1lLCBidXQgYXQgbGVhc3QgR0lGIGFuZCBJQ08g
Y2FuIGhhdmUgbW9yZS4gV2l0aCBHSUZzLCB0aGUgZnJhbWVzCiAgICAgLy8gY29tZSBpbiBvcmRl
ciBhbmQgd2UgYXNrIHRvIGRlY29kZSB0aGVtIGluIG9yZGVyLCB3YWl0aW5nIHRvIHJlcXVlc3Qg
YQpAQCAtMjk0LDI5ICsxNTUsOCBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29s
IGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBzdGFydCBvZiB0aGUgZnJhbWUgZGF0YSksIGFuZCBh
bnkgb3Igbm9uZSBvZiB0aGVtIG1pZ2h0IGJlIHRoZSBwYXJ0aWN1bGFyCiAgICAgLy8gZnJhbWUg
YWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5ldyBkYXRhIGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVh
ciBhbGwgdGhlCiAgICAgLy8gaW5jb21wbGV0ZSBmcmFtZXMgdG8gYmUgc2FmZS4KLSAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2ZyYW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICAvLyBOT1RFOiBEb24ndCBjYWxsIGZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCi0gICAgICAgIC8vIGRl
Y29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgotICAgICAgICAvLyBjbGVh
cmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNpZ25lZCBmcmFtZUJ5
dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFtZXNbaV0u
bV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkKLSAgICAgICAgICAg
IGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVlKSA/IGZyYW1lQnl0
ZXMgOiAwKTsKLSAgICB9Ci0gICAgZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KGZyYW1lQnl0ZXND
bGVhcmVkLCBDbGVhcmVkU291cmNlOjpObyk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiB3aHkgaXMg
dGhpcyBkaWZmZXJlbnQgZm9yIGlPUz8KLSAgICBpbnQgZGVsdGFCeXRlcyA9IDA7Ci0gICAgaWYg
KCFtX2ZyYW1lcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9m
cmFtZXMuc2l6ZSgpIC0gMV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAobV9mcmFtZXNbbV9m
cmFtZXMuc2l6ZSgpIC0gMV0uY2xlYXIodHJ1ZSkpIHsKLSAgICAgICAgICAgIGRlbHRhQnl0ZXMg
Kz0gYnl0ZXM7Ci0gICAgICAgICAgICBkZWx0YUJ5dGVzICs9IG1fZGVjb2RlZFByb3BlcnRpZXNT
aXplOwotICAgICAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgPSAwOwotICAgICAgICB9
Ci0gICAgfQotICAgIGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShkZWx0YUJ5dGVzLCBDbGVhcmVk
U291cmNlOjpObyk7Ci0jZW5kaWYKKyAgICBtX3NvdXJjZS5jbGVhclBhcnRpYWxGcmFtZXMoKTsK
KyAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoKTsKICAgICAKICAgICAvLyBGZWVkIGFsbCB0
aGUgZGF0YSB3ZSd2ZSBzZWVuIHNvIGZhciB0byB0aGUgaW1hZ2UgZGVjb2Rlci4KICAgICBtX2Fs
bERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKQEAgLTMzOCwxMCArMTc4LDcgQEAgYm9v
bCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAjZWxzZQog
ICAgIG1fc291cmNlLnNldERhdGEoZGF0YSgpLCBhbGxEYXRhUmVjZWl2ZWQpOwogI2VuZGlmCi0K
LSAgICBtX2hhdmVGcmFtZUNvdW50ID0gZmFsc2U7Ci0gICAgbV9oYXNVbmlmb3JtRnJhbWVTaXpl
ID0gdHJ1ZTsKLSAgICByZXR1cm4gaXNTaXplQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIG1fc291
cmNlLmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCiBTdHJpbmcgQml0bWFwSW1hZ2U6OmZpbGVuYW1l
RXh0ZW5zaW9uKCkgY29uc3QKQEAgLTM0OSwxMTUgKzE4NiwxNCBAQCBTdHJpbmcgQml0bWFwSW1h
Z2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9zb3VyY2UuZmlsZW5h
bWVFeHRlbnNpb24oKTsKIH0KIAotc2l6ZV90IEJpdG1hcEltYWdlOjpmcmFtZUNvdW50KCkKLXsK
LSAgICBpZiAoIW1faGF2ZUZyYW1lQ291bnQpIHsKLSAgICAgICAgbV9mcmFtZUNvdW50ID0gbV9z
b3VyY2UuZnJhbWVDb3VudCgpOwotICAgICAgICAvLyBJZiBkZWNvZGVyIGlzIG5vdCBpbml0aWFs
aXplZCB5ZXQsIG1fc291cmNlLmZyYW1lQ291bnQoKSByZXR1cm5zIDAuCi0gICAgICAgIGlmICht
X2ZyYW1lQ291bnQpIHsKLSAgICAgICAgICAgIGRpZERlY29kZVByb3BlcnRpZXMoKTsKLSAgICAg
ICAgICAgIG1faGF2ZUZyYW1lQ291bnQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBtX2ZyYW1lQ291bnQ7Ci19Ci0KLWJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWlsYWJs
ZSgpCi17Ci0gICAgaWYgKG1fc2l6ZUF2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBtX3NpemVBdmFpbGFibGUgPSBtX3NvdXJjZS5pc1NpemVBdmFpbGFibGUoKTsKLSAgICBk
aWREZWNvZGVQcm9wZXJ0aWVzKCk7Ci0KLSAgICByZXR1cm4gbV9zaXplQXZhaWxhYmxlOwotfQot
Ci1ib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCwgSW1h
Z2VGcmFtZUNhY2hpbmcgZnJhbWVDYWNoaW5nKQotewotICAgIGlmIChpbmRleCA+PSBmcmFtZUNv
dW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1l
cy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJh
bWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQotICAgICAgICB8fCAoZnJhbWVDYWNoaW5n
ID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEp
KQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVBhc3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdElu
ZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50KQorUGFzc05hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjYWxlSGludCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3Vu
dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCA9IHN0ZDo6bWluKG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2Fs
ZShwcmVzZW50YXRpb25TY2FsZUhpbnQpLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKTsKLQot
ICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdpdGggYSBoaWdoZXIgc3Vic2FtcGxp
bmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwotICAgIC8vIHJlLWRlY29kZSB3aXRo
IGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJh
bWVzW2luZGV4XS5tX2ZyYW1lICYmIHN1YnNhbXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0u
bV9zdWJzYW1wbGluZ0xldmVsKSB7Ci0gICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5
IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBhIHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJz
aW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5
dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0uY2xlYXIodHJ1ZSk7Ci0gICAgICAgIGludmFs
aWRhdGVQbGF0Zm9ybURhdGEoKTsKLSAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdl
OwotICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgc2l6ZUNoYW5nZSk7Ci0gICAgfQotCi0gICAg
Ly8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVkIGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKLSAgICAg
ICAgY2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZy
YW1lKTsKLQotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZTsKLX0KLQotYm9vbCBC
aXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAg
aWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBs
ZXRlOwotfQotCi1mbG9hdCBCaXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQotewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRh
ZGF0YU9ubHkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRl
eF0ubV9kdXJhdGlvbjsKLX0KLQotUGFzc05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCi17Ci0gICAgcmV0dXJuIGZyYW1lQXRJbmRleChjdXJy
ZW50RnJhbWUoKSk7Ci19Ci0KLWJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4
KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENh
Y2hlTWV0YWRhdGFPbmx5KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAobV9mcmFt
ZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhd
Lm1faGFzQWxwaGE7Ci0KLSAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgo
aW5kZXgpOwotfQotCi1ib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93blRvQmVPcGFx
dWUoKQotewotICAgIHJldHVybiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgoY3VycmVudEZyYW1lKCkp
OwotfQotCi1JbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBDYWNoZU1ldGFkYXRhT25seSkpCi0gICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRh
dGlvbjsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlvbjsKLQotICAgIHJldHVybiBtX3Nv
dXJjZS5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCA9IG1fc291cmNlLnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShwcmVzZW50
YXRpb25TY2FsZUhpbnQpOworICAgIGNvbnN0IEltYWdlRnJhbWVEYXRhKiBmcmFtZSA9IG1fc291
cmNlLmZyYW1lQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgcmV0dXJuIGZy
YW1lID8gZnJhbWUtPm1faW1hZ2UgOiBudWxscHRyOwogfQogCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RApAQCAtNDc1LDcgKzIxMSw2IEBAIGludCBCaXRtYXBJbWFnZTo6cmVwZXRpdGlvbkNvdW50KGJv
b2wgaW1hZ2VLbm93blRvQmVDb21wbGV0ZSkKICAgICAgICAgLy8gZGVjb2RlciB3aWxsIGRlZmF1
bHQgdG8gY0FuaW1hdGlvbkxvb3BPbmNlLCBhbmQgd2UnbGwgdHJ5IGFuZCByZWFkCiAgICAgICAg
IC8vIHRoZSBjb3VudCBhZ2FpbiBvbmNlIHRoZSB3aG9sZSBpbWFnZSBpcyBkZWNvZGVkLgogICAg
ICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fc291cmNlLnJlcGV0aXRpb25Db3VudCgpOwotICAg
ICAgICBkaWREZWNvZGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50U3Rh
dHVzID0gKGltYWdlS25vd25Ub0JlQ29tcGxldGUgfHwgbV9yZXBldGl0aW9uQ291bnQgPT0gY0Fu
aW1hdGlvbk5vbmUpID8gQ2VydGFpbiA6IFVuY2VydGFpbjsKICAgICB9CiAgICAgcmV0dXJuIG1f
cmVwZXRpdGlvbkNvdW50OwpAQCAtNjc4LDE5ICs0MTMsNDEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6
aW50ZXJuYWxBZHZhbmNlQW5pbWF0aW9uKEFuaW1hdGlvbkFkdmFuY2VtZW50IGFkdmFuY2VtZW50
KQogCiAgICAgcmV0dXJuIGFkdmFuY2VkQW5pbWF0aW9uOwogfQorICAgIAordm9pZCBCaXRtYXBJ
bWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKK3sKKyAgICBtX3NvbGlkQ29sb3JWYWx1ZSA9IFRy
aVN0YXRlOjpObzsKKyAgICAKKyAgICBpZiAoZnJhbWVDb3VudCgpID4gMSkKKyAgICAgICAgcmV0
dXJuOwogCi1ib29sIEJpdG1hcEltYWdlOjptYXlGaWxsV2l0aFNvbGlkQ29sb3IoKQorICAgIElu
dFNpemUgc2l6ZSA9IG1fc291cmNlLmZyYW1lU2l6ZUF0SW5kZXgoMCwgMCk7CisgICAgaWYgKHNp
emUud2lkdGgoKSAhPSAxIHx8IHNpemUuaGVpZ2h0KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKE9wdGlvbmFsPENvbG9yPiBjb2xvciA9IG1fc291cmNlLmZyYW1lQXRJbmRleCgw
KS0+c29saWRDb2xvcigpKSB7CisgICAgICAgIG1fc29saWRDb2xvciA9IGNvbG9yLnZhbHVlKCk7
CisgICAgICAgIG1fc29saWRDb2xvclZhbHVlID0gVHJpU3RhdGU6OlllczsKKyAgICB9Cit9CisK
K2Jvb2wgQml0bWFwSW1hZ2U6OmlzU29saWRDb2xvcigpCiB7Ci0gICAgaWYgKCFtX2NoZWNrZWRG
b3JTb2xpZENvbG9yICYmIGZyYW1lQ291bnQoKSA+IDApIHsKKyAgICBpZiAobV9zb2xpZENvbG9y
VmFsdWUgPT0gVHJpU3RhdGU6OlVuY2hlY2tlZCAmJiBmcmFtZUNvdW50KCkgPiAwKSB7CiAgICAg
ICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwotICAgICAgICBBU1NFUlQobV9jaGVja2VkRm9yU29s
aWRDb2xvcik7CisgICAgICAgIEFTU0VSVChtX3NvbGlkQ29sb3JWYWx1ZSAhPSBUcmlTdGF0ZTo6
VW5jaGVja2VkKTsKICAgICB9Ci0gICAgcmV0dXJuIG1faXNTb2xpZENvbG9yICYmICFtX2N1cnJl
bnRGcmFtZTsKKyAgICByZXR1cm4gbV9zb2xpZENvbG9yVmFsdWUgPT0gVHJpU3RhdGU6OlllczsK
IH0KLQotQ29sb3IgQml0bWFwSW1hZ2U6OnNvbGlkQ29sb3IoKSBjb25zdAorICAgIAorYm9vbCBC
aXRtYXBJbWFnZTo6bWF5RmlsbFdpdGhTb2xpZENvbG9yKCkKK3sKKyAgICByZXR1cm4gaXNTb2xp
ZENvbG9yKCkgJiYgIW1fY3VycmVudEZyYW1lOworfQorICAgIAorQ29sb3IgQml0bWFwSW1hZ2U6
OnNvbGlkQ29sb3IoKQogewotICAgIHJldHVybiBtX3NvbGlkQ29sb3I7CisgICAgcmV0dXJuIGlz
U29saWRDb2xvcigpID8gbV9zb2xpZENvbG9yIDogQ29sb3IoKTsKIH0KICAgICAKIGJvb2wgQml0
bWFwSW1hZ2U6OmNhbkFuaW1hdGUoKQpAQCAtNzA1LDE4ICs0NjIsMTMgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICB0cy5kdW1wUHJvcGVydHkoInR5
cGUiLCBtX3NvdXJjZS5maWxlbmFtZUV4dGVuc2lvbigpKTsKIAogICAgIGlmIChpc0FuaW1hdGVk
KCkpIHsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmcmFtZS1jb3VudCIsIG1fZnJhbWVDb3Vu
dCk7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZnJhbWUtY291bnQiLCBtX3NvdXJjZS5mcmFt
ZUNvdW50KCkpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlcGV0aXRpb25zIiwgbV9yZXBl
dGl0aW9uQ291bnQpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImN1cnJlbnQtZnJhbWUiLCBt
X2N1cnJlbnRGcmFtZSk7CiAgICAgfQogICAgIAotICAgIGlmIChhbGxvd1N1YnNhbXBsaW5nKCkp
Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxsb3ctc3Vic2FtcGxpbmciLCBhbGxvd1N1YnNh
bXBsaW5nKCkpOwotICAgIGlmIChtX2lzU29saWRDb2xvcikKLSAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzb2xpZC1jb2xvciIsIG1faXNTb2xpZENvbG9yKTsKLSAgICAKLSAgICBpZiAobV9pbWFn
ZU9yaWVudGF0aW9uICE9IE9yaWdpblRvcExlZnQpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
b3JpZW50YXRpb24iLCBtX2ltYWdlT3JpZW50YXRpb24pOworICAgIGlmIChtX3NvbGlkQ29sb3JW
YWx1ZSA9PSBUcmlTdGF0ZTo6WWVzKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNvbGlkLWNv
bG9yIiwgbV9zb2xpZENvbG9yKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggNzQ5M2M2YTRiZmI4NjNkOTc2MzdjNDljNDY0
Y2MzN2FlNzhlMGEwNC4uY2E0NTUxNjI2ZjM5ZTMyMzNmOTM5YzkzZTA1M2M3NTM2ZTI3ODA5OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9u
LmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCkBAIC00
Nyw2MSArNDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBIQklUTUFQX18gKkhCSVRNQVA7CiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIHN0cnVjdCBGcmFtZURhdGE7Ci19Ci0KLW5hbWVz
cGFjZSBXVEYgewotICAgIHRlbXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxXZWJDb3JlOjpG
cmFtZURhdGE+IDogcHVibGljIFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgY2FuSW5pdGlhbGl6ZVdpdGhNZW1zZXQgPSBmYWxzZTsgLy8gTm90IGFs
bCBGcmFtZURhdGEgbWVtYmVycyBpbml0aWFsaXplIHRvIDAuCi0gICAgfTsKLX0KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBUaW1lcjsKIAotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJh
bWVEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmFtZURhdGEpOwotcHVibGljOgot
ICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9mcmFtZSgwKQotICAgICAgICAsIG1fb3JpZW50
YXRpb24oRGVmYXVsdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgICwgbV9zdWJzYW1wbGluZ0xl
dmVsKDApCi0gICAgICAgICwgbV9kdXJhdGlvbigwKQotICAgICAgICAsIG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpIAotICAgICAgICAsIG1fZnJhbWVCeXRlcygwKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB+RnJhbWVEYXRhKCkKLSAgICB7IAotICAgICAgICBjbGVhcih0cnVlKTsKLSAgICB9Ci0KLSAg
ICAvLyBDbGVhciB0aGUgY2FjaGVkIGltYWdlIGRhdGEgb24gdGhlIGZyYW1lLCBhbmQgKG9wdGlv
bmFsbHkpIHRoZSBtZXRhZGF0YS4KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2FzIGNh
Y2hlZCBpbWFnZSBkYXRhIHRvIGNsZWFyLgotICAgIGJvb2wgY2xlYXIoYm9vbCBjbGVhck1ldGFk
YXRhKTsKLQotICAgIE5hdGl2ZUltYWdlUHRyIG1fZnJhbWU7Ci0gICAgSW1hZ2VPcmllbnRhdGlv
biBtX29yaWVudGF0aW9uOwotICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVs
OwotICAgIGZsb2F0IG1fZHVyYXRpb247Ci0gICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0g
ICAgYm9vbCBtX2lzQ29tcGxldGUgOiAxOwotICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAg
dW5zaWduZWQgbV9mcmFtZUJ5dGVzOwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0
bWFwSW1hZ2UgZmluYWwgOiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0
ZWRJbWFnZTsKICAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0x
MjUsMTEgKzc0LDExIEBAIHB1YmxpYzoKIAogICAgIC8vIEZsb2F0U2l6ZSBkdWUgdG8gb3ZlcnJp
ZGUuCiAgICAgRmxvYXRTaXplIHNpemUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRTaXplIHNp
emVSZXNwZWN0aW5nT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1h
Z2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OworICAgIEludFNpemUgc2l6ZVJlc3Bl
Y3RpbmdPcmllbnRhdGlvbigpIGNvbnN0OwogCiAgICAgYm9vbCBnZXRIb3RTcG90KEludFBvaW50
JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVjb2RlZFNpemU7IH0KKyAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlLm1fZnJhbWVzLmZyYW1lc0J5dGVzKCk7IH0KIAogICAgIGJvb2wg
ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIG92ZXJyaWRlOwogICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTcyLDI2ICsxMjEsMjEgQEAg
cHVibGljOgogICAgIEV2YXNfT2JqZWN0KiBnZXRFdmFzT2JqZWN0KEV2YXMqKSBvdmVycmlkZTsK
ICNlbmRpZgogCi0gICAgUGFzc05hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCkgb3ZlcnJpZGU7CisgICAgUGFzc05hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCkgb3ZlcnJpZGUgeyByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZy
YW1lKCkpOyB9CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJlbnRGcmFt
ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KGN1cnJlbnRGcmFt
ZSgpKTsgfQorICAgIGJvb2wgY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGUg
eyByZXR1cm4gIWZyYW1lSGFzQWxwaGFBdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQogCi0gICAg
Ym9vbCBjdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKSBvdmVycmlkZTsKLQotICAgIGJvb2wg
aXNBbmltYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZnJhbWVDb3VudCA+IDE7IH0K
KyAgICBib29sIGlzQW5pbWF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmcmFtZUNvdW50
KCkgPiAxOyB9CiAgICAgCiAgICAgYm9vbCBjYW5BbmltYXRlKCk7CiAKLSAgICBib29sIGFsbG93
U3Vic2FtcGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FsbG93U3Vic2FtcGxpbmc7IH0KLSAgICB2
b2lkIHNldEFsbG93U3Vic2FtcGxpbmcoYm9vbCBhbGxvd1N1YnNhbXBsaW5nKSB7IG1fYWxsb3dT
dWJzYW1wbGluZyA9IGFsbG93U3Vic2FtcGxpbmc7IH0KLQorICAgIHZvaWQgc2V0QWxsb3dTdWJz
YW1wbGluZyhib29sIGFsbG93U3Vic2FtcGxpbmcpIHsgbV9zb3VyY2Uuc2V0QWxsb3dTdWJzYW1w
bGluZyhhbGxvd1N1YnNhbXBsaW5nKTsgfQorICAgIAogICAgIHNpemVfdCBjdXJyZW50RnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRGcmFtZTsgfQogICAgIAogcHJpdmF0ZToKICAgICBi
b29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICB2b2lkIHVwZGF0ZVNpemUoSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uID0gSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uKCkpIGNvbnN0OwotICAgIHZvaWQgZGV0ZXJtaW5lTWluaW11bVN1
YnNhbXBsaW5nTGV2ZWwoKSBjb25zdDsKLQogcHJvdGVjdGVkOgogICAgIGVudW0gUmVwZXRpdGlv
bkNvdW50U3RhdHVzIHsKICAgICAgIFVua25vd24sICAgIC8vIFdlIGhhdmVuJ3QgY2hlY2tlZCB0
aGUgc291cmNlJ3MgcmVwZXRpdGlvbiBjb3VudC4KQEAgLTIxMiwyNCArMTU2LDE1IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwog
I2VuZGlmCiAKLSAgICBzaXplX3QgZnJhbWVDb3VudCgpOwotCi0gICAgUGFzc05hdGl2ZUltYWdl
UHRyIGZyYW1lQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEp
OwotICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBjb3B5VW5zY2FsZWRGcmFtZUF0SW5kZXgoc2l6ZV90
KTsKLQotICAgIGJvb2wgaGF2ZUZyYW1lQXRJbmRleChzaXplX3QpOwotCi0gICAgYm9vbCBmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7Ci0gICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90KTsKLSAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7Ci0gICAg
SW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpOworICAgIHNp
emVfdCBmcmFtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVDb3VudCgpOyB9
CiAKLSAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2ZXIgYWNjZXNzZWQgZXhj
ZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGluZyB7IENhY2hlTWV0YWRh
dGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lkIGNhY2hlRnJhbWUoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgUGFzc05hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2VBdEluZGV4
KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7CisgICAgUGFzc05hdGl2
ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKLSAgICAv
LyBDYWxsZWQgYmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91
dCBkZWNvZGluZy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJv
b2wgZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0g
Q2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgo
SW1hZ2VGcmFtZUluZGV4IGluZGV4KSB7IHJldHVybiBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVB
dEluZGV4KGluZGV4KTsgfQorICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KEltYWdlRnJh
bWVJbmRleCBpbmRleCkgeyByZXR1cm4gbV9zb3VyY2UuZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5k
ZXgpOyB9CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChJbWFnZUZyYW1lSW5kZXggaW5k
ZXgpIHsgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsgfQorICAg
IEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoSW1hZ2VGcmFtZUluZGV4
IGluZGV4KSB7IHJldHVybiBtX3NvdXJjZS5mcmFtZU9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7
IH0KIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiBXaGVuIHxkZXN0
cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRpcmUgZnJhbWUgYnVm
ZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJveQpAQCAtMjQ2LDE3
ICsxODEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gR2VuZXJhbGx5IGNhbGxlZCBieSBkZXN0cm95
RGVjb2RlZERhdGEoKSwgZGVzdHJveXMgd2hvbGUtaW1hZ2UgbWV0YWRhdGEKICAgICAvLyBhbmQg
bm90aWZpZXMgb2JzZXJ2ZXJzIHRoYXQgdGhlIG1lbW9yeSBmb290cHJpbnQgaGFzIChob3BlZnVs
bHkpCiAgICAgLy8gZGVjcmVhc2VkIGJ5IHxmcmFtZUJ5dGVzQ2xlYXJlZHwuCi0gICAgZW51bSBj
bGFzcyBDbGVhcmVkU291cmNlIHsgTm8sIFllcyB9OwotICAgIHZvaWQgZGVzdHJveU1ldGFkYXRh
QW5kTm90aWZ5KHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU291cmNlKTsKLQot
ICAgIC8vIFdoZXRoZXIgb3Igbm90IHNpemUgaXMgYXZhaWxhYmxlIHlldC4KLSAgICBib29sIGlz
U2l6ZUF2YWlsYWJsZSgpOwotCi0gICAgLy8gQ2FsbGVkIGFmdGVyIGFza2luZyB0aGUgc291cmNl
IGZvciBhbnkgaW5mb3JtYXRpb24gdGhhdCBtYXkgcmVxdWlyZQotICAgIC8vIGRlY29kaW5nIHBh
cnQgb2YgdGhlIGltYWdlIChlLmcuLCB0aGUgaW1hZ2Ugc2l6ZSkuIFdlIG5lZWQgdG8gcmVwb3J0
Ci0gICAgLy8gdGhlIHBhcnRpYWxseSBkZWNvZGVkIGRhdGEgdG8gb3VyIG9ic2VydmVyIHNvIGl0
IGhhcyBhbiBhY2N1cmF0ZQotICAgIC8vIGFjY291bnQgb2YgdGhlIEJpdG1hcEltYWdlJ3MgbWVt
b3J5IHVzYWdlLgotICAgIHZvaWQgZGlkRGVjb2RlUHJvcGVydGllcygpIGNvbnN0OworICAgIHZv
aWQgZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KCk7CiAKICAgICAvLyBBbmltYXRpb24uCiAgICAg
aW50IHJlcGV0aXRpb25Db3VudChib29sIGltYWdlS25vd25Ub0JlQ29tcGxldGUpOyAgLy8gfGlt
YWdlS25vd25Ub0JlQ29tcGxldGV8IHNob3VsZCBiZSBzZXQgaWYgdGhlIGNhbGxlciBrbm93cyB0
aGUgZW50aXJlIGltYWdlIGhhcyBiZWVuIGRlY29kZWQuCkBAIC0yODAsOCArMjA1LDkgQEAgcHJv
dGVjdGVkOgogICAgIC8vIGNoYW5nZWQuCiAgICAgdm9pZCBjaGVja0ZvclNvbGlkQ29sb3IoKTsK
IAorICAgIGJvb2wgaXNTb2xpZENvbG9yKCk7CiAgICAgYm9vbCBtYXlGaWxsV2l0aFNvbGlkQ29s
b3IoKSBvdmVycmlkZTsKLSAgICBDb2xvciBzb2xpZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgQ29sb3Igc29saWRDb2xvcigpIG92ZXJyaWRlOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAog
ICAgIGJvb2wgbm90U29saWRDb2xvcigpIG92ZXJyaWRlOwpAQCAtMjk0LDE2ICsyMjAsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBJbWFnZVNvdXJjZSBtX3NvdXJjZTsKLSAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOyAvLyBU
aGUgc2l6ZSB0byB1c2UgZm9yIHRoZSBvdmVyYWxsIGltYWdlICh3aWxsIGp1c3QgYmUgdGhlIHNp
emUgb2YgdGhlIGZpcnN0IGltYWdlKS4KLSAgICBtdXRhYmxlIEludFNpemUgbV9zaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uOwotCi0gICAgbXV0YWJsZSBTdWJzYW1wbGluZ0xldmVsIG1fbWluaW11
bVN1YnNhbXBsaW5nTGV2ZWw7Ci0KLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1faW1hZ2VPcmllbnRh
dGlvbiA6IDQ7IC8vIEltYWdlT3JpZW50YXRpb25FbnVtCi0gICAgbXV0YWJsZSB1bnNpZ25lZCBt
X3Nob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uIDogMTsgLy8gUmVzcGVjdEltYWdlT3JpZW50
YXRpb25FbnVtCiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWU7IC8vIFRoZSBpbmRleCBvZiB0
aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAgVmVjdG9yPEZyYW1lRGF0YSwgMT4g
bV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQgZnJhbWVzIG9mIHRoZSBhbmltYXRp
b24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhlbSBpbiB0aGUgY2FjaGUuCiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VGltZXI+IG1fZnJhbWVUaW1lcjsKICAgICBpbnQgbV9yZXBldGl0
aW9uQ291bnQ7IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBzaG91bGQgZG8u
IFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUgaXMgaW5jYXBh
YmxlIG9mIGFuaW1hdGlvbi4KQEAgLTMyMCwyNyArMjM4LDE4IEBAIHByaXZhdGU6CiAKICAgICBD
b2xvciBtX3NvbGlkQ29sb3I7ICAvLyBJZiB3ZSdyZSBhIDF4MSBzb2xpZCBjb2xvciwgdGhpcyBp
cyB0aGUgY29sb3IgdG8gdXNlIHRvIGZpbGwuCiAKLSAgICB1bnNpZ25lZCBtX2RlY29kZWRTaXpl
OyAvLyBUaGUgY3VycmVudCBzaXplIG9mIGFsbCBkZWNvZGVkIGZyYW1lcy4KLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplOyAvLyBUaGUgc2l6ZSBvZiBkYXRhIGRl
Y29kZWQgYnkgdGhlIHNvdXJjZSB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcyAoZS5nLiBz
aXplLCBmcmFtZSBjb3VudCwgZXRjKS4KLSAgICBzaXplX3QgbV9mcmFtZUNvdW50OwotCiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXhwb3NlIGEgc2V0dGluZyB0
byBlbmFibGUvZGlzYWJsZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHJlbW92ZSB0aGUgUExBVEZPUk0o
SU9TKS1ndWFyZC4KICAgICBkb3VibGUgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua1RpbWU7CiAgICAg
dWludDE2X3QgbV9wcm9ncmVzc2l2ZUxvYWRDaHVua0NvdW50OwogI2VuZGlmCiAKLSAgICBib29s
IG1fYWxsb3dTdWJzYW1wbGluZyA6IDE7IC8vIFdoZXRoZXIgd2Ugc2hvdWxkIGF0dGVtcHQgc3Vi
c2FtcGxpbmcgaWYgdGhpcyBpbWFnZSBpcyB2ZXJ5IGxhcmdlLgotICAgIGJvb2wgbV9pc1NvbGlk
Q29sb3IgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgYSAxeDEgc29saWQgaW1hZ2UuCi0g
ICAgYm9vbCBtX2NoZWNrZWRGb3JTb2xpZENvbG9yIDogMTsgLy8gV2hldGhlciB3ZSd2ZSBjaGVj
a2VkIHRoZSBmcmFtZSBmb3Igc29saWQgY29sb3IuCi0KKyAgICBlbnVtIGNsYXNzIFRyaVN0YXRl
IHsgVW5jaGVja2VkLCBObywgWWVzIH07CisgICAgVHJpU3RhdGUgbV9zb2xpZENvbG9yVmFsdWUg
eyBUcmlTdGF0ZTo6VW5jaGVja2VkIH07CisgICAgCiAgICAgYm9vbCBtX2FuaW1hdGlvbkZpbmlz
aGVkIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UndmUgY29tcGxldGVkIHRoZSBlbnRpcmUgYW5p
bWF0aW9uLgogCiAgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZCA6IDE7IC8vIFdoZXRoZXIgb3Ig
bm90IHdlJ3ZlIHJlY2VpdmVkIGFsbCBvdXIgZGF0YS4KLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZl
U2l6ZSA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IG91ciB8bV9zaXplfCBtZW1iZXIgdmFyaWFibGUg
aGFzIHRoZSBmaW5hbCBvdmVyYWxsIGltYWdlIHNpemUgeWV0LgotICAgIGJvb2wgbV9zaXplQXZh
aWxhYmxlIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UgY2FuIG9idGFpbiB0aGUgc2l6ZSBvZiB0
aGUgZmlyc3QgaW1hZ2UgZnJhbWUgeWV0IGZyb20gSW1hZ2VJTy4KLSAgICBtdXRhYmxlIGJvb2wg
bV9oYXNVbmlmb3JtRnJhbWVTaXplIDogMTsKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXZlRnJhbWVD
b3VudCA6IDE7CiAgICAgYm9vbCBtX2FuaW1hdGlvbkZpbmlzaGVkV2hlbkNhdGNoaW5nVXAgOiAx
OwogCiAgICAgUmVmUHRyPEltYWdlPiBtX2NhY2hlZEltYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSWNvbi5oCmluZGV4IGQ5NWU3ZGViODEwZmMyNGY3ZjYxYjFiMjNhNGI5YWVm
M2YzYzE3YjcuLjI4YzEzN2QyOWIxMThhOWNmMWI2MTYxZWRlNGRlNDkxZDA0ODgzMDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JY29uLmgKQEAgLTY4LDggKzY4LDggQEAgcHVi
bGljOgogCiBwcml2YXRlOgogI2lmIFBMQVRGT1JNKElPUykKLSAgICBJY29uKENHSW1hZ2VSZWYp
OwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7CisgICAgSWNvbihOYXRpdmVJ
bWFnZVB0cik7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9jZ0ltYWdlOwogI2VsaWYgUExBVEZPUk0o
TUFDKQogICAgIEljb24oTlNJbWFnZSopOwogICAgIFJldGFpblB0cjxOU0ltYWdlPiBtX25zSW1h
Z2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA0MWZlZjJh
MmIwMzE3MGUzYjAzZmQ2YzUyYTJmZGYyODNlNTYyNzU4Li5iMTJjMGMxZWUyZmY4MTQxNDVkYWQw
YTM0NmQxYzdhNzc0YjZhNzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlLmgKQEAgLTE5NCw3ICsxOTQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBTdXBwb3J0aW5n
IHRpbGVkIGRyYXdpbmcKICAgICB2aXJ0dWFsIGJvb2wgbWF5RmlsbFdpdGhTb2xpZENvbG9yKCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIENvbG9yIHNvbGlkQ29sb3IoKSBjb25zdCB7
IHJldHVybiBDb2xvcigpOyB9CisgICAgdmlydHVhbCBDb2xvciBzb2xpZENvbG9yKCkgeyByZXR1
cm4gQ29sb3IoKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBt
X2VuY29kZWRJbWFnZURhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjI2YzRkNmViZDEzOGYyNzZjODA5
MjIwYjNjNmVmNTkzMGI2NmVjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApAQCAtMCwwICsxLDE2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgorCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK0ltYWdlRnJhbWVEYXRhOjpJbWFn
ZUZyYW1lRGF0YSgpCit7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFn
ZURlY29kZXImIGRlY29kZXIsIEltYWdlRnJhbWVJbmRleCBpbmRleCwgU3Vic2FtcGxpbmdMZXZl
bCBzdWJzYW1wbGluZ0xldmVsLCBjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCisgICAgOiBt
X2ltYWdlKGltYWdlKQorICAgICwgbV9zdWJzYW1wbGluZ0xldmVsKHN0ZDo6bWF4KHN1YnNhbXBs
aW5nTGV2ZWwsIE1pblN1YnNhbXBsaW5nTGV2ZWwpKQorICAgICwgbV9oYXZlTWV0YWRhdGEodHJ1
ZSkKK3sKKyAgICBjYWNoZU1ldGFkYXRhKGRlY29kZXIsIGluZGV4KTsKK30KKworSW1hZ2VGcmFt
ZURhdGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJJbWFnZSgpOworfQorCitib29s
IEltYWdlRnJhbWVEYXRhOjpjbGVhcihJbWFnZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hpbmcpCit7
CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBJbWFnZUZyYW1lQ2FjaGluZzo6Q2FjaGVOb25l
IHx8IGZyYW1lQ2FjaGluZyA9PSBJbWFnZUZyYW1lQ2FjaGluZzo6Q2FjaGVNZXRhZGF0YSk7Cisg
ICAgYm9vbCByZXN1bHQgPSBjbGVhckltYWdlKCk7CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGlu
ZyA9PSBJbWFnZUZyYW1lQ2FjaGluZzo6Q2FjaGVOb25lKQorICAgICAgICAqdGhpcyA9IEltYWdl
RnJhbWVEYXRhKCk7CisgICAgCisgICAgbV9mcmFtZUJ5dGVzID0gMDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorICAgIAordm9pZCBJbWFnZUZyYW1lRGF0YTo6Y2FjaGVNZXRhZGF0YShJbWFnZURl
Y29kZXImIGRlY29kZXIsIEltYWdlRnJhbWVJbmRleCBpbmRleCkKK3sKKyNpZiBVU0UoQ0cpCisg
ICAgbV9pc0NvbXBsZXRlID0gZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KTsK
KyAgICBtX2hhc0FscGhhID0gZGVjb2Rlci5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7Cisg
ICAgbV9hbGxvd1N1YnNhbXBsaW5nID0gZGVjb2Rlci5hbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0
SW5kZXgoaW5kZXgpOworICAgIAorICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9
IGNBbmltYXRpb25Ob25lKQorICAgICAgICBtX2R1cmF0aW9uID0gZGVjb2Rlci5mcmFtZUR1cmF0
aW9uQXRJbmRleChpbmRleCk7CisgICAgCisgICAgbV9vcmllbnRhdGlvbiA9IGRlY29kZXIub3Jp
ZW50YXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAKKyAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1l
U2l6ZUF0SW5kZXgoaW5kZXgsIG1fc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgaWYgKG1faW1hZ2Up
CisgICAgICAgIG1fZnJhbWVCeXRlcyA9IGRlY29kZXIuZnJhbWVCeXRlc0F0SW5kZXgoaW5kZXgs
IG1fc3Vic2FtcGxpbmdMZXZlbCk7CisjZWxzZQorICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IGRl
Y29kZXIuZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIG1faXNDb21wbGV0ZSA9ICBidWZmZXIgJiYgYnVmZmVyLT5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworICAgIG1faGFzQWxwaGEgPSBk
ZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKyAgICAKKyAgICBpZiAoZGVjb2Rl
ci5yZXBldGl0aW9uQ291bnQoKSAhPSBjQW5pbWF0aW9uTm9uZSkgeworICAgICAgICAvLyBNYW55
IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJhdGlvbiB0byBtYWtlIGFuIGltYWdlIGZsYXNo
IGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCisgICAgICAgIC8vIFdlIGZvbGxvdyBGaXJlZm94J3Mg
YmVoYXZpb3IgYW5kIHVzZSBhIGR1cmF0aW9uIG9mIDEwMCBtcyBmb3IgYW55IGZyYW1lcyB0aGF0
IHNwZWNpZnkKKyAgICAgICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8v
cHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+CisgICAgICAg
IC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICBmbG9hdCBkdXJhdGlvbiA9IGJ1ZmZl
ci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7CisgICAgICAgIG1fZHVyYXRpb24gPSAoZHVyYXRpb24g
PCAwLjAxMWYpID8gMC4xMDBmIDogZHVyYXRpb247CisgICAgfQorCisgICAgbV9vcmllbnRhdGlv
biA9IGRlY29kZXIub3JpZW50YXRpb24oKTsKKyAgICAKKyAgICBtX3NpemUgPSBkZWNvZGVyLmZy
YW1lU2l6ZUF0SW5kZXgoaW5kZXgpOworICAgIGlmIChtX2ltYWdlKQorICAgICAgICBtX2ZyYW1l
Qnl0ZXMgPSBkZWNvZGVyLmZyYW1lQnl0ZXNBdEluZGV4KGluZGV4KTsKKyNlbmRpZgorfQorICAg
IAorSW50U2l6ZSBJbWFnZUZyYW1lRGF0YTo6c2l6ZShSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVu
dW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIHNo
b3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uICYm
IG1fb3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSA/IG1fc2l6ZS50cmFuc3Bvc2VkU2l6
ZSgpIDogbV9zaXplOworfQorCitJbWFnZUZyYW1lRGF0YUJ1ZmZlcjo6SW1hZ2VGcmFtZURhdGFC
dWZmZXIoKQoreworfQorCitJbWFnZUZyYW1lRGF0YSYgSW1hZ2VGcmFtZURhdGFCdWZmZXI6Om9w
ZXJhdG9yW10oSW1hZ2VGcmFtZUluZGV4IGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBzaXpl
KCkpCisgICAgICAgIG1fZnJhbWVzLmdyb3coaW5kZXggKyAxKTsKKyAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdOworfQorCitjb25zdCBJbWFnZUZyYW1lRGF0YSYgSW1hZ2VGcmFtZURhdGFCdWZm
ZXI6Om9wZXJhdG9yW10oSW1hZ2VGcmFtZUluZGV4IGluZGV4KSBjb25zdAoreworICAgIGlmIChp
bmRleCA+PSBzaXplKCkpCisgICAgICAgIG1fZnJhbWVzLmdyb3coaW5kZXggKyAxKTsKKyAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdOworfQorICAgIAorYm9vbCBJbWFnZUZyYW1lRGF0YUJ1ZmZl
cjo6aXNGcmFtZVZhbGlkKEltYWdlRnJhbWVJbmRleCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBz
dWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hpbmcpIGNvbnN0Cit7
CisgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmIChzdWJzYW1wbGluZ0xldmVsICE9IE51bGxTdWJzYW1wbGluZ0xldmVs
ICYmIHN1YnNhbXBsaW5nTGV2ZWwgIT0gbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZl
bCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiAoZnJhbWVDYWNoaW5n
ID09IEltYWdlRnJhbWVDYWNoaW5nOjpDYWNoZU1ldGFkYXRhQW5kRnJhbWUgJiYgbV9mcmFtZXNb
aW5kZXhdLm1faW1hZ2UpCisgICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gSW1hZ2VGcmFtZUNh
Y2hpbmc6OkNhY2hlTWV0YWRhdGEgJiYgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKTsK
K30KKwordW5zaWduZWQgSW1hZ2VGcmFtZURhdGFCdWZmZXI6OmZyYW1lc0J5dGVzKEltYWdlRnJh
bWVJbmRleCBiZWZvcmVJbmRleCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0b3RhbEZyYW1lQnl0
ZXMgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RkOjptaW4oYmVmb3JlSW5kZXgs
IHNpemUoKSk7ICsraSkKKyAgICAgICAgdG90YWxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLm1f
ZnJhbWVCeXRlczsKKyAgICByZXR1cm4gdG90YWxGcmFtZUJ5dGVzOworfQorCit1bnNpZ25lZCBJ
bWFnZUZyYW1lRGF0YUJ1ZmZlcjo6cGFydGlhbEZyYW1lc0J5dGVzKEltYWdlRnJhbWVJbmRleCBi
ZWZvcmVJbmRleCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0b3RhbEZyYW1lQnl0ZXMgPSAwOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RkOjptaW4oYmVmb3JlSW5kZXgsIHNpemUoKSk7
ICsraSkgeworICAgICAgICBpZiAobV9mcmFtZXNbaV0ubV9pc0NvbXBsZXRlKQorICAgICAgICAg
ICAgdG90YWxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKKyAgICB9Cisg
ICAgcmV0dXJuIHRvdGFsRnJhbWVCeXRlczsKK30KKwordm9pZCBJbWFnZUZyYW1lRGF0YUJ1ZmZl
cjo6Y2xlYXJGcmFtZXMoSW1hZ2VGcmFtZUluZGV4IGJlZm9yZUluZGV4LCBJbWFnZUZyYW1lQ2Fj
aGluZyBmcmFtZUNhY2hpbmcpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGQ6Om1p
bihiZWZvcmVJbmRleCwgc2l6ZSgpKTsgKytpKQorICAgICAgICBtX2ZyYW1lc1tpXS5jbGVhcihm
cmFtZUNhY2hpbmcpOworfQorCit2b2lkIEltYWdlRnJhbWVEYXRhQnVmZmVyOjpjbGVhclBhcnRp
YWxGcmFtZXMoSW1hZ2VGcmFtZUluZGV4IGJlZm9yZUluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGQ6Om1pbihiZWZv
cmVJbmRleCwgc2l6ZSgpKTsgKytpKSB7CisgICAgICAgIGlmICghbV9mcmFtZXNbaV0ubV9pc0Nv
bXBsZXRlKQorICAgICAgICAgICAgbV9mcmFtZXNbaV0uY2xlYXIoZnJhbWVDYWNoaW5nKTsKKyAg
ICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxYjE3MzcyNDE3YjlhMTk4MzI5ZjAyYTJlYzAwYWY2
ZDQ5ZmQ2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lRGF0YS5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZURhdGFfaAor
I2RlZmluZSBJbWFnZUZyYW1lRGF0YV9oCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUg
IkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0
aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorLy8gU3Vic2FtcGxpbmdM
ZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBh
eGlzIGV0Yy4KK3R5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKK3R5cGVkZWYgc2l6ZV90
IEltYWdlRnJhbWVJbmRleDsKKworY29uc3QgSW1hZ2VGcmFtZUluZGV4IE1heEltYWdlRnJhbWVJ
bmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8SW1hZ2VGcmFtZUluZGV4Pjo6bWF4KCk7Citjb25z
dCBTdWJzYW1wbGluZ0xldmVsIE51bGxTdWJzYW1wbGluZ0xldmVsID0gLTE7Citjb25zdCBTdWJz
YW1wbGluZ0xldmVsIE1pblN1YnNhbXBsaW5nTGV2ZWwgPSAwOworY29uc3QgU3Vic2FtcGxpbmdM
ZXZlbCBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCA9IE1pblN1YnNhbXBsaW5nTGV2ZWw7CisKK2Vu
dW0gY2xhc3MgSW1hZ2VGcmFtZUNhY2hpbmcgeworICAgIENhY2hlTm9uZSwKKyAgICBDYWNoZU1l
dGFkYXRhLAorICAgIENhY2hlRnJhbWUsCisgICAgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lCit9Owor
CitjbGFzcyBJbWFnZURlY29kZXI7CisKK3N0cnVjdCBJbWFnZUZyYW1lRGF0YSB7CitwdWJsaWM6
CisgICAgSW1hZ2VGcmFtZURhdGEoKTsKKyAgICBJbWFnZUZyYW1lRGF0YShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYpOworICAgIEltYWdlRnJhbWVEYXRhKEltYWdlRGVjb2RlciYsIEltYWdlRnJhbWVJ
bmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgY29uc3QgTmF0aXZlSW1hZ2VQdHImID0gbnVsbHB0cik7
CisgICAgfkltYWdlRnJhbWVEYXRhKCk7CisgICAgCisgICAgYm9vbCBjbGVhcihJbWFnZUZyYW1l
Q2FjaGluZyk7CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0K
KyAgICBJbnRTaXplIHNpemUoUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7CisgICAgT3B0aW9uYWw8Q29sb3I+IHNvbGlkQ29s
b3IoKSBjb25zdDsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlIHsgbnVsbHB0ciB9
OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgRGVmYXVsdFN1YnNh
bXBsaW5nTGV2ZWwgfTsKKyAgICAKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAg
ICAgICAgICBib29sIG1faGF2ZU1ldGFkYXRhIDogMTsKKyAgICAgICAgICAgIGJvb2wgbV9pc0Nv
bXBsZXRlIDogMTsKKyAgICAgICAgICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7CisgICAgICAgICAg
ICBib29sIG1fYWxsb3dTdWJzYW1wbGluZyA6IDE7CisgICAgICAgIH07CisgICAgICAgIHVpbnQ4
X3QgbV9mbGFnc1tzaXplb2YoYm9vbCldIHsgMCB9OworICAgIH07CisKKyAgICBmbG9hdCBtX2R1
cmF0aW9uIHsgMCB9OworICAgIEltYWdlT3JpZW50YXRpb24gbV9vcmllbnRhdGlvbiB7IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uIH07CisKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICB1bnNpZ25l
ZCBtX2ZyYW1lQnl0ZXMgeyAwIH07CisgICAgCitwcml2YXRlOgorICAgIGJvb2wgY2xlYXJJbWFn
ZSgpOworICAgIHZvaWQgY2FjaGVNZXRhZGF0YShJbWFnZURlY29kZXImLCBJbWFnZUZyYW1lSW5k
ZXgpOworfTsKKworY2xhc3MgSW1hZ2VGcmFtZURhdGFCdWZmZXIgeworcHVibGljOgorICAgIElt
YWdlRnJhbWVEYXRhQnVmZmVyKCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lcy5zaXplKCk7IH0KKyAgICBJbWFnZUZyYW1lRGF0YSYgb3BlcmF0b3JbXShJ
bWFnZUZyYW1lSW5kZXgpOworICAgIGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvcGVyYXRvcltdKElt
YWdlRnJhbWVJbmRleCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBpc0ZyYW1lVmFsaWQoSW1hZ2VG
cmFtZUluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZykgY29uc3Q7Cisg
ICAgCisgICAgdW5zaWduZWQgZnJhbWVzQnl0ZXMoSW1hZ2VGcmFtZUluZGV4ID0gTWF4SW1hZ2VG
cmFtZUluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBwYXJ0aWFsRnJhbWVzQnl0ZXMoSW1hZ2VG
cmFtZUluZGV4ID0gTWF4SW1hZ2VGcmFtZUluZGV4KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGNs
ZWFyRnJhbWVzKEltYWdlRnJhbWVJbmRleCA9IE1heEltYWdlRnJhbWVJbmRleCwgSW1hZ2VGcmFt
ZUNhY2hpbmcgPSBJbWFnZUZyYW1lQ2FjaGluZzo6Q2FjaGVNZXRhZGF0YSk7CisgICAgdm9pZCBj
bGVhclBhcnRpYWxGcmFtZXMoSW1hZ2VGcmFtZUluZGV4ID0gTWF4SW1hZ2VGcmFtZUluZGV4LCBJ
bWFnZUZyYW1lQ2FjaGluZyA9IEltYWdlRnJhbWVDYWNoaW5nOjpDYWNoZU5vbmUpOworICAgIAor
cHJpdmF0ZToKKyAgICB1c2luZyBJbWFnZUZyYW1lcyA9IFZlY3RvcjxJbWFnZUZyYW1lRGF0YSwg
MT47CisgICAgbXV0YWJsZSBJbWFnZUZyYW1lcyBtX2ZyYW1lczsKK307CisgICAgCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJbWFnZUZyYW1lRGF0YV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKaW5kZXggZWQ2YjAx
N2Y0ZWZhNTQyOTA2MGY1MWU1NjQ3Y2FiNTFlMTdjNTU3YS4uMTk1MDIyN2M3ZjNjYTE1YTY2OGQw
NjY3NDczM2YwNWMxMGViOGYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaApAQCAtMzgsOCArMzgsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB+SW1hZ2VPYnNlcnZlcigpIHt9CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRl
Y29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSosIGludCBkZWx0YSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkZWNvZGVkSW1hZ2VDaGFuZ2VkKGNvbnN0IEltYWdlKikgPSAwOworICAgIAogICAg
IHZpcnR1YWwgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlKikgPSAwOwotCiAgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgPSAwOwogCiAgICAgdmlydHVhbCB2
b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0JikgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IDc0ZWYwNTNhMzMzZmY1ZmM1NzhlODE4MDBjYzZmYzk3NTVlZmJhYjguLjExYzZmOWFlMmRmZGFk
OGRlMWQwMTAyODMyYzY4ZmQ2YzUxYzJhZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYwpAQCAtMjksMjQg
KzI5LDM4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIK
IAotI2lmICFVU0UoQ0cpCi0KKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlRGVj
b2Rlci5oIgogCisjaWYgVVNFKENHKSAmJiBPUyhVTklYKQorI2luY2x1ZGUgIkltYWdlRnJhbWVE
ZWNvZGVyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRl
ICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElO
RykKLXVuc2lnbmVkIEltYWdlU291cmNlOjpzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSA9IDEw
MjQgKiAxMDI0OwotI2VuZGlmCi0KLUltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJj
ZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICA6IG1fZGVjb2Rlcigw
KQorSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlKiBpbWFnZSwgSW1hZ2VTb3VyY2U6OkFs
cGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCisgICAgOiBtX2ltYWdlKGltYWdlKQor
I2lmICFVU0UoQ0cpCiAgICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQogICAgICwgbV9n
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKKyNl
bmRpZgogeworI2lmIFVTRShDRykKKyAgICBVTlVTRURfUEFSQU0oYWxwaGFPcHRpb24pOworICAg
IFVOVVNFRF9QQVJBTShnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisjZW5kaWYKKworfQor
ICAgIAorSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKE5hdGl2ZUltYWdlUHRyIGltYWdlKQorICAg
IDogbV9mcmFtZUNvdW50KDEpCit7CisgICAgbV9mcmFtZXNbMF0gPSBJbWFnZUZyYW1lRGF0YShp
bWFnZSk7CisgICAgbV9zaXplID0gbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9mcmFt
ZXNbMF0ubV9zaXplOwogfQogCiBJbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKCkKQEAgLTU0LDE2
NiArNjgsMzAyIEBAIEltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQogICAgIGNsZWFyKHRydWUp
OwogfQogCi12b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBj
bGVhckJlZm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQordm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoSW1hZ2VGcmFtZUluZGV4IGNsZWFyQmVmb3JlRnJh
bWUsIFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAgaWYg
KCFkZXN0cm95QWxsKSB7CisgICAgLy8gUmVjZW50IHZlcnNpb25zIG9mIEltYWdlSU8gZGlzY2Fy
ZCBwcmV2aW91c2x5IGRlY29kZWQgaW1hZ2UgZnJhbWVzIGlmIHRoZSBjbGllbnQKKyAgICAvLyBh
cHBsaWNhdGlvbiBubyBsb25nZXIgaG9sZHMgcmVmZXJlbmNlcyB0byB0aGVtLCBzbyB0aGVyZSdz
IG5vIG5lZWQgdG8gdGhyb3cgYXdheQorICAgIC8vIHRoZSBkZWNvZGVyIHVubGVzcyB3ZSdyZSBl
eHBsaWNpdGx5IGFza2VkIHRvIGRlc3Ryb3kgYWxsIG9mIHRoZSBmcmFtZXMuCisgICAgaWYgKGNs
ZWFyQmVmb3JlRnJhbWUgPCBtX2ZyYW1lcy5zaXplKCkpIHsKKyNpZiAhVVNFKENHKQogICAgICAg
ICBpZiAobV9kZWNvZGVyKQogICAgICAgICAgICAgbV9kZWNvZGVyLT5jbGVhckZyYW1lQnVmZmVy
Q2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGRlbGV0ZSBtX2RlY29kZXI7Ci0gICAgbV9kZWNvZGVyID0gMDsKKyAgICBtX2RlY29k
ZXIgPSBudWxscHRyOwogICAgIGlmIChkYXRhKQogICAgICAgICBzZXREYXRhKGRhdGEsIGFsbERh
dGFSZWNlaXZlZCk7CiB9Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QK
KyAgICAKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyRnJhbWVzKEltYWdlRnJhbWVJbmRleCBjbGVh
ckJlZm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQog
ewotICAgIHJldHVybiBtX2RlY29kZXI7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJh
bWVzLmZyYW1lc0J5dGVzKGNsZWFyQmVmb3JlRnJhbWUpOworICAgIG1fZnJhbWVzLmNsZWFyRnJh
bWVzKGNsZWFyQmVmb3JlRnJhbWUpOworICAgIGNsZWFyKGNsZWFyQmVmb3JlRnJhbWUsIGRhdGEs
IGFsbERhdGFSZWNlaXZlZCk7CisgICAgZGVjb2RlZFNpemVEZWNyZW1lbnRlZChmcmFtZUJ5dGVz
LCBDbGVhcmVkRnJhbWVzOjpBbGwpOworfQorICAgIAordm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXJQ
YXJ0aWFsRnJhbWVzKEltYWdlRnJhbWVJbmRleCBjbGVhckJlZm9yZUZyYW1lKQoreworICAgIHVu
c2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lcy5wYXJ0aWFsRnJhbWVzQnl0ZXMoY2xlYXJCZWZv
cmVGcmFtZSk7CisgICAgbV9mcmFtZXMuY2xlYXJQYXJ0aWFsRnJhbWVzKCk7CisgICAgZGVjb2Rl
ZFNpemVEZWNyZW1lbnRlZChmcmFtZUJ5dGVzKTsKK30KKyAgICAKK3ZvaWQgSW1hZ2VTb3VyY2U6
OmVuc3VyZURlY29kZXJJc0NyZWF0ZWQoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIGlmICht
X2RlY29kZXIpCisgICAgICAgIHJldHVybjsKKyNpZiBVU0UoQ0cpCisgICAgVU5VU0VEX1BBUkFN
KGRhdGEpOworI2lmIE9TKFVOSVgpCisgICAgbV9kZWNvZGVyID0gbmV3IEltYWdlRnJhbWVEZWNv
ZGVyKCp0aGlzLCBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCk7CisjZWxzZQorICAgIG1fZGVjb2Rl
ciA9IG5ldyBJbWFnZURlY29kZXIoKTsKKyNlbmRpZgorI2Vsc2UKKyAgICBtX2RlY29kZXIgPSBz
dGF0aWNfY2FzdDxOYXRpdmVJbWFnZURlY29kZXJQdHI+KE5hdGl2ZUltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7
CisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBpZiAobV9kZWNv
ZGVyKQorICAgICAgICBtX2RlY29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVsc1BlckRl
Y29kZWRJbWFnZSk7CisjZW5kaWYKKyNlbmRpZgorICAgIAogfQogCiB2b2lkIEltYWdlU291cmNl
OjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0g
ICAgLy8gTWFrZSB0aGUgZGVjb2RlciBieSBzbmlmZmluZyB0aGUgYnl0ZXMuCi0gICAgLy8gVGhp
cyBtZXRob2Qgd2lsbCBleGFtaW5lIHRoZSBkYXRhIGFuZCBpbnN0YW50aWF0ZSBhbiBpbnN0YW5j
ZSBvZiB0aGUgYXBwcm9wcmlhdGUgZGVjb2RlciBwbHVnaW4uCi0gICAgLy8gSWYgaW5zdWZmaWNp
ZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBk
ZWNvZGVyIHBsdWdpbiB3aWxsIGJlCi0gICAgLy8gbWFkZS4KKyAgICBpZiAoIWRhdGEpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBlbnN1cmVEZWNvZGVySXNDcmVhdGVkKGRhdGEpOwogICAg
IGlmICghbV9kZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVjb2RlciA9IHN0YXRpY19jYXN0PE5hdGl2
ZUltYWdlRGVjb2RlclB0cj4oTmF0aXZlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxw
aGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKLSNpZiBFTkFCTEUoSU1B
R0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgICAgICBpZiAobV9kZWNvZGVyICYmIHNfbWF4
UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQotICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRNYXhOdW1Q
aXhlbHMoc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpOwotI2VuZGlmCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIAorICAgIG1fZGVj
b2Rlci0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQogCi0gICAgaWYgKG1fZGVj
b2RlcikKLSAgICAgICAgbV9kZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7
Cit2b2lkIEltYWdlU291cmNlOjpkZWNvZGVkU2l6ZUluY3JlbWVudGVkKHVuc2lnbmVkIGRlY29k
ZWRTaXplKSBjb25zdAoreworICAgIC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vi
c3VtZSB0aGUgcGFydGlhbGx5IGRlY29kZWQgZGF0YSB1c2VkCisgICAgLy8gdG8gZGV0ZXJtaW5l
IGltYWdlIHByb3BlcnRpZXMuCisgICAgaW50IGNoYW5nZVNpemUgPSBkZWNvZGVkU2l6ZSAtIG1f
ZGVjb2RlZFByb3BlcnRpZXNTaXplOworICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsK
KyAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoY2hhbmdlU2l6ZSk7CiB9CiAKLVN0cmluZyBJbWFnZVNv
dXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAordm9pZCBJbWFnZVNvdXJjZTo6ZGVjb2Rl
ZFNpemVEZWNyZW1lbnRlZCh1bnNpZ25lZCBkZWNvZGVkU2l6ZSwgQ2xlYXJlZEZyYW1lcyBjbGVh
cmVkRnJhbWVzKSBjb25zdAogewotICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZp
bGVuYW1lRXh0ZW5zaW9uKCkgOiBTdHJpbmcoKTsKKyAgICAvLyBDbGVhcmluZyB0aGUgSW1hZ2VT
b3VyY2UgZGVzdHJveXMgdGhlIGV4dHJhIGRlY29kZWQgZGF0YSB1c2VkIGZvciBkZXRlcm1pbmlu
ZyBpbWFnZSBwcm9wZXJ0aWVzLgorICAgIGlmIChjbGVhcmVkRnJhbWVzID09IENsZWFyZWRGcmFt
ZXM6OkFsbCkgeworICAgICAgICBkZWNvZGVkU2l6ZSArPSBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZTsKKyAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgPSAwOworICAgIH0KKyAgICAKKyAg
ICBpZiAoIWRlY29kZWRTaXplKQorICAgICAgICByZXR1cm47CisgICAgZGVjb2RlZFNpemVDaGFu
Z2VkKC1zYWZlQ2FzdDxpbnQ+KGRlY29kZWRTaXplKSk7CiB9CiAKLVN1YnNhbXBsaW5nTGV2ZWwg
SW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCkgY29uc3QKK3ZvaWQg
SW1hZ2VTb3VyY2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogewotICAgIHJldHVybiAw
OworICAgIC8vIFRoaXMgY2hlY2sgd2lsbCBwcmV2ZW50IGNhbGxzIGZyb20gcHJvY2VlZGluZyBp
ZiB0aGUgZmlyc3QgZnJhbWUgd2FzIGZ1bGx5IGRlY29kZWQuCisgICAgaWYgKG1fZnJhbWVzLmZy
YW1lc0J5dGVzKCkgfHwgbV9kZWNvZGVkUHJvcGVydGllc1NpemUpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IGJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5lUHJv
cGVydGllcygpOworICAgIGRlY29kZWRTaXplQ2hhbmdlZChtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSk7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRl
eChzaXplX3QpIGNvbnN0Cit2b2lkIEltYWdlU291cmNlOjpkZWNvZGVkU2l6ZUNoYW5nZWQoaW50
IGRlY29kZWRTaXplKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1faW1h
Z2UgfHwgIW1faW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
aW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKG1faW1hZ2UsIGRlY29k
ZWRTaXplKTsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKK3ZvaWQg
SW1hZ2VTb3VyY2U6OmRlY29kZWRJbWFnZUNoYW5nZWQoKSBjb25zdAogewotICAgIHJldHVybiBt
X2RlY29kZXIgJiYgbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKKyAgICBpZiAoIW1faW1h
Z2UgfHwgIW1faW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
aW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZEltYWdlQ2hhbmdlZChtX2ltYWdlKTsKIH0K
IAotSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24pIGNvbnN0CitTdWJzYW1wbGluZ0xldmVsIEltYWdlU291cmNlOjpjYWxjdWxh
dGVNYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZyYW1lU2l6
ZUF0SW5kZXgoMCwgMCwgZGVzY3JpcHRpb24pOworICAgIGlmICghbV9hbGxvd1N1YnNhbXBsaW5n
IHx8ICFhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoMCkpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIC8vIFZhbHVlcyBjaG9zZW4gdG8gYmUgYXBwcm9wcmlhdGUgZm9yIGlPUy4K
KyAgICBjb25zdCBpbnQgY01heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZyA9IDUgKiAx
MDI0ICogMTAyNDsKKyAgICBjb25zdCBTdWJzYW1wbGluZ0xldmVsIG1heFN1YnNhbXBsaW5nTGV2
ZWwgPSAzOworICAgIAorICAgIFN1YnNhbXBsaW5nTGV2ZWwgY3VycmVudExldmVsID0gMDsKKyAg
ICBmb3IgKCA7IGN1cnJlbnRMZXZlbCA8PSBtYXhTdWJzYW1wbGluZ0xldmVsOyArK2N1cnJlbnRM
ZXZlbCkgeworICAgICAgICBJbnRTaXplIGZyYW1lU2l6ZSA9IGZyYW1lU2l6ZUF0SW5kZXgoMCwg
Y3VycmVudExldmVsKTsKKyAgICAgICAgaWYgKGZyYW1lU2l6ZS5hcmVhKCkgPCBjTWF4aW11bUlt
YWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5nKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIHJldHVybiBjdXJyZW50TGV2ZWw7CiB9CiAKLUludFNpemUgSW1hZ2VTb3VyY2U6OmZy
YW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIGNvbnN0Citib29sIEltYWdlU291cmNlOjpp
c1NpemVBdmFpbGFibGUoKSBjb25zdAogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOworICAgIGlmICghbV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgaWYgKCFpbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBJbnRTaXplIHNpemUgPSBtX2RlY29kZXItPmZyYW1lU2l6ZUF0SW5kZXgo
aW5kZXgpOwotICAgIGlmICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9
PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgJiYgbV9kZWNvZGVyLT5vcmllbnRhdGlvbigpLnVz
ZXNXaWR0aEFzSGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKHNpemUuaGVpZ2h0KCks
IHNpemUud2lkdGgoKSk7CisgICAgaWYgKCFtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2l6ZTsKKyAgICBkaWREZWNvZGVQ
cm9wZXJ0aWVzKCk7CisgICAgbV9mcmFtZUNvdW50ID0gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCk7
CisgICAgcmV0dXJuIHRydWU7CiB9Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50
UG9pbnQmIGhvdFNwb3QpIGNvbnN0CisgICAgCit2b2lkIEltYWdlU291cmNlOjpjYWNoZU1ldGFk
YXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5ob3RTcG90
KGhvdFNwb3QpIDogZmFsc2U7CisgICAgaWYgKCFtX3NpemUuaXNFbXB0eSgpIHx8ICFpc1NpemVB
dmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc2l6ZSA9IGZyYW1lU2l6
ZUF0SW5kZXgoMCwgMCk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gZnJhbWVT
aXplQXRJbmRleCgwLCAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7CisgICAgCisjaWYgUExB
VEZPUk0oSU9TKQorICAgIG1fbWF4aW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBjYWxjdWxhdGVNYXhp
bXVtU3Vic2FtcGxpbmdMZXZlbCgpOworI2VuZGlmCisgICAgbV9yZXBldGl0aW9uQ291bnQgPSBt
X2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOworICAgIG1fZmlsZW5hbWVFeHRlbnNpb24gPSBt
X2RlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CiB9CiAKLXNpemVfdCBJbWFnZVNvdXJjZTo6
Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKK1N1YnNhbXBsaW5nTGV2
ZWwgSW1hZ2VTb3VyY2U6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSkgY29u
c3QKIHsKKyNpZiBVU0UoQ0cpCisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6c3Vic2FtcGxpbmdM
ZXZlbEZvclNjYWxlKHNjYWxlLCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHNjYWxlKTsKICAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCi1pbnQg
SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCitzaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVz
RGVjb2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGVj
b2RlciA/IG1fZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkgOiBjQW5pbWF0aW9uTm9uZTsKKyNp
ZiBVU0UoQ0cpCisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1p
bmVQcm9wZXJ0aWVzKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLXNpemVf
dCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0Citib29sIEltYWdlU291cmNlOjpnZXRI
b3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdAogewotICAgIHJldHVybiBtX2RlY29kZXIg
PyBtX2RlY29kZXItPmZyYW1lQ291bnQoKSA6IDA7CisgICAgaWYgKCFpbml0aWFsaXplZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZGlkRGVjb2RlUHJvcGVydGllcygpOwor
ICAgIHJldHVybiBtX2RlY29kZXItPmhvdFNwb3QoaG90U3BvdCk7CiB9Ci0KLVBhc3NOYXRpdmVJ
bWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCkKKyAgICAKK1Bhc3NOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgoSW1hZ2VGcmFtZUluZGV4IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAg
ICAgIHJldHVybiAwOworICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisjaWYgVVNFKENHKQorICAgICAgICByZXR1cm4gbV9kZWNvZGVyLT5jcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzdWJzYW1wbGluZ0xldmVsKTsKIAogICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1f
ZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKICAgICBpZiAoIWJ1ZmZlciB8fCBi
dWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIFplcm8taGVpZ2h0IGltYWdl
cyBjYW4gY2F1c2UgcHJvYmxlbXMgZm9yIHNvbWUgcG9ydHMuICBJZiB3ZSBoYXZlIGFuCisgICAg
Ly8gWmVyby1oZWlnaHQgaW1hZ2VzIGNhbiBjYXVzZSBwcm9ibGVtcyBmb3Igc29tZSBwb3J0cy4g
SWYgd2UgaGF2ZSBhbgogICAgIC8vIGVtcHR5IGltYWdlIGRpbWVuc2lvbiwganVzdCBiYWlsLgog
ICAgIGlmIChzaXplKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBidWZmZXIgY29udGVu
dHMgYXMgYSBuYXRpdmUgaW1hZ2UuICBGb3Igc29tZSBwb3J0cywgdGhlIGRhdGEKICAgICAvLyBp
cyBhbHJlYWR5IGluIGEgbmF0aXZlIGNvbnRhaW5lciwgYW5kIHRoaXMganVzdCBpbmNyZW1lbnRz
IGl0cyByZWZjb3VudC4KICAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7Cisj
ZW5kaWYKIH0KIAotZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVf
dCBpbmRleCkKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNhY2hlRnJhbWVBdEluZGV4KEltYWdlRnJhbWVJ
bmRleCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1l
Q2FjaGluZyBmcmFtZUNhY2hpbmcpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RlY29kZXIpCi0gICAg
ICAgIHJldHVybiAwOworICAgIEFTU0VSVChpbml0aWFsaXplZCgpKTsKKyAgICBBU1NFUlQoaW5k
ZXggPCBmcmFtZUNvdW50KCkpOwogCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9kZWNvZGVy
LT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+
c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBudWxscHRyOworICAgIGlmIChmcmFtZUNhY2hpbmcg
PT0gSW1hZ2VGcmFtZUNhY2hpbmc6OkNhY2hlTWV0YWRhdGFBbmRGcmFtZSkKKyAgICAgICAgaW1h
Z2UgPSBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CiAK
LSAgICAvLyBNYW55IGFubm95aW5nIGFkcyBzcGVjaWZ5IGEgMCBkdXJhdGlvbiB0byBtYWtlIGFu
IGltYWdlIGZsYXNoIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCi0gICAgLy8gV2UgZm9sbG93IEZp
cmVmb3gncyBiZWhhdmlvciBhbmQgdXNlIGEgZHVyYXRpb24gb2YgMTAwIG1zIGZvciBhbnkgZnJh
bWVzIHRoYXQgc3BlY2lmeQotICAgIC8vIGEgZHVyYXRpb24gb2YgPD0gMTAgbXMuIFNlZSA8cmRh
cjovL3Byb2JsZW0vNzY4OTMwMD4gYW5kIDxodHRwOi8vd2Via2l0Lm9yZy9iLzM2MDgyPgotICAg
IC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgIGNvbnN0IGZsb2F0IGR1cmF0aW9uID0gYnVm
ZmVyLT5kdXJhdGlvbigpIC8gMTAwMC4wZjsKLSAgICBpZiAoZHVyYXRpb24gPCAwLjAxMWYpCi0g
ICAgICAgIHJldHVybiAwLjEwMGY7Ci0gICAgcmV0dXJuIGR1cmF0aW9uOworICAgIG1fZnJhbWVz
W2luZGV4XSA9IEltYWdlRnJhbWVEYXRhKCptX2RlY29kZXIsIGluZGV4LCBzdWJzYW1wbGluZ0xl
dmVsLCBpbWFnZSk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQorICAgICAgICBk
ZWNvZGVkU2l6ZUluY3JlbWVudGVkKG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMpOwogfQog
Ci1JbWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90
KSBjb25zdAorY29uc3QgSW1hZ2VGcmFtZURhdGEqIEltYWdlU291cmNlOjpmcmFtZUF0SW5kZXgo
SW1hZ2VGcmFtZUluZGV4IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWws
IEltYWdlRnJhbWVDYWNoaW5nIGZyYW1lQ2FjaGluZykgY29uc3QKIHsKLSAgICByZXR1cm4gbV9k
ZWNvZGVyID8gbV9kZWNvZGVyLT5vcmllbnRhdGlvbigpIDogRGVmYXVsdEltYWdlT3JpZW50YXRp
b247CisgICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgCisjaWYgVVNFKENHKQorICAgIGlmIChpbml0aWFsaXplZCgpICYmIG1fZGVjb2Rl
ci0+aXNBc3luY0RlY29kaW5nKCkpCisgICAgICAgIHJldHVybiBpbmRleCA8IG1fZnJhbWVzLnNp
emUoKSA/ICZtX2ZyYW1lc1tpbmRleF0gOiBudWxscHRyOworI2VuZGlmCisgICAgCisgICAgLy8g
V2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0aCBhIGhpZ2hlciBzdWJzYW1wbGluZyBsZXZl
bCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCisgICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dl
ciBsZXZlbC4KKyAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgIW1fZnJhbWVzLmlz
RnJhbWVWYWxpZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgZnJhbWVDYWNoaW5nKSkgeworICAg
ICAgICAvLyBJZiB0aGUgaW1hZ2UgaXMgYWxyZWFkeSBjYWNoZWQsIGJ1dCBhdCB0b28gc21hbGwg
YSBzaXplLCByZS1kZWNvZGUgYSBsYXJnZXIgdmVyc2lvbi4KKyAgICAgICAgdW5zaWduZWQgZnJh
bWVCeXRlcyA9IG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7CisgICAgICAgIG1fZnJhbWVz
W2luZGV4XS5jbGVhcihJbWFnZUZyYW1lQ2FjaGluZzo6Q2FjaGVOb25lKTsKKyAgICAgICAgZGVj
b2RlZFNpemVEZWNyZW1lbnRlZChmcmFtZUJ5dGVzKTsKKyAgICB9CisKKyAgICBpZiAoIW1fZnJh
bWVzLmlzRnJhbWVWYWxpZChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgZnJhbWVDYWNoaW5nKSkK
KyAgICAgICAgY2FjaGVGcmFtZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGZyYW1l
Q2FjaGluZyk7CisKKyAgICByZXR1cm4gaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgPyAmbV9mcmFt
ZXNbaW5kZXhdIDogbnVsbHB0cjsKIH0KIAotYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBo
YUF0SW5kZXgoc2l6ZV90IGluZGV4KQorYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRl
QXRJbmRleChJbWFnZUZyYW1lSW5kZXggaW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RlY29k
ZXIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX2RlY29kZXItPmZyYW1lSGFz
QWxwaGFBdEluZGV4KGluZGV4KTsKKyAgICBjb25zdCBJbWFnZUZyYW1lRGF0YSogZnJhbWUgPSBm
cmFtZUF0SW5kZXgoaW5kZXgsIE51bGxTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGlu
Zzo6Q2FjaGVNZXRhZGF0YSk7CisgICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5tX2lzQ29tcGxl
dGU7CiB9CiAKLWJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90
IGluZGV4KQorYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoSW1hZ2VGcmFt
ZUluZGV4IGluZGV4KSBjb25zdAogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY29uc3QgSW1hZ2VGcmFtZURhdGEqIGZyYW1lID0gZnJhbWVBdEluZGV4
KGluZGV4LCBOdWxsU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmc6OkNhY2hlTWV0
YWRhdGEpOworICAgIHJldHVybiBmcmFtZSAmJiBmcmFtZS0+bV9oYXNBbHBoYTsKK30KKyAgICAK
K2Jvb2wgSW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChJbWFnZUZy
YW1lSW5kZXggaW5kZXgpIGNvbnN0Cit7CisgICAgY29uc3QgSW1hZ2VGcmFtZURhdGEqIGZyYW1l
ID0gZnJhbWVBdEluZGV4KGluZGV4LCBOdWxsU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmc6OkNhY2hlTWV0YWRhdGEpOworICAgIHJldHVybiBmcmFtZSAmJiBmcmFtZS0+bV9hbGxv
d1N1YnNhbXBsaW5nOworfQogCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9kZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworZmxvYXQgSW1hZ2VTb3VyY2U6
OmZyYW1lRHVyYXRpb25BdEluZGV4KEltYWdlRnJhbWVJbmRleCBpbmRleCkgY29uc3QKK3sKKyAg
ICBjb25zdCBJbWFnZUZyYW1lRGF0YSogZnJhbWUgPSBmcmFtZUF0SW5kZXgoaW5kZXgsIE51bGxT
dWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZzo6Q2FjaGVNZXRhZGF0YSk7CisgICAg
cmV0dXJuIGZyYW1lID8gZnJhbWUtPm1fZHVyYXRpb24gOiAwOworfQorICAgIAorSW1hZ2VPcmll
bnRhdGlvbiBJbWFnZVNvdXJjZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoSW1hZ2VGcmFtZUlu
ZGV4IGluZGV4KSBjb25zdAoreworICAgIGNvbnN0IEltYWdlRnJhbWVEYXRhKiBmcmFtZSA9IGZy
YW1lQXRJbmRleChpbmRleCwgTnVsbFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVDYWNoaW5n
OjpDYWNoZU1ldGFkYXRhKTsKKyAgICByZXR1cm4gZnJhbWUgPyBmcmFtZS0+bV9vcmllbnRhdGlv
biA6IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOwogfQogCi11bnNpZ25lZCBJbWFnZVNvdXJjZTo6
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsKSBjb25zdAor
SW50U2l6ZSBJbWFnZVNvdXJjZTo6ZnJhbWVTaXplQXRJbmRleChJbWFnZUZyYW1lSW5kZXggaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgUmVzcGVjdEltYWdlT3JpZW50
YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdAogewotICAgIGlm
ICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9kZWNvZGVyLT5m
cmFtZUJ5dGVzQXRJbmRleChpbmRleCk7CisgICAgY29uc3QgSW1hZ2VGcmFtZURhdGEqIGZyYW1l
ID0gZnJhbWVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGlu
Zzo6Q2FjaGVNZXRhZGF0YSk7CisgICAgcmV0dXJuIGZyYW1lID8gZnJhbWUtPnNpemUoc2hvdWxk
UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIDogSW50U2l6ZSgpOwogfQogCit1bnNpZ25lZCBJbWFn
ZVNvdXJjZTo6ZnJhbWVCeXRlc0F0SW5kZXgoSW1hZ2VGcmFtZUluZGV4IGluZGV4LCBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Cit7CisgICAgY29uc3QgSW1hZ2VGcmFt
ZURhdGEqIGZyYW1lID0gZnJhbWVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFn
ZUZyYW1lQ2FjaGluZzo6Q2FjaGVNZXRhZGF0YSk7CisgICAgcmV0dXJuIGZyYW1lID8gZnJhbWUt
Pm1fZnJhbWVCeXRlcyA6IDA7Cit9CisgICAgCiB9CiAKLSNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRleCBhY2Rk
MWNlNGNlMzAwZGU4MWM5ZTA2MmVlZTc2MDdiZjQ3MmE3MGFmLi45ZmJmOWMyYzA5ZDUyODM4OTlk
NzE2NWU0MDNhNTg2ODhmNzUyNzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSwgSW5j
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTIgKzI3LDE0IEBACiAjaWZuZGVmIEltYWdlU291
cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEu
aCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQ
dHIuaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiAjaWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZVNvdXJjZSogQ0dJ
bWFnZVNvdXJjZVJlZjsKQEAgLTQxLDIzICs0MywxNSBAQCB0eXBlZGVmIGNvbnN0IHN0cnVjdCBf
X0NGRGF0YSogQ0ZEYXRhUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdl
OwogY2xhc3MgSW1hZ2VPcmllbnRhdGlvbjsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6
ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotI2lmIFVTRShDRykKLXR5cGVkZWYgQ0dJbWFnZVNv
dXJjZVJlZiBOYXRpdmVJbWFnZURlY29kZXJQdHI7Ci0jZWxzZQogY2xhc3MgSW1hZ2VEZWNvZGVy
OwogdHlwZWRlZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlRGVjb2RlclB0cjsKLSNlbmRpZgot
Ci0jaWYgVVNFKENHKQotI2RlZmluZSBOYXRpdmVJbWFnZURlY29kZXIgSW1hZ2VEZWNvZGVyCi0j
ZWxzZQogdHlwZWRlZiBJbWFnZURlY29kZXIgTmF0aXZlSW1hZ2VEZWNvZGVyOwotI2VuZGlmCiAK
IC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0
aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFuZCB0aGUg
Y29uc3RhbnRzIGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KQEAgLTc3LDkg
KzcxLDYgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IDA7CiBjb25zdCBpbnQgY0Fu
aW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29uc3QgaW50IGNBbmltYXRpb25Ob25lID0gLTI7
CiAKLS8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBk
aW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCi10eXBlZGVmIHNob3J0IFN1YnNhbXBsaW5nTGV2
ZWw7Ci0KIGNsYXNzIEltYWdlU291cmNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFn
ZVNvdXJjZSk7CiBwdWJsaWM6CkBAIC05Myw3ICs4NCw4IEBAIHB1YmxpYzoKICAgICAgICAgR2Ft
bWFBbmRDb2xvclByb2ZpbGVJZ25vcmVkCiAgICAgfTsKIAotICAgIEltYWdlU291cmNlKEFscGhh
T3B0aW9uIGFscGhhT3B0aW9uID0gQWxwaGFQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9m
aWxlQXBwbGllZCk7CisgICAgSW1hZ2VTb3VyY2UoSW1hZ2UqLCBBbHBoYU9wdGlvbiA9IEFscGhh
UHJlbXVsdGlwbGllZCwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9y
UHJvZmlsZUFwcGxpZWQpOworICAgIEltYWdlU291cmNlKE5hdGl2ZUltYWdlUHRyKTsKICAgICB+
SW1hZ2VTb3VyY2UoKTsKIAogICAgIC8vIFRlbGxzIHRoZSBJbWFnZVNvdXJjZSB0aGF0IHRoZSBJ
bWFnZSBubyBsb25nZXIgY2FyZXMgYWJvdXQgZGVjb2RlZCBmcmFtZQpAQCAtMTEwLDY3ICsxMDIs
OTIgQEAgcHVibGljOgogICAgIC8vIGRlY29kZWQgZnJhbWVzLgogICAgIC8vCiAgICAgLy8gQ2Fs
bGVycyBzaG91bGQgbm90IGNhbGwgY2xlYXIoZmFsc2UsIG4pIGFuZCBzdWJzZXF1ZW50bHkgY2Fs
bAotICAgIC8vIGNyZWF0ZUZyYW1lQXRJbmRleChtKSB3aXRoIG0gPCBuLCB1bmxlc3MgdGhleSBm
aXJzdCBjYWxsIGNsZWFyKHRydWUpLgorICAgIC8vIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KG0p
IHdpdGggbSA8IG4sIHVubGVzcyB0aGV5IGZpcnN0IGNhbGwgY2xlYXIodHJ1ZSkuCiAgICAgLy8g
VGhpcyBlbnN1cmVzIHRoYXQgc3RhdGVmdWwgSW1hZ2VTb3VyY2VzL2RlY29kZXJzIHdpbGwgd29y
ayBwcm9wZXJseS4KICAgICAvLwogICAgIC8vIFRoZSB8ZGF0YXwgYW5kIHxhbGxEYXRhUmVjZWl2
ZWR8IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHN1cHBsaWVkIGJ5IGNhbGxlcnMKICAgICAvLyB3aG8g
c2V0IHxkZXN0cm95QWxsfCB0byB0cnVlIGlmIHRoZXkgd2lzaCB0byBiZSBhYmxlIHRvIGNvbnRp
bnVlIHVzaW5nCiAgICAgLy8gdGhlIEltYWdlU291cmNlLiAgVGhpcyB3YXkgaW1wbGVtZW50YXRp
b25zIHdoaWNoIGNob29zZSB0byBkZXN0cm95IHRoZWlyCiAgICAgLy8gZGVjb2RlcnMgaW4gc29t
ZSBjYXNlcyBjYW4gcmVjb25zdHJ1Y3QgdGhlbSBjb3JyZWN0bHkuCi0gICAgdm9pZCBjbGVhcihi
b29sIGRlc3Ryb3lBbGwsCi0gICAgICAgICAgICAgICBzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSA9
IDAsCi0gICAgICAgICAgICAgICBTaGFyZWRCdWZmZXIqIGRhdGEgPSBOVUxMLAotICAgICAgICAg
ICAgICAgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZSk7CisgICAgdm9pZCBjbGVhcihJbWFn
ZUZyYW1lSW5kZXggY2xlYXJCZWZvcmVGcmFtZSA9IE1heEltYWdlRnJhbWVJbmRleCwgU2hhcmVk
QnVmZmVyKiBkYXRhID0gbnVsbHB0ciwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZSk7Cisg
ICAgdm9pZCBjbGVhckZyYW1lcyhJbWFnZUZyYW1lSW5kZXggPSBNYXhJbWFnZUZyYW1lSW5kZXgs
IFNoYXJlZEJ1ZmZlciogPSBudWxscHRyLCBib29sIGFsbERhdGFSZWNlaXZlZCA9IGZhbHNlKTsK
KyAgICB2b2lkIGNsZWFyUGFydGlhbEZyYW1lcyhJbWFnZUZyYW1lSW5kZXggY2xlYXJCZWZvcmVG
cmFtZSA9IE1heEltYWdlRnJhbWVJbmRleCk7CiAKLSAgICBib29sIGluaXRpYWxpemVkKCkgY29u
c3Q7CisgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVjb2RlcjsgfQog
CiAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpOwotICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0OwotCi0gICAgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsRm9yU2NhbGUoZmxvYXQpIGNvbnN0OwotICAgIGJv
b2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRBbGxvd1N1YnNhbXBsaW5nKGJvb2wgYWxsb3dTdWJzYW1wbGluZykgeyBtX2FsbG93U3Vi
c2FtcGxpbmcgPSBhbGxvd1N1YnNhbXBsaW5nOyB9CiAKLSAgICBib29sIGlzU2l6ZUF2YWlsYWJs
ZSgpOwotICAgIC8vIEFsd2F5cyBvcmlnaW5hbCBzaXplLCB3aXRob3V0IHN1YnNhbXBsaW5nLgot
ICAgIEludFNpemUgc2l6ZShJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gPSBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24oKSkgY29uc3Q7Ci0gICAgLy8gU2l6ZSBvZiBvcHRpb25hbGx5IHN1
YnNhbXBsZWQgZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vi
c2FtcGxpbmdMZXZlbCA9IDAsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiA9IEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbigpKSBjb25zdDsKLQotICAgIGJvb2wgZ2V0SG90U3BvdChJbnRQ
b2ludCYpIGNvbnN0OworICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgSW50
U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gY2FjaGVNZXRhZGF0YSgpLCBtX3NpemU7IH0KKyAg
ICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBjYWNo
ZU1ldGFkYXRhKCksIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsgfQogCisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIGNhY2hl
TWV0YWRhdGEoKSwgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbDsgfQorICAgIFN1YnNhbXBsaW5n
TGV2ZWwgc3Vic2FtcGxpbmdMZXZlbEZvclNjYWxlKGZsb2F0KSBjb25zdDsKICAgICBzaXplX3Qg
Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3Q7CiAKLSAgICBpbnQgcmVw
ZXRpdGlvbkNvdW50KCk7Ci0KLSAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0OworICAgIHNp
emVfdCBmcmFtZUNvdW50KCkgY29uc3QgeyByZXR1cm4gaXNTaXplQXZhaWxhYmxlKCkgPyBtX2Zy
YW1lQ291bnQgOiAwOyB9CisgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IGNhY2hlTWV0YWRhdGEoKSwgbV9yZXBldGl0aW9uQ291bnQ7IH0KKyAgICBTdHJpbmcgZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBjYWNoZU1ldGFkYXRhKCksIG1fZmlsZW5hbWVF
eHRlbnNpb247IH0KKyAgICBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdDsKIAotICAg
IC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdp
dGggYSBoaWdoZXIgaW5kZXg7Ci0gICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUu
Ci0gICAgUGFzc05hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QsIFN1YnNh
bXBsaW5nTGV2ZWwgPSAwKTsKKyAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFn
ZUF0SW5kZXgoSW1hZ2VGcmFtZUluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7Cisg
ICAgY29uc3QgSW1hZ2VGcmFtZURhdGEqIGZyYW1lQXRJbmRleChJbWFnZUZyYW1lSW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgPSAwLCBJbWFnZUZyYW1lQ2FjaGluZyA9IEltYWdlRnJhbWVDYWNoaW5n
OjpDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIGNvbnN0OwogCi0gICAgZmxvYXQgZnJhbWVEdXJhdGlv
bkF0SW5kZXgoc2l6ZV90KTsKLSAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7
IC8vIFdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBhY3R1YWxseSB1c2VkIGFueSBhbHBoYS4KLSAg
ICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KTsgLy8gV2hldGhlciBvciBub3Qg
dGhlIGZyYW1lIGlzIGNvbXBsZXRlbHkgZGVjb2RlZC4KLSAgICBJbWFnZU9yaWVudGF0aW9uIG9y
aWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OyAvLyBFWElGIGltYWdlIG9yaWVudGF0aW9u
CisgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KEltYWdlRnJhbWVJbmRleCkgY29uc3Q7
CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChJbWFnZUZyYW1lSW5kZXgpIGNvbnN0Owor
ICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KEltYWdlRnJhbWVJbmRleCkg
Y29uc3Q7CisgICAgCisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoSW1hZ2VGcmFtZUlu
ZGV4KSBjb25zdDsKKyAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4
KEltYWdlRnJhbWVJbmRleCkgY29uc3Q7CiAKLSAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBi
eXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1lIGlzIG5vdCB5ZXQKLSAgICAv
LyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgo
c2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoSU1BR0Vf
REVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhQaXhlbHNQZXJE
ZWNvZGVkSW1hZ2UoKSB7IHJldHVybiBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZTsgfQotICAg
IHN0YXRpYyB2b2lkIHNldE1heFBpeGVsc1BlckRlY29kZWRJbWFnZSh1bnNpZ25lZCBtYXhQaXhl
bHMpIHsgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UgPSBtYXhQaXhlbHM7IH0KLSNlbmRpZgor
ICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChJbWFnZUZyYW1lSW5kZXgsIFN1YnNhbXBsaW5n
TGV2ZWwgPSAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChJbWFn
ZUZyYW1lSW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBjb25zdDsKIAorICAgIG11dGFibGUg
SW1hZ2VGcmFtZURhdGFCdWZmZXIgbV9mcmFtZXM7CisgICAgCiBwcml2YXRlOgotICAgIE5hdGl2
ZUltYWdlRGVjb2RlclB0ciBtX2RlY29kZXI7Ci0KLSNpZiAhVVNFKENHKQotICAgIEFscGhhT3B0
aW9uIG1fYWxwaGFPcHRpb247Ci0gICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbjsKKyAgICBmcmllbmQgY2xhc3MgSW1hZ2VGcmFtZURlY29k
ZXI7CisgICAgCisgICAgdm9pZCBlbnN1cmVEZWNvZGVySXNDcmVhdGVkKFNoYXJlZEJ1ZmZlciop
OworICAgIHZvaWQgY2FjaGVNZXRhZGF0YSgpIGNvbnN0OworICAgIHZvaWQgY2FjaGVGcmFtZUF0
SW5kZXgoSW1hZ2VGcmFtZUluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGlu
ZykgY29uc3Q7CisgICAgCisgICAgZW51bSBjbGFzcyBDbGVhcmVkRnJhbWVzIHsgUGFydGlhbCwg
QWxsIH07CisgICAgdm9pZCBkZWNvZGVkU2l6ZUluY3JlbWVudGVkKHVuc2lnbmVkIGRlY29kZWRT
aXplKSBjb25zdDsKKyAgICB2b2lkIGRlY29kZWRTaXplRGVjcmVtZW50ZWQodW5zaWduZWQgZGVj
b2RlZFNpemUsIENsZWFyZWRGcmFtZXMgPSBDbGVhcmVkRnJhbWVzOjpQYXJ0aWFsKSBjb25zdDsK
KyAgICB2b2lkIGRlY29kZWRTaXplQ2hhbmdlZChpbnQgZGVjb2RlZFNpemUpIGNvbnN0OworICAg
IHZvaWQgZGlkRGVjb2RlUHJvcGVydGllcygpIGNvbnN0OworICAgIHZvaWQgZGVjb2RlZEltYWdl
Q2hhbmdlZCgpIGNvbnN0OworICAgIAorICAgIFN1YnNhbXBsaW5nTGV2ZWwgY2FsY3VsYXRlTWF4
aW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdDsKKyAgICAKKyAgICBJbWFnZSogbV9pbWFnZSB7
IG51bGxwdHIgfTsKKyAgICBOYXRpdmVJbWFnZURlY29kZXJQdHIgbV9kZWNvZGVyIHsgbnVsbHB0
ciB9OworICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7CisgICAgbXV0YWJsZSBJbnRTaXplIG1f
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKKyAgICBtdXRhYmxlIFN1YnNhbXBsaW5nTGV2ZWwg
bV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKKyAgICBtdXRhYmxlIHNpemVfdCBtX2Zy
YW1lQ291bnQgeyAwIH07CisjaWYgVVNFKENHKQorICAgIG11dGFibGUgaW50IG1fcmVwZXRpdGlv
bkNvdW50IHsgY0FuaW1hdGlvbkxvb3BPbmNlIH07CisjZWxzZQorICAgIG11dGFibGUgaW50IG1f
cmVwZXRpdGlvbkNvdW50IHsgY0FuaW1hdGlvbk5vbmUgfTsKKyNlbmRpZgorICAgIG11dGFibGUg
U3RyaW5nIG1fZmlsZW5hbWVFeHRlbnNpb247CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2RlY29k
ZWRQcm9wZXJ0aWVzU2l6ZSB7IDAgfTsKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgYm9v
bCBtX2FsbG93U3Vic2FtcGxpbmcgeyB0cnVlIH07CisjZWxzZQorICAgIGJvb2wgbV9hbGxvd1N1
YnNhbXBsaW5nIHsgZmFsc2UgfTsKICNlbmRpZgorICAgIAorI2lmICFVU0UoQ0cpCisgICAgQWxw
aGFPcHRpb24gbV9hbHBoYU9wdGlvbiB7IEFscGhhUHJlbXVsdGlwbGllZCB9OworICAgIEdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24geyBHYW1t
YUFuZENvbG9yUHJvZmlsZUFwcGxpZWQgfTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQotICAgIHN0YXRpYyB1bnNpZ25lZCBzX21heFBpeGVsc1BlckRlY29kZWRJbWFn
ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2Ug
PSAxMDI0ICogMTAyNDsKKyNlbmRpZgogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaAppbmRleCBkZjk0MWE1NjZhOWU0
NjkyNzcyN2JhMWVjNjg0OGYyMTY4MDNhNDViLi5lY2ExYjkyYzQxZWUxODI4ZTMxMGQ1YmVkYmIy
YjVhY2E1OTVmNTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9OYXRpdmVJbWFnZVB0ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L05hdGl2ZUltYWdlUHRyLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgTmF0aXZlSW1hZ2VQ
dHJfaAogCiAjaWYgVVNFKENHKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIHR5cGVkZWYg
c3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKQEAgLTQxLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8g
RklYTUU6IE5hdGl2ZUltYWdlUHRyIGFuZCBQYXNzTmF0aXZlSW1hZ2VQdHIgc2hvdWxkIGJlIHNt
YXJ0CiAvLyBwb2ludGVycyAoc2VlIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpKS4KICNpZiBVU0UoQ0cpCi10eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQdHI7Cit0
eXBlZGVmIFJldGFpblB0cjxDR0ltYWdlUmVmPiBOYXRpdmVJbWFnZVB0cjsKICNlbGlmIFVTRShD
QUlSTykKIHR5cGVkZWYgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gTmF0aXZlSW1hZ2VQdHI7CiB0
eXBlZGVmIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBQYXNzTmF0aXZlSW1hZ2VQdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAppbmRleCA2M2RjZjBhMjUzZTIzNDBmNjdmMWM4MWQ4NWZjMjcwZGQyMzBlODZk
Li5hNGM2NWJkZmYzMmE5MmY5YzFkZjI2ZDRiZjUzMDgwZjA1YWI5NjE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKQEAgLTEwMzcsNyArMTAzNyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50
c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKICAgICBpZiAoaW1hZ2UpIHsKLSAg
ICAgICAgQ0dJbWFnZVJlZiBuZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworICAgICAgICBDR0ltYWdlUmVmIG5ld0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkuZ2V0KCk7CiAgICAgICAgIGlmICghbmV3SW1hZ2UpCiAgICAgICAg
ICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKaW5kZXggY2Q1N2VlNDg1ZWE4MGM2
Y2YzNDdhYjNiZDk3MzdkNTk5OWUxMDI4Mi4uZDJmNWIzMmIzMzMwZmJiOWIwYmMwOWIxYmQ3MGE5
MjM1ZTQ5Y2M1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKQEAgLTQwLDI4ICs0MCwxNCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShQYXNzUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gbmF0aXZlSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQog
ICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAgLCBtX3NpemUoY2Fpcm9TdXJmYWNlU2l6ZShuYXRp
dmVJbWFnZS5nZXQoKSkpCi0gICAgLCBtX21pbmltdW1TdWJzYW1wbGluZ0xldmVsKDApCisgICAg
LCBtX3NvdXJjZShuYXRpdmVJbWFnZSkKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBt
X3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50
U3RhdHVzKFVua25vd24pCiAgICAgLCBtX3JlcGV0aXRpb25zQ29tcGxldGUoMCkKLSAgICAsIG1f
ZGVjb2RlZFNpemUobV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiA0KQotICAgICwg
bV9mcmFtZUNvdW50KDEpCi0gICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkKLSAgICAsIG1fY2hl
Y2tlZEZvclNvbGlkQ29sb3IoZmFsc2UpCiAgICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKHRydWUp
CiAgICAgLCBtX2FsbERhdGFSZWNlaXZlZCh0cnVlKQotICAgICwgbV9oYXZlU2l6ZSh0cnVlKQot
ICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCi0gICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUp
CiB7Ci0gICAgbV9mcmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0g
Y2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChuYXRpdmVJbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09O
VEVOVF9DT0xPUjsKLSAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gbmF0aXZlSW1hZ2U7Ci0gICAg
bV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotCi0gICAgY2hlY2tGb3JTb2xpZENv
bG9yKCk7CiB9CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLApAQCAtNzIsNyArNTgsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsbwog
CiAgICAgc3RhcnRBbmltYXRpb24oKTsKIAotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1
cmZhY2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IHN1cmZhY2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7CiAg
ICAgaWYgKCFzdXJmYWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGlt
YWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjIsNDggKzEwOCw0NCBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3QsIGNvbnN0IEZsbwogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7
CiB9CiAKLXZvaWQgQml0bWFwSW1hZ2U6OmRldGVybWluZU1pbmltdW1TdWJzYW1wbGluZ0xldmVs
KCkgY29uc3QKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShjb25zdCBOYXRpdmVJbWFn
ZVB0ciYgaW1hZ2UpCisgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICwgbV9oYXZlTWV0YWRhdGEo
dHJ1ZSkKKyAgICAsIG1faXNDb21wbGV0ZSh0cnVlKQogewotICAgIG1fbWluaW11bVN1YnNhbXBs
aW5nTGV2ZWwgPSAwOworICAgIEFTU0VSVChtX2ltYWdlKTsKKyAgICBtX3NpemUgPSBjYWlyb1N1
cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworICAgIG1fZnJhbWVCeXRlcyA9IG1fc2l6ZS53aWR0
aCgpICogbV9zaXplLmhlaWdodCgpICogNDsKKyAgICBtX2hhc0FscGhhID0gY2Fpcm9fc3VyZmFj
ZV9nZXRfY29udGVudChtX2ltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwogfQog
Ci12b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQotewotICAgIG1faXNTb2xp
ZENvbG9yID0gZmFsc2U7Ci0gICAgbV9jaGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7CiAKLSAg
ICBpZiAoZnJhbWVDb3VudCgpID4gMSkKLSAgICAgICAgcmV0dXJuOworYm9vbCBJbWFnZUZyYW1l
RGF0YTo6Y2xlYXJJbWFnZSgpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZnJhbWVBdElu
ZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVh
cmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47CisgICAgbV9p
bWFnZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShzdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0Up
Ci0gICAgICAgIHJldHVybjsKK09wdGlvbmFsPENvbG9yPiBJbWFnZUZyYW1lRGF0YTo6c29saWRD
b2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm4gTnVsbG9w
dDsKKyAgICAKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAh
PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBOdWxsb3B0OwogCi0g
ICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsKKyAgICBJ
bnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOwogCiAgICAgaWYg
KHNpemUud2lkdGgoKSAhPSAxIHx8IHNpemUuaGVpZ2h0KCkgIT0gMSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gTnVsbG9wdDsKIAotICAgIHVuc2lnbmVkKiBwaXhlbENvbG9yID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKHN1cmZhY2UuZ2V0KCkpKTsKLSAgICBtX3NvbGlkQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQigqcGl4ZWxDb2xvcik7Ci0KLSAgICBtX2lzU29saWRDb2xvciA9IHRydWU7Cisg
ICAgdW5zaWduZWQqIHBpeGVsQ29sb3IgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+
KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVy
biBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWxDb2xvcik7CiB9CiAKLWJvb2wgRnJh
bWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRh
dGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBpZiAobV9mcmFtZSkg
ewotICAgICAgICBtX2ZyYW1lID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IGNjNzA0NjE0N2FlODFmMWZhZGFhNmQ4
NDE2MjQ5ODBjNmZkZmNiZjEuLmJiMTMzNTBjODZjYzY0YWJjNjA0MTNjZGFlMjA4MWVlYzEwZWVm
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC0yMDUsNyArMjA1LDcg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wKICAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAvLyBXZSBuZWVkIHRoaXMgdG8gc3RheSBpbiBzY29wZSBiZWNhdXNl
IHRoZSBuYXRpdmUgaW1hZ2UgaXMganVzdCBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGF0YS4KLSAg
ICBtX2RlY29kZXIgPSBuZXcgSW1hZ2VTb3VyY2UocHJlbXVsdGlwbHlBbHBoYSA/IEltYWdlU291
cmNlOjpBbHBoYVByZW11bHRpcGxpZWQgOiBJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBs
aWVkLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFuZENv
bG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBs
aWVkKTsKKyAgICBtX2RlY29kZXIgPSBuZXcgSW1hZ2VTb3VyY2UobnVsbHB0ciwgcHJlbXVsdGlw
bHlBbHBoYSA/IEltYWdlU291cmNlOjpBbHBoYVByZW11bHRpcGxpZWQgOiBJbWFnZVNvdXJjZTo6
QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFB
bmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEltYWdlU291cmNlJiBkZWNvZGVyID0gKm1fZGVjb2RlcjsKQEAgLTIx
NSw3ICsyMTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0
cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbAogICAgICAgICBkZWNvZGVyLnNl
dERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1l
Q291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IGRlY29kZXIuY3JlYXRl
RnJhbWVBdEluZGV4KDApOworICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IGRlY29kZXIuY3JlYXRl
RnJhbWVJbWFnZUF0SW5kZXgoMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9pbWFnZVN1cmZh
Y2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAvLyAx
LiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxWaWRlb0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFBy
ZW11bHRpcGx5QWxwaGEgaGFkIGJlZW4gYXBwbGllZCBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIDB4
RkYgZm9yIGVhY2ggcGl4ZWwsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmluZGV4IDAxYjdkNjkyY2RiZDdhYjRkMjJiYmMx
Mzk5YzEwMzI4ZjU3ZTVlNDcuLmYyNzM2MGFjNTk3NzM5MDVjYmNlNjlhNjdmMGZkMDFmNGFmMGQ3
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1h
cEltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Jp
dG1hcEltYWdlQ0cuY3BwCkBAIC00OSwxNDAgKzQ5LDc2IEBACiAjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQor
ICAgIAorSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKGNvbnN0IE5hdGl2ZUltYWdlUHRy
JiBpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2hhdmVNZXRhZGF0YSh0cnVl
KQorICAgICwgbV9pc0NvbXBsZXRlKHRydWUpCisgICAgLCBtX2hhc0FscGhhKHRydWUpCiB7Ci0g
ICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0K
LSAgICBtX29yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Ci0gICAgbV9zdWJz
YW1wbGluZ0xldmVsID0gMDsKKyAgICBBU1NFUlQobV9pbWFnZSk7CisgICAgbV9zaXplID0gSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgobV9pbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQobV9p
bWFnZS5nZXQoKSkpOworICAgIG1fZnJhbWVCeXRlcyA9IG1fc2l6ZS5hcmVhKCkgKiA0OworfQog
Ci0gICAgaWYgKG1fZnJhbWUpIHsKK2Jvb2wgSW1hZ2VGcmFtZURhdGE6OmNsZWFySW1hZ2UoKQor
eworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIENBQ0hFX1NV
QklNQUdFUwotICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ZyYW1lKTsKKyAg
ICBzdWJpbWFnZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ltYWdlLmdldCgpKTsKICNlbmRpZgotICAg
ICAgICBDR0ltYWdlUmVsZWFzZShtX2ZyYW1lKTsKLSAgICAgICAgbV9mcmFtZSA9IDA7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgbV9pbWFnZSA9
IG51bGxwdHI7CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCitPcHRpb25hbDxDb2xvcj4gSW1h
Z2VGcmFtZURhdGE6OnNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlmICghbV9pbWFnZSkKKyAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgCisgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgY2hl
Y2sgZm9yIHNvbGlkIGNvbG9yIGluIHRoZSBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIG9mIGEgMXgx
IGltYWdlLgorICAgIGlmIChDR0ltYWdlR2V0V2lkdGgobV9pbWFnZS5nZXQoKSkgIT0gMSB8fCBD
R0ltYWdlR2V0SGVpZ2h0KG1faW1hZ2UuZ2V0KCkpICE9IDEpCisgICAgICAgIHJldHVybiBOdWxs
b3B0OworICAgIAorICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPiBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xvclNwYWNlUmVm
KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMy
QmlnKSk7CisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAgICByZXR1cm4gTnVsbG9wdDsK
KyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQoYml0bWFwQ29udGV4dC5nZXQoKSkuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgIENHUmVjdCBkZXN0aW5hdGlvblJlY3Qg
PSBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBD
b250ZXh0LmdldCgpLCBkZXN0aW5hdGlvblJlY3QsIG1faW1hZ2UuZ2V0KCkpOworICAgIGlmICgh
cGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAKKyAgICBy
ZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBw
aXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwogfQogCi1CaXRt
YXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBv
YnNlcnZlcikKK0JpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwg
SW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKLSAgICAsIG1f
bWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoMCkKLSAgICAsIG1faW1hZ2VPcmllbnRhdGlvbihPcmln
aW5Ub3BMZWZ0KQotICAgICwgbV9zaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihmYWxzZSkK
KyAgICAsIG1fc291cmNlKGltYWdlKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1f
cmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQogICAgICwgbV9yZXBldGl0aW9uQ291bnRT
dGF0dXMoVW5rbm93bikKICAgICAsIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSgwKQotICAgICwgbV9k
ZWNvZGVkU2l6ZSgwKQotICAgICwgbV9kZWNvZGVkUHJvcGVydGllc1NpemUoMCkKLSAgICAsIG1f
ZnJhbWVDb3VudCgxKQotICAgICwgbV9pc1NvbGlkQ29sb3IoZmFsc2UpCi0gICAgLCBtX2NoZWNr
ZWRGb3JTb2xpZENvbG9yKGZhbHNlKQogICAgICwgbV9hbmltYXRpb25GaW5pc2hlZCh0cnVlKQog
ICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQodHJ1ZSkKLSAgICAsIG1faGF2ZVNpemUodHJ1ZSkKLSAg
ICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVlKQotICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQog
ewotICAgIENHRmxvYXQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7Ci0gICAgQ0dG
bG9hdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOwotICAgIG1fZGVjb2RlZFNp
emUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0gICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKLQotICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBkZWNvZGVyLCB3ZSBjYW4ndCBm
aWd1cmUgb3V0IHRoZSBpbWFnZSBvcmllbnRhdGlvbi4KLSAgICAvLyBTZXQgbV9zaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uIHRvIGJlIHRoZSBzYW1lIGFzIG1fc2l6ZSBzbyBpdCdzIG5vdCAweDAu
Ci0gICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zaXplOwotCi0gICAgbV9mcmFt
ZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gQ0dJbWFnZVJldGFpbihjZ0lt
YWdlKTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1sw
XS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7Ci0KLSAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKLX0K
LQotdm9pZCBCaXRtYXBJbWFnZTo6ZGV0ZXJtaW5lTWluaW11bVN1YnNhbXBsaW5nTGV2ZWwoKSBj
b25zdAotewotICAgIGlmICghbV9hbGxvd1N1YnNhbXBsaW5nKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fc291cmNlLmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleCgwKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gVmFsdWVzIGNob3NlbiB0byBiZSBhcHByb3ByaWF0ZSBm
b3IgaU9TLgotICAgIGNvbnN0IGludCBjTWF4aW11bUltYWdlQXJlYUJlZm9yZVN1YnNhbXBsaW5n
ID0gNSAqIDEwMjQgKiAxMDI0OwotICAgIGNvbnN0IFN1YnNhbXBsaW5nTGV2ZWwgbWF4U3Vic2Ft
cGxpbmdMZXZlbCA9IDM7Ci0KLSAgICBTdWJzYW1wbGluZ0xldmVsIGN1cnJlbnRMZXZlbCA9IDA7
Ci0gICAgZm9yICggOyBjdXJyZW50TGV2ZWwgPD0gbWF4U3Vic2FtcGxpbmdMZXZlbDsgKytjdXJy
ZW50TGV2ZWwpIHsKLSAgICAgICAgSW50U2l6ZSBmcmFtZVNpemUgPSBtX3NvdXJjZS5mcmFtZVNp
emVBdEluZGV4KDAsIGN1cnJlbnRMZXZlbCk7Ci0gICAgICAgIGlmIChmcmFtZVNpemUuYXJlYSgp
IDwgY01heGltdW1JbWFnZUFyZWFCZWZvcmVTdWJzYW1wbGluZykKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIG1fbWluaW11bVN1YnNhbXBsaW5nTGV2ZWwgPSBjdXJyZW50TGV2ZWw7
Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCi17Ci0gICAgbV9j
aGVja2VkRm9yU29saWRDb2xvciA9IHRydWU7Ci0gICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsK
LQotICAgIGlmIChmcmFtZUNvdW50KCkgPiAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IWhhdmVGcmFtZUF0SW5kZXgoMCkpIHsKLSAgICAgICAgSW50U2l6ZSBzaXplID0gbV9zb3VyY2Uu
ZnJhbWVTaXplQXRJbmRleCgwLCAwKTsKLSAgICAgICAgaWYgKHNpemUud2lkdGgoKSAhPSAxIHx8
IHNpemUuaGVpZ2h0KCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAo
IWVuc3VyZUZyYW1lSXNDYWNoZWQoMCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQ0dJbWFnZVJlZiBpbWFnZSA9IG51bGxwdHI7Ci0gICAgaWYgKG1fZnJhbWVzLnNpemUoKSkK
LSAgICAgICAgaW1hZ2UgPSBtX2ZyYW1lc1swXS5tX2ZyYW1lOwotCi0gICAgaWYgKCFpbWFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgY2hlY2sgZm9yIHNv
bGlkIGNvbG9yIGluIHRoZSBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIG9mIGEgMXgxIGltYWdlLgot
ICAgIGlmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09IDEgJiYgQ0dJbWFnZUdldEhlaWdodChp
bWFnZSkgPT0gMSkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCi0g
ICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwKLSAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0gICAgICAgIGlmICghYml0bWFwQ29udGV4
dCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KGJpdG1hcENv
bnRleHQuZ2V0KCkpLnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICAg
ICAgQ0dSZWN0IGRlc3RpbmF0aW9uUmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgMSwgMSk7Ci0gICAg
ICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBkZXN0aW5hdGlvblJl
Y3QsIGltYWdlKTsKLSAgICAgICAgaWYgKCFwaXhlbFszXSkKLSAgICAgICAgICAgIG1fc29saWRD
b2xvciA9IENvbG9yKDAsIDAsIDAsIDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3Nv
bGlkQ29sb3IgPSBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1
NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Ci0KLSAg
ICAgICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOwotICAgIH0KIH0KIAogQ0dJbWFnZVJlZiBCaXRt
YXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCiB7Ci0gICAgcmV0dXJuIGZyYW1lQXRJbmRleCgwKTsK
KyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7CiB9CiAKIENHSW1hZ2VSZWYg
Qml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQogewogICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJh
bWVBdEluZGV4KGkpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRX
aWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAg
ICAgICAgIHJldHVybiBjZ0ltYWdlOworICAgICAgICBQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2Ug
PSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIEludFNpemUoQ0dJ
bWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkp
ID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2UuZ2V0KCk7CiAgICAgfQogCiAgICAg
Ly8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRo
ZSByaWdodCBzaXplCkBAIC0xOTcsOCArMTMzLDggQEAgUmV0YWluUHRyPENGQXJyYXlSZWY+IEJp
dG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQogICAgIAogICAgIENGTXV0YWJsZUFycmF5UmVm
IGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlD
YWxsQmFja3MpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAg
ICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJyRnJhbWUgPSBmcmFtZUF0SW5kZXgoaSkpCi0gICAgICAg
ICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7CisgICAgICAgIGlmIChO
YXRpdmVJbWFnZVB0ciBjdXJyRnJhbWUgPSBmcmFtZUltYWdlQXRJbmRleChpKSkKKyAgICAgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lLmdldCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuIGFkb3B0Q0YoYXJyYXkpOwogfQpAQCAtMjExLDE1ICsxNDcsMTUgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEYKICAgICBzdGFydEFuaW1hdGlvbigpOwogI2VuZGlmCiAKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CiAg
ICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNv
bnRleHRzLgogICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0LnBsYXRmb3JtQ29u
dGV4dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKGNvcHlVbnNjYWxlZEZyYW1lQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSkpOworICAgICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1h
Z2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBlbHNlIHsKICAgICAgICAgQ0dSZWN0IHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVz
dFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CiAgICAgICAg
IGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJh
bnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJh
bnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7
CiAKLSAgICAgICAgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1YnNhbXBs
aW5nU2NhbGUpOworICAgICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBzdWJzYW1wbGluZ1NjYWxlKTsKICAgICB9CiAKICAgICBpZiAoIWltYWdlKSAvLyBJZiBp
dCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KQEAgLTIzNSw4ICsxNzEs
OCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRgogICAgIAogICAgIC8vIHNyY1JlY3QgaXMgaW4g
dGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8g
bWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgogICAgIEZsb2F0UmVjdCBzY2FsZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAgICBG
bG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7CisgICAg
aWYgKGltYWdlU2l6ZSAhPSBtX3NvdXJjZS5zaXplKCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IG9y
aWdpbmFsSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBtX3NvdXJjZS5zaXplKCkpOwogICAgICAg
ICBGbG9hdFJlY3Qgc3Vic2FtcGxlZEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXpl
KTsKICAgICAgICAgc2NhbGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFn
ZUJvdW5kcywgc3Vic2FtcGxlZEltYWdlQm91bmRzKTsKICAgICB9CkBAIC0yNTEsMTggKzE4Nywx
NSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRgogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRp
ZERyYXcodGhpcyk7CiB9CiAKLVBhc3NOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6Y29weVVu
c2NhbGVkRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKK1Bhc3NOYXRpdmVJbWFnZVB0ciBCaXRt
YXBJbWFnZTo6Y29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewog
ICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1f
ZnJhbWUpCi0gICAgICAgIGNhY2hlRnJhbWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1l
c1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKQotICAgICAgICByZXR1cm4gQ0dJbWFnZVJldGFp
bihtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSk7CisgICAgaWYgKCFtX3NvdXJjZS5tX2ZyYW1lc1tp
bmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKQorICAgICAgICByZXR1cm4gbV9zb3VyY2UubV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2U7CiAKLSAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVBdElu
ZGV4KGluZGV4KTsKKyAgICByZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgo
aW5kZXgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCmluZGV4IDZjMDNhMmNlZjg0NjA2
NTYxZWEwN2ViOTI4ZjFjZjI5NWY5ZjVlMzYuLmQ0ZDAzNDgyZDUwNmY1Y2I1YjJmZjJmZTMxOWNi
YzgyZjg0MDI1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCkBAIC0zMjcsMTYgKzMyNywxNiBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYm9v
bCBoYXNBbHBoYSA9ICFtX2ltYWdlLT5jdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKTsKICAg
ICBpZiAoKGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJlbXVs
dGlwbHlBbHBoYSkpICYmIG1faW1hZ2UtPmRhdGEoKSkgewotICAgICAgICBJbWFnZVNvdXJjZSBk
ZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCisgICAgICAgIEltYWdl
U291cmNlIGRlY29kZXIobnVsbHB0ciwgSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGll
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSA/IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKICAgICAgICAgZGVjb2Rlci5zZXREYXRh
KG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CiAgICAgICAgIGlmICghZGVjb2Rlci5mcmFtZUNvdW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbV9kZWNvZGVkSW1hZ2Ug
PSBhZG9wdENGKGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApKTsKKyAgICAgICAgbV9kZWNv
ZGVkSW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOwogICAgICAgICBt
X2NnSW1hZ2UgPSBtX2RlY29kZWRJbWFnZS5nZXQoKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9j
Z0ltYWdlID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAg
bV9jZ0ltYWdlID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS5nZXQoKTsK
ICAgICBpZiAoIW1fY2dJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MzYsNyAr
NTM2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNp
Z25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWcKICAgICBjb250ZXh0LnNjYWxlKEZsb2F0
U2l6ZSgxLCAtMSkpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIC1pbWFnZUhlaWdodCk7CiAg
ICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25Ob25l
KTsKLSAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjZ0ltYWdlLmdldCgpLCBpbWFnZVNpemUs
IGNhbnZhc1JlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6ZSksIENvbXBvc2l0
ZUNvcHkpOworICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNnSW1hZ2UsIGltYWdlU2l6ZSwg
Y2FudmFzUmVjdCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKSwgQ29tcG9zaXRl
Q29weSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRl
eCBhNDQ5NjU0MDQ2YWU4ZjEwYWJhZDE2NDE1ZTY0NjBhZGJiYmI4ZTg4Li4xNjIwOWFmNTM0NDgx
ZGI0Y2RkZDhiNDIzY2U3YmYyYTQwYjBkYmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0zMTEs
OCArMzExLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QKICAgICBmbG9hdCBhZGp1c3RlZFgg
PSBwaGFzZS54KCkgLSBkZXN0UmVjdC54KCkgKyB0aWxlUmVjdC54KCkgKiBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsgLy8gV2UgdHJhbnNsYXRlZCB0aGUgY29u
dGV4dCBzbyB0aGF0IGRlc3RSZWN0LngoKSBpcyB0aGUgb3JpZ2luLCBzbyBzdWJ0cmFjdCBpdCBv
dXQuCiAgICAgZmxvYXQgYWRqdXN0ZWRZID0gZGVzdFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgp
IC0gZGVzdFJlY3QueSgpICsgdGlsZVJlY3QueSgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChw
YXR0ZXJuVHJhbnNmb3JtLmQoKSkgKyBzY2FsZWRUaWxlSGVpZ2h0KTsKIAotICAgIENHSW1hZ2VS
ZWYgdGlsZUltYWdlID0gaW1hZ2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBm
bG9hdCBoID0gQ0dJbWFnZUdldEhlaWdodCh0aWxlSW1hZ2UpOworICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiB0aWxlSW1hZ2UgPSBpbWFnZS5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIGZsb2F0IGggPSBDR0ltYWdlR2V0SGVpZ2h0KHRpbGVJbWFnZS5nZXQoKSk7CiAKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc3ViSW1hZ2U7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMzI2
LDEzICszMjYsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QKICAgICAgICAgLy8gQ29weWlu
ZyBhIHN1Yi1pbWFnZSBvdXQgb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBzdG9wcyB0aGUg
ZGVjb2Rpbmcgb2YgdGhlIG9yaWdpbmFsIGltYWdlLiBJdCBzaG91bGQgbmV2ZXIgaGFwcGVuCiAg
ICAgICAgIC8vIGJlY2F1c2Ugc3ViLWltYWdlcyBhcmUgb25seSB1c2VkIGZvciBib3JkZXItaW1h
Z2UsIHdoaWNoIG9ubHkgcmVuZGVycyB3aGVuIHRoZSBpbWFnZSBpcyBmdWxseSBkZWNvZGVkLgog
ICAgICAgICBBU1NFUlQoaCA9PSBpbWFnZS5oZWlnaHQoKSk7Ci0gICAgICAgIHN1YkltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KHRpbGVJbWFnZSwgdGlsZVJlY3Qp
KTsKKyAgICAgICAgc3ViSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJl
Y3QodGlsZUltYWdlLmdldCgpLCB0aWxlUmVjdCkpOwogICAgIH0KIAogICAgIC8vIElmIHdlIG5l
ZWQgdG8gcGFpbnQgZ2FwcyBiZXR3ZWVuIHRpbGVzIGJlY2F1c2Ugd2UgaGF2ZSBhIHBhcnRpYWxs
eSBsb2FkZWQgaW1hZ2Ugb3Igbm9uLXplcm8gc3BhY2luZywKICAgICAvLyBmYWxsIGJhY2sgdG8g
dGhlIGxlc3MgZWZmaWNpZW50IENHUGF0dGVybi1iYXNlZCBtZWNoYW5pc20uCiAgICAgZmxvYXQg
c2NhbGVkVGlsZVdpZHRoID0gdGlsZVJlY3Qud2lkdGgoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOwotICAgIGZsb2F0IHcgPSBDR0ltYWdlR2V0V2lkdGgo
dGlsZUltYWdlKTsKKyAgICBmbG9hdCB3ID0gQ0dJbWFnZUdldFdpZHRoKHRpbGVJbWFnZS5nZXQo
KSk7CiAgICAgaWYgKHcgPT0gaW1hZ2Uuc2l6ZSgpLndpZHRoKCkgJiYgaCA9PSBpbWFnZS5zaXpl
KCkuaGVpZ2h0KCkgJiYgIXNwYWNpbmcud2lkdGgoKSAmJiAhc3BhY2luZy5oZWlnaHQoKSkgewog
ICAgICAgICAvLyBGSVhNRTogQ0cgc2VlbXMgdG8gc25hcCB0aGUgaW1hZ2VzIHRvIGludGVncmFs
IHNpemVzLiBXaGVuIHdlIGNhcmUgKGUuZy4gd2l0aCBib3JkZXItaW1hZ2UtcmVwZWF0OiByb3Vu
ZCksCiAgICAgICAgIC8vIHdlIHNob3VsZCB0aWxlIGFsbCBidXQgdGhlIGxhc3QsIGFuZCBzdGV0
Y2ggdGhlIGxhc3QgaW1hZ2UgdG8gZml0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNhNTZiYzQzOWEz
NTI4NTc4YzZkYTI4ZTkxNWM2NjcwYmFkYzA1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5jcHAKQEAgLTAsMCArMSw0
MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisKKyNpZiBVU0UoQ0cp
CisKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0
aW9uLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjaWYgIVBMQVRGT1JNKElPUykKKyNpbmNs
dWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNlbHNlCisj
aW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
I2VuZGlmCisKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2ltcG9ydCA8SW1hZ2VJTy9D
R0ltYWdlU291cmNlUHJpdmF0ZS5oPgorI2Vsc2UKK2NvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdl
U291cmNlU3Vic2FtcGxlRmFjdG9yID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFj
dG9yIik7Citjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNob3VsZENhY2hlSW1tZWRp
YXRlbHkgPSBDRlNUUigia0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZUltbWVkaWF0ZWx5Iik7Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY29uc3QgQ0ZTdHJpbmdSZWYgV2Vi
Q29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNsYW1wZWREZWxheVRpbWUgPSBDRlNUUigiVW5jbGFt
cGVkRGVsYXlUaW1lIik7Citjb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5
QVBOR0RlbGF5VGltZSA9IENGU1RSKCJEZWxheVRpbWUiKTsKK2NvbnN0IENGU3RyaW5nUmVmIFdl
YkNvcmVDR0ltYWdlUHJvcGVydHlBUE5HTG9vcENvdW50ID0gQ0ZTVFIoIkxvb3BDb3VudCIpOwor
Citjb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyID0gQ0ZT
VFIoImtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIiKTsKK2NvbnN0IENGU3RyaW5nUmVm
IGtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2tpcE1l
dGFkYXRhIik7CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjcmVhdGVJbWFn
ZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBEZWNvZGVN
b2RlIGRlY29kZU1vZGUpCit7CisgICAgY29uc3QgQ0ZJbmRleCBiYXNpY09wdGlvbnMgPSAzOwor
ICAgIGNvbnN0IHZvaWQqIGtleXNbYmFzaWNPcHRpb25zICsgMl0gPSB7IGtDR0ltYWdlU291cmNl
U2hvdWxkQ2FjaGUsIGtDR0ltYWdlU291cmNlU2hvdWxkUHJlZmVyUkdCMzIsIGtDR0ltYWdlU291
cmNlU2tpcE1ldGFkYXRhIH07CisgICAgY29uc3Qgdm9pZCogdmFsdWVzW2Jhc2ljT3B0aW9ucyAr
IDJdID0geyBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlIH07
CisgICAgQ0ZJbmRleCBudW1PcHRpb25zID0gYmFzaWNPcHRpb25zOworICAgIAorICAgIGlmIChz
dWJzYW1wbGluZ0xldmVsID4gMCkgeworICAgICAgICBzaG9ydCBjb25zdHJhaW5lZFN1YnNhbXBs
aW5nTGV2ZWwgPSBzdGQ6Om1pbjxzaG9ydD4oMywgc3RkOjptYXg8c2hvcnQ+KDAsIHN1YnNhbXBs
aW5nTGV2ZWwpKTsKKyAgICAgICAgaW50IHN1YnNhbXBsZUludCA9IDEgPDwgY29uc3RyYWluZWRT
dWJzYW1wbGluZ0xldmVsOyAvLyBbMC4uM10gPT4gWzEsIDIsIDQsIDhdCisgICAgICAgIFJldGFp
blB0cjxDRk51bWJlclJlZj4gc3Vic2FtcGxlTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0
ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZzdWJzYW1wbGVJbnQpKTsKKyAgICAgICAg
CisgICAgICAgIGtleXNbbnVtT3B0aW9uc10gPSBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3Rv
cjsKKyAgICAgICAgdmFsdWVzW251bU9wdGlvbnMrK10gPSBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBs
ZUZhY3RvcjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlY29kZU1vZGUgPT0gRGVjb2RlTW9kZTo6
SW1tZWRpYXRlKSB7CisgICAgICAgIGtleXNbbnVtT3B0aW9uc10gPSBrQ0dJbWFnZVNvdXJjZVNo
b3VsZENhY2hlSW1tZWRpYXRlbHk7CisgICAgICAgIHZhbHVlc1tudW1PcHRpb25zKytdID0ga0NG
Qm9vbGVhblRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFy
eUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9wdGlvbnMsICZrQ0ZUeXBlRGljdGlv
bmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30K
Kworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlU291cmNlT3B0aW9ucyhT
dWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwgPSAwLCBEZWNvZGVNb2RlIGRlY29kZU1v
ZGUgPSBEZWNvZGVNb2RlOjpMYXp5KQoreworICAgIGlmIChzdWJzYW1wbGluZ0xldmVsIHx8IGRl
Y29kZU1vZGUgPT0gRGVjb2RlTW9kZTo6SW1tZWRpYXRlKQorICAgICAgICByZXR1cm4gY3JlYXRl
SW1hZ2VTb3VyY2VPcHRpb25zKHN1YnNhbXBsaW5nTGV2ZWwsIGRlY29kZU1vZGUpOworICAgIAor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj4gb3B0
aW9ucyA9IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucygwLCBEZWNvZGVNb2RlOjpMYXp5KTsKKyAg
ICByZXR1cm4gb3B0aW9uczsKK30KKworc3RhdGljIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRp
b25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1hZ2VQcm9wZXJ0aWVzKQoreworICAg
IEFTU0VSVChpbWFnZVByb3BlcnRpZXMpOworICAgIENGTnVtYmVyUmVmIG9yaWVudGF0aW9uUHJv
cGVydHkgPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaW1hZ2VQcm9wZXJ0aWVz
LCBrQ0dJbWFnZVByb3BlcnR5T3JpZW50YXRpb24pOworICAgIGlmICghb3JpZW50YXRpb25Qcm9w
ZXJ0eSkKKyAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOworICAgIAorICAg
IGludCBleGlmVmFsdWU7CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShvcmllbnRhdGlvblByb3BlcnR5
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZXhpZlZhbHVlKTsKKyAgICByZXR1cm4gSW1hZ2VPcmllbnRh
dGlvbjo6ZnJvbUVYSUZWYWx1ZShleGlmVmFsdWUpOworfQorICAgIAorI2lmICFQTEFURk9STShD
T0NPQSkKK3NpemVfdCBzaGFyZWRCdWZmZXJHZXRCeXRlc0F0UG9zaXRpb24odm9pZCogaW5mbywg
dm9pZCogYnVmZmVyLCBvZmZfdCBwb3NpdGlvbiwgc2l6ZV90IGNvdW50KQoreworICAgIFNoYXJl
ZEJ1ZmZlciogc2hhcmVkQnVmZmVyID0gc3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4oaW5mbyk7
CisgICAgc2l6ZV90IHNvdXJjZVNpemUgPSBzaGFyZWRCdWZmZXItPnNpemUoKTsKKyAgICBpZiAo
cG9zaXRpb24gPj0gc291cmNlU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY29u
c3QgY2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlvbjsKKyAgICBz
aXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6ZSAtIHBvc2l0
aW9uKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7CisgICAgcmV0dXJuIGFt
b3VudDsKK30KKwordm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8pCit7CisgICAg
U2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRCdWZmZXIqPihp
bmZvKTsKKyAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Cit9CisjZW5kaWYKKworSW1hZ2VEZWNv
ZGVyOjpJbWFnZURlY29kZXIoKQoreworICAgIG1fbmF0aXZlRGVjb2RlciA9IENHSW1hZ2VTb3Vy
Y2VDcmVhdGVJbmNyZW1lbnRhbCgwKTsKK30KKworU3Vic2FtcGxpbmdMZXZlbCBJbWFnZURlY29k
ZXI6OnN1YnNhbXBsaW5nTGV2ZWxGb3JTY2FsZShmbG9hdCBzY2FsZSwgU3Vic2FtcGxpbmdMZXZl
bCBtYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCkKK3sKKyAgICAvLyBUaGVyZSBhcmUgZm91ciBzdWJz
YW1wbGluZyBsZXZlbHM6IDAgPSAxeCwgMSA9IDAuNXgsIDIgPSAwLjI1eCwgMyA9IDAuMTI1eC4K
KyAgICBmbG9hdCBjbGFtcGVkU2NhbGUgPSBzdGQ6Om1heDxmbG9hdD4oMC4xMjUsIHN0ZDo6bWlu
PGZsb2F0PigxLCBzY2FsZSkpOworICAgIFN1YnNhbXBsaW5nTGV2ZWwgcmVzdWx0ID0gY2VpbGYo
bG9nMmYoMSAvIGNsYW1wZWRTY2FsZSkpOworICAgIEFTU0VSVChyZXN1bHQgPj0wICYmIHJlc3Vs
dCA8PSAzKTsKKyAgICByZXR1cm4gc3RkOjptaW4ocmVzdWx0LCBtYXhpbXVtU3Vic2FtcGxpbmdM
ZXZlbCk7Cit9CisKK3NpemVfdCBJbWFnZURlY29kZXI6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5l
UHJvcGVydGllcygpCit7CisgICAgLy8gTWVhc3VyZWQgYnkgdHJhY2luZyBtYWxsb2MvY2FsbG9j
IGNhbGxzIG9uIE1hYyBPUyAxMC42LjYsIHg4Nl82NC4KKyAgICAvLyBBIG5vbi16ZXJvIHZhbHVl
IGVuc3VyZXMgY2FjaGVkIGltYWdlcyB3aXRoIG5vIGRlY29kZWQgZnJhbWVzIHN0aWxsIGVudGVy
CisgICAgLy8gdGhlIGxpdmUgZGVjb2RlZCByZXNvdXJjZXMgbGlzdCB3aGVuIHRoZSBDR0ltYWdl
U291cmNlIGRlY29kZXMgaW1hZ2UKKyAgICAvLyBwcm9wZXJ0aWVzLCBhbGxvd2luZyB0aGUgY2Fj
aGUgdG8gcHJ1bmUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlLgorICAgIC8vIFRoaXMgdmFs
dWUgaXMgbGlrZWx5IHRvIGJlIGluYWNjdXJhdGUgb24gb3RoZXIgcGxhdGZvcm1zLCBidXQgdGhl
IG92ZXJhbGwKKyAgICAvLyBiZWhhdmlvciBpcyB1bmNoYW5nZWQuCisgICAgcmV0dXJuIDEzMDg4
OworfQorCitTdHJpbmcgSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Cit7
CisgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VTb3VyY2VUeXBlID0gQ0dJbWFnZVNvdXJjZUdldFR5cGUo
bV9uYXRpdmVEZWNvZGVyKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cHJlZmVycmVkRXh0ZW5zaW9u
Rm9ySW1hZ2VTb3VyY2VUeXBlKGltYWdlU291cmNlVHlwZSk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAoreworICAgIC8vIFJhZ25hcm9zIHllbGxzOiBU
T08gU09PTiEgWW91IGhhdmUgYXdha2VuZWQgbWUgVE9PIFNPT04sIEV4ZWN1dHVzIQorICAgIGlm
IChDR0ltYWdlU291cmNlR2V0U3RhdHVzKG1fbmF0aXZlRGVjb2RlcikgPCBrQ0dJbWFnZVN0YXR1
c0luY29tcGxldGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZTBQcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNl
Q29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgMCwgaW1hZ2VTb3VyY2VPcHRp
b25zKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWltYWdlMFByb3BlcnRpZXMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2Uw
UHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpCisgICAgJiYgQ0ZE
aWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9w
ZXJ0eVBpeGVsSGVpZ2h0KTsKK30KKworSW50U2l6ZSBJbWFnZURlY29kZXI6OnNpemUoKSBjb25z
dAoreworICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQorICAgICAgICBtX3NpemUgPSBmcmFtZVNp
emVBdEluZGV4KDAsIDApOworICAgIHJldHVybiBtX3NpemU7Cit9CisKK3NpemVfdCBJbWFnZURl
Y29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBDR0ltYWdlU291cmNlR2V0
Q291bnQobV9uYXRpdmVEZWNvZGVyKTsKK30KKworaW50IEltYWdlRGVjb2Rlcjo6cmVwZXRpdGlv
bkNvdW50KCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0
aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXMobV9uYXRpdmVEZWNvZGVy
LCBpbWFnZVNvdXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAg
ICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKKyAgICAKKyAgICBDRkRpY3Rpb25hcnlS
ZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOworICAgIGlm
IChnaWZQcm9wZXJ0aWVzKSB7CisgICAgICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJlclJl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5R0lG
TG9vcENvdW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vIHByb3BlcnR5IG1lYW5zIGxvb3Ag
b25jZS4KKyAgICAgICAgaWYgKCFudW0pCisgICAgICAgICAgICByZXR1cm4gY0FuaW1hdGlvbkxv
b3BPbmNlOworICAgICAgICAKKyAgICAgICAgaW50IGxvb3BDb3VudDsKKyAgICAgICAgQ0ZOdW1i
ZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZsb29wQ291bnQpOworICAgICAgICAK
KyAgICAgICAgLy8gQSBwcm9wZXJ0eSB3aXRoIHZhbHVlIDAgbWVhbnMgbG9vcCBmb3JldmVyLgor
ICAgICAgICByZXR1cm4gbG9vcENvdW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZp
bml0ZTsKKyAgICB9CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMgPSAo
Q0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtD
R0ltYWdlUHJvcGVydHlQTkdEaWN0aW9uYXJ5KTsKKyAgICBpZiAocG5nUHJvcGVydGllcykgewor
ICAgICAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdMb29wQ291bnQpOwor
ICAgICAgICBpZiAoIW51bSkKKyAgICAgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7
CisgICAgICAgIAorICAgICAgICBpbnQgbG9vcENvdW50OworICAgICAgICBDRk51bWJlckdldFZh
bHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7CisgICAgICAgIHJldHVybiBs
b29wQ291bnQgPyBsb29wQ291bnQgOiBjQW5pbWF0aW9uTG9vcEluZmluaXRlOworICAgIH0KKyAg
ICAKKyAgICAvLyBUdXJucyBvdXQgd2UncmUgbm90IGFuIGFuaW1hdGVkIGltYWdlIGFmdGVyIGFs
bCwgc28gd2UgZG9uJ3QgYW5pbWF0ZS4KKyAgICByZXR1cm4gY0FuaW1hdGlvbk5vbmU7Cit9CisK
K2Jvb2wgSW1hZ2VEZWNvZGVyOjpob3RTcG90KEludFBvaW50JiBob3RTcG90KSBjb25zdAorewor
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9uYXRpdmVEZWNvZGVyLCAwLCBpbWFnZVNv
dXJjZU9wdGlvbnMoKS5nZXQoKSkpOworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGludCB4ID0gLTEsIHkgPSAtMTsKKyAgICBDRk51bWJlclJl
ZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQo
KSwgQ0ZTVFIoImhvdHNwb3RYIikpOworICAgIGlmICghbnVtIHx8ICFDRk51bWJlckdldFZhbHVl
KG51bSwga0NGTnVtYmVySW50VHlwZSwgJngpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMu
Z2V0KCksIENGU1RSKCJob3RzcG90WSIpKTsKKyAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRW
YWx1ZShudW0sIGtDRk51bWJlckludFR5cGUsICZ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmICh4IDwgMCB8fCB5IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGhvdFNwb3QgPSBJbnRQb2ludCh4LCB5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
SW50U2l6ZSBJbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJz
YW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9w
ZXJ0aWVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMo
c3Vic2FtcGxpbmdMZXZlbCkuZ2V0KCkpKTsKKyAgICAKKyAgICBpZiAoIXByb3BlcnRpZXMpCisg
ICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgaW50IHdpZHRoID0gMDsKKyAgICBpbnQgaGVp
Z2h0ID0gMDsKKyAgICBDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOwor
ICAgIGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmd2lkdGgpOworICAgIAorICAgIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOwor
ICAgIGlmIChudW0pCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmaGVpZ2h0KTsKKyAgICAKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
K30KKworYm9vbCBJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdAoreworICAgIEFTU0VSVChmcmFtZUNvdW50KCkpOworICAgIHJldHVybiBDR0lt
YWdlU291cmNlR2V0U3RhdHVzQXRJbmRleChtX25hdGl2ZURlY29kZXIsIGluZGV4KSA9PSBrQ0dJ
bWFnZVN0YXR1c0NvbXBsZXRlOworfQorCitJbWFnZU9yaWVudGF0aW9uIEltYWdlRGVjb2Rlcjo6
b3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVBy
b3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9u
cygpLmdldCgpKSk7CisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gRGVmYXVs
dEltYWdlT3JpZW50YXRpb247CisgICAgCisgICAgcmV0dXJuIG9yaWVudGF0aW9uRnJvbVByb3Bl
cnRpZXMocHJvcGVydGllcy5nZXQoKSk7Cit9CisKK2Zsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVE
dXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAoreworICAgIGZsb2F0IGR1cmF0aW9u
ID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRD
RihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgaW5k
ZXgsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYgKHByb3BlcnRpZXMpIHsK
KyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdpZlByb3BlcnRpZXMgPSAoQ0ZEaWN0aW9uYXJ5UmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0ltYWdlUHJvcGVydHlH
SUZEaWN0aW9uYXJ5KTsKKyAgICAgICAgaWYgKGdpZlByb3BlcnRpZXMpIHsKKyAgICAgICAgICAg
IGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
Z2lmUHJvcGVydGllcywga0NHSW1hZ2VQcm9wZXJ0eUdJRlVuY2xhbXBlZERlbGF5VGltZSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHVuY2xhbXBlZCBmcmFtZSBkZWxheSBpZiBpdCBl
eGlzdHMuCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZs
b2F0VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQ0ZOdW1iZXJSZWYg
bnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRpZXMsIGtD
R0ltYWdlUHJvcGVydHlHSUZEZWxheVRpbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gRmFsbCBi
YWNrIHRvIHRoZSBjbGFtcGVkIGZyYW1lIGRlbGF5IGlmIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVs
YXkgZG9lcyBub3QgZXhpc3QuCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0s
IGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBuZ1Byb3BlcnRpZXMgPSAoQ0ZE
aWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIGtDR0lt
YWdlUHJvcGVydHlQTkdEaWN0aW9uYXJ5KTsKKyAgICAgICAgaWYgKHBuZ1Byb3BlcnRpZXMpIHsK
KyAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUocG5nUHJvcGVydGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdVbmNs
YW1wZWREZWxheVRpbWUpKQorICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBr
Q0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7CisgICAgICAgICAgICBlbHNlIGlmIChDRk51
bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocG5nUHJvcGVy
dGllcywgV2ViQ29yZUNHSW1hZ2VQcm9wZXJ0eUFQTkdEZWxheVRpbWUpKQorICAgICAgICAgICAg
ICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJhdGlvbik7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gTWFueSBhbm5veWluZyBhZHMgc3BlY2lm
eSBhIDAgZHVyYXRpb24gdG8gbWFrZSBhbiBpbWFnZSBmbGFzaCBhcyBxdWlja2x5IGFzIHBvc3Np
YmxlLgorICAgIC8vIFdlIGZvbGxvdyBGaXJlZm94J3MgYmVoYXZpb3IgYW5kIHVzZSBhIGR1cmF0
aW9uIG9mIDEwMCBtcyBmb3IgYW55IGZyYW1lcyB0aGF0IHNwZWNpZnkKKyAgICAvLyBhIGR1cmF0
aW9uIG9mIDw9IDEwIG1zLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzc2ODkzMDA+IGFuZCA8aHR0cDov
L3dlYmtpdC5vcmcvYi8zNjA4Mj4KKyAgICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICBp
ZiAoZHVyYXRpb24gPCAwLjAxMWYpCisgICAgICAgIHJldHVybiAwLjFmOworICAgIHJldHVybiBk
dXJhdGlvbjsKK30KKworYm9vbCBJbWFnZURlY29kZXI6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1l
QXRJbmRleChzaXplX3QpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
cHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleCht
X25hdGl2ZURlY29kZXIsIDAsIGltYWdlU291cmNlT3B0aW9ucygpLmdldCgpKSk7CisgICAgaWYg
KCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQ0ZEaWN0aW9u
YXJ5UmVmIGpmaWZQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5SkZJRkRp
Y3Rpb25hcnkpKTsKKyAgICBpZiAoamZpZlByb3BlcnRpZXMpIHsKKyAgICAgICAgQ0ZCb29sZWFu
UmVmIGlzUHJvZ0NGQm9vbCA9IHN0YXRpY19jYXN0PENGQm9vbGVhblJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoamZpZlByb3BlcnRpZXMsIGtDR0ltYWdlUHJvcGVydHlKRklGSXNQcm9ncmVzc2l2
ZSkpOworICAgICAgICBpZiAoaXNQcm9nQ0ZCb29sKSB7CisgICAgICAgICAgICBib29sIGlzUHJv
Z3Jlc3NpdmUgPSBDRkJvb2xlYW5HZXRWYWx1ZShpc1Byb2dDRkJvb2wpOworICAgICAgICAgICAg
Ly8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUxODQ2NTU+IC0gSGFuZyByZW5kZXJp
bmcgdmVyeSBsYXJnZSBwcm9ncmVzc2l2ZSBKUEVHLiBEZWNvZGluZyBwcm9ncmVzc2l2ZQorICAg
ICAgICAgICAgLy8gaW1hZ2VzIGhhbmdzIGZvciBhIHZlcnkgbG9uZyB0aW1lIHJpZ2h0IG5vdy4g
VW50aWwgdGhpcyBpcyBmaXhlZCwgZG9uJ3Qgc3ViLXNhbXBsZSBwcm9ncmVzc2l2ZSBpbWFnZXMu
IFRoaXMKKyAgICAgICAgICAgIC8vIHdpbGwgY2F1c2UgdGhlbSB0byBmYWlsIG91ciBsYXJnZSBp
bWFnZSBjaGVjayBhbmQgdGhleSB3b24ndCBiZSBkZWNvZGVkLgorICAgICAgICAgICAgLy8gRklY
TUU6IFJlbW92ZSBvbmNlIHVuZGVybHlpbmcgaXNzdWUgaXMgZml4ZWQgKDxyZGFyOi8vcHJvYmxl
bS81MTkxNDE4PikKKyAgICAgICAgICAgIHJldHVybiAhaXNQcm9ncmVzc2l2ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbWFnZURlY29kZXI6
OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoIWZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICBDRlN0cmluZ1JlZiBpbWFnZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX25hdGl2
ZURlY29kZXIpOworICAgIAorICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBubyBpbWFn
ZSB0eXBlIG9yIHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UKKyAgICAvLyBKUEVHIGRv
ZXMgbm90IHN1cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5LgorICAgIGlmICghaW1hZ2VUeXBlIHx8
IENGRXF1YWwoaW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICAvLyBGSVhNRTogQ291bGQgcmV0dXJuIGZhbHNlIGZvciBvdGhl
ciBub24tdHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cy4KKyAgICAvLyBGSVhNRTogQ291bGQgbWF5
YmUgcmV0dXJuIGZhbHNlIGZvciBhIEdJRiBGcmFtZSBpZiB3ZSBoYXZlIGVub3VnaCBpbmZvIGlu
IHRoZSBHSUYgcHJvcGVydGllcyBkaWN0aW9uYXJ5CisgICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgb3Igbm90IGEgdHJhbnNwYXJlbnQgY29sb3Igd2FzIGRlZmluZWQuCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3Vuc2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90
IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0Cit7CisgICAg
SW50U2l6ZSBmcmFtZVNpemUgPSBmcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xl
dmVsKTsKKyAgICByZXR1cm4gZnJhbWVTaXplLmFyZWEoKSAqIDQ7Cit9CisKK1Bhc3NOYXRpdmVJ
bWFnZVB0ciBJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBEZWNvZGVNb2RlIGRlY29kZU1v
ZGUpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihD
R0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KG1fbmF0aXZlRGVjb2RlciwgaW5kZXgsIGlt
YWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsLCBkZWNvZGVNb2RlKS5nZXQoKSkpOwor
ICAgICAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzczNzEx
OTg+IC0gQ29yZUdyYXBoaWNzIGNoYW5nZWQgdGhlIGRlZmF1bHQgY2FjaGluZyBiZWhhdmlvdXIg
aW4gaU9TIDQuMCB0byBrQ0dJbWFnZUNhY2hpbmdUcmFuc2llbnQKKyAgICAvLyB3aGljaCBjYXVz
ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZvciB1cyBzaW5jZSB0aGUgaW1hZ2VzIGhhZCB0
byBiZSByZXNhbXBsZWQvcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgd2UgY2FsbGVkCisgICAgLy8gQ0dD
b250ZXh0RHJhd0ltYWdlLiBXZSBub3cgdGVsbCBDRyB0byBjYWNoZSB0aGUgZHJhd24gaW1hZ2Vz
LiBTZWUgYWxzbyA8cmRhcjovL3Byb2JsZW0vMTQzNjY3NTU+IC0KKyAgICAvLyBDb3JlR3JhcGhp
Y3MgbmVlZHMgdG8gdW4tZGVwcmVjYXRlIGtDR0ltYWdlQ2FjaGluZ1RlbXBvcmFyeSBzaW5jZSBp
dCdzIHN0aWxsIG5vdCB0aGUgZGVmYXVsdC4KKyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorICAgICAgICBDR0ltYWdlU2V0Q2Fj
aGluZ0ZsYWdzKGltYWdlLmdldCgpLCBrQ0dJbWFnZUNhY2hpbmdUZW1wb3JhcnkpOworI2lmIENP
TVBJTEVSKENMQU5HKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQorICAgICAgICAKKyAgICBDRlN0cmluZ1JlZiBpbWFnZVVUSSA9
IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fbmF0aXZlRGVjb2Rlcik7CisgICAgc3RhdGljIGNvbnN0
IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1hcC1pbWFnZSIpOworCisg
ICAgaWYgKCFpbWFnZVVUSSkKKyAgICAgICAgcmV0dXJuIGltYWdlOworCisgICAgaWYgKCFDRkVx
dWFsKGltYWdlVVRJLCB4Ym1VVEkpKQorICAgICAgICByZXR1cm4gaW1hZ2U7CisKKyAgICAvLyBJ
ZiBpdCBpcyBhbiB4Ym0gaW1hZ2UsIG1hc2sgb3V0IGFsbCB0aGUgd2hpdGUgYXJlYXMgdG8gcmVu
ZGVyIHRoZW0gdHJhbnNwYXJlbnQuCisgICAgY29uc3QgQ0dGbG9hdCBtYXNraW5nQ29sb3JzWzZd
ID0gezI1NSwgMjU1LCAgMjU1LCAyNTUsIDI1NSwgMjU1fTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gbWFza2VkSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoTWFza2luZ0NvbG9y
cyhpbWFnZS5nZXQoKSwgbWFza2luZ0NvbG9ycykpOworICAgIHJldHVybiBtYXNrZWRJbWFnZSA/
IG1hc2tlZEltYWdlIDogaW1hZ2U7Cit9CisgICAgCit2b2lkIEltYWdlRGVjb2Rlcjo6c2V0RGF0
YShDRkRhdGFSZWYgZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgQ0dJbWFnZVNv
dXJjZVVwZGF0ZURhdGEobV9uYXRpdmVEZWNvZGVyLCBkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwor
fQorICAgIAordm9pZCBJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBPbiBN
YWMgdGhlIE5TRGF0YSBpbnNpZGUgdGhlIFNoYXJlZEJ1ZmZlciBjYW4gYmUgc2VjcmV0bHkgYXBw
ZW5kZWQgdG8gd2l0aG91dCB0aGUgU2hhcmVkQnVmZmVyJ3Mga25vd2xlZGdlLgorICAgIC8vIFdl
IHVzZSBTaGFyZWRCdWZmZXIncyBhYmlsaXR5IHRvIHdyYXAgaXRzZWxmIGluc2lkZSBDRkRhdGEg
dG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0aGF0IEltYWdlSU8gaXMKKyAgICAvLyByZWFs
bHkgbG9va2luZyBhdCB0aGUgU2hhcmVkQnVmZmVyLgorICAgIHNldERhdGEoZGF0YS0+Y3JlYXRl
Q0ZEYXRhKCkuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7CisgICAgQ0dJbWFnZVNvdXJjZVVwZGF0
ZURhdGEobV9uYXRpdmVEZWNvZGVyLCBkYXRhLT5jcmVhdGVDRkRhdGEoKS5nZXQoKSwgYWxsRGF0
YVJlY2VpdmVkKTsKKyNlbHNlCisgICAgLy8gQ3JlYXRlIGEgQ0dEYXRhUHJvdmlkZXIgdG8gd3Jh
cCB0aGUgU2hhcmVkQnVmZmVyLgorICAgIGRhdGEtPnJlZigpOworICAgIC8vIFdlIHVzZSB0aGUg
R2V0Qnl0ZXNBdFBvc2l0aW9uIGNhbGxiYWNrIHJhdGhlciB0aGFuIHRoZSBHZXRCeXRlUG9pbnRl
ciBvbmUgYmVjYXVzZSBTaGFyZWRCdWZmZXIKKyAgICAvLyBkb2VzIG5vdCBwcm92aWRlIGEgd2F5
IHRvIGxvY2sgZG93biB0aGUgYnl0ZSBwb2ludGVyIGFuZCBndWFyYW50ZWUgdGhhdCBpdCB3b24n
dCBtb3ZlLCB3aGljaAorICAgIC8vIGlzIGEgcmVxdWlyZW1lbnQgZm9yIHVzaW5nIHRoZSBHZXRC
eXRlUG9pbnRlciBjYWxsYmFjay4KKyAgICBDR0RhdGFQcm92aWRlckRpcmVjdENhbGxiYWNrcyBw
cm92aWRlckNhbGxiYWNrcyA9IHsgMCwgMCwgMCwgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0
aW9uLCBzaGFyZWRCdWZmZXJSZWxlYXNlIH07CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVy
UmVmPiBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlRGlyZWN0KGRh
dGEsIGRhdGEtPnNpemUoKSwgJnByb3ZpZGVyQ2FsbGJhY2tzKSk7CisgICAgQ0dJbWFnZVNvdXJj
ZVVwZGF0ZURhdGFQcm92aWRlcihtX25hdGl2ZURlY29kZXIsIGRhdGFQcm92aWRlci5nZXQoKSwg
YWxsRGF0YVJlY2VpdmVkKTsKKyNlbmRpZgorfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29k
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmEzYWNiNjIwZjBiODJmMjg3Yjk3YmZjZTE1MGVjNzc5ZDBhN2VlOWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZURlY29kZXIuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbWFnZURlY29kZXJfaAorI2RlZmluZSBJbWFnZURl
Y29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIERlY29kZU1vZGUgeyBJbW1l
ZGlhdGUsIExhenkgfTsKKworY2xhc3MgU2hhcmVkQnVmZmVyOworCitjbGFzcyBJbWFnZURlY29k
ZXIgeworcHVibGljOgorICAgIEltYWdlRGVjb2RlcigpOworICAgIHZpcnR1YWwgfkltYWdlRGVj
b2RlcigpIHsgfQorCisgICAgc3RhdGljIHNpemVfdCBieXRlc0RlY29kZWRUb0RldGVybWluZVBy
b3BlcnRpZXMoKTsKKyAgICBzdGF0aWMgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVs
Rm9yU2NhbGUoZmxvYXQgc2NhbGUsIFN1YnNhbXBsaW5nTGV2ZWwgbWF4aW11bVN1YnNhbXBsaW5n
TGV2ZWwpOworCisgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7CisgICAgYm9v
bCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAg
ICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0OworICAgIGludCByZXBldGl0aW9uQ291bnQoKSBj
b25zdDsKKyAgICBib29sIGhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0OworCisgICAg
SW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7
CisgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKworICAgIGZs
b2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgYm9vbCBmcmFtZUhh
c0FscGhhQXRJbmRleChzaXplX3QpIGNvbnN0OworICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09m
RnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CisgICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisKKyAgICBQYXNzTmF0aXZl
SW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVs
LCBEZWNvZGVNb2RlID0gRGVjb2RlTW9kZTo6TGF6eSkgY29uc3Q7CisKKyAgICB2b2lkIHNldERh
dGEoQ0ZEYXRhUmVmLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgCisgICAgdmlydHVhbCBi
b29sIGlzQXN5bmNEZWNvZGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAg
IAorcHJvdGVjdGVkOgorICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemU7CisgICAgQ0dJbWFnZVNv
dXJjZVJlZiBtX25hdGl2ZURlY29kZXI7Cit9OworICAgIAorfQorCisjZW5kaWYgLy8gSW1hZ2VE
ZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlRnJhbWVEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlRnJhbWVEZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMmM3ZmFiNmFhZTRmYjkxM2Y4
ZmI5ZjcwYmRjZGQ0MDdiZDM4YjI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VGcmFtZURlY29kZXIuY3BwCkBAIC0wLDAgKzEsMTYx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVEZWNvZGVyLmgiCisKKyNpZiBVU0Uo
Q0cpICYmIE9TKFVOSVgpCisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAorSW1hZ2VGcmFtZURlY29kZXI6OkltYWdlRnJhbWVEZWNvZGVyKElt
YWdlU291cmNlJiBzb3VyY2UsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCkKKyAg
ICA6IG1fc291cmNlKHNvdXJjZSkKKyAgICAsIG1fZnJhbWVzKHNvdXJjZS5tX2ZyYW1lcykKKyAg
ICAsIG1fc3Vic2FtcGxpbmdMZXZlbChzdWJzYW1wbGluZ0xldmVsKQoreworfQorCitXb3JrUXVl
dWUmIEltYWdlRnJhbWVEZWNvZGVyOjpkZWNvZGVRdWV1ZSgpCit7CisgICAgc3RhdGljIGF1dG8m
IHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoIm9yZy53ZWJraXQuSW1hZ2VEZWNvZGVyIikubGVh
a1JlZigpOworICAgIHJldHVybiBxdWV1ZTsKK30KKyAgICAKK3ZvaWQgSW1hZ2VGcmFtZURlY29k
ZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sK
KyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIW1fc291cmNl
LmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRh
LCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgICAgIGlmIChtX3NvdXJjZS5pc1NpemVBdmFpbGFi
bGUoKSkKKyAgICAgICAgICAgIHN0YXJ0QXN5bmNEZWNvZGluZ0lmTmVlZGVkKGFsbERhdGFSZWNl
aXZlZCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNBc3luY0Rl
Y29kaW5nKCkpIHsKKyAgICAgICAgZW5xdWV1ZURhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBJbWFnZURlY29kZXI6OnNldERhdGEo
ZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBJbWFnZUZyYW1lRGVjb2Rlcjo6aXNB
c3luY0RlY29kaW5nTmVlZGVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBh
IGJldHRlciBoZXVyaXN0aWMKKyAgICBBU1NFUlQobV9zb3VyY2UuaXNTaXplQXZhaWxhYmxlKCkp
OworICAgIEludFNpemUgc2l6ZSA9IG1fc291cmNlLnNpemUoKTsKKyAgICByZXR1cm4gc2l6ZS5h
cmVhKCkgPiAxMDAwICogMTAwMDsKK30KKyAgICAKK2Jvb2wgSW1hZ2VGcmFtZURlY29kZXI6OnN0
YXJ0QXN5bmNEZWNvZGluZ0lmTmVlZGVkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFT
U0VSVCghbV9hc3luY0RlY29kaW5nKTsKKyAgICBpZiAoYWxsRGF0YVJlY2VpdmVkIHx8ICFpc0Fz
eW5jRGVjb2RpbmdOZWVkZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlY29kZSgp
OworICAgIG1fYXN5bmNEZWNvZGluZyA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAg
Cit2b2lkIEltYWdlRnJhbWVEZWNvZGVyOjpkZWNvZGUoKQoreworICAgIGRlY29kZVF1ZXVlKCku
ZGlzcGF0Y2goW3RoaXNdIHsKKyAgICAgICAgYm9vbCBhbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZTsK
KyAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQgPSBtX3NvdXJjZS5mcmFtZUNvdW50KCk7CisgICAg
ICAgIAorICAgICAgICB3aGlsZSAoIWFsbERhdGFSZWNlaXZlZCAmJiBtX2N1cnJlbnRGcmFtZSA8
IGZyYW1lQ291bnQpIHsKKyAgICAgICAgICAgIHdoaWxlIChtX2NvbnN1bWVDb3VudCA9PSBtX3By
b2R1Y2VDb3VudCkKKyAgICAgICAgICAgICAgICBzY2hlZF95aWVsZCgpOyAvLyBidWZmZXIgaXMg
ZW1wdHkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ0ZEYXRhUmVmIGRhdGEgPSBtX2J1ZmZl
clttX2NvbnN1bWVDb3VudCAlIEJ1ZmZlclNpemVdLmdldCgpOworICAgICAgICAgICAgYWxsRGF0
YVJlY2VpdmVkID0gbV9hbGxEYXRhUmVjZWl2ZWQgJiYgKG1fcHJvZHVjZUNvdW50IC0gbV9jb25z
dW1lQ291bnQgPT0gMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEltYWdlRGVjb2Rlcjo6
c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAgICAgY2FjaGVDdXJyZW50
RnJhbWUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKyttX2NvbnN1bWVDb3VudDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgd2hpbGUgKG1fY3VycmVudEZyYW1lIDwgZnJhbWVD
b3VudCkKKyAgICAgICAgICAgIGNhY2hlQ3VycmVudEZyYW1lKCk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGF1dG8mIGRhdGEgOiBtX2J1ZmZlcikKKyAgICAgICAgICAgIGRhdGEgPSBudWxscHRy
OworICAgICAgICAKKyAgICAgICAgbV9hc3luY0RlY29kaW5nID0gZmFsc2U7CisgICAgfSk7Cit9
CisKK3ZvaWQgSW1hZ2VGcmFtZURlY29kZXI6OmVucXVldWVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgQVNTRVJUKCFtX2FsbERhdGFSZWNlaXZl
ZCk7CisgICAgQVNTRVJUKGlzQXN5bmNEZWNvZGluZygpKTsKKyAgICAKKyAgICB3aGlsZSAoKG1f
cHJvZHVjZUNvdW50IC0gbV9jb25zdW1lQ291bnQpID09IEJ1ZmZlclNpemUpCisgICAgICAgIHNj
aGVkX3lpZWxkKCk7IC8vIGJ1ZmZlciBpcyBmdWxsCisgICAgCisgICAgbV9idWZmZXJbbV9wcm9k
dWNlQ291bnQgJSBCdWZmZXJTaXplXSA9IGRhdGEtPmNyZWF0ZUNGRGF0YSgpOworICAgIG1fYWxs
RGF0YVJlY2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOworICAgICsrbV9wcm9kdWNlQ291bnQ7Cit9
CisKK3ZvaWQgSW1hZ2VGcmFtZURlY29kZXI6OmNhY2hlQ3VycmVudEZyYW1lKCkKK3sKKyAgICBp
ZiAobV9mcmFtZXNbbV9jdXJyZW50RnJhbWVdLm1fZnJhbWVCeXRlcyAmJiAhbV9mcmFtZXNbbV9j
dXJyZW50RnJhbWVdLm1faXNDb21wbGV0ZSkgeworICAgICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVz
ID0gbV9mcmFtZXNbbV9jdXJyZW50RnJhbWVdLm1fZnJhbWVCeXRlczsKKyAgICAgICAgbV9mcmFt
ZXNbbV9jdXJyZW50RnJhbWVdLmNsZWFyKEltYWdlRnJhbWVDYWNoaW5nOjpDYWNoZU5vbmUpOwor
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBmcmFtZUJ5dGVzXSB7CisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgImFzeW5jIGRlY29kaW5nOiBmcmFtZUJ5dGVzID0gJWRcbiIsIGZy
YW1lQnl0ZXMpOworICAgICAgICAgICAgbV9zb3VyY2UuZGVjb2RlZFNpemVEZWNyZW1lbnRlZChm
cmFtZUJ5dGVzKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIE5hdGl2ZUltYWdlUHRy
IGltYWdlID0gSW1hZ2VEZWNvZGVyOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRG
cmFtZSwgbV9zdWJzYW1wbGluZ0xldmVsLCBEZWNvZGVNb2RlOjpJbW1lZGlhdGUpOworICAgIG1f
ZnJhbWVzW21fY3VycmVudEZyYW1lXSA9IEltYWdlRnJhbWVEYXRhKCp0aGlzLCBtX2N1cnJlbnRG
cmFtZSwgbV9zdWJzYW1wbGluZ0xldmVsLCBpbWFnZSk7CisgICAgCisgICAgaWYgKG1fZnJhbWVz
W21fY3VycmVudEZyYW1lXS5tX2ZyYW1lQnl0ZXMpIHsKKyAgICAgICAgdW5zaWduZWQgZnJhbWVC
eXRlcyA9IG1fZnJhbWVzW21fY3VycmVudEZyYW1lXS5tX2ZyYW1lQnl0ZXM7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoW3RoaXMsIGZyYW1lQnl0ZXNdIHsKKyAgICAgICAgICAgIG1fc291cmNl
LmRlY29kZWRTaXplSW5jcmVtZW50ZWQoZnJhbWVCeXRlcyk7CisgICAgICAgICAgICBtX3NvdXJj
ZS5kZWNvZGVkSW1hZ2VDaGFuZ2VkKCk7CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBp
ZiAobV9mcmFtZXNbbV9jdXJyZW50RnJhbWVdLm1faXNDb21wbGV0ZSkKKyAgICAgICAgKyttX2N1
cnJlbnRGcmFtZTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiBPUyhVTklYKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VGcmFtZURl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRnJhbWVE
ZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNThlN2I3ZGViNGZjYjU1N2I5NjI2YjRiZGE2ZTM3NzBlMDc1
NGIwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlRnJhbWVEZWNvZGVyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VGcmFtZURlY29kZXJf
aAorI2RlZmluZSBJbWFnZUZyYW1lRGVjb2Rlcl9oCisKKyNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKKworI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIAorY2xhc3MgSW1hZ2VGcmFtZURhdGFCdWZmZXI7CitjbGFzcyBJbWFnZVNvdXJjZTsKK2Ns
YXNzIFNoYXJlZEJ1ZmZlcjsKKyAgICAKK2NsYXNzIEltYWdlRnJhbWVEZWNvZGVyIDogcHVibGlj
IEltYWdlRGVjb2RlciB7CitwdWJsaWM6CisgICAgSW1hZ2VGcmFtZURlY29kZXIoSW1hZ2VTb3Vy
Y2UmLCBTdWJzYW1wbGluZ0xldmVsKTsKKworICAgIGJvb2wgaXNBc3luY0RlY29kaW5nKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9hc3luY0RlY29kaW5nOyB9CisgICAgdm9pZCBzZXREYXRh
KFNoYXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIFdvcmtRdWV1ZSYgZGVjb2RlUXVldWUoKTsKKyAgICAKKyAgICBi
b29sIGlzQXN5bmNEZWNvZGluZ05lZWRlZCgpIGNvbnN0OworICAgIGJvb2wgc3RhcnRBc3luY0Rl
Y29kaW5nSWZOZWVkZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIHZvaWQgZGVjb2RlKCk7
CisgICAgdm9pZCBlbnF1ZXVlRGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKTsKKyAgICB2b2lkIGNhY2hlQ3VycmVudEZyYW1lKCk7CisKKyAgICBJbWFnZVNvdXJj
ZSYgbV9zb3VyY2U7CisgICAgSW1hZ2VGcmFtZURhdGFCdWZmZXImIG1fZnJhbWVzOworICAgIFN1
YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsOworICAgIAorICAgIHZvbGF0aWxlIGJv
b2wgbV9hc3luY0RlY29kaW5nIHsgZmFsc2UgfTsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBtX3By
b2R1Y2VDb3VudCB7IDAgfTsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBtX2NvbnN1bWVDb3VudCB7
IDAgfTsKKyAgICB2b2xhdGlsZSBJbWFnZUZyYW1lSW5kZXggbV9jdXJyZW50RnJhbWUgeyAwIH07
CisgICAgCisgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZCB7IGZhbHNlIH07CisgICAgCisgICAg
c3RhdGljIGNvbnN0IGludCBCdWZmZXJTaXplID0gMTA7CisgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gbV9idWZmZXJbQnVmZmVyU2l6ZV07Cit9OworCit9CisKKyNlbmRpZiAvLyBJbWFnZUZyYW1l
RGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZVNvdXJjZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlU291cmNlQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGEwMTJi
NmY1N2JmNTM5MzA2NDc3N2I2YzEwOTM2NmIyNGM0NDVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlU291cmNlQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0KLSNp
ZiBVU0UoQ0cpCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgotCi0jaW5jbHVkZSAiQ29yZUdy
YXBoaWNzU1BJLmgiCi0jaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIklu
dFBvaW50LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLQotI2lmICFQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2
aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPEltYWdlSU8vSW1h
Z2VJTy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNlbmRpZgotCi0jaWYgVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPEltYWdlSU8vQ0dJbWFnZVNvdXJjZVByaXZhdGUu
aD4KLSNlbHNlCi1jb25zdCBDRlN0cmluZ1JlZiBrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3Rv
ciA9IENGU1RSKCJrQ0dJbWFnZVNvdXJjZVN1YnNhbXBsZUZhY3RvciIpOwotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgQ0ZTdHJpbmdSZWYgV2ViQ29yZUNHSW1hZ2VQcm9w
ZXJ0eUFQTkdVbmNsYW1wZWREZWxheVRpbWUgPSBDRlNUUigiVW5jbGFtcGVkRGVsYXlUaW1lIik7
Ci1jb25zdCBDRlN0cmluZ1JlZiBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR0RlbGF5VGltZSA9
IENGU1RSKCJEZWxheVRpbWUiKTsKLWNvbnN0IENGU3RyaW5nUmVmIFdlYkNvcmVDR0ltYWdlUHJv
cGVydHlBUE5HTG9vcENvdW50ID0gQ0ZTVFIoIkxvb3BDb3VudCIpOwotCi1jb25zdCBDRlN0cmlu
Z1JlZiBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyID0gQ0ZTVFIoImtDR0ltYWdlU291
cmNlU2hvdWxkUHJlZmVyUkdCMzIiKTsKLWNvbnN0IENGU3RyaW5nUmVmIGtDR0ltYWdlU291cmNl
U2tpcE1ldGFkYXRhID0gQ0ZTVFIoImtDR0ltYWdlU291cmNlU2tpcE1ldGFkYXRhIik7Ci0KLSNp
ZiAhUExBVEZPUk0oQ09DT0EpCi1zaXplX3Qgc2hhcmVkQnVmZmVyR2V0Qnl0ZXNBdFBvc2l0aW9u
KHZvaWQqIGluZm8sIHZvaWQqIGJ1ZmZlciwgb2ZmX3QgcG9zaXRpb24sIHNpemVfdCBjb3VudCkK
LXsKLSAgICBTaGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PFNoYXJlZEJ1
ZmZlcio+KGluZm8pOwotICAgIHNpemVfdCBzb3VyY2VTaXplID0gc2hhcmVkQnVmZmVyLT5zaXpl
KCk7Ci0gICAgaWYgKHBvc2l0aW9uID49IHNvdXJjZVNpemUpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgY29uc3QgY2hhciogc291cmNlID0gc2hhcmVkQnVmZmVyLT5kYXRhKCkgKyBwb3NpdGlv
bjsKLSAgICBzaXplX3QgYW1vdW50ID0gc3RkOjptaW48c2l6ZV90Pihjb3VudCwgc291cmNlU2l6
ZSAtIHBvc2l0aW9uKTsKLSAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGFtb3VudCk7Ci0gICAg
cmV0dXJuIGFtb3VudDsKLX0KLQotdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQqIGluZm8p
Ci17Ci0gICAgU2hhcmVkQnVmZmVyKiBzaGFyZWRCdWZmZXIgPSBzdGF0aWNfY2FzdDxTaGFyZWRC
dWZmZXIqPihpbmZvKTsKLSAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci19Ci0jZW5kaWYKLQot
SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQotICAgIDogbV9kZWNvZGVyKDApCi17
Ci0gICAgLy8gRklYTUU6IEFscGhhT3B0aW9uIGFuZCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
biBhcmUgaWdub3JlZC4KLX0KLQotSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCi17Ci0gICAg
Y2xlYXIodHJ1ZSk7Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFs
bEZyYW1lcywgc2l6ZV90LCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQotewotICAgIC8vIFJlY2VudCB2ZXJzaW9ucyBvZiBJbWFnZUlPIGRpc2NhcmQgcHJldmlvdXNs
eSBkZWNvZGVkIGltYWdlIGZyYW1lcyBpZiB0aGUgY2xpZW50Ci0gICAgLy8gYXBwbGljYXRpb24g
bm8gbG9uZ2VyIGhvbGRzIHJlZmVyZW5jZXMgdG8gdGhlbSwgc28gdGhlcmUncyBubyBuZWVkIHRv
IHRocm93IGF3YXkKLSAgICAvLyB0aGUgZGVjb2RlciB1bmxlc3Mgd2UncmUgZXhwbGljaXRseSBh
c2tlZCB0byBkZXN0cm95IGFsbCBvZiB0aGUgZnJhbWVzLgotICAgIGlmICghZGVzdHJveUFsbEZy
YW1lcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGVjb2RlcikgewotICAgICAgICBD
RlJlbGVhc2UobV9kZWNvZGVyKTsKLSAgICAgICAgbV9kZWNvZGVyID0gMDsKLSAgICB9Ci0gICAg
aWYgKGRhdGEpCi0gICAgICAgIHNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLX0KLQot
c3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNyZWF0ZUltYWdlU291cmNlT3B0aW9u
cyhTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCi17Ci0gICAgaWYgKCFzdWJzYW1w
bGluZ0xldmVsKSB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIG51bU9wdGlvbnMgPSAzOwotICAg
ICAgICBjb25zdCB2b2lkKiBrZXlzW251bU9wdGlvbnNdID0geyBrQ0dJbWFnZVNvdXJjZVNob3Vs
ZENhY2hlLCBrQ0dJbWFnZVNvdXJjZVNob3VsZFByZWZlclJHQjMyLCBrQ0dJbWFnZVNvdXJjZVNr
aXBNZXRhZGF0YSB9OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNbbnVtT3B0aW9uc10gPSB7
IGtDRkJvb2xlYW5UcnVlLCBrQ0ZCb29sZWFuVHJ1ZSwga0NGQm9vbGVhblRydWUgfTsKLSAgICAg
ICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0ZShudWxscHRyLCBrZXlzLCB2YWx1ZXMsIG51bU9w
dGlvbnMsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpOwotICAgIH0KLQotICAgIHNob3J0IGNvbnN0cmFpbmVkU3Vic2FtcGxp
bmdMZXZlbCA9IHN0ZDo6bWluPHNob3J0PigzLCBzdGQ6Om1heDxzaG9ydD4oMCwgc3Vic2FtcGxp
bmdMZXZlbCkpOwotICAgIGludCBzdWJzYW1wbGVJbnQgPSAxIDw8IGNvbnN0cmFpbmVkU3Vic2Ft
cGxpbmdMZXZlbDsgLy8gWzAuLjNdID0+IFsxLCAyLCA0LCA4XQotCi0gICAgUmV0YWluUHRyPENG
TnVtYmVyUmVmPiBzdWJzYW1wbGVOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxw
dHIsICBrQ0ZOdW1iZXJJbnRUeXBlLCAgJnN1YnNhbXBsZUludCkpOwotICAgIGNvbnN0IENGSW5k
ZXggbnVtT3B0aW9ucyA9IDQ7Ci0gICAgY29uc3Qgdm9pZCoga2V5c1tudW1PcHRpb25zXSA9IHsg
a0NHSW1hZ2VTb3VyY2VTaG91bGRDYWNoZSwga0NHSW1hZ2VTb3VyY2VTaG91bGRQcmVmZXJSR0Iz
Miwga0NHSW1hZ2VTb3VyY2VTa2lwTWV0YWRhdGEsIGtDR0ltYWdlU291cmNlU3Vic2FtcGxlRmFj
dG9yIH07Ci0gICAgY29uc3Qgdm9pZCogdmFsdWVzW251bU9wdGlvbnNdID0geyBrQ0ZCb29sZWFu
VHJ1ZSwga0NGQm9vbGVhblRydWUsIGtDRkJvb2xlYW5UcnVlLCBzdWJzYW1wbGVOdW1iZXIuZ2V0
KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUobnVsbHB0ciwga2V5
cywgdmFsdWVzLCBudW1PcHRpb25zLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVNvdXJjZU9wdGlvbnMoU3Vic2FtcGxpbmdMZXZlbCBzdWJz
YW1wbGluZ0xldmVsID0gMCkKLXsKLSAgICBpZiAoc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVsKTsKLQotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj4gb3B0aW9u
cyA9IGNyZWF0ZUltYWdlU291cmNlT3B0aW9ucygwKTsKLSAgICByZXR1cm4gb3B0aW9uczsKLX0K
LQotYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAotewotICAgIHJldHVybiBt
X2RlY29kZXI7Ci19Ci0KLXZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBp
ZiAoIW1fZGVjb2RlcikKLSAgICAgICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUlu
Y3JlbWVudGFsKDApOwotICAgIC8vIE9uIE1hYyB0aGUgTlNEYXRhIGluc2lkZSB0aGUgU2hhcmVk
QnVmZmVyIGNhbiBiZSBzZWNyZXRseSBhcHBlbmRlZCB0byB3aXRob3V0IHRoZSBTaGFyZWRCdWZm
ZXIncyBrbm93bGVkZ2UuICBXZSB1c2UgU2hhcmVkQnVmZmVyJ3MgYWJpbGl0eQotICAgIC8vIHRv
IHdyYXAgaXRzZWxmIGluc2lkZSBDRkRhdGEgdG8gZ2V0IGFyb3VuZCB0aGlzLCBlbnN1cmluZyB0
aGF0IEltYWdlSU8gaXMgcmVhbGx5IGxvb2tpbmcgYXQgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBD
R0ltYWdlU291cmNlVXBkYXRlRGF0YShtX2RlY29kZXIsIGRhdGEtPmNyZWF0ZUNGRGF0YSgpLmdl
dCgpLCBhbGxEYXRhUmVjZWl2ZWQpOwotI2Vsc2UKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAg
ICAgbV9kZWNvZGVyID0gQ0dJbWFnZVNvdXJjZUNyZWF0ZUluY3JlbWVudGFsKDApOwotICAgIC8v
IENyZWF0ZSBhIENHRGF0YVByb3ZpZGVyIHRvIHdyYXAgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBk
YXRhLT5yZWYoKTsKLSAgICAvLyBXZSB1c2UgdGhlIEdldEJ5dGVzQXRQb3NpdGlvbiBjYWxsYmFj
ayByYXRoZXIgdGhhbiB0aGUgR2V0Qnl0ZVBvaW50ZXIgb25lIGJlY2F1c2UgU2hhcmVkQnVmZmVy
Ci0gICAgLy8gZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBsb2NrIGRvd24gdGhlIGJ5dGUgcG9p
bnRlciBhbmQgZ3VhcmFudGVlIHRoYXQgaXQgd29uJ3QgbW92ZSwgd2hpY2gKLSAgICAvLyBpcyBh
IHJlcXVpcmVtZW50IGZvciB1c2luZyB0aGUgR2V0Qnl0ZVBvaW50ZXIgY2FsbGJhY2suCi0gICAg
Q0dEYXRhUHJvdmlkZXJEaXJlY3RDYWxsYmFja3MgcHJvdmlkZXJDYWxsYmFja3MgPSB7IDAsIDAs
IDAsIHNoYXJlZEJ1ZmZlckdldEJ5dGVzQXRQb3NpdGlvbiwgc2hhcmVkQnVmZmVyUmVsZWFzZSB9
OwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRD
RihDR0RhdGFQcm92aWRlckNyZWF0ZURpcmVjdChkYXRhLCBkYXRhLT5zaXplKCksICZwcm92aWRl
ckNhbGxiYWNrcykpOwotICAgIENHSW1hZ2VTb3VyY2VVcGRhdGVEYXRhUHJvdmlkZXIobV9kZWNv
ZGVyLCBkYXRhUHJvdmlkZXIuZ2V0KCksIGFsbERhdGFSZWNlaXZlZCk7Ci0jZW5kaWYKLX0KLQot
U3RyaW5nIEltYWdlU291cmNlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2RlY29kZXIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBDRlN0cmluZ1JlZiBp
bWFnZVNvdXJjZVR5cGUgPSBDR0ltYWdlU291cmNlR2V0VHlwZShtX2RlY29kZXIpOwotICAgIHJl
dHVybiBXZWJDb3JlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JJbWFnZVNvdXJjZVR5cGUoaW1hZ2VT
b3VyY2VUeXBlKTsKLX0KLQotU3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6c3Vic2FtcGxp
bmdMZXZlbEZvclNjYWxlKGZsb2F0IHNjYWxlKSBjb25zdAotewotICAgIC8vIFRoZXJlIGFyZSBm
b3VyIHN1YnNhbXBsaW5nIGxldmVsczogMCA9IDF4LCAxID0gMC41eCwgMiA9IDAuMjV4LCAzID0g
MC4xMjV4LgotICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IHN0ZDo6bWF4PGZsb2F0PigwLjEyNSwg
c3RkOjptaW48ZmxvYXQ+KDEsIHNjYWxlKSk7Ci0gICAgaW50IHJlc3VsdCA9IGNlaWxmKGxvZzJm
KDEgLyBjbGFtcGVkU2NhbGUpKTsKLSAgICBBU1NFUlQocmVzdWx0ID49MCAmJiByZXN1bHQgPD0g
Myk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZh
aWxhYmxlKCkKLXsKLSAgICAvLyBSYWduYXJvcyB5ZWxsczogVE9PIFNPT04hIFlvdSBoYXZlIGF3
YWtlbmVkIG1lIFRPTyBTT09OLCBFeGVjdXR1cyEKLSAgICBpZiAoQ0dJbWFnZVNvdXJjZUdldFN0
YXR1cyhtX2RlY29kZXIpIDwga0NHSW1hZ2VTdGF0dXNJbmNvbXBsZXRlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZTBQcm9wZXJ0
aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdEluZGV4KG1fZGVjb2Rl
ciwgMCwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWltYWdlMFByb3Bl
cnRpZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBDRkRpY3Rpb25hcnlD
b250YWluc0tleShpbWFnZTBQcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxX
aWR0aCkKLSAgICAgICAgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoaW1hZ2UwUHJvcGVydGll
cy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsSGVpZ2h0KTsKLX0KLQotc3RhdGljIEltYWdl
T3JpZW50YXRpb24gb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhDRkRpY3Rpb25hcnlSZWYgaW1h
Z2VQcm9wZXJ0aWVzKQotewotICAgIEFTU0VSVChpbWFnZVByb3BlcnRpZXMpOwotICAgIENGTnVt
YmVyUmVmIG9yaWVudGF0aW9uUHJvcGVydHkgPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoaW1hZ2VQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5T3JpZW50YXRpb24pOwotICAg
IGlmICghb3JpZW50YXRpb25Qcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9y
aWVudGF0aW9uOwotCi0gICAgaW50IGV4aWZWYWx1ZTsKLSAgICBDRk51bWJlckdldFZhbHVlKG9y
aWVudGF0aW9uUHJvcGVydHksIGtDRk51bWJlckludFR5cGUsICZleGlmVmFsdWUpOwotICAgIHJl
dHVybiBJbWFnZU9yaWVudGF0aW9uOjpmcm9tRVhJRlZhbHVlKGV4aWZWYWx1ZSk7Ci19Ci0KLWJv
b2wgSW1hZ2VTb3VyY2U6OmFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QpIGNv
bnN0Ci17Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0
Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIDAsIGltYWdl
U291cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBDRkRpY3Rpb25hcnlSZWYgamZpZlByb3BlcnRpZXMgPSBzdGF0
aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMu
Z2V0KCksIGtDR0ltYWdlUHJvcGVydHlKRklGRGljdGlvbmFyeSkpOwotICAgIGlmIChqZmlmUHJv
cGVydGllcykgewotICAgICAgICBDRkJvb2xlYW5SZWYgaXNQcm9nQ0ZCb29sID0gc3RhdGljX2Nh
c3Q8Q0ZCb29sZWFuUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShqZmlmUHJvcGVydGllcywga0NH
SW1hZ2VQcm9wZXJ0eUpGSUZJc1Byb2dyZXNzaXZlKSk7Ci0gICAgICAgIGlmIChpc1Byb2dDRkJv
b2wpIHsKLSAgICAgICAgICAgIGJvb2wgaXNQcm9ncmVzc2l2ZSA9IENGQm9vbGVhbkdldFZhbHVl
KGlzUHJvZ0NGQm9vbCk7Ci0gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3By
b2JsZW0vNTE4NDY1NT4gLSBIYW5nIHJlbmRlcmluZyB2ZXJ5IGxhcmdlIHByb2dyZXNzaXZlIEpQ
RUcuIERlY29kaW5nIHByb2dyZXNzaXZlCi0gICAgICAgICAgICAvLyBpbWFnZXMgaGFuZ3MgZm9y
IGEgdmVyeSBsb25nIHRpbWUgcmlnaHQgbm93LiBVbnRpbCB0aGlzIGlzIGZpeGVkLCBkb24ndCBz
dWItc2FtcGxlIHByb2dyZXNzaXZlIGltYWdlcy4gVGhpcwotICAgICAgICAgICAgLy8gd2lsbCBj
YXVzZSB0aGVtIHRvIGZhaWwgb3VyIGxhcmdlIGltYWdlIGNoZWNrIGFuZCB0aGV5IHdvbid0IGJl
IGRlY29kZWQuCi0gICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIG9uY2UgdW5kZXJseWluZyBp
c3N1ZSBpcyBmaXhlZCAoPHJkYXI6Ly9wcm9ibGVtLzUxOTE0MTg+KQotICAgICAgICAgICAgcmV0
dXJuICFpc1Byb2dyZXNzaXZlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLUludFNpemUgSW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90IGluZGV4
LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBwcm9wZXJ0aWVzID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ29weVByb3BlcnRpZXNBdElu
ZGV4KG1fZGVjb2RlciwgaW5kZXgsIGltYWdlU291cmNlT3B0aW9ucyhzdWJzYW1wbGluZ0xldmVs
KS5nZXQoKSkpOwotCi0gICAgaWYgKCFwcm9wZXJ0aWVzKQotICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOwotCi0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgaGVpZ2h0ID0gMDsKLSAgICBDRk51
bWJlclJlZiBudW0gPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcGVydGll
cy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBpeGVsV2lkdGgpOwotICAgIGlmIChudW0pCi0gICAg
ICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmd2lkdGgpOwotICAg
IG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgp
LCBrQ0dJbWFnZVByb3BlcnR5UGl4ZWxIZWlnaHQpOwotICAgIGlmIChudW0pCi0gICAgICAgIENG
TnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmaGVpZ2h0KTsKLQotICAgIGlm
ICgoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbikgJiYgb3JpZW50YXRpb25Gcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzLmdldCgp
KS51c2VzV2lkdGhBc0hlaWdodCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZShoZWlnaHQsIHdp
ZHRoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1JbWFnZU9y
aWVudGF0aW9uIEltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdAotewotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BlcnRpZXMgPSBhZG9w
dENGKENHSW1hZ2VTb3VyY2VDb3B5UHJvcGVydGllc0F0SW5kZXgobV9kZWNvZGVyLCBpbmRleCwg
aW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRpZXMpCi0gICAg
ICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLQotICAgIHJldHVybiBvcmllbnRh
dGlvbkZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMuZ2V0KCkpOwotfQotCi1JbnRTaXplIEltYWdl
U291cmNlOjpzaXplKEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgY29u
c3QKLXsKLSAgICByZXR1cm4gZnJhbWVTaXplQXRJbmRleCgwLCAwLCBkZXNjcmlwdGlvbik7Ci19
Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIGhvdFNwb3QpIGNvbnN0
Ci17Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0Yo
Q0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIDAsIGltYWdlU291
cmNlT3B0aW9ucygpLmdldCgpKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpbnQgeCA9IC0xLCB5ID0gLTE7Ci0gICAgQ0ZOdW1iZXJSZWYgbnVt
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENG
U1RSKCJob3RzcG90WCIpKTsKLSAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0s
IGtDRk51bWJlckludFR5cGUsICZ4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbnVt
ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb3BlcnRpZXMuZ2V0KCksIENG
U1RSKCJob3RzcG90WSIpKTsKLSAgICBpZiAoIW51bSB8fCAhQ0ZOdW1iZXJHZXRWYWx1ZShudW0s
IGtDRk51bWJlckludFR5cGUsICZ5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KHggPCAwIHx8IHkgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBob3RTcG90ID0g
SW50UG9pbnQoeCwgeSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXNpemVfdCBJbWFnZVNvdXJj
ZTo6Ynl0ZXNEZWNvZGVkVG9EZXRlcm1pbmVQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICAvLyBN
ZWFzdXJlZCBieSB0cmFjaW5nIG1hbGxvYy9jYWxsb2MgY2FsbHMgb24gTWFjIE9TIDEwLjYuNiwg
eDg2XzY0LgotICAgIC8vIEEgbm9uLXplcm8gdmFsdWUgZW5zdXJlcyBjYWNoZWQgaW1hZ2VzIHdp
dGggbm8gZGVjb2RlZCBmcmFtZXMgc3RpbGwgZW50ZXIKLSAgICAvLyB0aGUgbGl2ZSBkZWNvZGVk
IHJlc291cmNlcyBsaXN0IHdoZW4gdGhlIENHSW1hZ2VTb3VyY2UgZGVjb2RlcyBpbWFnZQotICAg
IC8vIHByb3BlcnRpZXMsIGFsbG93aW5nIHRoZSBjYWNoZSB0byBwcnVuZSB0aGUgcGFydGlhbGx5
IGRlY29kZWQgaW1hZ2UuCi0gICAgLy8gVGhpcyB2YWx1ZSBpcyBsaWtlbHkgdG8gYmUgaW5hY2N1
cmF0ZSBvbiBvdGhlciBwbGF0Zm9ybXMsIGJ1dCB0aGUgb3ZlcmFsbAotICAgIC8vIGJlaGF2aW9y
IGlzIHVuY2hhbmdlZC4KLSAgICByZXR1cm4gMTMwODg7Ci19Ci0gICAgCi1pbnQgSW1hZ2VTb3Vy
Y2U6OnJlcGV0aXRpb25Db3VudCgpCi17Ci0gICAgaWYgKCFpbml0aWFsaXplZCgpKQotICAgICAg
ICByZXR1cm4gY0FuaW1hdGlvbkxvb3BPbmNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNvcHlQcm9wZXJ0aWVzKG1f
ZGVjb2RlciwgaW1hZ2VTb3VyY2VPcHRpb25zKCkuZ2V0KCkpKTsKLSAgICBpZiAoIXByb3BlcnRp
ZXMpCi0gICAgICAgIHJldHVybiBjQW5pbWF0aW9uTG9vcE9uY2U7Ci0KLSAgICBDRkRpY3Rpb25h
cnlSZWYgZ2lmUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eUdJRkRpY3Rpb25hcnkpOwotICAg
IGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5
R0lGTG9vcENvdW50KTsKLQotICAgICAgICAvLyBObyBwcm9wZXJ0eSBtZWFucyBsb29wIG9uY2Uu
Ci0gICAgICAgIGlmICghbnVtKQotICAgICAgICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25j
ZTsKLQotICAgICAgICBpbnQgbG9vcENvdW50OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51
bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BDb3VudCk7Ci0KLSAgICAgICAgLy8gQSBwcm9wZXJ0
eSB3aXRoIHZhbHVlIDAgbWVhbnMgbG9vcCBmb3JldmVyLgotICAgICAgICByZXR1cm4gbG9vcENv
dW50ID8gbG9vcENvdW50IDogY0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKLSAgICB9Ci0KLSAgICBD
RkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25h
cnkpOwotICAgIGlmIChwbmdQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGTnVtYmVyUmVmIG51bSA9
IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3Jl
Q0dJbWFnZVByb3BlcnR5QVBOR0xvb3BDb3VudCk7Ci0gICAgICAgIGlmICghbnVtKQotICAgICAg
ICAgICAgcmV0dXJuIGNBbmltYXRpb25Mb29wT25jZTsKLQotICAgICAgICBpbnQgbG9vcENvdW50
OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bSwga0NGTnVtYmVySW50VHlwZSwgJmxvb3BD
b3VudCk7Ci0gICAgICAgIHJldHVybiBsb29wQ291bnQgPyBsb29wQ291bnQgOiBjQW5pbWF0aW9u
TG9vcEluZmluaXRlOwotICAgIH0KLQotICAgIC8vIFR1cm5zIG91dCB3ZSdyZSBub3QgYW4gYW5p
bWF0ZWQgaW1hZ2UgYWZ0ZXIgYWxsLCBzbyB3ZSBkb24ndCBhbmltYXRlLgotICAgIHJldHVybiBj
QW5pbWF0aW9uTm9uZTsKLX0KLQotc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9kZWNvZGVyID8gQ0dJbWFnZVNvdXJjZUdldENvdW50KG1fZGVj
b2RlcikgOiAwOwotfQotCi1DR0ltYWdlUmVmIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwpCi17Ci0g
ICAgaWYgKCFpbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZUlt
YWdlQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJjZU9wdGlvbnMoc3Vic2FtcGxp
bmdMZXZlbCkuZ2V0KCkpKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyA8cmRhcjovL3By
b2JsZW0vNzM3MTE5OD4gLSBDb3JlR3JhcGhpY3MgY2hhbmdlZCB0aGUgZGVmYXVsdCBjYWNoaW5n
IGJlaGF2aW91ciBpbiBpT1MgNC4wIHRvIGtDR0ltYWdlQ2FjaGluZ1RyYW5zaWVudAotICAgIC8v
IHdoaWNoIGNhdXNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZm9yIHVzIHNpbmNlIHRoZSBp
bWFnZXMgaGFkIHRvIGJlIHJlc2FtcGxlZC9yZWNyZWF0ZWQgZXZlcnkgdGltZSB3ZSBjYWxsZWQK
LSAgICAvLyBDR0NvbnRleHREcmF3SW1hZ2UuIFdlIG5vdyB0ZWxsIENHIHRvIGNhY2hlIHRoZSBk
cmF3biBpbWFnZXMuIFNlZSBhbHNvIDxyZGFyOi8vcHJvYmxlbS8xNDM2Njc1NT4gLQotICAgIC8v
IENvcmVHcmFwaGljcyBuZWVkcyB0byB1bi1kZXByZWNhdGUga0NHSW1hZ2VDYWNoaW5nVGVtcG9y
YXJ5IHNpbmNlIGl0J3Mgc3RpbGwgbm90IHRoZSBkZWZhdWx0LgotI2lmIENPTVBJTEVSKENMQU5H
KQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotI2VuZGlmCi0gICAgQ0dJbWFn
ZVNldENhY2hpbmdGbGFncyhpbWFnZS5nZXQoKSwga0NHSW1hZ2VDYWNoaW5nVGVtcG9yYXJ5KTsK
LSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRp
ZgotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLQotICAgIENGU3RyaW5nUmVmIGltYWdlVVRJID0g
Q0dJbWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJp
bmdSZWYgeGJtVVRJID0gQ0ZTVFIoInB1YmxpYy54Yml0bWFwLWltYWdlIik7Ci0KLSAgICBpZiAo
IWltYWdlVVRJKQotICAgICAgICByZXR1cm4gaW1hZ2UubGVha1JlZigpOwotCi0gICAgaWYgKCFD
RkVxdWFsKGltYWdlVVRJLCB4Ym1VVEkpKQotICAgICAgICByZXR1cm4gaW1hZ2UubGVha1JlZigp
OwotICAgIAotICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwgbWFzayBvdXQgYWxsIHRoZSB3
aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4KLSAgICBjb25zdCBDR0Zsb2F0
IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1NSwgMjU1LCAyNTV9OwotICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZVdpdGhNYXNraW5nQ29sb3JzKGltYWdlLmdldCgpLCBtYXNraW5nQ29sb3JzKSk7Ci0gICAgaWYg
KCFtYXNrZWRJbWFnZSkKLSAgICAgICAgcmV0dXJuIGltYWdlLmxlYWtSZWYoKTsKLQotICAgIHJl
dHVybiBtYXNrZWRJbWFnZS5sZWFrUmVmKCk7Ci19Ci0KLWJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIEFTU0VSVChmcmFtZUNvdW50
KCkpOwotICAgIHJldHVybiBDR0ltYWdlU291cmNlR2V0U3RhdHVzQXRJbmRleChtX2RlY29kZXIs
IGluZGV4KSA9PSBrQ0dJbWFnZVN0YXR1c0NvbXBsZXRlOwotfQotCi1mbG9hdCBJbWFnZVNvdXJj
ZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmICghaW5pdGlh
bGl6ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9hdCBkdXJhdGlvbiA9IDA7Ci0g
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJvcGVydGllcyA9IGFkb3B0Q0YoQ0dJbWFn
ZVNvdXJjZUNvcHlQcm9wZXJ0aWVzQXRJbmRleChtX2RlY29kZXIsIGluZGV4LCBpbWFnZVNvdXJj
ZU9wdGlvbnMoKS5nZXQoKSkpOwotICAgIGlmIChwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIENGRGlj
dGlvbmFyeVJlZiBnaWZQcm9wZXJ0aWVzID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm9wZXJ0aWVzLmdldCgpLCBrQ0dJbWFnZVByb3BlcnR5R0lGRGljdGlvbmFyeSk7
Ci0gICAgICAgIGlmIChnaWZQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJS
ZWYgbnVtID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGdpZlByb3BlcnRpZXMs
IGtDR0ltYWdlUHJvcGVydHlHSUZVbmNsYW1wZWREZWxheVRpbWUpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVXNlIHRoZSB1bmNsYW1wZWQgZnJhbWUgZGVsYXkgaWYgaXQgZXhpc3RzLgotICAgICAg
ICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9hdFR5cGUsICZkdXJh
dGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShnaWZQcm9wZXJ0aWVzLCBrQ0dJbWFnZVByb3BlcnR5
R0lGRGVsYXlUaW1lKSkgewotICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgY2xh
bXBlZCBmcmFtZSBkZWxheSBpZiB0aGUgdW5jbGFtcGVkIGZyYW1lIGRlbGF5IGRvZXMgbm90IGV4
aXN0LgotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtLCBrQ0ZOdW1iZXJGbG9h
dFR5cGUsICZkdXJhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgcG5nUHJvcGVydGllcyA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUocHJvcGVydGllcy5nZXQoKSwga0NHSW1hZ2VQcm9wZXJ0eVBOR0RpY3Rpb25h
cnkpOwotICAgICAgICBpZiAocG5nUHJvcGVydGllcykgewotICAgICAgICAgICAgaWYgKENGTnVt
YmVyUmVmIG51bSA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0
aWVzLCBXZWJDb3JlQ0dJbWFnZVByb3BlcnR5QVBOR1VuY2xhbXBlZERlbGF5VGltZSkpCi0gICAg
ICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1
cmF0aW9uKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKENGTnVtYmVyUmVmIG51bSA9IChDRk51bWJl
clJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbmdQcm9wZXJ0aWVzLCBXZWJDb3JlQ0dJbWFnZVBy
b3BlcnR5QVBOR0RlbGF5VGltZSkpCi0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShu
dW0sIGtDRk51bWJlckZsb2F0VHlwZSwgJmR1cmF0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4g
aW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KLSAgICAvLyBXZSBmb2xsb3cgRmly
ZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFt
ZXMgdGhhdCBzcGVjaWZ5Ci0gICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFy
Oi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+Ci0gICAg
Ly8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQotICAg
ICAgICByZXR1cm4gMC4xZjsKLSAgICByZXR1cm4gZHVyYXRpb247Ci19Ci0KLWJvb2wgSW1hZ2VT
b3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoIW1f
ZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBGSVhNRTogd2h5IGRvZXNuJ3QgdGhp
cyByZXR1cm4gdHJ1ZT8KLQotICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQ0ZTdHJpbmdSZWYgaW1hZ2VUeXBlID0gQ0dJ
bWFnZVNvdXJjZUdldFR5cGUobV9kZWNvZGVyKTsKLQotICAgIC8vIFJldHVybiBmYWxzZSBpZiB0
aGVyZSBpcyBubyBpbWFnZSB0eXBlIG9yIHRoZSBpbWFnZSB0eXBlIGlzIEpQRUcsIGJlY2F1c2UK
LSAgICAvLyBKUEVHIGRvZXMgbm90IHN1cHBvcnQgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgIGlm
ICghaW1hZ2VUeXBlIHx8IENGRXF1YWwoaW1hZ2VUeXBlLCBDRlNUUigicHVibGljLmpwZWciKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBDb3VsZCByZXR1cm4gZmFs
c2UgZm9yIG90aGVyIG5vbi10cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzLgotICAgIC8vIEZJWE1F
OiBDb3VsZCBtYXliZSByZXR1cm4gZmFsc2UgZm9yIGEgR0lGIEZyYW1lIGlmIHdlIGhhdmUgZW5v
dWdoIGluZm8gaW4gdGhlIEdJRiBwcm9wZXJ0aWVzIGRpY3Rpb25hcnkKLSAgICAvLyB0byBkZXRl
cm1pbmUgd2hldGhlciBvciBub3QgYSB0cmFuc3BhcmVudCBjb2xvciB3YXMgZGVmaW5lZC4KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgSW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdElu
ZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKSBjb25z
dAotewotICAgIEludFNpemUgZnJhbWVTaXplID0gZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKSk7Ci0gICAgcmV0dXJuIGZyYW1lU2l6ZS53aWR0aCgpICogZnJhbWVTaXplLmhl
aWdodCgpICogNDsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
REVmbC5jcHAKaW5kZXggYmE0MTU5N2FhMTEwMWRiNjI5MDIzZDI3M2IyMDBlNzgxZDMzYWFjOS4u
ODg0NDllOTc4ZWE5NWNkZmU4N2IyMzVlM2Y1MWRiNTUwYjM4ZGNmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250
ZXh0M0RFZmwuY3BwCkBAIC0yNDksNyArMjQ5LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4g
c2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGltYWdlIGlzIGp1c3QgYSBzaGFsbG93IGNvcHkgb2Yg
dGhlIGRhdGEuCi0gICAgbV9kZWNvZGVyID0gbmV3IEltYWdlU291cmNlKHByZW11bHRpcGx5QWxw
aGEgPyBJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkIDogSW1hZ2VTb3VyY2U6OkFscGhh
Tm90UHJlbXVsdGlwbGllZCwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVJZ25vcmVkIDogSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlQXBwbGllZCk7CisgICAgbV9kZWNvZGVyID0gbmV3IEltYWdlU291cmNlKG51bGxw
dHIsIHByZW11bHRpcGx5QWxwaGEgPyBJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkIDog
SW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgaWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUgPyBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVJZ25vcmVkIDogSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CiAKICAgICBpZiAoIW1fZGVjb2Rl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDcgKzI2Myw3IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sCiAgICAgICAgIGlmICghZGVjb2Rlci5mcmFtZUNvdW50KCkgfHwgIWRlY29k
ZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgwKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDAp
OworICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBtX2ltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAvLyAxLiBGb3IgdGV4SW1hZ2Uy
RCB3aXRoIEhUTUxWaWRlb0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5QWxwaGEg
aGFkIGJlZW4gYXBwbGllZCBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIDB4RkYgZm9yIGVhY2ggcGl4
ZWwsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvSWNv
bklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1t
CmluZGV4IDIxNTkxNWYyOGExOTIxNzIzOTZkNDZmMDg2ZDIyNDliODFkOWQ3NmEuLmUxODMzZDE5
ODMwYjEwNzY2MzY2NGI2MTI4NDQ1OTdmODNmYzBhODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9JY29uSU9TLm1tCkBAIC0zMyw3ICszMyw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLUljb246Okljb24oQ0dJbWFnZVJlZiBpbWFnZSkKK0lj
b246Okljb24oTmF0aXZlSW1hZ2VQdHIgaW1hZ2UpCiAgICAgOiBtX2NnSW1hZ2UoaW1hZ2UpCiB7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1h
Z2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMu
bW0KaW5kZXggZmYwNzEzMWE2MWZjZWQwNDU4NmIzNzJkOWJhMjA3OWE5ODczYzM4Yi4uY2IyZDJl
NjMzNzExNjlkZDI2MWExNTViYzgxZjVjNGUyMTk4MWRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtNTMsNyArNTMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRhdGVQbGF0Zm9y
bURhdGEoKQogewotICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgIT0gMSkKKyAgICBpZiAobV9zb3Vy
Y2UubV9mcmFtZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFVTRShBUFBL
SVQpCkBAIC05NSw3ICs5NSw3IEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJl
c2VudGF0aW9uKCkKIAogICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVm
IGNnSW1hZ2UgPSBmcmFtZUF0SW5kZXgoaSk7CisgICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9
IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwogICAgICAgICBpZiAoY2dJbWFnZSkKICAgICAg
ICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCmluZGV4IDgzNWVjZjNm
NGZlZWViOGEwZGZhOGQzNjk3MzEyOGYzYjgwN2I5MjYuLjQ3MDczYzBlZDY5MGUwNDRmZmIzYTk0
ZTU4NmYyNjAyNzlkMWM0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBCaXRtYXBJ
bWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwg
Y29uc3QgRmxvYXQKIHsKICAgICBzaXplX3QgZnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBp
bWFnZSA9IGZyYW1lQXRJbmRleChpKTsKKyAgICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1l
SW1hZ2VBdEluZGV4KGkpLmdldCgpOwogICAgICAgICBpZiAoaW1hZ2UgJiYgQ0dJbWFnZUdldEhl
aWdodChpbWFnZSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzcmNTaXplLmhlaWdodCgpKSAmJiBD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3JjU2l6ZS53aWR0
aCgpKSkgewogICAgICAgICAgICAgc2l6ZV90IGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1l
OwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDI5YTIw
MjNkYjYzYTkxNDM0YzM5NDhlYWE1NTIzYmI2MWZlODEwNzUuLjk3ZWQwOTc5MzVjNTFmYzIwYTg0
NWM5NThlMTU2OThkMjAwMGRiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4
dCYgY3R4dCwgY29uc3QgRmxvYXQKIHsKICAgICBzaXplX3QgZnJhbWVzID0gZnJhbWVDb3VudCgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKLSAgICAgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lQXRJbmRleChpKTsKKyAgICAgICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpOwog
ICAgICAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0KaW5kZXggYmJhZTkxZmE4ZTNjMDY2
NDQ3YzQ2NGQ2ZTMxMjAwZGUyNDhjZTgzZi4uOTFjOTJlOTEyY2MyMTg5MmY2NTllNjdhOTU5NTcx
ZmJkZDAwMjdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJ
bWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFj
Lm1tCkBAIC05MSw3ICs5MSw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBjcmVhdGVEcmFnSW1hZ2VG
cm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpCiAgICAgaWYgKGlz
PEJpdG1hcEltYWdlPigqaW1hZ2UpKSB7CiAgICAgICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50
YXRpb247CiAgICAgICAgIEJpdG1hcEltYWdlJiBiaXRtYXBJbWFnZSA9IGRvd25jYXN0PEJpdG1h
cEltYWdlPigqaW1hZ2UpOwotICAgICAgICBJbnRTaXplIHNpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24gPSBiaXRtYXBJbWFnZS5zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uKGRlc2NyaXB0aW9uKTsK
KyAgICAgICAgSW50U2l6ZSBzaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gYml0bWFwSW1hZ2Uu
c2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbigpOwogCiAgICAgICAgIGlmIChkZXNjcmlwdGlvbi5y
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQogICAg
ICAgICAgICAgb3JpZW50YXRpb24gPSBiaXRtYXBJbWFnZS5vcmllbnRhdGlvbkZvckN1cnJlbnRG
cmFtZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274250</attachid>
            <date>2016-03-16 18:24:49 -0700</date>
            <delta_ts>2017-08-21 12:17:25 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>image-7.patch</filename>
            <type>text/plain</type>
            <size>5203</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmOWE0ZmRkLi5jYzE5NDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjkg
QEAKIDIwMTYtMDMtMTYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNv
bT4KIAorICAgICAgICBNYWtlIHRoZSBJbWFnZUZyYW1lRGVjb2RlciBub3RpZmllcyB0aGUgaW1h
Z2Ugb2JzZXJ2ZXIgd2hlbiBhIGZyYW1lIGltYWdlIGZpbmlzaGVzIGRlY29kaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU1NjYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgc3luY2hyb25vdXMg
aW1hZ2UgZGVjb2RpbmcgcmVsaWVzIG9uIHJlY2VpdmluZyBuZXcgZGF0YSB0byBtYXJrCisgICAg
ICAgIHRoZSBhc3NvY2lhdGVkIGltYWdlIHJlbmRlcmVycyBmb3IgcmVwYWludC4gV2l0aCB0aGUg
YXN5bmNocm9ub3VzCisgICAgICAgIGltYWdlIGRlY29kaW5nIHdlIG5lZWQgdGhlIEltYWdlIG9i
c2VydmVyICh3aGljaCBpcyBhIENhY2hlZEltYWdlKSwKKyAgICAgICAgdG8gbm90aWZ5IGl0cyBv
YnNlcnZlcnMgKHdoaWNoIGFyZSByZW5kZXJlcnMpIHdoZW4gYSBmcmFtZSBpbWFnZQorICAgICAg
ICBmaW5pc2hlZCBkZWNvZGluZy4gVGhpcyB3aWxsIGd1YXJhbnRlZSByZW5kZXJpbmcgdGhlIGNv
cnJlY3QgZnJhbWUKKyAgICAgICAgaW1hZ2Ugd2hlbiBpdCBmaW5pc2hlcyBkZWNvZGluZy4KKwor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRJbWFnZTo6ZGVjb2RlZEltYWdlQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNl
cnZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpkZWNvZGVkSW1hZ2VDaGFuZ2VkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRnJhbWVEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEZWNvZGVyOjpjYWNoZUN1cnJlbnRGcmFtZSk6CisKKzIwMTYtMDMtMTYgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLGNvbT4KKwogICAgICAgICBBZGQgdGhl
IGFzeW5jaHJvbm91cyBpbWFnZSBkZWNvZGluZyBtb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU1NDYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKaW5kZXggOWExNDc1Ny4uMWJmYWRlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCkBAIC00NzgsNiArNDc4LDE0
IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1h
Z2UsIGludCBkZWx0YSkKICAgICAKICAgICBzZXREZWNvZGVkU2l6ZShkZWNvZGVkU2l6ZSgpICsg
ZGVsdGEpOwogfQorICAgIAordm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2RlZEltYWdlQ2hhbmdlZChj
b25zdCBJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBtX2ltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7Cit9CiAKIHZv
aWQgQ2FjaGVkSW1hZ2U6OmRpZERyYXcoY29uc3QgSW1hZ2UqIGltYWdlKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAppbmRleCAzNGVhZWMwLi41YjU5NTJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaApAQCAtMTE4LDkgKzEx
OCwxMSBAQCBwcml2YXRlOgogCiAgICAgLy8gSW1hZ2VPYnNlcnZlcgogICAgIHZvaWQgZGVjb2Rl
ZFNpemVDaGFuZ2VkKGNvbnN0IEltYWdlKiwgaW50IGRlbHRhKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRlY29kZWRJbWFnZUNoYW5nZWQoY29uc3QgSW1hZ2UqKSBvdmVycmlkZTsKKyAgICAKICAgICB2
b2lkIGRpZERyYXcoY29uc3QgSW1hZ2UqKSBvdmVycmlkZTsKLQogICAgIHZvaWQgYW5pbWF0aW9u
QWR2YW5jZWQoY29uc3QgSW1hZ2UqKSBvdmVycmlkZTsKKwogICAgIHZvaWQgY2hhbmdlZEluUmVj
dChjb25zdCBJbWFnZSosIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgYWRk
SW5jcmVtZW50YWxEYXRhQnVmZmVyKFNoYXJlZEJ1ZmZlciYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oCmluZGV4IGVkNmIwMTcuLjE5NTAy
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2Jz
ZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2Vy
dmVyLmgKQEAgLTM4LDggKzM4LDkgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkltYWdlT2Jz
ZXJ2ZXIoKSB7fQogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQo
Y29uc3QgSW1hZ2UqLCBpbnQgZGVsdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlZElt
YWdlQ2hhbmdlZChjb25zdCBJbWFnZSopID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGlk
RHJhdyhjb25zdCBJbWFnZSopID0gMDsKLQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BZHZh
bmNlZChjb25zdCBJbWFnZSopID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VkSW5SZWN0
KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBiMmRhMDg0Li4xMWM2Zjlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwCkBAIC0xNzUsNiArMTc1LDEzIEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmRlY29kZWRTaXplQ2hh
bmdlZChpbnQgZGVjb2RlZFNpemUpIGNvbnN0CiAgICAgbV9pbWFnZS0+aW1hZ2VPYnNlcnZlcigp
LT5kZWNvZGVkU2l6ZUNoYW5nZWQobV9pbWFnZSwgZGVjb2RlZFNpemUpOwogfQogCit2b2lkIElt
YWdlU291cmNlOjpkZWNvZGVkSW1hZ2VDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW1h
Z2UgfHwgIW1faW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
aW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZEltYWdlQ2hhbmdlZChtX2ltYWdlKTsKK30K
KwogU3Vic2FtcGxpbmdMZXZlbCBJbWFnZVNvdXJjZTo6Y2FsY3VsYXRlTWF4aW11bVN1YnNhbXBs
aW5nTGV2ZWwoKSBjb25zdAogewogICAgIGlmICghbV9hbGxvd1N1YnNhbXBsaW5nIHx8ICFhbGxv
d1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoMCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRleCBjMzlmNjY2Li45ZmJmOWMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTE1OCw2
ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVjb2RlZFNpemVEZWNyZW1lbnRlZCh1bnNp
Z25lZCBkZWNvZGVkU2l6ZSwgQ2xlYXJlZEZyYW1lcyA9IENsZWFyZWRGcmFtZXM6OlBhcnRpYWwp
IGNvbnN0OwogICAgIHZvaWQgZGVjb2RlZFNpemVDaGFuZ2VkKGludCBkZWNvZGVkU2l6ZSkgY29u
c3Q7CiAgICAgdm9pZCBkaWREZWNvZGVQcm9wZXJ0aWVzKCkgY29uc3Q7CisgICAgdm9pZCBkZWNv
ZGVkSW1hZ2VDaGFuZ2VkKCkgY29uc3Q7CiAgICAgCiAgICAgU3Vic2FtcGxpbmdMZXZlbCBjYWxj
dWxhdGVNYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0OwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VGcmFtZURlY29kZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VGcmFtZURlY29kZXIu
Y3BwCmluZGV4IDgzZWUwOTYuLjMyYzdmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRnJhbWVEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUZyYW1lRGVjb2Rlci5jcHAKQEAgLTE0OCw2
ICsxNDgsNyBAQCB2b2lkIEltYWdlRnJhbWVEZWNvZGVyOjpjYWNoZUN1cnJlbnRGcmFtZSgpCiAg
ICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1ttX2N1cnJlbnRGcmFtZV0ubV9m
cmFtZUJ5dGVzOwogICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBmcmFtZUJ5dGVzXSB7
CiAgICAgICAgICAgICBtX3NvdXJjZS5kZWNvZGVkU2l6ZUluY3JlbWVudGVkKGZyYW1lQnl0ZXMp
OworICAgICAgICAgICAgbV9zb3VyY2UuZGVjb2RlZEltYWdlQ2hhbmdlZCgpOwogICAgICAgICB9
KTsKICAgICB9CiAgICAgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>