<?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>231010</bug_id>
          
          <creation_ts>2021-09-30 01:30:51 -0700</creation_ts>
          <short_desc>Cocoa GraphicsContextGLOpenGL should not be used by GraphicsContextGLCVANGLE</short_desc>
          <delta_ts>2021-10-01 05:54:31 -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>WebGL</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>226504</blocked>
    
    <blocked>231009</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1798783</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-30 01:30:51 -0700</bug_when>
    <thetext>Cocoa GraphicsContextGLOpenGL should not be used by GraphicsContextGLCVANGLE.
Makes it more complex to develop features related to compositor platform layers, as GraphicsContextGLOpenGL &quot;draws to&quot; a platform layer
but GraphicsContextGLCVANGLE shouldn&apos;t have one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798851</commentid>
    <comment_count>1</comment_count>
      <attachid>439731</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-30 06:33:30 -0700</bug_when>
    <thetext>Created attachment 439731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798854</commentid>
    <comment_count>2</comment_count>
      <attachid>439732</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-30 07:05:14 -0700</bug_when>
    <thetext>Created attachment 439732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798909</commentid>
    <comment_count>3</comment_count>
      <attachid>439747</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-30 10:01:05 -0700</bug_when>
    <thetext>Created attachment 439747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798967</commentid>
    <comment_count>4</comment_count>
      <attachid>439747</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-09-30 12:00:16 -0700</bug_when>
    <thetext>Comment on attachment 439747
Patch

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

Since the underlying ANGLE context relationships haven&apos;t changed - still creating a separate shared context for video uploads, with the same parameters - this looks good to me. Agree this is just a refactor. The win failure looks like an unrelated flake. r+

&gt; Source/WebCore/platform/graphics/cocoa/ANGLEUtilitiesCocoa.h:37
&gt; +void* createPbufferAndAttachIOSurface(EGLDisplay, EGLConfig, GLenum target, EGLint usageHint, GLenum internalFormat, GLsizei width, GLsizei height, GLenum type, IOSurfaceRef, GLuint plane);

Would it be helpful to put these two free functions in another namespace or as static methods on a class, just to have a little better scoping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799246</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-01 05:53:57 -0700</bug_when>
    <thetext>Committed r283362 (242371@main): &lt;https://commits.webkit.org/242371@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439747.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799247</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-01 05:54:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/83762759&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439731</attachid>
            <date>2021-09-30 06:33:30 -0700</date>
            <delta_ts>2021-09-30 07:05:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231010-20210930163327.patch</filename>
            <type>text/plain</type>
            <size>60232</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRiZDQ2ZDQ2ZTU1ODQ3
MDMzMzQxYWIxMWFhZjllNzhmNDhiNzM3NS4uNTRkZjA2YmEyODc0NmI1ZGViNDEzODFlYmMwZWZl
NjllMTI1Zjk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wOS0zMCAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIENvY29hIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMIHNob3VsZCBub3QgYmUgdXNlZCBieSBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMTAxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNyZWF0ZXMgYSBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUgaGVscGVyIHRvIGRvCisgICAgICAgIGRvIFlVViB0ZXh0dXJlIHVwbG9hZHMuIFRoaXMgR3Jh
cGhpY3NDb250ZXh0R0xDVkFOR0xFIGNyZWF0ZXMgYSBPcGVuR0wgRVMgY29udGV4dCB0aGF0Cisg
ICAgICAgIHNoYXJlcyB0aGUgT3BlbkdMIHN0YXRlIGJ5IHRoZSBjYWxsZXIuCisKKyAgICAgICAg
UHJldmlvdXNseSB0aGUgbmV3IGNvbnRleHQgd291bGQgYmUgYSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC4gVGhpcyB3b3VsZCBiZSBhIHByb2JsZW0KKyAgICAgICAgc2luY2UgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgaGFzIGNvbXBvc2l0b3IgcmVsYXRlZCBsb2dpYyBhbmQgb2JqZWN0cywgZm9y
IGV4YW1wbGUKKyAgICAgICAgdGhlIFdlYkdMIGxheWVyIGFzIHdlbGwgYXMgcmVzb3VyY2VzIGZv
ciBkZWZhdWx0IGZyYW1lYnVmZmVyIG9wZXJhdGlvbi4gU2hhcmVkIGNvbnRleHQKKyAgICAgICAg
d291bGQgYWxzbyBnbyB0byB0aGUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIGNvbnRl
eHQgbGlzdCBldmVuIHRob3VnaAorICAgICAgICB0aGV5IGNvdWxkIG5vdCBiZSBkZWxldGVkIGJl
aGluZCB0aGUgb3duZXJzIGJhY2sgZHVyaW5nIGNvbnRleHQgcmVjeWNsaW5nLgorCisgICAgICAg
IEluc3RlYWQsIGNyZWF0ZSBqdXN0IGEgbm9ybWFsIEFOR0xFIGNvbnRleHQgYW5kIGNhbGwgQU5H
TEUgZGlyZWN0bHkgZnJvbQorICAgICAgICBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuIFRoaXMg
aXMgbW9yZSBjb25zaXN0ZW50IHdpdGggc29mdHdhcmUgbGF5ZXJzOgorICAgICAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCBhbmQgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFIGFyZSBhdCB0aGUg
c2FtZSBzb2Z0d2FyZQorICAgICAgICBsZXZlbCwgcGFydCBvZiB0aGUgc2FtZSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBNYWtlcyBpdCBwb3NzaWJs
ZSB0byByZW1vdmUgb3RoZXJ3aXNlIHVudXNlZCBhbmQgdW5maXR0aW5nICJzaGFyZWQgY29udGV4
dCIKKyAgICAgICAgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGZyb20gV2ViR0wgbGV2ZWwgZnJvbSBH
cmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yLgorCisg
ICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkdyYXBoaWNz
Q29udGV4dEdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRH
TC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFz
Q1YpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xFVXRp
bGl0aWVzQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveVBidWZmZXJBbmRE
ZXRhY2hJT1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xF
VXRpbGl0aWVzQ29jb2EuaDogQWRkZWQuCisgICAgICAgIE1vdmUgdGhlIGNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UgdG8gQ29jb2Egc3BlY2lmaWMKKyAgICAgICAgQU5HTEUgdXRpbGl0
eSBmaWxlLgorICAgICAgICBTZWUgYWxzbyBidWcgMjI2NTA0IC0gQWRvcHQgY3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZS9kZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZQorICAg
ICAgICBpbiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGFuZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTENvY29hLm1tCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlRm9yR1BVUHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5H
TCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVT
dGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VD
dXJyZW50KToKKyAgICAgICAgQWRkIGEgbmV3IGZ1bmN0aW9uIHRvIG1ha2UgdGhlIEVHTCBjb250
ZXh0IGN1cnJlbnQgYW5kIG1haW50YWluCisgICAgICAgIHRoZSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3VycmVudENvbnRleHQgY2FjaGUgdmFsdWUgY29ycmVjdGx5LgorICAgICAgICBDYWNo
ZSBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBhbHdheXMgd2hlbiBFR0wgY29udGV4dCBjaGFuZ2Vz
LgorICAgICAgICBUaGUgY2FjaGUgdmFsdWUgaXMgcmVzZXQgYWx3YXlzLCBhbmQgdGhlbiBzZXQg
b25seSB3aGVuIG5lZWRlZAorICAgICAgICBkdXJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1ha2VDb250ZXh0Q3VycmVudCgpLgorCisgICAgICAgIE1ha2UgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFIGZyaWVuZCBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCwgc2luY2UKKyAgICAgICAg
ZXNzZW50aWFsbHkgdGhlIGZvcm1lciBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBs
YXR0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZSk6CisgICAg
ICAgIE1vdmUgdGhlIGltcGxlbWVudGF0aW9uIHRvIGEgQU5HTEUgcmVsYXRlZCBoZWxwZXIgZmls
ZXMgYWJvdmUuCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjph
c0NWKToKKyAgICAgICAgTW92ZSB0aGUgYXNDViB0byB0aGUgaW1wbGVtZW50YXRvbiBmaWxlIGZv
ciBDb2NvY2EsIGFzIHRoYXQgaXMKKyAgICAgICAgdGhlIHBsYXRmb3JtIHdoaWNoIHVzZXMgdGhl
IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2hhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckN1cnJlbnRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAg
UmVwbGFjZSB3aXRoIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OllDYkNyTWF0cml4OjpvcGVyYXRvciBjb25zdCBHTGZsb2F0
KiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRU
cmFuc2ZlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RTo6fkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSk6CisgICAgICAgIFJl
b3JkZXIgdGhlIHJlc291cmNlIGluaXRpYWxpemF0aW9uIHdpdGggU2NvcGVFeGl0IGNsZWFudXAg
ZnVuY3Rpb25zLgorICAgICAgICBBdm9pZCBzdG9yaW5nIHRoZSB5dXZQcm9ncmFtLCBpbnN0ZWFk
IGp1c3QgdXNlIHRoZSBwcm9ncmFtIGFzIHByb2dyYW0KKyAgICAgICAgYmluYXJ5IGFuZCBkZWxl
dGUgdGhlIHByb2dyYW0uCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OllDYkNy
TWF0cml4OjpvcGVyYXRvciBHQ0dMU3Bhbjxjb25zdCBHTGZsb2F0LCAxNj4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjppbml0aWFs
aXplVVZDb250ZXh0T2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgdGhlIHJlc291cmNl
IGluaXRpYWxpemF0aW9uIGludG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgb2JqZWN0CisgICAgICAg
IGl0c2VsZiBpcyBhbHJlYWR5IGluaXRpYWxpemVkIG9ubHkgb24gZGVtYW5kLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjphdHRhY2hJT1N1cmZhY2VUb1RleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
OjpkZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIFNoYXJlIHRo
ZSBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBmcm9tCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQYnVmZmVyQW5k
QXR0YWNoSU9TdXJmYWNlIHRoYXQKKyAgICAgICAgd2FzIG1vdmVkIHRvIFdlYkNvcmU6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaDoKKyAgICAgICAgUmVtb3ZlIHRoZSBtX3l1
dlByb2dyYW0sIHJhdGhlciB1c2UganVzdCB0aGUgcHJvZ3JhbSBiaW5hcnkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIFJlbW92ZSB0aGUgcmVkdW5kYW50IHNo
YXJlZENvbnRleHQgcGFyYW1ldGVyLgorCiAyMDIxLTA5LTMwICBLaW1tbyBLaW5udW5lbiAgPGtr
aW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2NvcGVkRUdMRGVmYXVsdERpc3BsYXkgc2hv
dWxkIGJlIHJlbW92ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGNkMmRmYjI3NDZlNzRk
YjhmYWIwY2FiMjkwOWFjNzkyYTRiYTFjNWQuLmE0YzBhNzYyN2MzNzgxZGZjZDA0OTA2ZmM1MjMz
MDljOTA3MzBjMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzU5LDYgKzM1OSw3IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zv
cm1hdGlvbk1hdHJpeENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BTkdMRVV0aWxpdGllc0NvY29hLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvQXVkaW9UcmFja1ByaXZhdGVXZWJNLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQ29sb3JDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRmxvYXRS
ZWN0Q29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBmNjg2MzkyZGM3OWMxNTVjNmJlZjljOTA1YTQ1OTgwZjZiNzQ4YTVm
Li5lZGY2NzMwOGY5YzM3NjUwN2JjMWRjNDJjMzJmYmFmMTY0NzExMTIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDY0Miw2
ICsxMDY0Miw4IEBACiAJCTdCQjY4MEI3MjVCQTFCRTMwMDJCODczOCAvKiBHcmFwaGljc0NoZWNr
c01hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0No
ZWNrc01hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQjY4MEI4MjVCQTFC
RTQwMDJCODczOCAvKiBHcmFwaGljc0NoZWNrc01hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHcmFwaGljc0NoZWNrc01hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QkNENDJEODI3MDU5OUVGMDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQU5HTEVVdGlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QkNENDJEQTI3MDVDOTQ5MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBTkdMRVV0aWxpdGllc0NvY29hLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JDRDQyREMyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRp
bGl0aWVzQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQU5HTEVVdGlsaXRpZXNDb2NvYS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkU3MjY1QjI1NzYzQjhEMDBFODVEOTggLyogUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzAxMUYzRDI0RkFEMzYwMDA1QkVGMTAgLyogU2V0dGluZ3MuY3BwLmVyYiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBTZXR0aW5ncy5jcHAuZXJiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxMUYz
RTI0RkFEMzYwMDA1QkVGMTAgLyogSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5jcHAuZXJiICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwLmVyYjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIyNjIyLDggKzIyNjI0LDggQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJMjdFM0M4MDYyNTdGNUU2RTAwQzk4NkFCIC8qIEFOR0xFSGVhZGVy
cy5oICovLAotCQkJCTdCQjM0QTE2MjUzNDVDQjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5o
ICovLAogCQkJCTdCQ0Q0MkQ4MjcwNTk5RUYwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllcy5jcHAg
Ki8sCisJCQkJN0JCMzRBMTYyNTM0NUNCMjAwMDI5RDA4IC8qIEFOR0xFVXRpbGl0aWVzLmggKi8s
CiAJCQkJNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmNwcCAq
LywKIAkJCQk2RTI3RjI0NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0ZW5zaW9uc0dMQU5HTEUuaCAq
LywKIAkJCQk2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5jcHAgKi8sCkBAIC0yNzMxOCw2ICsyNzMyMCw4IEBACiAJCUI1MzIwRDY4MTIyQTI0RTkwMDJE
MTQ0MCAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJN0JDRDQyREEyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29jb2EuY3Bw
ICovLAorCQkJCTdCQ0Q0MkRDMjcwNUM5NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0NvY29h
LmggKi8sCiAJCQkJQ0RGOTk1MDEyNEMyODE0OTAwMkVBMDYyIC8qIEF1ZGlvVHJhY2tQcml2YXRl
V2ViTS5jcHAgKi8sCiAJCQkJQ0RGOTk1MDAyNEMyODE0OTAwMkVBMDYyIC8qIEF1ZGlvVHJhY2tQ
cml2YXRlV2ViTS5oICovLAogCQkJCUY0OEQyQUEzMjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNv
Y29hLmggKi8sCkBAIC0zMTM4OSw2ICszMTM5Myw3IEBACiAJCQkJRTdFMDM1NzIyNEQ0RTE5NjAw
OERGRUZCIC8qIEFuYWx5c2VyT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjdFM0M4MDgy
NTdGNUU2RTAwQzk4NkFCIC8qIEFOR0xFSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFB
Nzk1QzcxODg4QkNCMjAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3QkIzNEExNzI1MzQ1Q0IyMDAwMjlEMDggLyogQU5HTEVVdGlsaXRpZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5RTkxMkFCMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRp
b25FZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAv
KiBBbmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjYzNSw3ICszMjY0
MCw2IEBACiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNz
Q29udGV4dENHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNERTg3MDIzQTk2OTczMDA4RkM0N0Ig
LyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAotCQkJCTdCQjM0QTE3MjUzNDVD
QjIwMDAyOUQwOCAvKiBBTkdMRVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzMzBB
MDIxREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0IxMDMzOUUyNTQ5NzIxNzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4
dEdMQ1YuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCMTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBH
cmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCmluZGV4
IDQ2YzI2YWViZmEwODY1MTIyM2VkZjliNWJjMjdhODYyOTZmOGRmZjguLjRmMGE5YjU5ZmI0NGJl
YmZkMzgyNjc3MmQ5YjIwODdkOWVmYWM1ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKQEAgLTM1Nyw3ICszNTcs
NyBAQCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+IEdyYXBoaWNzQ29udGV4dEdMOjpjcmVhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgYXR0cnMsIEdyYXBoaWNzQ29udGV4dEdMKikKK0dyYXBoaWNzQ29udGV4dEdMOjpHcmFw
aGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBt
X2F0dHJzKGF0dHJzKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggYTZlM2U0NGM4MTk5YzVjZGY3NGE5M2Fj
NmY2MTRmZDMwNjU4NTczMS4uZWRhYTRjZTVlYTcyZTczMGJjNTI1NDZjNzAwNmVkMjM3MjczOTYw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRHTC5oCkBAIC05MTQsNyArOTE0LDcgQEAgcHVibGljOgogICAgIC8vIEhvc3RXaW5k
b3cgbWlnaHQgYWZmZWN0IHRoZSBkZWNpc2lvbiB3aGljaCBiYWNrZW5kIGlzIHRvIGJlIHVzZWQu
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTD4gY3Jl
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYsIEhvc3RXaW5kb3cqKTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcywgR3JhcGhp
Y3NDb250ZXh0R0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwogICAgIHZpcnR1YWwgfkdyYXBoaWNz
Q29udGV4dEdMKCkgPSBkZWZhdWx0OwogCiAgICAgdm9pZCBhZGRDbGllbnQoQ2xpZW50JiBjbGll
bnQpIHsgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFO
R0xFLmNwcAppbmRleCAxNTIzMTNhNWIzZGU0NjI4N2E4NWI0OWU3NmYzYWIwYjIyODgwMmUwLi5m
MDQzODgxNTA4Yzk1MDljOGU3Mzc2NGQ2YzRlZWZlNzc3MWFlZDlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmNwcApAQCAtMjg4NSwxNSArMjg4NSw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0g
bW9kZSwgR0NHCiAgICAgZ2w6Ok11bHRpRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwg
Y291bnRzLmRhdGEsIHR5cGUsIHBvaW50ZXJzLmRhdGEoKSwgaW5zdGFuY2VDb3VudHMuZGF0YSwg
ZHJhd2NvdW50KTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikK
LUdyYXBoaWNzQ29udGV4dEdMQ1YqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphc0NWKCkKLXsK
LSAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3YgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRT4oKnRoaXMpOwotICAgIHJldHVybiBtX2N2LmdldCgpOwotfQotI2VuZGlmCi0K
IGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgp
CiB7CiAgICAgc2l6ZV90IG9sZGVzdEZyYW1lQ29tcGxldGlvbkZlbmNlID0gbV9vbGRlc3RGcmFt
ZUNvbXBsZXRpb25GZW5jZSsrICUgbWF4UGVuZGluZ0ZyYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xFVXRpbGl0aWVzQ29jb2EuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQU5HTEVVdGlsaXRpZXND
b2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk5M2I3NzY3MTg5ZmU3ZWRmNmMyNjU5MjE1YWNlM2MyZWEw
NjkzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0FOR0xFVXRpbGl0aWVzQ29jb2EuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXNDb2NvYS5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQqIGNy
ZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoRUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb25m
aWcgY29uZmlnLCBHTGVudW0gdGFyZ2V0LCBFR0xpbnQgdXNhZ2VIaW50LCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgSU9T
dXJmYWNlUmVmIHN1cmZhY2UsIEdMdWludCBwbGFuZSkKK3sKKyAgICBhdXRvIGVnbFRleHR1cmVU
YXJnZXQgPSB0YXJnZXQgPT0gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUgPyBFR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQU5HTEUgOiBFR0xfVEVYVFVSRV8yRDsKKworICAgIGNvbnN0IEVHTGludCBz
dXJmYWNlQXR0cmlidXRlc1tdID0geworICAgICAgICBFR0xfV0lEVEgsIHdpZHRoLAorICAgICAg
ICBFR0xfSEVJR0hULCBoZWlnaHQsCisgICAgICAgIEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUs
IHN0YXRpY19jYXN0PEVHTGludD4ocGxhbmUpLAorICAgICAgICBFR0xfVEVYVFVSRV9UQVJHRVQs
IHN0YXRpY19jYXN0PEVHTGludD4oZWdsVGV4dHVyZVRhcmdldCksCisgICAgICAgIEVHTF9URVhU
VVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSwgc3RhdGljX2Nhc3Q8RUdMaW50PihpbnRlcm5hbEZv
cm1hdCksCisgICAgICAgIEVHTF9URVhUVVJFX0ZPUk1BVCwgRUdMX1RFWFRVUkVfUkdCQSwKKyAg
ICAgICAgRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSwgc3RhdGljX2Nhc3Q8RUdMaW50Pih0eXBlKSwK
KyAgICAgICAgLy8gT25seSBoYXMgYW4gZWZmZWN0IG9uIHRoZSBpT1MgU2ltdWxhdG9yLgorICAg
ICAgICBFR0xfSU9TVVJGQUNFX1VTQUdFX0hJTlRfQU5HTEUsIHVzYWdlSGludCwKKyAgICAgICAg
RUdMX05PTkUsIEVHTF9OT05FCisgICAgfTsKKworICAgIEVHTFN1cmZhY2UgcGJ1ZmZlciA9IEVH
TF9DcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihkaXNwbGF5LCBFR0xfSU9TVVJGQUNFX0FO
R0xFLCBzdXJmYWNlLCBjb25maWcsIHN1cmZhY2VBdHRyaWJ1dGVzKTsKKyAgICBpZiAoIXBidWZm
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFFR0xfQmluZFRleEltYWdl
KGRpc3BsYXksIHBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKKyAgICAgICAgRUdMX0Rlc3Ry
b3lTdXJmYWNlKGRpc3BsYXksIHBidWZmZXIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gcGJ1ZmZlcjsKK30KKwordm9pZCBkZXN0cm95UGJ1ZmZlckFuZERl
dGFjaElPU3VyZmFjZShFR0xEaXNwbGF5IGRpc3BsYXksIHZvaWQqIGhhbmRsZSkKK3sKKyAgICBF
R0xfUmVsZWFzZVRleEltYWdlKGRpc3BsYXksIGhhbmRsZSwgRUdMX0JBQ0tfQlVGRkVSKTsKKyAg
ICBFR0xfRGVzdHJveVN1cmZhY2UoZGlzcGxheSwgaGFuZGxlKTsKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xF
VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0FOR0xFVXRpbGl0aWVzQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45M2JhNGUwZGM5MTMyZTg1ODc3NWY5
YzI1YmFkNjc0OGM3Yzg2OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvQU5HTEVVdGlsaXRpZXNDb2NvYS5oCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkFOR0xFSGVhZGVycy5oIgor
Cit0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIFJldHVybnMgYSBoYW5kbGUgd2hpY2gsIGlmIG5vbi1udWxsLCBtdXN0
IGJlIHJlbGVhc2VkIHdpdGggZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoKS4KK3Zv
aWQqIGNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoRUdMRGlzcGxheSwgRUdMQ29uZmln
LCBHTGVudW0gdGFyZ2V0LCBFR0xpbnQgdXNhZ2VIaW50LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgSU9TdXJmYWNlUmVm
LCBHTHVpbnQgcGxhbmUpOworCit2b2lkIGRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNl
KEVHTERpc3BsYXksIHZvaWQqIGhhbmRsZSk7CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQppbmRleCBlNGVlMDg0NDU3NjdkZTU3NGZmNDM4
MTJlZmEzMGYzYjg4Y2M5YTRjLi45ZjgyMzdkM2JjMzAwZTA3YTg0NzQxYWNiZTNhZmI2YzdiODYz
MmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KQEAgLTI5
LDYgKzI5LDcgQEAKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAKICNpbXBv
cnQgIkFOR0xFVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCiAj
aW1wb3J0ICJDVlV0aWxpdGllcy5oIgogI2ltcG9ydCAiRXh0ZW5zaW9uc0dMQU5HTEUuaCIKICNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmgiCkBAIC00OCw3ICs0
OSw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCkBAIC0x
OTcsNyArMTk4LDcgQEAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEcKICAgICBpZiAoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuaGFzVG9vTWFueUNvbnRleHRz
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KGF0dHJzLCBob3N0V2luZG93LCBudWxscHRyLCBudWxscHRyKSk7CisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKGF0dHJzLCBob3N0V2luZG93LCBudWxscHRyKSk7CiAKICAgICBpZiAoIWNvbnRl
eHQtPm1fY29udGV4dE9iaikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDcsMjMgKzIw
OCwxMyBAQCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0RwogICAgIHJldHVybiBjb250ZXh0OwogfQog
Ci1SZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIHNoYXJlZENvbnRleHQpCi17Ci0K
LSAgICBhdXRvIGNvbnRleHQgPSBhZG9wdFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KHNoYXJlZENvbnRleHQuY29udGV4dEF0dHJpYnV0ZXMoKSwgbnVsbHB0ciwgJnNoYXJlZENvbnRl
eHQsIG51bGxwdHIpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLmFkZENvbnRleHQoY29udGV4dC5wdHIoKSk7Ci0KLSAgICByZXR1cm4gY29u
dGV4dDsKLX0KLQogUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlRm9yR1BVUHJvY2Vzcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMmIGF0dHJzLCBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbiogc3dhcENo
YWluKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KGF0dHJzLCBudWxscHRyLCBudWxscHRyLCBzd2FwQ2hhaW4pKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChhdHRycywgbnVsbHB0ciwgc3dhcENoYWlu
KSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZh
Y2VTd2FwQ2hhaW4qIHN3YXBDaGFpbikKLSAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJzLCBz
aGFyZWRDb250ZXh0KQorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyosIEdy
YXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluKiBzd2FwQ2hhaW4pCisgICAgOiBHcmFw
aGljc0NvbnRleHRHTChhdHRycykKIHsKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMud2ViR0xW
ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CiAgICAgaWYg
KGF0dHJzLnVzZU1ldGFsICYmICFwbGF0Zm9ybVN1cHBvcnRzTWV0YWwobV9pc0ZvcldlYkdMMikp
IHsKQEAgLTI5MiwyMCArMjgzLDEyIEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAgICAgICAg
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRT
X0NPTVBBVElCTEVfQU5HTEUpOwogICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQo
RUdMX0ZBTFNFKTsKICAgICB9Ci0gICAgaWYgKCFzaGFyZWRDb250ZXh0KSB7Ci0gICAgICAgIC8v
IFRoZSBzaGFyZWQgY29udGV4dCBpcyBvbmx5IG5vbi1udWxsIHdoZW4gY3JlYXRpbmcgYSBjb250
ZXh0Ci0gICAgICAgIC8vIG9uIGJlaGFsZiBvZiB0aGUgVmlkZW9UZXh0dXJlQ29waWVyLiBXZWJH
TC1zcGVjaWZpYyByZW5kZXJpbmcKLSAgICAgICAgLy8gZmVlZGJhY2sgbG9vcCB2YWxpZGF0aW9u
IGRvZXMgbm90IHdvcmsgaW4gbXVsdGktY29udGV4dAotICAgICAgICAvLyBzY2VuYXJpb3MsIGFu
ZCBtdXN0IGJlIGRpc2FibGVkIGZvciB0aGUgVmlkZW9UZXh0dXJlQ29waWVyJ3MKLSAgICAgICAg
Ly8gY29udGV4dC4KLSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05U
RVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOwotICAgICAgICBlZ2xDb250ZXh0QXR0cmli
dXRlcy5hcHBlbmQoRUdMX1RSVUUpOwotICAgICAgICAvLyBXZWJHTCByZXF1aXJlcyB0aGF0IGFs
bCByZXNvdXJjZXMgYXJlIGNsZWFyZWQgYXQgY3JlYXRpb24uCi0gICAgICAgIC8vIEZJWE1FOiBw
ZXJmb3JtaW5nIHJvYnVzdCByZXNvdXJjZSBpbml0aWFsaXphdGlvbiBpbiB0aGUgVmlkZW9UZXh0
dXJlQ29waWVyIGFkZHMgYSBsYXJnZSBhbW91bnQgb2Ygb3ZlcmhlYWQKLSAgICAgICAgLy8gc28g
aXQgd291bGQgYmUgbmljZSB0byBhdm9pZCB0aGF0IHRoZXJlICh3ZSBzaG91bGQgYWx3YXlzIGJl
IHRvdWNoaW5nIGV2ZXJ5IHBpeGVsIGFzIHdlIGNvcHkpLgotICAgICAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoRUdMX1JPQlVTVF9SRVNPVVJDRV9JTklUSUFMSVpBVElPTl9BTkdMRSk7
Ci0gICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0gICAgfQor
ICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJ
QklMSVRZX0FOR0xFKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUp
OworCisgICAgLy8gV2ViR0wgcmVxdWlyZXMgdGhhdCBhbGwgcmVzb3VyY2VzIGFyZSBjbGVhcmVk
IGF0IGNyZWF0aW9uLgorICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUk9CVVNU
X1JFU09VUkNFX0lOSVRJQUxJWkFUSU9OX0FOR0xFKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoRUdMX1RSVUUpOwogCiAgICAgLy8gV2ViR0wgZG9lc24ndCBhbGxvdyBjbGllbnQg
YXJyYXlzLgogICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElF
TlRfQVJSQVlTX0VOQUJMRURfQU5HTEUpOwpAQCAtMzE2LDE1ICsyOTksMTMgQEAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyBhdHQKIAogICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9O
RSk7CiAKLSAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXlPYmos
IG1fY29uZmlnT2JqLCBzaGFyZWRDb250ZXh0ID8gc3RhdGljX2Nhc3Q8RUdMQ29udGV4dD4oc2hh
cmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKSA6IEVHTF9OT19DT05URVhULCBlZ2xDb250ZXh0QXR0
cmlidXRlcy5kYXRhKCkpOwotICAgIGlmIChtX2NvbnRleHRPYmogPT0gRUdMX05PX0NPTlRFWFQp
IHsKKyAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXlPYmosIG1f
Y29uZmlnT2JqLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsK
KyAgICBpZiAobV9jb250ZXh0T2JqID09IEVHTF9OT19DT05URVhUIHx8ICFtYWtlQ3VycmVudCht
X2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaikpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29u
dGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKIAotICAgIEVHTF9NYWtlQ3VycmVudCht
X2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2Jq
KTsKLQogICAgIGlmIChtX2lzRm9yV2ViR0wyKQogICAgICAgICBnbDo6RW5hYmxlKEdyYXBoaWNz
Q29udGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCk7CiAKQEAgLTQ2Miw3ICs0
NDMsNyBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KCkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIGNvbnRlbnRz
SGFuZGxlKTsKICAgICB9CiAgICAgaWYgKG1fY29udGV4dE9iaikgewotICAgICAgICBjbGVhckN1
cnJlbnRDb250ZXh0KCk7CisgICAgICAgIG1ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05P
X0NPTlRFWFQpOwogICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5T2JqLCBtX2Nv
bnRleHRPYmopOwogICAgIH0KICAgICBBU1NFUlQoY3VycmVudENvbnRleHQgIT0gdGhpcyk7CkBA
IC01MjYsMjAgKzUwNywxMyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckN1cnJlbnRDb250ZXh0KCkKLXsKLSAgICBFR0xCb29sZWFuIHJlc3Vs
dCA9IEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9f
U1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQpOwotICAgIGN1cnJlbnRDb250ZXh0ID0gbnVsbHB0cjsKLX0KLQogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVTdGF0dXMoKQogewogICAgIGlmIChtX2ZhaWxOZXh0U3Rh
dHVzQ2hlY2spIHsKICAgICAgICAgTE9HKFdlYkdMLCAiUHJldGVuZGluZyB0aGUgR1BVIGhhcyBy
ZXNldCAoJXApLiBMb3NlIHRoZSBjb250ZXh0LiIsIHRoaXMpOwogICAgICAgICBtX2ZhaWxOZXh0
U3RhdHVzQ2hlY2sgPSBmYWxzZTsKICAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAg
ICBjbGVhckN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIG1ha2VDdXJyZW50KG1fZGlzcGxheU9i
aiwgRUdMX05PX0NPTlRFWFQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02NDAsMjUg
KzYxNCwyMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRGlzcGxheUJ1ZmZl
ckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNv
bnRleHQpCit7CisgICAgY3VycmVudENvbnRleHQgPSBudWxscHRyOworICAgIHJldHVybiBFR0xf
TWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBjb250
ZXh0KTsKK30KKwogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVudFVzYWdl
IHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0NHTHVpbnQg
cGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9S
RUNUQU5HTEVfQVJCICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCkg
eworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0KCkpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiVW5rbm93biB0ZXh0dXJl
IHRhcmdldCAlZC4iLCBzdGF0aWNfY2FzdDxpbnQ+KHRhcmdldCkpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGVnbFRleHR1cmVUYXJnZXQgPSBbJl0gKCkgLT4g
RUdMaW50IHsKLSAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV9SRUNUQU5HTEVfQVJCKQotICAgICAgICAgICAgcmV0dXJuIEVHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BTkdMRTsKLSAgICAgICAgcmV0dXJuIEVHTF9URVhUVVJFXzJEOwotICAgIH0oKTsKLQotICAg
IGlmIChlZ2xUZXh0dXJlVGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3
aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIk1pc21hdGNo
IGluIEVHTCB0ZXh0dXJlIHRhcmdldDogJWQgc2hvdWxkIGJlICVkLiIsIHN0YXRpY19jYXN0PGlu
dD4odGFyZ2V0KSwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkVHTERyYXdpbmdCdWZmZXJUZXh0
dXJlVGFyZ2V0KCkpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRv
IHVzYWdlSGludEFuZ2xlID0gWyZdICgpIC0+IEVHTGludCB7CisgICAgYXV0byB1c2FnZUhpbnQg
PSBbJl0gKCkgLT4gRUdMaW50IHsKICAgICAgICAgaWYgKHVzYWdlID09IFBidWZmZXJBdHRhY2ht
ZW50VXNhZ2U6OlJlYWQpCiAgICAgICAgICAgICByZXR1cm4gRUdMX0lPU1VSRkFDRV9SRUFEX0hJ
TlRfQU5HTEU7CiAgICAgICAgIGlmICh1c2FnZSA9PSBQYnVmZmVyQXR0YWNobWVudFVzYWdlOjpX
cml0ZSkKQEAgLTY2Niw0MCArNjM1LDEyIEBAIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKEdDR0xlbnVtIHRhcmdldCwKICAgICAg
ICAgcmV0dXJuIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFIHwgRUdMX0lPU1VSRkFDRV9X
UklURV9ISU5UX0FOR0xFOwogICAgIH0oKTsKIAotICAgIGNvbnN0IEVHTGludCBzdXJmYWNlQXR0
cmlidXRlc1tdID0gewotICAgICAgICBFR0xfV0lEVEgsIHdpZHRoLAotICAgICAgICBFR0xfSEVJ
R0hULCBoZWlnaHQsCi0gICAgICAgIEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUsIHN0YXRpY19j
YXN0PEVHTGludD4ocGxhbmUpLAotICAgICAgICBFR0xfVEVYVFVSRV9UQVJHRVQsIHN0YXRpY19j
YXN0PEVHTGludD4oZWdsVGV4dHVyZVRhcmdldCksCi0gICAgICAgIEVHTF9URVhUVVJFX0lOVEVS
TkFMX0ZPUk1BVF9BTkdMRSwgc3RhdGljX2Nhc3Q8RUdMaW50PihpbnRlcm5hbEZvcm1hdCksCi0g
ICAgICAgIEVHTF9URVhUVVJFX0ZPUk1BVCwgRUdMX1RFWFRVUkVfUkdCQSwKLSAgICAgICAgRUdM
X1RFWFRVUkVfVFlQRV9BTkdMRSwgc3RhdGljX2Nhc3Q8RUdMaW50Pih0eXBlKSwKLSAgICAgICAg
Ly8gT25seSBoYXMgYW4gZWZmZWN0IG9uIHRoZSBpT1MgU2ltdWxhdG9yLgotICAgICAgICBFR0xf
SU9TVVJGQUNFX1VTQUdFX0hJTlRfQU5HTEUsIHVzYWdlSGludEFuZ2xlLAotICAgICAgICBFR0xf
Tk9ORSwgRUdMX05PTkUKLSAgICB9OwotCi0gICAgYXV0byBkaXNwbGF5ID0gcGxhdGZvcm1EaXNw
bGF5KCk7Ci0gICAgRUdMU3VyZmFjZSBwYnVmZmVyID0gRUdMX0NyZWF0ZVBidWZmZXJGcm9tQ2xp
ZW50QnVmZmVyKGRpc3BsYXksIEVHTF9JT1NVUkZBQ0VfQU5HTEUsIHN1cmZhY2UsIHBsYXRmb3Jt
Q29uZmlnKCksIHN1cmZhY2VBdHRyaWJ1dGVzKTsKLSAgICBpZiAoIXBidWZmZXIpIHsKLSAgICAg
ICAgTE9HKFdlYkdMLCAiRUdMX0NyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyIGZhaWxlZC4i
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFFR0xfQmluZFRl
eEltYWdlKGRpc3BsYXksIHBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKLSAgICAgICAgTE9H
KFdlYkdMLCAiRUdMX0JpbmRUZXhJbWFnZSBmYWlsZWQuIik7Ci0gICAgICAgIEVHTF9EZXN0cm95
U3VyZmFjZShkaXNwbGF5LCBwYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHBidWZmZXI7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNyZWF0ZVBidWZm
ZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2NvbmZpZ09iaiwgdGFyZ2V0LCB1
c2FnZUhpbnQsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBzdXJmYWNlLCBw
bGFuZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlc3Ryb3lQYnVmZmVy
QW5kRGV0YWNoSU9TdXJmYWNlKHZvaWQqIGhhbmRsZSkKIHsKLSAgICBhdXRvIGRpc3BsYXkgPSBw
bGF0Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xfUmVsZWFzZVRleEltYWdlKGRpc3BsYXksIGhhbmRs
ZSwgRUdMX0JBQ0tfQlVGRkVSKTsKLSAgICBFR0xfRGVzdHJveVN1cmZhY2UoZGlzcGxheSwgaGFu
ZGxlKTsKKyAgICBXZWJDb3JlOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShtX2Rp
c3BsYXlPYmosIGhhbmRsZSk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFU
T1IpCkBAIC04MDcsNiArNzQ4LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBy
ZXBhcmVGb3JEaXNwbGF5KCkKICAgICB9CiB9CiAKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNF
KEFWRk9VTkRBVElPTikKK0dyYXBoaWNzQ29udGV4dEdMQ1YqIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjphc0NWKCkKK3sKKyAgICBpZiAoIW1fY3YpCisgICAgICAgIG1fY3YgPSBHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgcmV0dXJuIG1fY3YuZ2V0KCk7Cit9
CisjZW5kaWYKKwogc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgYXV0byYgZGlzcGxheUJ1ZmZl
ciA9IG1fc3dhcENoYWluLT5kaXNwbGF5QnVmZmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFLmNwcAppbmRleCA3ODAxYmU0OTYwMTRmMzQ3M2Q0NDUyNWU0NDgxNTI2NDI4YWE2ZGQ5Li44
ZTc2NTA3MjBhNzRiYTc1NDNmZGRiOTcwNGI2NDAzNjIzNGNmNTkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29u
dGV4dEdMQ1ZBTkdMRS5jcHAKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAjaWYgRU5BQkxFKFdFQkdM
KSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCiAKLSNpbmNsdWRlICJBTkdM
RUhlYWRlcnMuaCIKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAi
Rm91ckNDLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4KICNpbmNs
dWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRNYXAu
aD4KICNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CkBAIC0yMzAsOSArMjMyLDkgQEAgc3RydWN0IFlDYkNyTWF0cml4IHsK
IAogICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNiQ29lZmZp
Y2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7CiAKLSAgICBvcGVyYXRvciBHQ0dMU3Bhbjxj
b25zdCBHTGZsb2F0LCAxNj4oKSBjb25zdAorICAgIG9wZXJhdG9yIGNvbnN0IEdMZmxvYXQqKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlR0NHTFNwYW48MTY+KCZyb3dzWzBdWzBd
KTsKKyAgICAgICAgcmV0dXJuICZyb3dzWzBdWzBdOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBH
TGZsb2F0Q29sb3Igb3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYpIGNvbnN0OwpAQCAtMzA0
LDcgKzMwNiw3IEBAIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IgWUNiQ3JNYXRyaXg6Om9wZXJhdG9y
Kihjb25zdCBHTGZsb2F0Q29sb3ImIGNvbG9yKSBjb25zdAogICAgICk7CiB9CiAKLXN0YXRpYyBH
Q0dMU3Bhbjxjb25zdCBHTGZsb2F0LCAxNj4gWUNiQ3JUb1JHQk1hdHJpeEZvclJhbmdlQW5kVHJh
bnNmZXJGdW5jdGlvbihQaXhlbFJhbmdlIHJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1YgdHJhbnNm
ZXJGdW5jdGlvbikKK3N0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFu
Z2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25D
ViB0cmFuc2ZlckZ1bmN0aW9uKQogewogICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFpcjxQaXhl
bFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwogICAgIHVzaW5nIE1hdHJpeE1hcCA9IFN0ZE1h
cDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47CkBAIC00MzAsMTY4ICs0MzIsMTM0IEBAIHN0
YXRpYyBHQ0dMU3Bhbjxjb25zdCBHTGZsb2F0LCAxNj4gWUNiQ3JUb1JHQk1hdHJpeEZvclJhbmdl
QW5kVHJhbnNmZXJGdW5jdGlvbihQCiAgICAgcmV0dXJuIGl0ZXJhdG9yLT5zZWNvbmQ7CiB9CiAK
LW5hbWVzcGFjZSB7Ci0KLS8vIFNjb3BlZCBob2xkZXIgb2YgYSBjbGVhbnVwIGZ1bmN0aW9uLiBD
YWxscyB0aGUgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgc2NvcGUuCi0vLyBOb3RlOiBSZWxl
YXNlcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiBvbmx5IGFmdGVyIHRoZSBzY29wZSwg
bm90Ci0vLyBhdCB0aGUgdGltZSBvZiBgcmVzZXQoKWAgY2FsbC4KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBGPgotY2xhc3MgU2NvcGVkQ2xlYW51cCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU2NvcGVk
Q2xlYW51cChGJiYgZnVuY3Rpb24pCi0gICAgICAgIDogbV9mdW5jdGlvbihXVEZNb3ZlKGZ1bmN0
aW9uKSkKLSAgICB7Ci0gICAgfQotICAgIH5TY29wZWRDbGVhbnVwKCkKLSAgICB7Ci0gICAgICAg
IGlmIChtX3Nob3VsZENhbGwpCi0gICAgICAgICAgICBtX2Z1bmN0aW9uKCk7Ci0gICAgfQotICAg
IHZvaWQgcmVzZXQoKSB7IG1fc2hvdWxkQ2FsbCA9IGZhbHNlOyB9Ci1wcml2YXRlOgotICAgIGJv
b2wgbV9zaG91bGRDYWxsID0gdHJ1ZTsKLSAgICBjb25zdCBGIG1fZnVuY3Rpb247Ci19OwotCi19
Ci0KLUdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFyZWQoY29udGV4dCkpCi0gICAgLCBtX2ZyYW1lYnVm
ZmVyKG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSkKK3N0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHRHTENWQU5HTEU+IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0KQogeworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHRHTENWQU5HTEU+IGN2IHsgbmV3IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RShjb250ZXh0KSB9OworICAgIGlmICghY3YtPm1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIGN2OwogfQogCiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6On5H
cmFwaGljc0NvbnRleHRHTENWQU5HTEUoKQogewotICAgIGlmIChtX3l1dlZlcnRleEJ1ZmZlcikK
LSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV95dXZWZXJ0ZXhCdWZmZXIpOwotICAg
IGlmIChtX3l1dlByb2dyYW0pCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3l1
dlByb2dyYW0pOwotICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZl
cik7CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtl
Q3VycmVudChtX2Rpc3BsYXksIG1fY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKyAgICBnbDo6
RGVsZXRlQnVmZmVycygxLCAmbV95dXZWZXJ0ZXhCdWZmZXIpOworICAgIGdsOjpEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm1fZnJhbWVidWZmZXIpOworICAgIEVHTF9EZXN0cm95Q29udGV4dChtX2Rp
c3BsYXksIG1fY29udGV4dCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpp
bml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpCitHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6Okdy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgb3duZXIpCisg
ICAgOiBtX293bmVyKG93bmVyKQogewotICAgIGNvbnN0IGJvb2wgdXNlVGV4dHVyZTJEID0gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQ7Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0IHZlcnRl
eFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpWRVJU
RVhfU0hBREVSKTsKLSAgICBpZiAodXNlVGV4dHVyZTJEKQotICAgICAgICBtX2NvbnRleHQtPnNo
YWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJEKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgc195
dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlKTsKLQotICAgIG1fY29udGV4dC0+Y29tcGls
ZVNoYWRlckRpcmVjdCh2ZXJ0ZXhTaGFkZXIpOwotCi0gICAgR0NHTGludCBzdGF0dXMgPSBtX2Nv
bnRleHQtPmdldFNoYWRlcmkodmVydGV4U2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6Q09NUElM
RV9TVEFUVVMpOwotICAgIGlmICghc3RhdHVzKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRTo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoJXApIC0gVmVy
dGV4IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKLSAgICAgICAgbV9jb250ZXh0
LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNy
ZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSKTsKLSAgICBpZiAo
dXNlVGV4dHVyZTJEKQotICAgICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNo
YWRlciwgc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCk7Ci0gICAgZWxzZQotICAgICAgICBt
X2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgc195dXZGcmFnbWVudFNoYWRl
clRleHR1cmVSZWN0YW5nbGUpOworICAgIC8vIENyZWF0ZSBjb21wYXRpYmxlIGNvbnRleHQgdGhh
dCBzaGFyZXMgc3RhdGUgd2l0aCBvd25lciwgYnV0IG9uZSB0aGF0IGRvZXMgbm90CisgICAgLy8g
aGF2ZSByb2J1c3RuZXNzIG9yIFdlYkdMIGNvbXBhdGliaWxpdHkuCisgICAgY29uc3QgRUdMaW50
IGNvbnRleHRBdHRyaWJ1dGVzW10gPSB7CisgICAgICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJT
SU9OLAorICAgICAgICBvd25lci5tX2lzRm9yV2ViR0wyID8gMyA6IDIsCisgICAgICAgIEVHTF9D
T05URVhUX09QRU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9BTkdMRSwKKyAgICAgICAgRUdMX0ZB
TFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9DTElFTlRfQVJSQVlTX0VOQUJMRURfQU5HTEUsCisg
ICAgICAgIEVHTF9GQUxTRSwKKyAgICAgICAgRUdMX0NPTlRFWFRfQklORF9HRU5FUkFURVNfUkVT
T1VSQ0VfQ0hST01JVU0sCisgICAgICAgIEVHTF9GQUxTRSwKKyAgICAgICAgRUdMX05PTkUKKyAg
ICB9OworICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IG93bmVyLnBsYXRmb3JtRGlzcGxheSgpOwor
ICAgIEVHTENvbmZpZyBjb25maWcgPSBvd25lci5wbGF0Zm9ybUNvbmZpZygpOworICAgIEVHTENv
bnRleHQgY29udGV4dCA9IEVHTF9DcmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywgb3duZXIu
bV9jb250ZXh0T2JqLCBjb250ZXh0QXR0cmlidXRlcyk7CisgICAgaWYgKGNvbnRleHQgPT0gRUdM
X05PX0NPTlRFWFQpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFrZUN1cnJlbnQoZGlzcGxheSwgY29udGV4dCk7CisKKyAgICBhdXRvIGNvbnRleHRDbGVh
bnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSwgY29udGV4dF0geworICAgICAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRFWFQpOwor
ICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAgfSk7CiAK
LSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXJEaXJlY3QoZnJhZ21lbnRTaGFkZXIpOworICAg
IGNvbnN0IGJvb2wgdXNlVGV4dHVyZTJEID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdp
bmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKIAotICAgIHN0YXR1cyA9
IG1fY29udGV4dC0+Z2V0U2hhZGVyaShmcmFnbWVudFNoYWRlciwgR3JhcGhpY3NDb250ZXh0R0w6
OkNPTVBJTEVfU1RBVFVTKTsKLSAgICBpZiAoIXN0YXR1cykgewotICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmluaXRpYWxpemVVVkNvbnRleHRPYmplY3RzKCVw
KSAtIEZyYWdtZW50IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKLSAgICAgICAg
bV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgbV9jb250ZXh0
LT5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Cisj
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKKyAgICBpZiAoIXVzZVRl
eHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9BTkdMRV90
ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJH
TF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgaWYgKGdsOjpHZXRFcnJv
cigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgog
Ci0gICAgbV95dXZQcm9ncmFtID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7Ci0gICAgbV9j
b250ZXh0LT5hdHRhY2hTaGFkZXIobV95dXZQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwotICAgIG1f
Y29udGV4dC0+YXR0YWNoU2hhZGVyKG1feXV2UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICAg
IG1fY29udGV4dC0+bGlua1Byb2dyYW0obV95dXZQcm9ncmFtKTsKLQotICAgIHN0YXR1cyA9IG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbWkobV95dXZQcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6TElO
S19TVEFUVVMpOwotICAgIGlmICghc3RhdHVzKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRTo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoJXApIC0gUHJv
Z3JhbSBmYWlsZWQgdG8gbGluay4iLCB0aGlzKTsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVT
aGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIoZnJh
Z21lbnRTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV95dXZQcm9n
cmFtKTsKLSAgICAgICAgbV95dXZQcm9ncmFtID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihtX3l1dlByb2dyYW0sICJ1X3lUZXh0dXJlIl9zKTsKLSAgICBtX3V2VGV4
dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2
UHJvZ3JhbSwgInVfdXZUZXh0dXJlIl9zKTsKLSAgICBtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0
aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV95dXZQcm9ncmFtLCAidV9jb2xv
ck1hdHJpeCJfcyk7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+
Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2UHJvZ3JhbSwgInVfZmxpcFkiX3MpOwotICAgIG1feVRl
eHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
bV95dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiX3MpOwotICAgIG1fdXZUZXh0dXJlU2l6ZVVu
aWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2UHJvZ3Jh
bSwgInVfdXZUZXh0dXJlU2l6ZSJfcyk7Ci0gICAgbV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0
aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChtX3l1dlByb2dyYW0sICJh
X3Bvc2l0aW9uIl9zKTsKLQotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1feXV2UHJvZ3Jh
bSwgdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX3l1dlByb2dy
YW0sIGZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhT
aGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKLQot
ICAgIG1feXV2VmVydGV4QnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKKyAgICBH
TGludCB2ZXJ0ZXhTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIpOwor
ICAgIEdMaW50IGZyYWdtZW50U2hhZGVyID0gZ2w6OkNyZWF0ZVNoYWRlcihHTF9GUkFHTUVOVF9T
SEFERVIpOworICAgIEdMdWludCB5dXZQcm9ncmFtID0gZ2w6OkNyZWF0ZVByb2dyYW0oKTsKKyAg
ICBhdXRvIHByb2dyYW1DbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbdmVydGV4U2hhZGVyLCBmcmFn
bWVudFNoYWRlciwgeXV2UHJvZ3JhbV0geworICAgICAgICBnbDo6RGVsZXRlU2hhZGVyKHZlcnRl
eFNoYWRlcik7CisgICAgICAgIGdsOjpEZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAg
ICAgICBnbDo6RGVsZXRlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICB9KTsKKyAgICAvLyBUaGVz
ZSBhcmUgd3JpdHRlbiBzbyBzdHJsZW4gbWlnaHQgYmUgY29tcGlsZS10aW1lLgorICAgIEdMaW50
IHZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlMkQubGVu
Z3RoKCkgOiBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0YW5nbGUubGVuZ3RoKCk7CisgICAg
R0xpbnQgZnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVy
ZTJELmxlbmd0aCgpIDogc195dXZGcmFnbWVudFNoYWRlclRleHR1cmVSZWN0YW5nbGUubGVuZ3Ro
KCk7CisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0gdXNlVGV4dHVyZTJEID8g
c195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0
YW5nbGU7CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJl
MkQgPyBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIDogc195dXZGcmFnbWVudFNoYWRlclRl
eHR1cmVSZWN0YW5nbGU7CisKKyAgICBnbDo6U2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgMSwg
JnZlcnRleFNoYWRlclNvdXJjZSwgJnZzTGVuZ3RoKTsKKyAgICBnbDo6U2hhZGVyU291cmNlKGZy
YWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsICZmc0xlbmd0aCk7CisgICAg
Z2w6OkNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBnbDo6Q29tcGlsZVNoYWRlcihm
cmFnbWVudFNoYWRlcik7CisgICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCB2ZXJ0ZXhT
aGFkZXIpOworICAgIGdsOjpBdHRhY2hTaGFkZXIoeXV2UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIp
OworICAgIGdsOjpMaW5rUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICAvLyBMaW5rIHN0YXR1cyBp
cyBjaGVja2VkIGFmdGVyd2FyZHMgZm9yIHRoZW9yZXRpY2FsIHBhcmFsbGVsIGNvbXBpbGF0aW9u
IGJlbmVmaXQuCisKKyAgICBHTHVpbnQgeXV2VmVydGV4QnVmZmVyID0gMDsKKyAgICBnbDo6R2Vu
QnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKKyAgICBhdXRvIHl1dlZlcnRleEJ1ZmZlckNs
ZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5dXZWZXJ0ZXhCdWZmZXJdIHsKKyAgICAgICAgZ2w6OkRl
bGV0ZUJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7CisgICAgfSk7CiAgICAgZmxvYXQgdmVy
dGljZXNbMTJdID0geyAtMSwgLTEsIDEsIC0xLCAxLCAxLCAxLCAxLCAtMSwgMSwgLTEsIC0xIH07
CisgICAgZ2w6OkJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCB5dXZWZXJ0ZXhCdWZmZXIpOwor
ICAgIGdsOjpCdWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVy
dGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKIAotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBtX3l1dlZlcnRleEJ1ZmZlcik7Ci0gICAgbV9j
b250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIEdDR0xT
cGFuPGNvbnN0IEdDR0x2b2lkPih2ZXJ0aWNlcywgc2l6ZW9mKHZlcnRpY2VzKSksIEdyYXBoaWNz
Q29udGV4dEdMOjpTVEFUSUNfRFJBVyk7Ci0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24pOwotICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdy
YXBoaWNzQ29udGV4dEdMOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6YXR0YWNoSU9TdXJmYWNlVG9U
ZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gdHlwZSwgSU9TdXJmYWNlUmVmIHN1
cmZhY2UsIEdDR0x1aW50IHBsYW5lKQotewotICAgIGF1dG8gZGlzcGxheSA9IG1fY29udGV4dC0+
cGxhdGZvcm1EaXNwbGF5KCk7Ci0gICAgRUdMaW50IGVnbFRleHR1cmVUYXJnZXQgPSAwOwotCi0g
ICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJC
KQotICAgICAgICBlZ2xUZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xF
OwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCkK
LSAgICAgICAgZWdsVGV4dHVyZVRhcmdldCA9IEVHTF9URVhUVVJFXzJEOwotICAgIGVsc2Ugewot
ICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoZWdsVGV4dHVyZVRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2lu
Z0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewotICAgICAgICBMT0coV2ViR0wsICJNaXNtYXRjaCBp
biBFR0wgdGV4dHVyZSB0YXJnZXQgJWQuIiwgc3RhdGljX2Nhc3Q8aW50Pih0YXJnZXQpKTsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIEdMdWludCBmcmFtZWJ1ZmZlciA9IDA7
CisgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworICAgIGF1dG8gZnJh
bWVidWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZnJhbWVidWZmZXJdIHsKKyAgICAgICAg
Z2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworICAgIH0pOwogCi0gICAg
Y29uc3QgRUdMaW50IHN1cmZhY2VBdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgIEVHTF9XSURUSCwg
d2lkdGgsCi0gICAgICAgIEVHTF9IRUlHSFQsIGhlaWdodCwKLSAgICAgICAgRUdMX0lPU1VSRkFD
RV9QTEFORV9BTkdMRSwgc3RhdGljX2Nhc3Q8RUdMaW50PihwbGFuZSksCi0gICAgICAgIEVHTF9U
RVhUVVJFX1RBUkdFVCwgc3RhdGljX2Nhc3Q8RUdMaW50PihlZ2xUZXh0dXJlVGFyZ2V0KSwKLSAg
ICAgICAgRUdMX1RFWFRVUkVfSU5URVJOQUxfRk9STUFUX0FOR0xFLCBzdGF0aWNfY2FzdDxFR0xp
bnQ+KGludGVybmFsRm9ybWF0KSwKLSAgICAgICAgRUdMX1RFWFRVUkVfRk9STUFULCBFR0xfVEVY
VFVSRV9SR0JBLAotICAgICAgICBFR0xfVEVYVFVSRV9UWVBFX0FOR0xFLCBzdGF0aWNfY2FzdDxF
R0xpbnQ+KHR5cGUpLAotICAgICAgICAvLyBPbmx5IGhhcyBhbiBlZmZlY3Qgb24gdGhlIGlPUyBT
aW11bGF0b3IuCi0gICAgICAgIEVHTF9JT1NVUkZBQ0VfVVNBR0VfSElOVF9BTkdMRSwgRUdMX0lP
U1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsCi0gICAgICAgIEVHTF9OT05FLCBFR0xfTk9ORQotICAg
IH07Ci0gICAgRUdMU3VyZmFjZSBwYnVmZmVyID0gRUdMX0NyZWF0ZVBidWZmZXJGcm9tQ2xpZW50
QnVmZmVyKGRpc3BsYXksIEVHTF9JT1NVUkZBQ0VfQU5HTEUsIHN1cmZhY2UsIG1fY29udGV4dC0+
cGxhdGZvcm1Db25maWcoKSwgc3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIGlmICghcGJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFFR0xfQmluZFRleEltYWdlKGRpc3Bs
YXksIHBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKLSAgICAgICAgRUdMX0Rlc3Ryb3lTdXJm
YWNlKGRpc3BsYXksIHBidWZmZXIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBHTGlu
dCBzdGF0dXMgPSAwOworICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQcm9ncmFt
LCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7CisgICAgaWYgKCFzdGF0dXMp
IHsKKyAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOworICAgICAgICBnbDo6R2V0U2hhZGVyaXZS
b2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxscHRyLCAm
dnNTdGF0dXMpOworICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7CisgICAgICAgIGdsOjpHZXRT
aGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgMSwg
bnVsbHB0ciwgJmZzU3RhdHVzKTsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQsICVkLiIs
IHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICByZXR1cm4gcGJ1ZmZlcjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEU6OmRldGFjaElPU3VyZmFjZUZyb21UZXh0dXJlKHZvaWQqIGhhbmRsZSkKLXsKLSAgICBhdXRv
IGRpc3BsYXkgPSBtX2NvbnRleHQtPnBsYXRmb3JtRGlzcGxheSgpOwotICAgIEVHTF9SZWxlYXNl
VGV4SW1hZ2UoZGlzcGxheSwgaGFuZGxlLCBFR0xfQkFDS19CVUZGRVIpOwotICAgIEVHTF9EZXN0
cm95U3VyZmFjZShkaXNwbGF5LCBoYW5kbGUpOworICAgIGNvbnRleHRDbGVhbnVwLnJlbGVhc2Uo
KTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFtZWJ1ZmZl
ckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAgbV9jb250
ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZlcnRleEJ1
ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVidWZmZXI7
CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIik7Cisg
ICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24o
eXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0
aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIpOworICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5
dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVVbmlmb3Jt
TG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2VGV4dHVy
ZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6R2V0QXR0
cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9ncmFtIGlz
IGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0YXlzIGlu
IHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdM
X0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1
cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0gZm9ybWF0
LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSBmbGlwWSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxh
dGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgRmxpcFkgZmxpcFkpCiB7CiAgICAg
Ly8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAnNDIwZicg
cGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUgc3VwcG9ydGluZyBtb3JlIHBpeGVsIGZvcm1hdHMu
CiAgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlw
ZShpbWFnZSk7CkBAIC02MTEsNTIgKzU3OSw0MyBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsCiAK
ICAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNlKTsKICAg
ICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBtX2xhc3RT
dXJmYWNlIAorICAgICAgICAmJiBzdXJmYWNlID09IG1fbGFzdFN1cmZhY2UKICAgICAgICAgJiYg
bmV3U3VyZmFjZVNlZWQgPT0gbV9sYXN0U3VyZmFjZVNlZWQKLSAgICAgICAgJiYgbGFzdFRleHR1
cmVTZWVkKG91dHB1dFRleHR1cmUpID09IG1fY29udGV4dC0+dGV4dHVyZVNlZWQob3V0cHV0VGV4
dHVyZSkpIHsKKyAgICAgICAgJiYgbGFzdFRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpID09IG1f
b3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpIHsKICAgICAgICAgLy8gSWYgdGhlIHRl
eHR1cmUgaGFzbid0IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBjb3BpZWQg
dG8gaXQsIGFuZCB0aGUKICAgICAgICAgLy8gaW1hZ2UgaGFzbid0IGJlZW4gbW9kaWZpZWQgc2lu
Y2UgdGhlIGxhc3QgdGltZSBpdCB3YXMgY29waWVkLCB0aGlzIGlzIGEgbm8tb3AuCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KKyAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX3l1dlByb2dyYW0pIHsKLSAgICAgICAgaWYgKCFp
bml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJH
cmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZSglcCkgLSBVbmFibGUgdG8gaW5pdGlhbGl6ZSBPcGVuR0wgY29udGV4dCBvYmplY3RzLiIsIHRo
aXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQogICAgIHNp
emVfdCB3aWR0aCA9IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7CiAgICAgc2l6ZV90IGhl
aWdodCA9IENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwogCi0gICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVm
ZmVyKTsKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICAvLyBU
aGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVudCBvbiBl
YXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcwogICAgIC8vIGF1dG9DbGVhclRleHR1cmVPbkVy
cm9yIGlzIG5vdCByZXNldC4KLSAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9yID0gU2Nv
cGVkQ2xlYW51cCB7Ci0gICAgICAgIFtvdXRwdXRUZXh0dXJlLCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dCA9IG1fY29udGV4dC5wdHIoKV0gewotICAgICAgICAg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG91
dHB1dFRleHR1cmUpOwotICAgICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRERpcmVjdChHTF9U
RVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwgdHlwZSwg
bnVsbHB0cik7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV8yRCwgMCk7Ci0gICAgICAgIH0KLSAgICB9OworICAgIGF1dG8gYXV0b0Ns
ZWFyVGV4dHVyZU9uRXJyb3IgPSBtYWtlU2NvcGVFeGl0KFtvdXRwdXRUZXh0dXJlLCBsZXZlbCwg
aW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZV0geworICAgICAgICBnbDo6QmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgICAgIGdsOjpUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgMCwgMCwgMCwgZm9ybWF0LCB0eXBl
LCBudWxscHRyKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwor
ICAgIH0pOwogICAgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG91dHB1dCB0ZXh0dXJlLgot
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQs
IG91dHB1dFRleHR1cmUpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKLSAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VE
R0UpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRl
eHRHTDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJERGlyZWN0KEdM
X1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9y
bWF0LCB0eXBlLCBudWxscHRyKTsKLQotICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBvdXRwdXRUZXh0
dXJlLCBsZXZlbCk7Ci0gICAgR0NHTGVudW0gc3RhdHVzID0gbV9jb250ZXh0LT5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUik7Ci0gICAgaWYgKHN0
YXR1cyAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICBn
bDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgZ2w6OlRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAgIGdsOjpG
cmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAs
IEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0gc3RhdHVz
ID0gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAgIGlmIChz
dGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgTE9HKFdlYkdMLCAi
R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1
cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4i
LCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCAwKTsKLQotICAgIG1fY29u
dGV4dC0+dXNlUHJvZ3JhbShtX3l1dlByb2dyYW0pOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQo
MCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOwogCiAgICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlcyBmb3IgdGhlIHZpZGVv
IHNvdXJjZS4KICAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5l
KHN1cmZhY2UsIDApOwpAQCAtNjY0LDYxICs2MjMsNjQgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEU6OmNvcHlQaXhlbEJ1ZmZlclRvVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmIGltYWdl
LAogICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5lKHN1cmZh
Y2UsIDEpOwogICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodE9mUGxh
bmUoc3VyZmFjZSwgMSk7CiAKLSAgICBHQ0dMZW51bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKLQotICAg
IGF1dG8gdXZUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250
ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMSk7Ci0gICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7Ci0gICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250
ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7Ci0g
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7
Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9f
RURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHRHTDo6Q0xB
TVBfVE9fRURHRSk7Ci0gICAgYXV0byB1dkhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRvVGV4dHVy
ZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRywgdXZQbGFuZVdpZHRo
LCB1dlBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgc3VyZmFj
ZSwgMSk7Ci0gICAgaWYgKCF1dkhhbmRsZSkgewotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRl
eHR1cmUodXZUZXh0dXJlKTsKKyAgICBHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisKKyAgICBH
THVpbnQgdXZUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJnV2VGV4dHVyZSk7
CisgICAgYXV0byB1dlRleHR1cmVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbdXZUZXh0dXJlXSB7
CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKKyAgICB9KTsKKyAg
ICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHZp
ZGVvVGV4dHVyZVRhcmdldCwgdXZUZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRl
b1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1l
dGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICBhdXRvIHV2SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFuZEF0dGFj
aElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJnZXQsIEVHTF9J
T1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRywgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVp
Z2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAxKTsKKyAgICBpZiAoIXV2SGFuZGxlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGF1dG8gdXZIYW5kbGVDbGVhbnVwID0g
bWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAgICAgICAg
V2ViQ29yZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgdXZIYW5k
bGUpOworICAgIH0pOwogCi0gICAgYXV0byB5VGV4dHVyZSA9IG1fY29udGV4dC0+Y3JlYXRlVGV4
dHVyZSgpOwotICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRTApOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0
LCB5VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRh
cmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250
ZXh0R0w6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVy
ZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0R0w6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0Nv
bnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZp
ZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgYXV0byB5SGFuZGxlID0gYXR0YWNo
SU9TdXJmYWNlVG9UZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6
OlJFRCwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0JZVEUsIHN1cmZhY2UsIDApOwotICAgIGlmICgheUhhbmRsZSkgewotICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVRleHR1cmUoeVRleHR1cmUpOwotICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVRleHR1cmUodXZUZXh0dXJlKTsKKyAgICBHTHVpbnQgeVRleHR1cmUgPSAwOworICAgIGdsOjpH
ZW5UZXh0dXJlcygxLCAmeVRleHR1cmUpOworICAgIGF1dG8geVRleHR1cmVDbGVhbnVwID0gbWFr
ZVNjb3BlRXhpdChbeVRleHR1cmVdIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ5
VGV4dHVyZSk7CisgICAgfSk7CisgICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwor
ICAgIGdsOjpCaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHlUZXh0dXJlKTsKKyAgICBn
bDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQs
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVy
aSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBhdXRvIHlIYW5kbGUgPSBXZWJDb3JlOjpj
cmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZpZGVv
VGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JFRCwgeVBs
YW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwgMCk7Cisg
ICAgaWYgKCF5SGFuZGxlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGF1dG8g
eUhhbmRsZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB5SGFu
ZGxlXSB7CisgICAgICAgIGRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRpc3BsYXks
IHlIYW5kbGUpOworICAgIH0pOwogCiAgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5nIHBhcmFt
ZXRlcnMuCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biwgMCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV91dlRleHR1cmVVbmlmb3JtTG9jYXRp
b24sIDEpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1feXV2RmxpcFlVbmlmb3JtTG9jYXRp
b24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
MmYobV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWln
aHQpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdXZUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiwgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0KTsKKyAgICBnbDo6VW5pZm9ybTFpKG1f
eVRleHR1cmVVbmlmb3JtTG9jYXRpb24sIDApOworICAgIGdsOjpVbmlmb3JtMWkobV91dlRleHR1
cmVVbmlmb3JtTG9jYXRpb24sIDEpOworICAgIGdsOjpVbmlmb3JtMWkobV95dXZGbGlwWVVuaWZv
cm1Mb2NhdGlvbiwgZmxpcFkgPT0gRmxpcFk6OlllcyA/IDEgOiAwKTsKKyAgICBnbDo6VW5pZm9y
bTJmKG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVp
Z2h0KTsKKyAgICBnbDo6VW5pZm9ybTJmKG1fdXZUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwg
dXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0KTsKIAogICAgIGF1dG8gcmFuZ2UgPSBwaXhlbFJh
bmdlRnJvbVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KTsKICAgICBhdXRvIHRyYW5zZmVyRnVuY3Rp
b24gPSB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdS
ZWY+KENWQnVmZmVyR2V0QXR0YWNobWVudChpbWFnZSwga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJp
eEtleSwgbmlsKSkpOwogICAgIGF1dG8gY29sb3JNYXRyaXggPSBZQ2JDclRvUkdCTWF0cml4Rm9y
UmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKHJhbmdlLCB0cmFuc2ZlckZ1bmN0aW9uKTsKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiwg
R0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKyAgICBnbDo6VW5pZm9ybU1hdHJpeDRmdihtX2NvbG9y
TWF0cml4VW5pZm9ybUxvY2F0aW9uLCAxLCBHTF9GQUxTRSwgY29sb3JNYXRyaXgpOwogCiAgICAg
Ly8gRG8gdGhlIGFjdHVhbCBkcmF3aW5nLgotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFw
aGljc0NvbnRleHRHTDo6VFJJQU5HTEVTLCAwLCA2KTsKLQotICAgIC8vIENsZWFuLXVwLgotICAg
IG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh5VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0LT5kZWxl
dGVUZXh0dXJlKHV2VGV4dHVyZSk7Ci0gICAgZGV0YWNoSU9TdXJmYWNlRnJvbVRleHR1cmUoeUhh
bmRsZSk7Ci0gICAgZGV0YWNoSU9TdXJmYWNlRnJvbVRleHR1cmUodXZIYW5kbGUpOworICAgIGds
OjpEcmF3QXJyYXlzKEdMX1RSSUFOR0xFUywgMCwgNik7CiAKICAgICBtX2xhc3RTdXJmYWNlID0g
c3VyZmFjZTsKICAgICBtX2xhc3RTdXJmYWNlU2VlZCA9IG5ld1N1cmZhY2VTZWVkOwotICAgIG1f
bGFzdFRleHR1cmVTZWVkLnNldChvdXRwdXRUZXh0dXJlLCBtX2NvbnRleHQtPnRleHR1cmVTZWVk
KG91dHB1dFRleHR1cmUpKTsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0VGV4dHVy
ZSwgbV9vd25lci50ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CiAgICAgbV9sYXN0RmxpcFkg
PSBmbGlwWTsKLSAgICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZXNldCgpOworICAgIGF1dG9D
bGVhclRleHR1cmVPbkVycm9yLnJlbGVhc2UoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFw
aGljc0NvbnRleHRHTENWQU5HTEUuaAppbmRleCA1YmNhMmFhYmQxNWU1NzA5NWI5ZjRhNzVjNDZk
N2U3MGZhZTY2ZWE4Li41NjBlZTgwYmE0NDdjOTA1YWQ0M2M1NzE0YWI3OGUwOTdkZDlkZWQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0Nv
bnRleHRHTENWQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaApAQCAtMjcsMzkgKzI3LDM5IEBACiAKICNpZiBF
TkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKIAotI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0R0xDVi5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWLmgiCiAKLSNpbXBvcnQgPHd0
Zi9VbnNhZmVQb2ludGVyLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9VbnNh
ZmVQb2ludGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOwogCiAvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9uIGZvciBB
TkdMRSBmbGF2b3VyIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorLy8gVGhpcyBjbGFzcyBp
cyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBmb3IgQU5HTEUgQ29jb2EuCiBjbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUg
ZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xDViB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOworCiAgICAg
fkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSgpIGZpbmFsOwogCiAgICAgYm9vbCBjb3B5UGl4ZWxC
dWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRU
ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgYm9v
bCBpbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpOworICAgIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwogCiAgICAgdW5zaWduZWQgbGFzdFRleHR1
cmVTZWVkKEdDR0x1aW50IHRleHR1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gbV9sYXN0VGV4
dHVyZVNlZWQuZ2V0KHRleHR1cmUpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMgYSBoYW5kbGUg
d2hpY2gsIGlmIG5vbi1udWxsLCBtdXN0IGJlIHJlbGVhc2VkIHZpYSB0aGUKLSAgICAvLyBkZXRh
Y2ggY2FsbCBiZWxvdy4KLSAgICB2b2lkKiBhdHRhY2hJT1N1cmZhY2VUb1RleHR1cmUoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYsIEdDR0x1aW50IHBsYW5l
KTsKLSAgICB2b2lkIGRldGFjaElPU3VyZmFjZUZyb21UZXh0dXJlKHZvaWQqIGhhbmRsZSk7Ci0K
LSAgICBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1fY29udGV4dDsKKyAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYgbV9vd25lcjsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
RGlzcGxheSBtX2Rpc3BsYXkgeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTCBtX2NvbnRleHQgeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TENvbmZpZyBtX2NvbmZpZyB7IG51bGxwdHIgfTsKIAogICAgIFBsYXRmb3JtR0xPYmplY3QgbV9m
cmFtZWJ1ZmZlciB7IDAgfTsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1feXV2UHJvZ3JhbSB7IDAg
fTsKICAgICBQbGF0Zm9ybUdMT2JqZWN0IG1feXV2VmVydGV4QnVmZmVyIHsgMCB9OwogICAgIEdD
R0xpbnQgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CiAgICAgR0NHTGludCBtX3V2
VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oCmluZGV4IGZjMjYyOGJkOGUzNDI3ZmJmYmE5NzE5ZTZiOTJiM2RhZGNmYmNlNGEuLjJh
Mjg1ZDg4NGY3MzcwNDZkYTQxNDRiMTIwYTRmZTM4N2ExNjM2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5oCkBAIC02OCw2ICs2OCw3IEBAIE9CSkNfQ0xBU1MgQ0FMYXllcjsK
IE9CSkNfQ0xBU1MgV2ViR0xMYXllcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMDMsNyArMTA0LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCk7CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBzdGF0aWMgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
PiBjcmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIHNoYXJlZENvbnRleHQpOwog
ICAgIHN0YXRpYyBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNyZWF0ZUZvckdQVVByb2Nl
c3MoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiwgR3JhcGhpY3NDb250ZXh0R0xJ
T1N1cmZhY2VTd2FwQ2hhaW4qKTsKIAogICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCBmaW5hbCB7IHJldHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5ZXIu
Z2V0KCkpOyB9CkBAIC01NDAsMTUgKzU0MCwxNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIHNo
YXJlZENvbnRleHQgPSBudWxscHRyLCBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3YXBDaGFp
biogPSBudWxscHRyKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbiogPSBudWxscHRyKTsKICNlbHNlCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wo
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKKyAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqKTsKICNlbmRp
ZgogCiAgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIHRo
YXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KICAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhl
IHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRoYXQgZXZlbnR1YWxseSBjYWxs
IE9wZW5HTC4KICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIFdBUk5fVU5VU0VEX1JFVFVS
TjsKLSAgICB2b2lkIGNsZWFyQ3VycmVudENvbnRleHQoKTsKIAogICAgIC8vIFRha2UgaW50byBh
Y2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywK
ICAgICAvLyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWlu
ZSB3aGljaCBjb3VsZCBvcgpAQCAtNTc1LDYgKzU3NCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBy
ZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKICAgICBib29sIGFsbG9jYXRlQW5kQmluZERp
c3BsYXlCdWZmZXJCYWNraW5nKCk7CiAgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJhY2tpbmco
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7CisgICAg
c3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXks
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOworICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU7CiAjZW5kaWYKICNpZiBVU0UoQU5HTEUpCiAgICAgLy8gUmV0dXJucyBm
YWxzZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgpAQCAtNzk0LDcg
Kzc5NSw3IEBAIHByaXZhdGU6CiAgICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVxdWVzdCBt
X2hpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3Q7CiAjZW5kaWYKICNpZiBFTkFCTEUoVklERU8pICYm
IFVTRShBVkZPVU5EQVRJT04pCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdM
Q1Y+IG1fY3Y7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRT4g
bV9jdjsKICNlbmRpZgogI2lmIFVTRShBTkdMRSkKICAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdM
VGV4dHVyZU1hcHBlci5jcHAKaW5kZXggZTUwMzBkY2MzZmZjYTNjOGRjOTkzNGEyNmRmZjI1ZmRl
NzJmOTY4MC4uOGQzZDY1YzE3ZjlkMzRlMTU2YjUwYTE4ZTg0NTU4Y2ExMWE1MmJjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAgLTEwNCwx
MCArMTA0LDkgQEAgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlRm9yR1BVUHJvY2Vzcyhjb25zdAogfQogCiAjaWYgVVNFKEFOR0xFKQot
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
aWJ1dGVzLCBzaGFyZWRDb250ZXh0KQorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBI
b3N0V2luZG93KikKKyAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCiB7Ci0gICAg
QVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7CiAjaWYgRU5BQkxF
KFdFQkdMMikKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZlcnNpb24gPT0g
R3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKICNlbmRpZgpAQCAtMTc0LDEw
ICsxNzMsOSBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogICAgIGdsOjpDbGVhckNvbG9yKDAs
IDAsIDAsIDApOwogfQogI2Vsc2UKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9z
dFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0KQotICAgIDog
R3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcywgc2hhcmVkQ29udGV4dCkKK0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyopCisgICAgOiBHcmFwaGljc0NvbnRleHRH
TChhdHRyaWJ1dGVzKQogewotICAgIEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJl
ZENvbnRleHQpOwogI2lmIFVTRShOSUNPU0lBKQogICAgIG1fbmljb3NpYUxheWVyID0gbWFrZVVu
aXF1ZTxOaWNvc2lhOjpHQ0dMTGF5ZXI+KCp0aGlzKTsKICNlbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439732</attachid>
            <date>2021-09-30 07:05:14 -0700</date>
            <delta_ts>2021-09-30 10:01:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231010-20210930170512.patch</filename>
            <type>text/plain</type>
            <size>59953</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWE0ZDJmY2U1MGM0ZDY4
MzNjYjk0ZmNmMDc2NjkzMjhmM2NiNjFlMC4uN2JmMWJmODkwYTMzZjFjNjdjOTliMWE1NmUwMTM2
NWM5MWQ5MGEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wOS0zMCAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIENvY29hIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMIHNob3VsZCBub3QgYmUgdXNlZCBieSBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMTAxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNyZWF0ZXMgYSBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUgaGVscGVyIHRvIGRvCisgICAgICAgIGRvIFlVViB0ZXh0dXJlIHVwbG9hZHMuIFRoaXMgR3Jh
cGhpY3NDb250ZXh0R0xDVkFOR0xFIGNyZWF0ZXMgYSBPcGVuR0wgRVMgY29udGV4dCB0aGF0Cisg
ICAgICAgIHNoYXJlcyB0aGUgT3BlbkdMIHN0YXRlIGJ5IHRoZSBjYWxsZXIuCisKKyAgICAgICAg
UHJldmlvdXNseSB0aGUgbmV3IGNvbnRleHQgd291bGQgYmUgYSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC4gVGhpcyB3b3VsZCBiZSBhIHByb2JsZW0KKyAgICAgICAgc2luY2UgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgaGFzIGNvbXBvc2l0b3IgcmVsYXRlZCBsb2dpYyBhbmQgb2JqZWN0cywgZm9y
IGV4YW1wbGUKKyAgICAgICAgdGhlIFdlYkdMIGxheWVyIGFzIHdlbGwgYXMgcmVzb3VyY2VzIGZv
ciBkZWZhdWx0IGZyYW1lYnVmZmVyIG9wZXJhdGlvbi4gU2hhcmVkIGNvbnRleHQKKyAgICAgICAg
d291bGQgYWxzbyBnbyB0byB0aGUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIGNvbnRl
eHQgbGlzdCBldmVuIHRob3VnaAorICAgICAgICB0aGV5IGNvdWxkIG5vdCBiZSBkZWxldGVkIGJl
aGluZCB0aGUgb3duZXJzIGJhY2sgZHVyaW5nIGNvbnRleHQgcmVjeWNsaW5nLgorCisgICAgICAg
IEluc3RlYWQsIGNyZWF0ZSBqdXN0IGEgbm9ybWFsIEFOR0xFIGNvbnRleHQgYW5kIGNhbGwgQU5H
TEUgZGlyZWN0bHkgZnJvbQorICAgICAgICBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuIFRoaXMg
aXMgbW9yZSBjb25zaXN0ZW50IHdpdGggc29mdHdhcmUgbGF5ZXJzOgorICAgICAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCBhbmQgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFIGFyZSBhdCB0aGUg
c2FtZSBzb2Z0d2FyZQorICAgICAgICBsZXZlbCwgcGFydCBvZiB0aGUgc2FtZSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBNYWtlcyBpdCBwb3NzaWJs
ZSB0byByZW1vdmUgb3RoZXJ3aXNlIHVudXNlZCBhbmQgdW5maXR0aW5nICJzaGFyZWQgY29udGV4
dCIKKyAgICAgICAgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGZyb20gV2ViR0wgbGV2ZWwgZnJvbSBH
cmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yLgorCisg
ICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkdyYXBoaWNz
Q29udGV4dEdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRH
TC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFz
Q1YpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xFVXRp
bGl0aWVzQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveVBidWZmZXJBbmRE
ZXRhY2hJT1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xF
VXRpbGl0aWVzQ29jb2EuaDogQWRkZWQuCisgICAgICAgIE1vdmUgdGhlIGNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UgdG8gQ29jb2Egc3BlY2lmaWMKKyAgICAgICAgQU5HTEUgdXRpbGl0
eSBmaWxlLgorICAgICAgICBTZWUgYWxzbyBidWcgMjI2NTA0IC0gQWRvcHQgY3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZS9kZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZQorICAg
ICAgICBpbiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGFuZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTENvY29hLm1tCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlRm9yR1BVUHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5H
TCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVT
dGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VD
dXJyZW50KToKKyAgICAgICAgQWRkIGEgbmV3IGZ1bmN0aW9uIHRvIG1ha2UgdGhlIEVHTCBjb250
ZXh0IGN1cnJlbnQgYW5kIG1haW50YWluCisgICAgICAgIHRoZSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3VycmVudENvbnRleHQgY2FjaGUgdmFsdWUgY29ycmVjdGx5LgorICAgICAgICBDYWNo
ZSBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBhbHdheXMgd2hlbiBFR0wgY29udGV4dCBjaGFuZ2Vz
LgorICAgICAgICBUaGUgY2FjaGUgdmFsdWUgaXMgcmVzZXQgYWx3YXlzLCBhbmQgdGhlbiBzZXQg
b25seSB3aGVuIG5lZWRlZAorICAgICAgICBkdXJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1ha2VDb250ZXh0Q3VycmVudCgpLgorCisgICAgICAgIE1ha2UgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFIGZyaWVuZCBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCwgc2luY2UKKyAgICAgICAg
ZXNzZW50aWFsbHkgdGhlIGZvcm1lciBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBs
YXR0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZSk6CisgICAg
ICAgIE1vdmUgdGhlIGltcGxlbWVudGF0aW9uIHRvIGEgQU5HTEUgcmVsYXRlZCBoZWxwZXIgZmls
ZXMgYWJvdmUuCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjph
c0NWKToKKyAgICAgICAgTW92ZSB0aGUgYXNDViB0byB0aGUgaW1wbGVtZW50YXRvbiBmaWxlIGZv
ciBDb2NvY2EsIGFzIHRoYXQgaXMKKyAgICAgICAgdGhlIHBsYXRmb3JtIHdoaWNoIHVzZXMgdGhl
IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2hhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckN1cnJlbnRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAg
UmVwbGFjZSB3aXRoIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OllDYkNyTWF0cml4OjpvcGVyYXRvciBjb25zdCBHTGZsb2F0
KiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRU
cmFuc2ZlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RTo6fkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSk6CisgICAgICAgIFJl
b3JkZXIgdGhlIHJlc291cmNlIGluaXRpYWxpemF0aW9uIHdpdGggU2NvcGVFeGl0IGNsZWFudXAg
ZnVuY3Rpb25zLgorICAgICAgICBBdm9pZCBzdG9yaW5nIHRoZSB5dXZQcm9ncmFtLCBpbnN0ZWFk
IGp1c3QgdXNlIHRoZSBwcm9ncmFtIGFzIHByb2dyYW0KKyAgICAgICAgYmluYXJ5IGFuZCBkZWxl
dGUgdGhlIHByb2dyYW0uCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OllDYkNy
TWF0cml4OjpvcGVyYXRvciBHQ0dMU3Bhbjxjb25zdCBHTGZsb2F0LCAxNj4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjppbml0aWFs
aXplVVZDb250ZXh0T2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgdGhlIHJlc291cmNl
IGluaXRpYWxpemF0aW9uIGludG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgb2JqZWN0CisgICAgICAg
IGl0c2VsZiBpcyBhbHJlYWR5IGluaXRpYWxpemVkIG9ubHkgb24gZGVtYW5kLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjphdHRhY2hJT1N1cmZhY2VUb1RleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
OjpkZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIFNoYXJlIHRo
ZSBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBmcm9tCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQYnVmZmVyQW5k
QXR0YWNoSU9TdXJmYWNlIHRoYXQKKyAgICAgICAgd2FzIG1vdmVkIHRvIFdlYkNvcmU6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaDoKKyAgICAgICAgUmVtb3ZlIHRoZSBtX3l1
dlByb2dyYW0sIHJhdGhlciB1c2UganVzdCB0aGUgcHJvZ3JhbSBiaW5hcnkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIFJlbW92ZSB0aGUgcmVkdW5kYW50IHNo
YXJlZENvbnRleHQgcGFyYW1ldGVyLgorCiAyMDIxLTA5LTI5ICBLaW1tbyBLaW5udW5lbiAgPGtr
aW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgR1BVUCBDb2NvYSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBzaG91bGQgY2hlY2sgZm9yIEFOR0xFIHByZXNlbmNlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAppbmRleCAzYTFiOTAyODUxZDJjMTRhZGI5M2U4ZjZjZTQ3Nzg2NTBmZmQ4ZmU2Li5mMzBm
ZGFiYTA0YzI2MDY3ZjE2NDhmMjc0MjcyZDVlMmFlMWQzZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTM1OSw2ICszNTksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQU5HTEVV
dGlsaXRpZXNDb2NvYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0F1ZGlvVHJhY2tQcml2
YXRlV2ViTS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDJkODQxNWI0NjBiMjc1
MDE2NTRhMTU3NDI5MTJiNWM0ZmRiMTI1YS4uYWQ5ZDBkNGUwN2I2YzIzYzZhZmU2MTVmMDUwZTNl
MmFlOWVjMTIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTA2NDUsNiArMTA2NDUsOCBAQAogCQk3QkIzNEE0NzI1Mzc3NkM3
MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0JCNjgwQjcyNUJBMUJFMzAwMkI4NzM4IC8qIEdyYXBoaWNz
Q2hlY2tzTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBo
aWNzQ2hlY2tzTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0JCNjgwQjgy
NUJBMUJFNDAwMkI4NzM4IC8qIEdyYXBoaWNzQ2hlY2tzTWFjLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ2hlY2tzTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdCQ0Q0MkRBMjcwNUM5NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0NvY29h
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFOR0xFVXRpbGl0aWVzQ29jb2EuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QkNENDJEQzI3MDVDOTQ5MDBFQjIxMjcgLyogQU5HTEVV
dGlsaXRpZXNDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBTkdMRVV0aWxpdGllc0NvY29hLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCRTcyNjVCMjU3NjNCOEQwMEU4NUQ5OCAvKiBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDMDExRjNEMjRGQUQzNjAwMDVCRUYxMCAvKiBTZXR0aW5ncy5jcHAuZXJiICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFNldHRpbmdzLmNwcC5lcmI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDEx
RjNFMjRGQUQzNjAwMDVCRUYxMCAvKiBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcC5lcmIg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5jcHAuZXJiOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjczMjIsNiArMjczMjQsOCBAQAogCQlCNTMyMEQ2ODEyMkEyNEU5MDAy
RDE0NDAgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTdCQ0Q0MkRBMjcwNUM5NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0NvY29hLmNw
cCAqLywKKwkJCQk3QkNENDJEQzI3MDVDOTQ5MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2Nv
YS5oICovLAogCQkJCUNERjk5NTAxMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uY3BwICovLAogCQkJCUNERjk5NTAwMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNr
UHJpdmF0ZVdlYk0uaCAqLywKIAkJCQlGNDhEMkFBMzIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JD
b2NvYS5oICovLApAQCAtMzEzOTMsNiArMzEzOTcsNyBAQAogCQkJCUU3RTAzNTcyMjRENEUxOTYw
MDhERkVGQiAvKiBBbmFseXNlck9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI3RTNDODA4
MjU3RjVFNkUwMEM5ODZBQiAvKiBBTkdMRUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
QTc5NUM3MTg4OEJDQjIwMDM4MkY5MCAvKiBBTkdMRUluc3RhbmNlZEFycmF5cy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJN0JCMzRBMTcyNTM0NUNCMjAwMDI5RDA4IC8qIEFOR0xFVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4Qzgg
LyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2NDAsNyArMzI2
NDUsNiBAQAogCQkJCTkzNDkwN0U0MTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRD
Ry5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzREU4NzAyM0E5Njk3MzAwOEZDNDdCIC8qIEdyYXBo
aWNzQ29udGV4dEdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjQ1QUI1NTI1RkJBOURFMDBGRDI3
RjQgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRUVHTFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJN0JCMzRBMTcyNTM0NUNCMjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEVV
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMzMwQTAyMURGOEZBQzYwMEQzMzk1QyAv
KiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCMTAz
MzlFMjU0OTcyMTcwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QjEwMzM5RjI1NDk3MjFFMDBDOEMxQUMgLyogR3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAppbmRleCA0NmMyNmFlYmZhMDg2NTEyMjNl
ZGY5YjViYzI3YTg2Mjk2ZjhkZmY4Li40ZjBhOWI1OWZiNDRiZWJmZDM4MjY3NzJkOWIyMDg3ZDll
ZmFjNWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC0zNTcsNyArMzU3LDcgQEAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dEdMPiBHcmFwaGljc0NvbnRleHRHTDo6Y3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1HcmFwaGljc0NvbnRleHRHTDo6R3Jh
cGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzLCBHcmFwaGlj
c0NvbnRleHRHTCopCitHcmFwaGljc0NvbnRleHRHTDo6R3JhcGhpY3NDb250ZXh0R0woR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzKQogICAgIDogbV9hdHRycyhhdHRycykKIHsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dEdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHRHTC5oCmluZGV4IGE2ZTNlNDRjODE5OWM1Y2RmNzRhOTNhYzZmNjE0ZmQzMDY1ODU3MzEuLmVk
YWE0Y2U1ZWE3MmU3MzBiYzUyNTQ2YzcwMDZlZDIzNzI3Mzk2MGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtOTE0
LDcgKzkxNCw3IEBAIHB1YmxpYzoKICAgICAvLyBIb3N0V2luZG93IG1pZ2h0IGFmZmVjdCB0aGUg
ZGVjaXNpb24gd2hpY2ggYmFja2VuZCBpcyB0byBiZSB1c2VkLgogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+IGNyZWF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMmLCBIb3N0V2luZG93Kik7CiAKLSAgICBHcmFwaGljc0NvbnRleHRH
TChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dEdMKiBzaGFyZWRD
b250ZXh0ID0gbnVsbHB0cik7CisgICAgR3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzKTsKICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTCgpID0gZGVmYXVs
dDsKIAogICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50cy5hZGQo
JmNsaWVudCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKaW5kZXggYzJjZmE1
ZGMyZjc3NWFlNDg0YTk0Zjg5ZjZlNGRmNzFjOWJmMTg5Ny4uMDA2YjhhM2VlNjAxNTE4YjFiNjUy
YWU3N2M1NDkxOWUwNjQ3ZGM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAK
QEAgLTI4NDIsMTUgKzI4NDIsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptdWx0
aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDRwogICAgIGdsOjpN
dWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50cy5kYXRhLCB0eXBlLCBw
b2ludGVycy5kYXRhKCksIGluc3RhbmNlQ291bnRzLmRhdGEsIGRyYXdjb3VudCk7CiB9CiAKLSNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi1HcmFwaGljc0NvbnRleHRHTENW
KiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXNDVigpCi17Ci0gICAgaWYgKCFtX2N2KQotICAg
ICAgICBtX2N2ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+KCp0aGlzKTsK
LSAgICByZXR1cm4gbV9jdi5nZXQoKTsKLX0KLSNlbmRpZgotCiBib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp3YWl0QW5kVXBkYXRlT2xkZXN0RnJhbWUoKQogewogICAgIHNpemVfdCBvbGRl
c3RGcmFtZUNvbXBsZXRpb25GZW5jZSA9IG1fb2xkZXN0RnJhbWVDb21wbGV0aW9uRmVuY2UrKyAl
IG1heFBlbmRpbmdGcmFtZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9BTkdMRVV0aWxpdGllc0NvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xFVXRpbGl0aWVzQ29jb2EuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5OTNiNzc2NzE4OWZlN2VkZjZjMjY1OTIxNWFjZTNjMmVhMDY5MzkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BTkdMRVV0aWxpdGll
c0NvY29hLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFOR0xFVXRp
bGl0aWVzQ29jb2EuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkKiBjcmVhdGVQYnVmZmVyQW5kQXR0YWNo
SU9TdXJmYWNlKEVHTERpc3BsYXkgZGlzcGxheSwgRUdMQ29uZmlnIGNvbmZpZywgR0xlbnVtIHRh
cmdldCwgRUdMaW50IHVzYWdlSGludCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiBzdXJmYWNlLCBH
THVpbnQgcGxhbmUpCit7CisgICAgYXV0byBlZ2xUZXh0dXJlVGFyZ2V0ID0gdGFyZ2V0ID09IEdM
X1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFID8gRUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFIDog
RUdMX1RFWFRVUkVfMkQ7CisKKyAgICBjb25zdCBFR0xpbnQgc3VyZmFjZUF0dHJpYnV0ZXNbXSA9
IHsKKyAgICAgICAgRUdMX1dJRFRILCB3aWR0aCwKKyAgICAgICAgRUdMX0hFSUdIVCwgaGVpZ2h0
LAorICAgICAgICBFR0xfSU9TVVJGQUNFX1BMQU5FX0FOR0xFLCBzdGF0aWNfY2FzdDxFR0xpbnQ+
KHBsYW5lKSwKKyAgICAgICAgRUdMX1RFWFRVUkVfVEFSR0VULCBzdGF0aWNfY2FzdDxFR0xpbnQ+
KGVnbFRleHR1cmVUYXJnZXQpLAorICAgICAgICBFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRf
QU5HTEUsIHN0YXRpY19jYXN0PEVHTGludD4oaW50ZXJuYWxGb3JtYXQpLAorICAgICAgICBFR0xf
VEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEsCisgICAgICAgIEVHTF9URVhUVVJFX1RZ
UEVfQU5HTEUsIHN0YXRpY19jYXN0PEVHTGludD4odHlwZSksCisgICAgICAgIC8vIE9ubHkgaGFz
IGFuIGVmZmVjdCBvbiB0aGUgaU9TIFNpbXVsYXRvci4KKyAgICAgICAgRUdMX0lPU1VSRkFDRV9V
U0FHRV9ISU5UX0FOR0xFLCB1c2FnZUhpbnQsCisgICAgICAgIEVHTF9OT05FLCBFR0xfTk9ORQor
ICAgIH07CisKKyAgICBFR0xTdXJmYWNlIHBidWZmZXIgPSBFR0xfQ3JlYXRlUGJ1ZmZlckZyb21D
bGllbnRCdWZmZXIoZGlzcGxheSwgRUdMX0lPU1VSRkFDRV9BTkdMRSwgc3VyZmFjZSwgY29uZmln
LCBzdXJmYWNlQXR0cmlidXRlcyk7CisgICAgaWYgKCFwYnVmZmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGlmICghRUdMX0JpbmRUZXhJbWFnZShkaXNwbGF5LCBwYnVmZmVyLCBF
R0xfQkFDS19CVUZGRVIpKSB7CisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShkaXNwbGF5LCBw
YnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHBi
dWZmZXI7Cit9CisKK3ZvaWQgZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoRUdMRGlz
cGxheSBkaXNwbGF5LCB2b2lkKiBoYW5kbGUpCit7CisgICAgRUdMX1JlbGVhc2VUZXhJbWFnZShk
aXNwbGF5LCBoYW5kbGUsIEVHTF9CQUNLX0JVRkZFUik7CisgICAgRUdMX0Rlc3Ryb3lTdXJmYWNl
KGRpc3BsYXksIGhhbmRsZSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BTkdMRVV0aWxpdGllc0NvY29hLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BTkdMRVV0aWxpdGllc0NvY29h
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTNiYTRlMGRjOTEzMmU4NTg3NzVmOWMyNWJhZDY3NDhjN2M4NjliOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0FOR0xFVXRpbGl0aWVzQ29jb2EuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR0wpCisKKyNpbmNsdWRlICJBTkdMRUhlYWRlcnMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX19J
T1N1cmZhY2UgKklPU3VyZmFjZVJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBSZXR1
cm5zIGEgaGFuZGxlIHdoaWNoLCBpZiBub24tbnVsbCwgbXVzdCBiZSByZWxlYXNlZCB3aXRoIGRl
c3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKCkuCit2b2lkKiBjcmVhdGVQYnVmZmVyQW5k
QXR0YWNoSU9TdXJmYWNlKEVHTERpc3BsYXksIEVHTENvbmZpZywgR0xlbnVtIHRhcmdldCwgRUdM
aW50IHVzYWdlSGludCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiwgR0x1aW50IHBsYW5lKTsKKwor
dm9pZCBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShFR0xEaXNwbGF5LCB2b2lkKiBo
YW5kbGUpOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Q29jb2EubW0KaW5kZXggZjI1YjA5ODdkNDQ5NDM3MzgyZDA4NTdiYTQwNDVhMjJiNGJlODJiOC4u
OTkyM2RlZjM1MmEyMTNlZjYyMjVlOTIxZGQ0ODE1OTJlZjkwYWVkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5B
QkxFKFdFQkdMKQogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKIAorI2ltcG9y
dCAiQU5HTEVVdGlsaXRpZXNDb2NvYS5oIgogI2ltcG9ydCAiQ1ZVdGlsaXRpZXMuaCIKICNpbXBv
cnQgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTEFOR0xF
VXRpbGl0aWVzLmgiCkBAIC00OCw3ICs0OSw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURF
TykgJiYgVVNFKEFWRk9VTkRBVElPTikKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmgiCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCkBAIC0xOTcsNyArMTk4LDcgQEAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dEcKICAgICBpZiAoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5h
Z2VyKCkuaGFzVG9vTWFueUNvbnRleHRzKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJzLCBob3N0V2luZG93LCBudWxscHRyLCBudWxs
cHRyKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjb250ZXh0ID0gYWRv
cHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJzLCBob3N0V2luZG93LCBudWxs
cHRyKSk7CiAKICAgICBpZiAoIWNvbnRleHQtPm1fY29udGV4dE9iaikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0yMDcsMjMgKzIwOCwxMyBAQCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0Rwog
ICAgIHJldHVybiBjb250ZXh0OwogfQogCi1SZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIHNoYXJlZENvbnRleHQpCi17Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBhZG9wdFJlZigqbmV3
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKHNoYXJlZENvbnRleHQuY29udGV4dEF0dHJpYnV0ZXMo
KSwgbnVsbHB0ciwgJnNoYXJlZENvbnRleHQsIG51bGxwdHIpKTsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmFkZENvbnRleHQoY29udGV4dC5w
dHIoKSk7Ci0KLSAgICByZXR1cm4gY29udGV4dDsKLX0KLQogUmVmPEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRm9yR1BVUHJvY2Vzcyhjb25z
dCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJzLCBHcmFwaGljc0NvbnRleHRHTElP
U3VyZmFjZVN3YXBDaGFpbiogc3dhcENoYWluKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJzLCBudWxscHRyLCBudWxscHRyLCBzd2FwQ2hh
aW4pKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChh
dHRycywgbnVsbHB0ciwgc3dhcENoYWluKSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0
cnMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29udGV4dCwg
R3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4qIHN3YXBDaGFpbikKLSAgICA6IEdy
YXBoaWNzQ29udGV4dEdMKGF0dHJzLCBzaGFyZWRDb250ZXh0KQorR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyBhdHRycywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWlu
KiBzd2FwQ2hhaW4pCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRycykKIHsKICAgICBtX2lz
Rm9yV2ViR0wyID0gYXR0cnMud2ViR0xWZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xW
ZXJzaW9uOjpXZWJHTDI7CiAgICAgaWYgKGF0dHJzLnVzZU1ldGFsICYmICFwbGF0Zm9ybVN1cHBv
cnRzTWV0YWwobV9pc0ZvcldlYkdMMikpIHsKQEAgLTI5MiwyMCArMjgzLDEyIEBAIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0CiAgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xf
Q09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUpOwogICAgICAgICBlZ2xD
b250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKICAgICB9Ci0gICAgaWYgKCFzaGFy
ZWRDb250ZXh0KSB7Ci0gICAgICAgIC8vIFRoZSBzaGFyZWQgY29udGV4dCBpcyBvbmx5IG5vbi1u
dWxsIHdoZW4gY3JlYXRpbmcgYSBjb250ZXh0Ci0gICAgICAgIC8vIG9uIGJlaGFsZiBvZiB0aGUg
VmlkZW9UZXh0dXJlQ29waWVyLiBXZWJHTC1zcGVjaWZpYyByZW5kZXJpbmcKLSAgICAgICAgLy8g
ZmVlZGJhY2sgbG9vcCB2YWxpZGF0aW9uIGRvZXMgbm90IHdvcmsgaW4gbXVsdGktY29udGV4dAot
ICAgICAgICAvLyBzY2VuYXJpb3MsIGFuZCBtdXN0IGJlIGRpc2FibGVkIGZvciB0aGUgVmlkZW9U
ZXh0dXJlQ29waWVyJ3MKLSAgICAgICAgLy8gY29udGV4dC4KLSAgICAgICAgZWdsQ29udGV4dEF0
dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOwot
ICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOwotICAgICAgICAv
LyBXZWJHTCByZXF1aXJlcyB0aGF0IGFsbCByZXNvdXJjZXMgYXJlIGNsZWFyZWQgYXQgY3JlYXRp
b24uCi0gICAgICAgIC8vIEZJWE1FOiBwZXJmb3JtaW5nIHJvYnVzdCByZXNvdXJjZSBpbml0aWFs
aXphdGlvbiBpbiB0aGUgVmlkZW9UZXh0dXJlQ29waWVyIGFkZHMgYSBsYXJnZSBhbW91bnQgb2Yg
b3ZlcmhlYWQKLSAgICAgICAgLy8gc28gaXQgd291bGQgYmUgbmljZSB0byBhdm9pZCB0aGF0IHRo
ZXJlICh3ZSBzaG91bGQgYWx3YXlzIGJlIHRvdWNoaW5nIGV2ZXJ5IHBpeGVsIGFzIHdlIGNvcHkp
LgotICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1JPQlVTVF9SRVNPVVJD
RV9JTklUSUFMSVpBVElPTl9BTkdMRSk7Ci0gICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFw
cGVuZChFR0xfVFJVRSk7Ci0gICAgfQorICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xFKTsKKyAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOworCisgICAgLy8gV2ViR0wgcmVxdWlyZXMgdGhhdCBh
bGwgcmVzb3VyY2VzIGFyZSBjbGVhcmVkIGF0IGNyZWF0aW9uLgorICAgIGVnbENvbnRleHRBdHRy
aWJ1dGVzLmFwcGVuZChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFUSU9OX0FOR0xFKTsK
KyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOwogCiAgICAgLy8gV2Vi
R0wgZG9lc24ndCBhbGxvdyBjbGllbnQgYXJyYXlzLgogICAgIGVnbENvbnRleHRBdHRyaWJ1dGVz
LmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfQVJSQVlTX0VOQUJMRURfQU5HTEUpOwpAQCAtMzE2
LDE1ICsyOTksMTMgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKIAogICAgIGVnbENvbnRleHRB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CiAKLSAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3Jl
YXRlQ29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29uZmlnT2JqLCBzaGFyZWRDb250ZXh0ID8gc3Rh
dGljX2Nhc3Q8RUdMQ29udGV4dD4oc2hhcmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKSA6IEVHTF9O
T19DT05URVhULCBlZ2xDb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOwotICAgIGlmIChtX2NvbnRl
eHRPYmogPT0gRUdMX05PX0NPTlRFWFQpIHsKKyAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3JlYXRl
Q29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29uZmlnT2JqLCBFR0xfTk9fQ09OVEVYVCwgZWdsQ29u
dGV4dEF0dHJpYnV0ZXMuZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0T2JqID09IEVHTF9OT19D
T05URVhUIHx8ICFtYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaikpIHsKICAg
ICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsK
IAotICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xf
Tk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKLQogICAgIGlmIChtX2lzRm9yV2ViR0wyKQogICAg
ICAgICBnbDo6RW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhF
RF9JTkRFWCk7CiAKQEAgLTQ2Miw3ICs0NDMsNyBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKICAgICAgICAgICAgIEVHTF9EZXN0cm95U3VyZmFj
ZShtX2Rpc3BsYXlPYmosIGNvbnRlbnRzSGFuZGxlKTsKICAgICB9CiAgICAgaWYgKG1fY29udGV4
dE9iaikgewotICAgICAgICBjbGVhckN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIG1ha2VDdXJy
ZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX0NPTlRFWFQpOwogICAgICAgICBFR0xfRGVzdHJveUNv
bnRleHQobV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOwogICAgIH0KICAgICBBU1NFUlQoY3Vy
cmVudENvbnRleHQgIT0gdGhpcyk7CkBAIC01MjYsMTMgKzUwNyw2IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ3VycmVudENvbnRleHQoKQot
ewotICAgIEVHTEJvb2xlYW4gcmVzdWx0ID0gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwg
RUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgQVNT
RVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgY3VycmVudENvbnRleHQgPSBudWxscHRy
OwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlbGVhc2VDdXJyZW50Q29udGV4dChSZWxlYXNlQmVoYXZpb3IgcmVsZWFzZUJlaGF2
aW9yKQogewpAQCAtNTc4LDcgKzU1Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNoZWNrR1BVU3RhdHVzKCkKICAgICAgICAgTE9HKFdlYkdMLCAiUHJldGVuZGluZyB0aGUgR1BV
IGhhcyByZXNldCAoJXApLiBMb3NlIHRoZSBjb250ZXh0LiIsIHRoaXMpOwogICAgICAgICBtX2Zh
aWxOZXh0U3RhdHVzQ2hlY2sgPSBmYWxzZTsKICAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwot
ICAgICAgICBjbGVhckN1cnJlbnRDb250ZXh0KCk7CisgICAgICAgIG1ha2VDdXJyZW50KG1fZGlz
cGxheU9iaiwgRUdMX05PX0NPTlRFWFQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02
NzksMjUgKzY1MywyMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZQogICAgIHJldHVybiB0cnVl
OwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBkaXNwbGF5LCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMIGNvbnRleHQpCit7CisgICAgY3VycmVudENvbnRleHQgPSBudWxscHRyOworICAgIHJldHVy
biBFR0xfTWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNF
LCBjb250ZXh0KTsKK30KKwogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVBi
dWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LCBQYnVmZmVyQXR0YWNobWVu
dFVzYWdlIHVzYWdlLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0NH
THVpbnQgcGxhbmUpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV9SRUNUQU5HTEVfQVJCICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV8yRCkgeworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdp
bmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiVW5rbm93biB0
ZXh0dXJlIHRhcmdldCAlZC4iLCBzdGF0aWNfY2FzdDxpbnQ+KHRhcmdldCkpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGVnbFRleHR1cmVUYXJnZXQgPSBbJl0g
KCkgLT4gRUdMaW50IHsKLSAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV9SRUNUQU5HTEVfQVJCKQotICAgICAgICAgICAgcmV0dXJuIEVHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BTkdMRTsKLSAgICAgICAgcmV0dXJuIEVHTF9URVhUVVJFXzJEOwotICAgIH0oKTsK
LQotICAgIGlmIChlZ2xUZXh0dXJlVGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpF
R0xEcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIk1p
c21hdGNoIGluIEVHTCB0ZXh0dXJlIHRhcmdldDogJWQgc2hvdWxkIGJlICVkLiIsIHN0YXRpY19j
YXN0PGludD4odGFyZ2V0KSwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkVHTERyYXdpbmdCdWZm
ZXJUZXh0dXJlVGFyZ2V0KCkpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBhdXRvIHVzYWdlSGludEFuZ2xlID0gWyZdICgpIC0+IEVHTGludCB7CisgICAgYXV0byB1c2Fn
ZUhpbnQgPSBbJl0gKCkgLT4gRUdMaW50IHsKICAgICAgICAgaWYgKHVzYWdlID09IFBidWZmZXJB
dHRhY2htZW50VXNhZ2U6OlJlYWQpCiAgICAgICAgICAgICByZXR1cm4gRUdMX0lPU1VSRkFDRV9S
RUFEX0hJTlRfQU5HTEU7CiAgICAgICAgIGlmICh1c2FnZSA9PSBQYnVmZmVyQXR0YWNobWVudFVz
YWdlOjpXcml0ZSkKQEAgLTcwNSw0MCArNjc0LDEyIEBAIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKEdDR0xlbnVtIHRhcmdldCwK
ICAgICAgICAgcmV0dXJuIEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFIHwgRUdMX0lPU1VS
RkFDRV9XUklURV9ISU5UX0FOR0xFOwogICAgIH0oKTsKIAotICAgIGNvbnN0IEVHTGludCBzdXJm
YWNlQXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfV0lEVEgsIHdpZHRoLAotICAgICAgICBF
R0xfSEVJR0hULCBoZWlnaHQsCi0gICAgICAgIEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUsIHN0
YXRpY19jYXN0PEVHTGludD4ocGxhbmUpLAotICAgICAgICBFR0xfVEVYVFVSRV9UQVJHRVQsIHN0
YXRpY19jYXN0PEVHTGludD4oZWdsVGV4dHVyZVRhcmdldCksCi0gICAgICAgIEVHTF9URVhUVVJF
X0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSwgc3RhdGljX2Nhc3Q8RUdMaW50PihpbnRlcm5hbEZvcm1h
dCksCi0gICAgICAgIEVHTF9URVhUVVJFX0ZPUk1BVCwgRUdMX1RFWFRVUkVfUkdCQSwKLSAgICAg
ICAgRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSwgc3RhdGljX2Nhc3Q8RUdMaW50Pih0eXBlKSwKLSAg
ICAgICAgLy8gT25seSBoYXMgYW4gZWZmZWN0IG9uIHRoZSBpT1MgU2ltdWxhdG9yLgotICAgICAg
ICBFR0xfSU9TVVJGQUNFX1VTQUdFX0hJTlRfQU5HTEUsIHVzYWdlSGludEFuZ2xlLAotICAgICAg
ICBFR0xfTk9ORSwgRUdMX05PTkUKLSAgICB9OwotCi0gICAgYXV0byBkaXNwbGF5ID0gcGxhdGZv
cm1EaXNwbGF5KCk7Ci0gICAgRUdMU3VyZmFjZSBwYnVmZmVyID0gRUdMX0NyZWF0ZVBidWZmZXJG
cm9tQ2xpZW50QnVmZmVyKGRpc3BsYXksIEVHTF9JT1NVUkZBQ0VfQU5HTEUsIHN1cmZhY2UsIHBs
YXRmb3JtQ29uZmlnKCksIHN1cmZhY2VBdHRyaWJ1dGVzKTsKLSAgICBpZiAoIXBidWZmZXIpIHsK
LSAgICAgICAgTE9HKFdlYkdMLCAiRUdMX0NyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyIGZh
aWxlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFFR0xf
QmluZFRleEltYWdlKGRpc3BsYXksIHBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKLSAgICAg
ICAgTE9HKFdlYkdMLCAiRUdMX0JpbmRUZXhJbWFnZSBmYWlsZWQuIik7Ci0gICAgICAgIEVHTF9E
ZXN0cm95U3VyZmFjZShkaXNwbGF5LCBwYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHBidWZmZXI7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2NvbmZpZ09iaiwgdGFy
Z2V0LCB1c2FnZUhpbnQsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlLCBzdXJm
YWNlLCBwbGFuZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlc3Ryb3lQ
YnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKHZvaWQqIGhhbmRsZSkKIHsKLSAgICBhdXRvIGRpc3Bs
YXkgPSBwbGF0Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xfUmVsZWFzZVRleEltYWdlKGRpc3BsYXks
IGhhbmRsZSwgRUdMX0JBQ0tfQlVGRkVSKTsKLSAgICBFR0xfRGVzdHJveVN1cmZhY2UoZGlzcGxh
eSwgaGFuZGxlKTsKKyAgICBXZWJDb3JlOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFj
ZShtX2Rpc3BsYXlPYmosIGhhbmRsZSk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9T
SU1VTEFUT1IpCkBAIC04NDYsNiArNzg3LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnByZXBhcmVGb3JEaXNwbGF5KCkKICAgICB9CiB9CiAKKworI2lmIEVOQUJMRShWSURFTykg
JiYgVVNFKEFWRk9VTkRBVElPTikKK0dyYXBoaWNzQ29udGV4dEdMQ1YqIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjphc0NWKCkKK3sKKyAgICBpZiAoIW1fY3YpCisgICAgICAgIG1fY3YgPSBHcmFw
aGljc0NvbnRleHRHTENWQU5HTEU6OmNyZWF0ZSgqdGhpcyk7CisgICAgcmV0dXJuIG1fY3YuZ2V0
KCk7Cit9CisjZW5kaWYKKwogc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlYWRDb21wb3NpdGVkUmVzdWx0cygpCiB7CiAgICAgYXV0byYgZGlzcGxh
eUJ1ZmZlciA9IG1fc3dhcENoYWluLT5kaXNwbGF5QnVmZmVyKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFLmNwcAppbmRleCA3ODAxYmU0OTYwMTRmMzQ3M2Q0NDUyNWU0NDgxNTI2NDI4YWE2
ZGQ5Li44ZTc2NTA3MjBhNzRiYTc1NDNmZGRiOTcwNGI2NDAzNjIzNGNmNTkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENW
QU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAKQEAgLTI4LDEyICsyOCwxNCBAQAogCiAjaWYgRU5BQkxF
KFdFQkdMKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCiAKLSNpbmNsdWRl
ICJBTkdMRUhlYWRlcnMuaCIKKyNpbmNsdWRlICJBTkdMRVV0aWxpdGllc0NvY29hLmgiCiAjaW5j
bHVkZSAiRm91ckNDLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlVmlkZW9TUEkuaD4K
ICNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgogI2luY2x1ZGUgPHd0Zi9T
dGRNYXAuaD4KICNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC0yMzAsOSArMjMyLDkgQEAgc3RydWN0IFlDYkNyTWF0
cml4IHsKIAogICAgIGNvbnN0ZXhwciBZQ2JDck1hdHJpeChQaXhlbFJhbmdlLCBHTGZsb2F0IGNi
Q29lZmZpY2llbnQsIEdMZmxvYXQgY3JDb2VmZmljaWVudCk7CiAKLSAgICBvcGVyYXRvciBHQ0dM
U3Bhbjxjb25zdCBHTGZsb2F0LCAxNj4oKSBjb25zdAorICAgIG9wZXJhdG9yIGNvbnN0IEdMZmxv
YXQqKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlR0NHTFNwYW48MTY+KCZyb3dz
WzBdWzBdKTsKKyAgICAgICAgcmV0dXJuICZyb3dzWzBdWzBdOwogICAgIH0KIAogICAgIGNvbnN0
ZXhwciBHTGZsb2F0Q29sb3Igb3BlcmF0b3IqKGNvbnN0IEdMZmxvYXRDb2xvciYpIGNvbnN0OwpA
QCAtMzA0LDcgKzMwNiw3IEBAIGNvbnN0ZXhwciBHTGZsb2F0Q29sb3IgWUNiQ3JNYXRyaXg6Om9w
ZXJhdG9yKihjb25zdCBHTGZsb2F0Q29sb3ImIGNvbG9yKSBjb25zdAogICAgICk7CiB9CiAKLXN0
YXRpYyBHQ0dMU3Bhbjxjb25zdCBHTGZsb2F0LCAxNj4gWUNiQ3JUb1JHQk1hdHJpeEZvclJhbmdl
QW5kVHJhbnNmZXJGdW5jdGlvbihQaXhlbFJhbmdlIHJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Yg
dHJhbnNmZXJGdW5jdGlvbikKK3N0YXRpYyBjb25zdCBHTGZsb2F0KiBZQ2JDclRvUkdCTWF0cml4
Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVu
Y3Rpb25DViB0cmFuc2ZlckZ1bmN0aW9uKQogewogICAgIHVzaW5nIE1hcEtleSA9IHN0ZDo6cGFp
cjxQaXhlbFJhbmdlLCBUcmFuc2ZlckZ1bmN0aW9uQ1Y+OwogICAgIHVzaW5nIE1hdHJpeE1hcCA9
IFN0ZE1hcDxNYXBLZXksIGNvbnN0IFlDYkNyTWF0cml4Jj47CkBAIC00MzAsMTY4ICs0MzIsMTM0
IEBAIHN0YXRpYyBHQ0dMU3Bhbjxjb25zdCBHTGZsb2F0LCAxNj4gWUNiQ3JUb1JHQk1hdHJpeEZv
clJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihQCiAgICAgcmV0dXJuIGl0ZXJhdG9yLT5zZWNvbmQ7
CiB9CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIFNjb3BlZCBob2xkZXIgb2YgYSBjbGVhbnVwIGZ1bmN0
aW9uLiBDYWxscyB0aGUgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgc2NvcGUuCi0vLyBOb3Rl
OiBSZWxlYXNlcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiBvbmx5IGFmdGVyIHRoZSBz
Y29wZSwgbm90Ci0vLyBhdCB0aGUgdGltZSBvZiBgcmVzZXQoKWAgY2FsbC4KLXRlbXBsYXRlIDx0
eXBlbmFtZSBGPgotY2xhc3MgU2NvcGVkQ2xlYW51cCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
U2NvcGVkQ2xlYW51cChGJiYgZnVuY3Rpb24pCi0gICAgICAgIDogbV9mdW5jdGlvbihXVEZNb3Zl
KGZ1bmN0aW9uKSkKLSAgICB7Ci0gICAgfQotICAgIH5TY29wZWRDbGVhbnVwKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX3Nob3VsZENhbGwpCi0gICAgICAgICAgICBtX2Z1bmN0aW9uKCk7Ci0gICAg
fQotICAgIHZvaWQgcmVzZXQoKSB7IG1fc2hvdWxkQ2FsbCA9IGZhbHNlOyB9Ci1wcml2YXRlOgot
ICAgIGJvb2wgbV9zaG91bGRDYWxsID0gdHJ1ZTsKLSAgICBjb25zdCBGIG1fZnVuY3Rpb247Ci19
OwotCi19Ci0KLUdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6R3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFyZWQoY29udGV4dCkpCi0gICAgLCBtX2Zy
YW1lYnVmZmVyKG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSkKK3N0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+IEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y3Jl
YXRlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0KQogeworICAgIHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0NvbnRleHRHTENWQU5HTEU+IGN2IHsgbmV3IEdyYXBoaWNzQ29udGV4dEdM
Q1ZBTkdMRShjb250ZXh0KSB9OworICAgIGlmICghY3YtPm1fY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGN2OwogfQogCiBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEU6On5HcmFwaGljc0NvbnRleHRHTENWQU5HTEUoKQogewotICAgIGlmIChtX3l1dlZlcnRleEJ1
ZmZlcikKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV95dXZWZXJ0ZXhCdWZmZXIp
OwotICAgIGlmIChtX3l1dlByb2dyYW0pCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3Jh
bShtX3l1dlByb2dyYW0pOwotICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mcmFt
ZWJ1ZmZlcik7CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjptYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBnbDo6RGVsZXRlQnVmZmVycygxLCAmbV95dXZWZXJ0ZXhCdWZmZXIpOworICAgIGdsOjpEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZnJhbWVidWZmZXIpOworICAgIEVHTF9EZXN0cm95Q29udGV4
dChtX2Rpc3BsYXksIG1fY29udGV4dCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkFO
R0xFOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpCitHcmFwaGljc0NvbnRleHRHTENWQU5H
TEU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgb3du
ZXIpCisgICAgOiBtX293bmVyKG93bmVyKQogewotICAgIGNvbnN0IGJvb2wgdXNlVGV4dHVyZTJE
ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQ7Ci0KLSAgICBQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdM
OjpWRVJURVhfU0hBREVSKTsKLSAgICBpZiAodXNlVGV4dHVyZTJEKQotICAgICAgICBtX2NvbnRl
eHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZTJE
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRl
ciwgc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlUmVjdGFuZ2xlKTsKLQotICAgIG1fY29udGV4dC0+
Y29tcGlsZVNoYWRlckRpcmVjdCh2ZXJ0ZXhTaGFkZXIpOwotCi0gICAgR0NHTGludCBzdGF0dXMg
PSBtX2NvbnRleHQtPmdldFNoYWRlcmkodmVydGV4U2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6
Q09NUElMRV9TVEFUVVMpOwotICAgIGlmICghc3RhdHVzKSB7Ci0gICAgICAgIExPRyhXZWJHTCwg
IkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoJXAp
IC0gVmVydGV4IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKLSAgICAgICAgbV9j
b250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFBsYXRmb3JtR0xPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRl
eHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSKTsKLSAg
ICBpZiAodXNlVGV4dHVyZTJEKQotICAgICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFn
bWVudFNoYWRlciwgc195dXZGcmFnbWVudFNoYWRlclRleHR1cmUyRCk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgc195dXZGcmFnbWVu
dFNoYWRlclRleHR1cmVSZWN0YW5nbGUpOworICAgIC8vIENyZWF0ZSBjb21wYXRpYmxlIGNvbnRl
eHQgdGhhdCBzaGFyZXMgc3RhdGUgd2l0aCBvd25lciwgYnV0IG9uZSB0aGF0IGRvZXMgbm90Cisg
ICAgLy8gaGF2ZSByb2J1c3RuZXNzIG9yIFdlYkdMIGNvbXBhdGliaWxpdHkuCisgICAgY29uc3Qg
RUdMaW50IGNvbnRleHRBdHRyaWJ1dGVzW10gPSB7CisgICAgICAgIEVHTF9DT05URVhUX0NMSUVO
VF9WRVJTSU9OLAorICAgICAgICBvd25lci5tX2lzRm9yV2ViR0wyID8gMyA6IDIsCisgICAgICAg
IEVHTF9DT05URVhUX09QRU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9BTkdMRSwKKyAgICAgICAg
RUdMX0ZBTFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9DTElFTlRfQVJSQVlTX0VOQUJMRURfQU5H
TEUsCisgICAgICAgIEVHTF9GQUxTRSwKKyAgICAgICAgRUdMX0NPTlRFWFRfQklORF9HRU5FUkFU
RVNfUkVTT1VSQ0VfQ0hST01JVU0sCisgICAgICAgIEVHTF9GQUxTRSwKKyAgICAgICAgRUdMX05P
TkUKKyAgICB9OworICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IG93bmVyLnBsYXRmb3JtRGlzcGxh
eSgpOworICAgIEVHTENvbmZpZyBjb25maWcgPSBvd25lci5wbGF0Zm9ybUNvbmZpZygpOworICAg
IEVHTENvbnRleHQgY29udGV4dCA9IEVHTF9DcmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywg
b3duZXIubV9jb250ZXh0T2JqLCBjb250ZXh0QXR0cmlidXRlcyk7CisgICAgaWYgKGNvbnRleHQg
PT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bWFrZUN1cnJlbnQoZGlzcGxheSwgY29udGV4dCk7CisKKyAgICBhdXRvIGNvbnRl
eHRDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSwgY29udGV4dF0geworICAgICAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX0NPTlRF
WFQpOworICAgICAgICBFR0xfRGVzdHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCk7CisgICAg
fSk7CiAKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXJEaXJlY3QoZnJhZ21lbnRTaGFkZXIp
OworICAgIGNvbnN0IGJvb2wgdXNlVGV4dHVyZTJEID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRDsKIAotICAgIHN0
YXR1cyA9IG1fY29udGV4dC0+Z2V0U2hhZGVyaShmcmFnbWVudFNoYWRlciwgR3JhcGhpY3NDb250
ZXh0R0w6OkNPTVBJTEVfU1RBVFVTKTsKLSAgICBpZiAoIXN0YXR1cykgewotICAgICAgICBMT0co
V2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmluaXRpYWxpemVVVkNvbnRleHRPYmpl
Y3RzKCVwKSAtIEZyYWdtZW50IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgbV9j
b250ZXh0LT5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7CisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKKyAgICBpZiAo
IXVzZVRleHR1cmUyRCkgeworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9B
TkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFO
R0xFKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgaWYgKGdsOjpH
ZXRFcnJvcigpICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KKyNl
bmRpZgogCi0gICAgbV95dXZQcm9ncmFtID0gbV9jb250ZXh0LT5jcmVhdGVQcm9ncmFtKCk7Ci0g
ICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIobV95dXZQcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwot
ICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1feXV2UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIp
OwotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV95dXZQcm9ncmFtKTsKLQotICAgIHN0YXR1
cyA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWkobV95dXZQcm9ncmFtLCBHcmFwaGljc0NvbnRleHRH
TDo6TElOS19TVEFUVVMpOwotICAgIGlmICghc3RhdHVzKSB7Ci0gICAgICAgIExPRyhXZWJHTCwg
IkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoJXAp
IC0gUHJvZ3JhbSBmYWlsZWQgdG8gbGluay4iLCB0aGlzKTsKLSAgICAgICAgbV9jb250ZXh0LT5k
ZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFk
ZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV95
dXZQcm9ncmFtKTsKLSAgICAgICAgbV95dXZQcm9ncmFtID0gMDsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlByb2dyYW0sICJ1X3lUZXh0dXJlIl9zKTsKLSAgICBt
X3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KG1feXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlIl9zKTsKLSAgICBtX2NvbG9yTWF0cml4VW5pZm9y
bUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV95dXZQcm9ncmFtLCAi
dV9jb2xvck1hdHJpeCJfcyk7Ci0gICAgbV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2UHJvZ3JhbSwgInVfZmxpcFkiX3MpOwotICAg
IG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24obV95dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiX3MpOwotICAgIG1fdXZUZXh0dXJl
U2l6ZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1feXV2
UHJvZ3JhbSwgInVfdXZUZXh0dXJlU2l6ZSJfcyk7Ci0gICAgbV95dXZQb3NpdGlvbkF0dHJpYnV0
ZUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChtX3l1dlByb2dy
YW0sICJhX3Bvc2l0aW9uIl9zKTsKLQotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1feXV2
UHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihtX3l1
dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2
ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVy
KTsKLQotICAgIG1feXV2VmVydGV4QnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsK
KyAgICBHTGludCB2ZXJ0ZXhTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX1ZFUlRFWF9TSEFE
RVIpOworICAgIEdMaW50IGZyYWdtZW50U2hhZGVyID0gZ2w6OkNyZWF0ZVNoYWRlcihHTF9GUkFH
TUVOVF9TSEFERVIpOworICAgIEdMdWludCB5dXZQcm9ncmFtID0gZ2w6OkNyZWF0ZVByb2dyYW0o
KTsKKyAgICBhdXRvIHByb2dyYW1DbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbdmVydGV4U2hhZGVy
LCBmcmFnbWVudFNoYWRlciwgeXV2UHJvZ3JhbV0geworICAgICAgICBnbDo6RGVsZXRlU2hhZGVy
KHZlcnRleFNoYWRlcik7CisgICAgICAgIGdsOjpEZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIp
OworICAgICAgICBnbDo6RGVsZXRlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICB9KTsKKyAgICAv
LyBUaGVzZSBhcmUgd3JpdHRlbiBzbyBzdHJsZW4gbWlnaHQgYmUgY29tcGlsZS10aW1lLgorICAg
IEdMaW50IHZzTGVuZ3RoID0gdXNlVGV4dHVyZTJEID8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJl
MkQubGVuZ3RoKCkgOiBzX3l1dlZlcnRleFNoYWRlclRleHR1cmVSZWN0YW5nbGUubGVuZ3RoKCk7
CisgICAgR0xpbnQgZnNMZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dkZyYWdtZW50U2hhZGVy
VGV4dHVyZTJELmxlbmd0aCgpIDogc195dXZGcmFnbWVudFNoYWRlclRleHR1cmVSZWN0YW5nbGUu
bGVuZ3RoKCk7CisgICAgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0gdXNlVGV4dHVy
ZTJEID8gc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dlZlcnRleFNoYWRlclRleHR1
cmVSZWN0YW5nbGU7CisgICAgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UgPSB1c2VU
ZXh0dXJlMkQgPyBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEIDogc195dXZGcmFnbWVudFNo
YWRlclRleHR1cmVSZWN0YW5nbGU7CisKKyAgICBnbDo6U2hhZGVyU291cmNlKHZlcnRleFNoYWRl
ciwgMSwgJnZlcnRleFNoYWRlclNvdXJjZSwgJnZzTGVuZ3RoKTsKKyAgICBnbDo6U2hhZGVyU291
cmNlKGZyYWdtZW50U2hhZGVyLCAxLCAmZnJhZ21lbnRTaGFkZXJTb3VyY2UsICZmc0xlbmd0aCk7
CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICBnbDo6Q29tcGlsZVNo
YWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCB2
ZXJ0ZXhTaGFkZXIpOworICAgIGdsOjpBdHRhY2hTaGFkZXIoeXV2UHJvZ3JhbSwgZnJhZ21lbnRT
aGFkZXIpOworICAgIGdsOjpMaW5rUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICAvLyBMaW5rIHN0
YXR1cyBpcyBjaGVja2VkIGFmdGVyd2FyZHMgZm9yIHRoZW9yZXRpY2FsIHBhcmFsbGVsIGNvbXBp
bGF0aW9uIGJlbmVmaXQuCisKKyAgICBHTHVpbnQgeXV2VmVydGV4QnVmZmVyID0gMDsKKyAgICBn
bDo6R2VuQnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKKyAgICBhdXRvIHl1dlZlcnRleEJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt5dXZWZXJ0ZXhCdWZmZXJdIHsKKyAgICAgICAg
Z2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJnl1dlZlcnRleEJ1ZmZlcik7CisgICAgfSk7CiAgICAgZmxv
YXQgdmVydGljZXNbMTJdID0geyAtMSwgLTEsIDEsIC0xLCAxLCAxLCAxLCAxLCAtMSwgMSwgLTEs
IC0xIH07CisgICAgZ2w6OkJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCB5dXZWZXJ0ZXhCdWZm
ZXIpOworICAgIGdsOjpCdWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2Vz
KSwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKIAotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBtX3l1dlZlcnRleEJ1ZmZlcik7Ci0g
ICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIs
IEdDR0xTcGFuPGNvbnN0IEdDR0x2b2lkPih2ZXJ0aWNlcywgc2l6ZW9mKHZlcnRpY2VzKSksIEdy
YXBoaWNzQ29udGV4dEdMOjpTVEFUSUNfRFJBVyk7Ci0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24pOwotICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24s
IDIsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQqIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6YXR0YWNoSU9TdXJm
YWNlVG9UZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gdHlwZSwgSU9TdXJmYWNl
UmVmIHN1cmZhY2UsIEdDR0x1aW50IHBsYW5lKQotewotICAgIGF1dG8gZGlzcGxheSA9IG1fY29u
dGV4dC0+cGxhdGZvcm1EaXNwbGF5KCk7Ci0gICAgRUdMaW50IGVnbFRleHR1cmVUYXJnZXQgPSAw
OwotCi0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9SRUNUQU5H
TEVfQVJCKQotICAgICAgICBlZ2xUZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FOR0xFOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV8yRCkKLSAgICAgICAgZWdsVGV4dHVyZVRhcmdldCA9IEVHTF9URVhUVVJFXzJEOwotICAgIGVs
c2UgewotICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0
YXRpY19jYXN0PGludD4odGFyZ2V0KSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LSAgICBpZiAoZWdsVGV4dHVyZVRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdM
RHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSkgewotICAgICAgICBMT0coV2ViR0wsICJNaXNt
YXRjaCBpbiBFR0wgdGV4dHVyZSB0YXJnZXQgJWQuIiwgc3RhdGljX2Nhc3Q8aW50Pih0YXJnZXQp
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIEdMdWludCBmcmFtZWJ1ZmZl
ciA9IDA7CisgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworICAgIGF1
dG8gZnJhbWVidWZmZXJDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbZnJhbWVidWZmZXJdIHsKKyAg
ICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworICAgIH0pOwog
Ci0gICAgY29uc3QgRUdMaW50IHN1cmZhY2VBdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgIEVHTF9X
SURUSCwgd2lkdGgsCi0gICAgICAgIEVHTF9IRUlHSFQsIGhlaWdodCwKLSAgICAgICAgRUdMX0lP
U1VSRkFDRV9QTEFORV9BTkdMRSwgc3RhdGljX2Nhc3Q8RUdMaW50PihwbGFuZSksCi0gICAgICAg
IEVHTF9URVhUVVJFX1RBUkdFVCwgc3RhdGljX2Nhc3Q8RUdMaW50PihlZ2xUZXh0dXJlVGFyZ2V0
KSwKLSAgICAgICAgRUdMX1RFWFRVUkVfSU5URVJOQUxfRk9STUFUX0FOR0xFLCBzdGF0aWNfY2Fz
dDxFR0xpbnQ+KGludGVybmFsRm9ybWF0KSwKLSAgICAgICAgRUdMX1RFWFRVUkVfRk9STUFULCBF
R0xfVEVYVFVSRV9SR0JBLAotICAgICAgICBFR0xfVEVYVFVSRV9UWVBFX0FOR0xFLCBzdGF0aWNf
Y2FzdDxFR0xpbnQ+KHR5cGUpLAotICAgICAgICAvLyBPbmx5IGhhcyBhbiBlZmZlY3Qgb24gdGhl
IGlPUyBTaW11bGF0b3IuCi0gICAgICAgIEVHTF9JT1NVUkZBQ0VfVVNBR0VfSElOVF9BTkdMRSwg
RUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsCi0gICAgICAgIEVHTF9OT05FLCBFR0xfTk9O
RQotICAgIH07Ci0gICAgRUdMU3VyZmFjZSBwYnVmZmVyID0gRUdMX0NyZWF0ZVBidWZmZXJGcm9t
Q2xpZW50QnVmZmVyKGRpc3BsYXksIEVHTF9JT1NVUkZBQ0VfQU5HTEUsIHN1cmZhY2UsIG1fY29u
dGV4dC0+cGxhdGZvcm1Db25maWcoKSwgc3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIGlmICghcGJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFFR0xfQmluZFRleEltYWdl
KGRpc3BsYXksIHBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKLSAgICAgICAgRUdMX0Rlc3Ry
b3lTdXJmYWNlKGRpc3BsYXksIHBidWZmZXIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBHTGludCBzdGF0dXMgPSAwOworICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRSh5dXZQ
cm9ncmFtLCBHTF9MSU5LX1NUQVRVUywgMSwgbnVsbHB0ciwgJnN0YXR1cyk7CisgICAgaWYgKCFz
dGF0dXMpIHsKKyAgICAgICAgR0xpbnQgdnNTdGF0dXMgPSAwOworICAgICAgICBnbDo6R2V0U2hh
ZGVyaXZSb2J1c3RBTkdMRSh2ZXJ0ZXhTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxs
cHRyLCAmdnNTdGF0dXMpOworICAgICAgICBHTGludCBmc1N0YXR1cyA9IDA7CisgICAgICAgIGds
OjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKGZyYWdtZW50U2hhZGVyLCBHTF9DT01QSUxFX1NUQVRV
UywgMSwgbnVsbHB0ciwgJmZzU3RhdHVzKTsKKyAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFKCVwKSAtIFlVViBwcm9ncmFtIGZhaWxlZCB0byBsaW5rOiAlZCwgJWQs
ICVkLiIsIHRoaXMsIHN0YXR1cywgdnNTdGF0dXMsIGZzU3RhdHVzKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICByZXR1cm4gcGJ1ZmZlcjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEU6OmRldGFjaElPU3VyZmFjZUZyb21UZXh0dXJlKHZvaWQqIGhhbmRsZSkKLXsKLSAg
ICBhdXRvIGRpc3BsYXkgPSBtX2NvbnRleHQtPnBsYXRmb3JtRGlzcGxheSgpOwotICAgIEVHTF9S
ZWxlYXNlVGV4SW1hZ2UoZGlzcGxheSwgaGFuZGxlLCBFR0xfQkFDS19CVUZGRVIpOwotICAgIEVH
TF9EZXN0cm95U3VyZmFjZShkaXNwbGF5LCBoYW5kbGUpOworICAgIGNvbnRleHRDbGVhbnVwLnJl
bGVhc2UoKTsKKyAgICB5dXZWZXJ0ZXhCdWZmZXJDbGVhbnVwLnJlbGVhc2UoKTsKKyAgICBmcmFt
ZWJ1ZmZlckNsZWFudXAucmVsZWFzZSgpOworICAgIG1fZGlzcGxheSA9IGRpc3BsYXk7CisgICAg
bV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbmZpZyA9IGNvbmZpZzsKKyAgICBtX3l1dlZl
cnRleEJ1ZmZlciA9IHl1dlZlcnRleEJ1ZmZlcjsKKyAgICBtX2ZyYW1lYnVmZmVyID0gZnJhbWVi
dWZmZXI7CisgICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9j
YXRpb24oeXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiKTsKKyAgICBtX3V2VGV4dHVyZVVuaWZvcm1M
b2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJl
Iik7CisgICAgbV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9j
YXRpb24oeXV2UHJvZ3JhbSwgInVfY29sb3JNYXRyaXgiKTsKKyAgICBtX3l1dkZsaXBZVW5pZm9y
bUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV9mbGlwWSIp
OworICAgIG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2Nh
dGlvbih5dXZQcm9ncmFtLCAidV95VGV4dHVyZVNpemUiKTsKKyAgICBtX3V2VGV4dHVyZVNpemVV
bmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X3V2
VGV4dHVyZVNpemUiKTsKKyAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24gPSBnbDo6
R2V0QXR0cmliTG9jYXRpb24oeXV2UHJvZ3JhbSwgImFfcG9zaXRpb24iKTsKKyAgICAvLyBQcm9n
cmFtIGlzIGRlbGV0ZWQgYnkgdGhlIGNsZWFudXAgd2hpbGUgdGhlIHByb2dyYW0gYmluYXJ5IHN0
YXlzIGluIHVzZS4KKyAgICBnbDo6VXNlUHJvZ3JhbSh5dXZQcm9ncmFtKTsKKyAgICBnbDo6RW5h
YmxlVmVydGV4QXR0cmliQXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAg
ICBnbDo6VmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24s
IDIsIEdMX0ZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwg
MCk7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZl
cik7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpjb3B5UGl4ZWxCdWZmZXJU
b1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRU
ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTGVudW0g
Zm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSBmbGlwWSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFOjpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFn
ZSwgUGxhdGZvcm1HTE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHTGludCBsZXZlbCwgR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgRmxpcFkgZmxpcFkpCiB7
CiAgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgJzQyMHYnIGFuZCAn
NDIwZicgcGl4ZWwgZm9ybWF0cy4gSW52ZXN0aWdhdGUgc3VwcG9ydGluZyBtb3JlIHBpeGVsIGZv
cm1hdHMuCiAgICAgT1NUeXBlIHBpeGVsRm9ybWF0ID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9y
bWF0VHlwZShpbWFnZSk7CkBAIC02MTEsNTIgKzU3OSw0MyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1h
Z2UsCiAKICAgICBhdXRvIG5ld1N1cmZhY2VTZWVkID0gSU9TdXJmYWNlR2V0U2VlZChzdXJmYWNl
KTsKICAgICBpZiAoZmxpcFkgPT0gbV9sYXN0RmxpcFkKLSAgICAgICAgJiYgc3VyZmFjZSA9PSBt
X2xhc3RTdXJmYWNlIAorICAgICAgICAmJiBzdXJmYWNlID09IG1fbGFzdFN1cmZhY2UKICAgICAg
ICAgJiYgbmV3U3VyZmFjZVNlZWQgPT0gbV9sYXN0U3VyZmFjZVNlZWQKLSAgICAgICAgJiYgbGFz
dFRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpID09IG1fY29udGV4dC0+dGV4dHVyZVNlZWQob3V0
cHV0VGV4dHVyZSkpIHsKKyAgICAgICAgJiYgbGFzdFRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUp
ID09IG1fb3duZXIudGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkpIHsKICAgICAgICAgLy8gSWYg
dGhlIHRleHR1cmUgaGFzbid0IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBj
b3BpZWQgdG8gaXQsIGFuZCB0aGUKICAgICAgICAgLy8gaW1hZ2UgaGFzbid0IGJlZW4gbW9kaWZp
ZWQgc2luY2UgdGhlIGxhc3QgdGltZSBpdCB3YXMgY29waWVkLCB0aGlzIGlzIGEgbm8tb3AuCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX3l1dlByb2dyYW0pIHsKLSAgICAgICAg
aWYgKCFpbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpKSB7Ci0gICAgICAgICAgICBMT0coV2Vi
R0wsICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3Jt
VGV4dHVyZSglcCkgLSBVbmFibGUgdG8gaW5pdGlhbGl6ZSBPcGVuR0wgY29udGV4dCBvYmplY3Rz
LiIsIHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQog
ICAgIHNpemVfdCB3aWR0aCA9IENWUGl4ZWxCdWZmZXJHZXRXaWR0aChpbWFnZSk7CiAgICAgc2l6
ZV90IGhlaWdodCA9IENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoaW1hZ2UpOwogCi0gICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zy
YW1lYnVmZmVyKTsKKyAgICBnbDo6Vmlld3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAKICAg
ICAvLyBUaGUgb3V0cHV0VGV4dHVyZSBtaWdodCBjb250YWluIHVuaW5pdGlhbGl6ZWQgY29udGVu
dCBvbiBlYXJseS1vdXRzLiBDbGVhciBpdCBpbiBjYXNlcwogICAgIC8vIGF1dG9DbGVhclRleHR1
cmVPbkVycm9yIGlzIG5vdCByZXNldC4KLSAgICBhdXRvIGF1dG9DbGVhclRleHR1cmVPbkVycm9y
ID0gU2NvcGVkQ2xlYW51cCB7Ci0gICAgICAgIFtvdXRwdXRUZXh0dXJlLCBsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dCA9IG1fY29udGV4dC5wdHIoKV0gewotICAg
ICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
MkQsIG91dHB1dFRleHR1cmUpOwotICAgICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRERpcmVj
dChHTF9URVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIDAsIGZvcm1hdCwg
dHlwZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgMCk7Ci0gICAgICAgIH0KLSAgICB9OworICAgIGF1dG8g
YXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IgPSBtYWtlU2NvcGVFeGl0KFtvdXRwdXRUZXh0dXJlLCBs
ZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZV0geworICAgICAgICBnbDo6QmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAgICAgIGdsOjpUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgMCwgMCwgMCwgZm9ybWF0
LCB0eXBlLCBudWxscHRyKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOworICAgIH0pOwogICAgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG91dHB1dCB0ZXh0
dXJlLgotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfMkQsIG91dHB1dFRleHR1cmUpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFH
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKLSAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1Q
X1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGlj
c0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJERGly
ZWN0KEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKLQotICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRH
TDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBvdXRw
dXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0NHTGVudW0gc3RhdHVzID0gbV9jb250ZXh0LT5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUik7Ci0gICAg
aWYgKHN0YXR1cyAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsK
KyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSk7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OlRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKworICAg
IGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNI
TUVOVDAsIEdMX1RFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHTGVudW0g
c3RhdHVzID0gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpOworICAg
IGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgTE9HKFdl
YkdMLCAiR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4
dHVyZS4iLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCAwKTsKLQotICAg
IG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX3l1dlByb2dyYW0pOwotICAgIG1fY29udGV4dC0+dmll
d3BvcnQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOwogCiAgICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlcyBmb3IgdGhl
IHZpZGVvIHNvdXJjZS4KICAgICBhdXRvIHlQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhP
ZlBsYW5lKHN1cmZhY2UsIDApOwpAQCAtNjY0LDYxICs2MjMsNjQgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHRHTENWQU5HTEU6OmNvcHlQaXhlbEJ1ZmZlclRvVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVm
IGltYWdlLAogICAgIGF1dG8gdXZQbGFuZVdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGhPZlBsYW5l
KHN1cmZhY2UsIDEpOwogICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdo
dE9mUGxhbmUoc3VyZmFjZSwgMSk7CiAKLSAgICBHQ0dMZW51bSB2aWRlb1RleHR1cmVUYXJnZXQg
PSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsK
LQotICAgIGF1dG8gdXZUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAg
bV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMSk7Ci0g
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7
Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVB
Uik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJ
TkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwg
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHRHTDo6Q0xB
TVBfVE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRh
cmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHRH
TDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgYXV0byB1dkhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRv
VGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRywgdXZQbGFu
ZVdpZHRoLCB1dlBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwg
c3VyZmFjZSwgMSk7Ci0gICAgaWYgKCF1dkhhbmRsZSkgewotICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZVRleHR1cmUodXZUZXh0dXJlKTsKKyAgICBHTGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdpbmdCdWZmZXJUZXh0dXJlVGFyZ2V0KCk7CisK
KyAgICBHTHVpbnQgdXZUZXh0dXJlID0gMDsKKyAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJnV2VGV4
dHVyZSk7CisgICAgYXV0byB1dlRleHR1cmVDbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbdXZUZXh0
dXJlXSB7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKKyAgICB9
KTsKKyAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMSk7CisgICAgZ2w6OkJpbmRUZXh0
dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgdXZUZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVy
aSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
KyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVU
YXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4
UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKKyAgICBhdXRvIHV2SGFuZGxlID0gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFu
ZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXksIG1fY29uZmlnLCB2aWRlb1RleHR1cmVUYXJnZXQs
IEVHTF9JT1NVUkZBQ0VfUkVBRF9ISU5UX0FOR0xFLCBHTF9SRywgdXZQbGFuZVdpZHRoLCB1dlBs
YW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAxKTsKKyAgICBpZiAoIXV2SGFu
ZGxlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGF1dG8gdXZIYW5kbGVDbGVh
bnVwID0gbWFrZVNjb3BlRXhpdChbZGlzcGxheSA9IG1fZGlzcGxheSwgdXZIYW5kbGVdIHsKKyAg
ICAgICAgV2ViQ29yZTo6ZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwg
dXZIYW5kbGUpOworICAgIH0pOwogCi0gICAgYXV0byB5VGV4dHVyZSA9IG1fY29udGV4dC0+Y3Jl
YXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRTApOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodmlkZW9UZXh0dXJl
VGFyZ2V0LCB5VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0R0w6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVv
VGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0R0w6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZp
ZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TLCBHcmFw
aGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgYXV0byB5SGFuZGxlID0g
YXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250
ZXh0R0w6OlJFRCwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOwotICAgIGlmICgheUhhbmRsZSkgewotICAgICAg
ICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUoeVRleHR1cmUpOwotICAgICAgICBtX2NvbnRleHQt
PmRlbGV0ZVRleHR1cmUodXZUZXh0dXJlKTsKKyAgICBHTHVpbnQgeVRleHR1cmUgPSAwOworICAg
IGdsOjpHZW5UZXh0dXJlcygxLCAmeVRleHR1cmUpOworICAgIGF1dG8geVRleHR1cmVDbGVhbnVw
ID0gbWFrZVNjb3BlRXhpdChbeVRleHR1cmVdIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVz
KDEsICZ5VGV4dHVyZSk7CisgICAgfSk7CisgICAgZ2w6OkFjdGl2ZVRleHR1cmUoR0xfVEVYVFVS
RTApOworICAgIGdsOjpCaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHlUZXh0dXJlKTsK
KyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVU
YXJnZXQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFy
YW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh2aWRlb1RleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBhdXRvIHlIYW5kbGUgPSBXZWJD
b3JlOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcs
IHZpZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JF
RCwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR0xfVU5TSUdORURfQllURSwgc3VyZmFjZSwg
MCk7CisgICAgaWYgKCF5SGFuZGxlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IGF1dG8geUhhbmRsZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5
LCB5SGFuZGxlXSB7CisgICAgICAgIGRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKGRp
c3BsYXksIHlIYW5kbGUpOworICAgIH0pOwogCiAgICAgLy8gQ29uZmlndXJlIHRoZSBkcmF3aW5n
IHBhcmFtZXRlcnMuCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV95VGV4dHVyZVVuaWZvcm1M
b2NhdGlvbiwgMCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV91dlRleHR1cmVVbmlmb3Jt
TG9jYXRpb24sIDEpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1feXV2RmxpcFlVbmlmb3Jt
TG9jYXRpb24sIGZsaXBZID09IEZsaXBZOjpZZXMgPyAxIDogMCk7Ci0gICAgbV9jb250ZXh0LT51
bmlmb3JtMmYobV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxh
bmVIZWlnaHQpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fdXZUZXh0dXJlU2l6ZVVuaWZv
cm1Mb2NhdGlvbiwgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0KTsKKyAgICBnbDo6VW5pZm9y
bTFpKG1feVRleHR1cmVVbmlmb3JtTG9jYXRpb24sIDApOworICAgIGdsOjpVbmlmb3JtMWkobV91
dlRleHR1cmVVbmlmb3JtTG9jYXRpb24sIDEpOworICAgIGdsOjpVbmlmb3JtMWkobV95dXZGbGlw
WVVuaWZvcm1Mb2NhdGlvbiwgZmxpcFkgPT0gRmxpcFk6OlllcyA/IDEgOiAwKTsKKyAgICBnbDo6
VW5pZm9ybTJmKG1feVRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB5UGxhbmVXaWR0aCwgeVBs
YW5lSGVpZ2h0KTsKKyAgICBnbDo6VW5pZm9ybTJmKG1fdXZUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiwgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0KTsKIAogICAgIGF1dG8gcmFuZ2UgPSBw
aXhlbFJhbmdlRnJvbVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KTsKICAgICBhdXRvIHRyYW5zZmVy
RnVuY3Rpb24gPSB0cmFuc2ZlckZ1bmN0aW9uRnJvbVN0cmluZyhkeW5hbWljX2NmX2Nhc3Q8Q0ZT
dHJpbmdSZWY+KENWQnVmZmVyR2V0QXR0YWNobWVudChpbWFnZSwga0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeEtleSwgbmlsKSkpOwogICAgIGF1dG8gY29sb3JNYXRyaXggPSBZQ2JDclRvUkdCTWF0
cml4Rm9yUmFuZ2VBbmRUcmFuc2ZlckZ1bmN0aW9uKHJhbmdlLCB0cmFuc2ZlckZ1bmN0aW9uKTsK
LSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2Nh
dGlvbiwgR0xfRkFMU0UsIGNvbG9yTWF0cml4KTsKKyAgICBnbDo6VW5pZm9ybU1hdHJpeDRmdiht
X2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9uLCAxLCBHTF9GQUxTRSwgY29sb3JNYXRyaXgpOwog
CiAgICAgLy8gRG8gdGhlIGFjdHVhbCBkcmF3aW5nLgotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5
cyhHcmFwaGljc0NvbnRleHRHTDo6VFJJQU5HTEVTLCAwLCA2KTsKLQotICAgIC8vIENsZWFuLXVw
LgotICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh5VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0
LT5kZWxldGVUZXh0dXJlKHV2VGV4dHVyZSk7Ci0gICAgZGV0YWNoSU9TdXJmYWNlRnJvbVRleHR1
cmUoeUhhbmRsZSk7Ci0gICAgZGV0YWNoSU9TdXJmYWNlRnJvbVRleHR1cmUodXZIYW5kbGUpOwor
ICAgIGdsOjpEcmF3QXJyYXlzKEdMX1RSSUFOR0xFUywgMCwgNik7CiAKICAgICBtX2xhc3RTdXJm
YWNlID0gc3VyZmFjZTsKICAgICBtX2xhc3RTdXJmYWNlU2VlZCA9IG5ld1N1cmZhY2VTZWVkOwot
ICAgIG1fbGFzdFRleHR1cmVTZWVkLnNldChvdXRwdXRUZXh0dXJlLCBtX2NvbnRleHQtPnRleHR1
cmVTZWVkKG91dHB1dFRleHR1cmUpKTsKKyAgICBtX2xhc3RUZXh0dXJlU2VlZC5zZXQob3V0cHV0
VGV4dHVyZSwgbV9vd25lci50ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSk7CiAgICAgbV9sYXN0
RmxpcFkgPSBmbGlwWTsKLSAgICBhdXRvQ2xlYXJUZXh0dXJlT25FcnJvci5yZXNldCgpOworICAg
IGF1dG9DbGVhclRleHR1cmVPbkVycm9yLnJlbGVhc2UoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhp
Y3NDb250ZXh0R0xDVkFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaAppbmRleCA1YmNhMmFhYmQxNWU1NzA5NWI5ZjRh
NzVjNDZkN2U3MGZhZTY2ZWE4Li41NjBlZTgwYmE0NDdjOTA1YWQ0M2M1NzE0YWI3OGUwOTdkZDlk
ZWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFw
aGljc0NvbnRleHRHTENWQU5HTEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaApAQCAtMjcsMzkgKzI3LDM5IEBACiAK
ICNpZiBFTkFCTEUoV0VCR0wpICYmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikK
IAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xDVi5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTENWLmgiCiAKLSNpbXBv
cnQgPHd0Zi9VbnNhZmVQb2ludGVyLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0
Zi9VbnNhZmVQb2ludGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOwogCiAvLyBHcmFwaGljc0NvbnRleHRHTENWIGltcGxlbWVudGF0aW9u
IGZvciBBTkdMRSBmbGF2b3VyIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorLy8gVGhpcyBj
bGFzcyBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCBmb3IgQU5HTEUgQ29jb2EuCiBjbGFzcyBHcmFwaGljc0NvbnRleHRHTENW
QU5HTEUgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xDViB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHRHTENWQU5HTEU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwor
CiAgICAgfkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSgpIGZpbmFsOwogCiAgICAgYm9vbCBjb3B5
UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiwgUGxhdGZvcm1HTE9iamVjdCBv
dXRwdXRUZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBGbGlwWSkgZmluYWw7CiAKIHByaXZhdGU6Ci0g
ICAgYm9vbCBpbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpOworICAgIEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwogCiAgICAgdW5zaWduZWQgbGFz
dFRleHR1cmVTZWVkKEdDR0x1aW50IHRleHR1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gbV9s
YXN0VGV4dHVyZVNlZWQuZ2V0KHRleHR1cmUpOwogICAgIH0KIAotICAgIC8vIFJldHVybnMgYSBo
YW5kbGUgd2hpY2gsIGlmIG5vbi1udWxsLCBtdXN0IGJlIHJlbGVhc2VkIHZpYSB0aGUKLSAgICAv
LyBkZXRhY2ggY2FsbCBiZWxvdy4KLSAgICB2b2lkKiBhdHRhY2hJT1N1cmZhY2VUb1RleHR1cmUo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYsIEdDR0x1aW50
IHBsYW5lKTsKLSAgICB2b2lkIGRldGFjaElPU3VyZmFjZUZyb21UZXh0dXJlKHZvaWQqIGhhbmRs
ZSk7Ci0KLSAgICBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1fY29udGV4dDsKKyAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYgbV9vd25lcjsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMRGlzcGxheSBtX2Rpc3BsYXkgeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCBtX2NvbnRleHQgeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTENvbmZpZyBtX2NvbmZpZyB7IG51bGxwdHIgfTsKIAogICAgIFBsYXRmb3JtR0xPYmpl
Y3QgbV9mcmFtZWJ1ZmZlciB7IDAgfTsKLSAgICBQbGF0Zm9ybUdMT2JqZWN0IG1feXV2UHJvZ3Jh
bSB7IDAgfTsKICAgICBQbGF0Zm9ybUdMT2JqZWN0IG1feXV2VmVydGV4QnVmZmVyIHsgMCB9Owog
ICAgIEdDR0xpbnQgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CiAgICAgR0NHTGlu
dCBtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiB7IC0xIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oCmluZGV4IGZlNTlkZWIwOWQ4OGNlN2FkNThhZDUyMDkwYzRlNTYwNGEzN2Iy
MmUuLjc5OGM5Y2IwNzAxOTQ3YzkxYmRlMGZlNGVmZWM0NjY0N2FjYThiYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC02OSw2ICs2OSw3IEBAIE9CSkNfQ0xBU1MgQ0FM
YXllcjsKIE9CSkNfQ0xBU1MgV2ViR0xMYXllcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluOworY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0xDVkFOR0xFOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMDQsNyAr
MTA1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCk7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBzdGF0aWMgUmVmPEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMPiBjcmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIHNoYXJlZENvbnRl
eHQpOwogICAgIHN0YXRpYyBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNyZWF0ZUZvckdQ
VVByb2Nlc3MoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiwgR3JhcGhpY3NDb250
ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4qKTsKIAogICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdM
TGF5ZXIuZ2V0KCkpOyB9CkBAIC01NDIsMTUgKzU0MiwxNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyLCBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFjZVN3
YXBDaGFpbiogPSBudWxscHRyKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTElPU3Vy
ZmFjZVN3YXBDaGFpbiogPSBudWxscHRyKTsKICNlbHNlCi0gICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqKTsK
ICNlbmRpZgogCiAgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9p
bnRzIHRoYXQgZXZlbnR1YWxseSBjYWxsIE9wZW5HTC4KICAgICAvLyBDYWxsZWQgb25jZSBieSBh
bGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgb2YgRXh0ZW5zaW9uc0dMIHRoYXQgZXZlbnR1YWxs
eSBjYWxsIE9wZW5HTC4KICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIFdBUk5fVU5VU0VE
X1JFVFVSTjsKLSAgICB2b2lkIGNsZWFyQ3VycmVudENvbnRleHQoKTsKIAogICAgIC8vIFRha2Ug
aW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmli
dXRlcywKICAgICAvLyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRl
dGVybWluZSB3aGljaCBjb3VsZCBvcgpAQCAtNTc3LDYgKzU3Niw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCByZXNoYXBlRGlzcGxheUJ1ZmZlckJhY2tpbmcoKTsKICAgICBib29sIGFsbG9jYXRlQW5k
QmluZERpc3BsYXlCdWZmZXJCYWNraW5nKCk7CiAgICAgYm9vbCBiaW5kRGlzcGxheUJ1ZmZlckJh
Y2tpbmcoc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gYmFja2luZywgdm9pZCogcGJ1ZmZlcik7
CisgICAgc3RhdGljIGJvb2wgbWFrZUN1cnJlbnQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERp
c3BsYXksIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wpOworICAgIGZyaWVuZCBjbGFzcyBHcmFw
aGljc0NvbnRleHRHTENWQU5HTEU7CiAjZW5kaWYKICNpZiBVU0UoQU5HTEUpCiAgICAgLy8gUmV0
dXJucyBmYWxzZSBpZiBjb250ZXh0IHNob3VsZCBiZSBsb3N0IGR1ZSB0byB0aW1lb3V0LgpAQCAt
NzkzLDcgKzc5NCw3IEBAIHByaXZhdGU6CiAgICAgU2NvcGVkSGlnaFBlcmZvcm1hbmNlR1BVUmVx
dWVzdCBtX2hpZ2hQZXJmb3JtYW5jZUdQVVJlcXVlc3Q7CiAjZW5kaWYKICNpZiBFTkFCTEUoVklE
RU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dEdMQ1Y+IG1fY3Y7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRT4gbV9jdjsKICNlbmRpZgogI2lmIFVTRShBTkdMRSkKICAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBtYXhQZW5kaW5nRnJhbWVzID0gMzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggZTUwMzBkY2MzZmZjYTNjOGRjOTkzNGEyNmRm
ZjI1ZmRlNzJmOTY4MC4uOGQzZDY1YzE3ZjlkMzRlMTU2YjUwYTE4ZTg0NTU4Y2ExMWE1MmJjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAg
LTEwNCwxMCArMTA0LDkgQEAgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlRm9yR1BVUHJvY2Vzcyhjb25zdAogfQogCiAjaWYgVVNFKEFO
R0xFKQotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRH
TChhdHRyaWJ1dGVzLCBzaGFyZWRDb250ZXh0KQorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1
dGVzLCBIb3N0V2luZG93KikKKyAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMpCiB7
Ci0gICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7CiAjaWYg
RU5BQkxFKFdFQkdMMikKICAgICBtX2lzRm9yV2ViR0wyID0gYXR0cmlidXRlcy53ZWJHTFZlcnNp
b24gPT0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsKICNlbmRpZgpAQCAt
MTc0LDEwICsxNzMsOSBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogICAgIGdsOjpDbGVhckNv
bG9yKDAsIDAsIDAsIDApOwogfQogI2Vsc2UKLUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRl
cywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0KQot
ICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcywgc2hhcmVkQ29udGV4dCkKK0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyopCisgICAgOiBHcmFwaGljc0Nv
bnRleHRHTChhdHRyaWJ1dGVzKQogewotICAgIEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwg
IXNoYXJlZENvbnRleHQpOwogI2lmIFVTRShOSUNPU0lBKQogICAgIG1fbmljb3NpYUxheWVyID0g
bWFrZVVuaXF1ZTxOaWNvc2lhOjpHQ0dMTGF5ZXI+KCp0aGlzKTsKICNlbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439747</attachid>
            <date>2021-09-30 10:01:05 -0700</date>
            <delta_ts>2021-10-01 05:53:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231010-20210930200103.patch</filename>
            <type>text/plain</type>
            <size>59945</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdiZWEzYzRiOGExNDc2
M2FhNDJiN2Y3Njk3OGFmNmM2NmExNmEyOS4uNGNjMDcxMGEwZWI2Yzg4MTEzM2MwNjFkZTE1NjI4
OGFiZWE2Y2Q5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0wOS0zMCAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIENvY29hIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMIHNob3VsZCBub3QgYmUgdXNlZCBieSBHcmFwaGljc0NvbnRleHRH
TENWQU5HTEUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMTAxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGNyZWF0ZXMgYSBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEUgaGVscGVyIHRvIGRvCisgICAgICAgIGRvIFlVViB0ZXh0dXJlIHVwbG9hZHMuIFRoaXMgR3Jh
cGhpY3NDb250ZXh0R0xDVkFOR0xFIGNyZWF0ZXMgYSBPcGVuR0wgRVMgY29udGV4dCB0aGF0Cisg
ICAgICAgIHNoYXJlcyB0aGUgT3BlbkdMIHN0YXRlIGJ5IHRoZSBjYWxsZXIuCisKKyAgICAgICAg
UHJldmlvdXNseSB0aGUgbmV3IGNvbnRleHQgd291bGQgYmUgYSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC4gVGhpcyB3b3VsZCBiZSBhIHByb2JsZW0KKyAgICAgICAgc2luY2UgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgaGFzIGNvbXBvc2l0b3IgcmVsYXRlZCBsb2dpYyBhbmQgb2JqZWN0cywgZm9y
IGV4YW1wbGUKKyAgICAgICAgdGhlIFdlYkdMIGxheWVyIGFzIHdlbGwgYXMgcmVzb3VyY2VzIGZv
ciBkZWZhdWx0IGZyYW1lYnVmZmVyIG9wZXJhdGlvbi4gU2hhcmVkIGNvbnRleHQKKyAgICAgICAg
d291bGQgYWxzbyBnbyB0byB0aGUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIGNvbnRl
eHQgbGlzdCBldmVuIHRob3VnaAorICAgICAgICB0aGV5IGNvdWxkIG5vdCBiZSBkZWxldGVkIGJl
aGluZCB0aGUgb3duZXJzIGJhY2sgZHVyaW5nIGNvbnRleHQgcmVjeWNsaW5nLgorCisgICAgICAg
IEluc3RlYWQsIGNyZWF0ZSBqdXN0IGEgbm9ybWFsIEFOR0xFIGNvbnRleHQgYW5kIGNhbGwgQU5H
TEUgZGlyZWN0bHkgZnJvbQorICAgICAgICBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuIFRoaXMg
aXMgbW9yZSBjb25zaXN0ZW50IHdpdGggc29mdHdhcmUgbGF5ZXJzOgorICAgICAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCBhbmQgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFIGFyZSBhdCB0aGUg
c2FtZSBzb2Z0d2FyZQorICAgICAgICBsZXZlbCwgcGFydCBvZiB0aGUgc2FtZSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBNYWtlcyBpdCBwb3NzaWJs
ZSB0byByZW1vdmUgb3RoZXJ3aXNlIHVudXNlZCBhbmQgdW5maXR0aW5nICJzaGFyZWQgY29udGV4
dCIKKyAgICAgICAgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGZyb20gV2ViR0wgbGV2ZWwgZnJvbSBH
cmFwaGljc0NvbnRleHRHTC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yLgorCisg
ICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0w6OkdyYXBoaWNz
Q29udGV4dEdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRH
TC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFz
Q1YpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xFVXRp
bGl0aWVzQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveVBidWZmZXJBbmRE
ZXRhY2hJT1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xF
VXRpbGl0aWVzQ29jb2EuaDogQWRkZWQuCisgICAgICAgIE1vdmUgdGhlIGNyZWF0ZVBidWZmZXJB
bmRBdHRhY2hJT1N1cmZhY2UgdG8gQ29jb2Egc3BlY2lmaWMKKyAgICAgICAgQU5HTEUgdXRpbGl0
eSBmaWxlLgorICAgICAgICBTZWUgYWxzbyBidWcgMjI2NTA0IC0gQWRvcHQgY3JlYXRlUGJ1ZmZl
ckFuZEF0dGFjaElPU3VyZmFjZS9kZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZQorICAg
ICAgICBpbiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuY3BwIGFuZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTENvY29hLm1tCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlRm9yR1BVUHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5H
TCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVT
dGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VD
dXJyZW50KToKKyAgICAgICAgQWRkIGEgbmV3IGZ1bmN0aW9uIHRvIG1ha2UgdGhlIEVHTCBjb250
ZXh0IGN1cnJlbnQgYW5kIG1haW50YWluCisgICAgICAgIHRoZSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3VycmVudENvbnRleHQgY2FjaGUgdmFsdWUgY29ycmVjdGx5LgorICAgICAgICBDYWNo
ZSBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBhbHdheXMgd2hlbiBFR0wgY29udGV4dCBjaGFuZ2Vz
LgorICAgICAgICBUaGUgY2FjaGUgdmFsdWUgaXMgcmVzZXQgYWx3YXlzLCBhbmQgdGhlbiBzZXQg
b25seSB3aGVuIG5lZWRlZAorICAgICAgICBkdXJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1ha2VDb250ZXh0Q3VycmVudCgpLgorCisgICAgICAgIE1ha2UgR3JhcGhpY3NDb250ZXh0R0xD
VkFOR0xFIGZyaWVuZCBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCwgc2luY2UKKyAgICAgICAg
ZXNzZW50aWFsbHkgdGhlIGZvcm1lciBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBs
YXR0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVQYnVmZmVyQW5kQXR0YWNoSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZSk6CisgICAg
ICAgIE1vdmUgdGhlIGltcGxlbWVudGF0aW9uIHRvIGEgQU5HTEUgcmVsYXRlZCBoZWxwZXIgZmls
ZXMgYWJvdmUuCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjph
c0NWKToKKyAgICAgICAgTW92ZSB0aGUgYXNDViB0byB0aGUgaW1wbGVtZW50YXRvbiBmaWxlIGZv
ciBDb2NvY2EsIGFzIHRoYXQgaXMKKyAgICAgICAgdGhlIHBsYXRmb3JtIHdoaWNoIHVzZXMgdGhl
IGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2hhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckN1cnJlbnRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAg
UmVwbGFjZSB3aXRoIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudCgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OllDYkNyTWF0cml4OjpvcGVyYXRvciBjb25zdCBHTGZsb2F0
KiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRU
cmFuc2ZlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdM
RTo6fkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTENWQU5HTEU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSk6CisgICAgICAgIFJl
b3JkZXIgdGhlIHJlc291cmNlIGluaXRpYWxpemF0aW9uIHdpdGggU2NvcGVFeGl0IGNsZWFudXAg
ZnVuY3Rpb25zLgorICAgICAgICBBdm9pZCBzdG9yaW5nIHRoZSB5dXZQcm9ncmFtLCBpbnN0ZWFk
IGp1c3QgdXNlIHRoZSBwcm9ncmFtIGFzIHByb2dyYW0KKyAgICAgICAgYmluYXJ5IGFuZCBkZWxl
dGUgdGhlIHByb2dyYW0uCisKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OllDYkNy
TWF0cml4OjpvcGVyYXRvciBHQ0dMU3Bhbjxjb25zdCBHTGZsb2F0LCAxNj4gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjppbml0aWFs
aXplVVZDb250ZXh0T2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgdGhlIHJlc291cmNl
IGluaXRpYWxpemF0aW9uIGludG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgb2JqZWN0CisgICAgICAg
IGl0c2VsZiBpcyBhbHJlYWR5IGluaXRpYWxpemVkIG9ubHkgb24gZGVtYW5kLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjphdHRhY2hJT1N1cmZhY2VUb1RleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
OjpkZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIFNoYXJlIHRo
ZSBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBmcm9tCisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQYnVmZmVyQW5k
QXR0YWNoSU9TdXJmYWNlIHRoYXQKKyAgICAgICAgd2FzIG1vdmVkIHRvIFdlYkNvcmU6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaDoKKyAgICAgICAgUmVtb3ZlIHRoZSBtX3l1
dlByb2dyYW0sIHJhdGhlciB1c2UganVzdCB0aGUgcHJvZ3JhbSBiaW5hcnkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgIFJlbW92ZSB0aGUgcmVkdW5kYW50IHNo
YXJlZENvbnRleHQgcGFyYW1ldGVyLgorCiAyMDIxLTA5LTMwICBFbnJpcXVlIE9jYcOxYSBHb256
w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW01TRV1bR1N0cmVhbWVyXSBB
bGxvdyBpbmZpbml0ZSBkdXJhdGlvbiBvbiBNU0UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4
IDNhMWI5MDI4NTFkMmMxNGFkYjkzZThmNmNlNDc3ODY1MGZmZDhmZTYuLmYzMGZkYWJhMDRjMjYw
NjdmMTY0OGYyNzQyNzJkNWUyYWUxZDNkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAt
MzU5LDYgKzM1OSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
VVRJUmVnaXN0cnkuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BTkdMRVV0aWxpdGllc0Nv
Y29hLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQXVkaW9UcmFja1ByaXZhdGVXZWJNLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ29sb3JDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRmxvYXRSZWN0Q29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwMmQ4NDE1YjQ2MGIyNzUwMTY1NGExNTc0
MjkxMmI1YzRmZGIxMjVhLi5hZDlkMGQ0ZTA3YjZjMjNjNmFmZTYxNWYwNTBlM2UyYWU5ZWMxMjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMDY0NSw2ICsxMDY0NSw4IEBACiAJCTdCQjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAv
KiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QkI2ODBCNzI1QkExQkUzMDAyQjg3MzggLyogR3JhcGhpY3NDaGVja3NNYWMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDaGVja3NN
YWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkI2ODBCODI1QkExQkU0MDAy
Qjg3MzggLyogR3JhcGhpY3NDaGVja3NNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR3JhcGhpY3NDaGVja3NNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0JDRDQyREEyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29jb2EuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQU5HTEVVdGlsaXRpZXNDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdCQ0Q0MkRDMjcwNUM5NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0Nv
Y29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFOR0xFVXRpbGl0aWVzQ29jb2EuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0JFNzI2NUIyNTc2M0I4RDAwRTg1RDk4IC8qIFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUdyYXBo
aWNzQ29udGV4dEdMUHJveHlCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MwMTFGM0QyNEZBRDM2MDAwNUJFRjEwIC8qIFNldHRpbmdzLmNwcC5lcmIgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2V0dGlu
Z3MuY3BwLmVyYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMTFGM0UyNEZBRDM2
MDAwNUJFRjEwIC8qIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwLmVyYiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJbnRl
cm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcC5lcmI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNzMyMiw2ICsyNzMyNCw4IEBACiAJCUI1MzIwRDY4MTIyQTI0RTkwMDJEMTQ0MCAvKiBj
b2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0JD
RDQyREEyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29jb2EuY3BwICovLAorCQkJ
CTdCQ0Q0MkRDMjcwNUM5NDkwMEVCMjEyNyAvKiBBTkdMRVV0aWxpdGllc0NvY29hLmggKi8sCiAJ
CQkJQ0RGOTk1MDEyNEMyODE0OTAwMkVBMDYyIC8qIEF1ZGlvVHJhY2tQcml2YXRlV2ViTS5jcHAg
Ki8sCiAJCQkJQ0RGOTk1MDAyNEMyODE0OTAwMkVBMDYyIC8qIEF1ZGlvVHJhY2tQcml2YXRlV2Vi
TS5oICovLAogCQkJCUY0OEQyQUEzMjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggKi8s
CkBAIC0zMTM5Myw2ICszMTM5Nyw3IEBACiAJCQkJRTdFMDM1NzIyNEQ0RTE5NjAwOERGRUZCIC8q
IEFuYWx5c2VyT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjdFM0M4MDgyNTdGNUU2RTAw
Qzk4NkFCIC8qIEFOR0xFSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBNzk1QzcxODg4
QkNCMjAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3QkIzNEExNzI1MzQ1Q0IyMDAwMjlEMDggLyogQU5HTEVVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5RTkxMkFCMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRp
b25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjY0MCw3ICszMjY0NSw2IEBACiAJ
CQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTNERTg3MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCNDVBQjU1MjVGQkE5REUwMEZEMjdGNCAvKiBHcmFw
aGljc0NvbnRleHRHTEFOR0xFRUdMVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQk3QkIz
NEExNzI1MzQ1Q0IyMDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRVV0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzMzBBMDIxREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IxMDMzOUUyNTQ5NzIx
NzAwQzhDMUFDIC8qIEdyYXBoaWNzQ29udGV4dEdMQ1YuaCBpbiBIZWFkZXJzICovLAogCQkJCTdC
MTAzMzlGMjU0OTcyMUUwMEM4QzFBQyAvKiBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0wuY3BwCmluZGV4IDQ2YzI2YWViZmEwODY1MTIyM2VkZjliNWJjMjdh
ODYyOTZmOGRmZjguLjRmMGE5YjU5ZmI0NGJlYmZkMzgyNjc3MmQ5YjIwODdkOWVmYWM1ZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5jcHAKQEAgLTM1Nyw3ICszNTcsNyBAQCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0w+
IEdyYXBoaWNzQ29udGV4dEdMOjpjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRl
eHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMsIEdyYXBoaWNzQ29udGV4dEdM
KikKK0dyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0cnMpCiAgICAgOiBtX2F0dHJzKGF0dHJzKQogewogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5k
ZXggYTZlM2U0NGM4MTk5YzVjZGY3NGE5M2FjNmY2MTRmZDMwNjU4NTczMS4uZWRhYTRjZTVlYTcy
ZTczMGJjNTI1NDZjNzAwNmVkMjM3MjczOTYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oCkBAIC05MTQsNyArOTE0LDcg
QEAgcHVibGljOgogICAgIC8vIEhvc3RXaW5kb3cgbWlnaHQgYWZmZWN0IHRoZSBkZWNpc2lvbiB3
aGljaCBiYWNrZW5kIGlzIHRvIGJlIHVzZWQuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHRHTD4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyYsIEhvc3RXaW5kb3cqKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dEdMKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcywgR3JhcGhpY3NDb250ZXh0R0wqIHNoYXJlZENvbnRleHQgPSBu
dWxscHRyKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMpOwogICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEdMKCkgPSBkZWZhdWx0OwogCiAgICAg
dm9pZCBhZGRDbGllbnQoQ2xpZW50JiBjbGllbnQpIHsgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAppbmRleCBjMmNmYTVkYzJmNzc1YWU0
ODRhOTRmODlmNmU0ZGY3MWM5YmYxODk3Li4wMDZiOGEzZWU2MDE1MThiMWI2NTJhZTc3YzU0OTE5
ZTA2NDdkYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcApAQCAtMjg0Miwx
NSArMjg0Miw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om11bHRpRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUoR0NHTGVudW0gbW9kZSwgR0NHCiAgICAgZ2w6Ok11bHRpRHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnRzLmRhdGEsIHR5cGUsIHBvaW50ZXJzLmRh
dGEoKSwgaW5zdGFuY2VDb3VudHMuZGF0YSwgZHJhd2NvdW50KTsKIH0KIAotI2lmIEVOQUJMRShW
SURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLUdyYXBoaWNzQ29udGV4dEdMQ1YqIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjphc0NWKCkKLXsKLSAgICBpZiAoIW1fY3YpCi0gICAgICAgIG1fY3Yg
PSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRT4oKnRoaXMpOwotICAgIHJldHVy
biBtX2N2LmdldCgpOwotfQotI2VuZGlmCi0KIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OndhaXRBbmRVcGRhdGVPbGRlc3RGcmFtZSgpCiB7CiAgICAgc2l6ZV90IG9sZGVzdEZyYW1lQ29t
cGxldGlvbkZlbmNlID0gbV9vbGRlc3RGcmFtZUNvbXBsZXRpb25GZW5jZSsrICUgbWF4UGVuZGlu
Z0ZyYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0FOR0xFVXRpbGl0aWVzQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQU5HTEVVdGlsaXRpZXNDb2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk5M2I3NzY3
MTg5ZmU3ZWRmNmMyNjU5MjE1YWNlM2MyZWEwNjkzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xFVXRpbGl0aWVzQ29jb2EuY3Bw
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQU5HTEVVdGlsaXRpZXNDb2Nv
YS5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQqIGNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2Uo
RUdMRGlzcGxheSBkaXNwbGF5LCBFR0xDb25maWcgY29uZmlnLCBHTGVudW0gdGFyZ2V0LCBFR0xp
bnQgdXNhZ2VIaW50LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIEdMdWludCBwbGFu
ZSkKK3sKKyAgICBhdXRvIGVnbFRleHR1cmVUYXJnZXQgPSB0YXJnZXQgPT0gR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQU5HTEUgPyBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUgOiBFR0xfVEVYVFVS
RV8yRDsKKworICAgIGNvbnN0IEVHTGludCBzdXJmYWNlQXR0cmlidXRlc1tdID0geworICAgICAg
ICBFR0xfV0lEVEgsIHdpZHRoLAorICAgICAgICBFR0xfSEVJR0hULCBoZWlnaHQsCisgICAgICAg
IEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUsIHN0YXRpY19jYXN0PEVHTGludD4ocGxhbmUpLAor
ICAgICAgICBFR0xfVEVYVFVSRV9UQVJHRVQsIHN0YXRpY19jYXN0PEVHTGludD4oZWdsVGV4dHVy
ZVRhcmdldCksCisgICAgICAgIEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSwgc3Rh
dGljX2Nhc3Q8RUdMaW50PihpbnRlcm5hbEZvcm1hdCksCisgICAgICAgIEVHTF9URVhUVVJFX0ZP
Uk1BVCwgRUdMX1RFWFRVUkVfUkdCQSwKKyAgICAgICAgRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSwg
c3RhdGljX2Nhc3Q8RUdMaW50Pih0eXBlKSwKKyAgICAgICAgLy8gT25seSBoYXMgYW4gZWZmZWN0
IG9uIHRoZSBpT1MgU2ltdWxhdG9yLgorICAgICAgICBFR0xfSU9TVVJGQUNFX1VTQUdFX0hJTlRf
QU5HTEUsIHVzYWdlSGludCwKKyAgICAgICAgRUdMX05PTkUsIEVHTF9OT05FCisgICAgfTsKKwor
ICAgIEVHTFN1cmZhY2UgcGJ1ZmZlciA9IEVHTF9DcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZl
cihkaXNwbGF5LCBFR0xfSU9TVVJGQUNFX0FOR0xFLCBzdXJmYWNlLCBjb25maWcsIHN1cmZhY2VB
dHRyaWJ1dGVzKTsKKyAgICBpZiAoIXBidWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgaWYgKCFFR0xfQmluZFRleEltYWdlKGRpc3BsYXksIHBidWZmZXIsIEVHTF9CQUNLX0JV
RkZFUikpIHsKKyAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKGRpc3BsYXksIHBidWZmZXIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gcGJ1ZmZlcjsKK30K
Kwordm9pZCBkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShFR0xEaXNwbGF5IGRpc3Bs
YXksIHZvaWQqIGhhbmRsZSkKK3sKKyAgICBFR0xfUmVsZWFzZVRleEltYWdlKGRpc3BsYXksIGhh
bmRsZSwgRUdMX0JBQ0tfQlVGRkVSKTsKKyAgICBFR0xfRGVzdHJveVN1cmZhY2UoZGlzcGxheSwg
aGFuZGxlKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xFVXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0FOR0xFVXRpbGl0aWVzQ29jb2EuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45M2JhNGUwZGM5MTMyZTg1ODc3NWY5YzI1YmFkNjc0OGM3Yzg2OWI4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQU5HTEVVdGls
aXRpZXNDb2NvYS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHTCkKKwor
I2luY2x1ZGUgIkFOR0xFSGVhZGVycy5oIgorCit0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAq
SU9TdXJmYWNlUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFJldHVybnMgYSBoYW5k
bGUgd2hpY2gsIGlmIG5vbi1udWxsLCBtdXN0IGJlIHJlbGVhc2VkIHdpdGggZGVzdHJveVBidWZm
ZXJBbmREZXRhY2hJT1N1cmZhY2UoKS4KK3ZvaWQqIGNyZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1
cmZhY2UoRUdMRGlzcGxheSwgRUdMQ29uZmlnLCBHTGVudW0gdGFyZ2V0LCBFR0xpbnQgdXNhZ2VI
aW50LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gdHlwZSwgSU9TdXJmYWNlUmVmLCBHTHVpbnQgcGxhbmUpOworCit2b2lkIGRlc3Ry
b3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKEVHTERpc3BsYXksIHZvaWQqIGhhbmRsZSk7CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQpp
bmRleCBmNzRhZDJlNTQ5ZGIyZjgzMmM1MDNhYjQ1YjIwZWRhMDlhOTM0ZDc3Li5mOTBmZjFmNmFk
M2JjMTU4MGRhYmNlMjc0ZDUwN2JkMDliMzJhZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR0wp
CiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogCisjaW1wb3J0ICJBTkdMRVV0
aWxpdGllc0NvY29hLmgiCiAjaW1wb3J0ICJDVlV0aWxpdGllcy5oIgogI2ltcG9ydCAiRXh0ZW5z
aW9uc0dMQU5HTEUuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMQU5HTEVVdGlsaXRpZXMu
aCIKQEAgLTQ4LDcgKzQ5LDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTENWQU5HTEUuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKQEAgLTE5Nyw3ICsxOTgsNyBAQCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0RwogICAg
IGlmIChHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5oYXNU
b29NYW55Q29udGV4dHMoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woYXR0cnMsIGhvc3RXaW5kb3csIG51bGxwdHIsIG51bGxwdHIpKTsKKyAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woYXR0cnMsIGhvc3RXaW5kb3csIG51bGxwdHIpKTsKIAog
ICAgIGlmICghY29udGV4dC0+bV9jb250ZXh0T2JqKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTIwNywyMyArMjA4LDEzIEBAIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHCiAgICAgcmV0dXJu
IGNvbnRleHQ7CiB9CiAKLVJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYXJlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgc2hhcmVk
Q29udGV4dCkKLXsKLQotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKCpuZXcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woc2hhcmVkQ29udGV4dC5jb250ZXh0QXR0cmlidXRlcygpLCBudWxscHRy
LCAmc2hhcmVkQ29udGV4dCwgbnVsbHB0cikpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuYWRkQ29udGV4dChjb250ZXh0LnB0cigpKTsKLQot
ICAgIHJldHVybiBjb250ZXh0OwotfQotCiBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGb3JHUFVQcm9jZXNzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMsIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dh
cENoYWluKiBzd2FwQ2hhaW4pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woYXR0cnMsIG51bGxwdHIsIG51bGxwdHIsIHN3YXBDaGFpbikpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJzLCBudWxs
cHRyLCBzd2FwQ2hhaW4pKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRycywgSG9zdFdp
bmRvdyosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0LCBHcmFwaGljc0Nv
bnRleHRHTElPU3VyZmFjZVN3YXBDaGFpbiogc3dhcENoYWluKQotICAgIDogR3JhcGhpY3NDb250
ZXh0R0woYXR0cnMsIHNoYXJlZENvbnRleHQpCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW4qIHN3YXBDaGFp
bikKKyAgICA6IEdyYXBoaWNzQ29udGV4dEdMKGF0dHJzKQogewogICAgIG1faXNGb3JXZWJHTDIg
PSBhdHRycy53ZWJHTFZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246Oldl
YkdMMjsKICAgICBpZiAoYXR0cnMudXNlTWV0YWwgJiYgIXBsYXRmb3JtU3VwcG9ydHNNZXRhbCht
X2lzRm9yV2ViR0wyKSkgewpAQCAtMjkyLDIwICsyODMsMTIgQEAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyBhdHQKICAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX09Q
RU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9BTkdMRSk7CiAgICAgICAgIGVnbENvbnRleHRBdHRy
aWJ1dGVzLmFwcGVuZChFR0xfRkFMU0UpOwogICAgIH0KLSAgICBpZiAoIXNoYXJlZENvbnRleHQp
IHsKLSAgICAgICAgLy8gVGhlIHNoYXJlZCBjb250ZXh0IGlzIG9ubHkgbm9uLW51bGwgd2hlbiBj
cmVhdGluZyBhIGNvbnRleHQKLSAgICAgICAgLy8gb24gYmVoYWxmIG9mIHRoZSBWaWRlb1RleHR1
cmVDb3BpZXIuIFdlYkdMLXNwZWNpZmljIHJlbmRlcmluZwotICAgICAgICAvLyBmZWVkYmFjayBs
b29wIHZhbGlkYXRpb24gZG9lcyBub3Qgd29yayBpbiBtdWx0aS1jb250ZXh0Ci0gICAgICAgIC8v
IHNjZW5hcmlvcywgYW5kIG11c3QgYmUgZGlzYWJsZWQgZm9yIHRoZSBWaWRlb1RleHR1cmVDb3Bp
ZXIncwotICAgICAgICAvLyBjb250ZXh0LgotICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5h
cHBlbmQoRUdMX0NPTlRFWFRfV0VCR0xfQ09NUEFUSUJJTElUWV9BTkdMRSk7Ci0gICAgICAgIGVn
bENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0gICAgICAgIC8vIFdlYkdMIHJl
cXVpcmVzIHRoYXQgYWxsIHJlc291cmNlcyBhcmUgY2xlYXJlZCBhdCBjcmVhdGlvbi4KLSAgICAg
ICAgLy8gRklYTUU6IHBlcmZvcm1pbmcgcm9idXN0IHJlc291cmNlIGluaXRpYWxpemF0aW9uIGlu
IHRoZSBWaWRlb1RleHR1cmVDb3BpZXIgYWRkcyBhIGxhcmdlIGFtb3VudCBvZiBvdmVyaGVhZAot
ICAgICAgICAvLyBzbyBpdCB3b3VsZCBiZSBuaWNlIHRvIGF2b2lkIHRoYXQgdGhlcmUgKHdlIHNo
b3VsZCBhbHdheXMgYmUgdG91Y2hpbmcgZXZlcnkgcGl4ZWwgYXMgd2UgY29weSkuCi0gICAgICAg
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJ
WkFUSU9OX0FOR0xFKTsKLSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9U
UlVFKTsKLSAgICB9CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhU
X1dFQkdMX0NPTVBBVElCSUxJVFlfQU5HTEUpOworICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFw
cGVuZChFR0xfVFJVRSk7CisKKyAgICAvLyBXZWJHTCByZXF1aXJlcyB0aGF0IGFsbCByZXNvdXJj
ZXMgYXJlIGNsZWFyZWQgYXQgY3JlYXRpb24uCisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBw
ZW5kKEVHTF9ST0JVU1RfUkVTT1VSQ0VfSU5JVElBTElaQVRJT05fQU5HTEUpOworICAgIGVnbENv
bnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7CiAKICAgICAvLyBXZWJHTCBkb2Vzbid0
IGFsbG93IGNsaWVudCBhcnJheXMuCiAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVH
TF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSk7CkBAIC0zMTYsMTUgKzI5OSwx
MyBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogCiAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9OT05FKTsKIAotICAgIG1fY29udGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0
KG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmosIHNoYXJlZENvbnRleHQgPyBzdGF0aWNfY2FzdDxF
R0xDb250ZXh0PihzaGFyZWRDb250ZXh0LT5tX2NvbnRleHRPYmopIDogRUdMX05PX0NPTlRFWFQs
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7Ci0gICAgaWYgKG1fY29udGV4dE9iaiA9PSBF
R0xfTk9fQ09OVEVYVCkgeworICAgIG1fY29udGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0KG1f
ZGlzcGxheU9iaiwgbV9jb25maWdPYmosIEVHTF9OT19DT05URVhULCBlZ2xDb250ZXh0QXR0cmli
dXRlcy5kYXRhKCkpOworICAgIGlmIChtX2NvbnRleHRPYmogPT0gRUdMX05PX0NPTlRFWFQgfHwg
IW1ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgbV9jb250ZXh0T2JqKSkgewogICAgICAgICBMT0co
V2ViR0wsICJFR0xDb250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOwogCi0gICAgRUdM
X01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNF
LCBtX2NvbnRleHRPYmopOwotCiAgICAgaWYgKG1faXNGb3JXZWJHTDIpCiAgICAgICAgIGdsOjpF
bmFibGUoR3JhcGhpY3NDb250ZXh0R0w6OlBSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYKTsK
IApAQCAtNDYzLDcgKzQ0NCw3IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woKQogICAgICAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxh
eU9iaiwgY29udGVudHNIYW5kbGUpOwogICAgIH0KICAgICBpZiAobV9jb250ZXh0T2JqKSB7Ci0g
ICAgICAgIGNsZWFyQ3VycmVudENvbnRleHQoKTsKKyAgICAgICAgbWFrZUN1cnJlbnQobV9kaXNw
bGF5T2JqLCBFR0xfTk9fQ09OVEVYVCk7CiAgICAgICAgIEVHTF9EZXN0cm95Q29udGV4dChtX2Rp
c3BsYXlPYmosIG1fY29udGV4dE9iaik7CiAgICAgfQogICAgIEFTU0VSVChjdXJyZW50Q29udGV4
dCAhPSB0aGlzKTsKQEAgLTUyNywxMyArNTA4LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDdXJyZW50Q29udGV4dCgpCi17Ci0gICAgRUdM
Qm9vbGVhbiByZXN1bHQgPSBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VS
RkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0KTsKLSAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7Ci19Ci0KICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVs
ZWFzZUN1cnJlbnRDb250ZXh0KFJlbGVhc2VCZWhhdmlvciByZWxlYXNlQmVoYXZpb3IpCiB7CkBA
IC01NzksNyArNTUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tHUFVT
dGF0dXMoKQogICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0
ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CiAgICAgICAgIG1fZmFpbE5leHRTdGF0
dXNDaGVjayA9IGZhbHNlOwogICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7Ci0gICAgICAgIGNs
ZWFyQ3VycmVudENvbnRleHQoKTsKKyAgICAgICAgbWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBF
R0xfTk9fQ09OVEVYVCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTY4MCwyNSArNjU0
LDIwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmREaXNwbGF5QnVmZmVyQmFj
a2luZyhzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJyZW50KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0xEaXNwbGF5IGRpc3BsYXksIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgY29udGV4
dCkKK3sKKyAgICBjdXJyZW50Q29udGV4dCA9IG51bGxwdHI7CisgICAgcmV0dXJuIEVHTF9NYWtl
Q3VycmVudChkaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIGNvbnRleHQp
OworfQorCiB2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUGJ1ZmZlckFuZEF0
dGFjaElPU3VyZmFjZShHQ0dMZW51bSB0YXJnZXQsIFBidWZmZXJBdHRhY2htZW50VXNhZ2UgdXNh
Z2UsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiBzdXJmYWNlLCBHQ0dMdWludCBwbGFu
ZSkKIHsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1JFQ1RB
TkdMRV9BUkIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKSB7Cisg
ICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRl
eHR1cmVUYXJnZXQoKSkgewogICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUgdGFy
Z2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIGF1dG8gZWdsVGV4dHVyZVRhcmdldCA9IFsmXSAoKSAtPiBFR0xp
bnQgewotICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1JF
Q1RBTkdMRV9BUkIpCi0gICAgICAgICAgICByZXR1cm4gRUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FO
R0xFOwotICAgICAgICByZXR1cm4gRUdMX1RFWFRVUkVfMkQ7Ci0gICAgfSgpOwotCi0gICAgaWYg
KGVnbFRleHR1cmVUYXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkVHTERyYXdpbmdC
dWZmZXJUZXh0dXJlVGFyZ2V0KCkpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiTWlzbWF0Y2ggaW4g
RUdMIHRleHR1cmUgdGFyZ2V0OiAlZCBzaG91bGQgYmUgJWQuIiwgc3RhdGljX2Nhc3Q8aW50Pih0
YXJnZXQpLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RUdMRHJhd2luZ0J1ZmZlclRleHR1cmVU
YXJnZXQoKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gdXNh
Z2VIaW50QW5nbGUgPSBbJl0gKCkgLT4gRUdMaW50IHsKKyAgICBhdXRvIHVzYWdlSGludCA9IFsm
XSAoKSAtPiBFR0xpbnQgewogICAgICAgICBpZiAodXNhZ2UgPT0gUGJ1ZmZlckF0dGFjaG1lbnRV
c2FnZTo6UmVhZCkKICAgICAgICAgICAgIHJldHVybiBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9B
TkdMRTsKICAgICAgICAgaWYgKHVzYWdlID09IFBidWZmZXJBdHRhY2htZW50VXNhZ2U6OldyaXRl
KQpAQCAtNzA2LDQwICs2NzUsMTIgQEAgdm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UoR0NHTGVudW0gdGFyZ2V0LAogICAgICAgICBy
ZXR1cm4gRUdMX0lPU1VSRkFDRV9SRUFEX0hJTlRfQU5HTEUgfCBFR0xfSU9TVVJGQUNFX1dSSVRF
X0hJTlRfQU5HTEU7CiAgICAgfSgpOwogCi0gICAgY29uc3QgRUdMaW50IHN1cmZhY2VBdHRyaWJ1
dGVzW10gPSB7Ci0gICAgICAgIEVHTF9XSURUSCwgd2lkdGgsCi0gICAgICAgIEVHTF9IRUlHSFQs
IGhlaWdodCwKLSAgICAgICAgRUdMX0lPU1VSRkFDRV9QTEFORV9BTkdMRSwgc3RhdGljX2Nhc3Q8
RUdMaW50PihwbGFuZSksCi0gICAgICAgIEVHTF9URVhUVVJFX1RBUkdFVCwgc3RhdGljX2Nhc3Q8
RUdMaW50PihlZ2xUZXh0dXJlVGFyZ2V0KSwKLSAgICAgICAgRUdMX1RFWFRVUkVfSU5URVJOQUxf
Rk9STUFUX0FOR0xFLCBzdGF0aWNfY2FzdDxFR0xpbnQ+KGludGVybmFsRm9ybWF0KSwKLSAgICAg
ICAgRUdMX1RFWFRVUkVfRk9STUFULCBFR0xfVEVYVFVSRV9SR0JBLAotICAgICAgICBFR0xfVEVY
VFVSRV9UWVBFX0FOR0xFLCBzdGF0aWNfY2FzdDxFR0xpbnQ+KHR5cGUpLAotICAgICAgICAvLyBP
bmx5IGhhcyBhbiBlZmZlY3Qgb24gdGhlIGlPUyBTaW11bGF0b3IuCi0gICAgICAgIEVHTF9JT1NV
UkZBQ0VfVVNBR0VfSElOVF9BTkdMRSwgdXNhZ2VIaW50QW5nbGUsCi0gICAgICAgIEVHTF9OT05F
LCBFR0xfTk9ORQotICAgIH07Ci0KLSAgICBhdXRvIGRpc3BsYXkgPSBwbGF0Zm9ybURpc3BsYXko
KTsKLSAgICBFR0xTdXJmYWNlIHBidWZmZXIgPSBFR0xfQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRC
dWZmZXIoZGlzcGxheSwgRUdMX0lPU1VSRkFDRV9BTkdMRSwgc3VyZmFjZSwgcGxhdGZvcm1Db25m
aWcoKSwgc3VyZmFjZUF0dHJpYnV0ZXMpOwotICAgIGlmICghcGJ1ZmZlcikgewotICAgICAgICBM
T0coV2ViR0wsICJFR0xfQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIgZmFpbGVkLiIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIUVHTF9CaW5kVGV4SW1h
Z2UoZGlzcGxheSwgcGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKSkgewotICAgICAgICBMT0coV2Vi
R0wsICJFR0xfQmluZFRleEltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAgRUdMX0Rlc3Ryb3lTdXJm
YWNlKGRpc3BsYXksIHBidWZmZXIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcGJ1ZmZlcjsKKyAgICByZXR1cm4gV2ViQ29yZTo6Y3JlYXRlUGJ1ZmZlckFu
ZEF0dGFjaElPU3VyZmFjZShtX2Rpc3BsYXlPYmosIG1fY29uZmlnT2JqLCB0YXJnZXQsIHVzYWdl
SGludCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUsIHN1cmZhY2UsIHBsYW5l
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVzdHJveVBidWZmZXJBbmRE
ZXRhY2hJT1N1cmZhY2Uodm9pZCogaGFuZGxlKQogewotICAgIGF1dG8gZGlzcGxheSA9IHBsYXRm
b3JtRGlzcGxheSgpOwotICAgIEVHTF9SZWxlYXNlVGV4SW1hZ2UoZGlzcGxheSwgaGFuZGxlLCBF
R0xfQkFDS19CVUZGRVIpOwotICAgIEVHTF9EZXN0cm95U3VyZmFjZShkaXNwbGF5LCBoYW5kbGUp
OworICAgIFdlYkNvcmU6OmRlc3Ryb3lQYnVmZmVyQW5kRGV0YWNoSU9TdXJmYWNlKG1fZGlzcGxh
eU9iaiwgaGFuZGxlKTsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZX1NJTVVMQVRPUikK
QEAgLTg0NSw2ICs3ODYsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFy
ZUZvckRpc3BsYXkoKQogICAgIH0KIH0KIAorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZG
T1VOREFUSU9OKQorR3JhcGhpY3NDb250ZXh0R0xDViogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFzQ1YoKQoreworICAgIGlmICghbV9jdikKKyAgICAgICAgbV9jdiA9IEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRTo6Y3JlYXRlKCp0aGlzKTsKKyAgICByZXR1cm4gbV9jdi5nZXQoKTsKK30KKyNl
bmRpZgorCiBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZENvbXBvc2l0ZWRSZXN1bHRzKCkKIHsKICAgICBhdXRvJiBkaXNwbGF5QnVmZmVyID0g
bV9zd2FwQ2hhaW4tPmRpc3BsYXlCdWZmZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRHTENWQU5HTEUu
Y3BwCmluZGV4IDc4MDFiZTQ5NjAxNGYzNDczZDQ0NTI1ZTQ0ODE1MjY0MjhhYTZkZDkuLjhlNzY1
MDcyMGE3NGJhNzU0M2ZkZGI5NzA0YjY0MDM2MjM0Y2Y1OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvR3JhcGhpY3NDb250ZXh0
R0xDVkFOR0xFLmNwcApAQCAtMjgsMTIgKzI4LDE0IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpICYm
IEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKIAotI2luY2x1ZGUgIkFOR0xFSGVh
ZGVycy5oIgorI2luY2x1ZGUgIkFOR0xFVXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRlICJGb3Vy
Q0MuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVWaWRlb1NQSS5oPgogI2luY2x1ZGUg
PHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KQEAgLTIzMCw5ICsyMzIsOSBAQCBzdHJ1Y3QgWUNiQ3JNYXRyaXggewogCiAg
ICAgY29uc3RleHByIFlDYkNyTWF0cml4KFBpeGVsUmFuZ2UsIEdMZmxvYXQgY2JDb2VmZmljaWVu
dCwgR0xmbG9hdCBjckNvZWZmaWNpZW50KTsKIAotICAgIG9wZXJhdG9yIEdDR0xTcGFuPGNvbnN0
IEdMZmxvYXQsIDE2PigpIGNvbnN0CisgICAgb3BlcmF0b3IgY29uc3QgR0xmbG9hdCooKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VHQ0dMU3BhbjwxNj4oJnJvd3NbMF1bMF0pOwor
ICAgICAgICByZXR1cm4gJnJvd3NbMF1bMF07CiAgICAgfQogCiAgICAgY29uc3RleHByIEdMZmxv
YXRDb2xvciBvcGVyYXRvciooY29uc3QgR0xmbG9hdENvbG9yJikgY29uc3Q7CkBAIC0zMDQsNyAr
MzA2LDcgQEAgY29uc3RleHByIEdMZmxvYXRDb2xvciBZQ2JDck1hdHJpeDo6b3BlcmF0b3IqKGNv
bnN0IEdMZmxvYXRDb2xvciYgY29sb3IpIGNvbnN0CiAgICAgKTsKIH0KIAotc3RhdGljIEdDR0xT
cGFuPGNvbnN0IEdMZmxvYXQsIDE2PiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRUcmFuc2Zl
ckZ1bmN0aW9uKFBpeGVsUmFuZ2UgcmFuZ2UsIFRyYW5zZmVyRnVuY3Rpb25DViB0cmFuc2ZlckZ1
bmN0aW9uKQorc3RhdGljIGNvbnN0IEdMZmxvYXQqIFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5nZUFu
ZFRyYW5zZmVyRnVuY3Rpb24oUGl4ZWxSYW5nZSByYW5nZSwgVHJhbnNmZXJGdW5jdGlvbkNWIHRy
YW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgdXNpbmcgTWFwS2V5ID0gc3RkOjpwYWlyPFBpeGVsUmFu
Z2UsIFRyYW5zZmVyRnVuY3Rpb25DVj47CiAgICAgdXNpbmcgTWF0cml4TWFwID0gU3RkTWFwPE1h
cEtleSwgY29uc3QgWUNiQ3JNYXRyaXgmPjsKQEAgLTQzMCwxNjggKzQzMiwxMzQgQEAgc3RhdGlj
IEdDR0xTcGFuPGNvbnN0IEdMZmxvYXQsIDE2PiBZQ2JDclRvUkdCTWF0cml4Rm9yUmFuZ2VBbmRU
cmFuc2ZlckZ1bmN0aW9uKFAKICAgICByZXR1cm4gaXRlcmF0b3ItPnNlY29uZDsKIH0KIAotbmFt
ZXNwYWNlIHsKLQotLy8gU2NvcGVkIGhvbGRlciBvZiBhIGNsZWFudXAgZnVuY3Rpb24uIENhbGxz
IHRoZSBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBzY29wZS4KLS8vIE5vdGU6IFJlbGVhc2Vz
IHRoZSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIG9ubHkgYWZ0ZXIgdGhlIHNjb3BlLCBub3QK
LS8vIGF0IHRoZSB0aW1lIG9mIGByZXNldCgpYCBjYWxsLgotdGVtcGxhdGUgPHR5cGVuYW1lIEY+
Ci1jbGFzcyBTY29wZWRDbGVhbnVwIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBTY29wZWRDbGVh
bnVwKEYmJiBmdW5jdGlvbikKLSAgICAgICAgOiBtX2Z1bmN0aW9uKFdURk1vdmUoZnVuY3Rpb24p
KQotICAgIHsKLSAgICB9Ci0gICAgflNjb3BlZENsZWFudXAoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fc2hvdWxkQ2FsbCkKLSAgICAgICAgICAgIG1fZnVuY3Rpb24oKTsKLSAgICB9Ci0gICAgdm9p
ZCByZXNldCgpIHsgbV9zaG91bGRDYWxsID0gZmFsc2U7IH0KLXByaXZhdGU6Ci0gICAgYm9vbCBt
X3Nob3VsZENhbGwgPSB0cnVlOwotICAgIGNvbnN0IEYgbV9mdW5jdGlvbjsKLX07Ci0KLX0KLQot
R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYXJlZChjb250ZXh0KSkKLSAgICAsIG1fZnJhbWVidWZmZXIo
bV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKQorc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRT4gR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjpjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCiB7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRT4gY3YgeyBuZXcgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFKGNv
bnRleHQpIH07CisgICAgaWYgKCFjdi0+bV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gY3Y7CiB9CiAKIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6fkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRSgpCiB7Ci0gICAgaWYgKG1feXV2VmVydGV4QnVmZmVyKQotICAg
ICAgICBtX2NvbnRleHQtPmRlbGV0ZUJ1ZmZlcihtX3l1dlZlcnRleEJ1ZmZlcik7Ci0gICAgaWYg
KG1feXV2UHJvZ3JhbSkKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1feXV2UHJv
Z3JhbSk7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsK
KyAgICBpZiAoIW1fY29udGV4dCB8fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDdXJy
ZW50KG1fZGlzcGxheSwgbV9jb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGdsOjpEZWxl
dGVCdWZmZXJzKDEsICZtX3l1dlZlcnRleEJ1ZmZlcik7CisgICAgZ2w6OkRlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmbV9mcmFtZWJ1ZmZlcik7CisgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxh
eSwgbV9jb250ZXh0KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmluaXRp
YWxpemVVVkNvbnRleHRPYmplY3RzKCkKK0dyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6R3JhcGhp
Y3NDb250ZXh0R0xDVkFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBvd25lcikKKyAgICA6
IG1fb3duZXIob3duZXIpCiB7Ci0gICAgY29uc3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV8yRDsKLQotICAgIFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hh
ZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9T
SEFERVIpOwotICAgIGlmICh1c2VUZXh0dXJlMkQpCi0gICAgICAgIG1fY29udGV4dC0+c2hhZGVy
U291cmNlKHZlcnRleFNoYWRlciwgc195dXZWZXJ0ZXhTaGFkZXJUZXh0dXJlMkQpOwotICAgIGVs
c2UKLSAgICAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCBzX3l1dlZl
cnRleFNoYWRlclRleHR1cmVSZWN0YW5nbGUpOwotCi0gICAgbV9jb250ZXh0LT5jb21waWxlU2hh
ZGVyRGlyZWN0KHZlcnRleFNoYWRlcik7Ci0KLSAgICBHQ0dMaW50IHN0YXR1cyA9IG1fY29udGV4
dC0+Z2V0U2hhZGVyaSh2ZXJ0ZXhTaGFkZXIsIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QSUxFX1NU
QVRVUyk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cyglcCkgLSBWZXJ0ZXgg
c2hhZGVyIGZhaWxlZCB0byBjb21waWxlLiIsIHRoaXMpOwotICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgUGxhdGZvcm1HTE9iamVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRl
U2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVIpOwotICAgIGlmICh1c2VU
ZXh0dXJlMkQpCi0gICAgICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVy
LCBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZTJEKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBzX3l1dkZyYWdtZW50U2hhZGVyVGV4
dHVyZVJlY3RhbmdsZSk7CisgICAgLy8gQ3JlYXRlIGNvbXBhdGlibGUgY29udGV4dCB0aGF0IHNo
YXJlcyBzdGF0ZSB3aXRoIG93bmVyLCBidXQgb25lIHRoYXQgZG9lcyBub3QKKyAgICAvLyBoYXZl
IHJvYnVzdG5lc3Mgb3IgV2ViR0wgY29tcGF0aWJpbGl0eS4KKyAgICBjb25zdCBFR0xpbnQgY29u
dGV4dEF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04s
CisgICAgICAgIG93bmVyLm1faXNGb3JXZWJHTDIgPyAzIDogMiwKKyAgICAgICAgRUdMX0NPTlRF
WFRfT1BFTkdMX0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFLAorICAgICAgICBFR0xfRkFMU0Us
CisgICAgICAgIEVHTF9DT05URVhUX0NMSUVOVF9BUlJBWVNfRU5BQkxFRF9BTkdMRSwKKyAgICAg
ICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfQ09OVEVYVF9CSU5EX0dFTkVSQVRFU19SRVNPVVJD
RV9DSFJPTUlVTSwKKyAgICAgICAgRUdMX0ZBTFNFLAorICAgICAgICBFR0xfTk9ORQorICAgIH07
CisgICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gb3duZXIucGxhdGZvcm1EaXNwbGF5KCk7CisgICAg
RUdMQ29uZmlnIGNvbmZpZyA9IG93bmVyLnBsYXRmb3JtQ29uZmlnKCk7CisgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gRUdMX0NyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBvd25lci5tX2Nv
bnRleHRPYmosIGNvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBpZiAoY29udGV4dCA9PSBFR0xfTk9f
Q09OVEVYVCkKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpt
YWtlQ3VycmVudChkaXNwbGF5LCBjb250ZXh0KTsKKworICAgIGF1dG8gY29udGV4dENsZWFudXAg
PSBtYWtlU2NvcGVFeGl0KFtkaXNwbGF5LCBjb250ZXh0XSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjptYWtlQ3VycmVudChkaXNwbGF5LCBFR0xfTk9fQ09OVEVYVCk7CisgICAg
ICAgIEVHTF9EZXN0cm95Q29udGV4dChkaXNwbGF5LCBjb250ZXh0KTsKKyAgICB9KTsKIAotICAg
IG1fY29udGV4dC0+Y29tcGlsZVNoYWRlckRpcmVjdChmcmFnbWVudFNoYWRlcik7CisgICAgY29u
c3QgYm9vbCB1c2VUZXh0dXJlMkQgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1
ZmZlclRleHR1cmVUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEOwogCi0gICAgc3RhdHVzID0gbV9j
b250ZXh0LT5nZXRTaGFkZXJpKGZyYWdtZW50U2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6Q09N
UElMRV9TVEFUVVMpOwotICAgIGlmICghc3RhdHVzKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkdy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoJXApIC0g
RnJhZ21lbnQgc2hhZGVyIGZhaWxlZCB0byBjb21waWxlLiIsIHRoaXMpOwotICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorICAgIGlmICghdXNlVGV4dHVy
ZTJEKSB7CisgICAgICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUoIkdMX0FOR0xFX3RleHR1
cmVfcmVjdGFuZ2xlIik7CisgICAgICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUoIkdMX0VY
VF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICBpZiAoZ2w6OkdldEVycm9yKCkg
IT0gR0xfTk9fRVJST1IpCisgICAgICAgICAgICByZXR1cm47CiAgICAgfQorI2VuZGlmCiAKLSAg
ICBtX3l1dlByb2dyYW0gPSBtX2NvbnRleHQtPmNyZWF0ZVByb2dyYW0oKTsKLSAgICBtX2NvbnRl
eHQtPmF0dGFjaFNoYWRlcihtX3l1dlByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgbV9jb250
ZXh0LT5hdHRhY2hTaGFkZXIobV95dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9j
b250ZXh0LT5saW5rUHJvZ3JhbShtX3l1dlByb2dyYW0pOwotCi0gICAgc3RhdHVzID0gbV9jb250
ZXh0LT5nZXRQcm9ncmFtaShtX3l1dlByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5LX1NU
QVRVUyk7Ci0gICAgaWYgKCFzdGF0dXMpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3ND
b250ZXh0R0xDVkFOR0xFOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cyglcCkgLSBQcm9ncmFt
IGZhaWxlZCB0byBsaW5rLiIsIHRoaXMpOwotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRl
cih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcihmcmFnbWVu
dFNoYWRlcik7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3l1dlByb2dyYW0p
OwotICAgICAgICBtX3l1dlByb2dyYW0gPSAwOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgbV95VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKG1feXV2UHJvZ3JhbSwgInVfeVRleHR1cmUiX3MpOwotICAgIG1fdXZUZXh0dXJl
VW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV95dXZQcm9n
cmFtLCAidV91dlRleHR1cmUiX3MpOwotICAgIG1fY29sb3JNYXRyaXhVbmlmb3JtTG9jYXRpb24g
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1dlByb2dyYW0sICJ1X2NvbG9yTWF0
cml4Il9zKTsKLSAgICBtX3l1dkZsaXBZVW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRV
bmlmb3JtTG9jYXRpb24obV95dXZQcm9ncmFtLCAidV9mbGlwWSJfcyk7Ci0gICAgbV95VGV4dHVy
ZVNpemVVbmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3l1
dlByb2dyYW0sICJ1X3lUZXh0dXJlU2l6ZSJfcyk7Ci0gICAgbV91dlRleHR1cmVTaXplVW5pZm9y
bUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV95dXZQcm9ncmFtLCAi
dV91dlRleHR1cmVTaXplIl9zKTsKLSAgICBtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24g
PSBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KG1feXV2UHJvZ3JhbSwgImFfcG9z
aXRpb24iX3MpOwotCi0gICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIobV95dXZQcm9ncmFtLCB2
ZXJ0ZXhTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG1feXV2UHJvZ3JhbSwg
ZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRl
cik7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotCi0gICAg
bV95dXZWZXJ0ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOworICAgIEdMaW50
IHZlcnRleFNoYWRlciA9IGdsOjpDcmVhdGVTaGFkZXIoR0xfVkVSVEVYX1NIQURFUik7CisgICAg
R0xpbnQgZnJhZ21lbnRTaGFkZXIgPSBnbDo6Q3JlYXRlU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURF
Uik7CisgICAgR0x1aW50IHl1dlByb2dyYW0gPSBnbDo6Q3JlYXRlUHJvZ3JhbSgpOworICAgIGF1
dG8gcHJvZ3JhbUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50
U2hhZGVyLCB5dXZQcm9ncmFtXSB7CisgICAgICAgIGdsOjpEZWxldGVTaGFkZXIodmVydGV4U2hh
ZGVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisgICAgICAg
IGdsOjpEZWxldGVQcm9ncmFtKHl1dlByb2dyYW0pOworICAgIH0pOworICAgIC8vIFRoZXNlIGFy
ZSB3cml0dGVuIHNvIHN0cmxlbiBtaWdodCBiZSBjb21waWxlLXRpbWUuCisgICAgR0xpbnQgdnNM
ZW5ndGggPSB1c2VUZXh0dXJlMkQgPyBzX3l1dlZlcnRleFNoYWRlclRleHR1cmUyRC5sZW5ndGgo
KSA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsKKyAgICBHTGlu
dCBmc0xlbmd0aCA9IHVzZVRleHR1cmUyRCA/IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQu
bGVuZ3RoKCkgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVyZVJlY3RhbmdsZS5sZW5ndGgoKTsK
KyAgICBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPSB1c2VUZXh0dXJlMkQgPyBzX3l1
dlZlcnRleFNoYWRlclRleHR1cmUyRCA6IHNfeXV2VmVydGV4U2hhZGVyVGV4dHVyZVJlY3Rhbmds
ZTsKKyAgICBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9IHVzZVRleHR1cmUyRCA/
IHNfeXV2RnJhZ21lbnRTaGFkZXJUZXh0dXJlMkQgOiBzX3l1dkZyYWdtZW50U2hhZGVyVGV4dHVy
ZVJlY3RhbmdsZTsKKworICAgIGdsOjpTaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCAxLCAmdmVy
dGV4U2hhZGVyU291cmNlLCAmdnNMZW5ndGgpOworICAgIGdsOjpTaGFkZXJTb3VyY2UoZnJhZ21l
bnRTaGFkZXIsIDEsICZmcmFnbWVudFNoYWRlclNvdXJjZSwgJmZzTGVuZ3RoKTsKKyAgICBnbDo6
Q29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIGdsOjpDb21waWxlU2hhZGVyKGZyYWdt
ZW50U2hhZGVyKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHl1dlByb2dyYW0sIHZlcnRleFNoYWRl
cik7CisgICAgZ2w6OkF0dGFjaFNoYWRlcih5dXZQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Cisg
ICAgZ2w6OkxpbmtQcm9ncmFtKHl1dlByb2dyYW0pOworICAgIC8vIExpbmsgc3RhdHVzIGlzIGNo
ZWNrZWQgYWZ0ZXJ3YXJkcyBmb3IgdGhlb3JldGljYWwgcGFyYWxsZWwgY29tcGlsYXRpb24gYmVu
ZWZpdC4KKworICAgIEdMdWludCB5dXZWZXJ0ZXhCdWZmZXIgPSAwOworICAgIGdsOjpHZW5CdWZm
ZXJzKDEsICZ5dXZWZXJ0ZXhCdWZmZXIpOworICAgIGF1dG8geXV2VmVydGV4QnVmZmVyQ2xlYW51
cCA9IG1ha2VTY29wZUV4aXQoW3l1dlZlcnRleEJ1ZmZlcl0geworICAgICAgICBnbDo6RGVsZXRl
QnVmZmVycygxLCAmeXV2VmVydGV4QnVmZmVyKTsKKyAgICB9KTsKICAgICBmbG9hdCB2ZXJ0aWNl
c1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwgLTEgfTsKKyAg
ICBnbDo6QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIHl1dlZlcnRleEJ1ZmZlcik7CisgICAg
Z2w6OkJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNl
cywgR0xfU1RBVElDX0RSQVcpOwogCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIG1feXV2VmVydGV4QnVmZmVyKTsKLSAgICBtX2NvbnRl
eHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgR0NHTFNwYW48
Y29uc3QgR0NHTHZvaWQ+KHZlcnRpY2VzLCBzaXplb2YodmVydGljZXMpKSwgR3JhcGhpY3NDb250
ZXh0R0w6OlNUQVRJQ19EUkFXKTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiwgMiwgR3JhcGhp
Y3NDb250ZXh0R0w6OkZMT0FULCBmYWxzZSwgMCwgMCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCogR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFOjphdHRhY2hJT1N1cmZhY2VUb1RleHR1
cmUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFj
ZSwgR0NHTHVpbnQgcGxhbmUpCi17Ci0gICAgYXV0byBkaXNwbGF5ID0gbV9jb250ZXh0LT5wbGF0
Zm9ybURpc3BsYXkoKTsKLSAgICBFR0xpbnQgZWdsVGV4dHVyZVRhcmdldCA9IDA7Ci0KLSAgICBp
ZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIpCi0g
ICAgICAgIGVnbFRleHR1cmVUYXJnZXQgPSBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU7Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKQotICAg
ICAgICBlZ2xUZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIExPRyhXZWJHTCwgIlVua25vd24gdGV4dHVyZSB0YXJnZXQgJWQuIiwgc3RhdGljX2Nhc3Q8
aW50Pih0YXJnZXQpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChl
Z2xUZXh0dXJlVGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpFR0xEcmF3aW5nQnVm
ZmVyVGV4dHVyZVRhcmdldCgpKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIk1pc21hdGNoIGluIEVH
TCB0ZXh0dXJlIHRhcmdldCAlZC4iLCBzdGF0aWNfY2FzdDxpbnQ+KHRhcmdldCkpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgR0x1aW50IGZyYW1lYnVmZmVyID0gMDsKKyAg
ICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CisgICAgYXV0byBmcmFtZWJ1
ZmZlckNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFtmcmFtZWJ1ZmZlcl0geworICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7CisgICAgfSk7CiAKLSAgICBjb25z
dCBFR0xpbnQgc3VyZmFjZUF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgRUdMX1dJRFRILCB3aWR0
aCwKLSAgICAgICAgRUdMX0hFSUdIVCwgaGVpZ2h0LAotICAgICAgICBFR0xfSU9TVVJGQUNFX1BM
QU5FX0FOR0xFLCBzdGF0aWNfY2FzdDxFR0xpbnQ+KHBsYW5lKSwKLSAgICAgICAgRUdMX1RFWFRV
UkVfVEFSR0VULCBzdGF0aWNfY2FzdDxFR0xpbnQ+KGVnbFRleHR1cmVUYXJnZXQpLAotICAgICAg
ICBFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUsIHN0YXRpY19jYXN0PEVHTGludD4o
aW50ZXJuYWxGb3JtYXQpLAotICAgICAgICBFR0xfVEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJF
X1JHQkEsCi0gICAgICAgIEVHTF9URVhUVVJFX1RZUEVfQU5HTEUsIHN0YXRpY19jYXN0PEVHTGlu
dD4odHlwZSksCi0gICAgICAgIC8vIE9ubHkgaGFzIGFuIGVmZmVjdCBvbiB0aGUgaU9TIFNpbXVs
YXRvci4KLSAgICAgICAgRUdMX0lPU1VSRkFDRV9VU0FHRV9ISU5UX0FOR0xFLCBFR0xfSU9TVVJG
QUNFX1JFQURfSElOVF9BTkdMRSwKLSAgICAgICAgRUdMX05PTkUsIEVHTF9OT05FCi0gICAgfTsK
LSAgICBFR0xTdXJmYWNlIHBidWZmZXIgPSBFR0xfQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZm
ZXIoZGlzcGxheSwgRUdMX0lPU1VSRkFDRV9BTkdMRSwgc3VyZmFjZSwgbV9jb250ZXh0LT5wbGF0
Zm9ybUNvbmZpZygpLCBzdXJmYWNlQXR0cmlidXRlcyk7Ci0gICAgaWYgKCFwYnVmZmVyKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIUVHTF9CaW5kVGV4SW1hZ2UoZGlzcGxheSwg
cGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKSkgewotICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2Uo
ZGlzcGxheSwgcGJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEdMaW50IHN0
YXR1cyA9IDA7CisgICAgZ2w6OkdldFByb2dyYW1pdlJvYnVzdEFOR0xFKHl1dlByb2dyYW0sIEdM
X0xJTktfU1RBVFVTLCAxLCBudWxscHRyLCAmc3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cykgewor
ICAgICAgICBHTGludCB2c1N0YXR1cyA9IDA7CisgICAgICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVz
dEFOR0xFKHZlcnRleFNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsIDEsIG51bGxwdHIsICZ2c1N0
YXR1cyk7CisgICAgICAgIEdMaW50IGZzU3RhdHVzID0gMDsKKyAgICAgICAgZ2w6OkdldFNoYWRl
cml2Um9idXN0QU5HTEUoZnJhZ21lbnRTaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAxLCBudWxs
cHRyLCAmZnNTdGF0dXMpOworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTENW
QU5HTEUoJXApIC0gWVVWIHByb2dyYW0gZmFpbGVkIHRvIGxpbms6ICVkLCAlZCwgJWQuIiwgdGhp
cywgc3RhdHVzLCB2c1N0YXR1cywgZnNTdGF0dXMpOworICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIHJldHVybiBwYnVmZmVyOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRTo6
ZGV0YWNoSU9TdXJmYWNlRnJvbVRleHR1cmUodm9pZCogaGFuZGxlKQotewotICAgIGF1dG8gZGlz
cGxheSA9IG1fY29udGV4dC0+cGxhdGZvcm1EaXNwbGF5KCk7Ci0gICAgRUdMX1JlbGVhc2VUZXhJ
bWFnZShkaXNwbGF5LCBoYW5kbGUsIEVHTF9CQUNLX0JVRkZFUik7Ci0gICAgRUdMX0Rlc3Ryb3lT
dXJmYWNlKGRpc3BsYXksIGhhbmRsZSk7CisgICAgY29udGV4dENsZWFudXAucmVsZWFzZSgpOwor
ICAgIHl1dlZlcnRleEJ1ZmZlckNsZWFudXAucmVsZWFzZSgpOworICAgIGZyYW1lYnVmZmVyQ2xl
YW51cC5yZWxlYXNlKCk7CisgICAgbV9kaXNwbGF5ID0gZGlzcGxheTsKKyAgICBtX2NvbnRleHQg
PSBjb250ZXh0OworICAgIG1fY29uZmlnID0gY29uZmlnOworICAgIG1feXV2VmVydGV4QnVmZmVy
ID0geXV2VmVydGV4QnVmZmVyOworICAgIG1fZnJhbWVidWZmZXIgPSBmcmFtZWJ1ZmZlcjsKKyAg
ICBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQ
cm9ncmFtLCAidV95VGV4dHVyZSIpOworICAgIG1fdXZUZXh0dXJlVW5pZm9ybUxvY2F0aW9uID0g
Z2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQcm9ncmFtLCAidV91dlRleHR1cmUiKTsKKyAgICBt
X2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9uID0gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbih5dXZQ
cm9ncmFtLCAidV9jb2xvck1hdHJpeCIpOworICAgIG1feXV2RmxpcFlVbmlmb3JtTG9jYXRpb24g
PSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlByb2dyYW0sICJ1X2ZsaXBZIik7CisgICAgbV95
VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24gPSBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHl1dlBy
b2dyYW0sICJ1X3lUZXh0dXJlU2l6ZSIpOworICAgIG1fdXZUZXh0dXJlU2l6ZVVuaWZvcm1Mb2Nh
dGlvbiA9IGdsOjpHZXRVbmlmb3JtTG9jYXRpb24oeXV2UHJvZ3JhbSwgInVfdXZUZXh0dXJlU2l6
ZSIpOworICAgIG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiA9IGdsOjpHZXRBdHRyaWJM
b2NhdGlvbih5dXZQcm9ncmFtLCAiYV9wb3NpdGlvbiIpOworICAgIC8vIFByb2dyYW0gaXMgZGVs
ZXRlZCBieSB0aGUgY2xlYW51cCB3aGlsZSB0aGUgcHJvZ3JhbSBiaW5hcnkgc3RheXMgaW4gdXNl
LgorICAgIGdsOjpVc2VQcm9ncmFtKHl1dlByb2dyYW0pOworICAgIGdsOjpFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24pOworICAgIGdsOjpWZXJ0
ZXhBdHRyaWJQb2ludGVyKG1feXV2UG9zaXRpb25BdHRyaWJ1dGVMb2NhdGlvbiwgMiwgR0xfRkxP
QVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBn
bDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVyKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlQaXhlbEJ1ZmZlclRvVGV4dHVyZShD
VlBpeGVsQnVmZmVyUmVmIGltYWdlLCBQbGF0Zm9ybUdMT2JqZWN0IG91dHB1dFRleHR1cmUsIEdD
R0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3JtYXQsIEdD
R0xlbnVtIHR5cGUsIEZsaXBZIGZsaXBZKQorYm9vbCBHcmFwaGljc0NvbnRleHRHTENWQU5HTEU6
OmNvcHlQaXhlbEJ1ZmZlclRvVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmIGltYWdlLCBQbGF0Zm9y
bUdMT2JqZWN0IG91dHB1dFRleHR1cmUsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBGbGlwWSBmbGlwWSkKIHsKICAgICAvLyBG
SVhNRTogVGhpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0cyAnNDIwdicgYW5kICc0MjBmJyBwaXhl
bCBmb3JtYXRzLiBJbnZlc3RpZ2F0ZSBzdXBwb3J0aW5nIG1vcmUgcGl4ZWwgZm9ybWF0cy4KICAg
ICBPU1R5cGUgcGl4ZWxGb3JtYXQgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKGlt
YWdlKTsKQEAgLTYxMSw1MiArNTc5LDQzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
Ojpjb3B5UGl4ZWxCdWZmZXJUb1RleHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwKIAogICAg
IGF1dG8gbmV3U3VyZmFjZVNlZWQgPSBJT1N1cmZhY2VHZXRTZWVkKHN1cmZhY2UpOwogICAgIGlm
IChmbGlwWSA9PSBtX2xhc3RGbGlwWQotICAgICAgICAmJiBzdXJmYWNlID09IG1fbGFzdFN1cmZh
Y2UgCisgICAgICAgICYmIHN1cmZhY2UgPT0gbV9sYXN0U3VyZmFjZQogICAgICAgICAmJiBuZXdT
dXJmYWNlU2VlZCA9PSBtX2xhc3RTdXJmYWNlU2VlZAotICAgICAgICAmJiBsYXN0VGV4dHVyZVNl
ZWQob3V0cHV0VGV4dHVyZSkgPT0gbV9jb250ZXh0LT50ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJl
KSkgeworICAgICAgICAmJiBsYXN0VGV4dHVyZVNlZWQob3V0cHV0VGV4dHVyZSkgPT0gbV9vd25l
ci50ZXh0dXJlU2VlZChvdXRwdXRUZXh0dXJlKSkgewogICAgICAgICAvLyBJZiB0aGUgdGV4dHVy
ZSBoYXNuJ3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIGNvcGllZCB0byBp
dCwgYW5kIHRoZQogICAgICAgICAvLyBpbWFnZSBoYXNuJ3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0
aGUgbGFzdCB0aW1lIGl0IHdhcyBjb3BpZWQsIHRoaXMgaXMgYSBuby1vcC4KICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQorICAgIGlmICghbV9jb250ZXh0IHx8ICFHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bWFrZUN1cnJlbnQobV9kaXNwbGF5LCBtX2NvbnRleHQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoIW1feXV2UHJvZ3JhbSkgewotICAgICAgICBpZiAoIWluaXRp
YWxpemVVVkNvbnRleHRPYmplY3RzKCkpIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIkdyYXBo
aWNzQ29udGV4dEdMQ1ZBTkdMRTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVw
KSAtIFVuYWJsZSB0byBpbml0aWFsaXplIE9wZW5HTCBjb250ZXh0IG9iamVjdHMuIiwgdGhpcyk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CiAgICAgc2l6ZV90
IHdpZHRoID0gQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKGltYWdlKTsKICAgICBzaXplX3QgaGVpZ2h0
ID0gQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChpbWFnZSk7CiAKLSAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIp
OworICAgIGdsOjpWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIC8vIFRoZSBv
dXRwdXRUZXh0dXJlIG1pZ2h0IGNvbnRhaW4gdW5pbml0aWFsaXplZCBjb250ZW50IG9uIGVhcmx5
LW91dHMuIENsZWFyIGl0IGluIGNhc2VzCiAgICAgLy8gYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3Ig
aXMgbm90IHJlc2V0LgotICAgIGF1dG8gYXV0b0NsZWFyVGV4dHVyZU9uRXJyb3IgPSBTY29wZWRD
bGVhbnVwIHsKLSAgICAgICAgW291dHB1dFRleHR1cmUsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0ID0gbV9jb250ZXh0LnB0cigpXSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgb3V0cHV0
VGV4dHVyZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJERGlyZWN0KEdMX1RFWFRV
UkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgMCwgMCwgMCwgZm9ybWF0LCB0eXBlLCBudWxs
cHRyKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFXzJELCAwKTsKLSAgICAgICAgfQotICAgIH07CisgICAgYXV0byBhdXRvQ2xlYXJU
ZXh0dXJlT25FcnJvciA9IG1ha2VTY29wZUV4aXQoW291dHB1dFRleHR1cmUsIGxldmVsLCBpbnRl
cm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlXSB7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCAwLCAwLCAwLCBmb3JtYXQsIHR5cGUsIG51
bGxwdHIpOworICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAg
fSk7CiAgICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0gICAg
bV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgb3V0
cHV0VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSLCBH
cmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
X01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0R0w6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7
Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dEdM
OjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkREaXJlY3QoR0xfVEVY
VFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQs
IHR5cGUsIG51bGxwdHIpOwotCi0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUs
IGxldmVsKTsKLSAgICBHQ0dMZW51bSBzdGF0dXMgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVz
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgIGdsOjpC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOworCisgICAgZ2w6OkZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xf
VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSwgbGV2ZWwpOworICAgIEdMZW51bSBzdGF0dXMgPSBn
bDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUik7CisgICAgaWYgKHN0YXR1
cyAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgewogICAgICAgICBMT0coV2ViR0wsICJHcmFw
aGljc0NvbnRleHRHTENWQU5HTEU6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSgl
cCkgLSBVbmFibGUgdG8gY3JlYXRlIGZyYW1lYnVmZmVyIGZvciBvdXRwdXRUZXh0dXJlLiIsIHRo
aXMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDApOwotCi0gICAgbV9jb250ZXh0
LT51c2VQcm9ncmFtKG1feXV2UHJvZ3JhbSk7Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAw
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7
CiAKICAgICAvLyBCaW5kIGFuZCBzZXQgdXAgdGhlIHRleHR1cmVzIGZvciB0aGUgdmlkZW8gc291
cmNlLgogICAgIGF1dG8geVBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoc3Vy
ZmFjZSwgMCk7CkBAIC02NjQsNjEgKzYyMyw2NCBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMQ1ZB
TkdMRTo6Y29weVBpeGVsQnVmZmVyVG9UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsCiAg
ICAgYXV0byB1dlBsYW5lV2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoc3VyZmFjZSwg
MSk7CiAgICAgYXV0byB1dlBsYW5lSGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShz
dXJmYWNlLCAxKTsKIAotICAgIEdDR0xlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkcmF3aW5nQnVmZmVyVGV4dHVyZVRhcmdldCgpOwotCi0gICAgYXV0
byB1dlRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUxKTsKLSAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgdXZUZXh0dXJlKTsKLSAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKLSAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKLSAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdF
KTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9U
T19FREdFKTsKLSAgICBhdXRvIHV2SGFuZGxlID0gYXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlKHZp
ZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHLCB1dlBsYW5lV2lkdGgsIHV2
UGxhbmVIZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAx
KTsKLSAgICBpZiAoIXV2SGFuZGxlKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVy
ZSh1dlRleHR1cmUpOworICAgIEdMZW51bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZHJhd2luZ0J1ZmZlclRleHR1cmVUYXJnZXQoKTsKKworICAgIEdMdWlu
dCB1dlRleHR1cmUgPSAwOworICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmdXZUZXh0dXJlKTsKKyAg
ICBhdXRvIHV2VGV4dHVyZUNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFt1dlRleHR1cmVdIHsKKyAg
ICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ1dlRleHR1cmUpOworICAgIH0pOworICAgIGds
OjpBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUxKTsKKyAgICBnbDo6QmluZFRleHR1cmUodmlkZW9U
ZXh0dXJlVGFyZ2V0LCB1dlRleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIGF1dG8gdXZIYW5kbGUgPSBXZWJDb3JlOjpjcmVhdGVQYnVmZmVyQW5kQXR0YWNoSU9T
dXJmYWNlKG1fZGlzcGxheSwgbV9jb25maWcsIHZpZGVvVGV4dHVyZVRhcmdldCwgRUdMX0lPU1VS
RkFDRV9SRUFEX0hJTlRfQU5HTEUsIEdMX1JHLCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQs
IEdMX1VOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOworICAgIGlmICghdXZIYW5kbGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYXV0byB1dkhhbmRsZUNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFtkaXNwbGF5ID0gbV9kaXNwbGF5LCB1dkhhbmRsZV0geworICAgICAgICBXZWJD
b3JlOjpkZXN0cm95UGJ1ZmZlckFuZERldGFjaElPU3VyZmFjZShkaXNwbGF5LCB1dkhhbmRsZSk7
CisgICAgfSk7CiAKLSAgICBhdXRvIHlUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJl
KCk7Ci0gICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhU
VVJFMCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHlU
ZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHRH
TDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFy
Z2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRl
eHRHTDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dEdMOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNz
Q29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKLSAgICBhdXRvIHlIYW5kbGUgPSBhdHRhY2hJT1N1
cmZhY2VUb1RleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6UkVE
LCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURSwgc3VyZmFjZSwgMCk7Ci0gICAgaWYgKCF5SGFuZGxlKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVsZXRlVGV4dHVyZSh5VGV4dHVyZSk7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4
dHVyZSh1dlRleHR1cmUpOworICAgIEdMdWludCB5VGV4dHVyZSA9IDA7CisgICAgZ2w6OkdlblRl
eHR1cmVzKDEsICZ5VGV4dHVyZSk7CisgICAgYXV0byB5VGV4dHVyZUNsZWFudXAgPSBtYWtlU2Nv
cGVFeGl0KFt5VGV4dHVyZV0geworICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnlUZXh0
dXJlKTsKKyAgICB9KTsKKyAgICBnbDo6QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAg
Z2w6OkJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgeVRleHR1cmUpOworICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZp
ZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGF1dG8geUhhbmRsZSA9IFdlYkNvcmU6OmNyZWF0
ZVBidWZmZXJBbmRBdHRhY2hJT1N1cmZhY2UobV9kaXNwbGF5LCBtX2NvbmZpZywgdmlkZW9UZXh0
dXJlVGFyZ2V0LCBFR0xfSU9TVVJGQUNFX1JFQURfSElOVF9BTkdMRSwgR0xfUkVELCB5UGxhbmVX
aWR0aCwgeVBsYW5lSGVpZ2h0LCBHTF9VTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsKKyAgICBp
ZiAoIXlIYW5kbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYXV0byB5SGFu
ZGxlQ2xlYW51cCA9IG1ha2VTY29wZUV4aXQoW2Rpc3BsYXkgPSBtX2Rpc3BsYXksIHlIYW5kbGVd
IHsKKyAgICAgICAgZGVzdHJveVBidWZmZXJBbmREZXRhY2hJT1N1cmZhY2UoZGlzcGxheSwgeUhh
bmRsZSk7CisgICAgfSk7CiAKICAgICAvLyBDb25maWd1cmUgdGhlIGRyYXdpbmcgcGFyYW1ldGVy
cy4KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uLCAw
KTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX3V2VGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwg
MSk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV95dXZGbGlwWVVuaWZvcm1Mb2NhdGlvbiwg
ZmxpcFkgPT0gRmxpcFk6OlllcyA/IDEgOiAwKTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZiht
X3lUZXh0dXJlU2l6ZVVuaWZvcm1Mb2NhdGlvbiwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCk7
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9u
LCB1dlBsYW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQpOworICAgIGdsOjpVbmlmb3JtMWkobV95VGV4
dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7CisgICAgZ2w6OlVuaWZvcm0xaShtX3V2VGV4dHVyZVVu
aWZvcm1Mb2NhdGlvbiwgMSk7CisgICAgZ2w6OlVuaWZvcm0xaShtX3l1dkZsaXBZVW5pZm9ybUxv
Y2F0aW9uLCBmbGlwWSA9PSBGbGlwWTo6WWVzID8gMSA6IDApOworICAgIGdsOjpVbmlmb3JtMmYo
bV95VGV4dHVyZVNpemVVbmlmb3JtTG9jYXRpb24sIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQp
OworICAgIGdsOjpVbmlmb3JtMmYobV91dlRleHR1cmVTaXplVW5pZm9ybUxvY2F0aW9uLCB1dlBs
YW5lV2lkdGgsIHV2UGxhbmVIZWlnaHQpOwogCiAgICAgYXV0byByYW5nZSA9IHBpeGVsUmFuZ2VG
cm9tUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXQpOwogICAgIGF1dG8gdHJhbnNmZXJGdW5jdGlvbiA9
IHRyYW5zZmVyRnVuY3Rpb25Gcm9tU3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4o
Q1ZCdWZmZXJHZXRBdHRhY2htZW50KGltYWdlLCBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5
LCBuaWwpKSk7CiAgICAgYXV0byBjb2xvck1hdHJpeCA9IFlDYkNyVG9SR0JNYXRyaXhGb3JSYW5n
ZUFuZFRyYW5zZmVyRnVuY3Rpb24ocmFuZ2UsIHRyYW5zZmVyRnVuY3Rpb24pOwotICAgIG1fY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDRmdihtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9uLCBHTF9G
QUxTRSwgY29sb3JNYXRyaXgpOworICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KG1fY29sb3JNYXRy
aXhVbmlmb3JtTG9jYXRpb24sIDEsIEdMX0ZBTFNFLCBjb2xvck1hdHJpeCk7CiAKICAgICAvLyBE
byB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNz
Q29udGV4dEdMOjpUUklBTkdMRVMsIDAsIDYpOwotCi0gICAgLy8gQ2xlYW4tdXAuCi0gICAgbV9j
b250ZXh0LT5kZWxldGVUZXh0dXJlKHlUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0ZVRl
eHR1cmUodXZUZXh0dXJlKTsKLSAgICBkZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVyZSh5SGFuZGxl
KTsKLSAgICBkZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVyZSh1dkhhbmRsZSk7CisgICAgZ2w6OkRy
YXdBcnJheXMoR0xfVFJJQU5HTEVTLCAwLCA2KTsKIAogICAgIG1fbGFzdFN1cmZhY2UgPSBzdXJm
YWNlOwogICAgIG1fbGFzdFN1cmZhY2VTZWVkID0gbmV3U3VyZmFjZVNlZWQ7Ci0gICAgbV9sYXN0
VGV4dHVyZVNlZWQuc2V0KG91dHB1dFRleHR1cmUsIG1fY29udGV4dC0+dGV4dHVyZVNlZWQob3V0
cHV0VGV4dHVyZSkpOworICAgIG1fbGFzdFRleHR1cmVTZWVkLnNldChvdXRwdXRUZXh0dXJlLCBt
X293bmVyLnRleHR1cmVTZWVkKG91dHB1dFRleHR1cmUpKTsKICAgICBtX2xhc3RGbGlwWSA9IGZs
aXBZOwotICAgIGF1dG9DbGVhclRleHR1cmVPbkVycm9yLnJlc2V0KCk7CisgICAgYXV0b0NsZWFy
VGV4dHVyZU9uRXJyb3IucmVsZWFzZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9HcmFwaGljc0NvbnRleHRH
TENWQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNz
Q29udGV4dEdMQ1ZBTkdMRS5oCmluZGV4IDViY2EyYWFiZDE1ZTU3MDk1YjlmNGE3NWM0NmQ3ZTcw
ZmFlNjZlYTguLjU2MGVlODBiYTQ0N2M5MDVhZDQzYzU3MTRhYjc4ZTA5N2RkOWRlZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0dy
YXBoaWNzQ29udGV4dEdMQ1ZBTkdMRS5oCkBAIC0yNywzOSArMjcsMzkgQEAKIAogI2lmIEVOQUJM
RShXRUJHTCkgJiYgRU5BQkxFKFZJREVPKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCi0jaW1wb3J0
ICJHcmFwaGljc0NvbnRleHRHTENWLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQ1YuaCIKIAotI2ltcG9ydCA8d3RmL1Vu
c2FmZVBvaW50ZXIuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1Vuc2FmZVBv
aW50ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w7CiAKIC8vIEdyYXBoaWNzQ29udGV4dEdMQ1YgaW1wbGVtZW50YXRpb24gZm9yIEFOR0xF
IGZsYXZvdXIgb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCisvLyBUaGlzIGNsYXNzIGlzIHBh
cnQgb2YgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMIGZvciBBTkdMRSBDb2NvYS4KIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMQ1ZBTkdMRSBmaW5h
bCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTENWIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRHTENWQU5HTEUoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CisKICAgICB+R3Jh
cGhpY3NDb250ZXh0R0xDVkFOR0xFKCkgZmluYWw7CiAKICAgICBib29sIGNvcHlQaXhlbEJ1ZmZl
clRvVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmLCBQbGF0Zm9ybUdMT2JqZWN0IG91dHB1dFRleHR1
cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMZW51bSBmb3Jt
YXQsIEdDR0xlbnVtIHR5cGUsIEZsaXBZKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBib29sIGlu
aXRpYWxpemVVVkNvbnRleHRPYmplY3RzKCk7CisgICAgR3JhcGhpY3NDb250ZXh0R0xDVkFOR0xF
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CiAKICAgICB1bnNpZ25lZCBsYXN0VGV4dHVyZVNl
ZWQoR0NHTHVpbnQgdGV4dHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2xhc3RUZXh0dXJl
U2VlZC5nZXQodGV4dHVyZSk7CiAgICAgfQogCi0gICAgLy8gUmV0dXJucyBhIGhhbmRsZSB3aGlj
aCwgaWYgbm9uLW51bGwsIG11c3QgYmUgcmVsZWFzZWQgdmlhIHRoZQotICAgIC8vIGRldGFjaCBj
YWxsIGJlbG93LgotICAgIHZvaWQqIGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xlbnVtIGludGVybmFsRm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiwgR0NHTHVpbnQgcGxhbmUpOwot
ICAgIHZvaWQgZGV0YWNoSU9TdXJmYWNlRnJvbVRleHR1cmUodm9pZCogaGFuZGxlKTsKLQotICAg
IFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gbV9jb250ZXh0OworICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMJiBtX293bmVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNw
bGF5IG1fZGlzcGxheSB7IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
IG1fY29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29u
ZmlnIG1fY29uZmlnIHsgbnVsbHB0ciB9OwogCiAgICAgUGxhdGZvcm1HTE9iamVjdCBtX2ZyYW1l
YnVmZmVyIHsgMCB9OwotICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZQcm9ncmFtIHsgMCB9Owog
ICAgIFBsYXRmb3JtR0xPYmplY3QgbV95dXZWZXJ0ZXhCdWZmZXIgeyAwIH07CiAgICAgR0NHTGlu
dCBtX3lUZXh0dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKICAgICBHQ0dMaW50IG1fdXZUZXh0
dXJlVW5pZm9ybUxvY2F0aW9uIHsgLTEgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgKaW5kZXggNTViNThmZjU5N2JiNDY5YzNjY2RiOWM2NjQ0NGRhYmRiYTJlYzVkOS4uMTc3ODRl
ZGIxODZhYzZmMmJiODU1ZjAzMmJjOTg5YzQ2MjMwM2I3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmgKQEAgLTY5LDYgKzY5LDcgQEAgT0JKQ19DTEFTUyBDQUxheWVyOwogT0JK
Q19DTEFTUyBXZWJHTExheWVyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3ND
b250ZXh0R0xJT1N1cmZhY2VTd2FwQ2hhaW47CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTENWQU5H
TEU7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKQEAgLTEwNCw3ICsxMDUsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKTsKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIHN0YXRpYyBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNy
ZWF0ZVNoYXJlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgc2hhcmVkQ29udGV4dCk7CiAgICAg
c3RhdGljIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gY3JlYXRlRm9yR1BVUHJvY2Vzcyhj
b25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmLCBHcmFwaGljc0NvbnRleHRHTElPU3Vy
ZmFjZVN3YXBDaGFpbiopOwogCiAgICAgQ0FMYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0FMYXllcio+KG1fd2ViR0xMYXllci5nZXQo
KSk7IH0KQEAgLTU0MiwxNSArNTQyLDE0IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogc2hhcmVk
Q29udGV4dCA9IG51bGxwdHIsIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluKiA9
IG51bGxwdHIpOworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENo
YWluKiA9IG51bGxwdHIpOwogI2Vsc2UKLSAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOworICAgIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcywgSG9zdFdpbmRvdyopOwogI2VuZGlmCiAK
ICAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBlbnRyeSBwb2ludHMgdGhhdCBl
dmVudHVhbGx5IGNhbGwgT3BlbkdMLgogICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVi
bGljIGVudHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBldmVudHVhbGx5IGNhbGwgT3Bl
bkdMLgogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FSTl9VTlVTRURfUkVUVVJOOwot
ICAgIHZvaWQgY2xlYXJDdXJyZW50Q29udGV4dCgpOwogCiAgICAgLy8gVGFrZSBpbnRvIGFjY291
bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAogICAg
IC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdo
aWNoIGNvdWxkIG9yCkBAIC01NzcsNiArNTc2LDggQEAgcHJpdmF0ZToKICAgICBib29sIHJlc2hh
cGVEaXNwbGF5QnVmZmVyQmFja2luZygpOwogICAgIGJvb2wgYWxsb2NhdGVBbmRCaW5kRGlzcGxh
eUJ1ZmZlckJhY2tpbmcoKTsKICAgICBib29sIGJpbmREaXNwbGF5QnVmZmVyQmFja2luZyhzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBiYWNraW5nLCB2b2lkKiBwYnVmZmVyKTsKKyAgICBzdGF0
aWMgYm9vbCBtYWtlQ3VycmVudChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSwgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCk7CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4
dEdMQ1ZBTkdMRTsKICNlbmRpZgogI2lmIFVTRShBTkdMRSkKICAgICAvLyBSZXR1cm5zIGZhbHNl
IGlmIGNvbnRleHQgc2hvdWxkIGJlIGxvc3QgZHVlIHRvIHRpbWVvdXQuCkBAIC03OTMsNyArNzk0
LDcgQEAgcHJpdmF0ZToKICAgICBTY29wZWRIaWdoUGVyZm9ybWFuY2VHUFVSZXF1ZXN0IG1faGln
aFBlcmZvcm1hbmNlR1BVUmVxdWVzdDsKICNlbmRpZgogI2lmIEVOQUJMRShWSURFTykgJiYgVVNF
KEFWRk9VTkRBVElPTikKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVj4g
bV9jdjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xDVkFOR0xFPiBtX2N2
OwogI2VuZGlmCiAjaWYgVVNFKEFOR0xFKQogICAgIGJvb2wgbV91c2VGZW5jZVN5bmNGb3JEaXNw
bGF5UmF0ZUxpbWl0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXIuY3BwCmluZGV4IGU1MDMwZGNjM2ZmY2EzYzhkYzk5MzRhMjZkZmYyNWZkZTcy
Zjk2ODAuLjhkM2Q2NWMxN2Y5ZDM0ZTE1NmI1MGExOGU4NDU1OGNhMTFhNTJiYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHRHTFRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCkBAIC0xMDQsMTAg
KzEwNCw5IEBAIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZUZvckdQVVByb2Nlc3MoY29uc3QKIH0KIAogI2lmIFVTRShBTkdMRSkKLUdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmli
dXRlcywgc2hhcmVkQ29udGV4dCkKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9z
dFdpbmRvdyopCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzKQogewotICAgIEFT
U0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQpOwogI2lmIEVOQUJMRShX
RUJHTDIpCiAgICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJpYnV0ZXMud2ViR0xWZXJzaW9uID09IEdy
YXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CiAjZW5kaWYKQEAgLTE3NCwxMCAr
MTczLDkgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICBnbDo6Q2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKIH0KICNlbHNlCi1HcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RX
aW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29udGV4dCkKLSAgICA6IEdy
YXBoaWNzQ29udGV4dEdMKGF0dHJpYnV0ZXMsIHNoYXJlZENvbnRleHQpCitHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqKQorICAgIDogR3JhcGhpY3NDb250ZXh0R0wo
YXR0cmlidXRlcykKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHNoYXJlZENvbnRleHQsICFzaGFyZWRD
b250ZXh0KTsKICNpZiBVU0UoTklDT1NJQSkKICAgICBtX25pY29zaWFMYXllciA9IG1ha2VVbmlx
dWU8Tmljb3NpYTo6R0NHTExheWVyPigqdGhpcyk7CiAjZWxzZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>