<?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>75462</bug_id>
          
          <creation_ts>2012-01-02 22:37:15 -0800</creation_ts>
          <short_desc>Split GraphicsContext3DOpenGL into several files</short_desc>
          <delta_ts>2012-01-12 20:51:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>75466</dependson>
          <blocked>59064</blocked>
    
    <blocked>66903</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="ChangSeok Oh">kevin.cs.oh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>528668</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-02 22:37:15 -0800</bug_when>
    <thetext>This bug is for spliting GraphicsContext3DOpenGL into following files as Chris Marrin mentioned.
+GraphicsContext3DOpenGLCommon - code common to any OpenGL implementation
+GraphicsContext3DOpenGL - OpenGL (not OpenGL ES) specific code)
+GraphicsContext3DGLES - OpenGL ES specific code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533099</commentid>
    <comment_count>1</comment_count>
      <attachid>121852</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-10 08:41:25 -0800</bug_when>
    <thetext>Created attachment 121852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533154</commentid>
    <comment_count>2</comment_count>
      <attachid>121862</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-10 09:59:47 -0800</bug_when>
    <thetext>Created attachment 121862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533179</commentid>
    <comment_count>3</comment_count>
      <attachid>121866</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-10 10:37:17 -0800</bug_when>
    <thetext>Created attachment 121866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533745</commentid>
    <comment_count>4</comment_count>
      <attachid>121866</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-11 01:44:49 -0800</bug_when>
    <thetext>Comment on attachment 121866
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +
&gt; +        Split GraphicsContext3DOpenGL.cpp into
&gt; +        GraphicsContext3DOpenGLCommon.cpp, GraphicsContext3DOpenGL.cpp &amp; GraphicsContext3DOpenGLES.cpp.
&gt; +        Most of common APIs between gl and gles are in GraphicsContext3DOpenGLCommon.cpp.
&gt; +        The other gl and gles specific APIs are placed apart in GraphicsContext3DOpenGL.cpp &amp; GraphicsContext3DOpenGLES.cpp
&gt; +
&gt; +        No new tests required.

It would be good if you could write why this is an advantage. Also can you try to keep the lines shorter (around 80-100 chars)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534868</commentid>
    <comment_count>5</comment_count>
      <attachid>122251</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-12 08:37:16 -0800</bug_when>
    <thetext>Created attachment 122251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534870</commentid>
    <comment_count>6</comment_count>
      <attachid>121866</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-12 08:38:45 -0800</bug_when>
    <thetext>Comment on attachment 121866
Patch

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

Thank you for review. :)

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        No new tests required.
&gt; 
&gt; It would be good if you could write why this is an advantage. Also can you try to keep the lines shorter (around 80-100 chars)

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535386</commentid>
    <comment_count>7</comment_count>
      <attachid>122251</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-01-12 19:27:25 -0800</bug_when>
    <thetext>Comment on attachment 122251
Patch

Nice refactoring. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535418</commentid>
    <comment_count>8</comment_count>
      <attachid>122251</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 20:51:37 -0800</bug_when>
    <thetext>Comment on attachment 122251
Patch

Clearing flags on attachment: 122251

Committed r104896: &lt;http://trac.webkit.org/changeset/104896&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535419</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 20:51:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121852</attachid>
            <date>2012-01-10 08:41:25 -0800</date>
            <delta_ts>2012-01-10 09:59:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75462-20120111014123.patch</filename>
            <type>text/plain</type>
            <size>89558</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1ZTRiYzQ3MGFkZTNl
NWY5ZDk4ZDYzZWY0MzI1NjczMjg2YjYwNy4uOTM4ZDFjZGI4MWM5NDJhZmU2ZDE0MDg5YThmYzlk
NjkwYmEyYzcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4MCBAQAorMjAxMi0wMS0xMCAgQ2hh
bmdTZW9rIE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisKKyAgICAgICAgU3BsaXQgR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wgaW50byBzZXZlcmFsIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IEdyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcCBpbnRvCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCwgR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICYgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAu
CisgICAgICAgIE1vc3Qgb2YgY29tbW9uIEFQSXMgYmV0d2VlbiBnbCBhbmQgZ2xlcyBhcmUgaW4g
R3JhcGhpY3NDb250ZXh0M0RDb21tb24uY3BwLgorICAgICAgICBUaGUgb3RoZXIgZ2wgYW5kIGds
ZXMgc3BlY2lmaWMgQVBJcyBhcmUgcGxhY2VkIGFwYXJ0IGluIEdyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcCAmIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQg
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgICogVGFyZ2V0LnByaTog
QWRkZWQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgICogV2ViQ29y
ZS5neXBpOiBBZGRlZCBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIEdyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VT
YWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJE
ZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2ls
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpk
aXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRy
YXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00Zik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKwogMjAxMi0wMS0wNSAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjEwNDA2MCk6IGZh
c3QvZm9ybXMvdGV4dGFyZWEtbWV0cmljcy5odG1sIGlzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDdjNGE5NmE5ZjY2YjYxMjNhNGJkZmY0MjRkMjEwMTdkYzFlOGIx
YWYuLmY5N2NmNDkxYTY1YzE2ODkyMWZkM2JhZDZmZTQ2MmU4OGExMWFhZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTU5NCw3ICs1NTk0LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwCiBlbmRpZiAgIyBFTkQgRU5BQkxFX1dFQkdMCiAKICMg
LS0tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQppbmRleCA2OGI5ZmUwY2U0YjU4YzQ4OGQxZjQ3M2UxYmU0NjgwZTU4MzU5
OGUwLi5lNTcyNjE5NGU2NjE0N2FhZDU1ZTMyZTVlZTNmZWY1NWQwNjM3NWM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkKQEAgLTM3MjUsNyArMzcyNSw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0x
KSB7CiAKICAgICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCi0gICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKKyAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHAKIAogICAgICAgICBBTkdMRV9ESVIgPSAkJHJlcGxhY2UoUFdELCAiV2ViQ29y
ZSIsICJUaGlyZFBhcnR5L0FOR0xFIikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGYzNTU4NjhkNTg5
OWZhZjg1Y2U3NTk2MGIyNWVmZDdlYWJkY2M3OGIuLjJlODI0MjYzODc3OGQ5ZjYwYTVjYjM3MjFl
ODFmYmRmYzdlMDJmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM4MjUsNiArMzgyNSw3IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXIuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBlMTliYmM3ZTZmYjJhYjBlNWQ5MWFhNmFhZmJmOTQxNDVhMmE5NmZhLi4xNTAzZjBlNTViYTZk
YTkzNmQwMGQ4ZDcxYjBkN2RkOWI2M2NjMDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMjQ2LDYgKzMyNDYsNyBAQAogCQk5
M0Y5QjdBMDBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGOUI3OUUwQkE2MDMyNjAwODU0
MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCAqLzsgfTsKIAkJOTNGOUI3QTEwQkE2MDMyNjAwODU0
MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0Y5Qjc5RjBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24u
aCAqLzsgfTsKIAkJOTNGREFGQ0EwQjExMzA3NDAwRTI3NDZGIC8qIEVkaXRvckluc2VydEFjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGREFG
QzkwQjExMzA3NDAwRTI3NDZGIC8qIEVkaXRvckluc2VydEFjdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk2QUJBM0ZEMTRCQzkwNTAwMEQ1
NjIwNCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NkFCQTNGQzE0QkM5MDUwMDBENTYyMDQg
LyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICovOyB9OwogCQk5NzA1OTk3NzEw
N0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwNTk5NzMxMDdEOTc1MjAwQTUwQTdDIC8qIFBv
bGljeUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJOTcwNTk5NzgxMDdEOTc1MjAwQTUwQTdDIC8qIFBv
bGljeUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzA1OTk3NDEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzA1OTk3OTEwN0Q5
NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzA1OTk3NTEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5
Q2hlY2tlci5jcHAgKi87IH07CkBAIC0xMDUwMiw2ICsxMDUwMyw3IEBACiAJCTkzRjlCNzlFMEJB
NjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0NEQVRBU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzRjlCNzlGMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NEQVRBU2VjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0ZEQUZDOTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9y
SW5zZXJ0QWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0b3JJ
bnNlcnRBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTZBQkEzRkMxNEJD
OTA1MDAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzMxMDdEOTc1MjAw
QTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFBvbGljeUNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTcwNTk5NzQxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbGljeUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk3MDU5OTc1MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbGljeUNoZWNrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE1MDcsNiArMjE1MDksNyBAQAog
CQlGQkMyMjBERDEyMzdGQkVCMDBCQ0Y3ODggLyogb3BlbmdsICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5NkFCQTNGQzE0QkM5MDUwMDBENTYyMDQgLyog
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICovLAogCQkJCTZFNjdEMkE0MTI4MEU4
QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovLAogCQkJCTZFNjdEMkE1MTI4
MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLywKIAkJCQlGQkMyMjBERTEy
MzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICovLApAQCAtMjc3
NzksNiArMjc3ODIsNyBAQAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5p
Y29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3RTJFMEUxMkYwRkM5QzAwQzEzMzc5
IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1MzczNTIxMzdCNjUxODAw
MDA4RENFIC8qIFplcm9Qb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk2QUJBM0ZEMTRCQzkw
NTAwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IGY1YzQ0ZTUz
NjQ5Mjc1NDliZjRkNzZhNjNlNTc5ZGVkZGZlOGU3MzkuLjQ3YTQxYzZkMDAyNjViMGNiYTlhNDRm
ZmNjNDExMDZhZTliYTA3NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cApAQCAtMjksMjIgKzI5LDggQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAK
LSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9u
czNET3BlbkdMLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRN
TENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiV2ViR0xP
YmplY3QuaCIKLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5o
PgotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvRmxvYXQz
MkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0ludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVWlu
dDhBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wu
aD4KQEAgLTU3LDMwICs0Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKLXsKLSAgICBFeHRlbnNpb25zM0Qq
IGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkg
ewotICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhf
c3RlbmNpbCIpKSB7Ci0gICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9F
WFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlm
IHN0ZW5jaWwgaXMgdHJ1ZS4KLSAgICAgICAgICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgIH0K
LSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgYm9vbCBpc1ZhbGlkVmVuZG9y
ID0gdHJ1ZTsKLSAgICAgICAgLy8gQ3VycmVudGx5IGluIE1hYyB3ZSBvbmx5IHR1cm4gb24gYW50
aWFsaWFzIGlmIHZlbmRvciBpcyBOVklESUEuCi0gICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSk7
Ci0gICAgICAgIGlmICghc3RkOjpzdHJzdHIodmVuZG9yLCAiTlZJRElBIikpCi0gICAgICAgICAg
ICBpc1ZhbGlkVmVuZG9yID0gZmFsc2U7Ci0gICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAh
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikp
Ci0gICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZl
cl9tdWx0aXNhbXBsZSIpOwotICAgIH0KLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVh
ZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkK
IHsKICAgICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0
ICogNCkKQEAgLTExOSw2NiArODEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVu
ZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNTaQogICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7
CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKCkKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiAhUExBVEZPUk0oUVQpCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKikKLXsKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogY2Fu
dmFzID0gY29udGV4dC0+Y2FudmFzKCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0g
Y2FudmFzLT5idWZmZXIoKTsKLQotICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICog
NDsKLSAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OwotCi0g
ICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcg
dW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7Ci0gICAgaWYgKCFwaXhlbHMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwgdG90YWxCeXRl
cyk7Ci0KLSAgICBpZiAoIW1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKSB7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7Ci0gICAgICAgICAgICAvLyBQ
cmVtdWx0aXBseSBhbHBoYQotICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1
NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICAgICAgcGl4
ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10g
LyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxz
W2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWln
aHQsCi0gICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCks
IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLSNlbmRpZgot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCopCi17Ci0gICAgLy8gTm90IG5lZWRlZCBhdCB0aGUgbW9t
ZW50LCBzbyByZXR1cm4gdGhhdCBub3RoaW5nIHdhcyBkb25lLgotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKikKLXsKLSAgICAvLyBSZWFkaW5n
IHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGlj
aCBpcwotICAgIC8vIGxvc3N5Ci0gICAgaWYgKG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkp
OwotICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkt
PmRhdGEoKTsKLSAgICBpbnQgdG90YWxCeXRlcyA9IDQgKiBtX2N1cnJlbnRXaWR0aCAqIG1fY3Vy
cmVudEhlaWdodDsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRl
cyk7Ci0KLSAgICAvLyBDb252ZXJ0IHRvIFJHQkEKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRv
dGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kg
KyAyXSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKLX0KLQogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYg
KCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpCkBAIC0zMzMsMTEgKzIzNSw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIDo6
Z2xGbHVzaCgpOwogfQogCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lk
dGgsIG1fY3VycmVudEhlaWdodCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBh
cmVUZXh0dXJlKCkKIHsKICAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCkBAIC0zNTksMzUgKzI1
Niw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKICAgICBtX2xh
eWVyQ29tcG9zaXRlZCA9IHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2
ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2FjdGl2ZVRleHR1cmUgPSB0ZXh0dXJlOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRl
eHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NF
UlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmluZEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJpbmRC
dWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQog
ewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtNDAyLDE1OCArMjcwLDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCBidWZmZXIKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1
ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1
ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1
cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYWN0aXZlVGV4dHVy
ZSAmJiB0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgbV9ib3VuZFRleHR1cmUwID0g
dGV4dHVyZTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51
bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0
aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwg
bW9kZUFscGhhKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0Mz
RGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfSAgICAgICAKLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdC
LCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUo
c3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwg
R0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1
ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0
LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRh
cmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1w
ZiByLCBHQzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXIobWFzayk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFyU3RlbmNpbChzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4g
Z3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotCi0gICAgaW50IEdMc2hhZGVyVHlwZTsKLSAgICBBTkdMRVNoYWRlclR5cGUg
c2hhZGVyVHlwZTsKLQotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdM
c2hhZGVyVHlwZSk7Ci0gICAgCi0gICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVS
KQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYg
KEdMc2hhZGVyVHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBT
SEFERVJfVFlQRV9GUkFHTUVOVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsgLy8gSW52YWxp
ZCBzaGFkZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291
cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29u
ZDsKLQotICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwotICAgIFN0cmluZyBzaGFk
ZXJJbmZvTG9nOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRl
clNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJ
bmZvTG9nOwotICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgaWYgKCFpc1ZhbGlk
KQotICAgICAgICByZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUg
Zm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZSAgICAKLQotICAgIGludCB0
cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsK
LQotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0
ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICAKLSAgICA6OmdsU2hhZGVy
U291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoKTsKLSAgICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotICAgIAotICAg
IGludCBHTENvbXBpbGVTdWNjZXNzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIs
IENPTVBJTEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7Ci0gICAgCi0gICAgLy8gQVNTRVJU
IHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVuR0wKLSAg
ICBBU1NFUlQoR0xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKLX0KLQogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CkBAIC01ODIsMTMyICsyOTgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbgogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNl
KEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEN1
bGxGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMoR0Mz
RGVudW0gZnVuYykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhG
dW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJv
b2xlYW4gZmxhZykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhN
YXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0Rj
bGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGV0YWNoU2hhZGVyKHBy
b2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUoR0Mz
RGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEaXNhYmxl
KGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERyYXdBcnJh
eXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJh
d0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwg
R0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQq
PihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xFbmFibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsRmluaXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZs
dXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmx1c2goKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJn
ZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGlu
dCBsZXZlbCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJhbWVidWZm
ZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxl
dmVsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1v
ZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZyb250RmFjZShtb2Rl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0g
dGFyZ2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZW5lcmF0ZU1p
cG1hcEVYVCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVB
dHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAg
OjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgs
ICZtYXhBdHRyaWJ1dGVTaXplKTsKLSAgICBHTGNoYXIgbmFtZVttYXhBdHRyaWJ1dGVTaXplXTsg
Ly8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRp
b24KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAg
IEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4
LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKLSAg
ICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmZvLm5hbWUg
PSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBp
bmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotICAgIAogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbSkgewpA
QCAtNzMwLDE2NiArMzIwLDI2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVu
aWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRlCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBj
b3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEF0dGFjaGVk
U2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQogCi1pbnQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCiB7Ci0gICAgaWYg
KCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRo
ZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAor
ICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3Jl
IHJlYWRpbmcgcGl4ZWxzLgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6
OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQot
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4gbV9hdHRyczsKKyAgICA6OmdsRmx1c2goKTsK
KyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVi
dWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkg
KyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6
Z2xGbHVzaCgpOworICAgIH0KKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2Jv
dW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotR0MzRGVudW0g
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9zeW50aGV0aWNFcnJv
cnMuc2l6ZSgpID4gMCkgewotICAgICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOwotICAgICAgICBHQzNEZW51bSBlcnIg
PSAqaXRlcjsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOwotICAgICAg
ICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJl
dHVybiA6OmdsR2V0RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
dHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmco
bmFtZSkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyKQot
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNz
Q29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVi
dWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVm
ZmVyRVhUKGZyYW1lYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFt
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVm
ZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVm
ZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNE
Ojppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikK
LSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBp
ZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Ci17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3Rvciwg
R0MzRGZsb2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xQ
b2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkK
LXsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBk
cml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAotICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcg
Y2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGbHVzaCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQs
IG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgs
IHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVS
X0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEZsdXNoKCk7Ci0gICAgfQotICAgIDo6
Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0g
ICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBv
biBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVu
dCBHTCB2YXJpYW50cy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdl
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKQEAgLTkxMCwzMDIgKzM2MCw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBpbnRlcm5hbGZvCiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFy
Z2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGlu
dmVydCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2FtcGxlQ292ZXJh
Z2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3Io
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NF
UlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU2hhZGVyU291
cmNlRW50cnkgZW50cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0KLSAgICBtX3No
YWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuYyhm
dW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVu
Y1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNE
dWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2ls
RnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1h
c2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrU2Vw
YXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxP
cChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBh
c3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRl
KGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0
IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0
ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlm
b3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNp
emUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwg
c2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9u
LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQg
djMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00Zihsb2Nh
dGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXpl
KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RpbnQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6
ZWkgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFp
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwg
djEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFy
cmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgMwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlm
b3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBH
QzNEaW50IHYyLCBHQzNEaW50IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJh
eSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9y
bTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBh
cnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBH
QzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgOQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0
cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXpl
LCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAg
QVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZh
bGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVy
dGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIy
ZihpbmRleCwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIs
IHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGlu
dCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkg
c3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXpl
ZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90
PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51
bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9h
dCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEZsb2F0
dihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQpCi0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lM
X0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCiB7CiAgICAgLy8gTmVlZCB0byBlbXVsYXRlIE1BWF9GUkFHTUVOVC9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTIGFuZCBNQVhfVkFSWUlOR19WRUNUT1JTCkBAIC0xMjMxLDE2MyAr
Mzg1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRQ
cm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0g
ICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xp
bnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9H
X0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIE93bkFycmF5UHRyPEdMY2hhcj4g
aW5mbyA9IGFkb3B0QXJyYXlQdHIoc3RhdGljX2Nhc3Q8R0xjaGFyKj4oZmFzdE1hbGxvYyhsZW5n
dGgpKSk7Ci0gICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUs
IGluZm8uZ2V0KCkpOwotCi0gICAgcmV0dXJuIFN0cmluZyhpbmZvLmdldCgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
aXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBz
d2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBERUxFVEVfU1RBVFVTOgotICAgIGNhc2UgU0hBREVS
X1RZUEU6Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0
YXRpY19jYXN0PGludD4oZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQuaXNWYWxpZCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgotICAgICAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAqdmFsdWUg
PSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICp2YWx1ZSA9IGdl
dFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAgKnZhbHVlID0gZ2V0U2hhZGVyU291cmNl
KHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7Ci0gICAgfQotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Ci17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
ICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRv
ciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAK
LQotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0gICAgaWYg
KCFlbnRyeS5pc1ZhbGlkKQotICAgICAgICByZXR1cm4gZW50cnkubG9nOwotCi0gICAgR0xpbnQg
bGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5H
VEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8g
PSBhZG9wdEFycmF5UHRyKHN0YXRpY19jYXN0PEdMY2hhcio+KGZhc3RNYWxsb2MobGVuZ3RoKSkp
OwotICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKGluZm8uZ2V0KCkpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
LXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9y
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAot
Ci0gICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLnNvdXJjZTsKLX0KLQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0s
IGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRl
eCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0x2b2lkKiBwb2ludGVyID0gMDsKLSAg
ICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocG9pbnRlcikpOwotfQotCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIGlm
ICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgewpAQCAtMTQwNywxMzMgKzQwNCw2IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxs
IG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGlt
YWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQotICAgIDo6Z2xU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJl
c3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXpl
LCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1h
Z2VTaXplLCBkYXRhKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZy
YW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJi
dWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZS
QUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsK
LX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGds
R2VuVGV4dHVyZXMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVs
ZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
RGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlVGV4
dHVyZXMoMSwgJnRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVz
aXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQo
ZXJyb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQo
KQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVk
ID0gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Ci19Ci0KLUV4dGVuc2lvbnMz
RCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRl
bnNpb25zKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNE
T3BlbkdMKHRoaXMpKTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQotCiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjhiYmE3ZmQ3ZjUxOWZkNzhjMTY5YTcyOTNj
OWIyYWQ1MjYwZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMCww
ICsxLDExNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5j
bHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3
dGYvQXJyYXlCdWZmZXJWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgorI2lu
Y2x1ZGUgPHd0Zi9JbnQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1VpbnQ4QXJyYXkuaD4KKyNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjZWxpZiBQTEFU
Rk9STShHVEspCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbGlmIFBMQVRGT1JNKFFUKQor
I2luY2x1ZGUgPFF0R2xvYmFsPgorI2luY2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4
dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGlmIChleHRl
bnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsKKyAgICAg
ICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3Rl
bmNpbCIpOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgor
ICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVlOworICAgICAgICAv
LyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVuZG9yIGlz
IE5WSURJQS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKKyAgICAgICAgaWYgKCFzdGQ6
OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgICAgIGlzVmFsaWRWZW5kb3IgPSBm
YWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0
cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkKKyAgICAgICAgICAgIG1fYXR0
cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVuc2lv
bnMtPmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Cisg
ICAgfQorfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgIVBMQVRGT1JNKFFUKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciopCit7CisgICAgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
ciA9IGNhbnZhcy0+YnVmZmVyKCk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0
aCAqIDQ7CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsK
KworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIo
bmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIGlmICghcGl4ZWxzKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFs
Qnl0ZXMpOworCisgICAgaWYgKCFtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkgeworICAgICAgICAgICAg
Ly8gUHJlbXVsdGlwbHkgYWxwaGEKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1p
bigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAg
IHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSAr
IDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBp
eGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdo
dCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisjZW5k
aWYKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKQoreworICAgIC8vIE5vdCBuZWVkZWQgYXQgdGhl
IG1vbWVudCwgc28gcmV0dXJuIHRoYXQgbm90aGluZyB3YXMgZG9uZS4KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopCit7CisgICAgLy8gUmVh
ZGluZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywg
d2hpY2ggaXMKKyAgICAvLyBsb3NzeQorICAgIGlmIChtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBo
YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEg
PSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWln
aHQpKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0
YSgpLT5kYXRhKCk7CisgICAgaW50IHRvdGFsQnl0ZXMgPSA0ICogbV9jdXJyZW50V2lkdGggKiBt
X2N1cnJlbnRIZWlnaHQ7CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFs
Qnl0ZXMpOworCisgICAgLy8gQ29udmVydCB0byBSR0JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOworCisgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Cit9CisKK0ludFNp
emUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0
dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYWN0aXZlVGV4dHVyZSA9
IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NF
UlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQXR0YWNoU2hh
ZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgs
IG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRC
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1
ZmZlcik7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKG1fYWN0aXZlVGV4dHVyZSAmJiB0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCkKKyAgICAgICAgbV9ib3VuZFRleHR1cmUwID0gdGV4dHVyZTsKKyAgICA6OmdsQmluZFRl
eHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymxl
bmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVl
LCBHQzNEY2xhbXBmIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwg
R0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKworCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0g
ZGZhY3RvcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRGdW5j
KHNmYWN0b3IsIGRmYWN0b3IpOworfSAgICAgICAKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0Rl
bnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhh
LCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAw
LCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0g
dXNhZ2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNp
emVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwor
fQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
QzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJu
IDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBmIGcsIEdDM0Rj
bGFtcGYgYiwgR0MzRGNsYW1wZiBhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsQ2xlYXIobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
RGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNs
ZWFyU3RlbmNpbChHQzNEaW50IHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbENsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JN
YXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUs
IEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAg
IEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaW50IEdM
c2hhZGVyVHlwZTsKKyAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKworICAgIGdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlwZSk7CisgICAgCisgICAg
aWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0g
U0hBREVSX1RZUEVfVkVSVEVYOworICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBGUkFHTUVO
VF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KKworICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkZXJT
b3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgIFN0cmluZyB0cmFuc2xh
dGVkU2hhZGVyU291cmNlOworICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOworCisgICAgYm9vbCBp
c1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRm
OCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5m
b0xvZyk7CisKKyAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOworICAgIGVudHJ5LmlzVmFs
aWQgPSBpc1ZhbGlkOworCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm47IC8vIFNo
YWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0
cmFuc2xhdGVkIHNvdXJjZSAgICAKKworICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0g
dHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKKworICAgIGNvbnN0IENTdHJpbmcmIHRy
YW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Cisg
ICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3Ry
aW5nLmRhdGEoKTsKKyAgICAKKyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5z
bGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsKKyAgICAKKyAgICA6Omds
Q29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIAorICAgIGludCBHTENvbXBpbGVTdWNjZXNzOwor
ICAgIAorICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xDb21w
aWxlU3VjY2Vzcyk7CisgICAgCisgICAgLy8gQVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdM
U0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVuR0wKKyAgICBBU1NFUlQoR0xDb21waWxlU3VjY2Vz
cyA9PSBHTF9UUlVFKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyhHQzNEZW51
bSBmdW5jKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0aEZ1bmMo
ZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVh
biBmbGFnKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0aE1hc2so
ZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1w
ZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3Jh
bSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51
bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERpc2FibGUoY2Fw
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBj
b3VudCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRHJhd0FycmF5cyht
b2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNE
aW50cHRyIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRHJh
d0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xGaW5pc2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2go
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGbHVzaCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVu
ZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpm
cmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxl
dmVsKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRl
eHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJn
ZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdlbmVyYXRlTWlwbWFw
RVhUKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1h
eEF0dHJpYnV0ZVNpemUpOworICAgIEdMY2hhciBuYW1lW21heEF0dHJpYnV0ZVNpemVdOyAvLyBH
TF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbgor
ICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xl
bnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1h
eEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworICAgIGlm
ICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZm8ubmFtZSA9IFN0
cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8u
c2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
c2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRl
cnMpCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNv
dW50LCBzaGFkZXJzKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9hdHRy
czsKK30KKworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKK3sKKyAgICBp
ZiAobV9zeW50aGV0aWNFcnJvcnMuc2l6ZSgpID4gMCkgeworICAgICAgICBMaXN0SGFzaFNldDxH
QzNEZW51bT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAg
ICAgICBHQzNEZW51bSBlcnIgPSAqaXRlcjsKKyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVt
b3ZlKGl0ZXIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQorewor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7
Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0
dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7
CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30K
KworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1
cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sK
KyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOworfQorCitH
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qg
dGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRl
eHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0
IHdpZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5lV2lkdGgo
d2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFy
YW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBpeGVsU3RvcmVpKHBu
YW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQo
R0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0
byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cy4KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBp
bnZlcnQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29y
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lk
dGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgQVNT
RVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIFNoYWRlclNv
dXJjZUVudHJ5IGVudHJ5OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9z
aGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQg
bWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbEZ1bmMo
ZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNp
bEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBt
YXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2ls
T3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpw
YXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNz
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0
ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9h
dCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1l
dGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCB2
YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
aSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBz
aXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAy
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yZnYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zZihsb2NhdGlv
biwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7Cisg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0
IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGYobG9j
YXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNp
emVpIHNpemUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0x
aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAs
IHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBh
cnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDMKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5p
Zm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwg
R0MzRGludCB2MiwgR0MzRGludCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJy
YXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiA0CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZv
cm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwg
R0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDkKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1h
dHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVBy
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAg
IEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xW
YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmli
MmYoaW5kZXgsIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2
Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYy
LCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0Rp
bnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVp
IHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6
ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVu
dW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRGbG9h
dHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJ
TF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVl
KTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBHTHNpemVpIHNpemUgPSAw
OworICAgIE93bkFycmF5UHRyPEdMY2hhcj4gaW5mbyA9IGFkb3B0QXJyYXlQdHIobmV3IEdMY2hh
cltsZW5ndGhdKTsKKyAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAm
c2l6ZSwgaW5mby5nZXQoKSk7CisKKyAgICByZXR1cm4gU3RyaW5nKGluZm8uZ2V0KCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIAor
ICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIERFTEVURV9TVEFUVVM6CisgICAgY2FzZSBT
SEFERVJfVFlQRToKKyAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgKnZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5pc1Zh
bGlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6CisgICAgICAg
IGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICp2
YWx1ZSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgKnZhbHVl
ID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAgICAqdmFsdWUgPSBnZXRTaGFkZXJT
b3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAgICB9Cit9CisKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7IAorCisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAg
ICBpZiAoIWVudHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBH
TGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9H
X0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsgCisKKyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIE93bkFycmF5UHRyPEdMY2hhcj4g
aW5mbyA9IGFkb3B0QXJyYXlQdHIobmV3IEdMY2hhcltsZW5ndGhdKTsKKyAgICA6OmdsR2V0U2hh
ZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZ2V0KCkpOworCisgICAgcmV0
dXJuIFN0cmluZyhpbmZvLmdldCgpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNo
YWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEhhc2hNYXA8UGxhdGZv
cm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIHJldHVybiByZXN1
bHQtPnNlY29uZC5zb3VyY2U7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4
UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1l
dGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUp
OworfQorCitHQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJU
KHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK0dDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0
dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
Y29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
Ly8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hl
biBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFn
ZSBzaXplCisgICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
KiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb21wcmVzc2Vk
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJl
dHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8g
PSAwOworICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30K
KworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgp
OworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsK
KyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQ
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xDcmVhdGVT
aGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdM
X1ZFUlRFWF9TSEFERVIpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVp
bnQgbyA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZUJ1ZmZlcnMo
MSwgJmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVT
aGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQoreworICAgIG1fc3lu
dGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1h
cmtDb250ZXh0Q2hhbmdlZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCit7CisgICAg
bV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjps
YXllckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsK
K30KKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7
CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRy
KG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMu
Z2V0KCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGZmNWEwYTM0NWJkZjY0Yjk3
ODBkNDhkYjY0MjUwNjY3ZGYzMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBA
IC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNo
aXZhbWlkb3dAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJPcGVu
R0xTaGltcy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBp
bnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVy
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121862</attachid>
            <date>2012-01-10 09:59:47 -0800</date>
            <delta_ts>2012-01-10 10:37:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75462-20120111025944.patch</filename>
            <type>text/plain</type>
            <size>89501</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZlZDQ5NDVjZTUwMTY3
YWNhM2Q5M2I5NGU0ZjdlNGYwMTc5Yzk3ZC4uZTQ1Y2NlZGY5N2IyMmU3ZmQ4ZDZhYmQ1YjAyMWZk
OGU4NWRlMmIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4MCBAQAorMjAxMi0wMS0xMCAgQ2hh
bmdTZW9rIE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisKKyAgICAgICAgU3BsaXQgR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wgaW50byBzZXZlcmFsIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IEdyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcCBpbnRvCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCwgR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICYgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAu
CisgICAgICAgIE1vc3Qgb2YgY29tbW9uIEFQSXMgYmV0d2VlbiBnbCBhbmQgZ2xlcyBhcmUgaW4g
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwLgorICAgICAgICBUaGUgb3RoZXIgZ2wg
YW5kIGdsZXMgc3BlY2lmaWMgQVBJcyBhcmUgcGxhY2VkIGFwYXJ0IGluIEdyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcCAmIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTog
QWRkZWQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgICogVGFyZ2V0
LnByaTogQWRkZWQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgICog
V2ViQ29yZS5neXBpOiBBZGRlZCBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIEdyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0
ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVz
b3VyY2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJT
dGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRy
YXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hh
ZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2ls
RnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNT
ZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
NGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1
bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKwogMjAxMi0wMS0xMCAgU3RlcGhl
biBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
U2hpZnQgUGF0aFNraWEgdG8gdXNlIFNraWEncyBuZXcgUmF3SXRlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggMDY3MWJkNzljNjIzMjkxM2E2ZjNjYjNiMmNiOGNkOTZlY2U3Nzc5
Zi4uNTZmYTIzYzk3MDJmZGFkOWEwNmYzMGU2OWM5YjYyNDg4MWJiZjE5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NjA2LDcgKzU2MDYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKIGVuZGlmICAjIEVORCBFTkFCTEVfV0VCR0wKIAogIyAt
LS0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCmluZGV4IDI3OGFjOWIyMWUzNGNmM2RlNzg4OWQwNTVkOWNlMmEwNGUxMjhj
ZTAuLmJkYWJkYWIyNDU0ZjM1N2RiYTk4ZmYwZmRkNDRmY2FkYjQzY2FkYWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtMzczMSw3ICszNzMxLDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEp
IHsKIAogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKyAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9ICQkcmVwbGFjZShQV0QsICJXZWJDb3Jl
IiwgIlRoaXJkUGFydHkvQU5HTEUiKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggN2Q5YmVjNzc1Mzk3
OGM4M2I5ZDk2YTUwODNjOGZjMTc0NzlkNzRmZS4uNjRjNjg3NWFiOTlkMjA1MjQzYmM0MWQxZTdj
ZDcxMGIxNGMwMTNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzgzMyw2ICszODMzLDcgQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVNhbml0aXplci5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGFhYzYwOTljZjcyODAyMWVmZjliZjMzZDk5ZmQyNjA4NTBiYWI4ZmQuLjBkNmZlNzY5NmNkMTlk
ZDQ1YmFkZDVkOGYxNzFhMDVlMzFlNzA5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMyNDYsNiArMzI0Niw3IEBACiAJCTkz
RjlCN0EwMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5Qjc5RTBCQTYwMzI2MDA4NTQw
NjQgLyogSlNDREFUQVNlY3Rpb24uY3BwICovOyB9OwogCQk5M0Y5QjdBMTBCQTYwMzI2MDA4NTQw
NjQgLyogSlNDREFUQVNlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzRjlCNzlGMEJBNjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5o
ICovOyB9OwogCQk5M0ZEQUZDQTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9ySW5zZXJ0QWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0ZEQUZD
OTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9ySW5zZXJ0QWN0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTZBQkE0MTAxNEJDQUE2MDAwRDU2
MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2QUJBNDBGMTRCQ0FBNjAwMEQ1NjIwNCAv
KiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgKi87IH07CiAJCTk3MDU5OTc3MTA3
RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzA1OTk3MzEwN0Q5NzUyMDBBNTBBN0MgLyogUG9s
aWN5Q2FsbGJhY2suY3BwICovOyB9OwogCQk5NzA1OTk3ODEwN0Q5NzUyMDBBNTBBN0MgLyogUG9s
aWN5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MDU5OTc0MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3MDU5OTc5MTA3RDk3
NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5OTc1MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lD
aGVja2VyLmNwcCAqLzsgfTsKQEAgLTEwNTA4LDYgKzEwNTA5LDcgQEAKIAkJOTNGOUI3OUUwQkE2
MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQ0RBVEFTZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNGOUI3OUYwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ0RBVEFTZWN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRkRBRkM5MEIxMTMwNzQwMEUyNzQ2RiAvKiBFZGl0b3JJ
bnNlcnRBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRvcklu
c2VydEFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NkFCQTQwRjE0QkNB
QTYwMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzA1OTk3MzEwN0Q5NzUyMDBB
NTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUG9saWN5Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5NzA1OTk3NDEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9saWN5Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzUxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9saWN5Q2hlY2tlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTUyOCw2ICsyMTUzMCw3IEBACiAJ
CQkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8s
CiAJCQkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICov
LAogCQkJCUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5H
TC5jcHAgKi8sCisJCQkJOTZBQkE0MEYxNEJDQUE2MDAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gb3BlbmdsOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI3ODAzLDYgKzI3ODA2LDcgQEAKIAkJCQlGRDUzNzM1
MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc0
QTg2MjIxNEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5N0QyQUQwMzE0QjgyM0E2MDA5M0RGMzIgLyogRE9NV2luZG93UHJv
cGVydHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTZBQkE0MTAxNEJDQUE2MDAwRDU2MjA0IC8q
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggMTZhM2I0YTljNmRjYWVhMjQ0MWY0
ZjA0MmY1MDI2YTIyMjFhNGU2MS4uNDdhNDFjNmQwMDI2NWIwY2JhOWE0NGZmY2M0MTEwNmFlOWJh
MDc3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0yOSwyMiAr
MjksOCBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAotI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgotI2lu
Y2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KLSNp
bmNsdWRlIDx3dGYvSW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9VaW50OEFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgpAQCAtNTcsMzAg
KzQzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQotewotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9
IGdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlm
IChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsK
LSAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpOwotICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0
cnVlLgotICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgewotICAgICAgICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVlOwotICAg
ICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVu
ZG9yIGlzIE5WSURJQS4KLSAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKLSAgICAgICAgaWYg
KCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKLSAgICAgICAgICAgIGlzVmFsaWRWZW5k
b3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5z
dXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkKLSAgICAgICAgICAg
IG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4
dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
Iik7Ci0gICAgfQotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVz
dWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNTaXplKQogewogICAgIGlmIChw
aXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0KQpAQCAtMTE5
LDY2ICs4MSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
KHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpCiAgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKIH0KIAotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotI2lmICFQTEFURk9STShRVCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsIERy
YXdpbmdCdWZmZXIqKQotewotICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0
LT5jYW52YXMoKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZl
cigpOwotCi0gICAgaW50IHJvd0J5dGVzID0gbV9jdXJyZW50V2lkdGggKiA0OwotICAgIGludCB0
b3RhbEJ5dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7Ci0KLSAgICBPd25BcnJheVB0
cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMgPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFy
W3RvdGFsQnl0ZXNdKTsKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKLQotICAgIGlm
ICghbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpIHsKLSAgICAgICAgICAgIC8vIFByZW11bHRpcGx5IGFs
cGhhCi0gICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSAr
IDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDFdID0g
c3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAg
ICAgICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4
ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYWludFRvQ2FudmFz
KHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotfQotI2VuZGlmCi0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0KikKLXsKLSAgICAvLyBOb3QgbmVlZGVkIGF0IHRoZSBtb21lbnQsIHNvIHJldHVy
biB0aGF0IG5vdGhpbmcgd2FzIGRvbmUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1QYXNzUmVm
UHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
SW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKQotewotICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGll
ZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNoIGlzCi0gICAgLy8g
bG9zc3kKLSAgICBpZiAobV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSk7Ci0gICAgdW5zaWdu
ZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOwotICAg
IGludCB0b3RhbEJ5dGVzID0gNCAqIG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0Owot
Ci0gICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3RhbEJ5dGVzKTsKLQotICAgIC8v
IENvbnZlcnQgdG8gUkdCQQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSAr
PSA0KQotICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKLQotICAg
IHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBpZiAoIXBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSkKQEAgLTMzMywxMSArMjM1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgOjpnbEZsdXNoKCk7CiB9
CiAKLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQog
ewogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKQEAgLTM1OSwzNSArMjU2LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQogICAgIG1fbGF5ZXJDb21wb3NpdGVk
ID0gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZShHQzNE
ZW51bSB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fYWN0aXZl
VGV4dHVyZSA9IHRleHR1cmU7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsK
LSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3Jh
bSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQs
IGJ1ZmZlcik7Ci19Ci0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CkBAIC00MDIsMTU4ICsyNzAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcgogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdl
dCwgcmVuZGVyYnVmZmVyKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4
dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9hY3RpdmVUZXh0dXJlICYmIHRhcmdldCA9
PSBHTF9URVhUVVJFXzJEKQotICAgICAgICBtX2JvdW5kVGV4dHVyZTAgPSB0ZXh0dXJlOwotICAg
IDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNE
Y2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJsZW5kRXF1YXRpb24obW9kZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51
bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwot
fQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9y
LCBHQzNEZW51bSBkZmFjdG9yKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Ci19ICAgICAgIAotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRz
dFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJH
Qiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVm
ZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2Fn
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQnVmZmVyRGF0YSh0YXJn
ZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
LCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zm
c2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6
ZSwgZGF0YSk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHIsIEdDM0RjbGFt
cGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhcihtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJv
b2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBpbnQgR0xzaGFkZXJUeXBlOwotICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOwot
Ci0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsK
LSAgICAKLSAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFERVIpCi0gICAgICAgIHNo
YWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBl
ID09IEZSQUdNRU5UX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZS
QUdNRU5UOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBl
LgotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlm
IChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOwotCi0gICAgU3Ry
aW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0K
LSAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5
LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNl
LCBzaGFkZXJJbmZvTG9nKTsKLQotICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7Ci0gICAg
ZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7Ci0KLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJl
dHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGgg
Y29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAotCi0gICAgaW50IHRyYW5zbGF0ZWRTaGFk
ZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpOwotCi0gICAgY29uc3Qg
Q1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNl
LnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRl
ZFNoYWRlckNTdHJpbmcuZGF0YSgpOwotICAgIAotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVy
LCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5ndGgpOwotICAg
IAotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgCi0gICAgaW50IEdMQ29tcGls
ZVN1Y2Nlc3M7Ci0gICAgCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFU
VVMsICZHTENvbXBpbGVTdWNjZXNzKTsKLSAgICAKLSAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBn
ZW5lcmF0ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAotICAgIEFTU0VSVChHTENv
bXBpbGVTdWNjZXNzID09IEdMX1RSVUUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKQEAgLTU4MiwxMzIgKzI5OCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwg
R0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xE
ZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0
YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERpc2FibGUoY2FwKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50
IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3
QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJz
dCwgY291bnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVudHMoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9m
ZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRHJhd0VsZW1lbnRz
KG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJs
ZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEVu
YWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVy
dGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZl
clRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVt
IHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVY
VCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdlbmVyYXRlTWlwbWFwRVhUKHRhcmdl
dCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewot
ICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKLSAgICA6OmdsR2V0UHJvZ3Jh
bWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0
ZVNpemUpOwotICAgIEdMY2hhciBuYW1lW21heEF0dHJpYnV0ZVNpemVdOyAvLyBHTF9BQ1RJVkVf
QVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbgotICAgIEdMc2l6
ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUg
PSAwOwotICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0
ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOwotICAgIGlmICghbmFtZUxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1l
LCBuYW1lTGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNp
emU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtKSB7CkBAIC03MzAsMTY2ICsz
MjAsMjYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9y
bTNET2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Ci19CiAKLWludCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJp
bmcmIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKIHsKLSAgICBpZiAoIXByb2dyYW0pCi0g
ICAgICAgIHJldHVybiAtMTsKLQorICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNo
IGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCisgICAgLy8gYWxsIHBy
ZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhl
bHMuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1HcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KQotewotICAgIHJldHVybiBtX2F0dHJzOworICAgIDo6Z2xGbHVzaCgpOworICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5
LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xf
Q09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEZsdXNoKCk7Cisg
ICAgfQorICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgZGF0YSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9t
dWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi1HQzNEZW51bSBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RXJyb3IoKQotewotICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAw
KSB7Ci0gICAgICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRlciA9IG1fc3lu
dGhldGljRXJyb3JzLmJlZ2luKCk7Ci0gICAgICAgIEdDM0RlbnVtIGVyciA9ICppdGVyOwotICAg
ICAgICBtX3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7Ci0gICAgICAgIHJldHVybiBlcnI7
Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRF
cnJvcigpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyhHQzNEZW51
bSBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBTdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
bW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsSGludCh0YXJnZXQs
IG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVy
biBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6Omds
SXNCdWZmZXIoYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6Omlz
RW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
cmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAg
ICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVi
dWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6
OmdsSXNQcm9ncmFtKHByb2dyYW0pOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQz
RDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAg
aWYgKCFyZW5kZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVy
YnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1
cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpn
bElzU2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjpp
c1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkK
LSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NF
UlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbExpbmtQcm9n
cmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaShH
QzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5p
dHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFBvbHlnb25PZmZzZXQo
ZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIC8vIEZJ
WE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMg
Zml4ZWQsIGkuZS4sCi0gICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQg
YmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbEZsdXNoKCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAg
ICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwg
eCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5F
QVIpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
bV9mYm8pOwotICAgICAgICA6OmdsRmx1c2goKTsKLSAgICB9Ci0gICAgOjpnbFJlYWRQaXhlbHMo
eCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZC
Tyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigp
Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIG9uIGRlc2t0b3AgT3Bl
bkdMLiBXZSBuZWVkIHRvIGhhdmUgaWZkZWZzIGZvciB0aGUgZGlmZmVyZW50IEdMIHZhcmlhbnRz
LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkgewpAQCAtOTEwLDMwMiArMzYwLDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsZm8KICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Ft
cGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52
ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRy
eTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291cmNlTWFw
LnNldChzaGFkZXIsIGVudHJ5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFz
ayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUo
ZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbE1hc2soR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsU3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBt
YXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZh
aWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwg
emZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVy
ZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgdmFsdWUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJp
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNE
c2l6ZWkgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9y
bTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0yZihsb2NhdGlv
biwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEs
IHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8g
RklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9y
bTFpKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0x
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaShHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQg
djEsIEdDM0RpbnQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVu
aWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXpl
aSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiAzCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0zaXYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRp
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdD
M0RpbnQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00
aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkg
c2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
NAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRy
aXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xV
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXpl
KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRp
b24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwg
YXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VXNlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3Jh
bSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmFsaWRhdGVQcm9ncmFt
KHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJy
YXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjFm
dihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwg
djEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRl
eEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEs
IEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZl
cnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0Rl
bnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0Rp
bnRwdHIgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNE
Ym9vbGVhbiogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdl
dEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRCdWZm
ZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKLSAgICAgICAg
YXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwg
ZWl0aGVyIHdvcmtzLgotICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkK
IHsKICAgICAvLyBOZWVkIHRvIGVtdWxhdGUgTUFYX0ZSQUdNRU5UL1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlMgYW5kIE1BWF9WQVJZSU5HX1ZFQ1RPUlMKQEAgLTEyMzEsMTYzICszODUsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9n
cmFtLCBwbmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFBy
b2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJv
Z3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBsZW5ndGggPSAw
OwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVu
Z3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAg
IEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgT3duQXJyYXlQdHI8R0xjaGFyPiBpbmZvID0gYWRvcHRB
cnJheVB0cihuZXcgR0xjaGFyW2xlbmd0aF0pOwotICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhw
cm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmdldCgpKTsKLQotICAgIHJldHVybiBTdHJpbmco
aW5mby5nZXQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hh
ZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7Ci0gICAgCi0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgREVMRVRFX1NU
QVRVUzoKLSAgICBjYXNlIFNIQURFUl9UWVBFOgotICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hh
ZGVyLCBwbmFtZSwgdmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENPTVBJTEVfU1RB
VFVTOgotICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0g
ICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJl
c3VsdC0+c2Vjb25kLmlzVmFsaWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElORk9fTE9H
X0xFTkdUSDoKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkg
ewotICAgICAgICAgICAgKnZhbHVlID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAqdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgICp2
YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOwot
ICAgIH0KLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRl
clNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChz
aGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJl
c3VsdC0+c2Vjb25kOwotICAgIGlmICghZW50cnkuaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIGVu
dHJ5LmxvZzsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgT3du
QXJyYXlQdHI8R0xjaGFyPiBpbmZvID0gYWRvcHRBcnJheVB0cihuZXcgR0xjaGFyW2xlbmd0aF0p
OwotICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKGluZm8uZ2V0KCkpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
LXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9y
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAot
Ci0gICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLnNvdXJjZTsKLX0KLQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0s
IGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRl
eCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0x2b2lkKiBwb2ludGVyID0gMDsKLSAg
ICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocG9pbnRlcikpOwotfQotCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewogICAgIGlm
ICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgewpAQCAtMTQwNywxMzMgKzQwNCw2IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxs
IG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGlt
YWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQotICAgIDo6Z2xU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJl
c3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXpl
LCBkYXRhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1h
Z2VTaXplLCBkYXRhKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQg
byA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZy
YW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJi
dWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZS
QUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsK
LX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGds
R2VuVGV4dHVyZXMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2Jq
ZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVs
ZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
RGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlVGV4
dHVyZXMoMSwgJnRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVz
aXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQo
ZXJyb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQo
KQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVk
ID0gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Ci19Ci0KLUV4dGVuc2lvbnMz
RCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRl
bnNpb25zKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNE
T3BlbkdMKHRoaXMpKTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQotCiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjhiYmE3ZmQ3ZjUxOWZkNzhjMTY5YTcyOTNj
OWIyYWQ1MjYwZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMCww
ICsxLDExNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCisjaW5j
bHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3
dGYvQXJyYXlCdWZmZXJWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL0Zsb2F0MzJBcnJheS5oPgorI2lu
Y2x1ZGUgPHd0Zi9JbnQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1VpbnQ4QXJyYXkuaD4KKyNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjZWxpZiBQTEFU
Rk9STShHVEspCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbGlmIFBMQVRGT1JNKFFUKQor
I2luY2x1ZGUgPFF0R2xvYmFsPgorI2luY2x1ZGUgPGNhaXJvL09wZW5HTFNoaW1zLmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4
dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGlmIChleHRl
bnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsKKyAgICAg
ICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3Rl
bmNpbCIpOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgor
ICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVlOworICAgICAgICAv
LyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVuZG9yIGlz
IE5WSURJQS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKKyAgICAgICAgaWYgKCFzdGQ6
OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgICAgIGlzVmFsaWRWZW5kb3IgPSBm
YWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0
cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkKKyAgICAgICAgICAgIG1fYXR0
cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVuc2lv
bnMtPmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Cisg
ICAgfQorfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgIVBMQVRGT1JNKFFUKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciopCit7CisgICAgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
ciA9IGNhbnZhcy0+YnVmZmVyKCk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0
aCAqIDQ7CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsK
KworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQdHIo
bmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIGlmICghcGl4ZWxzKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFs
Qnl0ZXMpOworCisgICAgaWYgKCFtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkgeworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkgeworICAgICAgICAgICAg
Ly8gUHJlbXVsdGlwbHkgYWxwaGEKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1p
bigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAg
IHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSAr
IDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBp
eGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdo
dCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisjZW5k
aWYKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKQoreworICAgIC8vIE5vdCBuZWVkZWQgYXQgdGhl
IG1vbWVudCwgc28gcmV0dXJuIHRoYXQgbm90aGluZyB3YXMgZG9uZS4KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopCit7CisgICAgLy8gUmVh
ZGluZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywg
d2hpY2ggaXMKKyAgICAvLyBsb3NzeQorICAgIGlmIChtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBo
YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEg
PSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWln
aHQpKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0
YSgpLT5kYXRhKCk7CisgICAgaW50IHRvdGFsQnl0ZXMgPSA0ICogbV9jdXJyZW50V2lkdGggKiBt
X2N1cnJlbnRIZWlnaHQ7CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFs
Qnl0ZXMpOworCisgICAgLy8gQ29udmVydCB0byBSR0JBCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOworCisgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Cit9CisKK0ludFNp
emUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0
dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYWN0aXZlVGV4dHVyZSA9
IHRleHR1cmU7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NF
UlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQXR0YWNoU2hh
ZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgs
IG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRC
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1
ZmZlcik7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKG1fYWN0aXZlVGV4dHVyZSAmJiB0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCkKKyAgICAgICAgbV9ib3VuZFRleHR1cmUwID0gdGV4dHVyZTsKKyAgICA6OmdsQmluZFRl
eHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymxl
bmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVl
LCBHQzNEY2xhbXBmIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwg
R0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKworCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0g
ZGZhY3RvcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRGdW5j
KHNmYWN0b3IsIGRmYWN0b3IpOworfSAgICAgICAKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0Rl
bnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhh
LCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAw
LCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0g
dXNhZ2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNp
emVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwor
fQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
QzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJu
IDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBmIGcsIEdDM0Rj
bGFtcGYgYiwgR0MzRGNsYW1wZiBhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsQ2xlYXIobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
RGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNs
ZWFyU3RlbmNpbChHQzNEaW50IHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbENsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JN
YXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUs
IEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAg
IEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaW50IEdM
c2hhZGVyVHlwZTsKKyAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKworICAgIGdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlwZSk7CisgICAgCisgICAg
aWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0g
U0hBREVSX1RZUEVfVkVSVEVYOworICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBGUkFHTUVO
VF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KKworICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkZXJT
b3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgIFN0cmluZyB0cmFuc2xh
dGVkU2hhZGVyU291cmNlOworICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOworCisgICAgYm9vbCBp
c1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRm
OCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5m
b0xvZyk7CisKKyAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOworICAgIGVudHJ5LmlzVmFs
aWQgPSBpc1ZhbGlkOworCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm47IC8vIFNo
YWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0
cmFuc2xhdGVkIHNvdXJjZSAgICAKKworICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0g
dHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKKworICAgIGNvbnN0IENTdHJpbmcmIHRy
YW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Cisg
ICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3Ry
aW5nLmRhdGEoKTsKKyAgICAKKyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5z
bGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsKKyAgICAKKyAgICA6Omds
Q29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIAorICAgIGludCBHTENvbXBpbGVTdWNjZXNzOwor
ICAgIAorICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xDb21w
aWxlU3VjY2Vzcyk7CisgICAgCisgICAgLy8gQVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdM
U0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVuR0wKKyAgICBBU1NFUlQoR0xDb21waWxlU3VjY2Vz
cyA9PSBHTF9UUlVFKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyhHQzNEZW51
bSBmdW5jKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0aEZ1bmMo
ZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVh
biBmbGFnKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0aE1hc2so
ZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1w
ZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3Jh
bSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51
bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERpc2FibGUoY2Fw
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBj
b3VudCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRHJhd0FycmF5cyht
b2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNE
aW50cHRyIG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRHJh
d0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xGaW5pc2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2go
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGbHVzaCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVu
ZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpm
cmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxl
dmVsKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRl
eHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJn
ZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdlbmVyYXRlTWlwbWFw
RVhUKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1h
eEF0dHJpYnV0ZVNpemUpOworICAgIEdMY2hhciBuYW1lW21heEF0dHJpYnV0ZVNpemVdOyAvLyBH
TF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbgor
ICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xl
bnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1h
eEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOworICAgIGlm
ICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGluZm8ubmFtZSA9IFN0
cmluZyhuYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8u
c2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisgICAgCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
c2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRl
cnMpCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNv
dW50LCBzaGFkZXJzKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAgICByZXR1cm4gbV9hdHRy
czsKK30KKworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKK3sKKyAgICBp
ZiAobV9zeW50aGV0aWNFcnJvcnMuc2l6ZSgpID4gMCkgeworICAgICAgICBMaXN0SGFzaFNldDxH
QzNEZW51bT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bnRoZXRpY0Vycm9ycy5iZWdpbigpOworICAg
ICAgICBHQzNEZW51bSBlcnIgPSAqaXRlcjsKKyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVt
b3ZlKGl0ZXIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQorewor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7
Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0
dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7
CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30K
KworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1
cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sK
KyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOworfQorCitH
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qg
dGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRl
eHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0
IHdpZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5lV2lkdGgo
d2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFy
YW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBpeGVsU3RvcmVpKHBu
YW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQo
R0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0
byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cy4KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBp
bnZlcnQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNhbXBsZUNvdmVy
YWdlKHZhbHVlLCBpbnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29y
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lk
dGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgQVNT
RVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIFNoYWRlclNv
dXJjZUVudHJ5IGVudHJ5OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9z
aGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQg
bWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbEZ1bmMo
ZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNp
bEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBt
YXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2ls
T3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpw
YXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNz
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0
ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9h
dCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1l
dGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCB2
YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVy
aSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBz
aXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAy
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yZnYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zZihsb2NhdGlv
biwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7Cisg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0
IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGYobG9j
YXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNp
emVpIHNpemUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0x
aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAs
IHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBh
cnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDMKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5p
Zm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwg
R0MzRGludCB2MiwgR0MzRGludCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJy
YXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiA0CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZv
cm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwg
YXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwg
R0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDkKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1h
dHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVBy
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAg
IEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xW
YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmli
MmYoaW5kZXgsIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2
Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYy
LCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0Rp
bnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVp
IHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6
ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVu
dW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRGbG9h
dHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJ
TF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVl
KTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBHTHNpemVpIHNpemUgPSAw
OworICAgIE93bkFycmF5UHRyPEdMY2hhcj4gaW5mbyA9IGFkb3B0QXJyYXlQdHIobmV3IEdMY2hh
cltsZW5ndGhdKTsKKyAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAm
c2l6ZSwgaW5mby5nZXQoKSk7CisKKyAgICByZXR1cm4gU3RyaW5nKGluZm8uZ2V0KCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIAor
ICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIERFTEVURV9TVEFUVVM6CisgICAgY2FzZSBT
SEFERVJfVFlQRToKKyAgICAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKKyAgICAgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgKnZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5pc1Zh
bGlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6CisgICAgICAg
IGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICp2
YWx1ZSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgKnZhbHVl
ID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAgICAqdmFsdWUgPSBnZXRTaGFkZXJT
b3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAgICB9Cit9CisKK1N0cmlu
ZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7IAorCisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAg
ICBpZiAoIWVudHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBH
TGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9H
X0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsgCisKKyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIE93bkFycmF5UHRyPEdMY2hhcj4g
aW5mbyA9IGFkb3B0QXJyYXlQdHIobmV3IEdMY2hhcltsZW5ndGhdKTsKKyAgICA6OmdsR2V0U2hh
ZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZ2V0KCkpOworCisgICAgcmV0
dXJuIFN0cmluZyhpbmZvLmdldCgpKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNo
YWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEhhc2hNYXA8UGxhdGZv
cm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIHJldHVybiByZXN1
bHQtPnNlY29uZC5zb3VyY2U7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4
UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1l
dGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUp
OworfQorCitHQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJU
KHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xH
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK0dDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0
dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
Y29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
Ly8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hl
biBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFn
ZSBzaXplCisgICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
KiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb21wcmVzc2Vk
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOworICAgIHJl
dHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8g
PSAwOworICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30K
KworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgp
OworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJi
dWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsK
KyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQ
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xDcmVhdGVT
aGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdM
X1ZFUlRFWF9TSEFERVIpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVp
bnQgbyA9IDA7CisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZUJ1ZmZlcnMo
MSwgJmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVT
aGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQoreworICAgIG1fc3lu
dGhldGljRXJyb3JzLmFkZChlcnJvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1h
cmtDb250ZXh0Q2hhbmdlZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCit7CisgICAg
bV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjps
YXllckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsK
K30KKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7
CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRy
KG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMu
Z2V0KCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGZmNWEwYTM0NWJkZjY0Yjk3
ODBkNDhkYjY0MjUwNjY3ZGYzMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBA
IC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNo
aXZhbWlkb3dAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJPcGVu
R0xTaGltcy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBp
bnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVy
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121866</attachid>
            <date>2012-01-10 10:37:17 -0800</date>
            <delta_ts>2012-01-12 08:38:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75462-20120111033715.patch</filename>
            <type>text/plain</type>
            <size>89673</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDlkMmUwNGE1YTZjZjFj
YjQ2NzIwNDQyNTkyOTliYjkzNzQ0YTZhZC4uMDU2ZmUzNmE4ZjdkZDJiOTRmZjNiYTYyNGIzN2Y0
ZjU1NTVjODU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4MCBAQAorMjAxMi0wMS0xMCAgQ2hh
bmdTZW9rIE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisKKyAgICAgICAgU3BsaXQgR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wgaW50byBzZXZlcmFsIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IEdyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcCBpbnRvCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCwgR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICYgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAu
CisgICAgICAgIE1vc3Qgb2YgY29tbW9uIEFQSXMgYmV0d2VlbiBnbCBhbmQgZ2xlcyBhcmUgaW4g
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwLgorICAgICAgICBUaGUgb3RoZXIgZ2wg
YW5kIGdsZXMgc3BlY2lmaWMgQVBJcyBhcmUgcGxhY2VkIGFwYXJ0IGluIEdyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcCAmIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTog
QWRkZWQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgICogVGFyZ2V0
LnByaTogQWRkZWQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgICog
V2ViQ29yZS5neXBpOiBBZGRlZCBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIEdyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0
ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVz
b3VyY2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZl
clNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJT
dGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRy
YXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hh
ZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2ls
RnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNT
ZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
NGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2UyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1
bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKwogMjAxMi0wMS0xMCAgUGF2ZWwg
RmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLCBm
b2xsb3cgdXAgdG8gcjEwNDU4NjogZml4IGFzc2VydGlvbiB3aXRoaW4gdGhlIGxvb3AuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2NDg2ODk3NGMzODgyYjg4YWIwOGQyOGI5Zjdm
ZmVhMGY5YWU0NzIwLi5iZDIyMzM0MjhiMmRiMDllYmFmZDA2NWE4MWU4ZjgxNDRhNzE3Y2E5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU2MDgsNyArNTYwOCw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogZW5kaWYgICMgRU5EIEVOQUJMRV9X
RUJHTAogCiAjIC0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZDUwM2Y1ZTRmNWFjMDc4OGE3ZmQ0MDI2YjMy
OThiNWJkMDFkMTUwYy4uOTBiY2MwNmY2YzQzYzUxYjBhOTQxODljYzQ1YTVhMDVhMDc0ZDI0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCkBAIC0zNzMzLDcgKzM3MzMsOCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfV0VCR0w9MSkgewogCiAgICAgICAgIFNPVVJDRVMgKz0gXAogICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgXAotICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwCiAKICAgICAgICAgQU5HTEVfRElSID0gJCRyZXBsYWNlKFBX
RCwgIldlYkNvcmUiLCAiVGhpcmRQYXJ0eS9BTkdMRSIpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBj
NDEzZjU4MmEyZWJhN2JiZGVkZGY2MmMxMTQyN2IxM2JkMmYyOTQ2Li42MzBlZDE5MDY2ZjYzOGQ3
OTlkNzJkMDVkMGI4MmUyZmNkODMzMzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zODM1LDYgKzM4
MzUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlU2FuaXRpemVy
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMTU0OTE1NzE2ZjYwMWRmOTRlMjYxZDQwMDRiMjg4YjNkN2ZhNjUwYi4uZTJi
NWQxOWRjOTU0MTc4MzYzYjExMjkyMjQ0OWZhOTY5ZTkyNjBiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzI0OCw2ICszMjQ4
LDcgQEAKIAkJOTNGOUI3QTAwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNzlFMEJB
NjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5jcHAgKi87IH07CiAJCTkzRjlCN0ExMEJB
NjAzMjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGOUI3OUYwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RB
VEFTZWN0aW9uLmggKi87IH07CiAJCTkzRkRBRkNBMEIxMTMwNzQwMEUyNzQ2RiAvKiBFZGl0b3JJ
bnNlcnRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzRkRBRkM5MEIxMTMwNzQwMEUyNzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5NkFCQTQyMzE0
QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTZBQkE0MjIxNEJDQjgw
RTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCAqLzsgfTsKIAkJ
OTcwNTk5NzcxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5OTczMTA3RDk3NTIwMEE1
MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5jcHAgKi87IH07CiAJCTk3MDU5OTc4MTA3RDk3NTIwMEE1
MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcwNTk5NzQxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNhbGxiYWNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTcw
NTk5NzkxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwNTk5NzUxMDdEOTc1MjAwQTUwQTdD
IC8qIFBvbGljeUNoZWNrZXIuY3BwICovOyB9OwpAQCAtMTA1MTIsNiArMTA1MTMsNyBAQAogCQk5
M0Y5Qjc5RTBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDREFUQVNlY3Rpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0Y5Qjc5RjBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNl
Y3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDREFUQVNlY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGREFGQzkwQjExMzA3NDAwRTI3NDZG
IC8qIEVkaXRvckluc2VydEFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRWRpdG9ySW5zZXJ0QWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk2
QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MDU5OTcz
MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb2xpY3lDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MDU5OTc0MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2xpY3lDYWxsYmFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzA1OTk3NTEwN0Q5NzUyMDBBNTBBN0MgLyogUG9s
aWN5Q2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2xp
Y3lDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTM0LDYgKzIx
NTM2LDcgQEAKIAkJCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3Bl
bkdMLmNwcCAqLywKIAkJCQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNE
T3BlbkdMLmggKi8sCiAJCQkJRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcCAqLywKKwkJCQk5NkFCQTQyMjE0QkNCODBFMDBENTYyMDQgLyogR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBvcGVu
Z2w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjYwMzIsNiArMjYwMzUsNyBAQAog
CQkJCTZFMjFDNkMyMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQ5RkZCRjFEMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0Nv
bnRleHQzRE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZCQzIyMERGMTIzN0ZCRUIwMEJDRjc4
OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NkFC
QTQyMzE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJFRDk3NzEwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNz
Q29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzdCNDA0MEIyMkYzN0MwMDA0QkVD
NiAvKiBHcmFwaGljc0NvbnRleHRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjU4MEIwQzBG
MTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IDE2YTNiNGE5YzZkY2FlYTI0NDFm
NGYwNDJmNTAyNmEyMjIxYTRlNjEuLjQ3YTQxYzZkMDAyNjViMGNiYTlhNDRmZmNjNDExMDZhZTli
YTA3NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMjksMjIg
KzI5LDggQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKLSNpbmNsdWRlICJD
YW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKLSNp
bmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUg
PHd0Zi9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL0ludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVWludDhBcnJheS5oPgot
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KQEAgLTU3LDMw
ICs0Myw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKLXsKLSAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBp
ZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7
Ci0gICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcGFja2VkX2Rl
cHRoX3N0ZW5jaWwiKTsKLSAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMg
dHJ1ZS4KLSAgICAgICAgICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgYm9vbCBpc1ZhbGlkVmVuZG9yID0gdHJ1ZTsKLSAg
ICAgICAgLy8gQ3VycmVudGx5IGluIE1hYyB3ZSBvbmx5IHR1cm4gb24gYW50aWFsaWFzIGlmIHZl
bmRvciBpcyBOVklESUEuCi0gICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSk7Ci0gICAgICAgIGlm
ICghc3RkOjpzdHJzdHIodmVuZG9yLCAiTlZJRElBIikpCi0gICAgICAgICAgICBpc1ZhbGlkVmVu
ZG9yID0gZmFsc2U7Ci0gICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+
c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikpCi0gICAgICAgICAg
ICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSIpOwotICAgIH0KLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKIHsKICAgICBpZiAo
cGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkKQEAgLTEx
OSw2NiArODEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0
cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNTaQogICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CiB9CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLSNpZiAhUExBVEZPUk0oUVQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBE
cmF3aW5nQnVmZmVyKikKLXsKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4
dC0+Y2FudmFzKCk7Ci0gICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZm
ZXIoKTsKLQotICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKLSAgICBpbnQg
dG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OwotCi0gICAgT3duQXJyYXlQ
dHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hh
clt0b3RhbEJ5dGVzXSk7Ci0gICAgaWYgKCFwaXhlbHMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwgdG90YWxCeXRlcyk7Ci0KLSAgICBp
ZiAoIW1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7Ci0gICAgICAgICAgICAvLyBQcmVtdWx0aXBseSBh
bHBoYQotICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kg
KyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9
IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAg
ICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBp
eGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGFpbnRUb0NhbnZh
cyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIGltYWdlQnVmZmVy
LT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLSNlbmRpZgotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCopCi17Ci0gICAgLy8gTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50LCBzbyByZXR1
cm4gdGhhdCBub3RoaW5nIHdhcyBkb25lLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKikKLXsKLSAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxp
ZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcwotICAgIC8v
IGxvc3N5Ci0gICAgaWYgKG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3Jl
YXRlKEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOwotICAgIHVuc2ln
bmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKLSAg
ICBpbnQgdG90YWxCeXRlcyA9IDQgKiBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodDsK
LQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7Ci0KLSAgICAv
LyBDb252ZXJ0IHRvIFJHQkEKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkg
Kz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7Ci0KLSAg
ICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKCFwbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEKCkpCkBAIC0zMzMsMTEgKzIzNSw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIDo6Z2xGbHVzaCgpOwog
fQogCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkK
IHsKICAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCkBAIC0zNTksMzUgKzI1Niw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKICAgICBtX2xheWVyQ29tcG9zaXRl
ZCA9IHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2FjdGl2
ZVRleHR1cmUgPSB0ZXh0dXJlOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7
Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dy
YW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0
LCBidWZmZXIpOwotfQotCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQogewogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwpAQCAtNDAyLDE1OCArMjcwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJn
ZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYWN0aXZlVGV4dHVyZSAmJiB0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgbV9ib3VuZFRleHR1cmUwID0gdGV4dHVyZTsKLSAg
ICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0Mz
RGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVu
dW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsK
LX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3Rv
ciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfSAgICAgICAKLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBk
c3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RS
R0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFy
Z2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9m
ZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNp
emUsIGRhdGEpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xh
bXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXIobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbENsZWFyU3RlbmNpbChzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
b29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgaW50IEdMc2hhZGVyVHlwZTsKLSAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsK
LQotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlwZSk7
Ci0gICAgCi0gICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQotICAgICAgICBz
aGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlw
ZSA9PSBGUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9G
UkFHTUVOVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFkZXIgdHlw
ZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKLQotICAgIFN0
cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwotICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOwot
Ci0gICAgYm9vbCBpc1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRy
eS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZSwgc2hhZGVySW5mb0xvZyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwotICAg
IGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICBy
ZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRo
IGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZSAgICAKLQotICAgIGludCB0cmFuc2xhdGVkU2hh
ZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKLQotICAgIGNvbnN0
IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0
ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICAKLSAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRl
ciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsKLSAg
ICAKLSAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotICAgIAotICAgIGludCBHTENvbXBp
bGVTdWNjZXNzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RB
VFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7Ci0gICAgCi0gICAgLy8gQVNTRVJUIHRoYXQgQU5HTEUg
Z2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVuR0wKLSAgICBBU1NFUlQoR0xD
b21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CkBAIC01ODIsMTMyICsyOTgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1v
ZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEN1bGxGYWNlKG1vZGUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIs
IEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
RGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRl
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUoR0MzRGVudW0gY2FwKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEaXNhYmxlKGNhcCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWlu
dCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJh
d0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmly
c3QsIGNvdW50KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBv
ZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERyYXdFbGVtZW50
cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFi
bGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xF
bmFibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsRmluaXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmx1c2goKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRF
WFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcEVYVCh0YXJn
ZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsK
LSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dy
YW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1
dGVTaXplKTsKLSAgICBHTGNoYXIgbmFtZVttYXhBdHRyaWJ1dGVTaXplXTsgLy8gR0xfQUNUSVZF
X0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24KLSAgICBHTHNp
emVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBl
ID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1
dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKLSAgICBpZiAoIW5hbWVM
ZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFt
ZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBz
aXplOwotICAgIHJldHVybiB0cnVlOwotfQotICAgIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4
LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbSkgewpAQCAtNzMwLDE2NiAr
MzIwLDI2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZv
cm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCiB7Ci0gICAgaWYgKCFwcm9ncmFtKQot
ICAgICAgICByZXR1cm4gLTE7Ci0KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVz
aCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAgIC8vIGFsbCBw
cmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4
ZWxzLgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsR2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVz
KCkKLXsKLSAgICByZXR1cm4gbV9hdHRyczsKKyAgICA6OmdsRmx1c2goKTsKKyAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJB
TUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwg
eSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdM
X0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xGbHVzaCgpOwor
ICAgIH0KKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotR0MzRGVudW0gR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9zeW50aGV0aWNFcnJvcnMuc2l6ZSgpID4g
MCkgewotICAgICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5
bnRoZXRpY0Vycm9ycy5iZWdpbigpOwotICAgICAgICBHQzNEZW51bSBlcnIgPSAqaXRlcjsKLSAg
ICAgICAgbV9zeW50aGV0aWNFcnJvcnMucmVtb3ZlKGl0ZXIpOwotICAgICAgICByZXR1cm4gZXJy
OwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsR2V0
RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVu
dW0gbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEhpbnQodGFyZ2V0
LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1
cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpn
bElzQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjpp
c0VuYWJsZWQoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0g
ICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1l
YnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4g
OjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAg
IGlmICghcmVuZGVyYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRl
cmJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6
Z2xJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6
aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNT
RVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xMaW5rUHJv
Z3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWko
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVu
aXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xQb2x5Z29uT2Zmc2V0
KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxz
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICAvLyBG
SVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlz
IGZpeGVkLCBpLmUuLAotICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxk
IGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xGbHVzaCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5k
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAg
ICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQs
IHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElO
RUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fZmJvKTsKLSAgICAgICAgOjpnbEZsdXNoKCk7Ci0gICAgfQotICAgIDo6Z2xSZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVG
Qk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9w
ZW5HTC4gV2UgbmVlZCB0byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50
cy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpIHsKQEAgLTkxMCwzMDIgKzM2MCw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBp
bnRlcm5hbGZvCiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNh
bXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGlu
dmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsK
LQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU2hhZGVyU291cmNlRW50cnkgZW50
cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0KLSAgICBtX3NoYWRlclNvdXJjZU1h
cC5zZXQoc2hhZGVyLCBlbnRyeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1h
c2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdD
M0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRl
KGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0
ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwg
bWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBm
YWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWws
IHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRl
cmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVy
aShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZv
cm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYx
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRp
b24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlv
biwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYy
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYx
LCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8v
IEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZv
cm0xaShsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
MWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwg
c2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50
IHYxLCBHQzNEaW50IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xV
bmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6
ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgMwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBH
QzNEaW50IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3Jt
NGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNpemVp
IHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRpdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0
cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6
ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2Us
IGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlk
YXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dy
YW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZhbGlkYXRlUHJvZ3Jh
bShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFy
cmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAs
IHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2
MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYx
LCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNE
ZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNE
aW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVy
dGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0Mz
RGJvb2xlYW4qIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xH
ZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0QnVm
ZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCi0gICAgICAg
IGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQs
IGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQotCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUp
CiB7CiAgICAgLy8gTmVlZCB0byBlbXVsYXRlIE1BWF9GUkFHTUVOVC9WRVJURVhfVU5JRk9STV9W
RUNUT1JTIGFuZCBNQVhfVkFSWUlOR19WRUNUT1JTCkBAIC0xMjMxLDE2MyArMzg1LDYgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJv
Z3JhbSwgcG5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQ
cm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHBy
b2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbGVuZ3RoID0g
MDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxl
bmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAg
ICBHTHNpemVpIHNpemUgPSAwOwotICAgIE93bkFycmF5UHRyPEdMY2hhcj4gaW5mbyA9IGFkb3B0
QXJyYXlQdHIobmV3IEdMY2hhcltsZW5ndGhdKTsKLSAgICA6OmdsR2V0UHJvZ3JhbUluZm9Mb2co
cHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5nZXQoKSk7Ci0KLSAgICByZXR1cm4gU3RyaW5n
KGluZm8uZ2V0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNo
YWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOwotICAgIAotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIERFTEVURV9T
VEFUVVM6Ci0gICAgY2FzZSBTSEFERVJfVFlQRToKLSAgICAgICAgOjpnbEdldFNoYWRlcml2KHNo
YWRlciwgcG5hbWUsIHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDT01QSUxFX1NU
QVRVUzoKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewot
ICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pihy
ZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJTkZPX0xP
R19MRU5HVEg6Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkp
IHsKLSAgICAgICAgICAgICp2YWx1ZSA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgKnZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICAq
dmFsdWUgPSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsK
LSAgICB9Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFk
ZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSBy
ZXN1bHQtPnNlY29uZDsKLSAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCi0gICAgICAgIHJldHVybiBl
bnRyeS5sb2c7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xHZXRTaGFkZXJpdihz
aGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIE93
bkFycmF5UHRyPEdMY2hhcj4gaW5mbyA9IGFkb3B0QXJyYXlQdHIobmV3IEdMY2hhcltsZW5ndGhd
KTsKLSAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8u
Z2V0KCkpOwotCi0gICAgcmV0dXJuIFN0cmluZyhpbmZvLmdldCgpKTsKLX0KLQotU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Ci17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
ICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRv
ciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAK
LQotICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5zb3VyY2U7Ci19Ci0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24s
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFt
LCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRV
bmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwg
cG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0
cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5k
ZXgsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0g
ICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHBvaW50ZXIpKTsKLX0KLQogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKICAgICBp
ZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMpIHsKQEAgLTE0MDcsMTMzICs0MDQsNiBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2ZmLCBHQzNEaW50IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBGSVhNRTogd2Ugd2ls
bCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBp
bWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUKLSAgICA6Omds
VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBy
ZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6
ZSwgZGF0YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGlt
YWdlU2l6ZSwgZGF0YSk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50
IG8gPSAwOwotICAgIGdsR2VuQnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBs
YXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5G
cmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBG
UkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7
Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUo
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBn
bEdlblRleHR1cmVzKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9i
amVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERl
bGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZ0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhl
c2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCi17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRk
KGVycm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2Vk
KCkKLXsKLSAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBtX2xheWVyQ29tcG9zaXRl
ZCA9IHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQotCi1FeHRlbnNpb25z
M0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1fZXh0
ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMz
RE9wZW5HTCh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKLX0KLQogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY4YmJhN2ZkN2Y1MTlmZDc4YzE2OWE3Mjkz
YzliMmFkNTI2MGRlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTAs
MCArMSwxMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KFdFQkdMKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2lu
Y2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
d3RmL0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KKyNp
bmNsdWRlIDx3dGYvSW50MzJBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9VaW50OEFycmF5Lmg+Cisj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgorI2VsaWYgUExB
VEZPUk0oR1RLKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZWxpZiBQTEFURk9STShRVCkK
KyNpbmNsdWRlIDxRdEdsb2JhbD4KKyNpbmNsdWRlIDxjYWlyby9PcGVuR0xTaGltcy5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFs
aWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRF
eHRlbnNpb25zKCk7CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoZXh0
ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7CisgICAg
ICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0
ZW5jaWwiKTsKKyAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4K
KyAgICAgICAgICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgYm9vbCBpc1ZhbGlkVmVuZG9yID0gdHJ1ZTsKKyAgICAgICAg
Ly8gQ3VycmVudGx5IGluIE1hYyB3ZSBvbmx5IHR1cm4gb24gYW50aWFsaWFzIGlmIHZlbmRvciBp
cyBOVklESUEuCisgICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSk7CisgICAgICAgIGlmICghc3Rk
OjpzdHJzdHIodmVuZG9yLCAiTlZJRElBIikpCisgICAgICAgICAgICBpc1ZhbGlkVmVuZG9yID0g
ZmFsc2U7CisgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikpCisgICAgICAgICAgICBtX2F0
dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbnNp
b25zLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwor
ICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNhZmUoKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmICFQTEFURk9STShRVCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqKQoreworICAgIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworCisgICAgaW50IHJvd0J5dGVzID0gbV9jdXJyZW50V2lk
dGggKiA0OworICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7
CisKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMgPSBhZG9wdEFycmF5UHRy
KG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3Rh
bEJ5dGVzKTsKKworICAgIGlmICghbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAg
IC8vIFByZW11bHRpcGx5IGFscGhhCisgICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjpt
aW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAg
ICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kg
KyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBw
aXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCwKKyAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworfQorI2Vu
ZGlmCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0Nh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KikKK3sKKyAgICAvLyBOb3QgbmVlZGVkIGF0IHRo
ZSBtb21lbnQsIHNvIHJldHVybiB0aGF0IG5vdGhpbmcgd2FzIGRvbmUuCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKQoreworICAgIC8vIFJl
YWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcs
IHdoaWNoIGlzCisgICAgLy8gbG9zc3kKKyAgICBpZiAobV9hdHRycy5wcmVtdWx0aXBsaWVkQWxw
aGEpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKS0+ZGF0YSgpOworICAgIGludCB0b3RhbEJ5dGVzID0gNCAqIG1fY3VycmVudFdpZHRoICog
bV9jdXJyZW50SGVpZ2h0OworCisgICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3Rh
bEJ5dGVzKTsKKworICAgIC8vIENvbnZlcnQgdG8gUkdCQQorICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhl
bHNbaSArIDJdKTsKKworICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOworfQorCitJbnRT
aXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4
dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FjdGl2ZVRleHR1cmUg
PSB0ZXh0dXJlOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNT
RVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEF0dGFjaFNo
YWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
QnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJi
dWZmZXIpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmIChtX2FjdGl2ZVRleHR1cmUgJiYgdGFyZ2V0ID09IEdMX1RFWFRV
UkVfMkQpCisgICAgICAgIG1fYm91bmRUZXh0dXJlMCA9IHRleHR1cmU7CisgICAgOjpnbEJpbmRU
ZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJs
ZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1
ZSwgR0MzRGNsYW1wZiBhbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0Is
IEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVt
IGRmYWN0b3IpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRnVu
YyhzZmFjdG9yLCBkZmFjdG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNE
ZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBo
YSwgZHN0QWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
MCwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVt
IHVzYWdlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsK
K30KKworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R0MzRGVudW0gdGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVy
biA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNE
Y2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbENsZWFyKG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
ckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhclN0ZW5jaWwoR0MzRGludCBzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9y
TWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVl
LCBHQzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAg
ICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGludCBH
THNoYWRlclR5cGU7CisgICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisKKyAgICBnbEdl
dFNoYWRlcml2KHNoYWRlciwgU0hBREVSX1RZUEUsICZHTHNoYWRlclR5cGUpOworICAgIAorICAg
IGlmIChHTHNoYWRlclR5cGUgPT0gVkVSVEVYX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9
IFNIQURFUl9UWVBFX1ZFUlRFWDsKKyAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gRlJBR01F
TlRfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm47IC8vIEludmFsaWQgc2hhZGVyIHR5cGUuCisKKyAgICBI
YXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworCisgICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2hhZGVy
U291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICBTdHJpbmcgdHJhbnNs
YXRlZFNoYWRlclNvdXJjZTsKKyAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKKworICAgIGJvb2wg
aXNWYWxpZCA9IG1fY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0
ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlcklu
Zm9Mb2cpOworCisgICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKKyAgICBlbnRyeS5pc1Zh
bGlkID0gaXNWYWxpZDsKKworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOyAvLyBT
aGFkZXIgZGlkbid0IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcg
dHJhbnNsYXRlZCBzb3VyY2UgICAgCisKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9
IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCk7CisKKyAgICBjb25zdCBDU3RyaW5nJiB0
cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwor
ICAgIGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0
cmluZy5kYXRhKCk7CisgICAgCisgICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFu
c2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7CisgICAgCisgICAgOjpn
bENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICAKKyAgICBpbnQgR0xDb21waWxlU3VjY2VzczsK
KyAgICAKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJkdMQ29t
cGlsZVN1Y2Nlc3MpOworICAgIAorICAgIC8vIEFTU0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBH
TFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdMCisgICAgQVNTRVJUKEdMQ29tcGlsZVN1Y2Nl
c3MgPT0gR0xfVFJVRSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdD
M0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEN1bGxG
YWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVu
dW0gZnVuYykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhGdW5j
KGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xl
YW4gZmxhZykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhNYXNr
KGZsYWcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFt
cGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVy
KTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGV0YWNoU2hhZGVyKHByb2dy
YW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUoR0MzRGVu
dW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEaXNhYmxlKGNh
cCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQzNEdWludCBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkg
Y291bnQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERyYXdBcnJheXMo
bW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Vs
ZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludHB0ciBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERy
YXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNo
KCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmx1c2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBs
ZXZlbCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJhbWVidWZmZXJU
ZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyb250RmFjZShtb2RlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFy
Z2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZW5lcmF0ZU1pcG1h
cEVYVCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRy
aWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZt
YXhBdHRyaWJ1dGVTaXplKTsKKyAgICBHTGNoYXIgbmFtZVttYXhBdHRyaWJ1dGVTaXplXTsgLy8g
R0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24K
KyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdM
ZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBt
YXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICBp
ZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbmZvLm5hbWUgPSBT
dHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZv
LnNpemUgPSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorICAgIAordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFk
ZXJzKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBj
b3VudCwgc2hhZGVycyk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9j
YXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUu
dXRmOCgpLmRhdGEoKSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIG1fYXR0
cnM7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAg
aWYgKG1fc3ludGhldGljRXJyb3JzLnNpemUoKSA+IDApIHsKKyAgICAgICAgTGlzdEhhc2hTZXQ8
R0MzRGVudW0+OjppdGVyYXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKKyAg
ICAgICAgR0MzRGVudW0gZXJyID0gKml0ZXI7CisgICAgICAgIG1fc3ludGhldGljRXJyb3JzLnJl
bW92ZShpdGVyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Cit9CisKK1N0cmluZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPig6OmdsR2V0U3RyaW5nKG5hbWUpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK0dDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sK
KyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOworfQorCitH
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXAp
OworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0
Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIGlmICghZnJhbWVidWZmZXIpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJl
dHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQor
eworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Cit9
CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0
dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOworfQorCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7
CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKK30KKwor
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0
ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9h
dCB3aWR0aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsTGluZVdpZHRo
KHdpZHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBh
cmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xQaXhlbFN0b3JlaShw
bmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQg
dG8gaGF2ZSBpZmRlZnMgZm9yIHRoZSBkaWZmZXJlbnQgR0wgdmFyaWFudHMuCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4g
aW52ZXJ0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTYW1wbGVDb3Zl
cmFnZSh2YWx1ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nv
cihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTY2lzc29yKHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIEFT
U0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTaGFkZXJT
b3VyY2VFbnRyeSBlbnRyeTsKKworICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKKworICAgIG1f
c2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50
IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxG
dW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdD
M0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5j
aWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQg
bWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6
cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdD
M0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFz
cykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbE9wU2VwYXJh
dGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQgdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFBhcmFt
ZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQg
dmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFBhcmFtZXRl
cmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVu
aWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkg
c2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
MgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYy
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRp
b24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQorewor
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9h
dCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRmKGxv
Y2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNp
emUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwg
c2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWkoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGludCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0Rz
aXplaSBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3Jt
MWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYw
LCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCog
YXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiAzCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVu
aWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEs
IEdDM0RpbnQgdjIsIEdDM0RpbnQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFy
cmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNAorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlm
b3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2Us
IGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXks
IEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA5CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm1N
YXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7Cisg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNp
emUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQ
cm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAg
ICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxv
YXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJp
YjJmKGluZGV4LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwg
djIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2
MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNE
aW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXpl
aSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxp
emVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmlld3BvcnQoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KEdDM0Rl
bnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0MzRGZs
b2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0Rmxv
YXR2KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCkKKyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5D
SUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFBy
b2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgIGlmICgh
bGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXplaSBzaXplID0g
MDsKKyAgICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNo
YXJbbGVuZ3RoXSk7CisgICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwg
JnNpemUsIGluZm8uZ2V0KCkpOworCisgICAgcmV0dXJuIFN0cmluZyhpbmZvLmdldCgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhU
KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46
Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICAK
KyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBERUxFVEVfU1RBVFVTOgorICAgIGNhc2Ug
U0hBREVSX1RZUEU6CisgICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1
ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6CisgICAgICAgIGlm
IChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICp2YWx1
ZSA9IHN0YXRpY19jYXN0PGludD4oZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQuaXNW
YWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgorICAgICAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAq
dmFsdWUgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp2YWx1
ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgKnZhbHVlID0gZ2V0U2hhZGVy
U291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7CisgICAgfQorfQorCitTdHJp
bmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOyAKKworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgaWYgKCFlbnRyeS5pc1ZhbGlkKQorICAgICAgICByZXR1cm4gZW50cnkubG9nOworCisgICAg
R0xpbnQgbGVuZ3RoID0gMDsKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xP
R19MRU5HVEgsICZsZW5ndGgpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7IAorCisgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICBPd25BcnJheVB0cjxHTGNoYXI+
IGluZm8gPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbGVuZ3RoXSk7CisgICAgOjpnbEdldFNo
YWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmdldCgpKTsKKworICAgIHJl
dHVybiBTdHJpbmcoaW5mby5nZXQoKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChz
aGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBIYXNoTWFwPFBsYXRm
b3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICByZXR1cm4gcmVz
dWx0LT5zZWNvbmQuc291cmNlOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRl
eFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCog
dmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFRleFBhcmFt
ZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFRl
eFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVl
KTsKK30KKworR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VS
VChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6Omds
R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUp
OworfQorCitHQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9m
ZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisKKyAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOworICAgIDo6Z2xHZXRWZXJ0ZXhB
dHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdo
ZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1h
Z2Ugc2l6ZQorICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ29tcHJlc3Nl
ZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQqIGRhdGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKKyAgICBy
ZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
RnJhbWVidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBv
ID0gMDsKKyAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9
CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0o
KTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVy
YnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7
CisgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwor
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVt
IHR5cGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsQ3JlYXRl
U2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBH
TF9WRVJURVhfU0hBREVSKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1
aW50IG8gPSAwOworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOworICAgIHJldHVybiBvOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVCdWZmZXJz
KDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1
ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRlUHJv
Z3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVy
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsRGVsZXRl
U2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1
cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKK3sKKyAgICBtX3N5
bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpt
YXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAg
IG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7
Cit9CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQor
eworICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0
cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMKHRoaXMpKTsKKyAgICByZXR1cm4gbV9leHRlbnNpb25z
LmdldCgpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBmZjVhMGEzNDViZGY2NGI5
NzgwZDQ4ZGI2NDI1MDY2N2RmMzEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApA
QCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxz
aGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiT3Bl
bkdMU2hpbXMuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywg
aW50IHBpeGVsc1NpemUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1
cmUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVm
ZmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122251</attachid>
            <date>2012-01-12 08:37:16 -0800</date>
            <delta_ts>2012-01-12 20:51:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75462-20120113013713.patch</filename>
            <type>text/plain</type>
            <size>89749</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0ODI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgxODI5ZTRkMjI2MTc5
ZjIxNWU3NTg2ZjYwMGE5NGZhMzdkZmRmYy4uYzY5ZjgwMDZmOTZmOWM1NmIwNWM4ZWE3NDZmY2M5
MDM4Mjk4MDdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4MSBAQAorMjAxMi0wMS0xMiAgQ2hh
bmdTZW9rIE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisKKyAgICAgICAgU3BsaXQgR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wgaW50byBzZXZlcmFsIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTQ2MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IEdyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcCBpbnRvIHRocmVlIGZpbGVzLCBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAs
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCAmIEdyYXBoaWNzQ29udGV4dDNE
T3BlbkdMRVMuY3BwIHNvIHRoYXQgbWFrZXMgZ2xlcyBzdXBwb3J0IHBvc3NpYmxlCisgICAgICAg
IGZvciBXZWJHTCBldGMuIE1vc3Qgb2YgY29tbW9uIEFQSXMgYmV0d2VlbiBnbCBhbmQgZ2xlcyBh
cmUgaW4gR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwLgorICAgICAgICBUaGUgb3Ro
ZXIgZ2wgYW5kIGdsZXMgc3BlY2lmaWMgQVBJcyBhcmUgcGxhY2VkIGFwYXJ0IGluIEdyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcCAmCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbTogQWRkZWQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisg
ICAgICAgICogVGFyZ2V0LnByaTogQWRkZWQgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGRlZCBHcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHAKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IEFkZGVkIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVu
ZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpjb2xvck1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNv
bXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxG
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aEZ1bmMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmbHVz
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcm9u
dEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlw
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRy
aWIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hh
ZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9j
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjppc0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omlz
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1No
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRl
eFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0x
Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIz
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRm
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1p
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9M
b2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
SW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJh
bWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFy
YW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZv
cm1mdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJp
YmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0
cmliT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJ
bWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2Vk
VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJl
c3NlZFRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xFUy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJl
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1l
YnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVu
aWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKwogMjAx
Mi0wMS0xMiAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgogCiAgICAgICAg
IEZpeCB0dXJidWxlbmNlIGJ1ZyB3aGVuIHN0aXRjaCB0aWxlcyBlbmFibGVkIGFuZCByZW5kZXJl
ZCBpbiBwYXJhbGxlbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZjE0NGYwZDJk
MTU2NTIxYmU5ZmQ3N2VkY2Y5NzNiY2MyOWQ3NjBjMS4uYjMzMGZmMjJlYjI0NGI0ZmU5YThhNjU2
ZDA1ZDAxOTlkZmM3NjVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NjE4
LDcgKzU2MTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKIGVu
ZGlmICAjIEVORCBFTkFCTEVfV0VCR0wKIAogIyAtLS0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGUzZGI4OGQ0
ZWJhMDIxZGNjZjgwZjI4ODBjOTkzZTcwODgwYTY5MTYuLjM2Njk1NDUxNmRmMzUxNjZmNTM1ZGI4
MzU0ZjgzMDUzOGQyYWJlYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
KysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzc0Miw3ICszNzQyLDggQEAgY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgICAgICBTT1VSQ0VTICs9IFwK
ICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xF
X0RJUiA9ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggMGZlNDkzZTNjYTk0ZGQ0YzVhODBmODMzMGJiZDk5ZDZkYzk0NjU0
ZS4uOGQyMmE0M2E5MjFlNDY4NTUyYTlhNDkzOTI0NTM2YmExZGM5ODMxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtMzg0Myw2ICszODQzLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
eHR1cmVNYXBwZXJHTC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlw
ZS9PcGVuVHlwZVNhbml0aXplci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDVlMGEyNTlmYTQ5M2I2ZTIxNzdkMmNmYzNl
MjY0ZTg4YTEzMDYzY2UuLmVlYmUyM2YzYWVhN2UyMTU2ZDE4OGViOTEwMTlkOGE2MjVhYzRiZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTMyNTUsNiArMzI1NSw3IEBACiAJCTkzRjlCN0EwMEJBNjAzMjYwMDg1NDA2NCAvKiBK
U0NEQVRBU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0Y5Qjc5RTBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uY3BwICov
OyB9OwogCQk5M0Y5QjdBMTBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNzlGMEJBNjAz
MjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5oICovOyB9OwogCQk5M0ZEQUZDQTBCMTEzMDc0
MDBFMjc0NkYgLyogRWRpdG9ySW5zZXJ0QWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0ZEQUZDOTBCMTEzMDc0MDBFMjc0NkYgLyogRWRpdG9y
SW5zZXJ0QWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJOTZBQkE0MjMxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAgKi87IH07CiAJCTk3MDU5OTc3MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxs
YmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzA1OTk3MzEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3BwICovOyB9OwogCQk5
NzA1OTk3ODEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5OTc0MTA3RDk3NTIwMEE1MEE3
QyAvKiBQb2xpY3lDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTk3MDU5OTc5MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5
OTc1MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmNwcCAqLzsgfTsKQEAgLTEwNTI5
LDYgKzEwNTMwLDcgQEAKIAkJOTNGOUI3OUUwQkE2MDMyNjAwODU0MDY0IC8qIEpTQ0RBVEFTZWN0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ0RBVEFTZWN0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNGOUI3OUYwQkE2MDMyNjAw
ODU0MDY0IC8qIEpTQ0RBVEFTZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ0RBVEFTZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRkRB
RkM5MEIxMTMwNzQwMEUyNzQ2RiAvKiBFZGl0b3JJbnNlcnRBY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRvckluc2VydEFjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5NkFCQTQyMjE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NzA1OTk3MzEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2FsbGJhY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9saWN5Q2FsbGJhY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzA1OTk3NDEwN0Q5NzUyMDBBNTBBN0Mg
LyogUG9saWN5Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9s
aWN5Q2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzUxMDdE
OTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUG9saWN5Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMTU2NSw2ICsyMTU2Nyw3IEBACiAJCQkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3
IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8sCiAJCQkJNkU2N0QyQTUxMjgwRThBNDAwODc1
OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovLAogCQkJCUZCQzIyMERFMTIzN0ZCRUIwMEJD
Rjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgKi8sCisJCQkJOTZBQkE0MjIxNEJD
QjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gb3BlbmdsOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2
MDY5LDYgKzI2MDcyLDcgQEAKIAkJCQk2RTIxQzZDMjExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhp
Y3NDb250ZXh0M0RDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUZGQkYxRDExQzg1NTBFMDA2
QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGQkMy
MjBERjEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOTZBQkE0MjMxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRUQ5NzcxMEIxRjU1Q0Uw
MDI1N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc3
QjQwNDBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY1ODBCMEMwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCAx
NmEzYjRhOWM2ZGNhZWEyNDQxZjRmMDQyZjUwMjZhMjIyMWE0ZTYxLi40N2E0MWM2ZDAwMjY1YjBj
YmE5YTQ0ZmZjYzQxMTA2YWU5YmEwNzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTC5jcHAKQEAgLTI5LDIyICsyOSw4IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRE9wZW5HTC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IldlYkdMT2JqZWN0LmgiCi0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDx3dGYvQXJyYXlC
dWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8
d3RmL1VpbnQ4QXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8T3Bl
bkdML2dsLmg+CkBAIC01NywzMCArNDMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCi17Ci0gICAgRXh0ZW5z
aW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwpIHsKLSAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwiKSkgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxl
ZCgiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAgICAgICAgICAvLyBGb3JjZSBk
ZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCi0gICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGJvb2wgaXNWYWxp
ZFZlbmRvciA9IHRydWU7Ci0gICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0dXJu
IG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLgotICAgICAgICBjb25zdCBjaGFyKiB2
ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1ZF
TkRPUikpOwotICAgICAgICBpZiAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5WSURJQSIpKQotICAg
ICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOwotICAgICAgICBpZiAoIWlzVmFsaWRWZW5k
b3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNh
bXBsZSIpKQotICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKLSAgICB9Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVs
c1NpemUpCiB7CiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVu
dEhlaWdodCAqIDQpCkBAIC0xMTksNjYgKzgxLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2kK
ICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91
bmRGQk8pOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgpCi17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgIVBMQVRGT1JNKFFUKQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciopCi17Ci0gICAgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0KLSAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRX
aWR0aCAqIDQ7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdo
dDsKLQotICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyA9IGFkb3B0QXJyYXlQ
dHIobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOwotICAgIGlmICghcGl4ZWxzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRv
dGFsQnl0ZXMpOwotCi0gICAgaWYgKCFtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSkgewotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkgewotICAgICAgICAg
ICAgLy8gUHJlbXVsdGlwbHkgYWxwaGEKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6
Om1pbigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAg
ICAgIHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNb
aSArIDNdIC8gMjU1KTsKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUs
IHBpeGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhl
aWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0j
ZW5kaWYKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1Rv
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKQotewotICAgIC8vIE5vdCBuZWVkZWQgYXQg
dGhlIG1vbWVudCwgc28gcmV0dXJuIHRoYXQgbm90aGluZyB3YXMgZG9uZS4KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopCi17Ci0gICAgLy8g
UmVhZGluZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWlu
Zywgd2hpY2ggaXMKLSAgICAvLyBsb3NzeQotICAgIGlmIChtX2F0dHJzLnByZW11bHRpcGxpZWRB
bHBoYSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+
ZGF0YSgpLT5kYXRhKCk7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSA0ICogbV9jdXJyZW50V2lkdGgg
KiBtX2N1cnJlbnRIZWlnaHQ7Ci0KLSAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRv
dGFsQnl0ZXMpOwotCi0gICAgLy8gQ29udmVydCB0byBSR0JBCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBp
eGVsc1tpICsgMl0pOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Ci19Ci0KIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewog
ICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQpAQCAtMzMzLDExICsyMzUsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkK
ICAgICA6OmdsRmx1c2goKTsKIH0KIAotSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQpAQCAtMzU5
LDM1ICsyNTYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiAg
ICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgbV9hY3RpdmVUZXh0dXJlID0gdGV4dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4
dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVy
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0g
ICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBB
U1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTQwMiwxNTggKzI3MCw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBy
ZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2FjdGl2
ZVRleHR1cmUgJiYgdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgIG1fYm91bmRUZXh0
dXJlMCA9IHRleHR1cmU7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdD
M0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24o
R0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxl
bmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1v
ZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRG
dW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0gICAg
ICAgCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVt
IHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0
QWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJsZW5kRnVuY1Nl
cGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRy
IHNpemUsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNp
emUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCdWZmZXJTdWJEYXRh
KHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250
ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1
c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdD
M0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2sp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFyKG1hc2spOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Ri
b29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIGludCBHTHNoYWRlclR5cGU7Ci0gICAgQU5HTEVTaGFk
ZXJUeXBlIHNoYWRlclR5cGU7Ci0KLSAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgU0hBREVSX1RZ
UEUsICZHTHNoYWRlclR5cGUpOwotICAgIAotICAgIGlmIChHTHNoYWRlclR5cGUgPT0gVkVSVEVY
X1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKLSAgICBl
bHNlIGlmIChHTHNoYWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVSKQotICAgICAgICBzaGFkZXJU
eXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47IC8v
IEludmFsaWQgc2hhZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNo
YWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0
LT5zZWNvbmQ7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKLSAgICBTdHJp
bmcgc2hhZGVySW5mb0xvZzsKLQotICAgIGJvb2wgaXNWYWxpZCA9IG1fY29tcGlsZXIudmFsaWRh
dGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOwotCi0gICAgZW50cnkubG9nID0g
c2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKLQotICAgIGlmICgh
aXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZhbGlkYXRlLCBkb24n
dCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3VyY2UgICAgCi0KLSAg
ICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVu
Z3RoKCk7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwotICAgIGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRT
aGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRhKCk7Ci0gICAgCi0gICAgOjpn
bFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRl
ZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAg
ICAKLSAgICBpbnQgR0xDb21waWxlU3VjY2VzczsKLSAgICAKLSAgICA6OmdsR2V0U2hhZGVyaXYo
c2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJkdMQ29tcGlsZVN1Y2Nlc3MpOwotICAgIAotICAgIC8v
IEFTU0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBHTFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3Bl
bkdMCi0gICAgQVNTRVJUKEdMQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7Ci19Ci0KIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQogewogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtNTgyLDEzMiArMjk4LDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW4KICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
dWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xDdWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhG
dW5jKEdDM0RlbnVtIGZ1bmMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bERlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNr
KEdDM0Rib29sZWFuIGZsYWcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bERlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5n
ZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNT
RVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERldGFjaFNo
YWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNh
YmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
RGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpemVpIGNvdW50KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xE
cmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsRW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEZpbmlzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpmbHVzaCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZsdXNo
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVm
ZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRh
Y2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
YXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUs
IEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZShHQzNE
ZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGcm9udEZh
Y2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdD
M0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2Vu
ZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAw
OwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhf
TEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7Ci0gICAgR0xjaGFyIG5hbWVbbWF4QXR0cmlidXRl
U2l6ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRl
cm1pbmF0aW9uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0g
MDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFt
LCBpbmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFt
ZSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW5m
by5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7
Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAoIXByb2dy
YW0pIHsKQEAgLTczMCwxNjYgKzMyMCwyNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRB
Y3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZQogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNo
YWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0Rz
aXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgaWYgKCFwcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRB
dHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKLX0KIAot
aW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQogewot
ICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwotCisgICAgLy8gRklYTUU6IHJl
bW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwg
aS5lLiwKKyAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25l
IGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7
Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgcmV0dXJuIG1fYXR0cnM7CisgICAgOjpnbEZs
dXNoKCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0
aXNhbXBsZUZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJB
TUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmxp
dEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdp
ZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAg
ICAgICA6OmdsRmx1c2goKTsKKyAgICB9CisgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMg
JiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLUdD
M0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1fc3ludGhl
dGljRXJyb3JzLnNpemUoKSA+IDApIHsKLSAgICAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+Ojpp
dGVyYXRvciBpdGVyID0gbV9zeW50aGV0aWNFcnJvcnMuYmVnaW4oKTsKLSAgICAgICAgR0MzRGVu
dW0gZXJyID0gKml0ZXI7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLnJlbW92ZShpdGVyKTsK
LSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0
U3RyaW5nKG5hbWUpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBH
cmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBH
TF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNG
cmFtZWJ1ZmZlckVYVChmcmFtZWJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICgh
cHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLUdDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJl
bmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1Jl
bmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFz
aGFkZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKLX0KLQotR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17
Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBm
YWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQq
IGRhdGEpCi17Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hl
biB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKLSAgICAvLyBhbGwgcHJldmlvdXMgcmVu
ZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmx1c2goKTsKLSAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1w
bGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZG
RVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCAr
IHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9S
X0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xGbHVzaCgpOwotICAgIH0K
LSAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRh
dGEpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlz
YW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgaW1wbGVt
ZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2ZSBpZmRlZnMgZm9yIHRoZSBk
aWZmZXJlbnQgR0wgdmFyaWFudHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVy
U3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5k
ZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKICAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CkBAIC05MTAsMzAyICszNjAs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmbwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdl
RVhUKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9v
bGVhbiBpbnZlcnQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFNhbXBs
ZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
Y2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFNjaXNzb3IoeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNv
dXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIFNo
YWRlclNvdXJjZUVudHJ5IGVudHJ5OwotCi0gICAgZW50cnkuc291cmNlID0gc3RyaW5nOwotCi0g
ICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNp
bEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJl
ZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
U3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
dWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZh
aWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJh
dGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVt
IHpwYXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsT3BT
ZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdD
M0RmbG9hdCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVGV4
UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVGV4UGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjApCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0Rz
aXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiAyCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0yZnYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxv
YXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUp
Ci17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0Mz
RGZsb2F0IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3Jt
NGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6
ZWkgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgNAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0x
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwg
R0MzRHNpemVpIHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVu
aWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0yaShsb2NhdGlv
biwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8g
RklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGlu
dCB2MSwgR0MzRGludCB2MiwgR0MzRGludCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQotewotICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5z
cG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBh
cnJheSwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDkKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkK
LXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQot
ewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdD
M0RmbG9hdCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4
QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJh
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAs
IHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwg
djEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRm
dihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgs
IEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0Mz
RHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9y
dChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYo
R0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBH
QzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xH
ZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UKQotICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3Ig
U1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCi0gICAgOjpnbEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVl
KTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKQogewogICAgIC8vIE5lZWQgdG8gZW11bGF0ZSBNQVhfRlJBR01F
TlQvVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyBhbmQgTUFYX1ZBUllJTkdfVkVDVE9SUwpAQCAtMTIz
MSwxNjMgKzM4NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
KQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9J
TkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBPd25BcnJheVB0cjxH
TGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbGVuZ3RoXSk7Ci0gICAgOjpn
bEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZ2V0KCkpOwot
Ci0gICAgcmV0dXJuIFN0cmluZyhpbmZvLmdldCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NF
UlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7
Ci0gICAgY2FzZSBERUxFVEVfU1RBVFVTOgotICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAg
IDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJT
b3VyY2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4o
ZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICp2YWx1ZSA9
IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT5zZWNvbmQuaXNWYWxpZCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgotICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAqdmFsdWUgPSAwOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICp2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2co
c2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfU09VUkNF
X0xFTkdUSDoKLSAgICAgICAgKnZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3Ro
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfRU5VTSk7Ci0gICAgfQotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJU
KHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIFNoYWRlclNv
dXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0gICAgaWYgKCFlbnRyeS5pc1ZhbGlk
KQotICAgICAgICByZXR1cm4gZW50cnkubG9nOwotCi0gICAgR0xpbnQgbGVuZ3RoID0gMDsKLSAg
ICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwot
ICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXpl
aSBzaXplID0gMDsKLSAgICBPd25BcnJheVB0cjxHTGNoYXI+IGluZm8gPSBhZG9wdEFycmF5UHRy
KG5ldyBHTGNoYXJbbGVuZ3RoXSk7Ci0gICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBs
ZW5ndGgsICZzaXplLCBpbmZvLmdldCgpKTsKLQotICAgIHJldHVybiBTdHJpbmcoaW5mby5nZXQo
KSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNv
dXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQuc291cmNlOwot
fQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VW5pZm9ybWZ2
KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xH
ZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotR0MzRGludCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZs
b2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VmVy
dGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdl
dFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQotCi1HQzNEc2l6ZWlwdHIg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwg
R0MzRGVudW0gcG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBHTHZv
aWQqIHBvaW50ZXIgPSAwOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwg
cG5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Ci19Ci0KIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpCiB7CiAgICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CkBAIC0x
NDA3LDEzMyArNDA0LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMg
d2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJp
bWFnZSBzaXplCi0gICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9m
Ziwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDb21wcmVz
c2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29tcHJl
c3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOwotICAg
IHJldHVybiBvOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50
IG8gPSAwOwotICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1cm4gbzsK
LX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3Jh
bSgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5k
ZXJidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0g
MDsKLSAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQot
Ci1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVh
dGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6
IEdMX1ZFUlRFWF9TSEFERVIpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBH
THVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZUJ1ZmZl
cnMoMSwgJmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1l
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVQ
cm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5k
ZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZm
ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxl
dGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4
dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQotewotICAgIG1f
c3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCi17Ci0g
ICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRl
ZDsKLX0KLQotRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygp
Ci17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0
UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOwotICAgIHJldHVybiBtX2V4dGVuc2lv
bnMuZ2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2OGJiYTdm
ZDdmNTE5ZmQ3OGMxNjlhNzI5M2M5YjJhZDUyNjBkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwCkBAIC0wLDAgKzEsMTE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRXh0
ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
V2ViR0xPYmplY3QuaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9BcnJheUJ1
ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlIDx3dGYv
RmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3
dGYvVWludDhBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVu
R0wvZ2wuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgor
I2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UXRHbG9iYWw+CisjaW5jbHVkZSA8Y2Fpcm8v
T3BlbkdMU2hpbXMuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCit7CisgICAgRXh0ZW5zaW9uczNE
KiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
IHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcGFja2VkX2RlcHRo
X3N0ZW5jaWwiKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
RVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBp
ZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICB9
CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGJvb2wgaXNWYWxpZFZlbmRv
ciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFu
dGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLgorICAgICAgICBjb25zdCBjaGFyKiB2ZW5kb3Ig
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1ZFTkRPUikp
OworICAgICAgICBpZiAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5WSURJQSIpKQorICAgICAgICAg
ICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOworICAgICAgICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwg
IWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
KQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKTsKKyAgICB9Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omlz
UmVzb3VyY2VTYWZlKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiAhUExBVEZPUk0o
UVQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKikKK3sKKyAg
ICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAgSW1h
Z2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIGludCByb3dC
eXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVz
ICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4
ZWxzID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7CisgICAg
aWYgKCFwaXhlbHMpCisgICAgICAgIHJldHVybjsKKworICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRz
KHBpeGVscy5nZXQoKSwgdG90YWxCeXRlcyk7CisKKyAgICBpZiAoIW1fYXR0cnMucHJlbXVsdGlw
bGllZEFscGhhKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSAr
PSA0KSB7CisgICAgICAgICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYQorICAgICAgICAgICAgcGl4
ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10g
LyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxz
W2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAy
XSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsCisgICAgICAgICAgICAgICAgICBjYW52YXMtPndp
ZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3Jt
Q29udGV4dCgpKTsKK30KKyNlbmRpZgorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENv
bXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopCit7CisgICAg
Ly8gTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50LCBzbyByZXR1cm4gdGhhdCBub3RoaW5nIHdhcyBk
b25lLgorICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVm
ZmVyKikKK3sKKyAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2
ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcworICAgIC8vIGxvc3N5CisgICAgaWYgKG1fYXR0
cnMucHJlbXVsdGlwbGllZEFscGhhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9jdXJyZW50
V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGlt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCktPmRhdGEoKTsKKyAgICBpbnQgdG90YWxCeXRlcyA9IDQg
KiBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodDsKKworICAgIHJlYWRSZW5kZXJpbmdS
ZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7CisKKyAgICAvLyBDb252ZXJ0IHRvIFJHQkEKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgc3RkOjpz
d2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhLnJl
bGVhc2UoKTsKK30KKworSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFt
ZWJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVU
ZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgbV9hY3RpdmVUZXh0dXJlID0gdGV4dHVyZTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0
dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJU
KHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJv
Z3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5kQnVm
ZmVyKHRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJl
bmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVy
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
RVhUKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hY3RpdmVUZXh0dXJlICYm
IHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICBtX2JvdW5kVGV4dHVyZTAgPSB0ZXh0
dXJlOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdy
ZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRXF1YXRpb24o
bW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2Rl
QWxwaGEpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuYyhHQzNEZW51
bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9ICAgICAgIAorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdD
M0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNS
R0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNE
ZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQnVmZmVy
RGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2
b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9m
ZnNldCwgc2l6ZSwgZGF0YSk7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHIs
IEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhcihtYXNrKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVl
biwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICBpbnQgR0xzaGFkZXJUeXBlOworICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFk
ZXJUeXBlOworCisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFk
ZXJUeXBlKTsKKyAgICAKKyAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFERVIpCisg
ICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxzZSBpZiAoR0xz
aGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURF
Ul9UWVBFX0ZSQUdNRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNo
YWRlciB0eXBlLgorCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VF
bnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
KworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOwor
CisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRlcklu
Zm9Mb2c7CisKKyAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVyU291
cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9M
b2c7CisgICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBpZiAoIWlzVmFsaWQpCisg
ICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBmb3J3
YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAorCisgICAgaW50IHRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpOworCisg
ICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0g
dHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOworICAgIAorICAgIDo6Z2xTaGFkZXJTb3Vy
Y2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5n
dGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgCisgICAgaW50
IEdMQ29tcGlsZVN1Y2Nlc3M7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09N
UElMRV9TVEFUVVMsICZHTENvbXBpbGVTdWNjZXNzKTsKKyAgICAKKyAgICAvLyBBU1NFUlQgdGhh
dCBBTkdMRSBnZW5lcmF0ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAorICAgIEFT
U0VSVChHTENvbXBpbGVTdWNjZXNzID09IEdMX1RSVUUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xDdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbERlcHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbERlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGlu
dCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZpbmlzaCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmbHVzaCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0g
cmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQodGFy
Z2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlLCBsZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyb250
RmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRl
TWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heEF0dHJpYnV0
ZVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJ
QlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAgR0xjaGFyIG5hbWVbbWF4
QXR0cmlidXRlU2l6ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRl
cyBudWxsIHRlcm1pbmF0aW9uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGlu
dCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZUF0dHJp
Yihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAm
dHlwZSwgbmFtZSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlw
ZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAg
ICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxh
dGZvcm0zRE9iamVjdCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhw
cm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitpbnQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOwor
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQor
eworICAgIHJldHVybiBtX2F0dHJzOworfQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RXJyb3IoKQoreworICAgIGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7Cisg
ICAgICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGlj
RXJyb3JzLmJlZ2luKCk7CisgICAgICAgIEdDM0RlbnVtIGVyciA9ICppdGVyOworICAgICAgICBt
X3N5bnRoZXRpY0Vycm9ycy5yZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAg
fQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigp
OworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1l
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUp
OworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNCdWZm
ZXIoYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxl
ZChHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJu
IDo6Z2xJc0VuYWJsZWQoY2FwKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6
OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAo
IWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIp
OworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBH
TF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNQ
cm9ncmFtKHByb2dyYW0pOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNS
ZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFy
ZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVy
KTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzU2hh
ZGVyKHNoYWRlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1
cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0
dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJv
Z3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbExpbmtQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaShHQzNEZW51
bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9y
LCB1bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21w
aWxlcigpCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIG9uIGRlc2t0
b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUgaWZkZWZzIGZvciB0aGUgZGlmZmVyZW50IEdMIHZh
cmlhbnRzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYg
dmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworCisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7CisKKyAgICBlbnRyeS5zb3VyY2Ug
PSBzdHJpbmc7CisKKyAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdD
M0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1
bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2sp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2sp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0Mz
RGVudW0genBhc3MpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFN0ZW5j
aWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6
ZmFpbCwgR0MzRGVudW0genBhc3MpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2
MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0
aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDIKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxv
YXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBH
QzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0Mz
RGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCog
YXJyYXksIEdDM0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiA0CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVu
aWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjApCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2
MCwgR0MzRGludCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5p
Zm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2
MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIs
IHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50KiBhcnJheSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0MzRHNpemVpIHNpemUp
Cit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihsb2NhdGlv
biwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFy
cmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdD
M0RzaXplaSBzaXplKQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiAxNgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0
cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmli
MWYoaW5kZXgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFy
cmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIy
ZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxv
YXQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJp
YjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVy
dGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9h
dCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmli
NGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIGFycmF5KQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFy
cmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihH
QzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBu
b3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwg
c2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZp
ZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0Mz
RGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoYXR0YWNobWVudCA9PSBE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCisgICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRB
Q0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KKyAgICA6Omds
R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50
LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFt
aXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBsZW5ndGgg
PSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAm
bGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKwor
ICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgT3duQXJyYXlQdHI8R0xjaGFyPiBpbmZvID0gYWRv
cHRBcnJheVB0cihuZXcgR0xjaGFyW2xlbmd0aF0pOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xv
Zyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmdldCgpKTsKKworICAgIHJldHVybiBTdHJp
bmcoaW5mby5nZXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwg
U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7CisgICAgCisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgREVMRVRF
X1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9UWVBFOgorICAgICAgICA6OmdsR2V0U2hhZGVyaXYo
c2hhZGVyLCBwbmFtZSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENPTVBJTEVf
U1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7
CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+
KHJlc3VsdC0+c2Vjb25kLmlzVmFsaWQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElORk9f
TE9HX0xFTkdUSDoKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkgeworICAgICAgICAgICAgKnZhbHVlID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAqdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikubGVuZ3RoKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6CisgICAgICAg
ICp2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0p
OworICAgIH0KK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9n
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNo
YWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9
IHJlc3VsdC0+c2Vjb25kOworICAgIGlmICghZW50cnkuaXNWYWxpZCkKKyAgICAgICAgcmV0dXJu
IGVudHJ5LmxvZzsKKworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAg
T3duQXJyYXlQdHI8R0xjaGFyPiBpbmZvID0gYWRvcHRBcnJheVB0cihuZXcgR0xjaGFyW2xlbmd0
aF0pOworICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5m
by5nZXQoKSk7CisKKyAgICByZXR1cm4gU3RyaW5nKGluZm8uZ2V0KCkpOworfQorCitTdHJpbmcg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
CisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVz
dWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
IAorCisgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLnNvdXJjZTsKK30KKworCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlv
biwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dy
YW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK0dDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0Zjgo
KS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJm
dihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4
LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhB
dHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihp
bmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKworR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgR0x2b2lkKiBwb2ludGVyID0gMDsK
KyAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4ocG9pbnRlcikpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2ZmLCBHQzNE
aW50IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQ
aXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlm
ZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUKKyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7Cit9CisK
K1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuQnVm
ZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8p
OworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1
cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xf
RlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7Cit9CisKK1BsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblRleHR1cmVzKDEsICZvKTsK
KyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVy
KFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgx
LCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0g
ZXJyb3IpCit7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBtX2xheWVyQ29t
cG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJD
b21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbGF5ZXJDb21wb3NpdGVkOworfQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9l
eHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSk7CisgICAg
cmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkwZmY1YTBhMzQ1YmRmNjRiOTc4MGQ0OGRiNjQyNTA2NjdkZjMxMjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaWYgUExBVEZPUk0o
R1RLKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNp
Z25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNTaXplKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5
VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>