<?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>86257</bug_id>
          
          <creation_ts>2012-05-11 15:07:54 -0700</creation_ts>
          <short_desc>[chromium] Move implementation of WebCore::GraphicsContext3D and related from WebKit/chromium/src to WebCore/platform/chromium/support</short_desc>
          <delta_ts>2012-06-06 17:38:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>86524</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>622002</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 15:07:54 -0700</bug_when>
    <thetext>[chromium] Move implementation of WebCore::GraphicsContext3D and related from WebKit/chromium/src to WebCore/platform/chromium/support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622003</commentid>
    <comment_count>1</comment_count>
      <attachid>141504</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 15:09:36 -0700</bug_when>
    <thetext>Created attachment 141504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622005</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 15:13:12 -0700</bug_when>
    <thetext>Diffs that aren&apos;t file moves or ChangeLogs:

diff --git a/Source/WebCore/WebCore.gypi b/Source/WebCore/WebCore.gypi
index e7746e6..6c06e2a 100644
--- a/Source/WebCore/WebCore.gypi
+++ b/Source/WebCore/WebCore.gypi
@@ -8275,6 +8275,9 @@
             &apos;&lt;(PRODUCT_DIR)/DerivedSources/WebCore/XPathGrammar.h&apos;,
         ],
         &apos;webcore_platform_support_files&apos;: [
+            &apos;platform/chromium/support/Extensions3DChromium.cpp&apos;,
+            &apos;platform/chromium/support/GraphicsContext3DChromium.cpp&apos;,
+            &apos;platform/chromium/support/GraphicsContext3DPrivate.h&apos;,
             &apos;platform/chromium/support/WebAudioBus.cpp&apos;,
             &apos;platform/chromium/support/WebData.cpp&apos;,
             &apos;platform/chromium/support/WebHTTPBody.cpp&apos;,
diff --git a/Source/WebKit/chromium/WebKit.gyp b/Source/WebKit/chromium/WebKit.gyp
index a775f54..801a887 100644
--- a/Source/WebKit/chromium/WebKit.gyp
+++ b/Source/WebKit/chromium/WebKit.gyp
@@ -401,7 +401,6 @@
                 &apos;src/EditorClientImpl.h&apos;,
                 &apos;src/EventListenerWrapper.cpp&apos;,
                 &apos;src/EventListenerWrapper.h&apos;,
-                &apos;src/Extensions3DChromium.cpp&apos;,
                 &apos;src/ExternalPopupMenu.cpp&apos;,
                 &apos;src/ExternalPopupMenu.h&apos;,
                 &apos;src/FrameLoaderClientImpl.cpp&apos;,
@@ -409,8 +408,6 @@
                 &apos;src/FrameNetworkingContextImpl.h&apos;,
                 &apos;src/GeolocationClientProxy.cpp&apos;,
                 &apos;src/GeolocationClientProxy.h&apos;,
-                &apos;src/GraphicsContext3DChromium.cpp&apos;,
-                &apos;src/GraphicsContext3DPrivate.h&apos;,
                 &apos;src/gtk/WebInputEventFactory.cpp&apos;,
                 &apos;src/IDBCallbacksProxy.cpp&apos;,
                 &apos;src/IDBCallbacksProxy.h&apos;,

diff --git a/Source/WebCore/platform/chromium/support/Extensions3DChromium.cpp b/Source/WebCore/platform/chromium/support/Extensions3DChromium.cpp
index 84ad0f7..48b679d 100644
--- a/Source/WebCore/platform/chromium/support/Extensions3DChromium.cpp
+++ b/Source/WebCore/platform/chromium/support/Extensions3DChromium.cpp
@@ -25,8 +25,6 @@
 
 #include &quot;config.h&quot;
 
-#if ENABLE(WEBGL)
-
 #include &quot;Extensions3DChromium.h&quot;
 
 #include &quot;GraphicsContext3D.h&quot;
@@ -206,5 +204,3 @@ void Extensions3DChromium::getQueryObjectuivEXT(Platform3DObject query, GC3Denum
 }
 
 } // namespace WebCore
-
-#endif // ENABLE(WEBGL)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622007</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-11 15:14:27 -0700</bug_when>
    <thetext>&gt; -#if ENABLE(WEBGL)

Why remove this enabled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622009</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 15:15:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; -#if ENABLE(WEBGL)
&gt; 
&gt; Why remove this enabled?

It&apos;s silly old.  We use Extension3DChromium in all sorts of code that isn&apos;t related to WebGL these days, and we don&apos;t have any other compile guard for 3d functionality in general in Chromium (it&apos;s just always on).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622015</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 15:18:49 -0700</bug_when>
    <thetext>Committed r116811: &lt;http://trac.webkit.org/changeset/116811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624337</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-15 11:49:24 -0700</bug_when>
    <thetext>Actually, this was stupid - GraphicsContext3DPrivate has references to WebViewImpl and WebViewClient, which are things you clearly should not be allowed to talk about in WebCore/platform.  I&apos;m going to revert and then try again since this is clearly confusing other folks patching this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624349</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-15 11:53:30 -0700</bug_when>
    <thetext>Committed r117110: &lt;http://trac.webkit.org/changeset/117110&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624496</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-15 13:37:58 -0700</bug_when>
    <thetext>Looks like I should first move createOffscreenGraphicsContext3D() out of WebKitPlatformSupport into Platform and remove the unused WebViewClient.h / WebViewImpl.h #includes from GraphicsContext3DChromium.cpp, then do this move again.  Sorry about the churn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624535</commentid>
    <comment_count>9</comment_count>
      <attachid>141504</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-15 14:04:59 -0700</bug_when>
    <thetext>Comment on attachment 141504
Patch

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

&gt; Source/WebCore/platform/chromium/support/GraphicsContext3DChromium.cpp:50
&gt; +#include &quot;WebViewClient.h&quot;
&gt; +#include &quot;WebViewImpl.h&quot;

Sorry, I should have looked at these include paths more closely.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624622</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-15 15:04:21 -0700</bug_when>
    <thetext>GraphicsContext3DChromium.cpp also references many concepts that exist in WebCore but are not in WebCore/platform - for example, CanvasRenderingContext.  It looks like most of this can be mechanically translated to using WebCore/platform concepts like ImageBuffer, but this probably should also be done first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642975</commentid>
    <comment_count>11</comment_count>
      <attachid>146152</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 17:05:57 -0700</bug_when>
    <thetext>Created attachment 146152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642978</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 17:07:25 -0700</bug_when>
    <thetext>Here we go again!  This is just a straight move, no changes to code:


# Changes to be committed:
#   (use &quot;git reset HEAD &lt;file&gt;...&quot; to unstage)
#
#	renamed:    Source/WebKit/chromium/src/Extensions3DChromium.cpp -&gt; Source/WebCore/platform/chromium/support/Extensions3DChromium.cpp
#	renamed:    Source/WebKit/chromium/src/GraphicsContext3DChromium.cpp -&gt; Source/WebCore/platform/chromium/support/GraphicsContext3DChromium.cpp
#	renamed:    Source/WebKit/chromium/src/GraphicsContext3DPrivate.cpp -&gt; Source/WebCore/platform/chromium/support/GraphicsContext3DPrivate.cpp
#	renamed:    Source/WebKit/chromium/src/GraphicsContext3DPrivate.h -&gt; Source/WebCore/platform/chromium/support/GraphicsContext3DPrivate.h
#
# Changes not staged for commit:
#   (use &quot;git add &lt;file&gt;...&quot; to update what will be committed)
#   (use &quot;git checkout -- &lt;file&gt;...&quot; to discard changes in working directory)
#
#	modified:   Source/WebCore/WebCore.gypi
#	modified:   Source/WebKit/chromium/WebKit.gyp
#


I&apos;ve cleaned up the non - WebCore/platform/ dependencies from GraphicsContext3DChromium with the single exception of ImageData, which is in WebCore/html/.  This type is referred to in the cross-platform GraphicsContext3D interface, so while I&apos;m propagating the bad layering I&apos;m not making it any worse.  It doesn&apos;t seem trivial to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642986</commentid>
    <comment_count>13</comment_count>
      <attachid>146152</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-06-06 17:16:38 -0700</bug_when>
    <thetext>Comment on attachment 146152
Patch

Sounds fine as long as it compiles and this is the desired organization of the code. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643011</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 17:38:50 -0700</bug_when>
    <thetext>Committed r119651: &lt;http://trac.webkit.org/changeset/119651&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141504</attachid>
            <date>2012-05-11 15:09:36 -0700</date>
            <delta_ts>2012-06-06 17:05:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86257-20120511150935.patch</filename>
            <type>text/plain</type>
            <size>177929</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2Nzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODlkNGU2MmE2NDIwNTYz
ZWQ5NTk5MDc5MjMwOGM3NTk1Njk0MTgyMC4uNzA2NDA0OWEyODM5ZmJjM2YyNzhhNzE2ZTEzYmVi
OThjYjY2MTk1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxMi0wNS0xMSAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
TW92ZSBpbXBsZW1lbnRhdGlvbiBvZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCBhbmQgcmVs
YXRlZCBmcm9tIFdlYktpdC9jaHJvbWl1bS9zcmMgdG8gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NjI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBXZWJDb3JlIHBsYXRmb3JtIGludGVyZmFjZXMgR3JhcGhpY3NDb250ZXh0M0QgYW5kIEV4
dGVuc2lvbnMzRENocm9taXVtIGFyZSBpbXBsZW1lbnRlZCBpbiBjaHJvbWl1bSBvbiB0b3Agb2YK
KyAgICAgICAgdGhlIFBsYXRmb3JtIGludGVyZmFjZSBXZWJHcmFwaGljc0NvbnRleHQzRC4gVGhp
cyBtb3ZlcyB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydCBjb2RlIGZyb20gV2ViS2l0L2Nocm9t
aXVtL3NyYworICAgICAgICB0byBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQsIHdo
aWNoIGF2b2lkcyBoYXZpbmcgY29kZSBpbiBXZWJLaXQvIGltcGxlbWVudGluZyBXZWJDb3JlIGlu
dGVyZmFjZXMgYW5kCisgICAgICAgIGFsbG93cyBjb2RlIGluIFdlYkNvcmUvcGxhdGZvcm0gdG8g
dXNlIHRoaXMgc3VwcG9ydCBjb2RlIGRpcmVjdGx5IHdoZXJlIGFwcHJvcHJpYXRlLgorCisgICAg
ICAgIFJlZmFjdG9yIG9ubHksIG5vIG5ldyBmdW5jdGlvbmFsaXR5IG9yIHRlc3RzLgorCisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
RXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6RXh0ZW5zaW9uczNEQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06On5FeHRlbnNpb25z
M0RDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6c3Vw
cG9ydHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUVu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6
YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVt
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNEQ2hyb21pdW06OnBvc3RTdWJCdWZmZXJDSFJPTUlVTSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjp1bm1hcEJ1ZmZlclN1YkRhdGFD
SFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9t
aXVtOjp1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RDaHJvbWl1bTo6c2V0VmlzaWJpbGl0eUNIUk9NSVVNKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXJFWFQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUZyYW1lYnVmZmVyQ0hST01J
VU0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OnNldEdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjppc1ZlcnRleEFycmF5T0VTKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVydGV4QXJyYXlPRVMp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1
bTo6c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0pOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OnJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJP
TUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6cGFpbnRGcmFt
ZWJ1ZmZlclRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVt
Ojp0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNEQ2hyb21pdW06OnRleFN0b3JhZ2UyREVYVCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlUXVlcnlFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVF1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRENocm9taXVtOjppc1F1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRENocm9taXVtOjpiZWdpblF1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRENocm9taXVtOjplbmRRdWVyeUVYVCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RDaHJvbWl1bTo6Z2V0UXVlcnlpdkVYVCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RDaHJvbWl1bTo6Z2V0UXVlcnlPYmplY3R1aXZFWFQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0RnJvbVdlYkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1U
ZXh0dXJlKToKKyAgICAgICAgKEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2s6OkdyTWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHck1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2s6Om9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnckNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1hcmtD
b250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6Om1hcmtMYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpwYWludEZyYW1lYnVmZmVyVG9DYW52YXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVzaGFwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEludGVybmFsRnJhbWVi
dWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
aXNDb250ZXh0TG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmlzR0xFUzJDb21wbGlhbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRBdHRyaWJMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldENvbnRleHRB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnRleFN1YkltYWdlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTFpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0yZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0zaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtNGZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTRpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRy
aXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlm
b3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjppc1Jlc291cmNlU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmluaXRpYWxpemVFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjplbnN1cmVFeHRlbnNpb25FbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNFeHRl
bnNpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6fkdy
YXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBs
YXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z3JD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omlz
UmVzb3VyY2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0
Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNv
bXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChHcmFwaGlj
c0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI6On5HcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tB
ZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0Fk
YXB0ZXI6OkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjo6b25Db250ZXh0TG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRD
b250ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKEdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJh
Y2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJh
Y2tBZGFwdGVyOjp+R3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI6OkdyYXBoaWNz
RXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
RXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyOjpvbkVycm9yTWVzc2FnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0Vycm9yTWVzc2FnZUNhbGxiYWNrQWRhcHRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0RXJyb3JNZXNzYWdl
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJD
b21wbGlhbnQpOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRl
Q2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEU3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjo6fkdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1
ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI6OkdyYXBoaWNzQ29u
dGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI6
Om9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldFN3YXBCdWZmZXJzQ29tcGxl
dGVDYWxsYmFja0NIUk9NSVVNKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6R3JhcGhp
Y3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tBZGFwdGVyOjp+R3JhcGhpY3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRE1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjpvbk1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0R3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUpOgorCiAyMDEyLTA1LTExICBUb21teSBXaWRlbmZseWNodCAg
PHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIE1lZGlhU3RyZWFtIEFQSTogRml4IGEgcmVm
ZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIFVzZXJNZWRpYVJlcXVlc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggNzcxZGFhZjViNDEyYTRjMWM3NDJkZTEzOWJjYTg4NGEyMWQzMjc0NC4u
NTJiNDhjZGYwNzkwNDQwZTk5NmZjMGQ2OWE3NTY5MDYwZTYzZjlmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNS0xMSAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBpbXBsZW1l
bnRhdGlvbiBvZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCBhbmQgcmVsYXRlZCBmcm9tIFdl
YktpdC9jaHJvbWl1bS9zcmMgdG8gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NjI1NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKwogMjAxMi0wNS0xMSAgTWluIFFpbiAgPHFpbm1pbkBnb29nbGUuY29tPgogCiAgICAgICAg
IHNwbGl0IE1lZGlhUGxheWVyOjplbnRlckZ1bGxzY3JlZW4gaW50byAyIHNlcGVyYXRlIGZ1bmN0
aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGU3NzQ2ZTY0NzFlOTQ2NzYwZDlhNTk4ZjA4ZGY5OWI0
ZWVjMDIwOTIuLjZjMDZlMmFmOGQ5NGQ0ZDZmMTUwMTMxNDlkMzY1ZDI3NTUzZTRhZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTgyNzUsNiArODI3NSw5IEBACiAgICAgICAgICAgICAnPChQUk9EVUNU
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YUGF0aEdyYW1tYXIuaCcsCiAgICAgICAgIF0s
CiAgICAgICAgICd3ZWJjb3JlX3BsYXRmb3JtX3N1cHBvcnRfZmlsZXMnOiBbCisgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RD
aHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvV2ViQXVkaW9CdXMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYkRhdGEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYkhUVFBCb2R5LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ4YjY3OWQzMDM2MDBjNzAzNjJhMDRkYWJiOGVlYjg1N2EyYWE0YmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRENocm9taXVt
OjpFeHRlbnNpb25zM0RDaHJvbWl1bShHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIHByaXYpCisg
ICAgOiBtX3ByaXZhdGUocHJpdikKK3sKK30KKworRXh0ZW5zaW9uczNEQ2hyb21pdW06On5FeHRl
bnNpb25zM0RDaHJvbWl1bSgpCit7Cit9CisKK2Jvb2wgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnN1
cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5zdXBw
b3J0c0V4dGVuc2lvbihuYW1lKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6ZW5z
dXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGJv
b2wgcmVzdWx0ID0KKyNlbmRpZgorICAgICAgICBtX3ByaXZhdGUtPmVuc3VyZUV4dGVuc2lvbkVu
YWJsZWQobmFtZSk7CisgICAgQVNTRVJUKHJlc3VsdCk7Cit9CisKK2Jvb2wgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXNFeHRlbnNpb25FbmFibGVkKG5hbWUpOworfQorCitpbnQgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KG1fcHJpdmF0ZS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpKTsKK30K
Kwordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAs
IGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0
WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQg
bG9uZyBmaWx0ZXIpCit7CisgICAgbV9wcml2YXRlLT5ibGl0RnJhbWVidWZmZXJDSFJPTUlVTShz
cmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1h
c2ssIGZpbHRlcik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBz
YW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX3ByaXZhdGUtPnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZUNIUk9NSVVNKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpwb3N0U3Vi
QnVmZmVyQ0hST01JVU0oaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7Cisg
ICAgbV9wcml2YXRlLT5wb3N0U3ViQnVmZmVyQ0hST01JVU0oeCwgeSwgd2lkdGgsIGhlaWdodCk7
Cit9CisKK3ZvaWQqIEV4dGVuc2lvbnMzRENocm9taXVtOjptYXBCdWZmZXJTdWJEYXRhQ0hST01J
VU0odW5zaWduZWQgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgYWNjZXNz
KQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSh0YXJn
ZXQsIG9mZnNldCwgc2l6ZSwgYWNjZXNzKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1
bTo6dW5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBt
X3ByaXZhdGUtPnVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGRhdGEpOworfQorCit2b2lkKiBF
eHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHVuc2lnbmVkIHRh
cmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCBhY2Nlc3Mp
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
YWNjZXNzKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6dW5tYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0oY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBtX3ByaXZhdGUtPnVubWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKGRhdGEpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVt
OjpzZXRWaXNpYmlsaXR5Q0hST01JVU0oYm9vbCB2aXNpYmlsaXR5KQoreworICAgIG1fcHJpdmF0
ZS0+c2V0VmlzaWJpbGl0eUNIUk9NSVVNKHZpc2liaWxpdHkpOworfQorCit2b2lkIEV4dGVuc2lv
bnMzRENocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXJFWFQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdDM0RlbnVtKiBhdHRhY2htZW50cykKK3sKKyAg
ICBtX3ByaXZhdGUtPmRpc2NhcmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIG51bUF0dGFjaG1lbnRz
LCBhdHRhY2htZW50cyk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUZy
YW1lYnVmZmVyQ0hST01JVU0oKQoreworICAgIG1fcHJpdmF0ZS0+ZW5zdXJlRnJhbWVidWZmZXJD
SFJPTUlVTSgpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpzZXRHcHVNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxHcHVNZW1vcnlBbGxv
Y2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0+IGNhbGxiYWNrKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKGNhbGxiYWNr
KTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVy
dGV4QXJyYXlPRVMoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENo
cm9taXVtOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KQoreworfQorCitH
QzNEYm9vbGVhbiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bTNET2JqZWN0KQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9t
aXVtOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkKK3sKK30KKworU3RyaW5n
IEV4dGVuc2lvbnMzRENocm9taXVtOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hy
b21pdW06OnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKFBhc3NPd25QdHI8
U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0+IGNhbGxiYWNrKQoreworICAgIG1f
cHJpdmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0oY2FsbGJhY2sp
OworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpyYXRlTGltaXRPZmZzY3JlZW5Db250
ZXh0Q0hST01JVU0oKQoreworICAgIG1fcHJpdmF0ZS0+cmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4
dENIUk9NSVVNKCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnBhaW50RnJhbWVi
dWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCit7CisgICAgbV9w
cml2YXRlLT5wYWludEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIHdpZHRoLCBoZWln
aHQsIHByZW11bHRpcGx5QWxwaGEsIGltYWdlQnVmZmVyKTsKK30KKwordm9pZCBFeHRlbnNpb25z
M0RDaHJvbWl1bTo6dGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNKHVuc2lnbmVkIHRhcmdldCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBpb1N1cmZhY2VJZCwgdW5zaWduZWQgcGxh
bmUpCit7CisgICAgbV9wcml2YXRlLT50ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0odGFyZ2V0
LCB3aWR0aCwgaGVpZ2h0LCBpb1N1cmZhY2VJZCwgcGxhbmUpOworfQorCit2b2lkIEV4dGVuc2lv
bnMzRENocm9taXVtOjp0ZXhTdG9yYWdlMkRFWFQodW5zaWduZWQgaW50IHRhcmdldCwgaW50IGxl
dmVscywgdW5zaWduZWQgaW50IGludGVybmFsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
Cit7CisgICAgbV9wcml2YXRlLT50ZXhTdG9yYWdlMkRFWFQodGFyZ2V0LCBsZXZlbHMsIGludGVy
bmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6Y3JlYXRlUXVlcnlFWFQoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmNyZWF0ZVF1ZXJ5RVhUKCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0
ZVF1ZXJ5RVhUKFBsYXRmb3JtM0RPYmplY3QgcXVlcnkpCit7CisgICAgbV9wcml2YXRlLT5kZWxl
dGVRdWVyeUVYVChxdWVyeSk7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lvbnMzRENocm9taXVt
Ojppc1F1ZXJ5RVhUKFBsYXRmb3JtM0RPYmplY3QgcXVlcnkpCit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+aXNRdWVyeUVYVChxdWVyeSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06
OmJlZ2luUXVlcnlFWFQoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHF1ZXJ5KQor
eworICAgIG1fcHJpdmF0ZS0+YmVnaW5RdWVyeUVYVCh0YXJnZXQsIHF1ZXJ5KTsKK30KKwordm9p
ZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6ZW5kUXVlcnlFWFQoR0MzRGVudW0gdGFyZ2V0KQorewor
ICAgIG1fcHJpdmF0ZS0+ZW5kUXVlcnlFWFQodGFyZ2V0KTsKK30KKwordm9pZCBFeHRlbnNpb25z
M0RDaHJvbWl1bTo6Z2V0UXVlcnlpdkVYVChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiBwYXJhbXMpCit7CisgICAgbV9wcml2YXRlLT5nZXRRdWVyeWl2RVhUKHRhcmdl
dCwgcG5hbWUsIHBhcmFtcyk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmdldFF1
ZXJ5T2JqZWN0dWl2RVhUKFBsYXRmb3JtM0RPYmplY3QgcXVlcnksIEdDM0RlbnVtIHBuYW1lLCBH
QzNEdWludCogcGFyYW1zKQoreworICAgIG1fcHJpdmF0ZS0+Z2V0UXVlcnlPYmplY3R1aXZFWFQo
cXVlcnksIHBuYW1lLCBwYXJhbXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNz
Q29udGV4dDNEQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDkxOWEy
MGMzODVkZTQ4YzMxYzFmNjdmMGU3NTMyYzRiZGFkNmE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRENo
cm9taXVtLmNwcApAQCAtMCwwICsxLDEzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1
ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkhUTUxDYW52
YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiV2ViS2l0Lmgi
CisjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5o
PgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+CisjZW5kaWYKKworI2lmIFVTRShT
S0lBKQorI2luY2x1ZGUgIkdyQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyR0xJbnRlcmZhY2UuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgeworCisvLyBUaGUgbGltaXQgb2YgdGhlIG51bWJlciBvZiB0
ZXh0dXJlcyB3ZSBob2xkIGluIHRoZSBHckNvbnRleHQncyBiaXRtYXAtPnRleHR1cmUgY2FjaGUu
Citjb25zdCBpbnQgbWF4R2FuZXNoVGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7CisvLyBUaGUgbGlt
aXQgb2YgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIEdyQ29udGV4
dCdzIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KK2NvbnN0IHNpemVfdCBtYXhHYW5lc2hUZXh0dXJl
Q2FjaGVCeXRlcyA9IDk2ICogMTAyNCAqIDEwMjQ7CisKK30KKworLy8gVGhlcmUgYXJlIHR3byBs
ZXZlbHMgb2YgZGVsZWdhdGlvbiBpbiB0aGlzIGZpbGU6CisvLworLy8gICAxLiBHcmFwaGljc0Nv
bnRleHQzRCBkZWxlZ2F0ZXMgdG8gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLiBUaGlzIGlzIGRv
bmUKKy8vICAgICAgc28gdGhhdCB3ZSBoYXZlIHNvbWUgcGxhY2UgdG8gc3RvcmUgZGF0YSBtZW1i
ZXJzIGNvbW1vbiBhbW9uZworLy8gICAgICBpbXBsZW1lbnRhdGlvbnM7IEdyYXBoaWNzQ29udGV4
dDNEIG9ubHkgcHJvdmlkZXMgdXMgdGhlIG1fcHJpdmF0ZQorLy8gICAgICBwb2ludGVyLiBXZSBh
bHdheXMgZGVsZWdhdGUgdG8gdGhlIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS4gV2hpbGUgd2UK
Ky8vICAgICAgY291bGQgc2lkZXN0ZXAgaXQgYW5kIGdvIGRpcmVjdGx5IHRvIHRoZSBXZWJHcmFw
aGljc0NvbnRleHQzRCBpbiBzb21lCisvLyAgICAgIGNhc2VzLCBpdCBpcyBiZXR0ZXIgZm9yIGNv
bnNpc3RlbmN5IHRvIGFsd2F5cyBkZWxlZ2F0ZSB0aHJvdWdoIGl0LgorLy8KKy8vICAgMi4gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlIGRlbGVnYXRlcyB0byBhbiBpbXBsZW1lbnRhdGlvbiBvZgor
Ly8gICAgICBXZWJHcmFwaGljc0NvbnRleHQzRC4gVGhpcyBpcyBkb25lIHNvIHdlIGhhdmUgYSBw
bGFjZSB0byBpbmplY3QgYW4KKy8vICAgICAgaW1wbGVtZW50YXRpb24gd2hpY2ggcmVtb3RlcyB0
aGUgT3BlbkdMIGNhbGxzIGFjcm9zcyBwcm9jZXNzZXMuCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUKKworR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoUGFzc093blB0cjxX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0LCBib29sIHByZXNlcnZlRHJh
d2luZ0J1ZmZlcikKKyAgICA6IG1faW1wbCh3ZWJDb250ZXh0KQorICAgICwgbV9pbml0aWFsaXpl
ZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxz
ZSkKKyAgICAsIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyKHByZXNlcnZlRHJhd2luZ0J1ZmZlcikK
KyAgICAsIG1fcmVzb3VyY2VTYWZldHkoUmVzb3VyY2VTYWZldHlVbmtub3duKQorI2lmIFVTRShT
S0lBKQorICAgICwgbV9nckNvbnRleHQoMCkKKyNlbGlmIFVTRShDRykKKyAgICAsIG1fcmVuZGVy
T3V0cHV0U2l6ZSgwKQorI2Vsc2UKKyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQor
I2VuZGlmCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSgpCit7CisjaWYgVVNFKFNLSUEpCisgICAgaWYgKG1fZ3JDb250ZXh0KSB7Cisg
ICAgICAgIG1fZ3JDb250ZXh0LT5jb250ZXh0RGVzdHJveWVkKCk7CisgICAgICAgIEdyU2FmZVVu
cmVmKG1fZ3JDb250ZXh0KTsKKyAgICB9CisjZW5kaWYKK30KKworUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRGcm9tV2ViQ29udGV4dChQYXNzT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+
IHdlYkNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSwg
Ym9vbCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIpCit7CisgICAgYm9vbCByZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdyA9IHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJl
Y3RseVRvSG9zdFdpbmRvdzsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcygpLCAwLCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpOworCisgICAgT3duUHRy
PEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gcHJpdiA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUod2ViQ29udGV4dCwgcHJlc2VydmVEcmF3aW5nQnVmZmVyKSk7CisgICAg
Y29udGV4dC0+bV9wcml2YXRlID0gcHJpdi5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNvbnRleHQu
cmVsZWFzZSgpOworfQorCituYW1lc3BhY2UgeworCit2b2lkIGdldERyYXdpbmdQYXJhbWV0ZXJz
KERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0QqIGdyYXBoaWNzQ29udGV4dDNELAorICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9y
bTNET2JqZWN0KiBmcmFtZUJ1ZmZlcklkLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKK3sKKyAg
ICBpZiAoZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAqZnJhbWVCdWZmZXJJZCA9IGRyYXdpbmdC
dWZmZXItPmZyYW1lYnVmZmVyKCk7CisgICAgICAgICp3aWR0aCA9IGRyYXdpbmdCdWZmZXItPnNp
emUoKS53aWR0aCgpOworICAgICAgICAqaGVpZ2h0ID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhl
aWdodCgpOworICAgIH0gZWxzZSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gMDsKKyAgICAg
ICAgKndpZHRoID0gZ3JhcGhpY3NDb250ZXh0M0QtPndpZHRoKCk7CisgICAgICAgICpoZWlnaHQg
PSBncmFwaGljc0NvbnRleHQzRC0+aGVpZ2h0KCk7CisgICAgfQorfQorCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCit7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gY29udGV4dC0+bV9wcml2YXRlLT5tX2ltcGwuZ2V0KCk7Cit9CisKK1BsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLmdldCgpOworfQorCitQ
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1UZXh0dXJl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRQbGF0Zm9ybVRleHR1cmVJZCgpOwor
fQorCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJh
Y2sgOiBwdWJsaWMgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2tDSFJPTUlVTSB7CitwdWJsaWM6CisgICAgR3JNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogY29udGV4dCkKKyAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIG9u
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9y
eUFsbG9jYXRpb25DSFJPTUlVTSBhbGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgR3JDb250ZXh0
KiBjb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghYWxsb2NhdGlvbi5ncHVSZXNv
dXJjZVNpemVJbkJ5dGVzKSB7CisgICAgICAgICAgICBjb250ZXh0LT5mcmVlR3B1UmVzb3VyY2Vz
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMoMCwgMCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRz
KG1heEdhbmVzaFRleHR1cmVDYWNoZUNvdW50LCBtYXhHYW5lc2hUZXh0dXJlQ2FjaGVCeXRlcyk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogbV9jb250
ZXh0OworfTsKKworR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyQ29udGV4
dCgpCit7CisgICAgaWYgKCFtX2dyQ29udGV4dCkgeworICAgICAgICBTa0F1dG9UVW5yZWY8R3JH
TEludGVyZmFjZT4gaW50ZXJmYWNlKG1faW1wbC0+Y3JlYXRlR3JHTEludGVyZmFjZSgpKTsKKyAg
ICAgICAgbV9nckNvbnRleHQgPSBHckNvbnRleHQ6OkNyZWF0ZShrT3BlbkdMX1NoYWRlcnNfR3JF
bmdpbmUsIHJlaW50ZXJwcmV0X2Nhc3Q8R3JQbGF0Zm9ybTNEQ29udGV4dD4oaW50ZXJmYWNlLmdl
dCgpKSk7CisgICAgICAgIGlmIChtX2dyQ29udGV4dCkgeworICAgICAgICAgICAgbV9nckNvbnRl
eHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhHYW5lc2hUZXh0dXJlQ2FjaGVDb3VudCwgbWF4
R2FuZXNoVGV4dHVyZUNhY2hlQnl0ZXMpOworICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21p
dW0qIGV4dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21p
dW0qPihnZXRFeHRlbnNpb25zKCkpOworICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnMzRENocm9t
aXVtLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIikpCisgICAgICAg
ICAgICAgICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2tDSFJPTUlVTShhZG9wdFB0cihuZXcgR3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdl
ZENhbGxiYWNrKHRoaXMpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1fZ3JDb250
ZXh0OworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJl
VGV4dHVyZSgpCit7CisgICAgbV9pbXBsLT5wcmVwYXJlVGV4dHVyZSgpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBtX2xh
eWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6bWFya0xheWVyQ29tcG9zaXRlZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVl
OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bGF5ZXJDb21wb3NpdGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1lYnVm
ZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyKQoreworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7Cisg
ICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogd2lkdGggKiBoZWlnaHQ7CisjaWYgVVNFKFNLSUEp
CisgICAgY29uc3QgU2tCaXRtYXAqIGNhbnZhc0JpdG1hcCA9IGltYWdlQnVmZmVyLT5jb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKTsKKyAgICBjb25zdCBTa0JpdG1hcCogcmVh
ZGJhY2tCaXRtYXAgPSAwOworICAgIEFTU0VSVChjYW52YXNCaXRtYXAtPmNvbmZpZygpID09IFNr
Qml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7CisgICAgaWYgKGNhbnZhc0JpdG1hcC0+d2lkdGgo
KSA9PSB3aWR0aCAmJiBjYW52YXNCaXRtYXAtPmhlaWdodCgpID09IGhlaWdodCkgeworICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBmYXN0ZXN0IGFuZCBtb3N0IGNvbW1vbiBjYXNlLiBXZSByZWFkIGJh
Y2sKKyAgICAgICAgLy8gZGlyZWN0bHkgaW50byB0aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4K
KyAgICAgICAgcmVhZGJhY2tCaXRtYXAgPSBjYW52YXNCaXRtYXA7CisgICAgICAgIG1fcmVzaXpp
bmdCaXRtYXAucmVzZXQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGFs
bG9jYXRlIGEgdGVtcG9yYXJ5IGJpdG1hcCBmb3IgcmVhZGluZyBiYWNrIHRoZQorICAgICAgICAv
LyBwaXhlbCBkYXRhLiBXZSB3aWxsIHRoZW4gdXNlIFNraWEgdG8gcmVzY2FsZSB0aGlzIGJpdG1h
cCB0bworICAgICAgICAvLyB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4K
KyAgICAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAud2lkdGgoKSAhPSB3aWR0aCB8fCBtX3Jlc2l6
aW5nQml0bWFwLmhlaWdodCgpICE9IGhlaWdodCkgeworICAgICAgICAgICAgbV9yZXNpemluZ0Jp
dG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWlnaHQpOworICAgICAgICAgICAgaWYgKCFtX3Jlc2l6aW5nQml0
bWFwLmFsbG9jUGl4ZWxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHJlYWRiYWNrQml0bWFwID0gJm1fcmVzaXppbmdCaXRtYXA7CisgICAgfQorCisgICAg
Ly8gUmVhZCBiYWNrIHRoZSBmcmFtZSBidWZmZXIuCisgICAgU2tBdXRvTG9ja1BpeGVscyBiaXRt
YXBMb2NrKCpyZWFkYmFja0JpdG1hcCk7CisgICAgcGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KHJlYWRiYWNrQml0bWFwLT5nZXRQaXhlbHMoKSk7CisjZWxpZiBVU0UoQ0cpCisg
ICAgaWYgKCFtX3JlbmRlck91dHB1dCB8fCBtX3JlbmRlck91dHB1dFNpemUgIT0gYnVmZmVyU2l6
ZSkgeworICAgICAgICBtX3JlbmRlck91dHB1dCA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVk
IGNoYXJbYnVmZmVyU2l6ZV0pOworICAgICAgICBtX3JlbmRlck91dHB1dFNpemUgPSBidWZmZXJT
aXplOworICAgIH0KKworICAgIHBpeGVscyA9IG1fcmVuZGVyT3V0cHV0LmdldCgpOworI2Vsc2UK
KyNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQorI2VuZGlmCisKKyAgICBtX2ltcGwt
PnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCA0ICogd2lkdGggKiBoZWlnaHQsIGZyYW1lYnVm
ZmVyLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIGlmIChwcmVtdWx0aXBseUFscGhhKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KSB7CisgICAgICAg
ICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxz
W2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1
LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhl
bHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAv
IDI1NSk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBVU0UoU0tJQSkKKyAgICByZWFkYmFja0Jp
dG1hcC0+bm90aWZ5UGl4ZWxzQ2hhbmdlZCgpOworICAgIGlmIChtX3Jlc2l6aW5nQml0bWFwLnJl
YWR5VG9EcmF3KCkpIHsKKyAgICAgICAgLy8gV2UgbmVlZCB0byBkcmF3IHRoZSByZXNpemluZyBi
aXRtYXAgaW50byB0aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4KKyAgICAgICAgU2tDYW52YXMg
Y2FudmFzKCpjYW52YXNCaXRtYXApOworICAgICAgICBTa1JlY3QgZHN0OworICAgICAgICBkc3Qu
c2V0KFNrSW50VG9TY2FsYXIoMCksIFNrSW50VG9TY2FsYXIoMCksIFNrSW50VG9TY2FsYXIoY2Fu
dmFzQml0bWFwLT53aWR0aCgpKSwgU2tJbnRUb1NjYWxhcihjYW52YXNCaXRtYXAtPmhlaWdodCgp
KSk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChtX3Jlc2l6aW5nQml0bWFwLCAwLCBk
c3QpOworICAgIH0KKyNlbGlmIFVTRShDRykKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRU
b0NhbnZhcyhwaXhlbHMsIHdpZHRoLCBoZWlnaHQsIGltYWdlQnVmZmVyLT53aWR0aCgpLCBpbWFn
ZUJ1ZmZlci0+aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpKTsKKyNlbHNlCisjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciog
ZHJhd2luZ0J1ZmZlcikKK3sKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjb250ZXh0
LT5jYW52YXMoKS0+YnVmZmVyKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklk
OworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdp
bmdCdWZmZXIsIG1faW1wbC5nZXQoKSwgJmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7
CisgICAgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVySWQsIHdpZHRoLCBoZWln
aHQsICFtX2ltcGwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBp
bWFnZUJ1ZmZlcik7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENv
bXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdp
bmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCit7CisgICAgaWYgKG1faW1wbC0+Z2V0Q29udGV4dEF0
dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0Owor
ICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1faW1wbC5nZXQoKSwgJmZy
YW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBp
bWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKyAg
ICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOworICAg
IHNpemVfdCBidWZmZXJTaXplID0gNCAqIHdpZHRoICogaGVpZ2h0OworCisgICAgbV9pbXBsLT5y
ZWFkQmFja0ZyYW1lYnVmZmVyKHBpeGVscywgYnVmZmVyU2l6ZSwgZnJhbWVidWZmZXJJZCwgd2lk
dGgsIGhlaWdodCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkg
Kz0gNCkKKyAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CisKKyAg
ICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICh3aWR0
aCA9PSBtX2ltcGwtPndpZHRoKCkgJiYgaGVpZ2h0ID09IG1faW1wbC0+aGVpZ2h0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW1wbC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKK30KKwor
SW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2ltcGwtPndpZHRoKCksIG1faW1w
bC0+aGVpZ2h0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNDb250
ZXh0TG9zdCgpCit7CisgICAgcmV0dXJuIG1faW1wbC0+aXNDb250ZXh0TG9zdCgpOworfQorCisv
LyBNYWNyb3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUgdG8KKy8vIFdlYkdyYXBoaWNzQ29udGV4dDNELgorCisjZGVmaW5lIERFTEVHQVRFX1RP
X0lNUEwobmFtZSkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUoKSBcCit7
IFwKKyAgICBtX2ltcGwtPm5hbWUoKTsgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExf
UihuYW1lLCBydCkgICAgICAgICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFt
ZSgpIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoKTsgXAorfQorCisjZGVmaW5lIERF
TEVHQVRFX1RPX0lNUExfMShuYW1lLCB0MSkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShhMSk7IFwKK30KKworI2Rl
ZmluZSBERUxFR0FURV9UT19JTVBMXzFSKG5hbWUsIHQxLCBydCkgICAgXAorcnQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5u
YW1lKGExKTsgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMihuYW1lLCB0MSwgdDIp
IFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMikgXAor
eyBcCisgICAgbV9pbXBsLT5uYW1lKGExLCBhMik7IFwKK30KKworI2RlZmluZSBERUxFR0FURV9U
T19JTVBMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6Om5hbWUodDEgYTEsIHQyIGEyKSBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGEx
LCBhMik7IFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzMobmFtZSwgdDEsIHQyLCB0
MykgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzKSAgICBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMyk7ICAgICAgICAg
ICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfM1IobmFtZSwgdDEsIHQy
LCB0MywgcnQpICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0
MiBhMiwgdDMgYTMpICAgIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBh
Myk7ICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNChu
YW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICBcCit7IFwKKyAgICBtX2ltcGwtPm5h
bWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRF
X1RPX0lNUExfNFIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHJ0KSAgICAgICBcCitydCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICAgICAg
ICBcCit7IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAg
ICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzUobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1KSAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKK3sgXAorICAgIG1faW1wbC0+
bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19J
TVBMXzVSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgcnQpICAgICAgXAorcnQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkg
ICAgICAgIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1
KTsgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF82KG5hbWUsIHQxLCB0MiwgdDMs
IHQ0LCB0NSwgdDYpICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBh
MSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICBtX2ltcGwt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKK30KKworI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAorcnQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
LCB0NSBhNSwgdDYgYTYpIFwKK3sgXAorICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBh
MywgYTQsIGE1LCBhNik7ICAgICAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzco
bmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYs
IHQ3IGE3KSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwg
YTcpOyAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzdSKG5hbWUsIHQxLCB0Miwg
dDMsIHQ0LCB0NSwgdDYsIHQ3LCBydCkgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpu
YW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit7
IFwKKyAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KTsg
ICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF84KG5hbWUsIHQxLCB0MiwgdDMsIHQ0
LCB0NSwgdDYsIHQ3LCB0OCkgICAgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4
IGE4KSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcs
IGE4KTsgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF85KG5hbWUsIHQxLCB0
MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDkpICAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYg
YTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgXAorICAgIG1faW1wbC0+bmFtZShhMSwgYTIs
IGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdB
VEVfVE9fSU1QTF85UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCBy
dCkgXAorcnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMg
YTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgXAorICAg
IHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSk7
ICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMTAobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgdDEwKSBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBh
NywgdDggYTgsIHQ5IGE5LCB0MTAgYTEwKSBcCit7IFwKKyAgICBtX2ltcGwtPm5hbWUoYTEsIGEy
LCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwKTsgXAorfQorCitERUxFR0FURV9UT19J
TVBMX1IobWFrZUNvbnRleHRDdXJyZW50LCBib29sKQorCitib29sIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC0+
aXNHTEVTMkNvbXBsaWFudCgpOworfQorCitERUxFR0FURV9UT19JTVBMXzEoYWN0aXZlVGV4dHVy
ZSwgR0MzRGVudW0pCitERUxFR0FURV9UT19JTVBMXzIoYXR0YWNoU2hhZGVyLCBQbGF0Zm9ybTNE
T2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBtX2ltcGwtPmJpbmRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworREVMRUdBVEVf
VE9fSU1QTF8yKGJpbmRCdWZmZXIsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdB
VEVfVE9fSU1QTF8yKGJpbmRGcmFtZWJ1ZmZlciwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3Qp
CitERUxFR0FURV9UT19JTVBMXzIoYmluZFJlbmRlcmJ1ZmZlciwgR0MzRGVudW0sIFBsYXRmb3Jt
M0RPYmplY3QpCitERUxFR0FURV9UT19JTVBMXzIoYmluZFRleHR1cmUsIEdDM0RlbnVtLCBQbGF0
Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fSU1QTF80KGJsZW5kQ29sb3IsIEdDM0RjbGFtcGYs
IEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYpCitERUxFR0FURV9UT19JTVBMXzEo
YmxlbmRFcXVhdGlvbiwgR0MzRGVudW0pCitERUxFR0FURV9UT19JTVBMXzIoYmxlbmRFcXVhdGlv
blNlcGFyYXRlLCBHQzNEZW51bSwgR0MzRGVudW0pCitERUxFR0FURV9UT19JTVBMXzIoYmxlbmRG
dW5jLCBHQzNEZW51bSwgR0MzRGVudW0pCitERUxFR0FURV9UT19JTVBMXzQoYmxlbmRGdW5jU2Vw
YXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtKQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtX2ltcGwtPmJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0
IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1faW1wbC0+YnVmZmVyRGF0YSh0
YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwg
R0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbV9pbXBsLT5idWZm
ZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKK30KKworREVMRUdBVEVfVE9f
SU1QTF8xUihjaGVja0ZyYW1lYnVmZmVyU3RhdHVzLCBHQzNEZW51bSwgR0MzRGVudW0pCitERUxF
R0FURV9UT19JTVBMXzEoY2xlYXIsIEdDM0RiaXRmaWVsZCkKK0RFTEVHQVRFX1RPX0lNUExfNChj
bGVhckNvbG9yLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBm
KQorREVMRUdBVEVfVE9fSU1QTF8xKGNsZWFyRGVwdGgsIEdDM0RjbGFtcGYpCitERUxFR0FURV9U
T19JTVBMXzEoY2xlYXJTdGVuY2lsLCBHQzNEaW50KQorREVMRUdBVEVfVE9fSU1QTF80KGNvbG9y
TWFzaywgR0MzRGJvb2xlYW4sIEdDM0Rib29sZWFuLCBHQzNEYm9vbGVhbiwgR0MzRGJvb2xlYW4p
CitERUxFR0FURV9UT19JTVBMXzEoY29tcGlsZVNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCkKKwor
REVMRUdBVEVfVE9fSU1QTF84KGNvbXByZXNzZWRUZXhJbWFnZTJELCBHQzNEZW51bSwgR0MzRGlu
dCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBjb25z
dCB2b2lkKikKK0RFTEVHQVRFX1RPX0lNUExfOShjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCwgR0Mz
RGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0Rl
bnVtLCBHQzNEc2l6ZWksIGNvbnN0IHZvaWQqKQorREVMRUdBVEVfVE9fSU1QTF84KGNvcHlUZXhJ
bWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdD
M0RzaXplaSwgR0MzRHNpemVpLCBHQzNEaW50KQorREVMRUdBVEVfVE9fSU1QTF84KGNvcHlUZXhT
dWJJbWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwg
R0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCitERUxFR0FURV9UT19JTVBMXzEoY3VsbEZh
Y2UsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU1QTF8xKGRlcHRoRnVuYywgR0MzRGVudW0pCitE
RUxFR0FURV9UT19JTVBMXzEoZGVwdGhNYXNrLCBHQzNEYm9vbGVhbikKK0RFTEVHQVRFX1RPX0lN
UExfMihkZXB0aFJhbmdlLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmKQorREVMRUdBVEVfVE9fSU1Q
TF8yKGRldGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkKK0RF
TEVHQVRFX1RPX0lNUExfMShkaXNhYmxlLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX0lNUExfMShk
aXNhYmxlVmVydGV4QXR0cmliQXJyYXksIEdDM0R1aW50KQorREVMRUdBVEVfVE9fSU1QTF8zKGRy
YXdBcnJheXMsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEc2l6ZWkpCitERUxFR0FURV9UT19JTVBM
XzQoZHJhd0VsZW1lbnRzLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVp
cHRyKQorCitERUxFR0FURV9UT19JTVBMXzEoZW5hYmxlLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RP
X0lNUExfMShlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSwgR0MzRHVpbnQpCitERUxFR0FURV9UT19J
TVBMKGZpbmlzaCkKK0RFTEVHQVRFX1RPX0lNUEwoZmx1c2gpCitERUxFR0FURV9UT19JTVBMXzQo
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIFBs
YXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19JTVBMXzUoZnJhbWVidWZmZXJUZXh0dXJlMkQs
IEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQp
CitERUxFR0FURV9UT19JTVBMXzEoZnJvbnRGYWNlLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX0lN
UExfMShnZW5lcmF0ZU1pcG1hcCwgR0MzRGVudW0pCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87CisgICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZUF0
dHJpYihwcm9ncmFtLCBpbmRleCwgd2ViSW5mbykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpbmZvLm5hbWUgPSB3ZWJJbmZvLm5hbWU7CisgICAgaW5mby50eXBlID0gd2ViSW5mby50eXBl
OworICAgIGluZm8uc2l6ZSA9IHdlYkluZm8uc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAg
ICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87CisgICAg
aWYgKCFtX2ltcGwtPmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIHdlYkluZm8pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5mby5uYW1lID0gd2ViSW5mby5uYW1lOworICAg
IGluZm8udHlwZSA9IHdlYkluZm8udHlwZTsKKyAgICBpbmZvLnNpemUgPSB3ZWJJbmZvLnNpemU7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0RFTEVHQVRFX1RPX0lNUExfNChnZXRBdHRhY2hlZFNo
YWRlcnMsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RzaXplaSwgR0MzRHNpemVpKiwgUGxhdGZvcm0z
RE9iamVjdCopCisKK0dDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRBdHRyaWJM
b2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICByZXR1cm4gbV9pbXBsLT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0Zjgo
KS5kYXRhKCkpOworfQorCitERUxFR0FURV9UT19JTVBMXzIoZ2V0Qm9vbGVhbnYsIEdDM0RlbnVt
LCBHQzNEYm9vbGVhbiopCisKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRCdWZmZXJQYXJhbWV0ZXJp
diwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRDb250ZXh0QXR0cmlidXRlcygp
Cit7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRy
aWJ1dGVzID0gbV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CisgICAgYXR0cmlidXRlcy5hbHBoYSA9IHdl
YkF0dHJpYnV0ZXMuYWxwaGE7CisgICAgYXR0cmlidXRlcy5kZXB0aCA9IHdlYkF0dHJpYnV0ZXMu
ZGVwdGg7CisgICAgYXR0cmlidXRlcy5zdGVuY2lsID0gd2ViQXR0cmlidXRlcy5zdGVuY2lsOwor
ICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gd2ViQXR0cmlidXRlcy5hbnRpYWxpYXM7CisgICAg
YXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxp
ZWRBbHBoYTsKKyAgICBhdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG1fcHJlc2Vy
dmVEcmF3aW5nQnVmZmVyOworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB3ZWJB
dHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVOworICAgIHJldHVybiBhdHRyaWJ1dGVzOworfQor
CitERUxFR0FURV9UT19JTVBMX1IoZ2V0RXJyb3IsIEdDM0RlbnVtKQorCitERUxFR0FURV9UT19J
TVBMXzIoZ2V0RmxvYXR2LCBHQzNEZW51bSwgR0MzRGZsb2F0KikKKworREVMRUdBVEVfVE9fSU1Q
TF80KGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2LCBHQzNEZW51bSwgR0MzRGVu
dW0sIEdDM0RlbnVtLCBHQzNEaW50KikKKworREVMRUdBVEVfVE9fSU1QTF8yKGdldEludGVnZXJ2
LCBHQzNEZW51bSwgR0MzRGludCopCisKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRQcm9ncmFtaXYs
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEaW50KikKKworU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtKQoreworICAgIHJldHVybiBtX2ltcGwtPmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOwor
fQorCitERUxFR0FURV9UT19JTVBMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYsIEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRGludCopCisKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRTaGFkZXJp
diwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdDM0RpbnQqKQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQoreworICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKK30K
KworREVMRUdBVEVfVE9fSU1QTF80KGdldFNoYWRlclByZWNpc2lvbkZvcm1hdCwgR0MzRGVudW0s
IEdDM0RlbnVtLCBHQzNEaW50KiwgR0MzRGludCopCisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAg
ICByZXR1cm4gbV9pbXBsLT5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKK30KKworU3RyaW5nIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCit7CisgICAg
cmV0dXJuIG1faW1wbC0+Z2V0U3RyaW5nKG5hbWUpOworfQorCitERUxFR0FURV9UT19JTVBMXzMo
Z2V0VGV4UGFyYW1ldGVyZnYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGZsb2F0KikKK0RFTEVH
QVRFX1RPX0lNUExfMyhnZXRUZXhQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNE
aW50KikKKworREVMRUdBVEVfVE9fSU1QTF8zKGdldFVuaWZvcm1mdiwgUGxhdGZvcm0zRE9iamVj
dCwgR0MzRGludCwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRVbmlmb3JtaXYs
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RpbnQqKQorCitHQzNEaW50IEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX2ltcGwtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitERUxFR0FURV9U
T19JTVBMXzMoZ2V0VmVydGV4QXR0cmliZnYsIEdDM0R1aW50LCBHQzNEZW51bSwgR0MzRGZsb2F0
KikKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRWZXJ0ZXhBdHRyaWJpdiwgR0MzRHVpbnQsIEdDM0Rl
bnVtLCBHQzNEaW50KikKKworREVMRUdBVEVfVE9fSU1QTF8yUihnZXRWZXJ0ZXhBdHRyaWJPZmZz
ZXQsIEdDM0R1aW50LCBHQzNEZW51bSwgR0MzRHNpemVpcHRyKQorCitERUxFR0FURV9UT19JTVBM
XzIoaGludCwgR0MzRGVudW0sIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU1QTF8xUihpc0J1ZmZl
ciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCitERUxFR0FURV9UT19JTVBMXzFSKGlz
RW5hYmxlZCwgR0MzRGVudW0sIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9fSU1QTF8xUihpc0Zy
YW1lYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKK0RFTEVHQVRFX1RPX0lN
UExfMVIoaXNQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKK0RFTEVHQVRF
X1RPX0lNUExfMVIoaXNSZW5kZXJidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFu
KQorREVMRUdBVEVfVE9fSU1QTF8xUihpc1NoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJv
b2xlYW4pCitERUxFR0FURV9UT19JTVBMXzFSKGlzVGV4dHVyZSwgUGxhdGZvcm0zRE9iamVjdCwg
R0MzRGJvb2xlYW4pCitERUxFR0FURV9UT19JTVBMXzEobGluZVdpZHRoLCBHQzNEZmxvYXQpCitE
RUxFR0FURV9UT19JTVBMXzEobGlua1Byb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FU
RV9UT19JTVBMXzIocGl4ZWxTdG9yZWksIEdDM0RlbnVtLCBHQzNEaW50KQorREVMRUdBVEVfVE9f
SU1QTF8yKHBvbHlnb25PZmZzZXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9f
SU1QTF83KHJlYWRQaXhlbHMsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVp
LCBHQzNEZW51bSwgR0MzRGVudW0sIHZvaWQqKQorREVMRUdBVEVfVE9fSU1QTChyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIpCitERUxFR0FURV9UT19JTVBMXzQocmVuZGVyYnVmZmVyU3RvcmFnZSwgR0Mz
RGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK0RFTEVHQVRFX1RPX0lNUExf
MihzYW1wbGVDb3ZlcmFnZSwgR0MzRGNsYW1wZiwgR0MzRGJvb2xlYW4pCitERUxFR0FURV9UT19J
TVBMXzQoc2Npc3NvciwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIG1faW1wbC0+c2hhZGVy
U291cmNlKHNoYWRlciwgc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworfQorCitERUxFR0FURV9UT19J
TVBMXzMoc3RlbmNpbEZ1bmMsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEdWludCkKK0RFTEVHQVRF
X1RPX0lNUExfNChzdGVuY2lsRnVuY1NlcGFyYXRlLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0Rp
bnQsIEdDM0R1aW50KQorREVMRUdBVEVfVE9fSU1QTF8xKHN0ZW5jaWxNYXNrLCBHQzNEdWludCkK
K0RFTEVHQVRFX1RPX0lNUExfMihzdGVuY2lsTWFza1NlcGFyYXRlLCBHQzNEZW51bSwgR0MzRHVp
bnQpCitERUxFR0FURV9UT19JTVBMXzMoc3RlbmNpbE9wLCBHQzNEZW51bSwgR0MzRGVudW0sIEdD
M0RlbnVtKQorREVMRUdBVEVfVE9fSU1QTF80KHN0ZW5jaWxPcFNlcGFyYXRlLCBHQzNEZW51bSwg
R0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSkKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBw
aXhlbHMpCit7CisgICAgbV9pbXBsLT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworREVMRUdBVEVfVE9fSU1QTF8zKHRleFBhcmFtZXRlcmYsIEdD
M0RlbnVtLCBHQzNEZW51bSwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9fSU1QTF8zKHRleFBhcmFt
ZXRlcmksIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCkKKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IHBpeGVscykKK3sKKyAgICBtX2ltcGwtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQor
CitERUxFR0FURV9UT19JTVBMXzIodW5pZm9ybTFmLCBHQzNEaW50LCBHQzNEZmxvYXQpCisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYpCit7CisgICAgbV9pbXBsLT51bmlmb3JtMWZ2
KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKworREVMRUdBVEVfVE9fSU1QTF8yKHVuaWZvcm0xaSwg
R0MzRGludCwgR0MzRGludCkKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZv
cm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIHYpCit7Cisg
ICAgbV9pbXBsLT51bmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKworREVMRUdBVEVf
VE9fSU1QTF8zKHVuaWZvcm0yZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYpCit7CisgICAgbV9pbXBsLT51bmlmb3JtMmZ2
KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKworREVMRUdBVEVfVE9fSU1QTF8zKHVuaWZvcm0yaSwg
R0MzRGludCwgR0MzRGludCwgR0MzRGludCkKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQq
IHYpCit7CisgICAgbV9pbXBsLT51bmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwor
REVMRUdBVEVfVE9fSU1QTF80KHVuaWZvcm0zZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNEZmxv
YXQsIEdDM0RmbG9hdCkKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0z
ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCogdikKK3sKKyAg
ICBtX2ltcGwtPnVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIHYpOworfQorCitERUxFR0FURV9U
T19JTVBMXzQodW5pZm9ybTNpLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogdikKK3sKKyAgICBtX2ltcGwtPnVuaWZvcm0z
aXYobG9jYXRpb24sIHNpemUsIHYpOworfQorCitERUxFR0FURV9UT19JTVBMXzUodW5pZm9ybTRm
LCBHQzNEaW50LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYpCit7CisgICAgbV9pbXBsLT51bmlmb3Jt
NGZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKworREVMRUdBVEVfVE9fSU1QTF81KHVuaWZvcm00
aSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCkKKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpIHNpemUsIEdDM0RpbnQqIHYpCit7CisgICAgbV9pbXBsLT51bmlmb3JtNGl2KGxvY2F0
aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZv
cm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ltcGwtPnVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQor
eworICAgIG1faW1wbC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3Nl
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtTWF0
cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbXBsLT51bmlmb3JtTWF0cml4NGZ2
KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKK30KKworREVMRUdBVEVfVE9fSU1Q
TF8xKHVzZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19JTVBMXzEodmFs
aWRhdGVQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0KQorCitERUxFR0FURV9UT19JTVBMXzIodmVy
dGV4QXR0cmliMWYsIEdDM0R1aW50LCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19JTVBMXzIodmVy
dGV4QXR0cmliMWZ2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX0lNUExfMyh2
ZXJ0ZXhBdHRyaWIyZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdBVEVf
VE9fSU1QTF8yKHZlcnRleEF0dHJpYjJmdiwgR0MzRHVpbnQsIEdDM0RmbG9hdCopCitERUxFR0FU
RV9UT19JTVBMXzQodmVydGV4QXR0cmliM2YsIEdDM0R1aW50LCBHQzNEZmxvYXQsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9fSU1QTF8yKHZlcnRleEF0dHJpYjNmdiwgR0MzRHVp
bnQsIEdDM0RmbG9hdCopCitERUxFR0FURV9UT19JTVBMXzUodmVydGV4QXR0cmliNGYsIEdDM0R1
aW50LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCitERUxFR0FU
RV9UT19JTVBMXzIodmVydGV4QXR0cmliNGZ2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKK0RFTEVH
QVRFX1RPX0lNUExfNih2ZXJ0ZXhBdHRyaWJQb2ludGVyLCBHQzNEdWludCwgR0MzRGludCwgR0Mz
RGVudW0sIEdDM0Rib29sZWFuLCBHQzNEc2l6ZWksIEdDM0RzaXplaXB0cikKKworREVMRUdBVEVf
VE9fSU1QTF80KHZpZXdwb3J0LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXpl
aSkKKworREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0ZUJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkK
K0RFTEVHQVRFX1RPX0lNUExfUihjcmVhdGVGcmFtZWJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkK
K0RFTEVHQVRFX1RPX0lNUExfUihjcmVhdGVQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0KQorREVM
RUdBVEVfVE9fSU1QTF9SKGNyZWF0ZVJlbmRlcmJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkKK0RF
TEVHQVRFX1RPX0lNUExfMVIoY3JlYXRlU2hhZGVyLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVj
dCkKK0RFTEVHQVRFX1RPX0lNUExfUihjcmVhdGVUZXh0dXJlLCBQbGF0Zm9ybTNET2JqZWN0KQor
CitERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQorREVM
RUdBVEVfVE9fSU1QTF8xKGRlbGV0ZUZyYW1lYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQorREVM
RUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FU
RV9UT19JTVBMXzEoZGVsZXRlUmVuZGVyYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdB
VEVfVE9fSU1QTF8xKGRlbGV0ZVNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RP
X0lNUExfMShkZWxldGVUZXh0dXJlLCBQbGF0Zm9ybTNET2JqZWN0KQorCitERUxFR0FURV9UT19J
TVBMXzEoc3ludGhlc2l6ZUdMRXJyb3IsIEdDM0RlbnVtKQorCitFeHRlbnNpb25zM0QqIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVu
c2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RD
aHJvbWl1bSh0aGlzKSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzUmVzb3VyY2VTYWZlKCkKK3sKKyAgICBpZiAo
bV9yZXNvdXJjZVNhZmV0eSA9PSBSZXNvdXJjZVNhZmV0eVVua25vd24pCisgICAgICAgIG1fcmVz
b3VyY2VTYWZldHkgPSBnZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fcmVz
b3VyY2Vfc2FmZSIpID8gUmVzb3VyY2VTYWZlIDogUmVzb3VyY2VVbnNhZmU7CisgICAgcmV0dXJu
IG1fcmVzb3VyY2VTYWZldHkgPT0gUmVzb3VyY2VTYWZlOworfQorCituYW1lc3BhY2UgeworCit2
b2lkIHNwbGl0U3RyaW5nSGVscGVyKGNvbnN0IFN0cmluZyYgc3RyLCBIYXNoU2V0PFN0cmluZz4m
IHNldCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBzdWJzdHJpbmdzOworICAgIHN0ci5zcGxpdCgi
ICIsIHN1YnN0cmluZ3MpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Vic3RyaW5ncy5z
aXplKCk7ICsraSkKKyAgICAgICAgc2V0LmFkZChzdWJzdHJpbmdzW2ldKTsKK30KKworU3RyaW5n
IG1hcEV4dGVuc2lvbk5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09
ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IgorICAgICAgICB8fCBuYW1lID09ICJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpCisgICAgICAgIHJldHVybiAiR0xfQ0hST01JVU1f
ZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiOworICAgIHJldHVybiBuYW1lOworfQorCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmluaXRp
YWxpemVFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAobV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVu
c2lvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRl
bnNpb25zID0gdHJ1ZTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBBU1NFUlQoc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47
CisKKyAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldFN0cmluZyhHcmFwaGljc0NvbnRl
eHQzRDo6RVhURU5TSU9OUyk7CisgICAgc3BsaXRTdHJpbmdIZWxwZXIoZXh0ZW5zaW9uc1N0cmlu
ZywgbV9lbmFibGVkRXh0ZW5zaW9ucyk7CisKKyAgICBTdHJpbmcgcmVxdWVzdGFibGVFeHRlbnNp
b25zU3RyaW5nID0gbV9pbXBsLT5nZXRSZXF1ZXN0YWJsZUV4dGVuc2lvbnNDSFJPTUlVTSgpOwor
ICAgIHNwbGl0U3RyaW5nSGVscGVyKHJlcXVlc3RhYmxlRXh0ZW5zaW9uc1N0cmluZywgbV9yZXF1
ZXN0YWJsZUV4dGVuc2lvbnMpOworfQorCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaW5pdGlhbGl6
ZUV4dGVuc2lvbnMoKTsKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcEV4dGVuc2lvbk5hbWUo
bmFtZSk7CisgICAgcmV0dXJuIG1fZW5hYmxlZEV4dGVuc2lvbnMuY29udGFpbnMobWFwcGVkTmFt
ZSkgfHwgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobWFwcGVkTmFtZSk7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjplbnN1cmVFeHRlbnNpb25FbmFibGVkKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOworCisgICAg
U3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBFeHRlbnNpb25OYW1lKG5hbWUpOworICAgIGlmIChtX2Vu
YWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1l
KSkgeworICAgICAgICBtX2ltcGwtPnJlcXVlc3RFeHRlbnNpb25DSFJPTUlVTShtYXBwZWROYW1l
LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgbV9lbmFibGVkRXh0ZW5zaW9ucy5jbGVhcigpOwor
ICAgICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jbGVhcigpOworICAgICAgICBtX2luaXRp
YWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IGZhbHNlOworICAgIH0KKworICAgIGluaXRpYWxp
emVFeHRlbnNpb25zKCk7CisgICAgcmV0dXJuIG1fZW5hYmxlZEV4dGVuc2lvbnMuY29udGFpbnMo
bWFwcGVkTmFtZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0V4dGVu
c2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGluaXRpYWxpemVFeHRlbnNp
b25zKCk7CisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBFeHRlbnNpb25OYW1lKG5hbWUpOwor
ICAgIHJldHVybiBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUpOworfQor
CitERUxFR0FURV9UT19JTVBMXzQocG9zdFN1YkJ1ZmZlckNIUk9NSVVNLCBpbnQsIGludCwgaW50
LCBpbnQpCisKK0RFTEVHQVRFX1RPX0lNUExfNFIobWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNLCBH
QzNEZW51bSwgR0MzRHNpemVpcHRyLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCB2b2lkKikKK0RFTEVH
QVRFX1RPX0lNUExfMSh1bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSwgY29uc3Qgdm9pZCopCitE
RUxFR0FURV9UT19JTVBMXzlSKG1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSwgR0MzRGVudW0sIEdD
M0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEZW51bSwg
R0MzRGVudW0sIEdDM0RlbnVtLCB2b2lkKikKK0RFTEVHQVRFX1RPX0lNUExfMSh1bm1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTSwgY29uc3Qgdm9pZCopCisKK0RFTEVHQVRFX1RPX0lNUExfMShzZXRW
aXNpYmlsaXR5Q0hST01JVU0sIGJvb2wpOworCitERUxFR0FURV9UT19JTVBMXzMoZGlzY2FyZEZy
YW1lYnVmZmVyRVhULCBHQzNEZW51bSwgR0MzRHNpemVpLCBjb25zdCBHQzNEZW51bSopOworREVM
RUdBVEVfVE9fSU1QTChlbnN1cmVGcmFtZWJ1ZmZlckNIUk9NSVVNKTsKKworREVMRUdBVEVfVE9f
SU1QTF8xMChibGl0RnJhbWVidWZmZXJDSFJPTUlVTSwgR0MzRGludCwgR0MzRGludCwgR0MzRGlu
dCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGJpdGZp
ZWxkLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX0lNUExfNShyZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVDSFJPTUlVTSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RzaXpl
aSwgR0MzRHNpemVpKQorCitERUxFR0FURV9UT19JTVBMKHJhdGVMaW1pdE9mZnNjcmVlbkNvbnRl
eHRDSFJPTUlVTSkKK0RFTEVHQVRFX1RPX0lNUExfUihnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
LCBHQzNEZW51bSkKKworREVMRUdBVEVfVE9fSU1QTF8xUihnZXRUcmFuc2xhdGVkU2hhZGVyU291
cmNlQU5HTEUsIFBsYXRmb3JtM0RPYmplY3QsIFN0cmluZykKK0RFTEVHQVRFX1RPX0lNUExfNSh0
ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0sIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBH
QzNEdWludCwgR0MzRHVpbnQpCitERUxFR0FURV9UT19JTVBMXzUodGV4U3RvcmFnZTJERVhULCBH
QzNEZW51bSwgR0MzRGludCwgR0MzRHVpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCisKK0RFTEVHQVRF
X1RPX0lNUExfUihjcmVhdGVRdWVyeUVYVCwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RP
X0lNUExfMShkZWxldGVRdWVyeUVYVCwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX0lN
UExfMVIoaXNRdWVyeUVYVCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCitERUxFR0FU
RV9UT19JTVBMXzIoYmVnaW5RdWVyeUVYVCwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCitE
RUxFR0FURV9UT19JTVBMXzEoZW5kUXVlcnlFWFQsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU1Q
TF8zKGdldFF1ZXJ5aXZFWFQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCopCitERUxFR0FU
RV9UT19JTVBMXzMoZ2V0UXVlcnlPYmplY3R1aXZFWFQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rl
bnVtLCBHQzNEdWludCopCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR3JhcGhpY3NDb250ZXh0M0QK
Ky8vCisKKy8vIE1hY3JvcyB0byBhc3Npc3QgaW4gZGVsZWdhdGluZyBmcm9tIEdyYXBoaWNzQ29u
dGV4dDNEIHRvCisvLyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuCisKKyNkZWZpbmUgREVMRUdB
VEVfVE9fSU5URVJOQUwobmFtZSkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSgpIFwK
K3sgXAorICAgIG1fcHJpdmF0ZS0+bmFtZSgpOyBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9f
SU5URVJOQUxfUihuYW1lLCBydCkgICAgICAgICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpu
YW1lKCkgXAoreyBcCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZSgpOyBcCit9CisKKyNkZWZp
bmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMShuYW1lLCB0MSkgXAordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bmFtZSh0MSBhMSkgXAoreyBcCisgICAgbV9wcml2YXRlLT5uYW1lKGExKTsgXAorfQor
CisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKG5hbWUsIHQxLCBydCkgICAgXAorcnQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEpIFwKK3sgXAorICAgIHJldHVybiBtX3ByaXZh
dGUtPm5hbWUoYTEpOyBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMihuYW1l
LCB0MSwgdDIpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSBc
Cit7IFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyKTsgXAorfQorCisjZGVmaW5lIERFTEVH
QVRFX1RPX0lOVEVSTkFMXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRl
eHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKK3sgXAorICAgIHJldHVybiBtX3ByaXZhdGUtPm5h
bWUoYTEsIGEyKTsgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzMobmFtZSwg
dDEsIHQyLCB0MykgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMpICAgIFwKK3sgXAorICAgIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzKTsgICAg
ICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfM1IobmFt
ZSwgdDEsIHQyLCB0MywgcnQpICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEs
IHQyIGEyLCB0MyBhMykgICAgXAoreyBcCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSwg
YTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5U
RVJOQUxfNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKK3sgXAorICAgIG1fcHJpdmF0
ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREVM
RUdBVEVfVE9fSU5URVJOQUxfNFIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHJ0KSAgICBcCitydCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKK3sg
XAorICAgIHJldHVybiBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAg
XAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzUobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1KSAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEy
LCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAoreyBcCisgICAgbV9wcml2YXRlLT5uYW1l
KGExLCBhMiwgYTMsIGE0LCBhNSk7ICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVS
TkFMXzYobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAor
eyBcCisgICAgbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAgIFwKK30K
KworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF82UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwg
dDUsIHQ2LCBydCkgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYpIFwKK3sgXAorICAgIHJldHVybiBtX3ByaXZhdGUt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKK30KKworI2RlZmluZSBERUxF
R0FURV9UT19JTlRFUk5BTF83KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3KSBcCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0
NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit7IFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBh
MywgYTQsIGE1LCBhNiwgYTcpOyAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5B
TF83UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKK3J0IEdyYXBoaWNz
Q29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYs
IHQ3IGE3KSBcCit7IFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMsIGE0
LCBhNSwgYTYsIGE3KTsgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfOChu
YW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgIFwKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBh
NiwgdDcgYTcsIHQ4IGE4KSBcCit7IFwKKyAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywg
YTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fSU5U
RVJOQUxfOShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5KSBcCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBh
NSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgXAorICAgIG1fcHJpdmF0ZS0+bmFt
ZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCit9CisKKyNkZWZpbmUg
REVMRUdBVEVfVE9fSU5URVJOQUxfOVIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcs
IHQ4LCB0OSwgcnQpIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgXAor
ICAgIHJldHVybiBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4
LCBhOSk7ICAgXAorfQorCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sKQoreworfQorCitH
cmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldENvbnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7CisgICAgbV9wcml2YXRlLT5zZXRFcnJv
ck1lc3NhZ2VDYWxsYmFjayhudWxscHRyKTsKKyAgICBtX3ByaXZhdGUtPnNldFN3YXBCdWZmZXJz
Q29tcGxldGVDYWxsYmFja0NIUk9NSVVNKG51bGxwdHIpOworICAgIG1fcHJpdmF0ZS0+c2V0R3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKG51bGxwdHIpOworfQorCitQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQoreworICAgIEFTU0VSVChyZW5kZXJT
dHlsZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwor
CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRyaWJ1
dGVzOworICAgIHdlYkF0dHJpYnV0ZXMuYWxwaGEgPSBhdHRycy5hbHBoYTsKKyAgICB3ZWJBdHRy
aWJ1dGVzLmRlcHRoID0gYXR0cnMuZGVwdGg7CisgICAgd2ViQXR0cmlidXRlcy5zdGVuY2lsID0g
YXR0cnMuc3RlbmNpbDsKKyAgICB3ZWJBdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGF0dHJzLmFudGlh
bGlhczsKKyAgICB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IGF0dHJzLnByZW11
bHRpcGxpZWRBbHBoYTsKKyAgICB3ZWJBdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IGF0dHJzLm5v
RXh0ZW5zaW9uczsKKyAgICB3ZWJBdHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gYXR0cnMuc2hh
cmVSZXNvdXJjZXM7CisgICAgd2ViQXR0cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQVSA9IGF0dHJz
LnByZWZlckRpc2NyZXRlR1BVOworCisgICAgT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0Q+IHdlYkNvbnRleHQgPSBhZG9wdFB0cihXZWJLaXQ6OndlYktpdFBsYXRmb3JtU3VwcG9y
dCgpLT5jcmVhdGVPZmZzY3JlZW5HcmFwaGljc0NvbnRleHQzRCh3ZWJBdHRyaWJ1dGVzKSk7Cisg
ICAgaWYgKCF3ZWJDb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0
KHdlYkNvbnRleHQucmVsZWFzZSgpLCByZW5kZXJTdHlsZSwgYXR0cnMucHJlc2VydmVEcmF3aW5n
QnVmZmVyKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0
IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPnBsYXRmb3JtVGV4dHVyZSgpOworfQorCisjaWYgVVNFKFNLSUEpCitHckNv
bnRleHQqIEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRleHQoKQoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmdyQ29udGV4dCgpOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wcmVwYXJlVGV4dHVy
ZSgpOworfQorCitJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVm
ZmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0SW50ZXJuYWxGcmFt
ZWJ1ZmZlclNpemUoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZXNvdXJjZVNh
ZmUoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzUmVzb3VyY2VTYWZlKCk7Cit9CisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0Nv
bnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisjZW5k
aWYKKworREVMRUdBVEVfVE9fSU5URVJOQUxfUihtYWtlQ29udGV4dEN1cnJlbnQsIGJvb2wpCitE
RUxFR0FURV9UT19JTlRFUk5BTF8yKHJlc2hhcGUsIGludCwgaW50KQorCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKGFjdGl2ZVRleHR1cmUsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
MihhdHRhY2hTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpCitERUxF
R0FURV9UT19JTlRFUk5BTF8zKGJpbmRBdHRyaWJMb2NhdGlvbiwgUGxhdGZvcm0zRE9iamVjdCwg
R0MzRHVpbnQsIGNvbnN0IFN0cmluZyYpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZEJ1
ZmZlciwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19JTlRFUk5BTF8y
KGJpbmRGcmFtZWJ1ZmZlciwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9U
T19JTlRFUk5BTF8yKGJpbmRSZW5kZXJidWZmZXIsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihiaW5kVGV4dHVyZSwgR0MzRGVudW0sIFBsYXRmb3Jt
M0RPYmplY3QpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGJsZW5kQ29sb3IsIEdDM0RjbGFtcGYs
IEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYpCitERUxFR0FURV9UT19JTlRFUk5B
TF8xKGJsZW5kRXF1YXRpb24sIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihibGVu
ZEVxdWF0aW9uU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzIoYmxlbmRGdW5jLCBHQzNEZW51bSwgR0MzRGVudW0pCitERUxFR0FURV9UT19JTlRFUk5B
TF80KGJsZW5kRnVuY1NlcGFyYXRlLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNE
ZW51bSkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMyhidWZmZXJEYXRhLCBHQzNEZW51bSwgR0Mz
RHNpemVpcHRyLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoYnVmZmVyRGF0YSwg
R0MzRGVudW0sIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCosIEdDM0RlbnVtKQorREVMRUdBVEVf
VE9fSU5URVJOQUxfNChidWZmZXJTdWJEYXRhLCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRHNp
emVpcHRyLCBjb25zdCB2b2lkKikKKworREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cywgR0MzRGVudW0sIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU5URVJOQUxf
MShjbGVhciwgR0MzRGJpdGZpZWxkKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChjbGVhckNvbG9y
LCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmKQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMShjbGVhckRlcHRoLCBHQzNEY2xhbXBmKQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMShjbGVhclN0ZW5jaWwsIEdDM0RpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGNv
bG9yTWFzaywgR0MzRGJvb2xlYW4sIEdDM0Rib29sZWFuLCBHQzNEYm9vbGVhbiwgR0MzRGJvb2xl
YW4pCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGNvbXBpbGVTaGFkZXIsIFBsYXRmb3JtM0RPYmpl
Y3QpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzgoY29tcHJlc3NlZFRleEltYWdlMkQsIEdDM0Rl
bnVtLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNE
c2l6ZWksIGNvbnN0IHZvaWQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfOShjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQs
IEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEc2l6ZWksIGNvbnN0IHZvaWQqKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfOChjb3B5VGV4SW1hZ2UyRCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RlbnVtLCBH
QzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGludCkKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzgoY29weVRleFN1YkltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNE
aW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzEoY3VsbEZhY2UsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU5U
RVJOQUxfMShkZXB0aEZ1bmMsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZXB0
aE1hc2ssIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihkZXB0aFJhbmdlLCBH
QzNEY2xhbXBmLCBHQzNEY2xhbXBmKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihkZXRhY2hTaGFk
ZXIsIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8xKGRpc2FibGUsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXksIEdDM0R1aW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhkcmF3
QXJyYXlzLCBHQzNEZW51bSwgR0MzRGludCwgR0MzRHNpemVpKQorREVMRUdBVEVfVE9fSU5URVJO
QUxfNChkcmF3RWxlbWVudHMsIEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEaW50
cHRyKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGVuYWJsZSwgR0MzRGVudW0pCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGVuYWJsZVZlcnRleEF0dHJpYkFycmF5LCBHQzNEdWludCkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMKGZpbmlzaCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMKGZsdXNoKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfNChmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciwgR0MzRGVudW0sIEdD
M0RlbnVtLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzUoZnJhbWVidWZmZXJUZXh0dXJlMkQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIFBs
YXRmb3JtM0RPYmplY3QsIEdDM0RpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGZyb250RmFj
ZSwgR0MzRGVudW0pCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGdlbmVyYXRlTWlwbWFwLCBHQzNE
ZW51bSkKKworREVMRUdBVEVfVE9fSU5URVJOQUxfM1IoZ2V0QWN0aXZlQXR0cmliLCBQbGF0Zm9y
bTNET2JqZWN0LCBHQzNEdWludCwgQWN0aXZlSW5mbyYsIGJvb2wpCitERUxFR0FURV9UT19JTlRF
Uk5BTF8zUihnZXRBY3RpdmVVbmlmb3JtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEdWludCwgQWN0
aXZlSW5mbyYsIGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGdldEF0dGFjaGVkU2hhZGVy
cywgUGxhdGZvcm0zRE9iamVjdCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkqLCBQbGF0Zm9ybTNET2Jq
ZWN0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldEF0dHJpYkxvY2F0aW9uLCBQbGF0Zm9y
bTNET2JqZWN0LCBjb25zdCBTdHJpbmcmLCBHQzNEaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxf
MihnZXRCb29sZWFudiwgR0MzRGVudW0sIEdDM0Rib29sZWFuKikKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzMoZ2V0QnVmZmVyUGFyYW1ldGVyaXYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCop
CitERUxFR0FURV9UT19JTlRFUk5BTF9SKGdldENvbnRleHRBdHRyaWJ1dGVzLCBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoZ2V0RXJyb3IsIEdD
M0RlbnVtKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihnZXRGbG9hdHYsIEdDM0RlbnVtLCBHQzNE
ZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCopCitERUxF
R0FURV9UT19JTlRFUk5BTF8yKGdldEludGVnZXJ2LCBHQzNEZW51bSwgR0MzRGludCopCitERUxF
R0FURV9UT19JTlRFUk5BTF8zKGdldFByb2dyYW1pdiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVu
dW0sIEdDM0RpbnQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0UHJvZ3JhbUluZm9Mb2cs
IFBsYXRmb3JtM0RPYmplY3QsIFN0cmluZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCopCitERUxF
R0FURV9UT19JTlRFUk5BTF8zKGdldFNoYWRlcml2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51
bSwgR0MzRGludCopCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihnZXRTaGFkZXJJbmZvTG9nLCBQ
bGF0Zm9ybTNET2JqZWN0LCBTdHJpbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KiwgR0MzRGludCop
CitERUxFR0FURV9UT19JTlRFUk5BTF8xUihnZXRTaGFkZXJTb3VyY2UsIFBsYXRmb3JtM0RPYmpl
Y3QsIFN0cmluZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGdldFN0cmluZywgR0MzRGVudW0s
IFN0cmluZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VGV4UGFyYW1ldGVyZnYsIEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VGV4
UGFyYW1ldGVyaXYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCopCitERUxFR0FURV9UT19J
TlRFUk5BTF8zKGdldFVuaWZvcm1mdiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCwgR0MzRGZs
b2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VW5pZm9ybWl2LCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEaW50LCBHQzNEaW50KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldFVuaWZv
cm1Mb2NhdGlvbiwgUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiwgR0MzRGludCkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VmVydGV4QXR0cmliZnYsIEdDM0R1aW50LCBHQzNEZW51
bSwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VmVydGV4QXR0cmliaXYs
IEdDM0R1aW50LCBHQzNEZW51bSwgR0MzRGludCopCitERUxFR0FURV9UT19JTlRFUk5BTF8yUihn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQsIEdDM0R1aW50LCBHQzNEZW51bSwgR0MzRHNpemVpcHRyKQor
CitERUxFR0FURV9UT19JTlRFUk5BTF8yKGhpbnQsIEdDM0RlbnVtLCBHQzNEZW51bSkKK0RFTEVH
QVRFX1RPX0lOVEVSTkFMXzFSKGlzQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVh
bikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzRW5hYmxlZCwgR0MzRGVudW0sIEdDM0Rib29s
ZWFuKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNGcmFtZWJ1ZmZlciwgUGxhdGZvcm0zRE9i
amVjdCwgR0MzRGJvb2xlYW4pCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1Byb2dyYW0sIFBs
YXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNS
ZW5kZXJidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfMVIoaXNTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQorREVM
RUdBVEVfVE9fSU5URVJOQUxfMVIoaXNUZXh0dXJlLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9v
bGVhbikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEobGluZVdpZHRoLCBHQzNEZmxvYXQpCitERUxF
R0FURV9UT19JTlRFUk5BTF8xKGxpbmtQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMihwaXhlbFN0b3JlaSwgR0MzRGVudW0sIEdDM0RpbnQpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8yKHBvbHlnb25PZmZzZXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorCitE
RUxFR0FURV9UT19JTlRFUk5BTF83KHJlYWRQaXhlbHMsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0Rz
aXplaSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRGVudW0sIHZvaWQqKQorCitERUxFR0FURV9U
T19JTlRFUk5BTChyZWxlYXNlU2hhZGVyQ29tcGlsZXIpCitERUxFR0FURV9UT19JTlRFUk5BTF80
KHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNE
c2l6ZWkpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHNhbXBsZUNvdmVyYWdlLCBHQzNEY2xhbXBm
LCBHQzNEYm9vbGVhbikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoc2Npc3NvciwgR0MzRGludCwg
R0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCitERUxFR0FURV9UT19JTlRFUk5BTF8yKHNo
YWRlclNvdXJjZSwgUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJikKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzMoc3RlbmNpbEZ1bmMsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEdWludCkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzQoc3RlbmNpbEZ1bmNTZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0Rl
bnVtLCBHQzNEaW50LCBHQzNEdWludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoc3RlbmNpbE1h
c2ssIEdDM0R1aW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihzdGVuY2lsTWFza1NlcGFyYXRl
LCBHQzNEZW51bSwgR0MzRHVpbnQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHN0ZW5jaWxPcCwg
R0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQoc3Rl
bmNpbE9wU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtKQor
CitERUxFR0FURV9UT19JTlRFUk5BTF85Uih0ZXhJbWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwg
R0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVu
dW0sIGNvbnN0IHZvaWQqLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh0ZXhQYXJhbWV0
ZXJmLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RmbG9hdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzModGV4UGFyYW1ldGVyaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KQorREVMRUdBVEVf
VE9fSU5URVJOQUxfOSh0ZXhTdWJJbWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwg
R0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEZW51bSwgY29uc3Qg
dm9pZCopCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodW5pZm9ybTFmLCBHQzNEaW50LCBHQzNE
ZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0xZnYsIEdDM0RpbnQsIEdDM0Rz
aXplaSwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodW5pZm9ybTFpLCBHQzNE
aW50LCBHQzNEaW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMWl2LCBHQzNEaW50
LCBHQzNEc2l6ZWksIEdDM0RpbnQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMmYs
IEdDM0RpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1
bmlmb3JtMmZ2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RmbG9hdCopCitERUxFR0FURV9UT19J
TlRFUk5BTF8zKHVuaWZvcm0yaSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCkKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzModW5pZm9ybTJpdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEaW50KikK
K0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybTNmLCBHQzNEaW50LCBHQzNEZmxvYXQsIEdD
M0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtM2Z2LCBH
QzNEaW50LCBHQzNEc2l6ZWksIEdDM0RmbG9hdCopCitERUxFR0FURV9UT19JTlRFUk5BTF80KHVu
aWZvcm0zaSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzModW5pZm9ybTNpdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEaW50KikKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzUodW5pZm9ybTRmLCBHQzNEaW50LCBHQzNEZmxvYXQsIEdDM0Rm
bG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZv
cm00ZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMXzUodW5pZm9ybTRpLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNE
aW50KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtNGl2LCBHQzNEaW50LCBHQzNEc2l6
ZWksIEdDM0RpbnQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlmb3JtTWF0cml4MmZ2LCBH
QzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuLCBHQzNEZmxvYXQqKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfNCh1bmlmb3JtTWF0cml4M2Z2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rib29s
ZWFuLCBHQzNEZmxvYXQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlmb3JtTWF0cml4NGZ2
LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuLCBHQzNEZmxvYXQqKQorCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xKHVzZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9U
T19JTlRFUk5BTF8xKHZhbGlkYXRlUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKKworREVMRUdB
VEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIxZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCkKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzIodmVydGV4QXR0cmliMWZ2LCBHQzNEdWludCwgR0MzRGZsb2F0
KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzModmVydGV4QXR0cmliMmYsIEdDM0R1aW50LCBHQzNE
ZmxvYXQsIEdDM0RmbG9hdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIodmVydGV4QXR0cmliMmZ2
LCBHQzNEdWludCwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzQodmVydGV4QXR0
cmliM2YsIEdDM0R1aW50LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIzZnYsIEdDM0R1aW50LCBHQzNEZmxvYXQqKQor
REVMRUdBVEVfVE9fSU5URVJOQUxfNSh2ZXJ0ZXhBdHRyaWI0ZiwgR0MzRHVpbnQsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFM
XzIodmVydGV4QXR0cmliNGZ2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX0lO
VEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgR0MzRHVpbnQsIEdDM0RpbnQsIEdDM0RlbnVt
LCBHQzNEYm9vbGVhbiwgR0MzRHNpemVpLCBHQzNEaW50cHRyKQorCitERUxFR0FURV9UT19JTlRF
Uk5BTF80KHZpZXdwb3J0LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkK
KworREVMRUdBVEVfVE9fSU5URVJOQUwobWFya0xheWVyQ29tcG9zaXRlZCkKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMKG1hcmtDb250ZXh0Q2hhbmdlZCkKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5sYXllckNv
bXBvc2l0ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCwgRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0LCBkcmF3aW5nQnVmZmVyKTsKK30KKworUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKGRyYXdpbmdCdWZmZXIp
OworfQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9D
YW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqLCBib29sKQorCitERUxFR0FURV9UT19JTlRF
Uk5BTF9SKGNyZWF0ZUJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX0lOVEVS
TkFMX1IoY3JlYXRlRnJhbWVidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19J
TlRFUk5BTF9SKGNyZWF0ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19J
TlRFUk5BTF9SKGNyZWF0ZVJlbmRlcmJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzFSKGNyZWF0ZVNoYWRlciwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3Qp
CitERUxFR0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZVRleHR1cmUsIFBsYXRmb3JtM0RPYmplY3Qp
CisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVsZXRlQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0
KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVGcmFtZWJ1ZmZlciwgUGxhdGZvcm0zRE9i
amVjdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVsZXRlUHJvZ3JhbSwgUGxhdGZvcm0zRE9i
amVjdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVsZXRlUmVuZGVyYnVmZmVyLCBQbGF0Zm9y
bTNET2JqZWN0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShkZWxldGVTaGFkZXIsIFBsYXRmb3Jt
M0RPYmplY3QpCitERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0ZVRleHR1cmUsIFBsYXRmb3Jt
M0RPYmplY3QpCisKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEoc3ludGhlc2l6ZUdMRXJyb3IsIEdD
M0RlbnVtKQorREVMRUdBVEVfVE9fSU5URVJOQUxfUihnZXRFeHRlbnNpb25zLCBFeHRlbnNpb25z
M0QqKQorCitERUxFR0FURV9UT19JTlRFUk5BTF8xKHNldENvbnRleHRMb3N0Q2FsbGJhY2ssIFBh
c3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+KQorREVMRUdB
VEVfVE9fSU5URVJOQUxfMShzZXRFcnJvck1lc3NhZ2VDYWxsYmFjaywgUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KQorCitjbGFzcyBHcmFwaGljc0Nv
bnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyIDogcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0Q6OldlYkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFjayB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIG9uQ29udGV4dExvc3QoKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyPiBjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4pOworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29u
dGV4dExvc3RDYWxsYmFja0FkYXB0ZXIoKSB7IH0KK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250
ZXh0TG9zdENhbGxiYWNrQWRhcHRlcihQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250
ZXh0TG9zdENhbGxiYWNrPiBjYikgOiBtX2NvbnRleHRMb3N0Q2FsbGJhY2soY2IpIHsgfQorICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0
TG9zdENhbGxiYWNrOworfTsKKwordm9pZCBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFw
dGVyOjpvbkNvbnRleHRMb3N0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNrKQor
ICAgICAgICBtX2NvbnRleHRMb3N0Q2FsbGJhY2stPm9uQ29udGV4dExvc3QoKTsKK30KKworUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyPiBHcmFwaGljc0NvbnRl
eHRMb3N0Q2FsbGJhY2tBZGFwdGVyOjpjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQz
RDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2IpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKGNiLmdl
dCgpID8gbmV3IEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIoY2IpIDogMCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0TG9zdENhbGxiYWNr
KFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IGNiKQor
eworICAgIG1fY29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIgPSBHcmFwaGljc0NvbnRleHRMb3N0
Q2FsbGJhY2tBZGFwdGVyOjpjcmVhdGUoY2IpOworICAgIG1faW1wbC0+c2V0Q29udGV4dExvc3RD
YWxsYmFjayhtX2NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyLmdldCgpKTsKK30KKworY2xhc3Mg
R3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFjayB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiwgV2ViS2l0OjpXR0MzRGludCk7CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NF
cnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjaz4pOworICAgIHZpcnR1YWwgfkdyYXBoaWNzRXJy
b3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyKCkgeyB9Citwcml2YXRlOgorICAgIEdyYXBoaWNzRXJy
b3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkVy
cm9yTWVzc2FnZUNhbGxiYWNrPiBjYikgOiBtX2Vycm9yTWVzc2FnZUNhbGxiYWNrKGNiKSB7IH0K
KyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrPiBtX2Vy
cm9yTWVzc2FnZUNhbGxiYWNrOworfTsKKwordm9pZCBHcmFwaGljc0Vycm9yTWVzc2FnZUNhbGxi
YWNrQWRhcHRlcjo6b25FcnJvck1lc3NhZ2UoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1lc3Nh
Z2UsIFdlYktpdDo6V0dDM0RpbnQgaWQpCit7CisgICAgaWYgKG1fZXJyb3JNZXNzYWdlQ2FsbGJh
Y2spCisgICAgICAgIG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2stPm9uRXJyb3JNZXNzYWdlKG1lc3Nh
Z2UsIGlkKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0Vycm9yTWVzc2FnZUNhbGxiYWNrQWRh
cHRlcj4gR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI6OmNyZWF0ZShQYXNzT3du
UHRyPEdyYXBoaWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjaz4gY2IpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKGNiLmdldCgpID8gbmV3IEdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJh
Y2tBZGFwdGVyKGNiKSA6IDApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJy
b3JNZXNzYWdlQ2FsbGJhY2s+IGNiKQoreworICAgIG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFw
dGVyID0gR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI6OmNyZWF0ZShjYik7Cisg
ICAgbV9pbXBsLT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhtX2Vycm9yTWVzc2FnZUNhbGxiYWNr
QWRhcHRlci5nZXQoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21w
bGlhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzR0xFUzJDb21wbGlhbnQo
KTsKK30KKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2tBZGFwdGVyIDogcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBo
aWNzU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0geworcHVibGljOgorICAgIHZp
cnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGUoKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI+IGNy
ZWF0ZShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRl
Q2FsbGJhY2tDSFJPTUlVTT4pOworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1
ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcigpIHsgfQorCitwcml2YXRlOgorICAgIEdyYXBo
aWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcihQYXNzT3duUHRy
PEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlV
TT4gY2IpIDogbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2soY2IpIHsgfQorICAgIE93blB0
cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01J
VU0+IG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrOworfTsKKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI6Om9uU3dhcEJ1ZmZlcnND
b21wbGV0ZSgpCit7CisgICAgaWYgKG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrKQorICAg
ICAgICBtX3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFjay0+b25Td2FwQnVmZmVyc0NvbXBsZXRl
KCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRl
Q2FsbGJhY2tBZGFwdGVyPiBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxs
YmFja0FkYXB0ZXI6OmNyZWF0ZShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4gY2IpCit7CisgICAgcmV0dXJuIGFkb3B0
UHRyKGNiLmdldCgpID8gbmV3IEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNh
bGxiYWNrQWRhcHRlcihjYikgOiAwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKFBhc3NPd25QdHI8RXh0
ZW5zaW9uczNEQ2hyb21pdW06OlN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNPiBj
YikKK3sKKyAgICBtX3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIgPSBHcmFwaGlj
c0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI6OmNyZWF0ZShjYik7
CisgICAgbV9pbXBsLT5zZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShtX3N3
YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIuZ2V0KCkpOworfQorCitjbGFzcyBHcmFw
aGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyIDogcHVi
bGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzTWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRl
eHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKFBhc3NPd25QdHI8RXh0
ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJP
TUlVTT4gY2IpCisgICAgICAgIDogbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKGNi
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzRE1lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
b25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChzaXplX3QgZ3B1UmVzb3VyY2VTaXplSW5CeXRlcykK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGNsaWVudHMgc3RhcnQg
dXNpbmcgV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIGV4Y2x1c2l2ZWx5LgorICAgICAgICBv
bk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKFdlYktpdDo6V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0
aW9uKGdwdVJlc291cmNlU2l6ZUluQnl0ZXMsIHRydWUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgb25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChXZWJLaXQ6OldlYkdyYXBoaWNzTWVtb3J5
QWxsb2NhdGlvbiBhbGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFjaykKKyAgICAgICAgICAgIG1fbWVtb3J5QWxsb2NhdGlvbkNoYW5n
ZWRDYWxsYmFjay0+b25HcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChFeHRlbnNpb25zM0RDaHJv
bWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNIUk9NSVVNKGFsbG9jYXRpb24uZ3B1UmVzb3VyY2VT
aXplSW5CeXRlcywgYWxsb2NhdGlvbi5zdWdnZXN0SGF2ZUJhY2tidWZmZXIpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxv
Y2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0+IG1fbWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRD
YWxsYmFjazsKK307CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRHcHVNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxFeHRlbnNpb25z
M0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPiBj
YikKK3sKKyAgICBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyID0gYWRv
cHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0FkYXB0ZXIoY2IpKTsKKyAgICBtX2ltcGwtPnNldE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tDSFJPTUlVTShtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyLmdl
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjc5
ODk4OTcxYmQ3YjY3MzdkMDM2MThlMGRlODU3NDYwNDk5YzdkMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmgKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZV9oCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCisKKyNp
bmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAi
U2tCaXRtYXAuaCIKKyNlbmRpZgorCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsK
K30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEcmF3aW5nQnVmZmVyOworY2xhc3Mg
RXh0ZW5zaW9uczNEQ2hyb21pdW07CitjbGFzcyBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tB
ZGFwdGVyOworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2tBZGFwdGVyOworY2xhc3MgR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI7Citj
bGFzcyBHcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFw
dGVyOworCitjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgeworcHVibGljOgorICAgIC8v
IENhbGxlcnMgbXVzdCBtYWtlIHRoZSBjb250ZXh0IGN1cnJlbnQgYmVmb3JlIHVzaW5nIGl0IEFO
RCBjaGVjayB0aGF0IHRoZSBjb250ZXh0IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQorICAgIC8v
IHZpYSBDb250ZXh0TG9zdCBiZWZvcmUgdXNpbmcgdGhlIGNvbnRleHQgaW4gYW55IHdheS4gT25j
ZSBtYWRlIGN1cnJlbnQgb24gYSB0aHJlYWQsIHRoZSBjb250ZXh0IGNhbm5vdAorICAgIC8vIGJl
IHVzZWQgb24gYW55IG90aGVyIHRocmVhZC4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoUGFzc093blB0
cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlLCBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlKTsKKworICAgIHZpcnR1
YWwgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBsb3dlci1sZXZlbCBXZWJHcmFwaGljc0NvbnRleHQz
RCwKKyAgICAvLyB3aGljaCBpcyBuZWVkZWQgZm9yIHN1Ym9yZGluYXRlIGNvbnRleHRzIGxpa2Ug
V2ViR0wncyB0byBzaGFyZSByZXNvdXJjZXMKKyAgICAvLyB3aXRoIHRoZSBjb21wb3NpdG9yJ3Mg
Y29udGV4dC4KKyAgICBzdGF0aWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZXh0cmFj
dFdlYkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKik7CisKKyAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OworI2lmIFVTRShTS0lB
KQorICAgIEdyQ29udGV4dCogZ3JDb250ZXh0KCk7CisjZW5kaWYKKworICAgIGJvb2wgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisKKyAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKKyAgICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1Jlc291cmNlU2FmZSgpOworCisgICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsK
KyAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OworICAgIHZvaWQgbWFya0xheWVyQ29t
cG9zaXRlZCgpOworCisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiwgRHJhd2luZ0J1ZmZlciopOworICAgIHZvaWQgcGFpbnRGcmFt
ZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFtZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEltYWdlQnVmZmVyKik7CisgICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsK
KyAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0Kik7CisKKyAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisKKyAgICAvLyBDSFJPTUlV
TV9wb3N0X3N1Yl9idWZmZXIKKyAgICB2b2lkIHBvc3RTdWJCdWZmZXJDSFJPTUlVTShpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICBib29sIGlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdDsKKworICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CisgICAgYm9v
bCBpc0NvbnRleHRMb3N0KCk7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBFbnRyeSBw
b2ludHMgZm9yIFdlYkdMLgorICAgIC8vCisgICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVt
IHRleHR1cmUpOworICAgIHZvaWQgYXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpOworICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpOwor
ICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwor
ICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCk7CisgICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QpOworICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKTsKKyAgICB2b2lkIGJs
ZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKTsKKyAgICB2b2lkIGJsZW5k
RnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKTsKKyAgICB2b2lkIGJsZW5k
RnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBz
cmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOworCisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpcHRyLCBHQzNEZW51bSB1c2FnZSk7CisgICAgdm9pZCBidWZm
ZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhLCBH
QzNEZW51bSB1c2FnZSk7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCogZGF0YSk7CisKKyAg
ICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCk7CisgICAg
dm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBjbGVhckNvbG9yKEdDM0Rj
bGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYg
YWxwaGEpOworICAgIHZvaWQgY2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKTsKKyAgICB2b2lk
IGNsZWFyU3RlbmNpbChHQzNEaW50IHMpOworICAgIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFu
IHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFs
cGhhKTsKKyAgICB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7CisKKyAgICB2
b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEp
OworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQqIGRhdGEpOworICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIpOworICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBj
dWxsRmFjZShHQzNEZW51bSBtb2RlKTsKKyAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5j
KTsKKyAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKTsKKyAgICB2b2lkIGRlcHRo
UmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKTsKKyAgICB2b2lkIGRldGFj
aFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGRp
c2FibGUoR0MzRGVudW0gY2FwKTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShH
QzNEdWludCBpbmRleCk7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCk7CisgICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVu
dW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNl
dCk7CisKKyAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOworICAgIHZvaWQgZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpOworICAgIHZvaWQgZmluaXNoKCk7CisgICAg
dm9pZCBmbHVzaCgpOworICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpOworICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVt
IG1vZGUpOworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKKworICAg
IGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mKTsKKyAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIHZvaWQg
Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1h
eENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKTsKKyAg
ICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CisgICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xl
YW4qIHZhbHVlKTsKKyAgICB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdDM0RlbnVtIGdldEVy
cm9yKCk7CisgICAgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFs
dWUpOworICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpOworICAgIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKTsKKyAgICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7CisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZv
TG9nKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOworICAg
IHZvaWQgZ2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0
KTsKKyAgICB2b2lkIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBl
LCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lz
aW9uKTsKKworICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCk7Cisg
ICAgU3RyaW5nIGdldFN0cmluZyhHQzNEZW51bSBuYW1lKTsKKyAgICB2b2lkIGdldFRleFBhcmFt
ZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUp
OworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSk7CisgICAg
dm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0
aW9uLCBHQzNEaW50KiB2YWx1ZSk7CisgICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGdldFZlcnRleEF0
dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7
CisgICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKTsKKyAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7CisKKyAgICB2b2lkIGhpbnQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsKKyAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0KTsKKyAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2Fw
KTsKKyAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOworICAg
IEdDM0Rib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICBHQzNEYm9vbGVh
biBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICBHQzNEYm9vbGVhbiBpc1No
YWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZv
cm0zRE9iamVjdCk7CisgICAgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKKyAgICB2b2lkIGxp
bmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxv
YXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpOworCisgICAgdm9pZCByZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7CisKKyAgICB2b2lkIHJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVy
YWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7CisgICAgdm9pZCBzY2lz
c29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpOworICAgIHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdD
M0R1aW50IG1hc2spOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNl
LCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBz
dGVuY2lsTWFzayhHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVu
dW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5j
aWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWls
LCBHQzNEZW51bSB6cGFzcyk7CisKKyAgICAvLyB0ZXhJbWFnZTJEIHJldHVybiBmYWxzZSBvbiBh
bnkgZXJyb3IgcmF0aGVyIHRoYW4gdXNpbmcgYW4gRXhjZXB0aW9uQ29kZS4KKyAgICBib29sIHRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwor
ICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEZmxvYXQgcGFyYW0pOworICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisKKyAgICB2b2lkIHVuaWZv
cm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCk7CisgICAgdm9pZCB1bmlmb3JtMWZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKKyAgICB2b2lkIHVu
aWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpOworICAgIHZvaWQgdW5pZm9ybTFp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYpOworICAgIHZvaWQgdW5p
Zm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2b2lk
IHVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwor
ICAgIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
KTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNE
aW50KiB2KTsKKyAgICB2b2lkIHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOworICAgIHZvaWQgdW5pZm9ybTNp
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHopOworICAg
IHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYp
OworICAgIHZvaWQgdW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2b2lkIHVuaWZvcm00ZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOworICAgIHZvaWQgdW5p
Zm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHos
IEdDM0RpbnQgdyk7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSwgR0MzRGludCogdik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVl
KTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSk7CisKKyAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCk7CisgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7
CisKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCk7
CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFs
dWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHkpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0Mz
RGJvb2xlYW4gbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpOworCisgICAgdm9pZCB2aWV3cG9ydChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKwor
ICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlQnVmZmVyKCk7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUHJvZ3Jh
bSgpOworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBjcmVhdGVTaGFkZXIoR0MzRGVudW0pOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9i
amVjdCk7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKKyAg
ICB2b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBkZWxldGVS
ZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBkZWxldGVTaGFkZXIoUGxh
dGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qp
OworCisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcik7CisKKyAgICB2
b2lkIHNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6
Q29udGV4dExvc3RDYWxsYmFjaz4pOworICAgIHZvaWQgc2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2so
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KTsKKwor
ICAgIC8vIEV4dGVuc2lvbnMzRCBzdXBwb3J0LgorICAgIEV4dGVuc2lvbnMzRCogZ2V0RXh0ZW5z
aW9ucygpOworICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsK
KyAgICBib29sIGVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICBib29sIGlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgLy8g
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKKwor
ICAgIC8vIEdMX0NIUk9NSVVNX21hcF9zdWIKKyAgICBib29sIHN1cHBvcnRzTWFwU3ViQ0hST01J
VU0oKTsKKyAgICB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0
LCBHQzNEc2l6ZWlwdHIgb2Zmc2V0LCBHQzNEc2l6ZWksIEdDM0RlbnVtIGFjY2Vzcyk7CisgICAg
dm9pZCB1bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShjb25zdCB2b2lkKik7CisgICAgdm9pZCog
bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEZW51bSBhY2Nl
c3MpOworICAgIHZvaWQgdW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29uc3Qgdm9pZCopOwor
CisgICAgLy8gR0xfQ0hST01JVU1fc2V0X3Zpc2liaWxpdHkKKyAgICB2b2lkIHNldFZpc2liaWxp
dHlDSFJPTUlVTShib29sKTsKKworICAgIC8vIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyCisg
ICAgdmlydHVhbCB2b2lkIGRpc2NhcmRGcmFtZWJ1ZmZlckVYVChHQzNEZW51bSB0YXJnZXQsIEdD
M0RzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0MzRGVudW0qIGF0dGFjaG1lbnRzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5zdXJlRnJhbWVidWZmZXJDSFJPTUlVTSgpOworCisgICAgLy8gR0xf
Q0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyCisgICAgdm9pZCBzZXRHcHVNZW1vcnlBbGxvY2F0
aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1
bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPik7CisKKyAgICAv
LyBHTF9DSFJPTUlVTV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIHZvaWQgYmxpdEZyYW1l
YnVmZmVyQ0hST01JVU0oR0MzRGludCBzcmNYMCwgR0MzRGludCBzcmNZMCwgR0MzRGludCBzcmNY
MSwgR0MzRGludCBzcmNZMSwgR0MzRGludCBkc3RYMCwgR0MzRGludCBkc3RZMCwgR0MzRGludCBk
c3RYMSwgR0MzRGludCBkc3RZMSwgR0MzRGJpdGZpZWxkIG1hc2ssIEdDM0RlbnVtIGZpbHRlcik7
CisgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVDSFJPTUlVTShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKworICAgIC8vIEdMX0NIUk9NSVVNX3N3
YXBidWZmZXJzX2NvbXBsZXRlX2NhbGxiYWNrCisgICAgdm9pZCBzZXRTd2FwQnVmZmVyc0NvbXBs
ZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4pOworCisgICAgLy8gR0xfQ0hST01JVU1f
cmF0ZV9saW1pdF9vZmZzY3JlZW5fY29udGV4dAorICAgIHZvaWQgcmF0ZUxpbWl0T2Zmc2NyZWVu
Q29udGV4dENIUk9NSVVNKCk7CisKKyAgICAvLyBHTF9BUkJfcm9idXN0bmVzcworICAgIEdDM0Rl
bnVtIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKworICAgIC8vIEdMX0FOR0xFX3RyYW5z
bGF0ZWRfc2hhZGVyX3NvdXJjZQorICAgIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpOworCisgICAgLy8gR0xfQ0hST01JVU1faW9z
dXJmYWNlCisgICAgdm9pZCB0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0oR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IHdpZHRoLCBHQzNEaW50IGhlaWdodCwgR0MzRHVpbnQgaW9TdXJmYWNlSWQs
IEdDM0R1aW50IHBsYW5lKTsKKworICAgIC8vIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKKyAgICB2
b2lkIHRleFN0b3JhZ2UyREVYVChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWxzLCBHQzNE
dWludCBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB3aWR0aCwgR0MzRGludCBoZWlnaHQpOworCisg
ICAgLy8gR0xfRVhUX29jY2x1c2lvbl9xdWVyeQorICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRl
UXVlcnlFWFQoKTsKKyAgICB2b2lkIGRlbGV0ZVF1ZXJ5RVhUKFBsYXRmb3JtM0RPYmplY3QpOwor
ICAgIEdDM0Rib29sZWFuIGlzUXVlcnlFWFQoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBi
ZWdpblF1ZXJ5RVhUKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGVuZFF1
ZXJ5RVhUKEdDM0RlbnVtKTsKKyAgICB2b2lkIGdldFF1ZXJ5aXZFWFQoR0MzRGVudW0sIEdDM0Rl
bnVtLCBHQzNEaW50Kik7CisgICAgdm9pZCBnZXRRdWVyeU9iamVjdHVpdkVYVChQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEZW51bSwgR0MzRHVpbnQqKTsKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoUGFzc093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiwg
Ym9vbCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIpOworCisgICAgT3duUHRyPFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0Q+IG1faW1wbDsKKyAgICBPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21pdW0+
IG1fZXh0ZW5zaW9uczsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRh
cHRlcj4gbV9jb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjsKKyAgICBPd25QdHI8R3JhcGhpY3NF
cnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI+IG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVy
OworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFj
a0FkYXB0ZXI+IG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKKyAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRl
cj4gbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjsKKyAgICBib29sIG1f
aW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Vu
YWJsZWRFeHRlbnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlcXVlc3RhYmxlRXh0ZW5z
aW9uczsKKyAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOworICAgIGJvb2wgbV9wcmVzZXJ2ZURy
YXdpbmdCdWZmZXI7CisKKyAgICBlbnVtIFJlc291cmNlU2FmZXR5IHsKKyAgICAgICAgUmVzb3Vy
Y2VTYWZldHlVbmtub3duLAorICAgICAgICBSZXNvdXJjZVNhZmUsCisgICAgICAgIFJlc291cmNl
VW5zYWZlCisgICAgfTsKKyAgICBSZXNvdXJjZVNhZmV0eSBtX3Jlc291cmNlU2FmZXR5OworCisj
aWYgVVNFKFNLSUEpCisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIENhbnZh
cydzIGJhY2tpbmcgc3RvcmUgZG9uJ3QKKyAgICAvLyBtYXRjaCB0aG9zZSB0aGF0IHdlIHdlcmUg
Z2l2ZW4gaW4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8KKyAgICAvLyByZXNoYXBlKCksIHRoZW4g
d2UgbmVlZCBhbiBpbnRlcm1lZGlhdGUgYml0bWFwIHRvIHJlYWQgYmFjayB0aGUKKyAgICAvLyBm
cmFtZSBidWZmZXIgaW50by4gVGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiBDU1Mgc3R5bGVzIGFy
ZQorICAgIC8vIHVzZWQgdG8gcmVzaXplIHRoZSBDYW52YXMuCisgICAgU2tCaXRtYXAgbV9yZXNp
emluZ0JpdG1hcDsKKworICAgIEdyQ29udGV4dCogbV9nckNvbnRleHQ7CisjZW5kaWYKKworI2lm
IFVTRShDRykKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBtX3JlbmRlck91dHB1dDsK
KyAgICBzaXplX3QgbV9yZW5kZXJPdXRwdXRTaXplOworI2VuZGlmCisKKyAgICB2b2lkIGluaXRp
YWxpemVFeHRlbnNpb25zKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CmluZGV4IGE3NzVmNTQ1ZDEyMjg4ZGJlZWM0YWNjYjc0YzI4YzZlOGE2NWY5YzcuLjgwMWE4ODc0
ZmQ5ZjMyMmJmZjk1Nzg1M2FkMTQwZTE1NTVjMWIxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKQEAgLTQwMSw3ICs0MDEsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvRWRpdG9yQ2xp
ZW50SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5oJywKLSAgICAg
ICAgICAgICAgICAnc3JjL0V4dGVuc2lvbnMzRENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9FeHRlcm5hbFBvcHVwTWVudS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvRXh0
ZXJuYWxQb3B1cE1lbnUuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVu
dEltcGwuY3BwJywKQEAgLTQwOSw4ICs0MDgsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvRnJh
bWVOZXR3b3JraW5nQ29udGV4dEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9HZW9sb2Nh
dGlvbkNsaWVudFByb3h5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvbkNs
aWVudFByb3h5LmgnLAotICAgICAgICAgICAgICAgICdzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvSURCQ2FsbGJhY2tzUHJveHkuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDg0YWQwZjc4YTMyM2M3ZWVkNDRlYzAxMGM1ZDBlYjBhNTJlODllNTQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
V0VCR0wpCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1FeHRlbnNpb25zM0RDaHJvbWl1bTo6RXh0ZW5z
aW9uczNEQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBwcml2KQotICAgIDogbV9w
cml2YXRlKHByaXYpCi17Ci19Ci0KLUV4dGVuc2lvbnMzRENocm9taXVtOjp+RXh0ZW5zaW9uczNE
Q2hyb21pdW0oKQotewotfQotCi1ib29sIEV4dGVuc2lvbnMzRENocm9taXVtOjpzdXBwb3J0cyhj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+c3VwcG9ydHNFeHRl
bnNpb24obmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUVuYWJs
ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBib29sIHJlc3Vs
dCA9Ci0jZW5kaWYKLSAgICAgICAgbV9wcml2YXRlLT5lbnN1cmVFeHRlbnNpb25FbmFibGVkKG5h
bWUpOwotICAgIEFTU0VSVChyZXN1bHQpOwotfQotCi1ib29sIEV4dGVuc2lvbnMzRENocm9taXVt
Ojppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzRXh0ZW5zaW9uRW5hYmxlZChuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lvbnMzRENocm9taXVt
OjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihtX3ByaXZhdGUtPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7Ci19Ci0KLXZvaWQg
RXh0ZW5zaW9uczNEQ2hyb21pdW06OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNy
Y1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25n
IGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmls
dGVyKQotewotICAgIG1fcHJpdmF0ZS0+YmxpdEZyYW1lYnVmZmVyQ0hST01JVU0oc3JjWDAsIHNy
Y1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0
ZXIpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVDSFJPTUlVTSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6cG9zdFN1YkJ1ZmZlckNI
Uk9NSVVNKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIG1fcHJp
dmF0ZS0+cG9zdFN1YkJ1ZmZlckNIUk9NSVVNKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12
b2lkKiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKHVuc2ln
bmVkIHRhcmdldCwgaW50IG9mZnNldCwgaW50IHNpemUsIHVuc2lnbmVkIGFjY2VzcykKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0odGFyZ2V0LCBvZmZz
ZXQsIHNpemUsIGFjY2Vzcyk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnVubWFw
QnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbV9wcml2YXRl
LT51bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShkYXRhKTsKLX0KLQotdm9pZCogRXh0ZW5zaW9u
czNEQ2hyb21pdW06Om1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGlu
dCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgYWNjZXNzKQotewotICAg
IHJldHVybiBtX3ByaXZhdGUtPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFjY2Vzcyk7
Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwVGV4U3ViSW1hZ2UyRENIUk9N
SVVNKGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbV9wcml2YXRlLT51bm1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTShkYXRhKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6c2V0Vmlz
aWJpbGl0eUNIUk9NSVVNKGJvb2wgdmlzaWJpbGl0eSkKLXsKLSAgICBtX3ByaXZhdGUtPnNldFZp
c2liaWxpdHlDSFJPTUlVTSh2aXNpYmlsaXR5KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6ZGlzY2FyZEZyYW1lYnVmZmVyRVhUKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIG51
bUF0dGFjaG1lbnRzLCBjb25zdCBHQzNEZW51bSogYXR0YWNobWVudHMpCi17Ci0gICAgbV9wcml2
YXRlLT5kaXNjYXJkRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNo
bWVudHMpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZl
ckNIUk9NSVVNKCkKLXsKLSAgICBtX3ByaXZhdGUtPmVuc3VyZUZyYW1lYnVmZmVyQ0hST01JVU0o
KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6c2V0R3B1TWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKFBhc3NPd25QdHI8R3B1TWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0NIUk9NSVVNPiBjYWxsYmFjaykKLXsKLSAgICBtX3ByaXZhdGUtPnNldEdw
dU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTShjYWxsYmFjayk7Ci19Ci0K
LVBsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmNyZWF0ZVZlcnRleEFycmF5
T0VTKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6
ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkKLXsKLX0KLQotR0MzRGJvb2xl
YW4gRXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Ymlu
ZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpCi17Ci19Ci0KLVN0cmluZyBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2VBTkdMRShzaGFkZXIpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpz
ZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPFN3YXBCdWZm
ZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNPiBjYWxsYmFjaykKLXsKLSAgICBtX3ByaXZhdGUt
PnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKGNhbGxiYWNrKTsKLX0KLQot
dm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6cmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9N
SVVNKCkKLXsKLSAgICBtX3ByaXZhdGUtPnJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlV
TSgpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpwYWludEZyYW1lYnVmZmVyVG9D
YW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQotewotICAgIG1fcHJpdmF0ZS0+
cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVyLCB3aWR0aCwgaGVpZ2h0LCBwcmVt
dWx0aXBseUFscGhhLCBpbWFnZUJ1ZmZlcik7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21p
dW06OnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9TdXJmYWNlSWQsIHVuc2lnbmVkIHBsYW5lKQotewot
ICAgIG1fcHJpdmF0ZS0+dGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNKHRhcmdldCwgd2lkdGgs
IGhlaWdodCwgaW9TdXJmYWNlSWQsIHBsYW5lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6dGV4U3RvcmFnZTJERVhUKHVuc2lnbmVkIGludCB0YXJnZXQsIGludCBsZXZlbHMsIHVu
c2lnbmVkIGludCBpbnRlcm5hbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAg
IG1fcHJpdmF0ZS0+dGV4U3RvcmFnZTJERVhUKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbEZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNEQ2hy
b21pdW06OmNyZWF0ZVF1ZXJ5RVhUKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jcmVhdGVR
dWVyeUVYVCgpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpkZWxldGVRdWVyeUVY
VChQbGF0Zm9ybTNET2JqZWN0IHF1ZXJ5KQotewotICAgIG1fcHJpdmF0ZS0+ZGVsZXRlUXVlcnlF
WFQocXVlcnkpOwotfQotCi1HQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6aXNRdWVy
eUVYVChQbGF0Zm9ybTNET2JqZWN0IHF1ZXJ5KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlz
UXVlcnlFWFQocXVlcnkpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpiZWdpblF1
ZXJ5RVhUKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBxdWVyeSkKLXsKLSAgICBt
X3ByaXZhdGUtPmJlZ2luUXVlcnlFWFQodGFyZ2V0LCBxdWVyeSk7Ci19Ci0KLXZvaWQgRXh0ZW5z
aW9uczNEQ2hyb21pdW06OmVuZFF1ZXJ5RVhUKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtX3By
aXZhdGUtPmVuZFF1ZXJ5RVhUKHRhcmdldCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21p
dW06OmdldFF1ZXJ5aXZFWFQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogcGFyYW1zKQotewotICAgIG1fcHJpdmF0ZS0+Z2V0UXVlcnlpdkVYVCh0YXJnZXQsIHBuYW1l
LCBwYXJhbXMpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpnZXRRdWVyeU9iamVj
dHVpdkVYVChQbGF0Zm9ybTNET2JqZWN0IHF1ZXJ5LCBHQzNEZW51bSBwbmFtZSwgR0MzRHVpbnQq
IHBhcmFtcykKLXsKLSAgICBtX3ByaXZhdGUtPmdldFF1ZXJ5T2JqZWN0dWl2RVhUKHF1ZXJ5LCBw
bmFtZSwgcGFyYW1zKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9H
cmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNjA5MTlhMjBjMzg1ZGU0OGMzMWMxZjY3ZjBlNzUzMmM0YmRhZDZhNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
OTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgot
I2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIK
LSNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5o
IgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJWaWV3
Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3Jt
U3VwcG9ydC5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmIFVTRShDRykKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQu
aCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NHSW1hZ2UuaD4KLSNlbmRpZgotCi0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAiR3JD
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JHTEludGVyZmFjZS5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSB7Ci0KLS8vIFRoZSBsaW1pdCBvZiB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4g
dGhlIEdyQ29udGV4dCdzIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KLWNvbnN0IGludCBtYXhHYW5l
c2hUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKLS8vIFRoZSBsaW1pdCBvZiB0aGUgYnl0ZXMgYWxs
b2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgR3JDb250ZXh0J3MgYml0bWFwLT50ZXh0dXJl
IGNhY2hlLgotY29uc3Qgc2l6ZV90IG1heEdhbmVzaFRleHR1cmVDYWNoZUJ5dGVzID0gOTYgKiAx
MDI0ICogMTAyNDsKLQotfQotCi0vLyBUaGVyZSBhcmUgdHdvIGxldmVscyBvZiBkZWxlZ2F0aW9u
IGluIHRoaXMgZmlsZToKLS8vCi0vLyAgIDEuIEdyYXBoaWNzQ29udGV4dDNEIGRlbGVnYXRlcyB0
byBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuIFRoaXMgaXMgZG9uZQotLy8gICAgICBzbyB0aGF0
IHdlIGhhdmUgc29tZSBwbGFjZSB0byBzdG9yZSBkYXRhIG1lbWJlcnMgY29tbW9uIGFtb25nCi0v
LyAgICAgIGltcGxlbWVudGF0aW9uczsgR3JhcGhpY3NDb250ZXh0M0Qgb25seSBwcm92aWRlcyB1
cyB0aGUgbV9wcml2YXRlCi0vLyAgICAgIHBvaW50ZXIuIFdlIGFsd2F5cyBkZWxlZ2F0ZSB0byB0
aGUgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLiBXaGlsZSB3ZQotLy8gICAgICBjb3VsZCBzaWRl
c3RlcCBpdCBhbmQgZ28gZGlyZWN0bHkgdG8gdGhlIFdlYkdyYXBoaWNzQ29udGV4dDNEIGluIHNv
bWUKLS8vICAgICAgY2FzZXMsIGl0IGlzIGJldHRlciBmb3IgY29uc2lzdGVuY3kgdG8gYWx3YXlz
IGRlbGVnYXRlIHRocm91Z2ggaXQuCi0vLwotLy8gICAyLiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUgZGVsZWdhdGVzIHRvIGFuIGltcGxlbWVudGF0aW9uIG9mCi0vLyAgICAgIFdlYkdyYXBoaWNz
Q29udGV4dDNELiBUaGlzIGlzIGRvbmUgc28gd2UgaGF2ZSBhIHBsYWNlIHRvIGluamVjdCBhbgot
Ly8gICAgICBpbXBsZW1lbnRhdGlvbiB3aGljaCByZW1vdGVzIHRoZSBPcGVuR0wgY2FsbHMgYWNy
b3NzIHByb2Nlc3Nlcy4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShQYXNzT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0Q+IHdlYkNvbnRleHQsIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKQotICAgIDog
bV9pbXBsKHdlYkNvbnRleHQpCi0gICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9u
cyhmYWxzZSkKLSAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQotICAgICwgbV9wcmVzZXJ2
ZURyYXdpbmdCdWZmZXIocHJlc2VydmVEcmF3aW5nQnVmZmVyKQotICAgICwgbV9yZXNvdXJjZVNh
ZmV0eShSZXNvdXJjZVNhZmV0eVVua25vd24pCi0jaWYgVVNFKFNLSUEpCi0gICAgLCBtX2dyQ29u
dGV4dCgwKQotI2VsaWYgVVNFKENHKQotICAgICwgbV9yZW5kZXJPdXRwdXRTaXplKDApCi0jZWxz
ZQotI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCi0jZW5kaWYKLXsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKLXsKLSNp
ZiBVU0UoU0tJQSkKLSAgICBpZiAobV9nckNvbnRleHQpIHsKLSAgICAgICAgbV9nckNvbnRleHQt
PmNvbnRleHREZXN0cm95ZWQoKTsKLSAgICAgICAgR3JTYWZlVW5yZWYobV9nckNvbnRleHQpOwot
ICAgIH0KLSNlbmRpZgotfQotCi1QYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KFBh
c3NPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlLCBib29sIHByZXNlcnZlRHJhd2lu
Z0J1ZmZlcikKLXsKLSAgICBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93ID0gcmVuZGVy
U3R5bGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93Owot
Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCksIDAsIHJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KSk7Ci0KLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlPiBwcml2ID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh3ZWJD
b250ZXh0LCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIpKTsKLSAgICBjb250ZXh0LT5tX3ByaXZhdGUg
PSBwcml2LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7Ci19Ci0KLW5h
bWVzcGFjZSB7Ci0KLXZvaWQgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoRHJhd2luZ0J1ZmZlciogZHJh
d2luZ0J1ZmZlciwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0
M0QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QqIGZyYW1lQnVm
ZmVySWQsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQotewotICAgIGlmIChkcmF3aW5nQnVmZmVy
KSB7Ci0gICAgICAgICpmcmFtZUJ1ZmZlcklkID0gZHJhd2luZ0J1ZmZlci0+ZnJhbWVidWZmZXIo
KTsKLSAgICAgICAgKndpZHRoID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7Ci0gICAg
ICAgICpoZWlnaHQgPSBkcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgKmZyYW1lQnVmZmVySWQgPSAwOwotICAgICAgICAqd2lkdGggPSBncmFwaGlj
c0NvbnRleHQzRC0+d2lkdGgoKTsKLSAgICAgICAgKmhlaWdodCA9IGdyYXBoaWNzQ29udGV4dDNE
LT5oZWlnaHQoKTsKLSAgICB9Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1XZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJh
Y3RXZWJHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLXsKLSAg
ICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb250ZXh0LT5t
X3ByaXZhdGUtPm1faW1wbC5nZXQoKTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dAotewotICAgIHJldHVybiBtX2ltcGwuZ2V0KCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2ltcGwtPmdldFBsYXRmb3JtVGV4dHVyZUlkKCk7Ci19Ci0KLSNpZiBVU0UoU0tJQSkK
LWNsYXNzIEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayA6IHB1YmxpYyBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVN
IHsKLXB1YmxpYzoKLSAgICBHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2soR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKiBjb250ZXh0KQotICAgICAgICA6IG1fY29udGV4dChjb250ZXh0
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25HcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZChFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNIUk9NSVVN
IGFsbG9jYXRpb24pCi0gICAgewotICAgICAgICBHckNvbnRleHQqIGNvbnRleHQgPSBtX2NvbnRl
eHQtPmdyQ29udGV4dCgpOwotICAgICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKCFhbGxvY2F0aW9uLmdwdVJlc291cmNlU2l6ZUluQnl0ZXMpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmZyZWVHcHVSZXNvdXJjZXMoKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cygwLCAwKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBjb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMobWF4R2FuZXNoVGV4dHVyZUNh
Y2hlQ291bnQsIG1heEdhbmVzaFRleHR1cmVDYWNoZUJ5dGVzKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBtX2NvbnRleHQ7Ci19OwotCi1HckNvbnRl
eHQqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z3JDb250ZXh0KCkKLXsKLSAgICBpZiAoIW1f
Z3JDb250ZXh0KSB7Ci0gICAgICAgIFNrQXV0b1RVbnJlZjxHckdMSW50ZXJmYWNlPiBpbnRlcmZh
Y2UobV9pbXBsLT5jcmVhdGVHckdMSW50ZXJmYWNlKCkpOwotICAgICAgICBtX2dyQ29udGV4dCA9
IEdyQ29udGV4dDo6Q3JlYXRlKGtPcGVuR0xfU2hhZGVyc19HckVuZ2luZSwgcmVpbnRlcnByZXRf
Y2FzdDxHclBsYXRmb3JtM0RDb250ZXh0PihpbnRlcmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgaWYg
KG1fZ3JDb250ZXh0KSB7Ci0gICAgICAgICAgICBtX2dyQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hl
TGltaXRzKG1heEdhbmVzaFRleHR1cmVDYWNoZUNvdW50LCBtYXhHYW5lc2hUZXh0dXJlQ2FjaGVC
eXRlcyk7Ci0gICAgICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hy
b21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGdldEV4dGVuc2lvbnMo
KSk7Ci0gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnN1cHBvcnRzKCJHTF9D
SFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIiKSkKLSAgICAgICAgICAgICAgICBleHRlbnNpb25z
M0RDaHJvbWl1bS0+c2V0R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVN
KGFkb3B0UHRyKG5ldyBHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2sodGhpcykpKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbV9nckNvbnRleHQ7Ci19Ci0jZW5kaWYKLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnByZXBhcmVUZXh0dXJlKCkKLXsKLSAgICBt
X2ltcGwtPnByZXBhcmVUZXh0dXJlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFs
c2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrTGF5ZXJDb21wb3Np
dGVkKCkKLXsKLSAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2xheWVyQ29tcG9zaXRlZDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIp
Ci17Ci0gICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gMDsKLSAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IDQgKiB3aWR0aCAqIGhlaWdodDsKLSNpZiBVU0UoU0tJQSkKLSAgICBjb25zdCBTa0JpdG1h
cCogY2FudmFzQml0bWFwID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmJpdG1hcCgpOwotICAgIGNvbnN0IFNrQml0bWFwKiByZWFkYmFja0JpdG1hcCA9IDA7Ci0g
ICAgQVNTRVJUKGNhbnZhc0JpdG1hcC0+Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhf
Q29uZmlnKTsKLSAgICBpZiAoY2FudmFzQml0bWFwLT53aWR0aCgpID09IHdpZHRoICYmIGNhbnZh
c0JpdG1hcC0+aGVpZ2h0KCkgPT0gaGVpZ2h0KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZh
c3Rlc3QgYW5kIG1vc3QgY29tbW9uIGNhc2UuIFdlIHJlYWQgYmFjawotICAgICAgICAvLyBkaXJl
Y3RseSBpbnRvIHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgotICAgICAgICByZWFkYmFja0Jp
dG1hcCA9IGNhbnZhc0JpdG1hcDsKLSAgICAgICAgbV9yZXNpemluZ0JpdG1hcC5yZXNldCgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gYWxsb2NhdGUgYSB0ZW1wb3Jhcnkg
Yml0bWFwIGZvciByZWFkaW5nIGJhY2sgdGhlCi0gICAgICAgIC8vIHBpeGVsIGRhdGEuIFdlIHdp
bGwgdGhlbiB1c2UgU2tpYSB0byByZXNjYWxlIHRoaXMgYml0bWFwIHRvCi0gICAgICAgIC8vIHRo
ZSBzaXplIG9mIHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgotICAgICAgICBpZiAobV9yZXNp
emluZ0JpdG1hcC53aWR0aCgpICE9IHdpZHRoIHx8IG1fcmVzaXppbmdCaXRtYXAuaGVpZ2h0KCkg
IT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFwLnNldENvbmZpZyhTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodCk7Ci0gICAgICAgICAgICBpZiAoIW1fcmVzaXppbmdCaXRtYXAuYWxsb2NQaXhlbHMoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVhZGJhY2tCaXRt
YXAgPSAmbV9yZXNpemluZ0JpdG1hcDsKLSAgICB9Ci0KLSAgICAvLyBSZWFkIGJhY2sgdGhlIGZy
YW1lIGJ1ZmZlci4KLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1hcExvY2soKnJlYWRiYWNrQml0
bWFwKTsKLSAgICBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocmVhZGJhY2tC
aXRtYXAtPmdldFBpeGVscygpKTsKLSNlbGlmIFVTRShDRykKLSAgICBpZiAoIW1fcmVuZGVyT3V0
cHV0IHx8IG1fcmVuZGVyT3V0cHV0U2l6ZSAhPSBidWZmZXJTaXplKSB7Ci0gICAgICAgIG1fcmVu
ZGVyT3V0cHV0ID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltidWZmZXJTaXplXSk7
Ci0gICAgICAgIG1fcmVuZGVyT3V0cHV0U2l6ZSA9IGJ1ZmZlclNpemU7Ci0gICAgfQotCi0gICAg
cGl4ZWxzID0gbV9yZW5kZXJPdXRwdXQuZ2V0KCk7Ci0jZWxzZQotI2Vycm9yIE11c3QgcG9ydCB0
byB5b3VyIHBsYXRmb3JtCi0jZW5kaWYKLQotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZl
cihwaXhlbHMsIDQgKiB3aWR0aCAqIGhlaWdodCwgZnJhbWVidWZmZXIsIHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBidWZmZXJTaXplOyBpICs9IDQpIHsKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMF0g
PSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAg
ICAgICAgICAgIHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBw
aXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1p
bigyNTUsIHBpeGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgfQot
ICAgIH0KLQotI2lmIFVTRShTS0lBKQotICAgIHJlYWRiYWNrQml0bWFwLT5ub3RpZnlQaXhlbHND
aGFuZ2VkKCk7Ci0gICAgaWYgKG1fcmVzaXppbmdCaXRtYXAucmVhZHlUb0RyYXcoKSkgewotICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJpdG1hcCBpbnRvIHRoZSBjYW52
YXMncyBiYWNraW5nIHN0b3JlLgotICAgICAgICBTa0NhbnZhcyBjYW52YXMoKmNhbnZhc0JpdG1h
cCk7Ci0gICAgICAgIFNrUmVjdCBkc3Q7Ci0gICAgICAgIGRzdC5zZXQoU2tJbnRUb1NjYWxhcigw
KSwgU2tJbnRUb1NjYWxhcigwKSwgU2tJbnRUb1NjYWxhcihjYW52YXNCaXRtYXAtPndpZHRoKCkp
LCBTa0ludFRvU2NhbGFyKGNhbnZhc0JpdG1hcC0+aGVpZ2h0KCkpKTsKLSAgICAgICAgY2FudmFz
LmRyYXdCaXRtYXBSZWN0KG1fcmVzaXppbmdCaXRtYXAsIDAsIGRzdCk7Ci0gICAgfQotI2VsaWYg
VVNFKENHKQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKHBpeGVscywgd2lk
dGgsIGhlaWdodCwgaW1hZ2VCdWZmZXItPndpZHRoKCksIGltYWdlQnVmZmVyLT5oZWlnaHQoKSwg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotI2Vsc2UKLSNlcnJv
ciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQotewot
ICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNvbnRleHQtPmNhbnZhcygpLT5idWZmZXIo
KTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7Ci0gICAgaW50IHdpZHRoLCBo
ZWlnaHQ7Ci0gICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdl
dCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBwYWludEZyYW1lYnVm
ZmVyVG9DYW52YXMoZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCwgIW1faW1wbC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0Nh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1
ZmZlcikKLXsKLSAgICBpZiAobV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRp
cGxpZWRBbHBoYSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IGZy
YW1lYnVmZmVySWQ7Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0gICAgZ2V0RHJhd2luZ1BhcmFt
ZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9pbXBsLmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRo
LCAmaGVpZ2h0KTsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0
YTo6Y3JlYXRlKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIHBp
eGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSA0ICogd2lkdGggKiBoZWlnaHQ7Ci0KLSAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIo
cGl4ZWxzLCBidWZmZXJTaXplLCBmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQotICAgICAgICBzdGQ6
OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKLQotICAgIHJldHVybiBpbWFnZURhdGEu
cmVsZWFzZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHdpZHRoID09IG1faW1wbC0+d2lkdGgo
KSAmJiBoZWlnaHQgPT0gbV9pbXBsLT5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9pbXBsLT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwotfQotCi1JbnRTaXplIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSk7Ci19Ci0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0NvbnRleHRMb3N0KCkKLXsKLSAgICBy
ZXR1cm4gbV9pbXBsLT5pc0NvbnRleHRMb3N0KCk7Ci19Ci0KLS8vIE1hY3JvcyB0byBhc3Npc3Qg
aW4gZGVsZWdhdGluZyBmcm9tIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB0bwotLy8gV2ViR3Jh
cGhpY3NDb250ZXh0M0QuCi0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTChuYW1lKSBcCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSgpIFwKLXsgXAotICAgIG1faW1wbC0+bmFt
ZSgpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF9SKG5hbWUsIHJ0KSAgICAgICAg
ICAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKCkgXAoteyBcCi0gICAgcmV0
dXJuIG1faW1wbC0+bmFtZSgpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8xKG5h
bWUsIHQxKSBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSkgXAot
eyBcCi0gICAgbV9pbXBsLT5uYW1lKGExKTsgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lN
UExfMVIobmFtZSwgdDEsIHJ0KSAgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5h
bWUodDEgYTEpIFwKLXsgXAotICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEpOyBcCi19Ci0KLSNk
ZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8yKG5hbWUsIHQxLCB0MikgXAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyKSBcCi17IFwKLSAgICBtX2ltcGwtPm5h
bWUoYTEsIGEyKTsgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMlIobmFtZSwgdDEs
IHQyLCBydCkgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIg
YTIpIFwKLXsgXAotICAgIHJldHVybiBtX2ltcGwtPm5hbWUoYTEsIGEyKTsgXAotfQotCi0jZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfMyhuYW1lLCB0MSwgdDIsIHQzKSAgIFwKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgIFwKLXsgXAot
ICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCi19Ci0KLSNk
ZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8zUihuYW1lLCB0MSwgdDIsIHQzLCBydCkgICBcCi1ydCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAot
eyBcCi0gICAgcmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAg
ICBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF80KG5hbWUsIHQxLCB0MiwgdDMsIHQ0
KSAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzLCB0NCBhNCkgIFwKLXsgXAotICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCk7
ICAgICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF80UihuYW1lLCB0
MSwgdDIsIHQzLCB0NCwgcnQpICAgICAgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgICAgICAgIFwKLXsgXAotICAgIHJldHVy
biBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAotfQotCi0jZGVmaW5l
IERFTEVHQVRFX1RPX0lNUExfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQg
YTQsIHQ1IGE1KSAgICAgICAgXAoteyBcCi0gICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0
LCBhNSk7ICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNVIobmFtZSwgdDEsIHQy
LCB0MywgdDQsIHQ1LCBydCkgICAgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5h
bWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAoteyBcCi0gICAg
cmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKLX0KLQotI2RlZmlu
ZSBERUxFR0FURV9UT19JTVBMXzYobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0
IGE0LCB0NSBhNSwgdDYgYTYpIFwKLXsgXAotICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBh
NCwgYTUsIGE2KTsgICAgICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNlIobmFt
ZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgcnQpICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAot
eyBcCi0gICAgcmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICAg
ICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNyhuYW1lLCB0MSwgdDIsIHQzLCB0
NCwgdDUsIHQ2LCB0NykgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKLXsgXAotICAg
IG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAgXAotfQotCi0jZGVm
aW5lIERFTEVHQVRFX1RPX0lNUExfN1IobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcs
IHJ0KSBcCi1ydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKLXsgXAotICAgIHJldHVybiBtX2lt
cGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAgIFwKLX0KLQotI2RlZmluZSBE
RUxFR0FURV9UT19JTVBMXzgobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAg
ICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwKLXsgXAotICAgIG1f
aW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAgICAgIFwKLX0KLQot
I2RlZmluZSBERUxFR0FURV9UT19JTVBMXzkobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0Niwg
dDcsIHQ4LCB0OSkgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0
OSBhOSkgXAoteyBcCi0gICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3
LCBhOCwgYTkpOyAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzlSKG5hbWUs
IHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDksIHJ0KSBcCi1ydCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0
NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoteyBcCi0gICAgcmV0dXJuIG1faW1wbC0+bmFt
ZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCi19Ci0KLSNkZWZpbmUg
REVMRUdBVEVfVE9fSU1QTF8xMChuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgs
IHQ5LCB0MTApIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0
MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTksIHQx
MCBhMTApIFwKLXsgXAotICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBh
NywgYTgsIGE5LCBhMTApOyBcCi19Ci0KLURFTEVHQVRFX1RPX0lNUExfUihtYWtlQ29udGV4dEN1
cnJlbnQsIGJvb2wpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc0dMRVMyQ29t
cGxpYW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5pc0dMRVMyQ29tcGxpYW50KCk7
Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfMShhY3RpdmVUZXh0dXJlLCBHQzNEZW51bSkKLURFTEVH
QVRFX1RPX0lNUExfMihhdHRhY2hTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RP
YmplY3QpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIG1faW1wbC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ERUxFR0FURV9UT19JTVBMXzIoYmluZEJ1ZmZl
ciwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzIoYmluZEZy
YW1lYnVmZmVyLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExf
MihiaW5kUmVuZGVyYnVmZmVyLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRF
X1RPX0lNUExfMihiaW5kVGV4dHVyZSwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxF
R0FURV9UT19JTVBMXzQoYmxlbmRDb2xvciwgR0MzRGNsYW1wZiwgR0MzRGNsYW1wZiwgR0MzRGNs
YW1wZiwgR0MzRGNsYW1wZikKLURFTEVHQVRFX1RPX0lNUExfMShibGVuZEVxdWF0aW9uLCBHQzNE
ZW51bSkKLURFTEVHQVRFX1RPX0lNUExfMihibGVuZEVxdWF0aW9uU2VwYXJhdGUsIEdDM0RlbnVt
LCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lNUExfMihibGVuZEZ1bmMsIEdDM0RlbnVtLCBHQzNE
ZW51bSkKLURFTEVHQVRFX1RPX0lNUExfNChibGVuZEZ1bmNTZXBhcmF0ZSwgR0MzRGVudW0sIEdD
M0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0Rl
bnVtIHVzYWdlKQotewotICAgIG1faW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVz
YWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmJ1ZmZlckRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVu
dW0gdXNhZ2UpCi17Ci0gICAgbV9pbXBsLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwg
dXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YnVmZmVyU3ViRGF0
YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwg
Y29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtX2ltcGwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBv
ZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi1ERUxFR0FURV9UT19JTVBMXzFSKGNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMsIEdDM0RlbnVtLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lNUExfMShjbGVh
ciwgR0MzRGJpdGZpZWxkKQotREVMRUdBVEVfVE9fSU1QTF80KGNsZWFyQ29sb3IsIEdDM0RjbGFt
cGYsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYpCi1ERUxFR0FURV9UT19JTVBM
XzEoY2xlYXJEZXB0aCwgR0MzRGNsYW1wZikKLURFTEVHQVRFX1RPX0lNUExfMShjbGVhclN0ZW5j
aWwsIEdDM0RpbnQpCi1ERUxFR0FURV9UT19JTVBMXzQoY29sb3JNYXNrLCBHQzNEYm9vbGVhbiwg
R0MzRGJvb2xlYW4sIEdDM0Rib29sZWFuLCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lNUExf
MShjb21waWxlU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0KQotCi1ERUxFR0FURV9UT19JTVBMXzgo
Y29tcHJlc3NlZFRleEltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGlu
dCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIGNvbnN0IHZvaWQqKQotREVMRUdBVEVf
VE9fSU1QTF85KGNvbXByZXNzZWRUZXhTdWJJbWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0Mz
RGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RzaXplaSwgY29u
c3Qgdm9pZCopCi1ERUxFR0FURV9UT19JTVBMXzgoY29weVRleEltYWdlMkQsIEdDM0RlbnVtLCBH
QzNEaW50LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWks
IEdDM0RpbnQpCi1ERUxFR0FURV9UT19JTVBMXzgoY29weVRleFN1YkltYWdlMkQsIEdDM0RlbnVt
LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWks
IEdDM0RzaXplaSkKLURFTEVHQVRFX1RPX0lNUExfMShjdWxsRmFjZSwgR0MzRGVudW0pCi1ERUxF
R0FURV9UT19JTVBMXzEoZGVwdGhGdW5jLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lNUExfMShk
ZXB0aE1hc2ssIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU1QTF8yKGRlcHRoUmFuZ2UsIEdD
M0RjbGFtcGYsIEdDM0RjbGFtcGYpCi1ERUxFR0FURV9UT19JTVBMXzIoZGV0YWNoU2hhZGVyLCBQ
bGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xKGRp
c2FibGUsIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU1QTF8xKGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheSwgR0MzRHVpbnQpCi1ERUxFR0FURV9UT19JTVBMXzMoZHJhd0FycmF5cywgR0MzRGVudW0s
IEdDM0RpbnQsIEdDM0RzaXplaSkKLURFTEVHQVRFX1RPX0lNUExfNChkcmF3RWxlbWVudHMsIEdD
M0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEc2l6ZWlwdHIpCi0KLURFTEVHQVRFX1RP
X0lNUExfMShlbmFibGUsIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU1QTF8xKGVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5LCBHQzNEdWludCkKLURFTEVHQVRFX1RPX0lNUEwoZmluaXNoKQotREVMRUdB
VEVfVE9fSU1QTChmbHVzaCkKLURFTEVHQVRFX1RPX0lNUExfNChmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURF
TEVHQVRFX1RPX0lNUExfNShmcmFtZWJ1ZmZlclRleHR1cmUyRCwgR0MzRGVudW0sIEdDM0RlbnVt
LCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCkKLURFTEVHQVRFX1RPX0lNUExf
MShmcm9udEZhY2UsIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU1QTF8xKGdlbmVyYXRlTWlwbWFw
LCBHQzNEZW51bSkKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEFjdGl2ZUF0
dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQotewotICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8g
d2ViSW5mbzsKLSAgICBpZiAoIW1faW1wbC0+Z2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4
LCB3ZWJJbmZvKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGluZm8ubmFtZSA9IHdlYklu
Zm8ubmFtZTsKLSAgICBpbmZvLnR5cGUgPSB3ZWJJbmZvLnR5cGU7Ci0gICAgaW5mby5zaXplID0g
d2ViSW5mby5zaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8gd2ViSW5mbzsKLSAgICBpZiAoIW1faW1wbC0+Z2V0QWN0
aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgd2ViSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbmZvLm5hbWUgPSB3ZWJJbmZvLm5hbWU7Ci0gICAgaW5mby50eXBlID0gd2ViSW5m
by50eXBlOwotICAgIGluZm8uc2l6ZSA9IHdlYkluZm8uc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotREVMRUdBVEVfVE9fSU1QTF80KGdldEF0dGFjaGVkU2hhZGVycywgUGxhdGZvcm0zRE9i
amVjdCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkqLCBQbGF0Zm9ybTNET2JqZWN0KikKLQotR0MzRGlu
dCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX2ltcGwt
PmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLURF
TEVHQVRFX1RPX0lNUExfMihnZXRCb29sZWFudiwgR0MzRGVudW0sIEdDM0Rib29sZWFuKikKLQot
REVMRUdBVEVfVE9fSU1QTF8zKGdldEJ1ZmZlclBhcmFtZXRlcml2LCBHQzNEZW51bSwgR0MzRGVu
dW0sIEdDM0RpbnQqKQotCi1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICBXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSBtX2ltcGwtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cmlidXRlczsKLSAgICBhdHRyaWJ1dGVzLmFscGhhID0gd2ViQXR0cmlidXRlcy5hbHBoYTsK
LSAgICBhdHRyaWJ1dGVzLmRlcHRoID0gd2ViQXR0cmlidXRlcy5kZXB0aDsKLSAgICBhdHRyaWJ1
dGVzLnN0ZW5jaWwgPSB3ZWJBdHRyaWJ1dGVzLnN0ZW5jaWw7Ci0gICAgYXR0cmlidXRlcy5hbnRp
YWxpYXMgPSB3ZWJBdHRyaWJ1dGVzLmFudGlhbGlhczsKLSAgICBhdHRyaWJ1dGVzLnByZW11bHRp
cGxpZWRBbHBoYSA9IHdlYkF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhOwotICAgIGF0dHJp
YnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7Ci0g
ICAgYXR0cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQVSA9IHdlYkF0dHJpYnV0ZXMucHJlZmVyRGlz
Y3JldGVHUFU7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZXM7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExf
UihnZXRFcnJvciwgR0MzRGVudW0pCi0KLURFTEVHQVRFX1RPX0lNUExfMihnZXRGbG9hdHYsIEdD
M0RlbnVtLCBHQzNEZmxvYXQqKQotCi1ERUxFR0FURV9UT19JTVBMXzQoZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaXYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0Rp
bnQqKQotCi1ERUxFR0FURV9UT19JTVBMXzIoZ2V0SW50ZWdlcnYsIEdDM0RlbnVtLCBHQzNEaW50
KikKLQotREVMRUdBVEVfVE9fSU1QTF8zKGdldFByb2dyYW1pdiwgUGxhdGZvcm0zRE9iamVjdCwg
R0MzRGVudW0sIEdDM0RpbnQqKQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpn
ZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgcmV0dXJu
IG1faW1wbC0+Z2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7Ci19Ci0KLURFTEVHQVRFX1RPX0lN
UExfMyhnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNE
aW50KikKLQotREVMRUdBVEVfVE9fSU1QTF8zKGdldFNoYWRlcml2LCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEZW51bSwgR0MzRGludCopCi0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgcmV0dXJu
IG1faW1wbC0+Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOwotfQotCi1ERUxFR0FURV9UT19JTVBM
XzQoZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQq
LCBHQzNEaW50KikKLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U2hhZGVy
U291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIHJldHVybiBtX2ltcGwtPmdl
dFNoYWRlclNvdXJjZShzaGFkZXIpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5nZXRT
dHJpbmcobmFtZSk7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfMyhnZXRUZXhQYXJhbWV0ZXJmdiwg
R0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU1QTF8zKGdldFRl
eFBhcmFtZXRlcml2LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqKQotCi1ERUxFR0FURV9U
T19JTVBMXzMoZ2V0VW5pZm9ybWZ2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZmxv
YXQqKQotREVMRUdBVEVfVE9fSU1QTF8zKGdldFVuaWZvcm1pdiwgUGxhdGZvcm0zRE9iamVjdCwg
R0MzRGludCwgR0MzRGludCopCi0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpn
ZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgcmV0dXJuIG1faW1wbC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
IG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfMyhnZXRWZXJ0ZXhB
dHRyaWJmdiwgR0MzRHVpbnQsIEdDM0RlbnVtLCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU1Q
TF8zKGdldFZlcnRleEF0dHJpYml2LCBHQzNEdWludCwgR0MzRGVudW0sIEdDM0RpbnQqKQotCi1E
RUxFR0FURV9UT19JTVBMXzJSKGdldFZlcnRleEF0dHJpYk9mZnNldCwgR0MzRHVpbnQsIEdDM0Rl
bnVtLCBHQzNEc2l6ZWlwdHIpCi0KLURFTEVHQVRFX1RPX0lNUExfMihoaW50LCBHQzNEZW51bSwg
R0MzRGVudW0pCi1ERUxFR0FURV9UT19JTVBMXzFSKGlzQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lNUExfMVIoaXNFbmFibGVkLCBHQzNEZW51bSwg
R0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTVBMXzFSKGlzRnJhbWVidWZmZXIsIFBsYXRmb3Jt
M0RPYmplY3QsIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU1QTF8xUihpc1Byb2dyYW0sIFBs
YXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU1QTF8xUihpc1JlbmRl
cmJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTVBM
XzFSKGlzU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RP
X0lNUExfMVIoaXNUZXh0dXJlLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKLURFTEVH
QVRFX1RPX0lNUExfMShsaW5lV2lkdGgsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX0lNUExfMShs
aW5rUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMihwaXhlbFN0
b3JlaSwgR0MzRGVudW0sIEdDM0RpbnQpCi1ERUxFR0FURV9UT19JTVBMXzIocG9seWdvbk9mZnNl
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19JTVBMXzcocmVhZFBpeGVscywg
R0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEZW51
bSwgdm9pZCopCi1ERUxFR0FURV9UT19JTVBMKHJlbGVhc2VTaGFkZXJDb21waWxlcikKLURFTEVH
QVRFX1RPX0lNUExfNChyZW5kZXJidWZmZXJTdG9yYWdlLCBHQzNEZW51bSwgR0MzRGVudW0sIEdD
M0RzaXplaSwgR0MzRHNpemVpKQotREVMRUdBVEVfVE9fSU1QTF8yKHNhbXBsZUNvdmVyYWdlLCBH
QzNEY2xhbXBmLCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lNUExfNChzY2lzc29yLCBHQzNE
aW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9pbXBsLT5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzdHJp
bmcudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfMyhzdGVuY2lsRnVuYywg
R0MzRGVudW0sIEdDM0RpbnQsIEdDM0R1aW50KQotREVMRUdBVEVfVE9fSU1QTF80KHN0ZW5jaWxG
dW5jU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCwgR0MzRHVpbnQpCi1ERUxF
R0FURV9UT19JTVBMXzEoc3RlbmNpbE1hc2ssIEdDM0R1aW50KQotREVMRUdBVEVfVE9fSU1QTF8y
KHN0ZW5jaWxNYXNrU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEdWludCkKLURFTEVHQVRFX1RPX0lN
UExfMyhzdGVuY2lsT3AsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCi1ERUxFR0FURV9U
T19JTVBMXzQoc3RlbmNpbE9wU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0s
IEdDM0RlbnVtKQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtX2lt
cGwtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ERUxFR0FURV9UT19JTVBMXzModGV4UGFyYW1ldGVyZiwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEZmxvYXQpCi1ERUxFR0FURV9UT19JTVBMXzModGV4UGFyYW1ldGVyaSwgR0MzRGVudW0sIEdD
M0RlbnVtLCBHQzNEaW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1f
aW1wbC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExf
Mih1bmlmb3JtMWYsIEdDM0RpbnQsIEdDM0RmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdD
M0RmbG9hdCogdikKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIHYp
OwotfQotCi1ERUxFR0FURV9UT19JTVBMXzIodW5pZm9ybTFpLCBHQzNEaW50LCBHQzNEaW50KQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogdikKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm0x
aXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1ERUxFR0FURV9UT19JTVBMXzModW5pZm9ybTJm
LCBHQzNEaW50LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdD
M0RmbG9hdCogdikKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIHYp
OwotfQotCi1ERUxFR0FURV9UT19JTVBMXzModW5pZm9ybTJpLCBHQzNEaW50LCBHQzNEaW50LCBH
QzNEaW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTJpdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGludCogdikKLXsKLSAgICBtX2ltcGwt
PnVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1ERUxFR0FURV9UT19JTVBMXzQo
dW5pZm9ybTNmLCBHQzNEaW50LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiB2KQotewotICAgIG1faW1wbC0+dW5pZm9ybTNm
dihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfNCh1bmlmb3JtM2ks
IEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXpl
LCBHQzNEaW50KiB2KQotewotICAgIG1faW1wbC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwg
dik7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfNSh1bmlmb3JtNGYsIEdDM0RpbnQsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IEdDM0RmbG9hdCogdikKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUs
IHYpOwotfQotCi1ERUxFR0FURV9UT19JTVBMXzUodW5pZm9ybTRpLCBHQzNEaW50LCBHQzNEaW50
LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGlu
dCogdikKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIHYpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIHZhbHVlKQotewotICAgIG1faW1wbC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
Ojp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbV9pbXBsLT51bmlm
b3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2
YWx1ZSkKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRy
YW5zcG9zZSwgdmFsdWUpOwotfQotCi1ERUxFR0FURV9UT19JTVBMXzEodXNlUHJvZ3JhbSwgUGxh
dGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMSh2YWxpZGF0ZVByb2dyYW0sIFBsYXRm
b3JtM0RPYmplY3QpCi0KLURFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIxZiwgR0MzRHVp
bnQsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIxZnYsIEdDM0R1
aW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU1QTF8zKHZlcnRleEF0dHJpYjJmLCBHQzNE
dWludCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0
cmliMmZ2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKLURFTEVHQVRFX1RPX0lNUExfNCh2ZXJ0ZXhB
dHRyaWIzZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxF
R0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliM2Z2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKLURF
TEVHQVRFX1RPX0lNUExfNSh2ZXJ0ZXhBdHRyaWI0ZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0Mz
RGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhB
dHRyaWI0ZnYsIEdDM0R1aW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU1QTF82KHZlcnRl
eEF0dHJpYlBvaW50ZXIsIEdDM0R1aW50LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGJvb2xlYW4s
IEdDM0RzaXplaSwgR0MzRHNpemVpcHRyKQotCi1ERUxFR0FURV9UT19JTVBMXzQodmlld3BvcnQs
IEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpKQotCi1ERUxFR0FURV9UT19J
TVBMX1IoY3JlYXRlQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF9S
KGNyZWF0ZUZyYW1lYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF9S
KGNyZWF0ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMX1IoY3Jl
YXRlUmVuZGVyYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xUihj
cmVhdGVTaGFkZXIsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1Q
TF9SKGNyZWF0ZVRleHR1cmUsIFBsYXRmb3JtM0RPYmplY3QpCi0KLURFTEVHQVRFX1RPX0lNUExf
MShkZWxldGVCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzEoZGVs
ZXRlRnJhbWVidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzEoZGVs
ZXRlUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMShkZWxldGVS
ZW5kZXJidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzEoZGVsZXRl
U2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVRleHR1
cmUsIFBsYXRmb3JtM0RPYmplY3QpCi0KLURFTEVHQVRFX1RPX0lNUExfMShzeW50aGVzaXplR0xF
cnJvciwgR0MzRGVudW0pCi0KLUV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1fZXh0ZW5zaW9ucykKLSAgICAgICAgbV9l
eHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRENocm9taXVtKHRoaXMpKTsKLSAg
ICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aXNSZXNvdXJjZVNhZmUoKQotewotICAgIGlmIChtX3Jlc291cmNlU2FmZXR5ID09
IFJlc291cmNlU2FmZXR5VW5rbm93bikKLSAgICAgICAgbV9yZXNvdXJjZVNhZmV0eSA9IGdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9yZXNvdXJjZV9zYWZlIikgPyBSZXNv
dXJjZVNhZmUgOiBSZXNvdXJjZVVuc2FmZTsKLSAgICByZXR1cm4gbV9yZXNvdXJjZVNhZmV0eSA9
PSBSZXNvdXJjZVNhZmU7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQgc3BsaXRTdHJpbmdIZWxw
ZXIoY29uc3QgU3RyaW5nJiBzdHIsIEhhc2hTZXQ8U3RyaW5nPiYgc2V0KQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IHN1YnN0cmluZ3M7Ci0gICAgc3RyLnNwbGl0KCIgIiwgc3Vic3RyaW5ncyk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJzdHJpbmdzLnNpemUoKTsgKytpKQotICAgICAg
ICBzZXQuYWRkKHN1YnN0cmluZ3NbaV0pOwotfQotCi1TdHJpbmcgbWFwRXh0ZW5zaW9uTmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX2JsaXQiCi0gICAgICAgIHx8IG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIikKLSAgICAgICAgcmV0dXJuICJHTF9DSFJPTUlVTV9mcmFtZWJ1ZmZlcl9tdWx0aXNh
bXBsZSI7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZUV4dGVuc2lvbnMoKQot
ewotICAgIGlmIChtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOwotICAg
IGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVChzdWNjZXNz
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBleHRl
bnNpb25zU3RyaW5nID0gZ2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpFWFRFTlNJT05TKTsK
LSAgICBzcGxpdFN0cmluZ0hlbHBlcihleHRlbnNpb25zU3RyaW5nLCBtX2VuYWJsZWRFeHRlbnNp
b25zKTsKLQotICAgIFN0cmluZyByZXF1ZXN0YWJsZUV4dGVuc2lvbnNTdHJpbmcgPSBtX2ltcGwt
PmdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNKCk7Ci0gICAgc3BsaXRTdHJpbmdIZWxw
ZXIocmVxdWVzdGFibGVFeHRlbnNpb25zU3RyaW5nLCBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucyk7
Ci19Ci0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN1cHBvcnRzRXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwotICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKLSAgICByZXR1cm4g
bV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKSB8fCBtX3JlcXVlc3RhYmxl
RXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIGluaXRpYWxpemVFeHRlbnNpb25zKCk7Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9
IG1hcEV4dGVuc2lvbk5hbWUobmFtZSk7Ci0gICAgaWYgKG1fZW5hYmxlZEV4dGVuc2lvbnMuY29u
dGFpbnMobWFwcGVkTmFtZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG1fcmVx
dWVzdGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUpKSB7Ci0gICAgICAgIG1faW1w
bC0+cmVxdWVzdEV4dGVuc2lvbkNIUk9NSVVNKG1hcHBlZE5hbWUuYXNjaWkoKS5kYXRhKCkpOwot
ICAgICAgICBtX2VuYWJsZWRFeHRlbnNpb25zLmNsZWFyKCk7Ci0gICAgICAgIG1fcmVxdWVzdGFi
bGVFeHRlbnNpb25zLmNsZWFyKCk7Ci0gICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRl
bnNpb25zID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKLSAg
ICByZXR1cm4gbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKTsKLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKLSAgICBTdHJpbmcg
bWFwcGVkTmFtZSA9IG1hcEV4dGVuc2lvbk5hbWUobmFtZSk7Ci0gICAgcmV0dXJuIG1fZW5hYmxl
ZEV4dGVuc2lvbnMuY29udGFpbnMobWFwcGVkTmFtZSk7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExf
NChwb3N0U3ViQnVmZmVyQ0hST01JVU0sIGludCwgaW50LCBpbnQsIGludCkKLQotREVMRUdBVEVf
VE9fSU1QTF80UihtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0sIEdDM0RlbnVtLCBHQzNEc2l6ZWlw
dHIsIEdDM0RzaXplaSwgR0MzRGVudW0sIHZvaWQqKQotREVMRUdBVEVfVE9fSU1QTF8xKHVubWFw
QnVmZmVyU3ViRGF0YUNIUk9NSVVNLCBjb25zdCB2b2lkKikKLURFTEVHQVRFX1RPX0lNUExfOVIo
bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwgR0Mz
RGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0s
IHZvaWQqKQotREVMRUdBVEVfVE9fSU1QTF8xKHVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBj
b25zdCB2b2lkKikKLQotREVMRUdBVEVfVE9fSU1QTF8xKHNldFZpc2liaWxpdHlDSFJPTUlVTSwg
Ym9vbCk7Ci0KLURFTEVHQVRFX1RPX0lNUExfMyhkaXNjYXJkRnJhbWVidWZmZXJFWFQsIEdDM0Rl
bnVtLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVtKik7Ci1ERUxFR0FURV9UT19JTVBMKGVuc3Vy
ZUZyYW1lYnVmZmVyQ0hST01JVU0pOwotCi1ERUxFR0FURV9UT19JTVBMXzEwKGJsaXRGcmFtZWJ1
ZmZlckNIUk9NSVVNLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50
LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEYml0ZmllbGQsIEdDM0RlbnVtKQotREVM
RUdBVEVfVE9fSU1QTF81KHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUNIUk9NSVVNLCBH
QzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi0KLURF
TEVHQVRFX1RPX0lNUEwocmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKQotREVMRUdB
VEVfVE9fSU1QTF9SKGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIsIEdDM0RlbnVtKQotCi1ERUxF
R0FURV9UT19JTVBMXzFSKGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSwgUGxhdGZvcm0z
RE9iamVjdCwgU3RyaW5nKQotREVMRUdBVEVfVE9fSU1QTF81KHRleEltYWdlSU9TdXJmYWNlMkRD
SFJPTUlVTSwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0R1aW50LCBHQzNEdWludCkK
LURFTEVHQVRFX1RPX0lNUExfNSh0ZXhTdG9yYWdlMkRFWFQsIEdDM0RlbnVtLCBHQzNEaW50LCBH
QzNEdWludCwgR0MzRGludCwgR0MzRGludCkKLQotREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0ZVF1
ZXJ5RVhULCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVF1ZXJ5
RVhULCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xUihpc1F1ZXJ5RVhULCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lNUExfMihiZWdpblF1
ZXJ5RVhULCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMShl
bmRRdWVyeUVYVCwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTVBMXzMoZ2V0UXVlcnlpdkVYVCwg
R0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lNUExfMyhnZXRRdWVy
eU9iamVjdHVpdkVYVCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdDM0R1aW50KikKLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0vLyBHcmFwaGljc0NvbnRleHQzRAotLy8KLQotLy8gTWFjcm9zIHRv
IGFzc2lzdCBpbiBkZWxlZ2F0aW5nIGZyb20gR3JhcGhpY3NDb250ZXh0M0QgdG8KLS8vIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS4KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTChuYW1l
KSBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgXAoteyBcCi0gICAgbV9wcml2YXRl
LT5uYW1lKCk7IFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF9SKG5hbWUsIHJ0
KSAgICAgICAgICAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUoKSBcCi17IFwKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5uYW1lKCk7IFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRF
Uk5BTF8xKG5hbWUsIHQxKSBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSBc
Ci17IFwKLSAgICBtX3ByaXZhdGUtPm5hbWUoYTEpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVf
VE9fSU5URVJOQUxfMVIobmFtZSwgdDEsIHJ0KSAgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRDo6
bmFtZSh0MSBhMSkgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSk7IFwKLX0K
LQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8yKG5hbWUsIHQxLCB0MikgXAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKLXsgXAotICAgIG1fcHJpdmF0
ZS0+bmFtZShhMSwgYTIpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMlIo
bmFtZSwgdDEsIHQyLCBydCkgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0
MiBhMikgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIpOyBcCi19Ci0K
LSNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMyhuYW1lLCB0MSwgdDIsIHQzKSAgIFwKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAoteyBc
Ci0gICAgbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKLX0K
LQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8zUihuYW1lLCB0MSwgdDIsIHQzLCBydCkg
ICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBc
Ci17IFwKLSAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAg
ICAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF80KG5hbWUsIHQxLCB0
MiwgdDMsIHQ0KSAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMsIHQ0IGE0KSAgXAoteyBcCi0gICAgbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMs
IGE0KTsgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF80
UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgcnQpICAgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNEOjpu
YW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgREVM
RUdBVEVfVE9fSU5URVJOQUxfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUg
YTUpICAgICAgICBcCi17IFwKLSAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1
KTsgICBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNihuYW1lLCB0MSwgdDIs
IHQzLCB0NCwgdDUsIHQ2KSAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwg
dDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCi17IFwKLSAgICBtX3ByaXZhdGUt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRF
X1RPX0lOVEVSTkFMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAotcnQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1
LCB0NiBhNikgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBh
NCwgYTUsIGE2KTsgICAgICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzco
bmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcp
IFwKLXsgXAotICAgIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7
ICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzdSKG5hbWUsIHQxLCB0Miwg
dDMsIHQ0LCB0NSwgdDYsIHQ3LCBydCkgXAotcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKLXsgXAotICAg
IHJldHVybiBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAgIFwK
LX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF84KG5hbWUsIHQxLCB0MiwgdDMsIHQ0
LCB0NSwgdDYsIHQ3LCB0OCkgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwK
LXsgXAotICAgIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgp
OyAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF85KG5hbWUsIHQxLCB0
MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDkpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4
IGE4LCB0OSBhOSkgXAoteyBcCi0gICAgbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBh
NSwgYTYsIGE3LCBhOCwgYTkpOyAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5B
TF85UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCBydCkgXAotcnQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1
LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCi19Ci0KLUdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjp+
R3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxs
YmFjayhudWxscHRyKTsKLSAgICBtX3ByaXZhdGUtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKG51
bGxwdHIpOwotICAgIG1fcHJpdmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hS
T01JVU0obnVsbHB0cik7Ci0gICAgbV9wcml2YXRlLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7Ci19Ci0KLVBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5
bGUgcmVuZGVyU3R5bGUpCi17Ci0gICAgQVNTRVJUKHJlbmRlclN0eWxlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0KLSAgICBXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXM7Ci0gICAgd2ViQXR0cmli
dXRlcy5hbHBoYSA9IGF0dHJzLmFscGhhOwotICAgIHdlYkF0dHJpYnV0ZXMuZGVwdGggPSBhdHRy
cy5kZXB0aDsKLSAgICB3ZWJBdHRyaWJ1dGVzLnN0ZW5jaWwgPSBhdHRycy5zdGVuY2lsOwotICAg
IHdlYkF0dHJpYnV0ZXMuYW50aWFsaWFzID0gYXR0cnMuYW50aWFsaWFzOwotICAgIHdlYkF0dHJp
YnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gYXR0cnMucHJlbXVsdGlwbGllZEFscGhhOwotICAg
IHdlYkF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gYXR0cnMubm9FeHRlbnNpb25zOwotICAgIHdl
YkF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBhdHRycy5zaGFyZVJlc291cmNlczsKLSAgICB3
ZWJBdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gYXR0cnMucHJlZmVyRGlzY3JldGVHUFU7
Ci0KLSAgICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCA9
IGFkb3B0UHRyKFdlYktpdDo6d2ViS2l0UGxhdGZvcm1TdXBwb3J0KCktPmNyZWF0ZU9mZnNjcmVl
bkdyYXBoaWNzQ29udGV4dDNEKHdlYkF0dHJpYnV0ZXMpKTsKLSAgICBpZiAoIXdlYkNvbnRleHQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQod2ViQ29udGV4dC5yZWxlYXNl
KCksIHJlbmRlclN0eWxlLCBhdHRycy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpOwotfQotCi1QbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5wbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6
OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhdGZv
cm1UZXh0dXJlKCk7Ci19Ci0KLSNpZiBVU0UoU0tJQSkKLUdyQ29udGV4dCogR3JhcGhpY3NDb250
ZXh0M0Q6OmdyQ29udGV4dCgpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z3JDb250ZXh0KCk7
Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQot
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPnByZXBhcmVUZXh0dXJlKCk7Ci19Ci0KLUludFNpemUg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSgpCi17Ci0gICAgcmV0dXJu
IG1fcHJpdmF0ZS0+aXNSZXNvdXJjZVNhZmUoKTsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1ERUxFR0FURV9UT19J
TlRFUk5BTF9SKG1ha2VDb250ZXh0Q3VycmVudCwgYm9vbCkKLURFTEVHQVRFX1RPX0lOVEVSTkFM
XzIocmVzaGFwZSwgaW50LCBpbnQpCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoYWN0aXZlVGV4
dHVyZSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGF0dGFjaFNoYWRlciwgUGxh
dGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMo
YmluZEF0dHJpYkxvY2F0aW9uLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEdWludCwgY29uc3QgU3Ry
aW5nJikKLQotREVMRUdBVEVfVE9fSU5URVJOQUxfMihiaW5kQnVmZmVyLCBHQzNEZW51bSwgUGxh
dGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZEZyYW1lYnVmZmVyLCBH
QzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZFJl
bmRlcmJ1ZmZlciwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTlRF
Uk5BTF8yKGJpbmRUZXh0dXJlLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRF
X1RPX0lOVEVSTkFMXzQoYmxlbmRDb2xvciwgR0MzRGNsYW1wZiwgR0MzRGNsYW1wZiwgR0MzRGNs
YW1wZiwgR0MzRGNsYW1wZikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoYmxlbmRFcXVhdGlvbiwg
R0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwg
R0MzRGVudW0sIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMihibGVuZEZ1bmMsIEdD
M0RlbnVtLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQoYmxlbmRGdW5jU2VwYXJh
dGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtKQotCi1ERUxFR0FURV9U
T19JTlRFUk5BTF8zKGJ1ZmZlckRhdGEsIEdDM0RlbnVtLCBHQzNEc2l6ZWlwdHIsIEdDM0RlbnVt
KQotREVMRUdBVEVfVE9fSU5URVJOQUxfNChidWZmZXJEYXRhLCBHQzNEZW51bSwgR0MzRHNpemVp
cHRyLCBjb25zdCB2b2lkKiwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KGJ1ZmZl
clN1YkRhdGEsIEdDM0RlbnVtLCBHQzNEaW50cHRyLCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQq
KQotCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihjaGVja0ZyYW1lYnVmZmVyU3RhdHVzLCBHQzNE
ZW51bSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGNsZWFyLCBHQzNEYml0Zmll
bGQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KGNsZWFyQ29sb3IsIEdDM0RjbGFtcGYsIEdDM0Rj
bGFtcGYsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGNs
ZWFyRGVwdGgsIEdDM0RjbGFtcGYpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGNsZWFyU3RlbmNp
bCwgR0MzRGludCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQoY29sb3JNYXNrLCBHQzNEYm9vbGVh
biwgR0MzRGJvb2xlYW4sIEdDM0Rib29sZWFuLCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lO
VEVSTkFMXzEoY29tcGlsZVNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCkKLQotREVMRUdBVEVfVE9f
SU5URVJOQUxfOChjb21wcmVzc2VkVGV4SW1hZ2UyRCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0Rl
bnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgY29uc3Qgdm9pZCop
Ci1ERUxFR0FURV9UT19JTlRFUk5BTF85KGNvbXByZXNzZWRUZXhTdWJJbWFnZTJELCBHQzNEZW51
bSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGVudW0s
IEdDM0RzaXplaSwgY29uc3Qgdm9pZCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF84KGNvcHlUZXhJ
bWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdD
M0RzaXplaSwgR0MzRHNpemVpLCBHQzNEaW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxfOChjb3B5
VGV4U3ViSW1hZ2UyRCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0Rp
bnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpKQotREVMRUdBVEVfVE9fSU5URVJOQUxf
MShjdWxsRmFjZSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlcHRoRnVuYywg
R0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlcHRoTWFzaywgR0MzRGJvb2xlYW4p
Ci1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGRlcHRoUmFuZ2UsIEdDM0RjbGFtcGYsIEdDM0RjbGFt
cGYpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGRldGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVj
dCwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGlzYWJsZSwgR0Mz
RGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSwg
R0MzRHVpbnQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKGRyYXdBcnJheXMsIEdDM0RlbnVtLCBH
QzNEaW50LCBHQzNEc2l6ZWkpCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KGRyYXdFbGVtZW50cywg
R0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RpbnRwdHIpCi0KLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzEoZW5hYmxlLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZW5h
YmxlVmVydGV4QXR0cmliQXJyYXksIEdDM0R1aW50KQotREVMRUdBVEVfVE9fSU5URVJOQUwoZmlu
aXNoKQotREVMRUdBVEVfVE9fSU5URVJOQUwoZmx1c2gpCi1ERUxFR0FURV9UT19JTlRFUk5BTF80
KGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBQ
bGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfNShmcmFtZWJ1ZmZlclRleHR1
cmUyRCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0Mz
RGludCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZnJvbnRGYWNlLCBHQzNEZW51bSkKLURFTEVH
QVRFX1RPX0lOVEVSTkFMXzEoZ2VuZXJhdGVNaXBtYXAsIEdDM0RlbnVtKQotCi1ERUxFR0FURV9U
T19JTlRFUk5BTF8zUihnZXRBY3RpdmVBdHRyaWIsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1aW50
LCBBY3RpdmVJbmZvJiwgYm9vbCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2ZVVu
aWZvcm0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1aW50LCBBY3RpdmVJbmZvJiwgYm9vbCkKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzQoZ2V0QXR0YWNoZWRTaGFkZXJzLCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEc2l6ZWksIEdDM0RzaXplaSosIFBsYXRmb3JtM0RPYmplY3QqKQotREVMRUdBVEVfVE9f
SU5URVJOQUxfMlIoZ2V0QXR0cmliTG9jYXRpb24sIFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0
cmluZyYsIEdDM0RpbnQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGdldEJvb2xlYW52LCBHQzNE
ZW51bSwgR0MzRGJvb2xlYW4qKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRCdWZmZXJQYXJh
bWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVS
TkFMX1IoZ2V0Q29udGV4dEF0dHJpYnV0ZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihnZXRFcnJvciwgR0MzRGVudW0pCi1ERUxFR0FURV9U
T19JTlRFUk5BTF8yKGdldEZsb2F0diwgR0MzRGVudW0sIEdDM0RmbG9hdCopCi1ERUxFR0FURV9U
T19JTlRFUk5BTF80KGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2LCBHQzNEZW51
bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIo
Z2V0SW50ZWdlcnYsIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMo
Z2V0UHJvZ3JhbWl2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCopCi1ERUxF
R0FURV9UT19JTlRFUk5BTF8xUihnZXRQcm9ncmFtSW5mb0xvZywgUGxhdGZvcm0zRE9iamVjdCwg
U3RyaW5nKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
diwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMo
Z2V0U2hhZGVyaXYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVH
QVRFX1RPX0lOVEVSTkFMXzFSKGdldFNoYWRlckluZm9Mb2csIFBsYXRmb3JtM0RPYmplY3QsIFN0
cmluZykKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQoZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0LCBH
QzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVS
TkFMXzFSKGdldFNoYWRlclNvdXJjZSwgUGxhdGZvcm0zRE9iamVjdCwgU3RyaW5nKQotREVMRUdB
VEVfVE9fSU5URVJOQUxfMVIoZ2V0U3RyaW5nLCBHQzNEZW51bSwgU3RyaW5nKQotREVMRUdBVEVf
VE9fSU5URVJOQUxfMyhnZXRUZXhQYXJhbWV0ZXJmdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNE
ZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRUZXhQYXJhbWV0ZXJpdiwgR0MzRGVu
dW0sIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VW5pZm9y
bWZ2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9f
SU5URVJOQUxfMyhnZXRVbmlmb3JtaXYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0Rp
bnQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0VW5pZm9ybUxvY2F0aW9uLCBQbGF0Zm9y
bTNET2JqZWN0LCBjb25zdCBTdHJpbmcmLCBHQzNEaW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxf
MyhnZXRWZXJ0ZXhBdHRyaWJmdiwgR0MzRHVpbnQsIEdDM0RlbnVtLCBHQzNEZmxvYXQqKQotREVM
RUdBVEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0ZXhBdHRyaWJpdiwgR0MzRHVpbnQsIEdDM0RlbnVt
LCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldFZlcnRleEF0dHJpYk9mZnNl
dCwgR0MzRHVpbnQsIEdDM0RlbnVtLCBHQzNEc2l6ZWlwdHIpCi0KLURFTEVHQVRFX1RPX0lOVEVS
TkFMXzIoaGludCwgR0MzRGVudW0sIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMVIo
aXNCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU5U
RVJOQUxfMVIoaXNFbmFibGVkLCBHQzNEZW51bSwgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19J
TlRFUk5BTF8xUihpc0ZyYW1lYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikK
LURFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCwgR0Mz
RGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1JlbmRlcmJ1ZmZlciwgUGxhdGZv
cm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1NoYWRl
ciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8x
Uihpc1RleHR1cmUsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9f
SU5URVJOQUxfMShsaW5lV2lkdGgsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEo
bGlua1Byb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKHBp
eGVsU3RvcmVpLCBHQzNEZW51bSwgR0MzRGludCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIocG9s
eWdvbk9mZnNldCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFM
XzcocmVhZFBpeGVscywgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdD
M0RlbnVtLCBHQzNEZW51bSwgdm9pZCopCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMKHJlbGVhc2VT
aGFkZXJDb21waWxlcikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQocmVuZGVyYnVmZmVyU3RvcmFn
ZSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzIoc2FtcGxlQ292ZXJhZ2UsIEdDM0RjbGFtcGYsIEdDM0Rib29sZWFuKQotREVM
RUdBVEVfVE9fSU5URVJOQUxfNChzY2lzc29yLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWks
IEdDM0RzaXplaSkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoc2hhZGVyU291cmNlLCBQbGF0Zm9y
bTNET2JqZWN0LCBjb25zdCBTdHJpbmcmKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhzdGVuY2ls
RnVuYywgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0R1aW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxf
NChzdGVuY2lsRnVuY1NlcGFyYXRlLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0R1
aW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMShzdGVuY2lsTWFzaywgR0MzRHVpbnQpCi1ERUxF
R0FURV9UT19JTlRFUk5BTF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEdWlu
dCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMoc3RlbmNpbE9wLCBHQzNEZW51bSwgR0MzRGVudW0s
IEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNChzdGVuY2lsT3BTZXBhcmF0ZSwgR0Mz
RGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCi0KLURFTEVHQVRFX1RPX0lOVEVS
TkFMXzlSKHRleEltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRHNpemVp
LCBHQzNEc2l6ZWksIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEZW51bSwgY29uc3Qgdm9pZCosIGJv
b2wpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHRleFBhcmFtZXRlcmYsIEdDM0RlbnVtLCBHQzNE
ZW51bSwgR0MzRGZsb2F0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyh0ZXhQYXJhbWV0ZXJpLCBH
QzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF85KHRleFN1
YkltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWks
IEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBjb25zdCB2b2lkKikKLQotREVMRUdBVEVf
VE9fSU5URVJOQUxfMih1bmlmb3JtMWYsIEdDM0RpbnQsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzModW5pZm9ybTFmdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQot
REVMRUdBVEVfVE9fSU5URVJOQUxfMih1bmlmb3JtMWksIEdDM0RpbnQsIEdDM0RpbnQpCi1ERUxF
R0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0xaXYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGlu
dCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yZiwgR0MzRGludCwgR0MzRGZsb2F0
LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0yZnYsIEdDM0RpbnQs
IEdDM0RzaXplaSwgR0MzRGZsb2F0KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTJp
LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlm
b3JtMml2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RpbnQqKQotREVMRUdBVEVfVE9fSU5URVJO
QUxfNCh1bmlmb3JtM2YsIEdDM0RpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQp
Ci1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0zZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwg
R0MzRGZsb2F0KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybTNpLCBHQzNEaW50LCBH
QzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3Jt
M2l2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RpbnQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxf
NSh1bmlmb3JtNGYsIEdDM0RpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdD
M0RmbG9hdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTRmdiwgR0MzRGludCwgR0Mz
RHNpemVpLCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNSh1bmlmb3JtNGksIEdD
M0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCi1ERUxFR0FURV9UT19J
TlRFUk5BTF8zKHVuaWZvcm00aXYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGludCopCi1ERUxF
R0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRyaXgyZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwg
R0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1N
YXRyaXgzZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCi1E
RUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRyaXg0ZnYsIEdDM0RpbnQsIEdDM0RzaXpl
aSwgR0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEodXNl
UHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEodmFsaWRh
dGVQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0KQotCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKHZl
cnRleEF0dHJpYjFmLCBHQzNEdWludCwgR0MzRGZsb2F0KQotREVMRUdBVEVfVE9fSU5URVJOQUxf
Mih2ZXJ0ZXhBdHRyaWIxZnYsIEdDM0R1aW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5U
RVJOQUxfMyh2ZXJ0ZXhBdHRyaWIyZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQot
REVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIyZnYsIEdDM0R1aW50LCBHQzNEZmxv
YXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNCh2ZXJ0ZXhBdHRyaWIzZiwgR0MzRHVpbnQsIEdD
M0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKHZl
cnRleEF0dHJpYjNmdiwgR0MzRHVpbnQsIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19JTlRFUk5B
TF81KHZlcnRleEF0dHJpYjRmLCBHQzNEdWludCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0Rm
bG9hdCwgR0MzRGZsb2F0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWI0ZnYs
IEdDM0R1aW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNih2ZXJ0ZXhBdHRy
aWJQb2ludGVyLCBHQzNEdWludCwgR0MzRGludCwgR0MzRGVudW0sIEdDM0Rib29sZWFuLCBHQzNE
c2l6ZWksIEdDM0RpbnRwdHIpCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQodmlld3BvcnQsIEdD
M0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpKQotCi1ERUxFR0FURV9UT19JTlRF
Uk5BTChtYXJrTGF5ZXJDb21wb3NpdGVkKQotREVMRUdBVEVfVE9fSU5URVJOQUwobWFya0NvbnRl
eHRDaGFuZ2VkKQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBj
b25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmxheWVyQ29tcG9zaXRlZCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVy
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KGNvbnRleHQsIGRyYXdpbmdCdWZmZXIpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdC
dWZmZXIqIGRyYXdpbmdCdWZmZXIpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoZHJhd2luZ0J1ZmZlcik7Ci19Ci0KLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzFSKHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcywgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCosIGJvb2wpCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlQnVmZmVy
LCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVGcmFtZWJ1
ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlUHJv
Z3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMX1IoY3JlYXRlUmVu
ZGVyYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoY3Jl
YXRlU2hhZGVyLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVS
TkFMX1IoY3JlYXRlVGV4dHVyZSwgUGxhdGZvcm0zRE9iamVjdCkKLQotREVMRUdBVEVfVE9fSU5U
RVJOQUxfMShkZWxldGVCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTlRF
Uk5BTF8xKGRlbGV0ZUZyYW1lYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9f
SU5URVJOQUxfMShkZWxldGVQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9f
SU5URVJOQUxfMShkZWxldGVSZW5kZXJidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGRlbGV0ZVNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRF
X1RPX0lOVEVSTkFMXzEoZGVsZXRlVGV4dHVyZSwgUGxhdGZvcm0zRE9iamVjdCkKLQotREVMRUdB
VEVfVE9fSU5URVJOQUxfMShzeW50aGVzaXplR0xFcnJvciwgR0MzRGVudW0pCi1ERUxFR0FURV9U
T19JTlRFUk5BTF9SKGdldEV4dGVuc2lvbnMsIEV4dGVuc2lvbnMzRCopCi0KLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzEoc2V0Q29udGV4dExvc3RDYWxsYmFjaywgUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKHNl
dEVycm9yTWVzc2FnZUNhbGxiYWNrLCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpFcnJv
ck1lc3NhZ2VDYWxsYmFjaz4pCi0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0Fk
YXB0ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3ND
b250ZXh0TG9zdENhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0
TG9zdCgpOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFj
a0FkYXB0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9z
dENhbGxiYWNrPik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRh
cHRlcigpIHsgfQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFw
dGVyKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IGNi
KSA6IG1fY29udGV4dExvc3RDYWxsYmFjayhjYikgeyB9Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPiBtX2NvbnRleHRMb3N0Q2FsbGJhY2s7Ci19Owot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI6Om9uQ29udGV4dExvc3Qo
KQotewotICAgIGlmIChtX2NvbnRleHRMb3N0Q2FsbGJhY2spCi0gICAgICAgIG1fY29udGV4dExv
c3RDYWxsYmFjay0+b25Db250ZXh0TG9zdCgpOwotfQotCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dExvc3RDYWxsYmFja0FkYXB0ZXI+IEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0
ZXI6OmNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxi
YWNrPiBjYikKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIoY2IuZ2V0KCkgPyBuZXcgR3JhcGhpY3ND
b250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcihjYikgOiAwKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2IpCi17Ci0gICAgbV9jb250ZXh0TG9z
dENhbGxiYWNrQWRhcHRlciA9IEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI6OmNy
ZWF0ZShjYik7Ci0gICAgbV9pbXBsLT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKG1fY29udGV4dExv
c3RDYWxsYmFja0FkYXB0ZXIuZ2V0KCkpOwotfQotCi1jbGFzcyBHcmFwaGljc0Vycm9yTWVzc2Fn
ZUNhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpX
ZWJHcmFwaGljc0Vycm9yTWVzc2FnZUNhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgb25FcnJvck1lc3NhZ2UoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBXZWJLaXQ6OldHQzNE
aW50KTsKLSAgICBzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0Vycm9yTWVzc2FnZUNhbGxiYWNr
QWRhcHRlcj4gY3JlYXRlKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkVycm9yTWVzc2Fn
ZUNhbGxiYWNrPik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0Fk
YXB0ZXIoKSB7IH0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0Fk
YXB0ZXIoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
IGNiKSA6IG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2soY2IpIHsgfQotICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+IG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2s7
Ci19OwotCi12b2lkIEdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyOjpvbkVycm9y
TWVzc2FnZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2FnZSwgV2ViS2l0OjpXR0MzRGlu
dCBpZCkKLXsKLSAgICBpZiAobV9lcnJvck1lc3NhZ2VDYWxsYmFjaykKLSAgICAgICAgbV9lcnJv
ck1lc3NhZ2VDYWxsYmFjay0+b25FcnJvck1lc3NhZ2UobWVzc2FnZSwgaWQpOwotfQotCi1QYXNz
T3duUHRyPEdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyPiBHcmFwaGljc0Vycm9y
TWVzc2FnZUNhbGxiYWNrQWRhcHRlcjo6Y3JlYXRlKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrPiBjYikKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIoY2Iu
Z2V0KCkgPyBuZXcgR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIoY2IpIDogMCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRFcnJvck1lc3NhZ2VDYWxs
YmFjayhQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjaz4g
Y2IpCi17Ci0gICAgbV9lcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIgPSBHcmFwaGljc0Vycm9y
TWVzc2FnZUNhbGxiYWNrQWRhcHRlcjo6Y3JlYXRlKGNiKTsKLSAgICBtX2ltcGwtPnNldEVycm9y
TWVzc2FnZUNhbGxiYWNrKG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyLmdldCgpKTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNHTEVTMkNvbXBsaWFudCgpOwotfQotCi1jbGFzcyBHcmFw
aGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIgOiBwdWJsaWMg
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NTd2FwQnVmZmVyc0NvbXBs
ZXRlQ2FsbGJhY2tDSFJPTUlVTSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1
ZmZlcnNDb21wbGV0ZSgpOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcj4gY3JlYXRlKFBhc3NPd25QdHI8RXh0
ZW5zaW9uczNEQ2hyb21pdW06OlN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNPik7
Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2tBZGFwdGVyKCkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyKFBhc3NPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21p
dW06OlN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNPiBjYikgOiBtX3N3YXBCdWZm
ZXJzQ29tcGxldGVDYWxsYmFjayhjYikgeyB9Ci0gICAgT3duUHRyPEV4dGVuc2lvbnMzRENocm9t
aXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4gbV9zd2FwQnVmZmVyc0Nv
bXBsZXRlQ2FsbGJhY2s7Ci19OwotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnND
b21wbGV0ZUNhbGxiYWNrQWRhcHRlcjo6b25Td2FwQnVmZmVyc0NvbXBsZXRlKCkKLXsKLSAgICBp
ZiAobV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2spCi0gICAgICAgIG1fc3dhcEJ1ZmZlcnND
b21wbGV0ZUNhbGxiYWNrLT5vblN3YXBCdWZmZXJzQ29tcGxldGUoKTsKLX0KLQotUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI+IEdy
YXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjo6Y3JlYXRl
KFBhc3NPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21pdW06OlN3YXBCdWZmZXJzQ29tcGxldGVDYWxs
YmFja0NIUk9NSVVNPiBjYikKLXsKLSAgICByZXR1cm4gYWRvcHRQdHIoY2IuZ2V0KCkgPyBuZXcg
R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyKGNiKSA6
IDApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0U3dhcEJ1ZmZlcnND
b21wbGV0ZUNhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6
U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0+IGNiKQotewotICAgIG1fc3dhcEJ1
ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlciA9IEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZl
cnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjo6Y3JlYXRlKGNiKTsKLSAgICBtX2ltcGwtPnNldFN3
YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNh
bGxiYWNrQWRhcHRlci5nZXQoKSk7Ci19Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNETWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNr
Q0hST01JVU0gewotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIoUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPiBjYikKLSAgICAgICAg
OiBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2soY2IpCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxs
YmFja0FkYXB0ZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBvbk1lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkKHNpemVfdCBncHVSZXNvdXJjZVNpemVJbkJ5dGVzKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgY2xpZW50cyBzdGFydCB1c2luZyBXZWJHcmFwaGljc01l
bW9yeUFsbG9jYXRpb24gZXhjbHVzaXZlbHkuCi0gICAgICAgIG9uTWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWQoV2ViS2l0OjpXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb24oZ3B1UmVzb3VyY2VTaXpl
SW5CeXRlcywgdHJ1ZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBvbk1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkKFdlYktpdDo6V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIGFsbG9jYXRp
b24pCi0gICAgewotICAgICAgICBpZiAobV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNr
KQotICAgICAgICAgICAgbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrLT5vbkdwdU1l
bW9yeUFsbG9jYXRpb25DaGFuZ2VkKEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxv
Y2F0aW9uQ0hST01JVU0oYWxsb2NhdGlvbi5ncHVSZXNvdXJjZVNpemVJbkJ5dGVzLCBhbGxvY2F0
aW9uLnN1Z2dlc3RIYXZlQmFja2J1ZmZlcikpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPd25Q
dHI8RXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJh
Y2tDSFJPTUlVTT4gbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrOwotfTsKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0+IGNiKQotewotICAgIG1fbWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3ND
b250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcihjYikpOwotICAg
IG1faW1wbC0+c2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKG1fbWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIuZ2V0KCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzk4OTg5NzFiZDdiNjczN2QwMzYxOGUwZGU4NTc0
NjA0OTljN2QzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZV9oCi0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCi0KLSNp
bmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAi
U2tCaXRtYXAuaCIKLSNlbmRpZgotCi0jaWYgVVNFKFNLSUEpCi1jbGFzcyBHckNvbnRleHQ7Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsK
LX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEcmF3aW5nQnVmZmVyOwotY2xhc3Mg
RXh0ZW5zaW9uczNEQ2hyb21pdW07Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tB
ZGFwdGVyOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2tBZGFwdGVyOwotY2xhc3MgR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI7Ci1j
bGFzcyBHcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFw
dGVyOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgewotcHVibGljOgotICAgIC8v
IENhbGxlcnMgbXVzdCBtYWtlIHRoZSBjb250ZXh0IGN1cnJlbnQgYmVmb3JlIHVzaW5nIGl0IEFO
RCBjaGVjayB0aGF0IHRoZSBjb250ZXh0IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQotICAgIC8v
IHZpYSBDb250ZXh0TG9zdCBiZWZvcmUgdXNpbmcgdGhlIGNvbnRleHQgaW4gYW55IHdheS4gT25j
ZSBtYWRlIGN1cnJlbnQgb24gYSB0aHJlYWQsIHRoZSBjb250ZXh0IGNhbm5vdAotICAgIC8vIGJl
IHVzZWQgb24gYW55IG90aGVyIHRocmVhZC4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoUGFzc093blB0
cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlLCBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlKTsKLQotICAgIHZpcnR1
YWwgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBsb3dlci1sZXZlbCBXZWJHcmFwaGljc0NvbnRleHQz
RCwKLSAgICAvLyB3aGljaCBpcyBuZWVkZWQgZm9yIHN1Ym9yZGluYXRlIGNvbnRleHRzIGxpa2Ug
V2ViR0wncyB0byBzaGFyZSByZXNvdXJjZXMKLSAgICAvLyB3aXRoIHRoZSBjb21wb3NpdG9yJ3Mg
Y29udGV4dC4KLSAgICBzdGF0aWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZXh0cmFj
dFdlYkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKik7Ci0KLSAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdDsKLSAg
ICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OwotI2lmIFVTRShTS0lB
KQotICAgIEdyQ29udGV4dCogZ3JDb250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIGJvb2wgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKLSAgICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc1Jlc291cmNlU2FmZSgpOwotCi0gICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsK
LSAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OwotICAgIHZvaWQgbWFya0xheWVyQ29t
cG9zaXRlZCgpOwotCi0gICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiwgRHJhd2luZ0J1ZmZlciopOwotICAgIHZvaWQgcGFpbnRGcmFt
ZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFtZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEltYWdlQnVmZmVyKik7Ci0gICAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKERyYXdpbmdCdWZmZXIqKTsK
LSAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0Kik7Ci0KLSAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7Ci0KLSAgICAvLyBDSFJPTUlV
TV9wb3N0X3N1Yl9idWZmZXIKLSAgICB2b2lkIHBvc3RTdWJCdWZmZXJDSFJPTUlVTShpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLSAgICBib29sIGlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdDsKLQotICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0gICAgYm9v
bCBpc0NvbnRleHRMb3N0KCk7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBFbnRyeSBw
b2ludHMgZm9yIFdlYkdMLgotICAgIC8vCi0gICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVt
IHRleHR1cmUpOwotICAgIHZvaWQgYXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpOwotICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9u
KFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpOwot
ICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwot
ICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCk7Ci0gICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCk7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QpOwotICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKTsKLSAgICB2b2lkIGJs
ZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKTsKLSAgICB2b2lkIGJsZW5k
RnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKTsKLSAgICB2b2lkIGJsZW5k
RnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBz
cmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOwotCi0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpcHRyLCBHQzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZm
ZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhLCBH
QzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCogZGF0YSk7Ci0KLSAg
ICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCk7Ci0gICAg
dm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7Ci0gICAgdm9pZCBjbGVhckNvbG9yKEdDM0Rj
bGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYg
YWxwaGEpOwotICAgIHZvaWQgY2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKTsKLSAgICB2b2lk
IGNsZWFyU3RlbmNpbChHQzNEaW50IHMpOwotICAgIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFu
IHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFs
cGhhKTsKLSAgICB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0KLSAgICB2
b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEp
OwotICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQqIGRhdGEpOwotICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIpOwotICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBj
dWxsRmFjZShHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5j
KTsKLSAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKTsKLSAgICB2b2lkIGRlcHRo
UmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKTsKLSAgICB2b2lkIGRldGFj
aFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRp
c2FibGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShH
QzNEdWludCBpbmRleCk7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCk7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVu
dW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNl
dCk7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpOwotICAgIHZvaWQgZmluaXNoKCk7Ci0gICAg
dm9pZCBmbHVzaCgpOwotICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVt
IG1vZGUpOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKLQotICAg
IGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mKTsKLSAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwotICAgIHZvaWQg
Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1h
eENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKTsKLSAg
ICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7Ci0gICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xl
YW4qIHZhbHVlKTsKLSAgICB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVy
cm9yKCk7Ci0gICAgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFs
dWUpOwotICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpOwotICAgIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKTsKLSAgICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZv
TG9nKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotICAg
IHZvaWQgZ2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0
KTsKLSAgICB2b2lkIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBl
LCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lz
aW9uKTsKLQotICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCk7Ci0g
ICAgU3RyaW5nIGdldFN0cmluZyhHQzNEZW51bSBuYW1lKTsKLSAgICB2b2lkIGdldFRleFBhcmFt
ZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUp
OwotICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAg
dm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0
aW9uLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGdldFZlcnRleEF0
dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7
Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7Ci0KLSAgICB2b2lkIGhpbnQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsKLSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2Fw
KTsKLSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAg
IEdDM0Rib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVh
biBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1No
YWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZv
cm0zRE9iamVjdCk7Ci0gICAgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGxp
bmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxv
YXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpOwotCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSk7Ci0KLSAgICB2b2lkIHJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNhbXBsZUNvdmVy
YWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAgdm9pZCBzY2lz
c29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpOwotICAgIHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdD
M0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNl
LCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBz
dGVuY2lsTWFzayhHQzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVu
dW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKLSAgICB2b2lkIHN0ZW5j
aWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWls
LCBHQzNEZW51bSB6cGFzcyk7Ci0KLSAgICAvLyB0ZXhJbWFnZTJEIHJldHVybiBmYWxzZSBvbiBh
bnkgZXJyb3IgcmF0aGVyIHRoYW4gdXNpbmcgYW4gRXhjZXB0aW9uQ29kZS4KLSAgICBib29sIHRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwot
ICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEZmxvYXQgcGFyYW0pOwotICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0KLSAgICB2b2lkIHVuaWZv
cm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCk7Ci0gICAgdm9pZCB1bmlmb3JtMWZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVu
aWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpOwotICAgIHZvaWQgdW5pZm9ybTFp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYpOwotICAgIHZvaWQgdW5p
Zm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2b2lk
IHVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwot
ICAgIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
KTsKLSAgICB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNE
aW50KiB2KTsKLSAgICB2b2lkIHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTNp
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHopOwotICAg
IHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYp
OwotICAgIHZvaWQgdW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKLSAgICB2b2lkIHVuaWZvcm00ZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwotICAgIHZvaWQgdW5p
Zm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHos
IEdDM0RpbnQgdyk7Ci0gICAgdm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSwgR0MzRGludCogdik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVl
KTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRy
YW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0KLSAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCk7Ci0gICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7
Ci0KLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCk7
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFs
dWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHkpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJp
YlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0Mz
RGJvb2xlYW4gbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpOwotCi0gICAgdm9pZCB2aWV3cG9ydChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLQot
ICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlQnVmZmVyKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVj
dCBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUHJvZ3Jh
bSgpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBjcmVhdGVTaGFkZXIoR0MzRGVudW0pOwotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgY3JlYXRlVGV4dHVyZSgpOwotCi0gICAgdm9pZCBkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9i
amVjdCk7Ci0gICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAg
ICB2b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVS
ZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVTaGFkZXIoUGxh
dGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qp
OwotCi0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcik7Ci0KLSAgICB2
b2lkIHNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6
Q29udGV4dExvc3RDYWxsYmFjaz4pOwotICAgIHZvaWQgc2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2so
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KTsKLQot
ICAgIC8vIEV4dGVuc2lvbnMzRCBzdXBwb3J0LgotICAgIEV4dGVuc2lvbnMzRCogZ2V0RXh0ZW5z
aW9ucygpOwotICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsK
LSAgICBib29sIGVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAg
ICBib29sIGlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgLy8g
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ci0gICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsKLQot
ICAgIC8vIEdMX0NIUk9NSVVNX21hcF9zdWIKLSAgICBib29sIHN1cHBvcnRzTWFwU3ViQ0hST01J
VU0oKTsKLSAgICB2b2lkKiBtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0
LCBHQzNEc2l6ZWlwdHIgb2Zmc2V0LCBHQzNEc2l6ZWksIEdDM0RlbnVtIGFjY2Vzcyk7Ci0gICAg
dm9pZCB1bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShjb25zdCB2b2lkKik7Ci0gICAgdm9pZCog
bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEZW51bSBhY2Nl
c3MpOwotICAgIHZvaWQgdW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29uc3Qgdm9pZCopOwot
Ci0gICAgLy8gR0xfQ0hST01JVU1fc2V0X3Zpc2liaWxpdHkKLSAgICB2b2lkIHNldFZpc2liaWxp
dHlDSFJPTUlVTShib29sKTsKLQotICAgIC8vIEdMX0VYVF9kaXNjYXJkX2ZyYW1lYnVmZmVyCi0g
ICAgdmlydHVhbCB2b2lkIGRpc2NhcmRGcmFtZWJ1ZmZlckVYVChHQzNEZW51bSB0YXJnZXQsIEdD
M0RzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0MzRGVudW0qIGF0dGFjaG1lbnRzKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZW5zdXJlRnJhbWVidWZmZXJDSFJPTUlVTSgpOwotCi0gICAgLy8gR0xf
Q0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyCi0gICAgdm9pZCBzZXRHcHVNZW1vcnlBbGxvY2F0
aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1
bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPik7Ci0KLSAgICAv
LyBHTF9DSFJPTUlVTV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQotICAgIHZvaWQgYmxpdEZyYW1l
YnVmZmVyQ0hST01JVU0oR0MzRGludCBzcmNYMCwgR0MzRGludCBzcmNZMCwgR0MzRGludCBzcmNY
MSwgR0MzRGludCBzcmNZMSwgR0MzRGludCBkc3RYMCwgR0MzRGludCBkc3RZMCwgR0MzRGludCBk
c3RYMSwgR0MzRGludCBkc3RZMSwgR0MzRGJpdGZpZWxkIG1hc2ssIEdDM0RlbnVtIGZpbHRlcik7
Ci0gICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVDSFJPTUlVTShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLQotICAgIC8vIEdMX0NIUk9NSVVNX3N3
YXBidWZmZXJzX2NvbXBsZXRlX2NhbGxiYWNrCi0gICAgdm9pZCBzZXRTd2FwQnVmZmVyc0NvbXBs
ZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4pOwotCi0gICAgLy8gR0xfQ0hST01JVU1f
cmF0ZV9saW1pdF9vZmZzY3JlZW5fY29udGV4dAotICAgIHZvaWQgcmF0ZUxpbWl0T2Zmc2NyZWVu
Q29udGV4dENIUk9NSVVNKCk7Ci0KLSAgICAvLyBHTF9BUkJfcm9idXN0bmVzcwotICAgIEdDM0Rl
bnVtIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKLQotICAgIC8vIEdMX0FOR0xFX3RyYW5z
bGF0ZWRfc2hhZGVyX3NvdXJjZQotICAgIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpOwotCi0gICAgLy8gR0xfQ0hST01JVU1faW9z
dXJmYWNlCi0gICAgdm9pZCB0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0oR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IHdpZHRoLCBHQzNEaW50IGhlaWdodCwgR0MzRHVpbnQgaW9TdXJmYWNlSWQs
IEdDM0R1aW50IHBsYW5lKTsKLQotICAgIC8vIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKLSAgICB2
b2lkIHRleFN0b3JhZ2UyREVYVChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWxzLCBHQzNE
dWludCBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB3aWR0aCwgR0MzRGludCBoZWlnaHQpOwotCi0g
ICAgLy8gR0xfRVhUX29jY2x1c2lvbl9xdWVyeQotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRl
UXVlcnlFWFQoKTsKLSAgICB2b2lkIGRlbGV0ZVF1ZXJ5RVhUKFBsYXRmb3JtM0RPYmplY3QpOwot
ICAgIEdDM0Rib29sZWFuIGlzUXVlcnlFWFQoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBi
ZWdpblF1ZXJ5RVhUKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGVuZFF1
ZXJ5RVhUKEdDM0RlbnVtKTsKLSAgICB2b2lkIGdldFF1ZXJ5aXZFWFQoR0MzRGVudW0sIEdDM0Rl
bnVtLCBHQzNEaW50Kik7Ci0gICAgdm9pZCBnZXRRdWVyeU9iamVjdHVpdkVYVChQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEZW51bSwgR0MzRHVpbnQqKTsKLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoUGFzc093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiwg
Ym9vbCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIpOwotCi0gICAgT3duUHRyPFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0Q+IG1faW1wbDsKLSAgICBPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21pdW0+
IG1fZXh0ZW5zaW9uczsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRh
cHRlcj4gbV9jb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjsKLSAgICBPd25QdHI8R3JhcGhpY3NF
cnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI+IG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVy
OwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFj
a0FkYXB0ZXI+IG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKLSAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRl
cj4gbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjsKLSAgICBib29sIG1f
aW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Vu
YWJsZWRFeHRlbnNpb25zOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlcXVlc3RhYmxlRXh0ZW5z
aW9uczsKLSAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkOwotICAgIGJvb2wgbV9wcmVzZXJ2ZURy
YXdpbmdCdWZmZXI7Ci0KLSAgICBlbnVtIFJlc291cmNlU2FmZXR5IHsKLSAgICAgICAgUmVzb3Vy
Y2VTYWZldHlVbmtub3duLAotICAgICAgICBSZXNvdXJjZVNhZmUsCi0gICAgICAgIFJlc291cmNl
VW5zYWZlCi0gICAgfTsKLSAgICBSZXNvdXJjZVNhZmV0eSBtX3Jlc291cmNlU2FmZXR5OwotCi0j
aWYgVVNFKFNLSUEpCi0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIENhbnZh
cydzIGJhY2tpbmcgc3RvcmUgZG9uJ3QKLSAgICAvLyBtYXRjaCB0aG9zZSB0aGF0IHdlIHdlcmUg
Z2l2ZW4gaW4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8KLSAgICAvLyByZXNoYXBlKCksIHRoZW4g
d2UgbmVlZCBhbiBpbnRlcm1lZGlhdGUgYml0bWFwIHRvIHJlYWQgYmFjayB0aGUKLSAgICAvLyBm
cmFtZSBidWZmZXIgaW50by4gVGhpcyBzZWVtcyB0byBoYXBwZW4gd2hlbiBDU1Mgc3R5bGVzIGFy
ZQotICAgIC8vIHVzZWQgdG8gcmVzaXplIHRoZSBDYW52YXMuCi0gICAgU2tCaXRtYXAgbV9yZXNp
emluZ0JpdG1hcDsKLQotICAgIEdyQ29udGV4dCogbV9nckNvbnRleHQ7Ci0jZW5kaWYKLQotI2lm
IFVTRShDRykKLSAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBtX3JlbmRlck91dHB1dDsK
LSAgICBzaXplX3QgbV9yZW5kZXJPdXRwdXRTaXplOwotI2VuZGlmCi0KLSAgICB2b2lkIGluaXRp
YWxpemVFeHRlbnNpb25zKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146152</attachid>
            <date>2012-06-06 17:05:57 -0700</date>
            <delta_ts>2012-06-06 17:16:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86257-20120606170557.patch</filename>
            <type>text/plain</type>
            <size>117088</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWExZDg4NTU0NTQyNjc4
ZDZhYzA4M2I2M2ZmM2M3NTFkOTBlMjNhZS4uYjFlZjNhYmNhYjgxMjViNjcwZWFmZWQ2MTlhZjll
YTBjZWQ0NmM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAxMi0wNi0wNiAgSmFt
ZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
TW92ZSBpbXBsZW1lbnRhdGlvbiBvZiBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCBhbmQgcmVs
YXRlZCBmcm9tIFdlYktpdC9jaHJvbWl1bS9zcmMgdG8gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NjI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBXZWJDb3JlIHBsYXRmb3JtIGludGVyZmFjZXMgR3JhcGhpY3NDb250ZXh0M0QgYW5kIEV4
dGVuc2lvbnMzRENocm9taXVtIGFyZSBpbXBsZW1lbnRlZCBpbiBjaHJvbWl1bQorICAgICAgICBv
biB0b3Agb2YgdGhlIFBsYXRmb3JtIGludGVyZmFjZSBXZWJHcmFwaGljc0NvbnRleHQzRC4gVGhp
cyBtb3ZlcyB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydCBjb2RlIGZyb20KKyAgICAgICAgV2Vi
S2l0L2Nocm9taXVtL3NyYyB0byBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQsIHdo
aWNoIGF2b2lkcyBoYXZpbmcgY29kZSBpbiBXZWJLaXQvIGltcGxlbWVudGluZyBXZWJDb3JlCisg
ICAgICAgIGludGVyZmFjZXMgYW5kIGFsbG93cyBjb2RlIGluIFdlYkNvcmUvcGxhdGZvcm0gdG8g
dXNlIHRoaXMgc3VwcG9ydCBjb2RlIGRpcmVjdGx5IHdoZXJlIGFwcHJvcHJpYXRlLgorCisgICAg
ICAgIFJlZmFjdG9yIG9ubHksIG5vIG5ldyBmdW5jdGlvbmFsaXR5IG9yIHRlc3RzLgorCisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
RXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6RXh0ZW5zaW9uczNEQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06On5FeHRlbnNpb25z
M0RDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6c3Vw
cG9ydHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUVu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6
YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVt
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNEQ2hyb21pdW06OnBvc3RTdWJCdWZmZXJDSFJPTUlVTSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjp1bm1hcEJ1ZmZlclN1YkRhdGFD
SFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9t
aXVtOjp1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RDaHJvbWl1bTo6c2V0VmlzaWJpbGl0eUNIUk9NSVVNKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXJFWFQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUZyYW1lYnVmZmVyQ0hST01J
VU0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OnNldEdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjppc1ZlcnRleEFycmF5T0VTKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVydGV4QXJyYXlPRVMp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1
bTo6c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0pOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OnJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJP
TUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6cGFpbnRGcmFt
ZWJ1ZmZlclRvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVt
Ojp0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNEQ2hyb21pdW06OnRleFN0b3JhZ2UyREVYVCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlUXVlcnlFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVF1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRENocm9taXVtOjppc1F1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRENocm9taXVtOjpiZWdpblF1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRENocm9taXVtOjplbmRRdWVyeUVYVCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RDaHJvbWl1bTo6Z2V0UXVlcnlpdkVYVCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RDaHJvbWl1bTo6Z2V0UXVlcnlPYmplY3R1aXZFWFQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjppc1Jlc291cmNlU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3Vi
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAoR3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjazo6R3JNZW1vcnlBbGxv
Y2F0aW9uQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyTWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFjazo6b25HcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1hcmtDb250ZXh0Q2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmxheWVyQ29t
cG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1h
cmtMYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpwYWludEZyYW1lYnVmZmVyVG9DYW52YXMpOgorICAgICAgICAoR3JhcGhpY3NDb250
ZXh0M0RDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRENvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOjpHcmFwaGljc0NvbnRleHQz
RENvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI6On5HcmFwaGljc0NvbnRleHQzRENv
bnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI6Om9uQ29udGV4dExvc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0TG9zdENhbGxi
YWNrKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFw
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2Fs
bGJhY2tBZGFwdGVyOjpHcmFwaGljc0NvbnRleHQzREVycm9yTWVzc2FnZUNhbGxiYWNrQWRhcHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREVycm9yTWVzc2FnZUNhbGxi
YWNrQWRhcHRlcjo6fkdyYXBoaWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJh
Y2tBZGFwdGVyOjpvbkVycm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0RXh0ZW5zaW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmluaXRpYWxpemVFeHRlbnNpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3VwcG9ydHNFeHRl
bnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjplbnN1
cmVFeHRlbnNpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aXNFeHRlbnNpb25FbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6aXNSZXNvdXJjZVNhZmUpOgorICAgICAgICAoR3JhcGhpY3NDb250
ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tB
ZGFwdGVyOjpHcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tB
ZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6On5HcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6Om9uTWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpzZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0pOgor
ICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFw
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21w
bGV0ZUNhbGxiYWNrQWRhcHRlcjo6R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRl
Q2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEU3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjo6fkdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1
ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI6Om9uU3dhcEJ1ZmZl
cnNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjp3ZWJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6cHJlc2VydmVEcmF3aW5nQnVmZmVyKToKKwogMjAxMi0wNi0wNiAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdvcmtlciB0ZWFy
LWRvd24gY2FuIHJlLWVudGVyIEpTQyBkdXJpbmcgR0MgZmluYWxpemF0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDZhZjkzOGJhZGY0NzNjYTkwMWFhMDkxNGYzNDI4ZGU2YWUyNjU4
OTUuLmRiMGUwMWM4NGM0NDVmZGYxYTg5Yzk5OTVlN2E1ODEyN2IyOTIwNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQgQEAKIDIwMTItMDYtMDYgIEphbWVzIFJvYmlu
c29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIE1vdmUgaW1w
bGVtZW50YXRpb24gb2YgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QgYW5kIHJlbGF0ZWQgZnJv
bSBXZWJLaXQvY2hyb21pdW0vc3JjIHRvIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyNTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktp
dC5neXA6CisKKzIwMTItMDYtMDYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9y
Zz4KKwogICAgICAgICBbY2hyb21pdW1dIFVucmV2aWV3ZWQgYnVpbGQgZml4LCBhZGQgYW4gYXBw
YXJlbnRseSB1c2VkIGluY2x1ZGUgb2YgT3duQXJyYXlQdHIuaCBiYWNrIHRvIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04ODQ2OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYTg2MWEyZjZhZjBjM2FiYjY5OTE3
ZmNlN2RmMzIxYzUzMTY3YjdlNy4uNGE5Yzg1NzhmNDAwZDI4NzEwMWJhYWYxNjZiZTFkYTA0MDIx
ZmRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODMxOSw2ICs4MzE5LDEwIEBACiAgICAgICAgICAg
ICAnPChQUk9EVUNUX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YUGF0aEdyYW1tYXIuaCcs
CiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJjb3JlX3BsYXRmb3JtX3N1cHBvcnRfZmlsZXMnOiBb
CisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJv
bWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhp
Y3NDb250ZXh0M0RDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJBdWRpb0J1cy5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViRGF0YS5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUEJvZHkuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9u
czNEQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY0YTc3ZWZhNTAwNmY4NDc4
Mjg1YTgxMjdhYTZhOWMyMjQxMGQ2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCkBAIC0w
LDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRXh0
ZW5zaW9uczNEQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSA8cHVibGljL1dl
YkdyYXBoaWNzQ29udGV4dDNELmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9u
czNEQ2hyb21pdW06OkV4dGVuc2lvbnMzRENocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSogcHJpdikKKyAgICA6IG1fcHJpdmF0ZShwcml2KQoreworfQorCitFeHRlbnNpb25zM0RDaHJv
bWl1bTo6fkV4dGVuc2lvbnMzRENocm9taXVtKCkKK3sKK30KKworYm9vbCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX3By
aXZhdGUtPnN1cHBvcnRzRXh0ZW5zaW9uKG5hbWUpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENo
cm9taXVtOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29sIHJl
c3VsdCA9IG1fcHJpdmF0ZS0+ZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChuYW1lKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKK30KKworYm9vbCBFeHRlbnNpb25zM0RDaHJvbWl1
bTo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5pc0V4dGVuc2lvbkVuYWJsZWQobmFtZSk7Cit9CisKK2ludCBFeHRlbnNpb25zM0RDaHJvbWl1
bTo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4obV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIo
KSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmJsaXRGcmFtZWJ1ZmZlcihsb25n
IHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBs
b25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVu
c2lnbmVkIGxvbmcgZmlsdGVyKQoreworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5ibGl0
RnJhbWVidWZmZXJDSFJPTUlVTShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRz
dFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX3By
aXZhdGUtPndlYkNvbnRleHQoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQ0hST01J
VU0odGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnBvc3RTdWJCdWZmZXJDSFJPTUlVTShpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRl
eHQoKS0+cG9zdFN1YkJ1ZmZlckNIUk9NSVVNKHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2
b2lkKiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKHVuc2ln
bmVkIHRhcmdldCwgaW50IG9mZnNldCwgaW50IHNpemUsIHVuc2lnbmVkIGFjY2VzcykKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlV
TSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgYWNjZXNzKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6dW5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0oY29uc3Qgdm9pZCogZGF0YSkKK3sK
KyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+dW5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0o
ZGF0YSk7Cit9CisKK3ZvaWQqIEV4dGVuc2lvbnMzRENocm9taXVtOjptYXBUZXhTdWJJbWFnZTJE
Q0hST01JVU0odW5zaWduZWQgdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5
cGUsIHVuc2lnbmVkIGFjY2VzcykKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0
KCktPm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFjY2Vzcyk7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQq
IGRhdGEpCit7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPnVubWFwVGV4U3ViSW1hZ2Uy
RENIUk9NSVVNKGRhdGEpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpzZXRWaXNp
YmlsaXR5Q0hST01JVU0oYm9vbCB2aXNpYmlsaXR5KQoreworICAgIG1fcHJpdmF0ZS0+d2ViQ29u
dGV4dCgpLT5zZXRWaXNpYmlsaXR5Q0hST01JVU0odmlzaWJpbGl0eSk7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uczNEQ2hyb21pdW06OmRpc2NhcmRGcmFtZWJ1ZmZlckVYVChHQzNEZW51bSB0YXJnZXQs
IEdDM0RzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0MzRGVudW0qIGF0dGFjaG1lbnRzKQor
eworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5kaXNjYXJkRnJhbWVidWZmZXJFWFQodGFy
Z2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpOworfQorCit2b2lkIEV4dGVuc2lvbnMz
RENocm9taXVtOjplbnN1cmVGcmFtZWJ1ZmZlckNIUk9NSVVNKCkKK3sKKyAgICBtX3ByaXZhdGUt
PndlYkNvbnRleHQoKS0+ZW5zdXJlRnJhbWVidWZmZXJDSFJPTUlVTSgpOworfQorCit2b2lkIEV4
dGVuc2lvbnMzRENocm9taXVtOjpzZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNr
Q0hST01JVU0oUGFzc093blB0cjxHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hS
T01JVU0+IGNhbGxiYWNrKQoreworICAgIG1fcHJpdmF0ZS0+c2V0R3B1TWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKGNhbGxiYWNrKTsKK30KKworUGxhdGZvcm0zRE9iamVj
dCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQoreworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpkZWxldGVWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0KQoreworfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KQoreworICAgIHJldHVy
biAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCkKK3sKK30KKworU3RyaW5nIEV4dGVuc2lvbnMzRENocm9taXVtOjpn
ZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoc2hhZGVyKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6c2V0
U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxTd2FwQnVmZmVy
c0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4gY2FsbGJhY2spCit7CisgICAgbV9wcml2YXRlLT5z
ZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShjYWxsYmFjayk7Cit9CisKK3Zv
aWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlV
TSgpCit7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPnJhdGVMaW1pdE9mZnNjcmVlbkNv
bnRleHRDSFJPTUlVTSgpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpwYWludEZy
YW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQoreworICAg
IG1fcHJpdmF0ZS0+cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGZyYW1lYnVmZmVyLCB3aWR0aCwg
aGVpZ2h0LCBwcmVtdWx0aXBseUFscGhhLCBpbWFnZUJ1ZmZlcik7Cit9CisKK3ZvaWQgRXh0ZW5z
aW9uczNEQ2hyb21pdW06OnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJn
ZXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9TdXJmYWNlSWQsIHVuc2lnbmVk
IHBsYW5lKQoreworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT50ZXhJbWFnZUlPU3VyZmFj
ZTJEQ0hST01JVU0odGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBpb1N1cmZhY2VJZCwgcGxhbmUpOwor
fQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjp0ZXhTdG9yYWdlMkRFWFQodW5zaWduZWQg
aW50IHRhcmdldCwgaW50IGxldmVscywgdW5zaWduZWQgaW50IGludGVybmFsRm9ybWF0LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPnRleFN0
b3JhZ2UyREVYVCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworfQorCitQbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMzRENocm9taXVtOjpjcmVhdGVRdWVy
eUVYVCgpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5jcmVhdGVRdWVy
eUVYVCgpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpkZWxldGVRdWVyeUVYVChQ
bGF0Zm9ybTNET2JqZWN0IHF1ZXJ5KQoreworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5k
ZWxldGVRdWVyeUVYVChxdWVyeSk7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lvbnMzRENocm9t
aXVtOjppc1F1ZXJ5RVhUKFBsYXRmb3JtM0RPYmplY3QgcXVlcnkpCit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5pc1F1ZXJ5RVhUKHF1ZXJ5KTsKK30KKwordm9pZCBFeHRl
bnNpb25zM0RDaHJvbWl1bTo6YmVnaW5RdWVyeUVYVChHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QgcXVlcnkpCit7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmJlZ2luUXVl
cnlFWFQodGFyZ2V0LCBxdWVyeSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmVu
ZFF1ZXJ5RVhUKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQo
KS0+ZW5kUXVlcnlFWFQodGFyZ2V0KTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6
Z2V0UXVlcnlpdkVYVChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiBw
YXJhbXMpCit7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFF1ZXJ5aXZFWFQodGFy
Z2V0LCBwbmFtZSwgcGFyYW1zKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0
UXVlcnlPYmplY3R1aXZFWFQoUGxhdGZvcm0zRE9iamVjdCBxdWVyeSwgR0MzRGVudW0gcG5hbWUs
IEdDM0R1aW50KiBwYXJhbXMpCit7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFF1
ZXJ5T2JqZWN0dWl2RVhUKHF1ZXJ5LCBwbmFtZSwgcGFyYW1zKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDAyMGFjYzM4MWQ3MmNmYjE1MjM0OGE4NGFiODFhZTRmZjA4OTZhNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3Jh
cGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKQEAgLTAsMCArMSw1NzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiRHJh
d2luZ0J1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSA8
cHVibGljL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNE
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dDNEOjpH
cmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcywgSG9zdFdpbmRv
dyosIGJvb2wpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0Qo
KQoreworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhudWxscHRyKTsKKyAg
ICBtX3ByaXZhdGUtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKG51bGxwdHIpOworICAgIG1fcHJp
dmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7Cisg
ICAgbV9wcml2YXRlLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01J
VU0obnVsbHB0cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0
Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFj
az4gY2FsbGJhY2spCit7CisgICAgbV9wcml2YXRlLT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKGNh
bGxiYWNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2Fs
bGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
IGNhbGxiYWNrKQoreworICAgIG1fcHJpdmF0ZS0+c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soY2Fs
bGJhY2spOworfQorCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2lu
ZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQoreworICAg
IEFTU0VSVChyZW5kZXJTdHlsZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpOworCisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyB3ZWJBdHRyaWJ1dGVzOworICAgIHdlYkF0dHJpYnV0ZXMuYWxwaGEgPSBhdHRycy5hbHBo
YTsKKyAgICB3ZWJBdHRyaWJ1dGVzLmRlcHRoID0gYXR0cnMuZGVwdGg7CisgICAgd2ViQXR0cmli
dXRlcy5zdGVuY2lsID0gYXR0cnMuc3RlbmNpbDsKKyAgICB3ZWJBdHRyaWJ1dGVzLmFudGlhbGlh
cyA9IGF0dHJzLmFudGlhbGlhczsKKyAgICB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBo
YSA9IGF0dHJzLnByZW11bHRpcGxpZWRBbHBoYTsKKyAgICB3ZWJBdHRyaWJ1dGVzLm5vRXh0ZW5z
aW9ucyA9IGF0dHJzLm5vRXh0ZW5zaW9uczsKKyAgICB3ZWJBdHRyaWJ1dGVzLnNoYXJlUmVzb3Vy
Y2VzID0gYXR0cnMuc2hhcmVSZXNvdXJjZXM7CisgICAgd2ViQXR0cmlidXRlcy5wcmVmZXJEaXNj
cmV0ZUdQVSA9IGF0dHJzLnByZWZlckRpc2NyZXRlR1BVOworCisgICAgT3duUHRyPFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmNyZWF0ZU9mZnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEKHdlYkF0dHJp
YnV0ZXMpKTsKKyAgICBpZiAoIXdlYkNvbnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJv
bVdlYkNvbnRleHQod2ViQ29udGV4dC5yZWxlYXNlKCksIHJlbmRlclN0eWxlLCBhdHRycy5wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXIpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdyYXBo
aWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRQbGF0Zm9ybVRleHR1cmVJZCgpOworfQorCitHckNv
bnRleHQqIEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRleHQoKQoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmdyQ29udGV4dCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8vIE1hY3Jv
cyB0byBhc3Npc3QgaW4gZGVsZWdhdGluZyBmcm9tIEdyYXBoaWNzQ29udGV4dDNEIHRvCisvLyBX
ZWJHcmFwaGljc0NvbnRleHQzRC4KKworI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUKG5h
bWUpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUoKSBcCit7IFwKKyAgICBtX3ByaXZh
dGUtPndlYkNvbnRleHQoKS0+bmFtZSgpOyBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fV0VC
Q09OVEVYVF9SKG5hbWUsIHJ0KSAgICAgICAgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5h
bWUoKSBcCit7IFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoKTsg
XAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShuYW1lLCB0MSkgXAordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSkgXAoreyBcCisgICAgbV9wcml2YXRlLT53
ZWJDb250ZXh0KCktPm5hbWUoYTEpOyBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09O
VEVYVF8xUihuYW1lLCB0MSwgcnQpICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQx
IGExKSBcCit7IFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEp
OyBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKG5hbWUsIHQxLCB0Mikg
XAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKK3sgXAorICAg
IG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMik7IFwKK30KKworI2RlZmluZSBE
RUxFR0FURV9UT19XRUJDT05URVhUXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCitydCBHcmFwaGlj
c0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKK3sgXAorICAgIHJldHVybiBtX3ByaXZh
dGUtPndlYkNvbnRleHQoKS0+bmFtZShhMSwgYTIpOyBcCit9CisKKyNkZWZpbmUgREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF8zKG5hbWUsIHQxLCB0MiwgdDMpICAgXAordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCit7IFwKKyAgICBtX3ByaXZhdGUt
PndlYkNvbnRleHQoKS0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCit9CisK
KyNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zUihuYW1lLCB0MSwgdDIsIHQzLCBydCkg
ICBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBc
Cit7IFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBh
Myk7ICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRF
WFRfNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKK3sgXAorICAgIG1fcHJpdmF0ZS0+
d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKK30KKwor
I2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzRSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCBy
dCkgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywg
dDQgYTQpICBcCit7IFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUo
YTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX1dF
QkNPTlRFWFRfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAg
ICBcCit7IFwKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+bmFtZShhMSwgYTIsIGEzLCBh
NCwgYTUpOyAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzYobmFtZSwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAoreyBcCisgICAgbV9w
cml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgXAor
fQorCisjZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNlIobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCB0NiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIg
YTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCit7IFwKKyAgICByZXR1cm4gbV9wcml2
YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwK
K30KKworI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzcobmFtZSwgdDEsIHQyLCB0Mywg
dDQsIHQ1LCB0NiwgdDcpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKK3sgXAorICAgIG1fcHJp
dmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KTsgICBc
Cit9CisKKyNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF83UihuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGEx
LCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCit7IFwKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBh
NiwgYTcpOyAgIFwKK30KKworI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzgobmFtZSwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3
IGE3LCB0OCBhOCkgXAoreyBcCisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEs
IGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICBcCit9CisKKyNkZWZpbmUgREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF85KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwg
dDkpIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywg
dDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoreyBcCisgICAgbV9w
cml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4
LCBhOSk7ICAgXAorfQorCisjZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRfOVIobmFtZSwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKK3J0IEdyYXBoaWNzQ29u
dGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3
IGE3LCB0OCBhOCwgdDkgYTkpIFwKK3sgXAorICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRl
eHQoKS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCit9CisK
K0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfUihtYWtlQ29udGV4dEN1cnJlbnQsIGJvb2wpCitERUxF
R0FURV9UT19XRUJDT05URVhUKHByZXBhcmVUZXh0dXJlKQorCitib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT53
ZWJDb250ZXh0KCktPmlzR0xFUzJDb21wbGlhbnQoKTsKK30KKworCisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc1Jl
c291cmNlU2FmZSgpOworfQorCitERUxFR0FURV9UT19XRUJDT05URVhUXzEoYWN0aXZlVGV4dHVy
ZSwgR0MzRGVudW0pCitERUxFR0FURV9UT19XRUJDT05URVhUXzIoYXR0YWNoU2hhZGVyLCBQbGF0
Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgp
LT5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7
Cit9CisKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihiaW5kQnVmZmVyLCBHQzNEZW51bSwgUGxh
dGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihiaW5kRnJhbWVidWZmZXIs
IEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGJp
bmRSZW5kZXJidWZmZXIsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9f
V0VCQ09OVEVYVF8yKGJpbmRUZXh0dXJlLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKK0RF
TEVHQVRFX1RPX1dFQkNPTlRFWFRfNChibGVuZENvbG9yLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBm
LCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGJsZW5k
RXF1YXRpb24sIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGJsZW5kRXF1YXRp
b25TZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8y
KGJsZW5kRnVuYywgR0MzRGVudW0sIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80
KGJsZW5kRnVuY1NlcGFyYXRlLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51
bSkKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQs
IEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBidWZmZXJEYXRhKHRh
cmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCitERUxFR0FURV9UT19XRUJDT05URVhUXzQoYnVm
ZmVyRGF0YSwgR0MzRGVudW0sIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCosIEdDM0RlbnVtKQor
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KGJ1ZmZlclN1YkRhdGEsIEdDM0RlbnVtLCBHQzNEaW50
cHRyLCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqKQorCitERUxFR0FURV9UT19XRUJDT05URVhU
XzFSKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIEdDM0RlbnVtLCBHQzNEZW51bSkKK0RFTEVHQVRF
X1RPX1dFQkNPTlRFWFRfMShjbGVhciwgR0MzRGJpdGZpZWxkKQorREVMRUdBVEVfVE9fV0VCQ09O
VEVYVF80KGNsZWFyQ29sb3IsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYsIEdD
M0RjbGFtcGYpCitERUxFR0FURV9UT19XRUJDT05URVhUXzEoY2xlYXJEZXB0aCwgR0MzRGNsYW1w
ZikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShjbGVhclN0ZW5jaWwsIEdDM0RpbnQpCitERUxF
R0FURV9UT19XRUJDT05URVhUXzQoY29sb3JNYXNrLCBHQzNEYm9vbGVhbiwgR0MzRGJvb2xlYW4s
IEdDM0Rib29sZWFuLCBHQzNEYm9vbGVhbikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShjb21w
aWxlU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0KQorCitERUxFR0FURV9UT19XRUJDT05URVhUXzgo
Y29tcHJlc3NlZFRleEltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGlu
dCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIGNvbnN0IHZvaWQqKQorREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF85KGNvbXByZXNzZWRUZXhTdWJJbWFnZTJELCBHQzNEZW51bSwgR0MzRGlu
dCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RzaXpl
aSwgY29uc3Qgdm9pZCopCitERUxFR0FURV9UT19XRUJDT05URVhUXzgoY29weVRleEltYWdlMkQs
IEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVp
LCBHQzNEc2l6ZWksIEdDM0RpbnQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzgoY29weVRleFN1
YkltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBH
QzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShj
dWxsRmFjZSwgR0MzRGVudW0pCitERUxFR0FURV9UT19XRUJDT05URVhUXzEoZGVwdGhGdW5jLCBH
QzNEZW51bSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShkZXB0aE1hc2ssIEdDM0Rib29sZWFu
KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGRlcHRoUmFuZ2UsIEdDM0RjbGFtcGYsIEdDM0Rj
bGFtcGYpCitERUxFR0FURV9UT19XRUJDT05URVhUXzIoZGV0YWNoU2hhZGVyLCBQbGF0Zm9ybTNE
T2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGRpc2Fi
bGUsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGRpc2FibGVWZXJ0ZXhBdHRy
aWJBcnJheSwgR0MzRHVpbnQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzMoZHJhd0FycmF5cywg
R0MzRGVudW0sIEdDM0RpbnQsIEdDM0RzaXplaSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChk
cmF3RWxlbWVudHMsIEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEaW50cHRyKQor
CitERUxFR0FURV9UT19XRUJDT05URVhUXzEoZW5hYmxlLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RP
X1dFQkNPTlRFWFRfMShlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSwgR0MzRHVpbnQpCitERUxFR0FU
RV9UT19XRUJDT05URVhUKGZpbmlzaCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFQoZmx1c2gpCitE
RUxFR0FURV9UT19XRUJDT05URVhUXzQoZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19XRUJD
T05URVhUXzUoZnJhbWVidWZmZXJUZXh0dXJlMkQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVu
dW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzEo
ZnJvbnRGYWNlLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShnZW5lcmF0ZU1p
cG1hcCwgR0MzRGVudW0pCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQoreworICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8gd2Vi
SW5mbzsKKyAgICBpZiAoIW1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRBY3RpdmVBdHRyaWIo
cHJvZ3JhbSwgaW5kZXgsIHdlYkluZm8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW5m
by5uYW1lID0gd2ViSW5mby5uYW1lOworICAgIGluZm8udHlwZSA9IHdlYkluZm8udHlwZTsKKyAg
ICBpbmZvLnNpemUgPSB3ZWJJbmZvLnNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87CisgICAgaWYgKCFtX3ByaXZh
dGUtPndlYkNvbnRleHQoKS0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgd2ViSW5m
bykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbmZvLm5hbWUgPSB3ZWJJbmZvLm5hbWU7
CisgICAgaW5mby50eXBlID0gd2ViSW5mby50eXBlOworICAgIGluZm8uc2l6ZSA9IHdlYkluZm8u
c2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitERUxFR0FURV9UT19XRUJDT05URVhUXzQo
Z2V0QXR0YWNoZWRTaGFkZXJzLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEc2l6ZWksIEdDM0RzaXpl
aSosIFBsYXRmb3JtM0RPYmplY3QqKQorCitHQzNEaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0RFTEVHQVRFX1RPX1dFQkNP
TlRFWFRfMihnZXRCb29sZWFudiwgR0MzRGVudW0sIEdDM0Rib29sZWFuKikKK0RFTEVHQVRFX1RP
X1dFQkNPTlRFWFRfMyhnZXRCdWZmZXJQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEaW50KikKKworR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSBtX3ByaXZhdGUtPndlYkNvbnRleHQo
KS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyaWJ1dGVzOworICAgIGF0dHJpYnV0ZXMuYWxwaGEgPSB3ZWJBdHRyaWJ1dGVzLmFs
cGhhOworICAgIGF0dHJpYnV0ZXMuZGVwdGggPSB3ZWJBdHRyaWJ1dGVzLmRlcHRoOworICAgIGF0
dHJpYnV0ZXMuc3RlbmNpbCA9IHdlYkF0dHJpYnV0ZXMuc3RlbmNpbDsKKyAgICBhdHRyaWJ1dGVz
LmFudGlhbGlhcyA9IHdlYkF0dHJpYnV0ZXMuYW50aWFsaWFzOworICAgIGF0dHJpYnV0ZXMucHJl
bXVsdGlwbGllZEFscGhhID0gd2ViQXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGE7CisgICAg
YXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBtX3ByaXZhdGUtPnByZXNlcnZlRHJh
d2luZ0J1ZmZlcigpOworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB3ZWJBdHRy
aWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVOworICAgIHJldHVybiBhdHRyaWJ1dGVzOworfQorCitE
RUxFR0FURV9UT19XRUJDT05URVhUX1IoZ2V0RXJyb3IsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9f
V0VCQ09OVEVYVF8yKGdldEZsb2F0diwgR0MzRGVudW0sIEdDM0RmbG9hdCopCitERUxFR0FURV9U
T19XRUJDT05URVhUXzQoZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYsIEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF8yKGdldEludGVnZXJ2LCBHQzNEZW51bSwgR0MzRGludCopCitERUxFR0FURV9UT19XRUJDT05U
RVhUXzMoZ2V0UHJvZ3JhbWl2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCop
CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+
Z2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7Cit9CisKKworREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0Rp
bnQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKGdldFNoYWRlcml2LCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEZW51bSwgR0MzRGludCopCisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT53ZWJDb250ZXh0KCktPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKK30KKworCitE
RUxFR0FURV9UT19XRUJDT05URVhUXzQoZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0LCBHQzNEZW51
bSwgR0MzRGVudW0sIEdDM0RpbnQqLCBHQzNEaW50KikKKworU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKK30K
KworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFN0cmluZyhuYW1lKTsKK30K
KworCitERUxFR0FURV9UT19XRUJDT05URVhUXzMoZ2V0VGV4UGFyYW1ldGVyZnYsIEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyhnZXRUZXhQ
YXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKK0RFTEVHQVRFX1RPX1dF
QkNPTlRFWFRfMyhnZXRVbmlmb3JtZnYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0Rm
bG9hdCopCitERUxFR0FURV9UT19XRUJDT05URVhUXzMoZ2V0VW5pZm9ybWl2LCBQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEaW50LCBHQzNEaW50KikKKworR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+Z2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKKworREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF8zKGdldFZlcnRleEF0dHJpYmZ2LCBHQzNEdWludCwgR0MzRGVudW0sIEdD
M0RmbG9hdCopCitERUxFR0FURV9UT19XRUJDT05URVhUXzMoZ2V0VmVydGV4QXR0cmliaXYsIEdD
M0R1aW50LCBHQzNEZW51bSwgR0MzRGludCopCitERUxFR0FURV9UT19XRUJDT05URVhUXzJSKGdl
dFZlcnRleEF0dHJpYk9mZnNldCwgR0MzRHVpbnQsIEdDM0RlbnVtLCBHQzNEc2l6ZWlwdHIpCisK
K0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihoaW50LCBHQzNEZW51bSwgR0MzRGVudW0pCitERUxF
R0FURV9UT19XRUJDT05URVhUXzFSKGlzQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9v
bGVhbikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMVIoaXNFbmFibGVkLCBHQzNEZW51bSwgR0Mz
RGJvb2xlYW4pCitERUxFR0FURV9UT19XRUJDT05URVhUXzFSKGlzRnJhbWVidWZmZXIsIFBsYXRm
b3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xUihpc1By
b2dyYW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9fV0VCQ09O
VEVYVF8xUihpc1JlbmRlcmJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCitE
RUxFR0FURV9UT19XRUJDT05URVhUXzFSKGlzU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNE
Ym9vbGVhbikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMVIoaXNUZXh0dXJlLCBQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEYm9vbGVhbikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShsaW5lV2lkdGgs
IEdDM0RmbG9hdCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShsaW5rUHJvZ3JhbSwgUGxhdGZv
cm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihwaXhlbFN0b3JlaSwgR0MzRGVu
dW0sIEdDM0RpbnQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzIocG9seWdvbk9mZnNldCwgR0Mz
RGZsb2F0LCBHQzNEZmxvYXQpCisKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNyhyZWFkUGl4ZWxz
LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0Rl
bnVtLCB2b2lkKikKKworREVMRUdBVEVfVE9fV0VCQ09OVEVYVChyZWxlYXNlU2hhZGVyQ29tcGls
ZXIpCitERUxFR0FURV9UT19XRUJDT05URVhUXzQocmVuZGVyYnVmZmVyU3RvcmFnZSwgR0MzRGVu
dW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRF
WFRfMihzYW1wbGVDb3ZlcmFnZSwgR0MzRGNsYW1wZiwgR0MzRGJvb2xlYW4pCitERUxFR0FURV9U
T19XRUJDT05URVhUXzQoc2Npc3NvciwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNE
c2l6ZWkpCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgbV9wcml2YXRlLT53
ZWJDb250ZXh0KCktPnNoYWRlclNvdXJjZShzaGFkZXIsIHN0cmluZy51dGY4KCkuZGF0YSgpKTsK
K30KKworREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHN0ZW5jaWxGdW5jLCBHQzNEZW51bSwgR0Mz
RGludCwgR0MzRHVpbnQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzQoc3RlbmNpbEZ1bmNTZXBh
cmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEdWludCkKK0RFTEVHQVRFX1RP
X1dFQkNPTlRFWFRfMShzdGVuY2lsTWFzaywgR0MzRHVpbnQpCitERUxFR0FURV9UT19XRUJDT05U
RVhUXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0R1aW50KQorREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF8zKHN0ZW5jaWxPcCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSkK
K0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChzdGVuY2lsT3BTZXBhcmF0ZSwgR0MzRGVudW0sIEdD
M0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7
CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOworICAgIHJldHVybiB0cnVlOworfQorCitERUxFR0FURV9UT19XRUJDT05URVhUXzModGV4
UGFyYW1ldGVyZiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19X
RUJDT05URVhUXzModGV4UGFyYW1ldGVyaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPnRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworfQorCitERUxFR0FURV9UT19XRUJDT05URVhUXzIo
dW5pZm9ybTFmLCBHQzNEaW50LCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzMo
dW5pZm9ybTFmdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQorREVMRUdBVEVfVE9f
V0VCQ09OVEVYVF8yKHVuaWZvcm0xaSwgR0MzRGludCwgR0MzRGludCkKK0RFTEVHQVRFX1RPX1dF
QkNPTlRFWFRfMyh1bmlmb3JtMWl2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RpbnQqKQorREVM
RUdBVEVfVE9fV0VCQ09OVEVYVF8zKHVuaWZvcm0yZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNE
ZmxvYXQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzModW5pZm9ybTJmdiwgR0MzRGludCwgR0Mz
RHNpemVpLCBHQzNEZmxvYXQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHVuaWZvcm0yaSwg
R0MzRGludCwgR0MzRGludCwgR0MzRGludCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyh1bmlm
b3JtMml2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RpbnQqKQorREVMRUdBVEVfVE9fV0VCQ09O
VEVYVF80KHVuaWZvcm0zZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9h
dCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyh1bmlmb3JtM2Z2LCBHQzNEaW50LCBHQzNEc2l6
ZWksIEdDM0RmbG9hdCopCitERUxFR0FURV9UT19XRUJDT05URVhUXzQodW5pZm9ybTNpLCBHQzNE
aW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8z
KHVuaWZvcm0zaXYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGludCopCitERUxFR0FURV9UT19X
RUJDT05URVhUXzUodW5pZm9ybTRmLCBHQzNEaW50LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0Mz
RGZsb2F0LCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzModW5pZm9ybTRmdiwg
R0MzRGludCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF81
KHVuaWZvcm00aSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCkK
K0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyh1bmlmb3JtNGl2LCBHQzNEaW50LCBHQzNEc2l6ZWks
IEdDM0RpbnQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KHVuaWZvcm1NYXRyaXgyZnYsIEdD
M0RpbnQsIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCitERUxFR0FURV9UT19X
RUJDT05URVhUXzQodW5pZm9ybU1hdHJpeDNmdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEYm9v
bGVhbiwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNCh1bmlmb3JtTWF0cml4
NGZ2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuLCBHQzNEZmxvYXQqKQorCitERUxF
R0FURV9UT19XRUJDT05URVhUXzEodXNlUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVH
QVRFX1RPX1dFQkNPTlRFWFRfMSh2YWxpZGF0ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCisK
K0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMih2ZXJ0ZXhBdHRyaWIxZiwgR0MzRHVpbnQsIEdDM0Rm
bG9hdCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMih2ZXJ0ZXhBdHRyaWIxZnYsIEdDM0R1aW50
LCBHQzNEZmxvYXQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHZlcnRleEF0dHJpYjJmLCBH
QzNEdWludCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzIo
dmVydGV4QXR0cmliMmZ2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX1dFQkNP
TlRFWFRfNCh2ZXJ0ZXhBdHRyaWIzZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBH
QzNEZmxvYXQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzIodmVydGV4QXR0cmliM2Z2LCBHQzNE
dWludCwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNSh2ZXJ0ZXhBdHRyaWI0
ZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkK
K0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMih2ZXJ0ZXhBdHRyaWI0ZnYsIEdDM0R1aW50LCBHQzNE
ZmxvYXQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF82KHZlcnRleEF0dHJpYlBvaW50ZXIsIEdD
M0R1aW50LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGJvb2xlYW4sIEdDM0RzaXplaSwgR0MzRGlu
dHB0cikKKworREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KHZpZXdwb3J0LCBHQzNEaW50LCBHQzNE
aW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaWYgKHdpZHRoID09IG1fcHJpdmF0
ZS0+d2ViQ29udGV4dCgpLT53aWR0aCgpICYmIGhlaWdodCA9PSBtX3ByaXZhdGUtPndlYkNvbnRl
eHQoKS0+aGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJpdmF0ZS0+d2ViQ29u
dGV4dCgpLT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIG1fcHJpdmF0ZS0+bWFya0NvbnRleHRD
aGFuZ2VkKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGF5ZXJDb21wb3NpdGVkKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1f
cHJpdmF0ZS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCituYW1lc3BhY2UgeworCit2b2lk
IGdldERyYXdpbmdQYXJhbWV0ZXJzKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNELAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBQbGF0Zm9ybTNET2JqZWN0KiBmcmFtZUJ1ZmZlcklkLCBpbnQqIHdpZHRo
LCBpbnQqIGhlaWdodCkKK3sKKyAgICBpZiAoZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAqZnJh
bWVCdWZmZXJJZCA9IGRyYXdpbmdCdWZmZXItPmZyYW1lYnVmZmVyKCk7CisgICAgICAgICp3aWR0
aCA9IGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOworICAgICAgICAqaGVpZ2h0ID0gZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworICAgIH0gZWxzZSB7CisgICAgICAgICpmcmFt
ZUJ1ZmZlcklkID0gMDsKKyAgICAgICAgKndpZHRoID0gZ3JhcGhpY3NDb250ZXh0M0QtPndpZHRo
KCk7CisgICAgICAgICpoZWlnaHQgPSBncmFwaGljc0NvbnRleHQzRC0+aGVpZ2h0KCk7CisgICAg
fQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQoreworICAgIFBsYXRmb3JtM0RPYmplY3Qg
ZnJhbWVidWZmZXJJZDsKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBnZXREcmF3aW5nUGFy
YW1ldGVycyhkcmF3aW5nQnVmZmVyLCBtX3ByaXZhdGUtPndlYkNvbnRleHQoKSwgJmZyYW1lYnVm
ZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgbV9wcml2YXRlLT5wYWludEZyYW1lYnVmZmVy
VG9DYW52YXMoZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCwgIWdldENvbnRleHRBdHRyaWJ1
dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7Cit9CisKK1Bhc3NSZWZQdHI8
SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFn
ZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKK3sKKyAgICBpZiAoZ2V0Q29udGV4
dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0
OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1fcHJpdmF0ZS0+d2Vi
Q29udGV4dCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKKworICAgIFJlZlB0
cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUod2lkdGgs
IGhlaWdodCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgp
LT5kYXRhKCk7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogd2lkdGggKiBoZWlnaHQ7CisK
KyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMs
IGJ1ZmZlclNpemUsIGZyYW1lYnVmZmVySWQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBidWZmZXJTaXplOyBpICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChw
aXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNl
KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNU
b0NhbnZhcyhJbWFnZUJ1ZmZlciopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitERUxFR0FU
RV9UT19XRUJDT05URVhUX1IoY3JlYXRlQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF9SKGNyZWF0ZUZyYW1lYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQor
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF9SKGNyZWF0ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qp
CitERUxFR0FURV9UT19XRUJDT05URVhUX1IoY3JlYXRlUmVuZGVyYnVmZmVyLCBQbGF0Zm9ybTNE
T2JqZWN0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xUihjcmVhdGVTaGFkZXIsIEdDM0RlbnVt
LCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF9SKGNyZWF0ZVRleHR1
cmUsIFBsYXRmb3JtM0RPYmplY3QpCisKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShkZWxldGVC
dWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19XRUJDT05URVhUXzEoZGVsZXRl
RnJhbWVidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19XRUJDT05URVhUXzEo
ZGVsZXRlUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
MShkZWxldGVSZW5kZXJidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19XRUJD
T05URVhUXzEoZGVsZXRlU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fV0VC
Q09OVEVYVF8xKGRlbGV0ZVRleHR1cmUsIFBsYXRmb3JtM0RPYmplY3QpCisKK0RFTEVHQVRFX1RP
X1dFQkNPTlRFWFRfMShzeW50aGVzaXplR0xFcnJvciwgR0MzRGVudW0pCisKK0V4dGVuc2lvbnMz
RCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmdldEV4dGVuc2lvbnMoKTsKK30KKworCitJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNp
emUobV9wcml2YXRlLT53ZWJDb250ZXh0KCktPndpZHRoKCksIG1fcHJpdmF0ZS0+d2ViQ29udGV4
dCgpLT5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MWM3NzM0M2VjYTdlNDU3
N2ZjZDhkNTlkNTc2NmJlOWQ4ZGNjZjlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3Bw
CkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisjaW5j
bHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNp
bmNsdWRlICJHckdMSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlIDxwdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2Ug
eworCisvLyBUaGUgbGltaXQgb2YgdGhlIG51bWJlciBvZiB0ZXh0dXJlcyB3ZSBob2xkIGluIHRo
ZSBHckNvbnRleHQncyBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCitjb25zdCBpbnQgbWF4R2FuZXNo
VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7CisvLyBUaGUgbGltaXQgb2YgdGhlIGJ5dGVzIGFsbG9j
YXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIEdyQ29udGV4dCdzIGJpdG1hcC0+dGV4dHVyZSBj
YWNoZS4KK2NvbnN0IHNpemVfdCBtYXhHYW5lc2hUZXh0dXJlQ2FjaGVCeXRlcyA9IDk2ICogMTAy
NCAqIDEwMjQ7CisKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQorCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShQYXNzT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0Q+IHdlYkNvbnRleHQsIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKQorICAgIDog
bV9pbXBsKHdlYkNvbnRleHQpCisgICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9u
cyhmYWxzZSkKKyAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQorICAgICwgbV9wcmVzZXJ2
ZURyYXdpbmdCdWZmZXIocHJlc2VydmVEcmF3aW5nQnVmZmVyKQorICAgICwgbV9yZXNvdXJjZVNh
ZmV0eShSZXNvdXJjZVNhZmV0eVVua25vd24pCisgICAgLCBtX2dyQ29udGV4dCgwKQoreworfQor
CitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKQor
eworICAgIGlmIChtX2dyQ29udGV4dCkgeworICAgICAgICBtX2dyQ29udGV4dC0+Y29udGV4dERl
c3Ryb3llZCgpOworICAgICAgICBHclNhZmVVbnJlZihtX2dyQ29udGV4dCk7CisgICAgfQorfQor
CitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KFBhc3NPd25QdHI8V2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlIHJlbmRlclN0eWxlLCBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikKK3sKKyAgICBi
b29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93ID0gcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93OworCisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCksIDAsIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KSk7CisKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBwcml2ID0gYWRv
cHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh3ZWJDb250ZXh0LCBwcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpKTsKKyAgICBjb250ZXh0LT5tX3ByaXZhdGUgPSBwcml2LnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7Cit9CisKK1dlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0QqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29u
dGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQoreworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZS0+d2ViQ29u
dGV4dCgpOworfQorCitjbGFzcyBHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2sgOiBw
dWJsaWMgRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tDSFJPTUlVTSB7CitwdWJsaWM6CisgICAgR3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrKEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogY29udGV4dCkKKyAgICAgICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIG9uR3B1TWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWQoRXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9j
YXRpb25DSFJPTUlVTSBhbGxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgR3JDb250ZXh0KiBjb250
ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghYWxsb2NhdGlvbi5ncHVSZXNvdXJjZVNp
emVJbkJ5dGVzKSB7CisgICAgICAgICAgICBjb250ZXh0LT5mcmVlR3B1UmVzb3VyY2VzKCk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMoMCwgMCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heEdh
bmVzaFRleHR1cmVDYWNoZUNvdW50LCBtYXhHYW5lc2hUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogbV9jb250ZXh0Owor
fTsKKworR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyQ29udGV4dCgpCit7
CisgICAgaWYgKCFtX2dyQ29udGV4dCkgeworICAgICAgICBTa0F1dG9UVW5yZWY8R3JHTEludGVy
ZmFjZT4gaW50ZXJmYWNlKG1faW1wbC0+Y3JlYXRlR3JHTEludGVyZmFjZSgpKTsKKyAgICAgICAg
bV9nckNvbnRleHQgPSBHckNvbnRleHQ6OkNyZWF0ZShrT3BlbkdMX1NoYWRlcnNfR3JFbmdpbmUs
IHJlaW50ZXJwcmV0X2Nhc3Q8R3JQbGF0Zm9ybTNEQ29udGV4dD4oaW50ZXJmYWNlLmdldCgpKSk7
CisgICAgICAgIGlmIChtX2dyQ29udGV4dCkgeworICAgICAgICAgICAgbV9nckNvbnRleHQtPnNl
dFRleHR1cmVDYWNoZUxpbWl0cyhtYXhHYW5lc2hUZXh0dXJlQ2FjaGVDb3VudCwgbWF4R2FuZXNo
VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4
dGVuc2lvbnMzRENocm9taXVtID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihn
ZXRFeHRlbnNpb25zKCkpOworICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnMzRENocm9taXVtLT5z
dXBwb3J0cygiR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyIikpCisgICAgICAgICAgICAg
ICAgZXh0ZW5zaW9uczNEQ2hyb21pdW0tPnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tDSFJPTUlVTShhZG9wdFB0cihuZXcgR3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxi
YWNrKHRoaXMpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1fZ3JDb250ZXh0Owor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFya0NvbnRleHRDaGFuZ2VkKCkK
K3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
YXllckNvbXBvc2l0ZWQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJr
TGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludEZyYW1lYnVmZmVyVG9DYW52YXMo
aW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQoreworICAgIHVuc2lnbmVkIGNoYXIqIHBp
eGVscyA9IDA7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogd2lkdGggKiBoZWlnaHQ7CisK
KyAgICBjb25zdCBTa0JpdG1hcCogY2FudmFzQml0bWFwID0gaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpOworICAgIGNvbnN0IFNrQml0bWFwKiByZWFk
YmFja0JpdG1hcCA9IDA7CisgICAgQVNTRVJUKGNhbnZhc0JpdG1hcC0+Y29uZmlnKCkgPT0gU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKKyAgICBpZiAoY2FudmFzQml0bWFwLT53aWR0aCgp
ID09IHdpZHRoICYmIGNhbnZhc0JpdG1hcC0+aGVpZ2h0KCkgPT0gaGVpZ2h0KSB7CisgICAgICAg
IC8vIFRoaXMgaXMgdGhlIGZhc3Rlc3QgYW5kIG1vc3QgY29tbW9uIGNhc2UuIFdlIHJlYWQgYmFj
aworICAgICAgICAvLyBkaXJlY3RseSBpbnRvIHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgor
ICAgICAgICByZWFkYmFja0JpdG1hcCA9IGNhbnZhc0JpdG1hcDsKKyAgICAgICAgbV9yZXNpemlu
Z0JpdG1hcC5yZXNldCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gYWxs
b2NhdGUgYSB0ZW1wb3JhcnkgYml0bWFwIGZvciByZWFkaW5nIGJhY2sgdGhlCisgICAgICAgIC8v
IHBpeGVsIGRhdGEuIFdlIHdpbGwgdGhlbiB1c2UgU2tpYSB0byByZXNjYWxlIHRoaXMgYml0bWFw
IHRvCisgICAgICAgIC8vIHRoZSBzaXplIG9mIHRoZSBjYW52YXMncyBiYWNraW5nIHN0b3JlLgor
ICAgICAgICBpZiAobV9yZXNpemluZ0JpdG1hcC53aWR0aCgpICE9IHdpZHRoIHx8IG1fcmVzaXpp
bmdCaXRtYXAuaGVpZ2h0KCkgIT0gaGVpZ2h0KSB7CisgICAgICAgICAgICBtX3Jlc2l6aW5nQml0
bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlaWdodCk7CisgICAgICAgICAgICBpZiAoIW1fcmVzaXppbmdCaXRt
YXAuYWxsb2NQaXhlbHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgcmVhZGJhY2tCaXRtYXAgPSAmbV9yZXNpemluZ0JpdG1hcDsKKyAgICB9CisKKyAgICAv
LyBSZWFkIGJhY2sgdGhlIGZyYW1lIGJ1ZmZlci4KKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1h
cExvY2soKnJlYWRiYWNrQml0bWFwKTsKKyAgICBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ocmVhZGJhY2tCaXRtYXAtPmdldFBpeGVscygpKTsKKworICAgIG1faW1wbC0+cmVh
ZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIDQgKiB3aWR0aCAqIGhlaWdodCwgZnJhbWVidWZmZXIs
IHdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpIHsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBidWZmZXJTaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAg
IHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSAr
IDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBp
eGVsc1tpICsgMV0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tp
ICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlYWRiYWNrQml0bWFwLT5ub3RpZnlQaXhlbHND
aGFuZ2VkKCk7CisgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAucmVhZHlUb0RyYXcoKSkgeworICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJpdG1hcCBpbnRvIHRoZSBjYW52
YXMncyBiYWNraW5nIHN0b3JlLgorICAgICAgICBTa0NhbnZhcyBjYW52YXMoKmNhbnZhc0JpdG1h
cCk7CisgICAgICAgIFNrUmVjdCBkc3Q7CisgICAgICAgIGRzdC5zZXQoU2tJbnRUb1NjYWxhcigw
KSwgU2tJbnRUb1NjYWxhcigwKSwgU2tJbnRUb1NjYWxhcihjYW52YXNCaXRtYXAtPndpZHRoKCkp
LCBTa0ludFRvU2NhbGFyKGNhbnZhc0JpdG1hcC0+aGVpZ2h0KCkpKTsKKyAgICAgICAgY2FudmFz
LmRyYXdCaXRtYXBSZWN0KG1fcmVzaXppbmdCaXRtYXAsIDAsIGRzdCk7CisgICAgfQorfQorCitj
bGFzcyBHcmFwaGljc0NvbnRleHQzRENvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyIDogcHVibGlj
IFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzQ29udGV4dExvc3RDYWxs
YmFjayB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0M0RDb250ZXh0TG9zdENhbGxiYWNr
QWRhcHRlcihQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNr
PiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NvbnRleHRMb3N0Q2FsbGJhY2soY2FsbGJhY2spIHsg
fQorICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dDNEQ29udGV4dExvc3RDYWxsYmFja0FkYXB0
ZXIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2NvbnRleHRMb3N0Q2FsbGJhY2spCisgICAgICAgICAgICBtX2NvbnRleHRMb3N0
Q2FsbGJhY2stPm9uQ29udGV4dExvc3QoKTsKKyAgICB9Citwcml2YXRlOgorICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gbV9jb250ZXh0TG9zdENhbGxi
YWNrOworfTsKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldENvbnRleHRMb3N0
Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFj
az4gY2FsbGJhY2spCit7CisgICAgbV9jb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlciA9IGFkb3B0
UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRENvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyKGNhbGxi
YWNrKSk7CisgICAgbV9pbXBsLT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKG1fY29udGV4dExvc3RD
YWxsYmFja0FkYXB0ZXIuZ2V0KCkpOworfQorCitjbGFzcyBHcmFwaGljc0NvbnRleHQzREVycm9y
TWVzc2FnZUNhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEOjpXZWJHcmFwaGljc0Vycm9yTWVzc2FnZUNhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICBHcmFw
aGljc0NvbnRleHQzREVycm9yTWVzc2FnZUNhbGxiYWNrQWRhcHRlcihQYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjaz4gY2FsbGJhY2spCisgICAgICAgIDog
bV9lcnJvck1lc3NhZ2VDYWxsYmFjayhjYWxsYmFjaykgeyB9CisgICAgdmlydHVhbCB+R3JhcGhp
Y3NDb250ZXh0M0RFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIoKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2FnZSwg
V2ViS2l0OjpXR0MzRGludCBpZCkKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yTWVzc2FnZUNh
bGxiYWNrKQorICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2VDYWxsYmFjay0+b25FcnJvck1lc3Nh
Z2UobWVzc2FnZSwgaWQpOworICAgIH0KK3ByaXZhdGU6CisgICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjaz4gbV9lcnJvck1lc3NhZ2VDYWxsYmFjazsKK307
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFj
ayhQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjaz4gY2Fs
bGJhY2spCit7CisgICAgbV9lcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIgPSBhZG9wdFB0cihu
ZXcgR3JhcGhpY3NDb250ZXh0M0RFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIoY2FsbGJhY2sp
KTsKKyAgICBtX2ltcGwtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKG1fZXJyb3JNZXNzYWdlQ2Fs
bGJhY2tBZGFwdGVyLmdldCgpKTsKK30KKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorICAg
ICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNEQ2hyb21pdW0odGhp
cykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK25hbWVzcGFjZSB7CisK
K3ZvaWQgc3BsaXRTdHJpbmdIZWxwZXIoY29uc3QgU3RyaW5nJiBzdHIsIEhhc2hTZXQ8U3RyaW5n
PiYgc2V0KQoreworICAgIFZlY3RvcjxTdHJpbmc+IHN1YnN0cmluZ3M7CisgICAgc3RyLnNwbGl0
KCIgIiwgc3Vic3RyaW5ncyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJzdHJpbmdz
LnNpemUoKTsgKytpKQorICAgICAgICBzZXQuYWRkKHN1YnN0cmluZ3NbaV0pOworfQorCitTdHJp
bmcgbWFwRXh0ZW5zaW9uTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUg
PT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiCisgICAgICAgIHx8IG5hbWUgPT0gIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKKyAgICAgICAgcmV0dXJuICJHTF9DSFJPTUlV
TV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSI7CisgICAgcmV0dXJuIG5hbWU7Cit9CisKK30gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5p
dGlhbGl6ZUV4dGVuc2lvbnMoKQoreworICAgIGlmIChtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0
ZW5zaW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4
dGVuc2lvbnMgPSB0cnVlOworICAgIGJvb2wgc3VjY2VzcyA9IG1faW1wbC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBtX2ltcGwtPmdldFN0
cmluZyhHcmFwaGljc0NvbnRleHQzRDo6RVhURU5TSU9OUyk7CisgICAgc3BsaXRTdHJpbmdIZWxw
ZXIoZXh0ZW5zaW9uc1N0cmluZywgbV9lbmFibGVkRXh0ZW5zaW9ucyk7CisKKyAgICBTdHJpbmcg
cmVxdWVzdGFibGVFeHRlbnNpb25zU3RyaW5nID0gbV9pbXBsLT5nZXRSZXF1ZXN0YWJsZUV4dGVu
c2lvbnNDSFJPTUlVTSgpOworICAgIHNwbGl0U3RyaW5nSGVscGVyKHJlcXVlc3RhYmxlRXh0ZW5z
aW9uc1N0cmluZywgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMpOworfQorCisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9
IG1hcEV4dGVuc2lvbk5hbWUobmFtZSk7CisgICAgcmV0dXJuIG1fZW5hYmxlZEV4dGVuc2lvbnMu
Y29udGFpbnMobWFwcGVkTmFtZSkgfHwgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMo
bWFwcGVkTmFtZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjplbnN1cmVF
eHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpbml0aWFsaXplRXh0
ZW5zaW9ucygpOworCisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBFeHRlbnNpb25OYW1lKG5h
bWUpOworICAgIGlmIChtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5j
b250YWlucyhtYXBwZWROYW1lKSkgeworICAgICAgICBtX2ltcGwtPnJlcXVlc3RFeHRlbnNpb25D
SFJPTUlVTShtYXBwZWROYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgbV9lbmFibGVkRXh0
ZW5zaW9ucy5jbGVhcigpOworICAgICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jbGVhcigp
OworICAgICAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IGZhbHNlOworICAg
IH0KKworICAgIGluaXRpYWxpemVFeHRlbnNpb25zKCk7CisgICAgcmV0dXJuIG1fZW5hYmxlZEV4
dGVuc2lvbnMuY29udGFpbnMobWFwcGVkTmFtZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjppc0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGluaXRpYWxpemVFeHRlbnNpb25zKCk7CisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBFeHRl
bnNpb25OYW1lKG5hbWUpOworICAgIHJldHVybiBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5z
KG1hcHBlZE5hbWUpOworfQorCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjppc1Jl
c291cmNlU2FmZSgpCit7CisgICAgaWYgKG1fcmVzb3VyY2VTYWZldHkgPT0gUmVzb3VyY2VTYWZl
dHlVbmtub3duKQorICAgICAgICBtX3Jlc291cmNlU2FmZXR5ID0gZ2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKSA/IFJlc291cmNlU2FmZSA6IFJl
c291cmNlVW5zYWZlOworICAgIHJldHVybiBtX3Jlc291cmNlU2FmZXR5ID09IFJlc291cmNlU2Fm
ZTsKK30KKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQWRhcHRlciA6IHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJH
cmFwaGljc01lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSB7CitwdWJsaWM6
CisgICAgR3JhcGhpY3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRh
cHRlcihQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQ0hST01JVU0+IGNhbGxiYWNrKQorICAgICAgICA6IG1fbWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWRDYWxsYmFjayhjYWxsYmFjaykgeyB9CisKKyAgICB2aXJ0dWFsIH5HcmFw
aGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKCkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgb25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChzaXplX3QgZ3B1
UmVzb3VyY2VTaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBvbmNlIGNsaWVudHMgc3RhcnQgdXNpbmcgV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIGV4
Y2x1c2l2ZWx5LgorICAgICAgICBvbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKFdlYktpdDo6V2Vi
R3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uKGdwdVJlc291cmNlU2l6ZUluQnl0ZXMsIHRydWUpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChXZWJL
aXQ6OldlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBhbGxvY2F0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fbWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjaykKKyAgICAgICAgICAgIG1f
bWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjay0+b25HcHVNZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZChFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNIUk9NSVVNKGFs
bG9jYXRpb24uZ3B1UmVzb3VyY2VTaXplSW5CeXRlcywgYWxsb2NhdGlvbi5zdWdnZXN0SGF2ZUJh
Y2tidWZmZXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRENo
cm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0+IG1fbWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjazsKK307CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjpzZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0o
UGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5n
ZWRDYWxsYmFja0NIUk9NSVVNPiBjYWxsYmFjaykKK3sKKyAgICBtX21lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkQ2FsbGJhY2tBZGFwdGVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNETWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIoY2FsbGJhY2spKTsKKyAgICBtX2lt
cGwtPnNldE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTShtX21lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyLmdldCgpKTsKK30KKworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyIDogcHVibGljIFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzU3dhcEJ1ZmZlcnNDb21wbGV0
ZUNhbGxiYWNrQ0hST01JVU0geworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1
ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcihQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9t
aXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4gY2FsbGJhY2spCisgICAg
ICAgIDogbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2soY2FsbGJhY2spIHsgfQorICAgIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRl
cigpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpCisgICAg
eworICAgICAgICBpZiAobV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2spCisgICAgICAgICAg
ICBtX3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFjay0+b25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIE93blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6U3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0+IG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNh
bGxiYWNrOworfTsKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldFN3YXBCdWZm
ZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKFBhc3NPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21p
dW06OlN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNPiBjYWxsYmFjaykKK3sKKyAg
ICBtX3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIgPSBhZG9wdFB0cihuZXcgR3Jh
cGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyKGNhbGxiYWNr
KSk7CisgICAgbV9pbXBsLT5zZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTSht
X3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIuZ2V0KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40MmZhNzA5MmY2ZTc2MTMyYjMyNmM3M2JiYjY4Mzk0ODZiMjU0ZDM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorCitjbGFzcyBHckNvbnRleHQ7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
V2ViR3JhcGhpY3NDb250ZXh0M0Q7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RHJhd2luZ0J1ZmZlcjsKK2NsYXNzIEV4dGVuc2lvbnMzRENocm9taXVtOworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0RDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjsKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyOworY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKKworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlIHsKK3B1YmxpYzoKKyAgICAvLyBDYWxsZXJzIG11c3QgbWFr
ZSB0aGUgY29udGV4dCBjdXJyZW50IGJlZm9yZSB1c2luZyBpdCBBTkQgY2hlY2sgdGhhdCB0aGUg
Y29udGV4dCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKKyAgICAvLyB2aWEgQ29udGV4dExvc3Qg
YmVmb3JlIHVzaW5nIHRoZSBjb250ZXh0IGluIGFueSB3YXkuIE9uY2UgbWFkZSBjdXJyZW50IG9u
IGEgdGhyZWFkLCB0aGUgY29udGV4dCBjYW5ub3QKKyAgICAvLyBiZSB1c2VkIG9uIGFueSBvdGhl
ciB0aHJlYWQuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0
ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KFBhc3NPd25QdHI8V2ViS2l0OjpXZWJHcmFw
aGljc0NvbnRleHQzRD4sIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSwgYm9vbCBwcmVz
ZXJ2ZURyYXdpbmdCdWZmZXIgPSBmYWxzZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
cHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGxvd2VyLWxldmVsIFdlYkdyYXBoaWNzQ29udGV4dDNELAor
ICAgIC8vIHdoaWNoIGlzIG5lZWRlZCBmb3Igc3Vib3JkaW5hdGUgY29udGV4dHMgbGlrZSBXZWJH
TCdzIHRvIHNoYXJlIHJlc291cmNlcworICAgIC8vIHdpdGggdGhlIGNvbXBvc2l0b3IncyBjb250
ZXh0LgorICAgIHN0YXRpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBleHRyYWN0V2Vi
R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgfkdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOworCisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRCogd2ViQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQorCisgICAg
R3JDb250ZXh0KiBnckNvbnRleHQoKTsKKworICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7
CisgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKKyAgICB2b2lkIG1hcmtMYXllckNv
bXBvc2l0ZWQoKTsKKworICAgIHZvaWQgcGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFt
ZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIElt
YWdlQnVmZmVyKik7CisKKyAgICB2b2lkIHNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4pOworICAgIHZvaWQgc2V0
RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JN
ZXNzYWdlQ2FsbGJhY2s+KTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBzdXBwb3J0LgorICAgIEV4
dGVuc2lvbnMzRCogZ2V0RXh0ZW5zaW9ucygpOworICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBib29sIGVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoY29u
c3QgU3RyaW5nJiBuYW1lKTsKKyAgICBib29sIGlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJp
bmcmIG5hbWUpOworCisgICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpOworCisgICAgLy8gR0xfQ0hS
T01JVU1fZ3B1X21lbW9yeV9tYW5hZ2VyCisgICAgdm9pZCBzZXRHcHVNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPik7CisKKyAgICAvLyBH
TF9DSFJPTUlVTV9zd2FwYnVmZmVyc19jb21wbGV0ZV9jYWxsYmFjaworICAgIHZvaWQgc2V0U3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxFeHRlbnNpb25zM0RD
aHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0+KTsKKworICAgIGJv
b2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2ZURyYXdp
bmdCdWZmZXI7IH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoUGFz
c093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiwgYm9vbCBwcmVzZXJ2ZURyYXdp
bmdCdWZmZXIpOworCisgICAgdm9pZCBpbml0aWFsaXplRXh0ZW5zaW9ucygpOworCisgICAgT3du
UHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1faW1wbDsKKyAgICBPd25QdHI8RXh0
ZW5zaW9uczNEQ2hyb21pdW0+IG1fZXh0ZW5zaW9uczsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250
ZXh0M0RDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcj4gbV9jb250ZXh0TG9zdENhbGxiYWNrQWRh
cHRlcjsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RFcnJvck1lc3NhZ2VDYWxsYmFja0Fk
YXB0ZXI+IG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyOworICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyPiBtX21lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOworICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI+IG1fc3dhcEJ1ZmZlcnND
b21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKKyAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVF
eHRlbnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOworICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9uczsKKyAgICBib29sIG1fbGF5
ZXJDb21wb3NpdGVkOworICAgIGJvb2wgbV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7CisKKyAgICBl
bnVtIFJlc291cmNlU2FmZXR5IHsKKyAgICAgICAgUmVzb3VyY2VTYWZldHlVbmtub3duLAorICAg
ICAgICBSZXNvdXJjZVNhZmUsCisgICAgICAgIFJlc291cmNlVW5zYWZlCisgICAgfTsKKyAgICBS
ZXNvdXJjZVNhZmV0eSBtX3Jlc291cmNlU2FmZXR5OworCisgICAgLy8gSWYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgb2YgdGhlIENhbnZhcydzIGJhY2tpbmcgc3RvcmUgZG9uJ3QKKyAgICAvLyBtYXRj
aCB0aG9zZSB0aGF0IHdlIHdlcmUgZ2l2ZW4gaW4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8KKyAg
ICAvLyByZXNoYXBlKCksIHRoZW4gd2UgbmVlZCBhbiBpbnRlcm1lZGlhdGUgYml0bWFwIHRvIHJl
YWQgYmFjayB0aGUKKyAgICAvLyBmcmFtZSBidWZmZXIgaW50by4gVGhpcyBzZWVtcyB0byBoYXBw
ZW4gd2hlbiBDU1Mgc3R5bGVzIGFyZQorICAgIC8vIHVzZWQgdG8gcmVzaXplIHRoZSBDYW52YXMu
CisgICAgU2tCaXRtYXAgbV9yZXNpemluZ0JpdG1hcDsKKworICAgIEdyQ29udGV4dCogbV9nckNv
bnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGQ2YzQ0
ZGYwZDUzZmFjODQyMGMyZWRiMGE5NDhkODkzMzZlYmEwOTkuLjU1OWY5ZGVlNTllODg5YmMxMDU4
MTEyNWQyZWY5NTA1ZmFlODI2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTM5
MCw3ICszOTAsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvRWRpdG9yQ2xpZW50SW1wbC5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5oJywKLSAgICAgICAgICAgICAgICAn
c3JjL0V4dGVuc2lvbnMzRENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9FeHRl
cm5hbFBvcHVwTWVudS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvRXh0ZXJuYWxQb3B1cE1l
bnUuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwJywK
QEAgLTM5OCw5ICszOTcsNiBAQAogICAgICAgICAgICAgICAgICdzcmMvRnJhbWVOZXR3b3JraW5n
Q29udGV4dEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvbkNsaWVudFBy
b3h5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9HZW9sb2NhdGlvbkNsaWVudFByb3h5Lmgn
LAotICAgICAgICAgICAgICAgICdzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAnLAot
ICAgICAgICAgICAgICAgICdzcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCcsCi0gICAg
ICAgICAgICAgICAgJ3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9ndGsvV2ViSW5wdXRFdmVudEZhY3RvcnkuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYkhlbHBlclBsdWdpbkltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkhlbHBlclBsdWdpbkltcGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGE2NGE3N2VmYTUwMDZmODQ3ODI4NWE4MTI3YWE2YTljMjI0MTBkNjQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RD
aHJvbWl1bS5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViR3JhcGhpY3ND
b250ZXh0M0QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1FeHRlbnNpb25zM0RDaHJvbWl1
bTo6RXh0ZW5zaW9uczNEQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBwcml2KQot
ICAgIDogbV9wcml2YXRlKHByaXYpCi17Ci19Ci0KLUV4dGVuc2lvbnMzRENocm9taXVtOjp+RXh0
ZW5zaW9uczNEQ2hyb21pdW0oKQotewotfQotCi1ib29sIEV4dGVuc2lvbnMzRENocm9taXVtOjpz
dXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+c3Vw
cG9ydHNFeHRlbnNpb24obmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmVu
c3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGJvb2wgcmVzdWx0ID0gbV9w
cml2YXRlLT5lbnN1cmVFeHRlbnNpb25FbmFibGVkKG5hbWUpOwotICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQpOwotfQotCi1ib29sIEV4dGVuc2lvbnMzRENocm9taXVtOjppc0VuYWJs
ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRXh0ZW5z
aW9uRW5hYmxlZChuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lvbnMzRENocm9taXVtOjpnZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihtX3By
aXZhdGUtPndlYkNvbnRleHQoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpKTsKLX0KLQot
dm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxv
bmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAs
IGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9u
ZyBmaWx0ZXIpCi17Ci0gICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmJsaXRGcmFtZWJ1ZmZl
ckNIUk9NSVVNKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgx
LCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6
cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+d2Vi
Q29udGV4dCgpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVDSFJPTUlVTSh0YXJnZXQs
IHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBFeHRl
bnNpb25zM0RDaHJvbWl1bTo6cG9zdFN1YkJ1ZmZlckNIUk9NSVVNKGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5wb3N0
U3ViQnVmZmVyQ0hST01JVU0oeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQqIEV4dGVu
c2lvbnMzRENocm9taXVtOjptYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0odW5zaWduZWQgdGFyZ2V0
LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgYWNjZXNzKQotewotICAgIHJldHVybiBt
X3ByaXZhdGUtPndlYkNvbnRleHQoKS0+bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKHRhcmdldCwg
b2Zmc2V0LCBzaXplLCBhY2Nlc3MpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjp1
bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShjb25zdCB2b2lkKiBkYXRhKQotewotICAgIG1fcHJp
dmF0ZS0+d2ViQ29udGV4dCgpLT51bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShkYXRhKTsKLX0K
LQotdm9pZCogRXh0ZW5zaW9uczNEQ2hyb21pdW06Om1hcFRleFN1YkltYWdlMkRDSFJPTUlVTSh1
bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdW5zaWdu
ZWQgYWNjZXNzKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+bWFwVGV4
U3ViSW1hZ2UyRENIUk9NSVVNKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYWNjZXNzKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29uc3Qgdm9pZCogZGF0YSkKLXsK
LSAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0o
ZGF0YSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnNldFZpc2liaWxpdHlDSFJP
TUlVTShib29sIHZpc2liaWxpdHkpCi17Ci0gICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPnNl
dFZpc2liaWxpdHlDSFJPTUlVTSh2aXNpYmlsaXR5KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6ZGlzY2FyZEZyYW1lYnVmZmVyRVhUKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVp
IG51bUF0dGFjaG1lbnRzLCBjb25zdCBHQzNEZW51bSogYXR0YWNobWVudHMpCi17Ci0gICAgbV9w
cml2YXRlLT53ZWJDb250ZXh0KCktPmRpc2NhcmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIG51bUF0
dGFjaG1lbnRzLCBhdHRhY2htZW50cyk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06
OmVuc3VyZUZyYW1lYnVmZmVyQ0hST01JVU0oKQotewotICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4
dCgpLT5lbnN1cmVGcmFtZWJ1ZmZlckNIUk9NSVVNKCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTShQ
YXNzT3duUHRyPEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTT4gY2Fs
bGJhY2spCi17Ci0gICAgbV9wcml2YXRlLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQ0hST01JVU0oY2FsbGJhY2spOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lv
bnMzRENocm9taXVtOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCi17Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpCi17Ci19Ci0KLUdDM0Rib29sZWFuIEV4dGVuc2lvbnMzRENocm9taXVtOjpp
c1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0KQotewotfQotCi1TdHJpbmcgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdM
RShzaGFkZXIpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpzZXRTd2FwQnVmZmVy
c0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPFN3YXBCdWZmZXJzQ29tcGxldGVD
YWxsYmFja0NIUk9NSVVNPiBjYWxsYmFjaykKLXsKLSAgICBtX3ByaXZhdGUtPnNldFN3YXBCdWZm
ZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKGNhbGxiYWNrKTsKLX0KLQotdm9pZCBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6cmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCkKLXsKLSAg
ICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+cmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9N
SVVNKCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnBhaW50RnJhbWVidWZmZXJU
b0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCi17Ci0gICAgbV9wcml2YXRl
LT5wYWludEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIHdpZHRoLCBoZWlnaHQsIHBy
ZW11bHRpcGx5QWxwaGEsIGltYWdlQnVmZmVyKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6dGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNKHVuc2lnbmVkIHRhcmdldCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBpb1N1cmZhY2VJZCwgdW5zaWduZWQgcGxhbmUpCi17
Ci0gICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlV
TSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQsIGlvU3VyZmFjZUlkLCBwbGFuZSk7Ci19Ci0KLXZvaWQg
RXh0ZW5zaW9uczNEQ2hyb21pdW06OnRleFN0b3JhZ2UyREVYVCh1bnNpZ25lZCBpbnQgdGFyZ2V0
LCBpbnQgbGV2ZWxzLCB1bnNpZ25lZCBpbnQgaW50ZXJuYWxGb3JtYXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCkKLXsKLSAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+dGV4U3RvcmFnZTJERVhU
KHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBs
YXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmNyZWF0ZVF1ZXJ5RVhUKCkKLXsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmNyZWF0ZVF1ZXJ5RVhUKCk7Ci19
Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVF1ZXJ5RVhUKFBsYXRmb3JtM0RP
YmplY3QgcXVlcnkpCi17Ci0gICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmRlbGV0ZVF1ZXJ5
RVhUKHF1ZXJ5KTsKLX0KLQotR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzUXVl
cnlFWFQoUGxhdGZvcm0zRE9iamVjdCBxdWVyeSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT53
ZWJDb250ZXh0KCktPmlzUXVlcnlFWFQocXVlcnkpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENo
cm9taXVtOjpiZWdpblF1ZXJ5RVhUKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBx
dWVyeSkKLXsKLSAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+YmVnaW5RdWVyeUVYVCh0YXJn
ZXQsIHF1ZXJ5KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6ZW5kUXVlcnlFWFQo
R0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5lbmRRdWVy
eUVYVCh0YXJnZXQpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpnZXRRdWVyeWl2
RVhUKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHBhcmFtcykKLXsK
LSAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+Z2V0UXVlcnlpdkVYVCh0YXJnZXQsIHBuYW1l
LCBwYXJhbXMpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpnZXRRdWVyeU9iamVj
dHVpdkVYVChQbGF0Zm9ybTNET2JqZWN0IHF1ZXJ5LCBHQzNEZW51bSBwbmFtZSwgR0MzRHVpbnQq
IHBhcmFtcykKLXsKLSAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+Z2V0UXVlcnlPYmplY3R1
aXZFWFQocXVlcnksIHBuYW1lLCBwYXJhbXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4
dDNEQ2hyb21pdW0uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIwYWNjMzgx
ZDcyY2ZiMTUyMzQ4YTg0YWI4MWFlNGZmMDg5NmE3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNz
Q29udGV4dDNEQ2hyb21pdW0uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTcxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5j
bHVkZSAiRHJhd2luZ0J1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0j
aW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcywg
SG9zdFdpbmRvdyosIGJvb2wpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3ND
b250ZXh0M0QoKQotewotICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhudWxs
cHRyKTsKLSAgICBtX3ByaXZhdGUtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKG51bGxwdHIpOwot
ICAgIG1fcHJpdmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obnVs
bHB0cik7Ci0gICAgbV9wcml2YXRlLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxi
YWNrQ0hST01JVU0obnVsbHB0cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENv
bnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExv
c3RDYWxsYmFjaz4gY2FsbGJhY2spCi17Ci0gICAgbV9wcml2YXRlLT5zZXRDb250ZXh0TG9zdENh
bGxiYWNrKGNhbGxiYWNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JN
ZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdl
Q2FsbGJhY2s+IGNhbGxiYWNrKQotewotICAgIG1fcHJpdmF0ZS0+c2V0RXJyb3JNZXNzYWdlQ2Fs
bGJhY2soY2FsbGJhY2spOwotfQotCi1QYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJz
LCBIb3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxl
KQotewotICAgIEFTU0VSVChyZW5kZXJTdHlsZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpOwotCi0gICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyB3ZWJBdHRyaWJ1dGVzOwotICAgIHdlYkF0dHJpYnV0ZXMuYWxwaGEgPSBh
dHRycy5hbHBoYTsKLSAgICB3ZWJBdHRyaWJ1dGVzLmRlcHRoID0gYXR0cnMuZGVwdGg7Ci0gICAg
d2ViQXR0cmlidXRlcy5zdGVuY2lsID0gYXR0cnMuc3RlbmNpbDsKLSAgICB3ZWJBdHRyaWJ1dGVz
LmFudGlhbGlhcyA9IGF0dHJzLmFudGlhbGlhczsKLSAgICB3ZWJBdHRyaWJ1dGVzLnByZW11bHRp
cGxpZWRBbHBoYSA9IGF0dHJzLnByZW11bHRpcGxpZWRBbHBoYTsKLSAgICB3ZWJBdHRyaWJ1dGVz
Lm5vRXh0ZW5zaW9ucyA9IGF0dHJzLm5vRXh0ZW5zaW9uczsKLSAgICB3ZWJBdHRyaWJ1dGVzLnNo
YXJlUmVzb3VyY2VzID0gYXR0cnMuc2hhcmVSZXNvdXJjZXM7Ci0gICAgd2ViQXR0cmlidXRlcy5w
cmVmZXJEaXNjcmV0ZUdQVSA9IGF0dHJzLnByZWZlckRpc2NyZXRlR1BVOwotCi0gICAgT3duUHRy
PFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQgPSBhZG9wdFB0cihXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0ZU9mZnNjcmVlbkdyYXBoaWNzQ29udGV4dDNE
KHdlYkF0dHJpYnV0ZXMpKTsKLSAgICBpZiAoIXdlYkNvbnRleHQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3ND
b250ZXh0RnJvbVdlYkNvbnRleHQod2ViQ29udGV4dC5yZWxlYXNlKCksIHJlbmRlclN0eWxlLCBh
dHRycy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpOwotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCk7Ci19Ci0KLVBsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRQbGF0Zm9ybVRleHR1cmVJZCgpOwot
fQotCi1HckNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRleHQoKQotewotICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdyQ29udGV4dCgpOwotfQotCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGlj
c0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LS8vIE1hY3JvcyB0byBhc3Npc3QgaW4gZGVsZWdhdGluZyBmcm9tIEdyYXBoaWNzQ29udGV4dDNE
IHRvCi0vLyBXZWJHcmFwaGljc0NvbnRleHQzRC4KLQotI2RlZmluZSBERUxFR0FURV9UT19XRUJD
T05URVhUKG5hbWUpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUoKSBcCi17IFwKLSAg
ICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+bmFtZSgpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF9SKG5hbWUsIHJ0KSAgICAgICAgICAgXAotcnQgR3JhcGhpY3NDb250
ZXh0M0Q6Om5hbWUoKSBcCi17IFwKLSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCkt
Pm5hbWUoKTsgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShuYW1lLCB0
MSkgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSkgXAoteyBcCi0gICAgbV9w
cml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF8xUihuYW1lLCB0MSwgcnQpICAgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNE
OjpuYW1lKHQxIGExKSBcCi17IFwKLSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCkt
Pm5hbWUoYTEpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKG5hbWUs
IHQxLCB0MikgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwK
LXsgXAotICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMik7IFwKLX0KLQot
I2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzJSKG5hbWUsIHQxLCB0MiwgcnQpICBcCi1y
dCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKLXsgXAotICAgIHJldHVy
biBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+bmFtZShhMSwgYTIpOyBcCi19Ci0KLSNkZWZpbmUg
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKG5hbWUsIHQxLCB0MiwgdDMpICAgXAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCi17IFwKLSAgICBt
X3ByaXZhdGUtPndlYkNvbnRleHQoKS0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAg
ICBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zUihuYW1lLCB0MSwgdDIs
IHQzLCBydCkgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQz
IGEzKSAgICBcCi17IFwKLSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUo
YTEsIGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RP
X1dFQkNPTlRFWFRfNChuYW1lLCB0MSwgdDIsIHQzLCB0NCkgICAgXAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKLXsgXAotICAgIG1f
cHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAg
IFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzRSKG5hbWUsIHQxLCB0Miwg
dDMsIHQ0LCBydCkgICAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEy
LCB0MyBhMywgdDQgYTQpICBcCi17IFwKLSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0
KCktPm5hbWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIERFTEVH
QVRFX1RPX1dFQkNPTlRFWFRfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUg
YTUpICAgICAgICBcCi17IFwKLSAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+bmFtZShhMSwg
YTIsIGEzLCBhNCwgYTUpOyAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhU
XzYobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAoteyBc
Ci0gICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBh
Nik7ICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNlIobmFtZSwgdDEs
IHQyLCB0MywgdDQsIHQ1LCB0NiwgcnQpICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCi17IFwKLSAgICByZXR1
cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7
ICAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzcobmFtZSwgdDEs
IHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKLXsgXAot
ICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYs
IGE3KTsgICBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF83UihuYW1lLCB0
MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNEOjpu
YW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCi17
IFwKLSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywg
YTQsIGE1LCBhNiwgYTcpOyAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhU
XzgobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBcCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwg
dDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAoteyBcCi0gICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCkt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICBcCi19Ci0KLSNkZWZp
bmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF85KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYs
IHQ3LCB0OCwgdDkpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEy
LCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoteyBc
Ci0gICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBh
NiwgYTcsIGE4LCBhOSk7ICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
OVIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKLXJ0IEdy
YXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwg
dDYgYTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKLXsgXAotICAgIHJldHVybiBtX3ByaXZhdGUt
PndlYkNvbnRleHQoKS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsg
ICBcCi19Ci0KLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfUihtYWtlQ29udGV4dEN1cnJlbnQsIGJv
b2wpCi1ERUxFR0FURV9UT19XRUJDT05URVhUKHByZXBhcmVUZXh0dXJlKQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT53ZWJDb250ZXh0KCktPmlzR0xFUzJDb21wbGlhbnQoKTsKLX0KLQotCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVzb3VyY2VTYWZlKCkKLXsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5pc1Jlc291cmNlU2FmZSgpOwotfQotCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzEoYWN0
aXZlVGV4dHVyZSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzIoYXR0YWNoU2hh
ZGVyLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1fcHJpdmF0ZS0+d2Vi
Q29udGV4dCgpLT5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgp
LmRhdGEoKSk7Ci19Ci0KLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihiaW5kQnVmZmVyLCBHQzNE
ZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihiaW5kRnJh
bWVidWZmZXIsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fV0VCQ09O
VEVYVF8yKGJpbmRSZW5kZXJidWZmZXIsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQotREVM
RUdBVEVfVE9fV0VCQ09OVEVYVF8yKGJpbmRUZXh0dXJlLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9i
amVjdCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChibGVuZENvbG9yLCBHQzNEY2xhbXBmLCBH
QzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmKQotREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF8xKGJsZW5kRXF1YXRpb24sIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGJs
ZW5kRXF1YXRpb25TZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fV0VC
Q09OVEVYVF8yKGJsZW5kRnVuYywgR0MzRGVudW0sIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fV0VC
Q09OVEVYVF80KGJsZW5kRnVuY1NlcGFyYXRlLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVt
LCBHQzNEZW51bSkKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBidWZm
ZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQotCi1ERUxFR0FURV9UT19XRUJDT05U
RVhUXzQoYnVmZmVyRGF0YSwgR0MzRGVudW0sIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCosIEdD
M0RlbnVtKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KGJ1ZmZlclN1YkRhdGEsIEdDM0RlbnVt
LCBHQzNEaW50cHRyLCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqKQotCi1ERUxFR0FURV9UT19X
RUJDT05URVhUXzFSKGNoZWNrRnJhbWVidWZmZXJTdGF0dXMsIEdDM0RlbnVtLCBHQzNEZW51bSkK
LURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShjbGVhciwgR0MzRGJpdGZpZWxkKQotREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF80KGNsZWFyQ29sb3IsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYsIEdDM0Rj
bGFtcGYsIEdDM0RjbGFtcGYpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzEoY2xlYXJEZXB0aCwg
R0MzRGNsYW1wZikKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShjbGVhclN0ZW5jaWwsIEdDM0Rp
bnQpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzQoY29sb3JNYXNrLCBHQzNEYm9vbGVhbiwgR0Mz
RGJvb2xlYW4sIEdDM0Rib29sZWFuLCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX1dFQkNPTlRF
WFRfMShjb21waWxlU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0KQotCi1ERUxFR0FURV9UT19XRUJD
T05URVhUXzgoY29tcHJlc3NlZFRleEltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51
bSwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIGNvbnN0IHZvaWQqKQot
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF85KGNvbXByZXNzZWRUZXhTdWJJbWFnZTJELCBHQzNEZW51
bSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGVudW0s
IEdDM0RzaXplaSwgY29uc3Qgdm9pZCopCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzgoY29weVRl
eEltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwg
R0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RpbnQpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzgo
Y29weVRleFN1YkltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBH
QzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLURFTEVHQVRFX1RPX1dFQkNP
TlRFWFRfMShjdWxsRmFjZSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzEoZGVw
dGhGdW5jLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShkZXB0aE1hc2ssIEdD
M0Rib29sZWFuKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGRlcHRoUmFuZ2UsIEdDM0RjbGFt
cGYsIEdDM0RjbGFtcGYpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzIoZGV0YWNoU2hhZGVyLCBQ
bGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF8xKGRpc2FibGUsIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSwgR0MzRHVpbnQpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzMoZHJh
d0FycmF5cywgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RzaXplaSkKLURFTEVHQVRFX1RPX1dFQkNP
TlRFWFRfNChkcmF3RWxlbWVudHMsIEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNE
aW50cHRyKQotCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzEoZW5hYmxlLCBHQzNEZW51bSkKLURF
TEVHQVRFX1RPX1dFQkNPTlRFWFRfMShlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSwgR0MzRHVpbnQp
Ci1ERUxFR0FURV9UT19XRUJDT05URVhUKGZpbmlzaCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFQo
Zmx1c2gpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzQoZnJhbWVidWZmZXJSZW5kZXJidWZmZXIs
IEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FU
RV9UT19XRUJDT05URVhUXzUoZnJhbWVidWZmZXJUZXh0dXJlMkQsIEdDM0RlbnVtLCBHQzNEZW51
bSwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQpCi1ERUxFR0FURV9UT19XRUJD
T05URVhUXzEoZnJvbnRGYWNlLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShn
ZW5lcmF0ZU1pcG1hcCwgR0MzRGVudW0pCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFj
dGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQotewotICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2
ZUluZm8gd2ViSW5mbzsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRBY3Rp
dmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIHdlYkluZm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaW5mby5uYW1lID0gd2ViSW5mby5uYW1lOwotICAgIGluZm8udHlwZSA9IHdlYkluZm8u
dHlwZTsKLSAgICBpbmZvLnNpemUgPSB3ZWJJbmZvLnNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87Ci0gICAgaWYg
KCFtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRl
eCwgd2ViSW5mbykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpbmZvLm5hbWUgPSB3ZWJJ
bmZvLm5hbWU7Ci0gICAgaW5mby50eXBlID0gd2ViSW5mby50eXBlOwotICAgIGluZm8uc2l6ZSA9
IHdlYkluZm8uc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1ERUxFR0FURV9UT19XRUJD
T05URVhUXzQoZ2V0QXR0YWNoZWRTaGFkZXJzLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEc2l6ZWks
IEdDM0RzaXplaSosIFBsYXRmb3JtM0RPYmplY3QqKQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLURFTEVHQVRF
X1RPX1dFQkNPTlRFWFRfMihnZXRCb29sZWFudiwgR0MzRGVudW0sIEdDM0Rib29sZWFuKikKLURF
TEVHQVRFX1RPX1dFQkNPTlRFWFRfMyhnZXRCdWZmZXJQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdD
M0RlbnVtLCBHQzNEaW50KikKLQotR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICBXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSBtX3ByaXZhdGUtPndl
YkNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZXMuYWxwaGEgPSB3ZWJBdHRy
aWJ1dGVzLmFscGhhOwotICAgIGF0dHJpYnV0ZXMuZGVwdGggPSB3ZWJBdHRyaWJ1dGVzLmRlcHRo
OwotICAgIGF0dHJpYnV0ZXMuc3RlbmNpbCA9IHdlYkF0dHJpYnV0ZXMuc3RlbmNpbDsKLSAgICBh
dHRyaWJ1dGVzLmFudGlhbGlhcyA9IHdlYkF0dHJpYnV0ZXMuYW50aWFsaWFzOwotICAgIGF0dHJp
YnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gd2ViQXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxw
aGE7Ci0gICAgYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBtX3ByaXZhdGUtPnBy
ZXNlcnZlRHJhd2luZ0J1ZmZlcigpOwotICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUg
PSB3ZWJBdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVOwotICAgIHJldHVybiBhdHRyaWJ1dGVz
OwotfQotCi1ERUxFR0FURV9UT19XRUJDT05URVhUX1IoZ2V0RXJyb3IsIEdDM0RlbnVtKQotREVM
RUdBVEVfVE9fV0VCQ09OVEVYVF8yKGdldEZsb2F0diwgR0MzRGVudW0sIEdDM0RmbG9hdCopCi1E
RUxFR0FURV9UT19XRUJDT05URVhUXzQoZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqKQotREVMRUdBVEVfVE9f
V0VCQ09OVEVYVF8yKGdldEludGVnZXJ2LCBHQzNEZW51bSwgR0MzRGludCopCi1ERUxFR0FURV9U
T19XRUJDT05URVhUXzMoZ2V0UHJvZ3JhbWl2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwg
R0MzRGludCopCi0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNv
bnRleHQoKS0+Z2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7Ci19Ci0KLQotREVMRUdBVEVfVE9f
V0VCQ09OVEVYVF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBHQzNEZW51bSwgR0MzRGVu
dW0sIEdDM0RpbnQqKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKGdldFNoYWRlcml2LCBQbGF0
Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCopCi0KLVN0cmluZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsK
LX0KLQotCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzQoZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0
LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqLCBHQzNEaW50KikKLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRTaGFkZXJTb3VyY2Uoc2hh
ZGVyKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0g
bmFtZSkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFN0cmluZyhu
YW1lKTsKLX0KLQotCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzMoZ2V0VGV4UGFyYW1ldGVyZnYs
IEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGZsb2F0KikKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
MyhnZXRUZXhQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVH
QVRFX1RPX1dFQkNPTlRFWFRfMyhnZXRVbmlmb3JtZnYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rp
bnQsIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzMoZ2V0VW5pZm9ybWl2LCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEaW50KikKLQotR0MzRGludCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+
Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLQot
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKGdldFZlcnRleEF0dHJpYmZ2LCBHQzNEdWludCwgR0Mz
RGVudW0sIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzMoZ2V0VmVydGV4QXR0
cmliaXYsIEdDM0R1aW50LCBHQzNEZW51bSwgR0MzRGludCopCi1ERUxFR0FURV9UT19XRUJDT05U
RVhUXzJSKGdldFZlcnRleEF0dHJpYk9mZnNldCwgR0MzRHVpbnQsIEdDM0RlbnVtLCBHQzNEc2l6
ZWlwdHIpCi0KLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihoaW50LCBHQzNEZW51bSwgR0MzRGVu
dW0pCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzFSKGlzQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMVIoaXNFbmFibGVkLCBHQzNE
ZW51bSwgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzFSKGlzRnJhbWVidWZm
ZXIsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF8xUihpc1Byb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQotREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF8xUihpc1JlbmRlcmJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJv
b2xlYW4pCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzFSKGlzU2hhZGVyLCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMVIoaXNUZXh0dXJlLCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShs
aW5lV2lkdGgsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShsaW5rUHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihwaXhlbFN0b3Jl
aSwgR0MzRGVudW0sIEdDM0RpbnQpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzIocG9seWdvbk9m
ZnNldCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi0KLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNyhy
ZWFkUGl4ZWxzLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVu
dW0sIEdDM0RlbnVtLCB2b2lkKikKLQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVChyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzQocmVuZGVyYnVmZmVyU3RvcmFn
ZSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLURFTEVHQVRFX1RP
X1dFQkNPTlRFWFRfMihzYW1wbGVDb3ZlcmFnZSwgR0MzRGNsYW1wZiwgR0MzRGJvb2xlYW4pCi1E
RUxFR0FURV9UT19XRUJDT05URVhUXzQoc2Npc3NvciwgR0MzRGludCwgR0MzRGludCwgR0MzRHNp
emVpLCBHQzNEc2l6ZWkpCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgbV9w
cml2YXRlLT53ZWJDb250ZXh0KCktPnNoYWRlclNvdXJjZShzaGFkZXIsIHN0cmluZy51dGY4KCku
ZGF0YSgpKTsKLX0KLQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHN0ZW5jaWxGdW5jLCBHQzNE
ZW51bSwgR0MzRGludCwgR0MzRHVpbnQpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzQoc3RlbmNp
bEZ1bmNTZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEdWludCkKLURF
TEVHQVRFX1RPX1dFQkNPTlRFWFRfMShzdGVuY2lsTWFzaywgR0MzRHVpbnQpCi1ERUxFR0FURV9U
T19XRUJDT05URVhUXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0R1aW50KQot
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHN0ZW5jaWxPcCwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEZW51bSkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChzdGVuY2lsT3BTZXBhcmF0ZSwgR0Mz
RGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCi0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBw
aXhlbHMpCi17Ci0gICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPnRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ERUxFR0FURV9UT19XRUJDT05U
RVhUXzModGV4UGFyYW1ldGVyZiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZmxvYXQpCi1ERUxF
R0FURV9UT19XRUJDT05URVhUXzModGV4UGFyYW1ldGVyaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEaW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbV9wcml2YXRlLT53ZWJDb250
ZXh0KCktPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi1ERUxFR0FURV9UT19XRUJD
T05URVhUXzIodW5pZm9ybTFmLCBHQzNEaW50LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19XRUJD
T05URVhUXzModW5pZm9ybTFmdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQotREVM
RUdBVEVfVE9fV0VCQ09OVEVYVF8yKHVuaWZvcm0xaSwgR0MzRGludCwgR0MzRGludCkKLURFTEVH
QVRFX1RPX1dFQkNPTlRFWFRfMyh1bmlmb3JtMWl2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rp
bnQqKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHVuaWZvcm0yZiwgR0MzRGludCwgR0MzRGZs
b2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzModW5pZm9ybTJmdiwgR0Mz
RGludCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHVu
aWZvcm0yaSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCkKLURFTEVHQVRFX1RPX1dFQkNPTlRF
WFRfMyh1bmlmb3JtMml2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RpbnQqKQotREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF80KHVuaWZvcm0zZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQs
IEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyh1bmlmb3JtM2Z2LCBHQzNEaW50
LCBHQzNEc2l6ZWksIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzQodW5pZm9y
bTNpLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQotREVMRUdBVEVfVE9fV0VC
Q09OVEVYVF8zKHVuaWZvcm0zaXYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGludCopCi1ERUxF
R0FURV9UT19XRUJDT05URVhUXzUodW5pZm9ybTRmLCBHQzNEaW50LCBHQzNEZmxvYXQsIEdDM0Rm
bG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzModW5p
Zm9ybTRmdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fV0VC
Q09OVEVYVF81KHVuaWZvcm00aSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwg
R0MzRGludCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyh1bmlmb3JtNGl2LCBHQzNEaW50LCBH
QzNEc2l6ZWksIEdDM0RpbnQqKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KHVuaWZvcm1NYXRy
aXgyZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCi1ERUxF
R0FURV9UT19XRUJDT05URVhUXzQodW5pZm9ybU1hdHJpeDNmdiwgR0MzRGludCwgR0MzRHNpemVp
LCBHQzNEYm9vbGVhbiwgR0MzRGZsb2F0KikKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNCh1bmlm
b3JtTWF0cml4NGZ2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuLCBHQzNEZmxvYXQq
KQotCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzEodXNlUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVj
dCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMSh2YWxpZGF0ZVByb2dyYW0sIFBsYXRmb3JtM0RP
YmplY3QpCi0KLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMih2ZXJ0ZXhBdHRyaWIxZiwgR0MzRHVp
bnQsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMih2ZXJ0ZXhBdHRyaWIxZnYs
IEdDM0R1aW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHZlcnRleEF0
dHJpYjJmLCBHQzNEdWludCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19XRUJD
T05URVhUXzIodmVydGV4QXR0cmliMmZ2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKLURFTEVHQVRF
X1RPX1dFQkNPTlRFWFRfNCh2ZXJ0ZXhBdHRyaWIzZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0Mz
RGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19XRUJDT05URVhUXzIodmVydGV4QXR0cmli
M2Z2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNSh2ZXJ0
ZXhBdHRyaWI0ZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdD
M0RmbG9hdCkKLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMih2ZXJ0ZXhBdHRyaWI0ZnYsIEdDM0R1
aW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF82KHZlcnRleEF0dHJpYlBv
aW50ZXIsIEdDM0R1aW50LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGJvb2xlYW4sIEdDM0RzaXpl
aSwgR0MzRGludHB0cikKLQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KHZpZXdwb3J0LCBHQzNE
aW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKHdpZHRoID09
IG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT53aWR0aCgpICYmIGhlaWdodCA9PSBtX3ByaXZhdGUt
PndlYkNvbnRleHQoKS0+aGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJpdmF0
ZS0+d2ViQ29udGV4dCgpLT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIG1fcHJpdmF0ZS0+bWFy
a0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29t
cG9zaXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bGF5ZXJDb21wb3NpdGVk
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQot
ewotICAgIG1fcHJpdmF0ZS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwotfQotCi1uYW1lc3BhY2Ug
ewotCi12b2lkIGdldERyYXdpbmdQYXJhbWV0ZXJzKERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZm
ZXIsIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNELAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybTNET2JqZWN0KiBmcmFtZUJ1ZmZlcklkLCBp
bnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKLXsKLSAgICBpZiAoZHJhd2luZ0J1ZmZlcikgewotICAg
ICAgICAqZnJhbWVCdWZmZXJJZCA9IGRyYXdpbmdCdWZmZXItPmZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICp3aWR0aCA9IGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOwotICAgICAgICAqaGVp
Z2h0ID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgICpmcmFtZUJ1ZmZlcklkID0gMDsKLSAgICAgICAgKndpZHRoID0gZ3JhcGhpY3NDb250ZXh0
M0QtPndpZHRoKCk7Ci0gICAgICAgICpoZWlnaHQgPSBncmFwaGljc0NvbnRleHQzRC0+aGVpZ2h0
KCk7Ci0gICAgfQotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyLCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQotewotICAgIFBsYXRmb3Jt
M0RPYmplY3QgZnJhbWVidWZmZXJJZDsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKLSAgICBnZXRE
cmF3aW5nUGFyYW1ldGVycyhkcmF3aW5nQnVmZmVyLCBtX3ByaXZhdGUtPndlYkNvbnRleHQoKSwg
JmZyYW1lYnVmZmVySWQsICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgbV9wcml2YXRlLT5wYWludEZy
YW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCwgIWdldENvbnRl
eHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7Ci19Ci0KLVBh
c3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKLXsKLSAgICBpZiAo
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOwotICAgIGludCB3aWR0
aCwgaGVpZ2h0OwotICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1fcHJp
dmF0ZS0+d2ViQ29udGV4dCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKLQot
ICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNp
emUod2lkdGgsIGhlaWdodCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0
YS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogd2lkdGggKiBo
ZWlnaHQ7Ci0KLSAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+cmVhZEJhY2tGcmFtZWJ1ZmZl
cihwaXhlbHMsIGJ1ZmZlclNpemUsIGZyYW1lYnVmZmVySWQsIHdpZHRoLCBoZWlnaHQpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidWZmZXJTaXplOyBpICs9IDQpCi0gICAgICAgIHN0
ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwotCi0gICAgcmV0dXJuIGltYWdlRGF0
YS5yZWxlYXNlKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ERUxFR0FURV9UT19XRUJDT05URVhUX1IoY3JlYXRlQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0
KQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF9SKGNyZWF0ZUZyYW1lYnVmZmVyLCBQbGF0Zm9ybTNE
T2JqZWN0KQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF9SKGNyZWF0ZVByb2dyYW0sIFBsYXRmb3Jt
M0RPYmplY3QpCi1ERUxFR0FURV9UT19XRUJDT05URVhUX1IoY3JlYXRlUmVuZGVyYnVmZmVyLCBQ
bGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xUihjcmVhdGVTaGFkZXIs
IEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fV0VCQ09OVEVYVF9SKGNy
ZWF0ZVRleHR1cmUsIFBsYXRmb3JtM0RPYmplY3QpCi0KLURFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
MShkZWxldGVCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19XRUJDT05URVhU
XzEoZGVsZXRlRnJhbWVidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19XRUJD
T05URVhUXzEoZGVsZXRlUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX1dF
QkNPTlRFWFRfMShkZWxldGVSZW5kZXJidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FU
RV9UT19XRUJDT05URVhUXzEoZGVsZXRlU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF8xKGRlbGV0ZVRleHR1cmUsIFBsYXRmb3JtM0RPYmplY3QpCi0KLURF
TEVHQVRFX1RPX1dFQkNPTlRFWFRfMShzeW50aGVzaXplR0xFcnJvciwgR0MzRGVudW0pCi0KLUV4
dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldEV4dGVuc2lvbnMoKTsKLX0KLQotCi1JbnRTaXplIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEludFNpemUobV9wcml2YXRlLT53ZWJDb250ZXh0KCktPndpZHRoKCksIG1fcHJpdmF0ZS0+
d2ViQ29udGV4dCgpLT5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWM3NzM0M2VjYTdlNDU3
N2ZjZDhkNTlkNTc2NmJlOWQ4ZGNjZjlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNzkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgotCi0jaW5j
bHVkZSAiRHJhd2luZ0J1ZmZlci5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgi
Ci0jaW5jbHVkZSAiR3JDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JHTEludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4
dDNELmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIHsKLQotLy8gVGhlIGxpbWl0IG9mIHRoZSBudW1i
ZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgR3JDb250ZXh0J3MgYml0bWFwLT50ZXh0dXJl
IGNhY2hlLgotY29uc3QgaW50IG1heEdhbmVzaFRleHR1cmVDYWNoZUNvdW50ID0gNTEyOwotLy8g
VGhlIGxpbWl0IG9mIHRoZSBieXRlcyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBH
ckNvbnRleHQncyBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCi1jb25zdCBzaXplX3QgbWF4R2FuZXNo
VGV4dHVyZUNhY2hlQnl0ZXMgPSA5NiAqIDEwMjQgKiAxMDI0OwotCi19Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUK
LQotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoUGFz
c093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0LCBib29sIHBy
ZXNlcnZlRHJhd2luZ0J1ZmZlcikKLSAgICA6IG1faW1wbCh3ZWJDb250ZXh0KQotICAgICwgbV9p
bml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCi0gICAgLCBtX2xheWVyQ29tcG9z
aXRlZChmYWxzZSkKLSAgICAsIG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyKHByZXNlcnZlRHJhd2lu
Z0J1ZmZlcikKLSAgICAsIG1fcmVzb3VyY2VTYWZldHkoUmVzb3VyY2VTYWZldHlVbmtub3duKQot
ICAgICwgbV9nckNvbnRleHQoMCkKLXsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKLXsKLSAgICBpZiAobV9nckNvbnRleHQpIHsKLSAg
ICAgICAgbV9nckNvbnRleHQtPmNvbnRleHREZXN0cm95ZWQoKTsKLSAgICAgICAgR3JTYWZlVW5y
ZWYobV9nckNvbnRleHQpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2Vi
Q29udGV4dChQYXNzT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRl
eHQsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSwgYm9vbCBwcmVz
ZXJ2ZURyYXdpbmdCdWZmZXIpCi17Ci0gICAgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dyA9IHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdzsKLQotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0
UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcygp
LCAwLCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpOwotCi0gICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZT4gcHJpdiA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUod2ViQ29udGV4dCwgcHJlc2VydmVEcmF3aW5nQnVmZmVyKSk7Ci0gICAgY29udGV4dC0+
bV9wcml2YXRlID0gcHJpdi5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgp
OwotfQotCi1XZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKLXsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBjb250ZXh0LT5tX3ByaXZhdGUtPndlYkNvbnRleHQoKTsKLX0KLQotY2xhc3MgR3JNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrIDogcHVibGljIEV4dGVuc2lvbnMzRENocm9taXVtOjpH
cHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0gewotcHVibGljOgotICAg
IEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayhHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUqIGNvbnRleHQpCi0gICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCBvbkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKEV4dGVuc2lv
bnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ0hST01JVU0gYWxsb2NhdGlvbikKLSAg
ICB7Ci0gICAgICAgIEdyQ29udGV4dCogY29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7
Ci0gICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBp
ZiAoIWFsbG9jYXRpb24uZ3B1UmVzb3VyY2VTaXplSW5CeXRlcykgewotICAgICAgICAgICAgY29u
dGV4dC0+ZnJlZUdwdVJlc291cmNlcygpOwotICAgICAgICAgICAgY29udGV4dC0+c2V0VGV4dHVy
ZUNhY2hlTGltaXRzKDAsIDApOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbnRleHQt
PnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhHYW5lc2hUZXh0dXJlQ2FjaGVDb3VudCwgbWF4R2Fu
ZXNoVGV4dHVyZUNhY2hlQnl0ZXMpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUqIG1fY29udGV4dDsKLX07Ci0KLUdyQ29udGV4dCogR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpnckNvbnRleHQoKQotewotICAgIGlmICghbV9nckNvbnRleHQpIHsKLSAg
ICAgICAgU2tBdXRvVFVucmVmPEdyR0xJbnRlcmZhY2U+IGludGVyZmFjZShtX2ltcGwtPmNyZWF0
ZUdyR0xJbnRlcmZhY2UoKSk7Ci0gICAgICAgIG1fZ3JDb250ZXh0ID0gR3JDb250ZXh0OjpDcmVh
dGUoa09wZW5HTF9TaGFkZXJzX0dyRW5naW5lLCByZWludGVycHJldF9jYXN0PEdyUGxhdGZvcm0z
RENvbnRleHQ+KGludGVyZmFjZS5nZXQoKSkpOwotICAgICAgICBpZiAobV9nckNvbnRleHQpIHsK
LSAgICAgICAgICAgIG1fZ3JDb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMobWF4R2FuZXNo
VGV4dHVyZUNhY2hlQ291bnQsIG1heEdhbmVzaFRleHR1cmVDYWNoZUJ5dGVzKTsKLSAgICAgICAg
ICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zM0RDaHJvbWl1bSA9IHN0YXRpY19j
YXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZ2V0RXh0ZW5zaW9ucygpKTsKLSAgICAgICAgICAg
IGlmIChleHRlbnNpb25zM0RDaHJvbWl1bS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2dwdV9tZW1v
cnlfbWFuYWdlciIpKQotICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMzRENocm9taXVtLT5zZXRH
cHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oYWRvcHRQdHIobmV3IEdy
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayh0aGlzKSkpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBtX2dyQ29udGV4dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbV9sYXllckNvbXBvc2l0ZWQgPSBm
YWxzZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmxheWVyQ29tcG9zaXRl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFya0xheWVyQ29tcG9zaXRlZCgpCi17Ci0gICAgbV9s
YXllckNvbXBvc2l0ZWQgPSB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFtZWJ1ZmZlciwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
cikKLXsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSAwOwotICAgIHNpemVfdCBidWZmZXJT
aXplID0gNCAqIHdpZHRoICogaGVpZ2h0OwotCi0gICAgY29uc3QgU2tCaXRtYXAqIGNhbnZhc0Jp
dG1hcCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAo
KTsKLSAgICBjb25zdCBTa0JpdG1hcCogcmVhZGJhY2tCaXRtYXAgPSAwOwotICAgIEFTU0VSVChj
YW52YXNCaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7Ci0g
ICAgaWYgKGNhbnZhc0JpdG1hcC0+d2lkdGgoKSA9PSB3aWR0aCAmJiBjYW52YXNCaXRtYXAtPmhl
aWdodCgpID09IGhlaWdodCkgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSBmYXN0ZXN0IGFuZCBt
b3N0IGNvbW1vbiBjYXNlLiBXZSByZWFkIGJhY2sKLSAgICAgICAgLy8gZGlyZWN0bHkgaW50byB0
aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4KLSAgICAgICAgcmVhZGJhY2tCaXRtYXAgPSBjYW52
YXNCaXRtYXA7Ci0gICAgICAgIG1fcmVzaXppbmdCaXRtYXAucmVzZXQoKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBXZSBuZWVkIHRvIGFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJpdG1hcCBmb3Ig
cmVhZGluZyBiYWNrIHRoZQotICAgICAgICAvLyBwaXhlbCBkYXRhLiBXZSB3aWxsIHRoZW4gdXNl
IFNraWEgdG8gcmVzY2FsZSB0aGlzIGJpdG1hcCB0bwotICAgICAgICAvLyB0aGUgc2l6ZSBvZiB0
aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4KLSAgICAgICAgaWYgKG1fcmVzaXppbmdCaXRtYXAu
d2lkdGgoKSAhPSB3aWR0aCB8fCBtX3Jlc2l6aW5nQml0bWFwLmhlaWdodCgpICE9IGhlaWdodCkg
ewotICAgICAgICAgICAgbV9yZXNpemluZ0JpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdC
Xzg4ODhfQ29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lk
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpOwotICAg
ICAgICAgICAgaWYgKCFtX3Jlc2l6aW5nQml0bWFwLmFsbG9jUGl4ZWxzKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHJlYWRiYWNrQml0bWFwID0gJm1fcmVz
aXppbmdCaXRtYXA7Ci0gICAgfQotCi0gICAgLy8gUmVhZCBiYWNrIHRoZSBmcmFtZSBidWZmZXIu
Ci0gICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKCpyZWFkYmFja0JpdG1hcCk7Ci0gICAg
cGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHJlYWRiYWNrQml0bWFwLT5nZXRQ
aXhlbHMoKSk7Ci0KLSAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCA0ICog
d2lkdGggKiBoZWlnaHQsIGZyYW1lYnVmZmVyLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIGlmIChw
cmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVy
U2l6ZTsgaSArPSA0KSB7Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1
LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgICAgICBwaXhl
bHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAv
IDI1NSk7Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNb
aSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZWFkYmFja0JpdG1hcC0+bm90aWZ5UGl4ZWxzQ2hhbmdlZCgpOwotICAgIGlmIChtX3Jlc2l6aW5n
Qml0bWFwLnJlYWR5VG9EcmF3KCkpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBkcmF3IHRoZSBy
ZXNpemluZyBiaXRtYXAgaW50byB0aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4KLSAgICAgICAg
U2tDYW52YXMgY2FudmFzKCpjYW52YXNCaXRtYXApOwotICAgICAgICBTa1JlY3QgZHN0OwotICAg
ICAgICBkc3Quc2V0KFNrSW50VG9TY2FsYXIoMCksIFNrSW50VG9TY2FsYXIoMCksIFNrSW50VG9T
Y2FsYXIoY2FudmFzQml0bWFwLT53aWR0aCgpKSwgU2tJbnRUb1NjYWxhcihjYW52YXNCaXRtYXAt
PmhlaWdodCgpKSk7Ci0gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVjdChtX3Jlc2l6aW5nQml0
bWFwLCAwLCBkc3QpOwotICAgIH0KLX0KLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RDb250ZXh0
TG9zdENhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
OjpXZWJHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2sgewotcHVibGljOgotICAgIEdyYXBoaWNz
Q29udGV4dDNEQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIoUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2FsbGJhY2spCi0gICAgICAgIDogbV9jb250
ZXh0TG9zdENhbGxiYWNrKGNhbGxiYWNrKSB7IH0KLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRl
eHQzRENvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
b25Db250ZXh0TG9zdCgpCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0TG9zdENhbGxiYWNr
KQotICAgICAgICAgICAgbV9jb250ZXh0TG9zdENhbGxiYWNrLT5vbkNvbnRleHRMb3N0KCk7Ci0g
ICAgfQotcHJpdmF0ZToKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0
Q2FsbGJhY2s+IG1fY29udGV4dExvc3RDYWxsYmFjazsKLX07Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8R3JhcGhpY3ND
b250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IGNhbGxiYWNrKQotewotICAgIG1fY29udGV4
dExvc3RDYWxsYmFja0FkYXB0ZXIgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RDb250
ZXh0TG9zdENhbGxiYWNrQWRhcHRlcihjYWxsYmFjaykpOwotICAgIG1faW1wbC0+c2V0Q29udGV4
dExvc3RDYWxsYmFjayhtX2NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyLmdldCgpKTsKLX0KLQot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0RFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIgOiBwdWJs
aWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NFcnJvck1lc3NhZ2VD
YWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RFcnJvck1lc3NhZ2VDYWxs
YmFja0FkYXB0ZXIoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2Fs
bGJhY2s+IGNhbGxiYWNrKQotICAgICAgICA6IG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2soY2FsbGJh
Y2spIHsgfQotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJh
Y2tBZGFwdGVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25FcnJvck1lc3NhZ2UoY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmIG1lc3NhZ2UsIFdlYktpdDo6V0dDM0RpbnQgaWQpCi0gICAgewot
ICAgICAgICBpZiAobV9lcnJvck1lc3NhZ2VDYWxsYmFjaykKLSAgICAgICAgICAgIG1fZXJyb3JN
ZXNzYWdlQ2FsbGJhY2stPm9uRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIGlkKTsKLSAgICB9Ci1wcml2
YXRlOgotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
IG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2s7Ci19OwotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQz
RDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+IGNhbGxiYWNrKQotewotICAgIG1fZXJyb3JNZXNzYWdl
Q2FsbGJhY2tBZGFwdGVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNERXJyb3JNZXNz
YWdlQ2FsbGJhY2tBZGFwdGVyKGNhbGxiYWNrKSk7Ci0gICAgbV9pbXBsLT5zZXRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhtX2Vycm9yTWVzc2FnZUNhbGxiYWNrQWRhcHRlci5nZXQoKSk7Ci19Ci0KLUV4
dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRFeHRlbnNpb25zKCkKLXsK
LSAgICBpZiAoIW1fZXh0ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIo
bmV3IEV4dGVuc2lvbnMzRENocm9taXVtKHRoaXMpKTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25z
LmdldCgpOwotfQotCi1uYW1lc3BhY2UgewotCi12b2lkIHNwbGl0U3RyaW5nSGVscGVyKGNvbnN0
IFN0cmluZyYgc3RyLCBIYXNoU2V0PFN0cmluZz4mIHNldCkKLXsKLSAgICBWZWN0b3I8U3RyaW5n
PiBzdWJzdHJpbmdzOwotICAgIHN0ci5zcGxpdCgiICIsIHN1YnN0cmluZ3MpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3Vic3RyaW5ncy5zaXplKCk7ICsraSkKLSAgICAgICAgc2V0LmFk
ZChzdWJzdHJpbmdzW2ldKTsKLX0KLQotU3RyaW5nIG1hcEV4dGVuc2lvbk5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0
IgotICAgICAgICB8fCBuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
Ci0gICAgICAgIHJldHVybiAiR0xfQ0hST01JVU1fZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiOwot
ICAgIHJldHVybiBuYW1lOwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmluaXRpYWxpemVFeHRlbnNpb25zKCkKLXsKLSAgICBp
ZiAobV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICBib29sIHN1
Y2Nlc3MgPSBtX2ltcGwtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVChzdWNjZXNz
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBleHRl
bnNpb25zU3RyaW5nID0gbV9pbXBsLT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OkVYVEVO
U0lPTlMpOwotICAgIHNwbGl0U3RyaW5nSGVscGVyKGV4dGVuc2lvbnNTdHJpbmcsIG1fZW5hYmxl
ZEV4dGVuc2lvbnMpOwotCi0gICAgU3RyaW5nIHJlcXVlc3RhYmxlRXh0ZW5zaW9uc1N0cmluZyA9
IG1faW1wbC0+Z2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hST01JVU0oKTsKLSAgICBzcGxpdFN0
cmluZ0hlbHBlcihyZXF1ZXN0YWJsZUV4dGVuc2lvbnNTdHJpbmcsIG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zKTsKLX0KLQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c3VwcG9ydHNF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGluaXRpYWxpemVFeHRlbnNpb25z
KCk7Ci0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBFeHRlbnNpb25OYW1lKG5hbWUpOwotICAg
IHJldHVybiBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUpIHx8IG1fcmVx
dWVzdGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUpOwotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6ZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpCi17Ci0gICAgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKLQotICAgIFN0cmluZyBtYXBw
ZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKLSAgICBpZiAobV9lbmFibGVkRXh0ZW5z
aW9ucy5jb250YWlucyhtYXBwZWROYW1lKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAobV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobWFwcGVkTmFtZSkpIHsKLSAgICAg
ICAgbV9pbXBsLT5yZXF1ZXN0RXh0ZW5zaW9uQ0hST01JVU0obWFwcGVkTmFtZS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgICAgIG1fZW5hYmxlZEV4dGVuc2lvbnMuY2xlYXIoKTsKLSAgICAgICAgbV9y
ZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY2xlYXIoKTsKLSAgICAgICAgbV9pbml0aWFsaXplZEF2YWls
YWJsZUV4dGVuc2lvbnMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbml0aWFsaXplRXh0ZW5zaW9u
cygpOwotICAgIHJldHVybiBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5hbWUp
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNFeHRlbnNpb25FbmFibGVk
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwotICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKLSAgICByZXR1cm4g
bV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKTsKLX0KLQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNSZXNvdXJjZVNhZmUoKQotewotICAgIGlmIChtX3Jl
c291cmNlU2FmZXR5ID09IFJlc291cmNlU2FmZXR5VW5rbm93bikKLSAgICAgICAgbV9yZXNvdXJj
ZVNhZmV0eSA9IGdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9yZXNvdXJj
ZV9zYWZlIikgPyBSZXNvdXJjZVNhZmUgOiBSZXNvdXJjZVVuc2FmZTsKLSAgICByZXR1cm4gbV9y
ZXNvdXJjZVNhZmV0eSA9PSBSZXNvdXJjZVNhZmU7Ci19Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDNETWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIgOiBwdWJsaWMgV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uQ2hhbmdl
ZENhbGxiYWNrQ0hST01JVU0gewotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNETWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIoUGFzc093blB0cjxFeHRlbnNpb25zM0RD
aHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPiBjYWxs
YmFjaykKLSAgICAgICAgOiBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2soY2FsbGJh
Y2spIHsgfQotCi0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcigpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIG9uTWVtb3J5
QWxsb2NhdGlvbkNoYW5nZWQoc2l6ZV90IGdwdVJlc291cmNlU2l6ZUluQnl0ZXMpCi0gICAgewot
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBjbGllbnRzIHN0YXJ0IHVzaW5nIFdl
YkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBleGNsdXNpdmVseS4KLSAgICAgICAgb25NZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZChXZWJLaXQ6OldlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbihncHVS
ZXNvdXJjZVNpemVJbkJ5dGVzLCB0cnVlKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIG9u
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoV2ViS2l0OjpXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRp
b24gYWxsb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChtX21lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2spCi0gICAgICAgICAgICBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJh
Y2stPm9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoRXh0ZW5zaW9uczNEQ2hyb21pdW06Okdw
dU1lbW9yeUFsbG9jYXRpb25DSFJPTUlVTShhbGxvY2F0aW9uLmdwdVJlc291cmNlU2l6ZUluQnl0
ZXMsIGFsbG9jYXRpb24uc3VnZ2VzdEhhdmVCYWNrYnVmZmVyKSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIE93blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0NIUk9NSVVNPiBtX21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2s7
Ci19OwotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0R3B1TWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKFBhc3NPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21p
dW06OkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTT4gY2FsbGJhY2sp
Ci17Ci0gICAgbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlciA9IGFkb3B0
UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tB
ZGFwdGVyKGNhbGxiYWNrKSk7Ci0gICAgbV9pbXBsLT5zZXRNZW1vcnlBbGxvY2F0aW9uQ2hhbmdl
ZENhbGxiYWNrQ0hST01JVU0obV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRl
ci5nZXQoKSk7Ci19Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0
ZUNhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpX
ZWJHcmFwaGljc1N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNIHsKLXB1YmxpYzoK
LSAgICBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIo
UGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxi
YWNrQ0hST01JVU0+IGNhbGxiYWNrKQotICAgICAgICA6IG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNh
bGxiYWNrKGNhbGxiYWNrKSB7IH0KLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzRFN3YXBC
dWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBv
blN3YXBCdWZmZXJzQ29tcGxldGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1fc3dhcEJ1ZmZlcnND
b21wbGV0ZUNhbGxiYWNrKQotICAgICAgICAgICAgbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2stPm9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPd25Q
dHI8RXh0ZW5zaW9uczNEQ2hyb21pdW06OlN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9N
SVVNPiBtX3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFjazsKLX07Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpzZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQ
YXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2tDSFJPTUlVTT4gY2FsbGJhY2spCi17Ci0gICAgbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2tBZGFwdGVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21w
bGV0ZUNhbGxiYWNrQWRhcHRlcihjYWxsYmFjaykpOwotICAgIG1faW1wbC0+c2V0U3dhcEJ1ZmZl
cnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tB
ZGFwdGVyLmdldCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmYTcwOTJmNmU3NjEzMmIzMjZjNzNiYmI2ODM5
NDg2YjI1NGQzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGVfaAotI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAotCi0j
aW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgotI2luY2x1ZGUgIlNrQml0bWFwLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0K
LWNsYXNzIEdyQ29udGV4dDsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJHcmFwaGlj
c0NvbnRleHQzRDsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEcmF3aW5nQnVm
ZmVyOwotY2xhc3MgRXh0ZW5zaW9uczNEQ2hyb21pdW07Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQz
RENvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RFcnJv
ck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRE1lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RT
d2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwotCi1jbGFzcyBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUgewotcHVibGljOgotICAgIC8vIENhbGxlcnMgbXVzdCBtYWtlIHRoZSBjb250
ZXh0IGN1cnJlbnQgYmVmb3JlIHVzaW5nIGl0IEFORCBjaGVjayB0aGF0IHRoZSBjb250ZXh0IHdh
cyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQotICAgIC8vIHZpYSBDb250ZXh0TG9zdCBiZWZvcmUgdXNp
bmcgdGhlIGNvbnRleHQgaW4gYW55IHdheS4gT25jZSBtYWRlIGN1cnJlbnQgb24gYSB0aHJlYWQs
IHRoZSBjb250ZXh0IGNhbm5vdAotICAgIC8vIGJlIHVzZWQgb24gYW55IG90aGVyIHRocmVhZC4K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlR3JhcGhpY3ND
b250ZXh0RnJvbVdlYkNvbnRleHQoUGFzc093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlLCBib29sIHByZXNlcnZlRHJhd2lu
Z0J1ZmZlciA9IGZhbHNlKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcm92aWRlIGFj
Y2VzcyB0byB0aGUgbG93ZXItbGV2ZWwgV2ViR3JhcGhpY3NDb250ZXh0M0QsCi0gICAgLy8gd2hp
Y2ggaXMgbmVlZGVkIGZvciBzdWJvcmRpbmF0ZSBjb250ZXh0cyBsaWtlIFdlYkdMJ3MgdG8gc2hh
cmUgcmVzb3VyY2VzCi0gICAgLy8gd2l0aCB0aGUgY29tcG9zaXRvcidzIGNvbnRleHQuCi0gICAg
c3RhdGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGV4dHJhY3RXZWJHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRCopOwotCi0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCk7Ci0KLSAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJD
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9Ci0KLSAgICBHckNvbnRleHQq
IGdyQ29udGV4dCgpOwotCi0gICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICBib29s
IGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OwotICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgp
OwotCi0gICAgdm9pZCBwYWludEZyYW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIq
KTsKLQotICAgIHZvaWQgc2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrPik7Ci0gICAgdm9pZCBzZXRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxs
YmFjaz4pOwotCi0gICAgLy8gRXh0ZW5zaW9uczNEIHN1cHBvcnQuCi0gICAgRXh0ZW5zaW9uczNE
KiBnZXRFeHRlbnNpb25zKCk7Ci0gICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJp
bmcmIG5hbWUpOwotICAgIGJvb2wgZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpOwotICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSk7
Ci0KLSAgICBib29sIGlzUmVzb3VyY2VTYWZlKCk7Ci0KLSAgICAvLyBHTF9DSFJPTUlVTV9ncHVf
bWVtb3J5X21hbmFnZXIKLSAgICB2b2lkIHNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0+KTsKLQotICAgIC8vIEdMX0NIUk9NSVVN
X3N3YXBidWZmZXJzX2NvbXBsZXRlX2NhbGxiYWNrCi0gICAgdm9pZCBzZXRTd2FwQnVmZmVyc0Nv
bXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpT
d2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4pOwotCi0gICAgYm9vbCBwcmVzZXJ2
ZURyYXdpbmdCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcjsg
fQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShQYXNzT3duUHRyPFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+LCBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlcik7
Ci0KLSAgICB2b2lkIGluaXRpYWxpemVFeHRlbnNpb25zKCk7Ci0KLSAgICBPd25QdHI8V2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gbV9pbXBsOwotICAgIE93blB0cjxFeHRlbnNpb25zM0RD
aHJvbWl1bT4gbV9leHRlbnNpb25zOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRENvbnRl
eHRMb3N0Q2FsbGJhY2tBZGFwdGVyPiBtX2NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyOwotICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzREVycm9yTWVzc2FnZUNhbGxiYWNrQWRhcHRlcj4gbV9l
cnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNE
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI+IG1fbWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEU3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcj4gbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2Fs
bGJhY2tBZGFwdGVyOwotICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7
Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fZW5hYmxlZEV4dGVuc2lvbnM7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zOwotICAgIGJvb2wgbV9sYXllckNvbXBvc2l0
ZWQ7Ci0gICAgYm9vbCBtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcjsKLQotICAgIGVudW0gUmVzb3Vy
Y2VTYWZldHkgewotICAgICAgICBSZXNvdXJjZVNhZmV0eVVua25vd24sCi0gICAgICAgIFJlc291
cmNlU2FmZSwKLSAgICAgICAgUmVzb3VyY2VVbnNhZmUKLSAgICB9OwotICAgIFJlc291cmNlU2Fm
ZXR5IG1fcmVzb3VyY2VTYWZldHk7Ci0KLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBv
ZiB0aGUgQ2FudmFzJ3MgYmFja2luZyBzdG9yZSBkb24ndAotICAgIC8vIG1hdGNoIHRob3NlIHRo
YXQgd2Ugd2VyZSBnaXZlbiBpbiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0bwotICAgIC8vIHJlc2hh
cGUoKSwgdGhlbiB3ZSBuZWVkIGFuIGludGVybWVkaWF0ZSBiaXRtYXAgdG8gcmVhZCBiYWNrIHRo
ZQotICAgIC8vIGZyYW1lIGJ1ZmZlciBpbnRvLiBUaGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIENT
UyBzdHlsZXMgYXJlCi0gICAgLy8gdXNlZCB0byByZXNpemUgdGhlIENhbnZhcy4KLSAgICBTa0Jp
dG1hcCBtX3Jlc2l6aW5nQml0bWFwOwotCi0gICAgR3JDb250ZXh0KiBtX2dyQ29udGV4dDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZV9oCg==
</data>
<flag name="review"
          id="153404"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>