<?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>44148</bug_id>
          
          <creation_ts>2010-08-17 19:28:29 -0700</creation_ts>
          <short_desc>[chromium] Composited layers should handle their own drawing</short_desc>
          <delta_ts>2010-08-19 17:47:09 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vangelis Kokkevis">vangelis</reporter>
          <assigned_to name="Vangelis Kokkevis">vangelis</assigned_to>
          <cc>amarinichev</cc>
    
    <cc>hclam</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vrk</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>265906</commentid>
    <comment_count>0</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-17 19:28:29 -0700</bug_when>
    <thetext>As the code currently stands, LayerRendererChromium (the compositor) handles the rendering of all the various layer types. It handles setting the shader for each layer, binding a _single_ texture and rendering a quad for it. As more and more layer types are added, this architecture proves rather limiting. For example: 
* The video layer now needs to use 3 textures for the color space conversion and there&apos;s no easy way to accommodate them
* Layers making use of masks require multiple textures

In addition, with each special layer type, new cruft is added to the compositor&apos;s draw code to accommodate for any special rendering needs. The end result is a complex and difficult to maintain draw logic which all lives in the compositor.

The proposed solution is to move the layer drawing code into the actual layer classes so that each layer type is free to setup its own shader and textures.  This will greatly simplify the compositor code and make it more extensible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265923</commentid>
    <comment_count>1</comment_count>
      <attachid>64665</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-17 20:37:46 -0700</bug_when>
    <thetext>Created attachment 64665
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265925</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-17 20:41:19 -0700</bug_when>
    <thetext>Attachment 64665 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/chromium/LayerRendererChromium.h:58:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266236</commentid>
    <comment_count>3</comment_count>
      <attachid>64734</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-18 10:51:48 -0700</bug_when>
    <thetext>Created attachment 64734
Proposed patch - fixed style issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266470</commentid>
    <comment_count>4</comment_count>
      <attachid>64734</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-18 17:19:43 -0700</bug_when>
    <thetext>Comment on attachment 64734
Proposed patch - fixed style issue

The code reorganization looks good in general. Trusting that your testing covers the changes since it&apos;s impossible for a review to catch all issues in a change this large.

A few mostly stylistic issues.

The naming of CanvasLayerChromium::CanvasLayerSharedValues, ContentLayerChromium::ContentLayerSharedValues and LayerChromium::SharedValues is inconsistent. Given that you already have scoping within the class, I recommend renaming them all to SharedValues. These should all be structs, not classes, and though this isn&apos;t mentioned in the WebKit coding guidelines, the members shouldn&apos;t have the &quot;m_&quot; prefix.

WebCore/platform/graphics/chromium/LayerRendererChromium.h:153
 +      CanvasLayerChromium::CanvasLayerSharedValues m_canvasLayerSharedValues;
I recommend changing these to OwnPtr&lt;T&gt;, and instantiating them in LayerRendererChromium::initializeSharedObjects. (For example: m_layerSharedValues = adoptPtr(new LayerChromium::SharedValues()).) This will let you make the OpenGL context current before initializing them. You can then clear out the OwnPtrs in cleanupSharedObjects, again giving you the chance to make the OpenGL context current. Then you can move the logic in initializeSharedObjects and cleanupSharedObjects in the LayerChromium subclasses into the constructors and destructors of the SharedValues structs. This will encapsulate this logic more cleanly.


WebCore/platform/graphics/chromium/LayerRendererChromium.h:159
 +  #define GLC(x) { x, LayerRendererChromium::debugGLCall(#x, __FILE__, __LINE__); }
Does this macro definition style handle the trailing semicolon at the invocations on all platforms? Could you use it with assignments (like &quot;GLC(val = glGetUniformLocation(...))&quot;)? Do you need to parenthesize (x) as I believe is common in some macros?


WebCore/platform/graphics/chromium/LayerChromium.h:202
 +      static const unsigned m_texCoordAttribLocation;
These should be prefixed with s_.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266555</commentid>
    <comment_count>5</comment_count>
      <attachid>64810</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-18 22:55:28 -0700</bug_when>
    <thetext>Created attachment 64810
Proposed patch addressing review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266559</commentid>
    <comment_count>6</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-18 22:59:32 -0700</bug_when>
    <thetext>Thanks for the review and sorry about the size of this beast.

(In reply to comment #4)
&gt; (From update of attachment 64734 [details])
&gt; The code reorganization looks good in general. Trusting that your testing covers the changes since it&apos;s impossible for a review to catch all issues in a change this large.
&gt; 
&gt; A few mostly stylistic issues.
&gt; 
&gt; The naming of CanvasLayerChromium::CanvasLayerSharedValues, ContentLayerChromium::ContentLayerSharedValues and LayerChromium::SharedValues is inconsistent. Given that you already have scoping within the class, I recommend renaming them all to SharedValues. These should all be structs, not classes, and though this isn&apos;t mentioned in the WebKit coding guidelines, the members shouldn&apos;t have the &quot;m_&quot; prefix.

Done. Classes renamed to SharedValues. I did however keep them as classes, made all the members private and added accessors for them.  That way, code using the shared values cannot inadvertently change them.

&gt; 
&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.h:153
&gt;  +      CanvasLayerChromium::CanvasLayerSharedValues m_canvasLayerSharedValues;
&gt; I recommend changing these to OwnPtr&lt;T&gt;, and instantiating them in LayerRendererChromium::initializeSharedObjects. (For example: m_layerSharedValues = adoptPtr(new LayerChromium::SharedValues()).) This will let you make the OpenGL context current before initializing them. You can then clear out the OwnPtrs in cleanupSharedObjects, again giving you the chance to make the OpenGL context current. Then you can move the logic in initializeSharedObjects and cleanupSharedObjects in the LayerChromium subclasses into the constructors and destructors of the SharedValues structs. This will encapsulate this logic more cleanly.

I like this idea a lot. I eliminated the initialize/cleanupSharedObjects method and added the logic in the SharedValues constructor/destructor.

&gt; 
&gt; 
&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.h:159
&gt;  +  #define GLC(x) { x, LayerRendererChromium::debugGLCall(#x, __FILE__, __LINE__); }
&gt; Does this macro definition style handle the trailing semicolon at the invocations on all platforms? Could you use it with assignments (like &quot;GLC(val = glGetUniformLocation(...))&quot;)? Do you need to parenthesize (x) as I believe is common in some macros?
&gt; 

I parenthesized (x) so now expressions of the type GLC(x = gl*()) work.  Trailing semicolon seems to compile fine with both GCC and msvc.

&gt; 
&gt; WebCore/platform/graphics/chromium/LayerChromium.h:202
&gt;  +      static const unsigned m_texCoordAttribLocation;
&gt; These should be prefixed with s_.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266868</commentid>
    <comment_count>7</comment_count>
      <attachid>64810</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-19 11:47:42 -0700</bug_when>
    <thetext>Comment on attachment 64810
Proposed patch addressing review comments

Looks good. r=me. I noticed that the method list in the ChangeLog is slightly out of date; this isn&apos;t critical, but you can fix this by saving off your text edits to the ChangeLog, svn reverting it, and running prepare-ChangeLog again. Feel free to commit using webkit-patch after this rather than submitting another patch for the commit queue. Removing cq? since you are a committer and can set it yourself if you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267091</commentid>
    <comment_count>8</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-08-19 17:47:09 -0700</bug_when>
    <thetext>Committed r65717: &lt;http://trac.webkit.org/changeset/65717&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64665</attachid>
            <date>2010-08-17 20:37:46 -0700</date>
            <delta_ts>2010-08-18 10:51:48 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>restructureCompositor_44148_2.txt</filename>
            <type>text/plain</type>
            <size>107356</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTU4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTExIEBACisyMDEwLTA4LTE3ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlz
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbY2hyb21pdW1dIFJlYXJyYW5naW5nIHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
ZyBjb2RlIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgbGF5ZXIgcmVuZGVyaW5nIGxvZ2ljIG5vdyBs
aXZlcyBpbiB0aGUgbGF5ZXIgY2xhc3NlcyByYXRoZXIgdGhhbiB0aGUKKyAgICAgICAgY29tcG9z
aXRvci4gVGhpcyBsaWZ0cyB0aGUgcmVzdHJpY3Rpb24gb2YgaGF2aW5nIG9uZSB0ZXh0dXJlIHBl
ciBsYXllcgorICAgICAgICBhbmQgc2lnbmlmaWNhbnRseSBjbGVhbnMgdXAgdGhlIGNvbXBvc2l0
b3IgY29kZS4gVGhpcyBjaGFuZ2UgbW9zdGx5CisgICAgICAgIHJlc3VsdGVkIGluIGEgbG90IG9m
IGNvZGUgbW92aW5nIGFyb3VuZCBmaWxlcy4gTm90ZXdvcnRoeSBjaGFuZ2VzCisgICAgICAgIGlu
Y2x1ZGU6CisgICAgICAgICogTWFkZSBMYXllckNocm9taXVtIGEgcHJvcGVyIGJhc2VkIGNsYXNz
IGZvciBsYXllcnMgdGhhdCBtb3N0bHkgaGFuZGxlcworICAgICAgICAgIHRoZSB1cGRhdGVzIHRv
IHRoZSBsYXllciBwcm9wZXJ0aWVzIGFuZCBzdXBlcmxheWVyIC8gc3VibGF5ZXIgdXBkYXRlcy4K
KyAgICAgICAgKiBJbnRyb2R1Y2VkIGEgbmV3IGxheWVyIHR5cGUsIENvbnRlbnRMYXllckNocm9t
aXVtLCB3aGljaCBoYW5kbGVzCisgICAgICAgICAgbGF5ZXJzIHRoYXQgcmVxdWlyZSBhIEdyYXBo
aWNzQ29udGV4dCB0byByZW5kZXIgdGhlaXIgY29udGVudC4KKyAgICAgICAgKiBJbWFnZUxheWVy
Q2hyb21pdW0gYW5kIFZpZGVvTGF5ZXJDaHJvbWl1bSBub3cgZGVyaXZlIGZyb20KKyAgICAgICAg
ICBDb250ZW50TGF5ZXJDaHJvbWl1bSBhcyB0aGV5IHNoYXJlIHRoZSBzYW1lIHNoYWRlciBhbmQg
ZHJhdyBmdW5jdGlvbi4KKyAgICAgICAgKiBSZW1vdmVkIFRyYW5zZm9ybUxheWVyQ2hyb21pdW0g
YXMgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgbm93IHJlcGxhY2VkIGJ5CisgICAgICAgICAgdGhlIGJh
c2UgTGF5ZXJDaHJvbWl1bSBjbGFzcy4KKyAgICAgICAgKiBSZS1hcnJhbmdlZCB0aGUgb3JkZXIg
aW4gd2hpY2ggdGhlIG1lbWJlcnMgb2YgTGF5ZXJDaHJvbWl1bSBhcmUgZGVmaW5lZAorICAgICAg
ICAgIGluIHRoZSBoZWFkZXIgZmlsZSB0byBmb3JtIGEgbW9yZSByZWFzb25hYmxlIGxvZ2ljYWwg
Z3JvdXBpbmcuCisgICAgICAgICogQ2hhbmdlZCBMYXllclJlbmRlcmVyQ2hyb21pdW0gdG8gdXNl
IHRoZSBzaGFkZXIgY3JlYXRpb24gYW5kIGRyYXdpbmcKKyAgICAgICAgICBtZXRob2RzIGRlZmlu
ZWQgaW4gdGhlIGxheWVyIGNsYXNzZXMuIEFzIGEgcmVzdWx0LCBhIGxvdCBvZiBHTCBjb2RlIHdh
cworICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgaW1wbGVtZW50YXRpb24gZmlsZS4KKyAgICAg
ICAgKiBFbGltaW5hdGVkIHJhbmRvbWx5IGRpc3BlcnNlZCBjYWxscyB0byBjaGVjayBmb3IgR0wg
ZXJyb3JzIGJ5IGEgbWFjcm8gKEdMQykKKyAgICAgICAgICB3aGljaCBhbGxvd3MgdHVybmluZyBl
cnJvciB0ZXN0aW5nIG9uL29mZiB3aXRoIGEgc2luZ2xlIGRlZmluZSAoREVCVUdfR0xfQ0FMTFMK
KyAgICAgICAgICBkZWZpbmVkIGluIExheWVyUmVuZGVyZXJDaHJvbWl1bS5oKQorICAgICAgICAq
IFJlcGxhY2VkIHRoZSBwcmV2aW91cyBsYXllciByZW5kZXIgbG9vcCB3aXRoIHR3byB0cmF2ZXJz
YWxzIG9mIHRoZSBsYXllcgorICAgICAgICAgIGhpZXJhcmNoeSwgdGhlIGZpcnN0IHRvIHVwZGF0
ZSB0cmFuc2Zvcm1zIGFuZCBvcGFjaXR5IHZhbHVlcyBhbmQgdGhlCisgICAgICAgICAgc2Vjb25k
IHRvIHJlbmRlciB0aGUgbGF5ZXJzLiBFbGltaW5hdGVkIGdsb2JhbCBaIHNvcnRpbmcgb2YgYWxs
IGxheWVycyBhcworICAgICAgICAgIGl0IHdhcyB3cm9uZy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTQ4CisKKyAgICAgICAgVGVzdDogVmVyaWZp
ZWQgdGhhdCBwYWdlcyB1c2luZyB0aGUgY29tcG9zaXRvciBhbmQgY29tcG9zaXRvcgorICAgICAg
ICAgICAgICBsYXlvdXQgdGVzdHMgaGF2ZSBub3QgcmVncmVzc2VkLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6
Q2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXM6OkNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06
OkNvbnRlbnRMYXllclNoYXJlZFZhbHVlczo6Q29udGVudExheWVyU2hhcmVkVmFsdWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmluaXRpYWxpemVT
aGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpj
bGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hy
b21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnRvR0xNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
ZHJhd1RleHR1cmVkUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3
RGVidWdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6
ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51
cFNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHJlcGFy
ZUZvckRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmdldFN1YmxheWVycyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpjb250ZW50c0RpcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmxheWVyUmVuZGVy
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjcmVhdGVMYXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tUZXh0dXJlU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpwcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6bGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjYW52YXNMYXllclNoYXJlZFZhbHVlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3Jt
TGF5ZXJDaHJvbWl1bS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xh
eWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRl
b0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oOgorCiAyMDEwLTA4LTE3ICBBcml5
YSBIaWRheWF0ICA8YXJpeWFAc2VuY2hhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRv
bmlvIEdvbWVzLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY1NTcyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTIyMjksNiArMjIyOSw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAnLApAQCAtMjI2
OCw4ICsyMjcwLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsaW5nRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxpbmdEYXRhLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBl
ci5jcHAnLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2NTU3MikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxOCBAQAogI2luY2x1ZGUgIkNhbnZhc0xheWVy
Q2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdW5zaWduZWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6bV9zaGFkZXJQ
cm9ncmFtSWQgPSAwOworQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJTaGFyZWRWYWx1
ZXM6OkNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKCkKKyAgICA6IG1fY2FudmFzU2hhZGVyUHJvZ3Jh
bSgwKQorICAgICwgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyU2Ft
cGxlckxvY2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9uKC0xKQoreworfQog
CiBQYXNzUmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IENhbnZhc0xheWVyQ2hyb21pdW06OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogewpAQCAtNTQsMTQgKzYxLDggQEAg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1bQogewogfQogCi11bnNpZ25l
ZCBDYW52YXNMYXllckNocm9taXVtOjp0ZXh0dXJlSWQoKQotewotICAgIHJldHVybiBtX3RleHR1
cmVJZDsKLX0KLQotdm9pZCBDYW52YXNMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVu
dHModW5zaWduZWQgdGV4dHVyZUlkKQordm9pZCBDYW52YXNMYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50cygpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmVJZCA9PSBtX3RleHR1cmVJZCk7CiAgICAg
QVNTRVJUKG1fY29udGV4dCk7CiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKICAgICAgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CkBAIC05Miw1ICs5Myw2
NSBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uCiAgICAgbV90ZXh0
dXJlSWQgPSB0ZXh0dXJlSWQ7CiB9CiAKK3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdygp
Cit7CisgICAgQ2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJlcigpLT5j
YW52YXNMYXllclNoYXJlZFZhbHVlcygpOworICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJF
MCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAg
bGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPm1fY2FudmFzU2hhZGVyUHJvZ3JhbSk7Cisg
ICAgR0xDKGdsVW5pZm9ybTFpKHN2LT5tX3NoYWRlclNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAg
IGRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRy
YXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJv
dW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3Yt
Pm1fc2hhZGVyTWF0cml4TG9jYXRpb24sIHN2LT5tX3NoYWRlckFscGhhTG9jYXRpb24pOworfQor
Citib29sIENhbnZhc0xheWVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKENhbnZh
c0xheWVyU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICBjaGFyIHZlcnRleFNoYWRlclN0cmluZ1td
ID0KKyAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAgICAgICJh
dHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQ0IG1h
dHJpeDsgICAgICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAg
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24g
PSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4
Q29vcmQ7ICAgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsK
KworICAgIC8vIENhbnZhcyBsYXllcnMgbmVlZCB0byBiZSBmbGlwcGVkIHZlcnRpY2FsbHkgYW5k
IHRoZWlyIGNvbG9ycyBzaG91bGRuJ3QgYmUKKyAgICAvLyBzd2l6emxlZC4KKyAgICBjaGFyIGZy
YWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZf
dGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9y
bSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAg
ICAidW5pZm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJE
KHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIDEuMCAtIHZfdGV4Q29vcmQueSkpOyBcbiIK
KyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0
ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBzdi0+
bV9jYW52YXNTaGFkZXJQcm9ncmFtID0gY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJT
dHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIXN2LT5tX2NhbnZhc1NoYWRl
clByb2dyYW0pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDYW52YXNMYXllckNocm9taXVtOiBGYWls
ZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBzdi0+bV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihzdi0+bV9jYW52YXNTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgc3YtPm1f
c2hhZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihzdi0+bV9jYW52YXNT
aGFkZXJQcm9ncmFtLCAibWF0cml4Iik7CisgICAgc3YtPm1fc2hhZGVyQWxwaGFMb2NhdGlvbiA9
IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHN2LT5tX2NhbnZhc1NoYWRlclByb2dyYW0sICJhbHBoYSIp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFNoYXJlZE9iamVjdHMoQ2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMqIHN2KQoreworICAgIGlm
IChzdi0+bV9jYW52YXNTaGFkZXJQcm9ncmFtKSB7CisgICAgICAgIEdMQyhnbERlbGV0ZVByb2dy
YW0oc3YtPm1fY2FudmFzU2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBzdi0+bV9jYW52YXNTaGFk
ZXJQcm9ncmFtID0gMDsKKyAgICB9Cit9CisKKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNCArNDUsMjMgQEAgY2xhc3MgQ2FudmFzTGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBMYXllcgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZh
c0xheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7
CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQot
ICAgIHZpcnR1YWwgYm9vbCBvd25zVGV4dHVyZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIHRleHR1cmVJZCgpOwotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hhZGVyUHJvZ3JhbUlk
KCkgeyByZXR1cm4gbV9zaGFkZXJQcm9ncmFtSWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOwogCiAgICAgdm9pZCBzZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKIAotICAgIHN0YXRpYyB2b2lk
IHNldFNoYWRlclByb2dyYW1JZCh1bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQpIHsgbV9zaGFkZXJQ
cm9ncmFtSWQgPSBzaGFkZXJQcm9ncmFtSWQ7IH0KKyAgICBjbGFzcyBDYW52YXNMYXllclNoYXJl
ZFZhbHVlcyB7CisgICAgcHVibGljOgorICAgICAgICBDYW52YXNMYXllclNoYXJlZFZhbHVlcygp
OworCisgICAgICAgIHVuc2lnbmVkIG1fY2FudmFzU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgaW50
IG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uOworICAgICAgICBpbnQgbV9zaGFkZXJNYXRyaXhMb2Nh
dGlvbjsKKyAgICAgICAgaW50IG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsKKyAgICB9OworCisgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoQ2FudmFzTGF5ZXJTaGFyZWRWYWx1
ZXMqKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cyhDYW52YXNMYXllclNo
YXJlZFZhbHVlcyopOwogCiAgICAgY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFjayA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgpAQCAtNjYsOCArNzUsNiBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKICAg
ICBPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFjaz4gbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNr
OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOwogfTsKIAogfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorCisj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCisKKyNpZiBQTEFURk9STShTS0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJza2lhL2V4
dC9wbGF0Zm9ybV9jYW52YXMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXll
clNoYXJlZFZhbHVlczo6Q29udGVudExheWVyU2hhcmVkVmFsdWVzKCkKKyAgICA6IG1fY29udGVu
dFNoYWRlclByb2dyYW0oMCkKKyAgICAsIG1fc2hhZGVyTWF0cml4TG9jYXRpb24oLTEpCisgICAg
LCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyQWxwaGFMb2NhdGlv
bigtMSkKK3sKK30KKworUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExh
eWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpKTsKK30KKwor
Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIpCisgICAgOiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9jb250
ZW50c1RleHR1cmUoMCkKK3sKK30KKworQ29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5
ZXJDaHJvbWl1bSgpCit7CisgICAgaWYgKG1fY29udGVudHNUZXh0dXJlKQorICAgICAgICBHTEMo
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb250ZW50c1RleHR1cmUpKTsKK30KKworYm9vbCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoQ29udGVudExheWVyU2hh
cmVkVmFsdWVzKiBzdikKK3sKKyAgICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBsYXllciBj
b250ZW50cy4KKyAgICBjaGFyIHZlcnRleFNoYWRlclN0cmluZ1tdID0KKyAgICAgICAgImF0dHJp
YnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Rl
eENvb3JkOyAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIK
KyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgXG4iCisgICAgICAgICJ2b2lk
IG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0
aW9uOyBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAgXG4iCisgICAg
ICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIC8vIE5vdGUgZGlm
ZmVyZW5jZXMgYmV0d2VlbiBTa2lhIGFuZCBDb3JlIEdyYXBoaWNzIHZlcnNpb25zOgorICAgIC8v
ICAtIFNraWEgdXNlcyBCR1JBIGFuZCBvcmlnaW4gaXMgdXBwZXIgbGVmdAorICAgIC8vICAtIENv
cmUgR3JhcGhpY3MgdXNlcyBSR0JBIGFuZCBvcmlnaW4gaXMgbG93ZXIgbGVmdAorICAgIGNoYXIg
ZnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIg
dl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlm
b3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAg
ICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgIiAgdmVj
NCB0ZXhDb2xvciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpOyBcbiIKKyAgICAg
ICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci56LCB0ZXhDb2xvci55LCB0ZXhDb2xv
ci54LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgICAg
ICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3Jk
LngsIDEuMCAtIHZfdGV4Q29vcmQueSkpOyBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0g
dmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFs
cGhhOyBcbiIKKyNlbHNlCisjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRm
b3JtLiIKKyNlbmRpZgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIHN2LT5tX2NvbnRlbnRTaGFkZXJQcm9ncmFt
ID0gY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVy
U3RyaW5nKTsKKyAgICBpZiAoIXN2LT5tX2NvbnRlbnRTaGFkZXJQcm9ncmFtKSB7CisgICAgICAg
IExPR19FUlJPUigiQ29udGVudExheWVyQ2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVy
IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN2LT5tX3No
YWRlclNhbXBsZXJMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHN2LT5tX2NvbnRlbnRT
aGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgc3YtPm1fc2hhZGVyTWF0cml4TG9jYXRp
b24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihzdi0+bV9jb250ZW50U2hhZGVyUHJvZ3JhbSwgIm1h
dHJpeCIpOworICAgIHN2LT5tX3NoYWRlckFscGhhTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihzdi0+bV9jb250ZW50U2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVj
dHMoQ29udGVudExheWVyU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICBpZiAoc3YtPm1fY29udGVu
dFNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgR0xDKGdsRGVsZXRlUHJvZ3JhbShzdi0+bV9jb250
ZW50U2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBzdi0+bV9jb250ZW50U2hhZGVyUHJvZ3JhbSA9
IDA7CisgICAgfQorfQorCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50
cygpCit7CisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyTGF5ZXJCYWNraW5nKj4obV9vd25lci0+Y2xpZW50KCkpOworICAgIGlmICghYmFja2luZyB8
fCBiYWNraW5nLT5wYWludGluZ0dvZXNUb1dpbmRvdygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQoZHJhd3NDb250ZW50KCkpOworCisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7
CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUg
aW1wbGVtZW50ZWQuCisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKyAgICBpZiAoIWxheWVyUmVu
ZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShtX2JvdW5kcykpIHsKKyAgICAgICAgbV9za2lwc0Ry
YXcgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm9pZCogcGl4ZWxzID0g
MDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2RpcnR5UmVjdCk7CisgICAgSW50U2l6ZSByZXF1
aXJlZFRleHR1cmVTaXplOworICAgIEludFNpemUgYml0bWFwU2l6ZTsKKworI2lmIFBMQVRGT1JN
KFNLSUEpCisgICAgY29uc3QgU2tCaXRtYXAqIHNraWFCaXRtYXAgPSAwOworICAgIE93blB0cjxz
a2lhOjpQbGF0Zm9ybUNhbnZhcz4gY2FudmFzOworICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRT
a2lhPiBza2lhQ29udGV4dDsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0Nv
bnRleHQ7CisKKyAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7CisgICAgSW50UmVj
dCBib3VuZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7CisKKyAgICAvLyBJZiB0aGUg
dGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBl
bnRpcmUKKyAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCisgICAgaWYgKHJlcXVpcmVkVGV4
dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkKKyAgICAgICAgZGlydHlSZWN0ID0g
Ym91bmRzUmVjdDsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRv
IHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9pZCBkcmF3aW5nIG91dHNpZGUKKyAgICAgICAg
Ly8gdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJlLgorICAgICAgICBkaXJ0eVJlY3Qu
aW50ZXJzZWN0KGJvdW5kc1JlY3QpOworICAgIH0KKworICAgIGNhbnZhcy5zZXQobmV3IHNraWE6
OlBsYXRmb3JtQ2FudmFzKGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIGZh
bHNlKSk7CisgICAgc2tpYUNvbnRleHQuc2V0KG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKGNhbnZh
cy5nZXQoKSkpOworCisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBn
ZXQgdGV4dCB0byBzaG93IHVwIGNvcnJlY3RseS4gV2l0aG91dCBpdCwKKyAgICAvLyBHREkgcmVu
ZGVycyB3aXRoIHplcm8gYWxwaGEgYW5kIHRoZSB0ZXh0IGJlY29tZXMgaW52aXNpYmxlLgorICAg
IC8vIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgdGhpcyB0byB0cnVlIGRpc2FibGVzIGNsZWFydHlw
ZS4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIHRha2UgdXMgZG93biBhIHZlcnkgc2xvdyB0ZXh0
IHJlbmRlcmluZyBwYXRoPworICAgIC8vIEZJWE1FOiB3aHkgaXMgdGhpcyBpcyBhIHdpbmRvd3Mt
b25seSBjYWxsID8KKyAgICBza2lhQ29udGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1
ZSk7CisjZW5kaWYKKworICAgIGdyYXBoaWNzQ29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4
dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oc2tpYUNvbnRleHQu
Z2V0KCkpKSk7CisKKyAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUg
c3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgorICAgIGNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19j
YXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGly
dHlSZWN0LnkoKSkpOworCisgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMo
KmdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFw
ID0gY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBza2lhQml0
bWFwID0gJmJpdG1hcDsKKyAgICBBU1NFUlQoc2tpYUJpdG1hcCk7CisKKyAgICBTa0F1dG9Mb2Nr
UGl4ZWxzIGxvY2soKnNraWFCaXRtYXApOworICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZp
ZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1
cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KKyAgICBpZiAoc2tpYUNvbmZpZyA9PSBT
a0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKKyAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1h
cC0+Z2V0UGl4ZWxzKCk7CisgICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAt
PndpZHRoKCksIHNraWFCaXRtYXAtPmhlaWdodCgpKTsKKyAgICB9CisjZWxpZiBQTEFURk9STShD
RykKKyAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7CisgICAgSW50UmVjdCBib3Vu
ZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7CisKKyAgICAvLyBJZiB0aGUgdGV4dHVy
ZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUK
KyAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCisgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNp
emUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkKKyAgICAgICAgZGlydHlSZWN0ID0gYm91bmRz
UmVjdDsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBz
aXplIG9mIHRoZSBsYXllciB0byBhdm9pZCBkcmF3aW5nIG91dHNpZGUKKyAgICAgICAgLy8gdGhl
IGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJlLgorICAgICAgICBkaXJ0eVJlY3QuaW50ZXJz
ZWN0KGJvdW5kc1JlY3QpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wVmVjdG9y
OworICAgIGludCByb3dCeXRlcyA9IDQgKiBkaXJ0eVJlY3Qud2lkdGgoKTsKKyAgICB0ZW1wVmVj
dG9yLnJlc2l6ZShyb3dCeXRlcyAqIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgbWVtc2V0KHRl
bXBWZWN0b3IuZGF0YSgpLCAwLCB0ZW1wVmVjdG9yLnNpemUoKSk7CisgICAgUmV0YWluUHRyPENH
Q29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZp
Y2VSR0IoKSk7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4dENHKEFkb3B0Q0Ys
IENHQml0bWFwQ29udGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
cnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29sb3JTcGFjZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkTGFzdCkpOworCisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0Q0cuZ2V0KCkpOworCisgICAgLy8gVHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250eHQgaW50
byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJlY3QuCisgICAgZ3JhcGhpY3ND
b250ZXh0LnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworCisgICAg
bV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0
eVJlY3QpOworCisgICAgcGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7CisgICAgYml0bWFwU2l6
ZSA9IGRpcnR5UmVjdC5zaXplKCk7CisjZWxzZQorI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBm
b3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKKworICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IG1f
Y29udGVudHNUZXh0dXJlOworICAgIGlmICghdGV4dHVyZUlkKQorICAgICAgICB0ZXh0dXJlSWQg
PSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworCisgICAgaWYgKHBpeGVs
cykKKyAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCByZXF1aXJl
ZFRleHR1cmVTaXplLCAgZGlydHlSZWN0LCB0ZXh0dXJlSWQpOworfQorCit2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNp
emUmIGJpdG1hcFNpemUsIGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0
IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCkKK3sKKyAgICBpZiAoIXBp
eGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCB0ZXh0dXJlSWQpOworCisgICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFuZ2Vk
IHNpbmNlIGxhc3QgdGltZSB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAorICAgIC8vIHRvIHJlLWFs
bG9jYXRlIGEgdGV4dHVyZS4KKyAgICBpZiAobV9jb250ZW50c1RleHR1cmUgIT0gdGV4dHVyZUlk
IHx8IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkgeworICAg
ICAgICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKKyAgICAgICAg
R0xDKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRleHR1
cmVTaXplLndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworCisgICAgICAgIG1fY29udGVudHNUZXh0dXJl
ID0gdGV4dHVyZUlkOworICAgICAgICBtX2FsbG9jYXRlZFRleHR1cmVTaXplID0gcmVxdWlyZWRU
ZXh0dXJlU2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodXBkYXRlUmVjdC53aWR0
aCgpIDw9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUud2lkdGgoKSAmJiB1cGRhdGVSZWN0LmhlaWdo
dCgpIDw9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQo
dXBkYXRlUmVjdC53aWR0aCgpID09IGJpdG1hcFNpemUud2lkdGgoKSAmJiB1cGRhdGVSZWN0Lmhl
aWdodCgpID09IGJpdG1hcFNpemUuaGVpZ2h0KCkpOworI2lmIFBMQVRGT1JNKENHKQorICAgICAg
ICAvLyBUaGUgb3JpZ2luIGlzIGF0IHRoZSBsb3dlciBsZWZ0IGluIENvcmUgR3JhcGhpY3MnIGNv
b3JkaW5hdGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNvcnJlY3QgZm9yIHRoaXMgaGVyZS4KKyAgICAg
ICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdo
dCgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSAtIHVwZGF0ZVJlY3QueSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBw
aXhlbHMpKTsKKyNlbGlmIFBMQVRGT1JNKFNLSUEpCisgICAgICAgIEdMQyhnbFRleFN1YkltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRh
dGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIHBpeGVscykpOworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlv
dXIgcGxhdGZvcm0uIgorI2VuZGlmCisgICAgfQorCisgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShG
bG9hdFNpemUoKSk7CisgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OmRyYXcoKQoreworICAgIGlmIChtX3NraXBzRHJhdykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ29udGVudExheWVyU2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVu
ZGVyZXIoKS0+Y29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CisgICAgQVNTRVJUKGxheWVyUmVu
ZGVyZXIoKSk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29udGVudHNUZXh0dXJlKTsKKyAgICBsYXllclJlbmRl
cmVyKCktPnVzZVNoYWRlcihzdi0+bV9jb250ZW50U2hhZGVyUHJvZ3JhbSk7CisgICAgR0xDKGds
VW5pZm9ybTFpKHN2LT5tX3NoYWRlclNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAgIGRyYXdUZXh0
dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zv
cm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhl
aWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3YtPm1fc2hhZGVy
TWF0cml4TG9jYXRpb24sIHN2LT5tX3NoYWRlckFscGhhTG9jYXRpb24pOworfQorCit9CisjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRl
ZiBDb250ZW50TGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5lIENvbnRlbnRMYXllckNocm9taXVtX2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBIExheWVyIHRoYXQgcmVxdWly
ZXMgYSBHcmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIGl0cyBjb250ZW50cy4KK2NsYXNzIENvbnRl
bnRMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworICAgIGZyaWVuZCBjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW07CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q29udGVudExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
ID0gMCk7CisKKyAgICB+Q29udGVudExheWVyQ2hyb21pdW0oKTsKKworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb250ZW50cygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisgICAgdmlydHVh
bCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3ND
b250ZW50KCk7IH0KKworICAgIC8vIFN0b3JlcyB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdl
ZW4gaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgdGhhdCBhcmUKKyAgICAvLyBhc3NvY2lhdGVkIHdp
dGggdGhlIHNhbWUgTGF5ZXJSZW5kZXJlckNocm9taXVtIChhbmQgaGVuY2UgdGhlIHNhbWUgR0wK
KyAgICAvLyBjb250ZXh0KS4KKyAgICBjbGFzcyBDb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgQ29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CisKKyAgICAg
ICAgdW5zaWduZWQgbV9jb250ZW50U2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgaW50IG1fc2hhZGVy
U2FtcGxlckxvY2F0aW9uOworICAgICAgICBpbnQgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbjsKKyAg
ICAgICAgaW50IG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsKKyAgICB9OworCisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoQ29udGVudExheWVyU2hhcmVkVmFsdWVzKik7Cisg
ICAgc3RhdGljIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoQ29udGVudExheWVyU2hhcmVkVmFs
dWVzKik7CisKK3Byb3RlY3RlZDoKKyAgICBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKKworICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qodm9pZCog
cGl4ZWxzLCBjb25zdCBJbnRTaXplJiBiaXRtYXBTaXplLCBjb25zdCBJbnRTaXplJiByZXF1aXJl
ZFRleHR1cmVTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkKTsKKworICAgIHVuc2lnbmVkIG1fY29udGVu
dHNUZXh0dXJlOworICAgIEludFNpemUgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZTsKKyAgICBib29s
IG1fc2tpcHNEcmF3OworCit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDY1NTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNvbnRlbnRMYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTUyLDcgKzUzLDYgQEAKICNpbmNsdWRlICJM
YXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJT
eXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgpA
QCAtOTcsNyArOTcsNyBAQCBHcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJv
CiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29udGVudHNMYXllcikKICAgICAsIG1f
Y29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxzZSkKIHsKLSAgICBtX2xheWVyID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOworICAgIG1fbGF5ZXIgPSBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKHRoaXMpOwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9
CkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVyUAogewogICAgIGlmIChtX3ByZXNlcnZlczNEICYmICFtX3RyYW5zZm9ybUxheWVyKSB7CiAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX3RyYW5zZm9y
bUxheWVyID0gVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBt
X3RyYW5zZm9ybUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOwogCiAgICAgICAg
IC8vIENvcHkgdGhlIHBvc2l0aW9uIGZyb20gdGhpcyBsYXllci4KICAgICAgICAgdXBkYXRlTGF5
ZXJQb3NpdGlvbigpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjU1NzIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAogI2luY2x1ZGUgIkltYWdlTGF5
ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKICNp
ZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTU0LDcgKzU2LDcgQEAgUGFzc1JlZlB0cjxJbWFn
ZUxheWVyQ2hyb21pdW0+IEltYWdlTGF5ZQogfQogCiBJbWFnZUxheWVyQ2hyb21pdW06OkltYWdl
TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogTGF5ZXJD
aHJvbWl1bShvd25lcikKKyAgICA6IENvbnRlbnRMYXllckNocm9taXVtKG93bmVyKQogICAgICwg
bV9jb250ZW50cygwKQogewogfQpAQCAtNjgsOCArNzAsMTAgQEAgdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzKE5hdAogICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1
cmVJZCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCiB7CisgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisKICAgICB2b2lkKiBwaXhlbHMgPSAwOwogICAgIElu
dFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVy
ZVNpemU7CkBAIC0xMjksNiArMTMzLDE3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRh
dGVUZXh0dXJlQ28KICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBs
YXRmb3JtLiIKICNlbmRpZgorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4gdGls
ZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICBtX3NraXBzRHJhdyA9IGZhbHNlOworICAg
IGlmICghbGF5ZXJSZW5kZXJlcigpLT5jaGVja1RleHR1cmVTaXplKHJlcXVpcmVkVGV4dHVyZVNp
emUpKSB7CisgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IG1fY29udGVudHNUZXh0dXJlOworICAgIGlm
ICghdGV4dHVyZUlkKQorICAgICAgICB0ZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0
ZUxheWVyVGV4dHVyZSgpOworCiAgICAgaWYgKHBpeGVscykKICAgICAgICAgdXBkYXRlVGV4dHVy
ZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCByZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlSZWN0
LCB0ZXh0dXJlSWQpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDE2ICszNCwxOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNv
bnRlbnRMYXllckNocm9taXVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQSBMYXll
ciB0aGF0IGNvbnRhaW5zIG9ubHkgYW4gSW1hZ2UgZWxlbWVudC4KLWNsYXNzIEltYWdlTGF5ZXJD
aHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK2NsYXNzIEltYWdlTGF5ZXJDaHJvbWl1
bSA6IHB1YmxpYyBDb250ZW50TGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lciA9IDApOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CiAgICAg
dmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGVudHM7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCk7CisK
ICAgICB2b2lkIHNldENvbnRlbnRzKE5hdGl2ZUltYWdlUHRyKTsKIAogcHJpdmF0ZToKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcAkocmV2aXNpb24gNjU1NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCwzNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXVuc2lnbmVk
IExheWVyQ2hyb21pdW06Om1fc2hhZGVyUHJvZ3JhbUlkID0gMDsKK2NvbnN0IHVuc2lnbmVkIExh
eWVyQ2hyb21pdW06Om1fcG9zaXRpb25BdHRyaWJMb2NhdGlvbiA9IDA7Citjb25zdCB1bnNpZ25l
ZCBMYXllckNocm9taXVtOjptX3RleENvb3JkQXR0cmliTG9jYXRpb24gPSAxOworCitzdGF0aWMg
R0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkK
K3sKKyAgICBHTHVpbnQgc2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlwZSk7CisgICAgaWYgKCFz
aGFkZXIpCisgICAgICAgIHJldHVybiAwOworICAgIEdMQyhnbFNoYWRlclNvdXJjZShzaGFkZXIs
IDEsICZzaGFkZXJTb3VyY2UsIDApKTsKKyAgICBHTEMoZ2xDb21waWxlU2hhZGVyKHNoYWRlcikp
OworICAgIEdMaW50IGNvbXBpbGVkOworICAgIEdMQyhnbEdldFNoYWRlcml2KHNoYWRlciwgR0xf
Q09NUElMRV9TVEFUVVMsICZjb21waWxlZCkpOworICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAg
ICAgR0xDKGdsRGVsZXRlU2hhZGVyKHNoYWRlcikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgcmV0dXJuIHNoYWRlcjsKK30KKworTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpT
aGFyZWRWYWx1ZXMoKQorICAgIDogbV9xdWFkVmVydGljZXNWYm8oMCkKKyAgICAsIG1fcXVhZEVs
ZW1lbnRzVmJvKDApCisgICAgLCBtX21heFRleHR1cmVTaXplKDApCisgICAgLCBtX2JvcmRlclNo
YWRlclByb2dyYW0oMCkKKyAgICAsIG1fYm9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oLTEpCisg
ICAgLCBtX2JvcmRlclNoYWRlckNvbG9yTG9jYXRpb24oLTEpCit7Cit9CiAKIFBhc3NSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIpCiB7CkBAIC02MiwxMyArODksMTAgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1f
YmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2JvcmRlckNvbG9yKDAsIDAsIDAs
IDApCi0gICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKLSAgICAsIG1fZWRnZUFudGlhbGlhc2luZ01h
c2soMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX3pQb3NpdGlvbigwLjApCiAgICAg
LCBtX2FuY2hvclBvaW50WigwKQogICAgICwgbV9ib3JkZXJXaWR0aCgwKQotICAgICwgbV9hbGxv
Y2F0ZWRUZXh0dXJlSWQoMCkKICAgICAsIG1fY2xlYXJzQ29udGV4dChmYWxzZSkKICAgICAsIG1f
ZG91YmxlU2lkZWQodHJ1ZSkKICAgICAsIG1faGlkZGVuKGZhbHNlKQpAQCAtNzYsNiArMTAwLDcg
QEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheQogICAgICwgbV9vcGFx
dWUodHJ1ZSkKICAgICAsIG1fZ2VvbWV0cnlGbGlwcGVkKGZhbHNlKQogICAgICwgbV9uZWVkc0Rp
c3BsYXlPbkJvdW5kc0NoYW5nZShmYWxzZSkKKyAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQogewog
fQogCkBAIC04NywxMCArMTEyLDYgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQog
CiAgICAgLy8gUmVtb3ZlIHRoZSBzdXBlcmxheWVyIHJlZmVyZW5jZSBmcm9tIGFsbCBzdWJsYXll
cnMuCiAgICAgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7Ci0KLSAgICAvLyBOb3RpZnkgdGhlIHJlbmRl
cmVyIHRvIGNsZWFuIHVwIHRoZSB0ZXh0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGF5ZXIuCi0g
ICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5mcmVlTGF5
ZXJUZXh0dXJlKHRoaXMpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVy
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKQEAgLTEwMSwxNDAgKzEyMiw0NiBA
QCB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5CiAgICAgbV9sYXllclJl
bmRlcmVyID0gcmVuZGVyZXI7CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVy
ZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCkKK3Vuc2lnbmVkIExheWVyQ2hyb21pdW06OmNy
ZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBj
aGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKIHsKLSAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJh
Y2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJhY2tpbmcqPihtX293bmVyLT5jbGllbnQo
KSk7Ci0gICAgaWYgKCFiYWNraW5nIHx8IGJhY2tpbmctPnBhaW50aW5nR29lc1RvV2luZG93KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7CisgICAgR0x1
aW50IHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfVkVSVEVYX1NIQURFUiwgdmVydGV4U2hh
ZGVyU291cmNlKTsKKyAgICBpZiAoIXZlcnRleFNoYWRlcikgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgdmVydGV4IHNoYWRlciIpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CiAKLSAgICB2b2lkKiBwaXhlbHMgPSAwOwotICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGly
dHlSZWN0KTsKLSAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBi
aXRtYXBTaXplOwotCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICBjb25zdCBTa0JpdG1hcCogc2tp
YUJpdG1hcCA9IDA7Ci0gICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBjYW52YXM7Ci0g
ICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IHNraWFDb250ZXh0OwotICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKLQotICAgIHJlcXVpcmVkVGV4dHVyZVNp
emUgPSBtX2JvdW5kczsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1f
Ym91bmRzKTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVk
IHRoZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQotICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBs
YXllci4KLSAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVT
aXplKQotICAgICAgICBkaXJ0eVJlY3QgPSBib3VuZHNSZWN0OwotICAgIGVsc2UgewotICAgICAg
ICAvLyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lk
IGRyYXdpbmcgb3V0c2lkZQotICAgICAgICAvLyB0aGUgYm91bmRzIG9mIHRoZSBiYWNraW5nIHRl
eHR1cmUuCi0gICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVjdCk7Ci0gICAgfQot
Ci0gICAgY2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRo
KCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBza2lhQ29udGV4dC5zZXQobmV3
IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7Ci0KLSNpZiBPUyhXSU5ET1dTKQot
ICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5LiBX
aXRob3V0IGl0LAotICAgIC8vIEdESSByZW5kZXJzIHdpdGggemVybyBhbHBoYSBhbmQgdGhlIHRl
eHQgYmVjb21lcyBpbnZpc2libGUuCi0gICAgLy8gVW5mb3J0dW5hdGVseSwgc2V0dGluZyB0aGlz
IHRvIHRydWUgZGlzYWJsZXMgY2xlYXJ0eXBlLgotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgdGFr
ZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5nIHBhdGg/Ci0gICAgLy8gRklYTUU6
IHdoeSBpcyB0aGlzIGlzIGEgd2luZG93cy1vbmx5IGNhbGwgPwotICAgIHNraWFDb250ZXh0LT5z
ZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKLSNlbmRpZgotCi0gICAgZ3JhcGhpY3NDb250
ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpKTsKLQotICAgIC8vIEJyaW5nIHRoZSBj
YW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAg
Y2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwg
c3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7Ci0KLSAgICBtX293bmVyLT5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwot
ICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NC
aXRtYXAoZmFsc2UpOwotICAgIHNraWFCaXRtYXAgPSAmYml0bWFwOwotICAgIEFTU0VSVChza2lh
Qml0bWFwKTsKLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7Ci0gICAg
Ly8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRpb25z
PwotICAgIGlmIChza2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykgewot
ICAgICAgICBwaXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKLSAgICAgICAgYml0bWFw
U2l6ZSA9IEludFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkp
OwotICAgIH0KLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBt
X2JvdW5kczsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91bmRz
KTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkIHRoZW4g
d2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQotICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBsYXllci4K
LSAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXplKQot
ICAgICAgICBkaXJ0eVJlY3QgPSBib3VuZHNSZWN0OwotICAgIGVsc2UgewotICAgICAgICAvLyBD
bGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRyYXdp
bmcgb3V0c2lkZQotICAgICAgICAvLyB0aGUgYm91bmRzIG9mIHRoZSBiYWNraW5nIHRleHR1cmUu
Ci0gICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVjdCk7Ci0gICAgfQotCi0gICAg
VmVjdG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7Ci0gICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5
UmVjdC53aWR0aCgpOwotICAgIHRlbXBWZWN0b3IucmVzaXplKHJvd0J5dGVzICogZGlydHlSZWN0
LmhlaWdodCgpKTsKLSAgICBtZW1zZXQodGVtcFZlY3Rvci5kYXRhKCksIDAsIHRlbXBWZWN0b3Iu
c2l6ZSgpKTsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0
Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKLSAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0
b3IuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWln
aHQoKSwgOCwgcm93Qnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHRDRy5nZXQoKSk7Ci0KLSAgICAvLyBUcmFuc2xh
dGUgdGhlIGdyYXBoaWNzIGNvbnR4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUg
ZGlydHkgcmVjdC4KLSAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgp
LCAtZGlydHlSZWN0LnkoKSk7Ci0KLSAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci0KLSAgICBwaXhlbHMgPSB0ZW1wVmVj
dG9yLmRhdGEoKTsKLSAgICBiaXRtYXBTaXplID0gZGlydHlSZWN0LnNpemUoKTsKLSNlbHNlCi0j
ZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKLSNlbmRpZgorICAg
IEdMdWludCBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBm
cmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgaWYgKCFmcmFnbWVudFNoYWRlcikgeworICAgICAg
ICBHTEMoZ2xEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKSk7CisgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNyZWF0ZSBmcmFnbWVudCBzaGFkZXIiKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxz
LCBiaXRtYXBTaXplLCByZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlSZWN0LCB0ZXh0dXJlSWQp
OwotfQorICAgIEdMdWludCBwcm9ncmFtT2JqZWN0ID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0
ZSBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLXZvaWQgTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXpl
JiBiaXRtYXBTaXplLCBjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQpCi17Ci0gICAgaWYgKCFwaXhl
bHMpCi0gICAgICAgIHJldHVybjsKKyAgICBHTEMoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbU9iamVj
dCwgdmVydGV4U2hhZGVyKSk7CisgICAgR0xDKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1PYmplY3Qs
IGZyYWdtZW50U2hhZGVyKSk7CiAKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmVJZCk7Ci0gICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFuZ2VkIHNpbmNl
IGxhc3QgdGltZSB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAotICAgIC8vIHRvIHJlLWFsbG9jYXRl
IGEgdGV4dHVyZS4KLSAgICBpZiAobV9hbGxvY2F0ZWRUZXh0dXJlSWQgIT0gdGV4dHVyZUlkIHx8
IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkgewotICAgICAg
ICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKLSAgICAgICAgZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIHJlcXVpcmVkVGV4dHVyZVNpemUu
d2lkdGgoKSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgcGl4ZWxzKTsKLQotICAgICAgICBtX2FsbG9jYXRlZFRleHR1cmVJZCA9IHRl
eHR1cmVJZDsKLSAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkVGV4dHVy
ZVNpemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVwZGF0ZVJlY3Qud2lkdGgoKSA8
PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA8
PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgpKTsKLSAgICAgICAgQVNTRVJUKHVwZGF0
ZVJlY3Qud2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRoKCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQo
KSA9PSBiaXRtYXBTaXplLmhlaWdodCgpKTsKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgLy8g
VGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGlu
YXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAgICAgIGds
VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
dXBkYXRlUmVjdC54KCksIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgLSB1cGRhdGVS
ZWN0LmhlaWdodCgpIC0gdXBkYXRlUmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotI2VsaWYgUExBVEZP
Uk0oU0tJQSkKLSAgICAgICAgZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0
ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0
LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotI2Vsc2UKLSNl
cnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCisgICAg
Ly8gQmluZCB0aGUgY29tbW9uIGF0dHJpYiBsb2NhdGlvbnMuCisgICAgR0xDKGdsQmluZEF0dHJp
YkxvY2F0aW9uKHByb2dyYW1PYmplY3QsIG1fcG9zaXRpb25BdHRyaWJMb2NhdGlvbiwgImFfcG9z
aXRpb24iKSk7CisgICAgR0xDKGdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1PYmplY3QsIG1f
dGV4Q29vcmRBdHRyaWJMb2NhdGlvbiwgImFfdGV4Q29vcmQiKSk7CisKKyAgICBHTEMoZ2xMaW5r
UHJvZ3JhbShwcm9ncmFtT2JqZWN0KSk7CisgICAgR0xpbnQgbGlua2VkOworICAgIEdMQyhnbEdl
dFByb2dyYW1pdihwcm9ncmFtT2JqZWN0LCBHTF9MSU5LX1NUQVRVUywgJmxpbmtlZCkpOworICAg
IGlmICghbGlua2VkKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGxpbmsgc2hhZGVy
IHByb2dyYW0iKTsKKyAgICAgICAgR0xDKGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtT2JqZWN0KSk7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1fZGlydHlSZWN0LnNldFNpemUoRmxv
YXRTaXplKCkpOwotICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgIEdMQyhnbERlbGV0
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBHTEMoZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRT
aGFkZXIpKTsKKyAgICByZXR1cm4gcHJvZ3JhbU9iamVjdDsKIH0KIAogdm9pZCBMYXllckNocm9t
aXVtOjpzZXROZWVkc0NvbW1pdCgpCkBAIC0zNzcsNSArMzA0LDE1MCBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0K
IAordm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQoreworICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7
CisgICAgZmxhdHRlbmVkWzFdID0gbS5tMTIoKTsKKyAgICBmbGF0dGVuZWRbMl0gPSBtLm0xMygp
OworICAgIGZsYXR0ZW5lZFszXSA9IG0ubTE0KCk7CisgICAgZmxhdHRlbmVkWzRdID0gbS5tMjEo
KTsKKyAgICBmbGF0dGVuZWRbNV0gPSBtLm0yMigpOworICAgIGZsYXR0ZW5lZFs2XSA9IG0ubTIz
KCk7CisgICAgZmxhdHRlbmVkWzddID0gbS5tMjQoKTsKKyAgICBmbGF0dGVuZWRbOF0gPSBtLm0z
MSgpOworICAgIGZsYXR0ZW5lZFs5XSA9IG0ubTMyKCk7CisgICAgZmxhdHRlbmVkWzEwXSA9IG0u
bTMzKCk7CisgICAgZmxhdHRlbmVkWzExXSA9IG0ubTM0KCk7CisgICAgZmxhdHRlbmVkWzEyXSA9
IG0ubTQxKCk7CisgICAgZmxhdHRlbmVkWzEzXSA9IG0ubTQyKCk7CisgICAgZmxhdHRlbmVkWzE0
XSA9IG0ubTQzKCk7CisgICAgZmxhdHRlbmVkWzE1XSA9IG0ubTQ0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKQoreworICAgIHN0YXRp
YyBHTGZsb2F0IGdsTWF0cml4WzE2XTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRl
ck1hdHJpeCA9IGRyYXdNYXRyaXg7CisKKyAgICAvLyBBcHBseSBhIHNjYWxpbmcgZmFjdG9yIHRv
IHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVkIHNpemUuCisgICAgcmVuZGVy
TWF0cml4LnNjYWxlM2Qod2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICAvLyBBcHBseSB0aGUgcHJv
amVjdGlvbiBtYXRyaXggYmVmb3JlIHNlbmRpbmcgdGhlIHRyYW5zZm9ybSBvdmVyIHRvIHRoZSBz
aGFkZXIuCisgICAgcmVuZGVyTWF0cml4Lm11bHRpcGx5KHByb2plY3Rpb25NYXRyaXgpOworCisg
ICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIHJlbmRlck1hdHJpeCk7CisKKyAgICBHTEMoZ2xV
bmlmb3JtTWF0cml4NGZ2KG1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKSk7
CisKKyAgICBpZiAoYWxwaGFMb2NhdGlvbiAhPSAtMSkKKyAgICAgICAgR0xDKGdsVW5pZm9ybTFm
KGFscGhhTG9jYXRpb24sIG9wYWNpdHkpKTsKKworICAgIEdMQyhnbERyYXdFbGVtZW50cyhHTF9U
UklBTkdMRVMsIDYsIEdMX1VOU0lHTkVEX1NIT1JULCAwKSk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJv
bWl1bTo6ZHJhd0RlYnVnQm9yZGVyKCkKK3sKKyAgICBzdGF0aWMgR0xmbG9hdCBnbE1hdHJpeFsx
Nl07CisgICAgaWYgKCFib3JkZXJDb2xvcigpLmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFNoYXJlZFZhbHVlcyogc3YgPSBsYXllclJlbmRlcmVyKCktPmxheWVyU2hhcmVkVmFsdWVz
KCk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPm1fYm9yZGVyU2hhZGVyUHJv
Z3JhbSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gZHJhd1RyYW5z
Zm9ybSgpOworICAgIHJlbmRlck1hdHJpeC5zY2FsZTNkKGJvdW5kcygpLndpZHRoKCksIGJvdW5k
cygpLmhlaWdodCgpLCAxKTsKKyAgICByZW5kZXJNYXRyaXgubXVsdGlwbHkobGF5ZXJSZW5kZXJl
cigpLT5wcm9qZWN0aW9uTWF0cml4KCkpOworICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBy
ZW5kZXJNYXRyaXgpOworICAgIEdMQyhnbFVuaWZvcm1NYXRyaXg0ZnYoc3YtPm1fYm9yZGVyU2hh
ZGVyTWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pKTsKKworICAgIEdMQyhn
bFVuaWZvcm00Zihzdi0+bV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uLCBib3JkZXJDb2xvcigp
LnJlZCgpIC8gMjU1LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvcmRlckNvbG9yKCkuZ3JlZW4oKSAvIDI1NS4wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcigpLmJs
dWUoKSAvIDI1NS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxKSk7CisKKyAgICBHTEMoZ2xMaW5lV2lkdGgoYm9yZGVyV2lkdGgoKSkpOwor
CisgICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUg
YXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCisgICAgR0xDKGdsRHJhd0VsZW1lbnRzKEdM
X0xJTkVfTE9PUCwgNCwgR0xfVU5TSUdORURfU0hPUlQsICh2b2lkKikoNiAqIHNpemVvZih1bnNp
Z25lZCBzaG9ydCkpKSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJl
ZE9iamVjdHMoU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICAvLyBWZXJ0ZXggcG9zaXRpb25zIGFu
ZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgNCBjb3JuZXJzIG9mIGEgMXgxIHF1YWQuCisg
ICAgR0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAtMC41ZiwgIDAuNWYsIDAuMGYsIDAuMGYsICAxLjBm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAuNWYsIC0wLjVmLCAwLjBmLCAwLjBmLCAg
MC4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAtMC41ZiwgMC4wZiwgMS4w
ZiwgIDAuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41ZiwgIDAuNWYsIDAuMGYs
IDEuMGYsICAxLjBmIH07CisgICAgR0x1c2hvcnQgaW5kaWNlc1tdID0geyAwLCAxLCAyLCAwLCAy
LCAzLCAvLyBUaGUgdHdvIHRyaWFuZ2xlcyB0aGF0IG1ha2UgdXAgdGhlIGxheWVyIHF1YWQuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzfTsgLy8gQSBsaW5lIHBhdGggZm9y
IGRyYXdpbmcgdGhlIGxheWVyIGJvcmRlci4KKworICAgIEdMdWludCB2Ym9JZHNbMl07CisgICAg
R0xDKGdsR2VuQnVmZmVycygyLCB2Ym9JZHMpKTsKKyAgICBzdi0+bV9xdWFkVmVydGljZXNWYm8g
PSB2Ym9JZHNbMF07CisgICAgc3YtPm1fcXVhZEVsZW1lbnRzVmJvID0gdmJvSWRzWzFdOworICAg
IEdMQyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBzdi0+bV9xdWFkVmVydGljZXNWYm8p
KTsKKyAgICBHTEMoZ2xCdWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2Vz
KSwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKSk7CisgICAgR0xDKGdsQmluZEJ1ZmZlcihHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUiwgc3YtPm1fcXVhZEVsZW1lbnRzVmJvKSk7CisgICAgR0xDKGds
QnVmZmVyRGF0YShHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKGluZGljZXMpLCBpbmRp
Y2VzLCBHTF9TVEFUSUNfRFJBVykpOworCisgICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXpl
IHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgorICAgIEdMQyhnbEdldEludGVnZXJ2KEdMX01BWF9U
RVhUVVJFX1NJWkUsICYoc3YtPm1fbWF4VGV4dHVyZVNpemUpKSk7CisKKyAgICAvLyBTaGFkZXJz
IGZvciBkcmF3aW5nIHRoZSBkZWJ1ZyBib3JkZXJzIGFyb3VuZCB0aGUgbGF5ZXJzLgorICAgIGNo
YXIgYm9yZGVyVmVydGV4U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAiYXR0cmlidXRlIHZlYzQg
YV9wb3NpdGlvbjsgICBcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0NCBtYXRyaXg7ICAgICAgICAg
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgIGdsX1Bvc2l0aW9u
ID0gbWF0cml4ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIjsKKyAgICBjaGFyIGJvcmRlckZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQor
ICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidW5pZm9ybSB2ZWM0IGNvbG9yOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICBnbF9GcmFnQ29s
b3IgPSBjb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAifSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKwor
ICAgIHN2LT5tX2JvcmRlclNoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKGJvcmRl
clZlcnRleFNoYWRlclN0cmluZywgYm9yZGVyRnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlm
ICghc3YtPm1fYm9yZGVyU2hhZGVyUHJvZ3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIkxheWVy
Q2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN2LT5tX2JvcmRlclNoYWRlck1hdHJpeExvY2F0aW9u
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24oc3YtPm1fYm9yZGVyU2hhZGVyUHJvZ3JhbSwgIm1hdHJp
eCIpOworICAgIHN2LT5tX2JvcmRlclNoYWRlckNvbG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1M
b2NhdGlvbihzdi0+bV9ib3JkZXJTaGFkZXJQcm9ncmFtLCAiY29sb3IiKTsKKyAgICBBU1NFUlQo
c3YtPm1fYm9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChzdi0+
bV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uICE9IC0xKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKFNoYXJlZFZhbHVl
cyogc3YpCit7CisgICAgR0x1aW50IHZib0lkc1syXSA9IHsgc3YtPm1fcXVhZFZlcnRpY2VzVmJv
LCBzdi0+bV9xdWFkRWxlbWVudHNWYm8gfTsKKyAgICBHTEMoZ2xEZWxldGVCdWZmZXJzKDIsIHZi
b0lkcykpOworICAgIHN2LT5tX3F1YWRWZXJ0aWNlc1ZibyA9IHN2LT5tX3F1YWRFbGVtZW50c1Zi
byA9IDA7CisKKyAgICBpZiAoc3YtPm1fYm9yZGVyU2hhZGVyUHJvZ3JhbSkgeworICAgICAgICBH
TEMoZ2xEZWxldGVQcm9ncmFtKHN2LT5tX2JvcmRlclNoYWRlclByb2dyYW0pKTsKKyAgICAgICAg
c3YtPm1fYm9yZGVyU2hhZGVyUHJvZ3JhbSA9IDA7CisgICAgfQorfQorCit2b2lkIExheWVyQ2hy
b21pdW06OnByZXBhcmVGb3JEcmF3KFNoYXJlZFZhbHVlcyogc2hhcmVkVmFsdWVzKQoreworICAg
IEdMQyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBzaGFyZWRWYWx1ZXMtPm1fcXVhZFZl
cnRpY2VzVmJvKSk7CisgICAgR0xDKGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
Uiwgc2hhcmVkVmFsdWVzLT5tX3F1YWRFbGVtZW50c1ZibykpOworICAgIEdMdWludCBvZmZzZXQg
PSAwOworICAgIEdMQyhnbFZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkF0dHJpYkxvY2F0
aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDUgKiBzaXplb2YoR0xmbG9hdCksIChHTHZvaWQq
KW9mZnNldCkpOworICAgIG9mZnNldCArPSAzICogc2l6ZW9mKEdMZmxvYXQpOworICAgIEdMQyhn
bFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZEF0dHJpYkxvY2F0aW9uLCAyLCBHTF9GTE9B
VCwgR0xfRkFMU0UsIDUgKiBzaXplb2YoR0xmbG9hdCksIChHTHZvaWQqKW9mZnNldCkpOworICAg
IEdMQyhnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fcG9zaXRpb25BdHRyaWJMb2NhdGlvbikp
OworICAgIEdMQyhnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4Q29vcmRBdHRyaWJMb2Nh
dGlvbikpOworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgJKHJldmlzaW9uIDY1NTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE5ICs1NSwyNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXll
cnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBjb3ZlcnMgbGF5ZXJzIHRoYXQgcmVxdWlyZQotLy8gYSBH
cmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIHRoZWlyIGNvbnRlbnRzLiBTcGVjaWFsIGxheWVyIHR5
cGVzIGFyZSBkZXJpdmVkIGZyb20KKy8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJz
LiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBj
bGFzcyBMYXllckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewor
ICAgIGZyaWVuZCBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIgPSAwKTsKIAogICAgIH5MYXllckNocm9taXVtKCk7CiAKKyAgICBjb25zdCBMYXll
ckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdDsKKyAgICBMYXllckNocm9taXVtKiBzdXBlcmxh
eWVyKCkgY29uc3Q7CiAgICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21p
dW0+KTsKICAgICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4s
IHNpemVfdCBpbmRleCk7CiAgICAgdm9pZCByZXBsYWNlU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bSog
cmVmZXJlbmNlLCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IG5ld0xheWVyKTsKICAgICB2b2lk
IHJlbW92ZUZyb21TdXBlcmxheWVyKCk7CisgICAgdm9pZCByZW1vdmVBbGxTdWJsYXllcnMoKTsK
KyAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGdldFN1Ymxh
eWVycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJzOyB9CiAKICAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBh
bmNob3JQb2ludDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9p
bnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CkBAIC05Myw5ICs5OCw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpIHsgbV9kb3Vi
bGVTaWRlZCA9IGRvdWJsZVNpZGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBkb3Vi
bGVTaWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlU2lkZWQ7IH0KIAotICAgIHZvaWQgc2V0
RWRnZUFudGlhbGlhc2luZ01hc2sodWludDMyX3QgbWFzaykgeyBtX2VkZ2VBbnRpYWxpYXNpbmdN
YXNrID0gbWFzazsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIHVpbnQzMl90IGVkZ2VBbnRpYWxp
YXNpbmdNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlQW50aWFsaWFzaW5nTWFzazsgfQotCiAg
ICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICBGbG9hdFJlY3QgZnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKQEAgLTEyMCw3NiArMTIyLDkwIEBAIHB1Ymxp
YzoKICAgICBib29sIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAKICAgICB2
b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24g
PSBwb3NpdGlvbjsgIHNldE5lZWRzQ29tbWl0KCk7IH0KLQogICAgIEZsb2F0UG9pbnQgcG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKICAgICB2b2lkIHNldFpQb3NpdGlv
bihmbG9hdCB6UG9zaXRpb24pIHsgbV96UG9zaXRpb24gPSB6UG9zaXRpb247IHNldE5lZWRzQ29t
bWl0KCk7IH0KICAgICBmbG9hdCB6UG9zaXRpb24oKSBjb25zdCB7ICByZXR1cm4gbV96UG9zaXRp
b247IH0KIAotICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0OwotCi0g
ICAgdm9pZCByZW1vdmVBbGxTdWJsYXllcnMoKTsKLQotICAgIHZvaWQgc2V0U3VibGF5ZXJzKGNv
bnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYpOwotCi0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBnZXRTdWJsYXllcnMoKSBjb25zdCB7IHJldHVybiBt
X3N1YmxheWVyczsgfQotCiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3Jt
OyB9CiAKLSAgICBMYXllckNocm9taXVtKiBzdXBlcmxheWVyKCkgY29uc3Q7Ci0KLQogICAgIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsg
bV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zv
cm07IH0KIAorICAgIC8vIEZJWE1FOiBUaGlzIHNldHRpbmcgaXMgY3VycmVudGx5IGlnbm9yZWQu
CiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZ2VvbWV0cnlG
bGlwcGVkID0gZmxpcHBlZDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgZ2VvbWV0cnlG
bGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeUZsaXBwZWQ7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKTsKLSAgICBi
b29sIGNvbnRlbnRzRGlydHkoKSB7IHJldHVybiBtX2NvbnRlbnRzRGlydHk7IH0KLQogICAgIHZv
aWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KSB7IG1fZHJhd1RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3Jt
OyB9CiAKICAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3Bh
Y2l0eSA9IG9wYWNpdHk7IH0KICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhd09wYWNpdHk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJl
dHVybiBtX293bmVyICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgpOyB9Ci0KLSAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiB0aGUgbGF5ZXIgaGFzIGl0cyBvd24gR0wgdGV4dHVyZSBhbmQgZmFsc2UgaWYg
dGhlIHRleHR1cmUKLSAgICAvLyBuZWVkcyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhlIGNvbXBvc2l0
b3IuCi0gICAgdmlydHVhbCBib29sIG93bnNUZXh0dXJlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQot
ICAgIC8vIFJldHVybnMgdGhlIGlkIG9mIHRoZSBHTCB0ZXh0dXJlIHRoYXQgc3RvcmVzIHRoZSBj
b250ZW50cyBvZiB0aGlzIGxheWVyLgotICAgIC8vIERlcml2ZWQgbGF5ZXIgY2xhc3NlcyB0aGF0
IG93biB0aGVpciBvd24gdGV4dHVyZXMgc2hvdWxkIG92ZXJ3cml0ZSB0aGlzIG1ldGhvZC4KLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1cmVJZCgpIHsgcmV0dXJuIG1fYWxsb2NhdGVkVGV4dHVy
ZUlkOyB9Ci0KICAgICBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4gbV9vd25lciAmJiBtX293
bmVyLT5wcmVzZXJ2ZXMzRCgpOyB9CiAKICAgICB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKik7CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSWQo
dW5zaWduZWQgc2hhZGVyUHJvZ3JhbUlkKSB7IG1fc2hhZGVyUHJvZ3JhbUlkID0gc2hhZGVyUHJv
Z3JhbUlkOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQoKSB7IHJldHVy
biBtX3NoYWRlclByb2dyYW1JZDsgfQotCiAgICAgdm9pZCBzZXRPd25lcihHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKSB7IG1fb3duZXIgPSBvd25lcjsgfQogCisgICAgYm9vbCBjb250ZW50
c0RpcnR5KCkgeyByZXR1cm4gbV9jb250ZW50c0RpcnR5OyB9CisKKyAgICAvLyBUaGVzZSBtZXRo
b2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4K
KyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRyYXco
KSB7IH07CisKKyAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcigpOworCisgICAgLy8gU3RvcmVzIHZh
bHVlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyB0aGF0
IGFyZQorICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBMYXllclJlbmRlcmVyQ2hyb21p
dW0gKGFuZCBoZW5jZSB0aGUgc2FtZSBHTAorICAgIC8vIGNvbnRleHQpLgorICAgIGNsYXNzIFNo
YXJlZFZhbHVlcyB7CisgICAgcHVibGljOgorICAgICAgICBTaGFyZWRWYWx1ZXMoKTsKKworICAg
ICAgICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlc1ZibzsKKyAgICAgICAgdW5zaWduZWQgbV9xdWFk
RWxlbWVudHNWYm87CisgICAgICAgIGludCBtX21heFRleHR1cmVTaXplOworICAgICAgICB1bnNp
Z25lZCBtX2JvcmRlclNoYWRlclByb2dyYW07CisgICAgICAgIGludCBtX2JvcmRlclNoYWRlck1h
dHJpeExvY2F0aW9uOworICAgICAgICBpbnQgbV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uOwor
ICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cyhTaGFyZWRW
YWx1ZXMqKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cyhTaGFyZWRWYWx1
ZXMqKTsKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlRm9yRHJhdyhTaGFyZWRWYWx1ZXMqKTsKKwog
cHJvdGVjdGVkOgogICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbV9vd25lcjsKICAgICBMYXll
ckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotICAgIHZvaWQgdXBkYXRl
VGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiBiaXRtYXBTaXplLCBjb25z
dCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qs
IHVuc2lnbmVkIHRleHR1cmVJZCk7CisKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXI7IH0KKworICAgIHN0YXRp
YyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2pl
Y3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJpeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQs
IGZsb2F0IG9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0
cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKKworICAgIHN0YXRpYyB2b2lkIHRvR0xN
YXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAgc3RhdGlj
IHVuc2lnbmVkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAKICAgICBJbnRTaXplIG1f
Ym91bmRzOwogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29udGVudHNE
aXJ0eTsKIAorICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNoYXJlIHRoZSBzYW1lIGF0dHJpYnV0
ZSBsb2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25zCisgICAgLy8gYW5kIHRleHR1cmUg
Y29vcmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBzaGFkZXJzIHdpdGhvdXQgcmViaW5k
aW5nIGF0dHJpYnV0ZQorICAgIC8vIGFycmF5cy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bV9wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtX3Rl
eENvb3JkQXR0cmliTG9jYXRpb247CisKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc0NvbW1p
dCgpOwogCiAgICAgdm9pZCBzZXRTdXBlcmxheWVyKExheWVyQ2hyb21pdW0qIHN1cGVybGF5ZXIp
IHsgbV9zdXBlcmxheWVyID0gc3VwZXJsYXllcjsgfQogCi0gICAgdm9pZCBwYWludE1lKCk7Ci0K
ICAgICBzaXplX3QgbnVtU3VibGF5ZXJzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBt
X3N1YmxheWVycy5zaXplKCk7CkBAIC0yMDQsMzUgKzIyMCwxNyBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX3N1YmxheWVyczsKICAgICBMYXllckNocm9t
aXVtKiBtX3N1cGVybGF5ZXI7CiAKKyAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNp
emUgbV9iYWNraW5nU3RvcmVTaXplOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBG
bG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAg
ICAgQ29sb3IgbV9ib3JkZXJDb2xvcjsKLQotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9s
YXllclJlbmRlcmVyOwotCi0gICAgRmxvYXRSZWN0IG1fZnJhbWU7Ci0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXll
clRyYW5zZm9ybTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsK
LQotICAgIHVpbnQzMl90IG1fZWRnZUFudGlhbGlhc2luZ01hc2s7CiAgICAgZmxvYXQgbV9vcGFj
aXR5OwogICAgIGZsb2F0IG1felBvc2l0aW9uOwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwog
ICAgIGZsb2F0IG1fYm9yZGVyV2lkdGg7Ci0KICAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OwotCi0g
ICAgdW5zaWduZWQgbV9hbGxvY2F0ZWRUZXh0dXJlSWQ7Ci0gICAgSW50U2l6ZSBtX2FsbG9jYXRl
ZFRleHR1cmVTaXplOwotCi0gICAgLy8gVGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgYWxsIGxh
eWVycyBvZiB0aGlzIHR5cGUgaXMgdGhlIHNhbWUuCi0gICAgLy8gVGhpcyBzdGF0aWMgY2FuIGJl
IHNoYWRvd2VkIGJ5IGRlcml2ZWQgY2xhc3NlcyB0byB1c2UgYSBzcGVjaWFsIHNoYWRlci4KLSAg
ICBzdGF0aWMgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7Ci0KICAgICBib29sIG1fY2xlYXJz
Q29udGV4dDsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7CiAgICAgYm9vbCBtX2hpZGRlbjsKQEAg
LTI0MSw2ICsyMzksMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZ2VvbWV0cnlGbGlwcGVkOwog
ICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZTsKIAorICAgIC8vIFBvaW50cyB0
byB0aGUgbGF5ZXIgcmVuZGVyZXIgdGhhdCB1cGRhdGVzIGFuZCBkcmF3cyB0aGlzIGxheWVyLgor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOworCisgICAgRmxvYXRS
ZWN0IG1fZnJhbWU7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CisKICAgICBTdHJpbmcgbV9uYW1lOwogfTsKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNjU1NzIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
IkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgogI2lmIFBMQVRGT1JNKFNLSUEpCiAjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgpAQCAtNTAsMTAxICs1MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmbmRlZiBO
REVCVUcKLXN0YXRpYyBXVEZMb2dDaGFubmVsIExvZ0xheWVyUmVuZGVyZXIgPSB7IDB4MDAwMDAw
MDAsICJMYXllclJlbmRlcmVyIiwgV1RGTG9nQ2hhbm5lbE9uIH07Ci0jZW5kaWYKLQotc3RhdGlj
IHZvaWQgY2hlY2tHTEVycm9yKCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgR0xlbnVtIGVycm9y
ID0gZ2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgTE9HX0VSUk9SKCJHTCBF
cnJvcjogJWQgIiAsIGVycm9yKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgR0x1aW50IGxvYWRTaGFk
ZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKLXsKLSAgICBHTHVpbnQg
c2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlwZSk7Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZSwg
MCk7Ci0gICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgR0xpbnQgY29tcGlsZWQ7Ci0g
ICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAmY29tcGlsZWQpOwot
ICAgIGlmICghY29tcGlsZWQpIHsKLSAgICAgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBzaGFkZXI7Ci19Ci0KLXN0YXRpYyBH
THVpbnQgbG9hZFNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKLXsKLSAgICBHTHVpbnQgdmVydGV4U2hh
ZGVyOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRlcjsKLSAgICBHTHVpbnQgcHJvZ3JhbU9iamVj
dDsKLSAgICBHTGludCBsaW5rZWQ7Ci0gICAgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRlcihHTF9W
RVJURVhfU0hBREVSLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwotICAgIGlmICghdmVydGV4U2hhZGVy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xf
RlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7Ci0gICAgaWYgKCFmcmFnbWVu
dFNoYWRlcikgewotICAgICAgICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcHJvZ3JhbU9iamVjdCA9IGdsQ3JlYXRlUHJvZ3JhbSgp
OwotICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZ2xBdHRh
Y2hTaGFkZXIocHJvZ3JhbU9iamVjdCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRl
cihwcm9ncmFtT2JqZWN0LCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9n
cmFtT2JqZWN0KTsKLSAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtT2JqZWN0LCBHTF9MSU5LX1NU
QVRVUywgJmxpbmtlZCk7Ci0gICAgaWYgKCFsaW5rZWQpIHsKLSAgICAgICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW1PYmplY3QpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZ2xEZWxl
dGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRl
cik7Ci0gICAgcmV0dXJuIHByb2dyYW1PYmplY3Q7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGVMYXllclNoYWRlcihTaGFkZXJQcm9ncmFtVHlwZSB0eXBlLCBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
KQotewotICAgIHVuc2lnbmVkIHByb2dyYW1JZCA9IGxvYWRTaGFkZXJQcm9ncmFtKHZlcnRleFNo
YWRlclNvdXJjZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwotICAgIEFTU0VSVChwcm9ncmFtSWQp
OwotCi0gICAgU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSA9ICZtX3NoYWRlclByb2dyYW1zW3R5cGVd
OwotCi0gICAgcHJvZ3JhbS0+bV9zaGFkZXJQcm9ncmFtSWQgPSBwcm9ncmFtSWQ7Ci0gICAgcHJv
Z3JhbS0+bV9zYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSWQs
ICJzX3RleHR1cmUiKTsKLSAgICBwcm9ncmFtLT5tX21hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbUlkLCAibWF0cml4Iik7Ci0gICAgcHJvZ3JhbS0+bV9hbHBoYUxv
Y2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlkLCAiYWxwaGEiKTsKLQotICAg
IHJldHVybiBwcm9ncmFtSWQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgdG9HTE1hdHJpeChmbG9hdCog
ZmxhdHRlbmVkLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKLXsKLSAgICBmbGF0dGVu
ZWRbMF0gPSBtLm0xMSgpOwotICAgIGZsYXR0ZW5lZFsxXSA9IG0ubTEyKCk7Ci0gICAgZmxhdHRl
bmVkWzJdID0gbS5tMTMoKTsKLSAgICBmbGF0dGVuZWRbM10gPSBtLm0xNCgpOwotICAgIGZsYXR0
ZW5lZFs0XSA9IG0ubTIxKCk7Ci0gICAgZmxhdHRlbmVkWzVdID0gbS5tMjIoKTsKLSAgICBmbGF0
dGVuZWRbNl0gPSBtLm0yMygpOwotICAgIGZsYXR0ZW5lZFs3XSA9IG0ubTI0KCk7Ci0gICAgZmxh
dHRlbmVkWzhdID0gbS5tMzEoKTsKLSAgICBmbGF0dGVuZWRbOV0gPSBtLm0zMigpOwotICAgIGZs
YXR0ZW5lZFsxMF0gPSBtLm0zMygpOwotICAgIGZsYXR0ZW5lZFsxMV0gPSBtLm0zNCgpOwotICAg
IGZsYXR0ZW5lZFsxMl0gPSBtLm00MSgpOwotICAgIGZsYXR0ZW5lZFsxM10gPSBtLm00MigpOwot
ICAgIGZsYXR0ZW5lZFsxNF0gPSBtLm00MygpOwotICAgIGZsYXR0ZW5lZFsxNV0gPSBtLm00NCgp
OwotfQotCiBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQgbGVm
dCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wLCBmbG9hdCBuZWFyWiwgZmxv
YXQgZmFyWikKIHsKICAgICBmbG9hdCBkZWx0YVggPSByaWdodCAtIGxlZnQ7CkBAIC0xNjIsMjEg
KzY3LDYgQEAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KAogICAgIHJl
dHVybiBvcnRobzsKIH0KIAotLy8gQ3JlYXRlcyBhIEdMIHRleHR1cmUgb2JqZWN0IHRvIGJlIHVz
ZWQgZm9yIHRyYW5zZmVyaW5nIHRoZSBsYXllcidzIGJpdG1hcCBpbnRvLgotc3RhdGljIEdMdWlu
dCBjcmVhdGVMYXllclRleHR1cmUoKQotewotICAgIEdMdWludCB0ZXh0dXJlSWQgPSAwOwotICAg
IGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmVJZCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIC8vIERvIGJhc2ljIGxpbmVhciBmaWx0ZXJpbmcgb24g
cmVzaXplLgotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01J
Tl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAvLyBOUE9UIHRleHR1cmVz
IGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRvIEdMX0NMQU1Q
X1RPX0VER0UuCi0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIHJldHVybiB0
ZXh0dXJlSWQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IExh
eWVyQ2hyb21pdW0qIGEsIGNvbnN0IExheWVyQ2hyb21pdW0qIGIpCiB7CiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUEgPSBhLT5kcmF3VHJhbnNmb3JtKCk7CkBAIC0x
ODUsNTEgKzc1LDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IEwK
ICAgICByZXR1cm4gdHJhbnNmb3JtQS5tNDMoKSA8IHRyYW5zZm9ybUIubTQzKCk7CiB9CiAKLVNo
YWRlclByb2dyYW06OlNoYWRlclByb2dyYW0oKQotICAgIDogbV9zaGFkZXJQcm9ncmFtSWQoMCkK
LSAgICAsIG1fc2FtcGxlckxvY2F0aW9uKC0xKQotICAgICwgbV9tYXRyaXhMb2NhdGlvbigtMSkK
LSAgICAsIG1fYWxwaGFMb2NhdGlvbigtMSkKLXsKLX0KLQogUGFzc093blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NPd25QdHI8R0xF
UzJDb250ZXh0PiBnbGVzMkNvbnRleHQpCiB7CiAgICAgcmV0dXJuIG5ldyBMYXllclJlbmRlcmVy
Q2hyb21pdW0oZ2xlczJDb250ZXh0KTsKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXll
clJlbmRlcmVyQ2hyb21pdW0oUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IGdsZXMyQ29udGV4dCkK
LSAgICA6IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKDApCisgICAgOiBtX3Jvb3RMYXllclRleHR1
cmVJZCgwKQorICAgICwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkKICAgICAsIG1fcm9vdExh
eWVyVGV4dHVyZUhlaWdodCgwKQotICAgICwgbV9wb3NpdGlvbkxvY2F0aW9uKDApCi0gICAgLCBt
X3RleENvb3JkTG9jYXRpb24oMSkKICAgICAsIG1fcm9vdExheWVyKDApCiAgICAgLCBtX25lZWRz
RGlzcGxheShmYWxzZSkKICAgICAsIG1fc2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkK
LSAgICAsIG1fY3VycmVudFNoYWRlclByb2dyYW1UeXBlKE51bVNoYWRlclByb2dyYW1UeXBlcykK
KyAgICAsIG1fY3VycmVudFNoYWRlcigwKQogICAgICwgbV9nbGVzMkNvbnRleHQoZ2xlczJDb250
ZXh0KQogewotICAgIG1fcXVhZFZib0lkc1tWZXJ0aWNlc10gPSBtX3F1YWRWYm9JZHNbTGF5ZXJF
bGVtZW50c10gPSAwOwotICAgIG1faGFyZHdhcmVDb21wb3NpdGluZyA9IChtX2dsZXMyQ29udGV4
dCAmJiBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkpOworICAgIG1faGFyZHdhcmVDb21wb3Np
dGluZyA9IChtX2dsZXMyQ29udGV4dCAmJiBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpKTsKIH0K
IAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVtKCkKIHsKLSAg
ICBpZiAobV9oYXJkd2FyZUNvbXBvc2l0aW5nKSB7Ci0gICAgICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgICAgICBnbERlbGV0ZUJ1ZmZlcnMoMywgbV9xdWFkVmJvSWRzKTsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE51bVNoYWRlclByb2dyYW1UeXBlczsgaSsrKSB7Ci0gICAg
ICAgICAgICBpZiAobV9zaGFkZXJQcm9ncmFtc1tpXS5tX3NoYWRlclByb2dyYW1JZCkKLSAgICAg
ICAgICAgICAgICBnbERlbGV0ZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtc1tpXS5tX3NoYWRlclBy
b2dyYW1JZCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsK
K30KIAotICAgIC8vIEZyZWUgdXAgYWxsIEdMIHRleHR1cmVzLgotICAgIGZvciAoVGV4dHVyZUlk
TWFwOjppdGVyYXRvciBpdGVyID0gbV90ZXh0dXJlSWRNYXAuYmVnaW4oKTsgaXRlciAhPSBtX3Rl
eHR1cmVJZE1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwg
JihpdGVyLT5zZWNvbmQpKTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnNldExheWVyUmVuZGVyZXIo
MCk7Ci0gICAgfQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKGNvbnN0
IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKQoreworICAgIEdMZW51
bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpCisg
ICAgICAgIExPR19FUlJPUigiR0wgY29tbWFuZCBmYWlsZWQ6IEZpbGU6ICVzXG5cdExpbmUgJWRc
blx0Y29tbWFuZDogJXMsIGVycm9yICV4XG4iLCBmaWxlLCBsaW5lLCBjb21tYW5kLCBlcnJvcik7
CiB9CiAKIC8vIENyZWF0ZXMgYSBjYW52YXMgYW5kIGFuIGFzc29jaWF0ZWQgZ3JhcGhpY3MgY29u
dGV4dCB0aGF0IHRoZSByb290IGxheWVyIHdpbGwKQEAgLTI2OCw0MyArMTQxLDE0IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXIKICAgICBtX3Jvb3RMYXllckNhbnZh
c1NpemUgPSBzaXplOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVy
UHJvZ3JhbShTaGFkZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlwZSkKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogewotICAgIGlmIChwcm9n
cmFtVHlwZSAhPSBtX2N1cnJlbnRTaGFkZXJQcm9ncmFtVHlwZSkgewotICAgICAgICBTaGFkZXJQ
cm9ncmFtKiBwcm9ncmFtID0gJm1fc2hhZGVyUHJvZ3JhbXNbcHJvZ3JhbVR5cGVdOwotICAgICAg
ICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+bV9zaGFkZXJQcm9ncmFtSWQpOwotICAgICAgICBtX2N1
cnJlbnRTaGFkZXJQcm9ncmFtVHlwZSA9IHByb2dyYW1UeXBlOwotCi0gICAgICAgIC8vIFNldCB0
aGUgdW5pZm9ybSBsb2NhdGlvbnMgbWF0Y2hpbmcgdGhlIHByb2dyYW0uCi0gICAgICAgIG1fc2Ft
cGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+bV9zYW1wbGVyTG9jYXRpb247Ci0gICAgICAgIG1fbWF0
cml4TG9jYXRpb24gPSBwcm9ncmFtLT5tX21hdHJpeExvY2F0aW9uOwotICAgICAgICBtX2FscGhh
TG9jYXRpb24gPSBwcm9ncmFtLT5tX2FscGhhTG9jYXRpb247CisgICAgaWYgKHByb2dyYW1JZCAh
PSBtX2N1cnJlbnRTaGFkZXIpIHsKKyAgICAgICAgR0xDKGdsVXNlUHJvZ3JhbShwcm9ncmFtSWQp
KTsKKyAgICAgICAgbV9jdXJyZW50U2hhZGVyID0gcHJvZ3JhbUlkOwogICAgIH0KIH0KIAotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3Bh
Y2l0eSkKLXsKLSAgICBzdGF0aWMgR0xmbG9hdCBnbE1hdHJpeFsxNl07Ci0KLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBtYXRyaXg7Ci0KLSAgICAvLyBBcHBseSBhIHNj
YWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVkIHNp
emUuCi0gICAgcmVuZGVyTWF0cml4LnNjYWxlM2Qod2lkdGgsIGhlaWdodCwgMSk7Ci0KLSAgICAv
LyBBcHBseSB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmVmb3JlIHNlbmRpbmcgdGhlIHRyYW5zZm9y
bSBvdmVyIHRvIHRoZSBzaGFkZXIuCi0gICAgcmVuZGVyTWF0cml4Lm11bHRpcGx5KG1fcHJvamVj
dGlvbk1hdHJpeCk7Ci0KLSAgICB0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgcmVuZGVyTWF0cml4
KTsKLQotICAgIGdsVW5pZm9ybU1hdHJpeDRmdihtX21hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwg
JmdsTWF0cml4WzBdKTsKLQotICAgIGlmIChtX2FscGhhTG9jYXRpb24gIT0gLTEpCi0gICAgICAg
IGdsVW5pZm9ybTFmKG1fYWxwaGFMb2NhdGlvbiwgb3BhY2l0eSk7Ci0KLSAgICBnbERyYXdFbGVt
ZW50cyhHTF9UUklBTkdMRVMsIDYsIEdMX1VOU0lHTkVEX1NIT1JULCAwKTsKLX0KLQotCiAvLyBV
cGRhdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlIHRoYXQgZmFsbCBp
bnNpZGUgdGhlIHVwZGF0ZVJlY3QKIC8vIGFuZCByZS1jb21wb3NpdHMgYWxsIHN1YmxheWVycy4K
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LApAQCAtMzE1LDE3ICsxNTksMTMg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoYwogICAgIGlmICghbV9y
b290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2
aXNpYmxlIGFyZWEgaGFzIGNoYW5nZWQgdGhlbiBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCi0gICAg
Ly8gdG8gc3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhl
IHByb2plY3Rpb24gbWF0cml4Ci0gICAgLy8gYW5kIHZpZXdwb3J0LgogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogCi0gICAgY2hlY2tHTEVycm9yKCk7Ci0KLSAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKTsKLQotICAgIGNoZWNrR0xFcnJvcigp
OworICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVy
ZUlkKSk7CiAKKyAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSBhcmVhIGhhcyBjaGFu
Z2VkIHRoZW4gYWxsb2NhdGUgYSBuZXcgdGV4dHVyZQorICAgIC8vIHRvIHN0b3JlIHRoZSBjb250
ZW50cyBvZiB0aGUgcm9vdCBsYXllciBhbmQgYWRqdXN0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeAor
ICAgIC8vIGFuZCB2aWV3cG9ydC4KICAgICBpbnQgdmlzaWJsZVJlY3RXaWR0aCA9IHZpc2libGVS
ZWN0LndpZHRoKCk7CiAgICAgaW50IHZpc2libGVSZWN0SGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVp
Z2h0KCk7CiAgICAgaWYgKHZpc2libGVSZWN0V2lkdGggIT0gbV9yb290TGF5ZXJUZXh0dXJlV2lk
dGggfHwgdmlzaWJsZVJlY3RIZWlnaHQgIT0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSB7CkBA
IC0zMzMsMzggKzE3MywxOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cyhjCiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCA9IHZpc2libGVSZWN0LmhlaWdo
dCgpOwogCiAgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KDAsIHZpc2li
bGVSZWN0V2lkdGgsIHZpc2libGVSZWN0SGVpZ2h0LCAwLCAtMTAwMCwgMTAwMCk7Ci0gICAgICAg
IGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3Jvb3RMYXllclRleHR1
cmVXaWR0aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKLQotICAgICAgICBjaGVja0dMRXJyb3IoKTsKKyAgICAgICAgR0xDKGdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3Jvb3RMYXllclRleHR1cmVXaWR0
aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCAwKSk7CiAgICAgfQogCiAgICAgLy8gVGhlIEdMIHZpZXdwb3J0IGNvdmVycyB0aGUgZW50aXJl
IHZpc2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXJzLgotICAgIGdsVmlld3BvcnQo
MCwgMCwgdmlzaWJsZVJlY3RXaWR0aCwgdmlzaWJsZVJlY3RIZWlnaHQpOworICAgIEdMQyhnbFZp
ZXdwb3J0KDAsIDAsIHZpc2libGVSZWN0V2lkdGgsIHZpc2libGVSZWN0SGVpZ2h0KSk7CiAKLSAg
ICBjaGVja0dMRXJyb3IoKTsKKyAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVydGV4IGF0dHJpYnV0
ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KKyAgICBMYXllckNocm9taXVtOjpw
cmVwYXJlRm9yRHJhdyhsYXllclNoYXJlZFZhbHVlcygpKTsKIAotICAgIC8vIFRoZSBsYXllciwg
c2Nyb2xsIGFuZCBkZWJ1ZyBib3JkZXIgc2hhZGVycyBhbGwgdXNlIHRoZSBzYW1lIHZlcnRleCBh
dHRyaWJ1dGVzCi0gICAgLy8gc28gd2UgY2FuIGJpbmQgdGhlbSBvbmx5IG9uY2UuCi0gICAgZ2xC
aW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgbV9xdWFkVmJvSWRzW1ZlcnRpY2VzXSk7Ci0gICAg
Y2hlY2tHTEVycm9yKCk7Ci0gICAgZ2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
LCBtX3F1YWRWYm9JZHNbTGF5ZXJFbGVtZW50c10pOwotICAgIGNoZWNrR0xFcnJvcigpOwotICAg
IEdMdWludCBvZmZzZXQgPSAwOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9u
TG9jYXRpb24sIDMsIEdMX0ZMT0FULCBHTF9GQUxTRSwgNSAqIHNpemVvZihHTGZsb2F0KSwgKEdM
dm9pZCopKG9mZnNldCkpOwotICAgIGNoZWNrR0xFcnJvcigpOwotICAgIG9mZnNldCArPSAzICog
c2l6ZW9mKEdMZmxvYXQpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3RleENvb3JkTG9j
YXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgNSAqIHNpemVvZihHTGZsb2F0KSwgKEdMdm9p
ZCopKG9mZnNldCkpOwotICAgIGNoZWNrR0xFcnJvcigpOwotICAgIGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKLSAgICBn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4Q29vcmRMb2NhdGlvbik7Ci0gICAgY2hlY2tH
TEVycm9yKCk7Ci0gICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKLSAgICBjaGVja0dM
RXJyb3IoKTsKLSAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7Ci0gICAgY2hlY2tHTEVycm9y
KCk7Ci0gICAgZ2xEaXNhYmxlKEdMX0NVTExfRkFDRSk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Cisg
ICAgR0xDKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSk7CisgICAgR0xDKGdsRGlzYWJsZShHTF9D
VUxMX0ZBQ0UpKTsKKyAgICBHTEMoZ2xEZXB0aEZ1bmMoR0xfTEVRVUFMKSk7CiAKICAgICBpZiAo
bV9zY3JvbGxQb3NpdGlvbiA9PSBJbnRQb2ludCgtMSwgLTEpKQogICAgICAgICBtX3Njcm9sbFBv
c2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CkBAIC0zOTQsMTcgKzIxNCwxMyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjCiAgICAgICAgICAgICAoaW50KWZsb29yZigw
LjUgKiB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgKyBzY2FsZUZhY3RvciAqIHNjcm9sbERlbHRhLnko
KSwgMCk7CiAgICAgICAgIHNjcm9sbGVkTGF5ZXJNYXRyaXguc2NhbGUzZCgxLCAtMSwgMSk7CiAK
LSAgICAgICAgLy8gU3dpdGNoIHNoYWRlcnMgdG8gYXZvaWQgUkdCIHN3aXp6bGluZy4KLSAgICAg
ICAgdXNlU2hhZGVyUHJvZ3JhbShTY3JvbGxMYXllclByb2dyYW0pOwotICAgICAgICBnbFVuaWZv
cm0xaShtX3NoYWRlclByb2dyYW1zW1Njcm9sbExheWVyUHJvZ3JhbV0ubV9zYW1wbGVyTG9jYXRp
b24sIDApOwotICAgICAgICBjaGVja0dMRXJyb3IoKTsKLQotICAgICAgICBkcmF3VGV4dHVyZWRR
dWFkKHNjcm9sbGVkTGF5ZXJNYXRyaXgsIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0
LmhlaWdodCgpLCAxKTsKLSAgICAgICAgY2hlY2tHTEVycm9yKCk7CisgICAgICAgIHVzZVNoYWRl
cihtX3Njcm9sbFNoYWRlclByb2dyYW0pOworICAgICAgICBHTEMoZ2xVbmlmb3JtMWkobV9zY3Jv
bGxTaGFkZXJTYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJh
d1RleHR1cmVkUXVhZChtX3Byb2plY3Rpb25NYXRyaXgsIHNjcm9sbGVkTGF5ZXJNYXRyaXgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgo
KSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zY3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiwgLTEpOwogCi0gICAgICAg
IGdsQ29weVRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgY29udGVu
dFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAgIGNoZWNrR0xF
cnJvcigpOworICAgICAgICBHTEMoZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCAwLCAwLCAwLCAwLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSkp
OwogICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQogCkBA
IC00MjMsMTU0ICsyMzksOTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoYwogICAgICAgICBBU1NFUlQocm9vdExheWVyV2lkdGggPT0gdXBkYXRlUmVjdC53aWR0aCgp
ICYmIHJvb3RMYXllckhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKICAgICAgICAgdm9p
ZCogcGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOwogCi0gICAgICAgIGNoZWNrR0xFcnJvcigp
OwogICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRo
ZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgo
KSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxz
KTsKLSAgICAgICAgY2hlY2tHTEVycm9yKCk7CisgICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVS
ZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVscykpOwogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIC8vIEdldCB0aGUgY29u
dGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGlu
dD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9
PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRH
ZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LmhlaWdo
dCgpKTsKICAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0
YSgpOwogCi0gICAgICAgIGNoZWNrR0xFcnJvcigpOwogICAgICAgICAvLyBDb3B5IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCiAgICAg
ICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycg
Y29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAg
ICAgICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQgLSB1cGRhdGVS
ZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgICAgICBjaGVj
a0dMRXJyb3IoKTsKKyAgICAgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXll
clRleHR1cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIHBpeGVscykpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9y
IHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCiAgICAgfQogCiAgICAgZ2xDbGVhckNvbG9yKDAsIDAs
IDEsIDEpOwotICAgIGNoZWNrR0xFcnJvcigpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVS
X0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpOwotICAgIGNoZWNrR0xFcnJvcigpOwogCiAgICAg
Ly8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBl
bnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCi0gICAgdXNlU2hhZGVyUHJvZ3JhbShD
b250ZW50TGF5ZXJQcm9ncmFtKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKLSAgICBnbFVuaWZvcm0x
aShtX3NhbXBsZXJMb2NhdGlvbiwgMCk7Ci0gICAgY2hlY2tHTEVycm9yKCk7CisgICAgLy8gV2Ug
cmV1c2UgdGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCisg
ICAgQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllclNoYXJlZFZhbHVlcyogc3YgPSBj
b250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICB1c2VTaGFkZXIoc3YtPm1fY29udGVudFNo
YWRlclByb2dyYW0pOworICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+bV9zaGFkZXJTYW1wbGVyTG9j
YXRpb24sIDApKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck1hdHJpeDsKICAgICBs
YXllck1hdHJpeC50cmFuc2xhdGUzZCh2aXNpYmxlUmVjdC53aWR0aCgpICogMC41ZiwgdmlzaWJs
ZVJlY3QuaGVpZ2h0KCkgKiAwLjVmLCAwKTsKLSAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyTWF0
cml4LCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSk7Ci0gICAg
Y2hlY2tHTEVycm9yKCk7CisgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChtX3By
b2plY3Rpb25NYXRyaXgsIGxheWVyTWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdi0+bV9zaGFkZXJNYXRyaXhMb2Nh
dGlvbiwgc3YtPm1fc2hhZGVyQWxwaGFMb2NhdGlvbik7CiAKICAgICAvLyBJZiBjdWxsaW5nIGlz
IGVuYWJsZWQgdGhlbiB3ZSB3aWxsIGN1bGwgdGhlIGJhY2tmYWNlLgotICAgIGdsQ3VsbEZhY2Uo
R0xfQkFDSyk7Ci0gICAgY2hlY2tHTEVycm9yKCk7CisgICAgR0xDKGdsQ3VsbEZhY2UoR0xfQkFD
SykpOwogICAgIC8vIFRoZSBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBpcyBzZXR1cCBzdWNoIHRo
YXQgWSBzdGFydHMgYXQgemVybyBhbmQKICAgICAvLyBpbmNyZWFzZXMgZ29pbmcgZG93biB0aGUg
cGFnZSBzbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgd2luZGluZyBvcmRlciBvZgogICAgIC8vIGZy
b250IGZhY2luZyB0cmlhbmdsZXMuCi0gICAgZ2xGcm9udEZhY2UoR0xfQ1cpOwotICAgIGNoZWNr
R0xFcnJvcigpOworICAgIEdMQyhnbEZyb250RmFjZShHTF9DVykpOwogCiAgICAgLy8gVGhlIHNo
YWRlciB1c2VkIHRvIHJlbmRlciBsYXllcnMgcmV0dXJucyBwcmUtbXVsdGlwbGllZCBhbHBoYSBj
b2xvcnMKICAgICAvLyBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIGJsZW5kaW5nIG1vZGUgYXBwcm9w
cmlhdGVseS4KLSAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Ci0g
ICAgZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKLQotICAgIGNo
ZWNrR0xFcnJvcigpOworICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOworICAgIEdMQyhnbEJs
ZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAogICAgIC8vIFRyYW5z
bGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCgt
bV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7CiAKKyAgICAv
LyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zvcm1z
LgogICAgIGZsb2F0IG9wYWNpdHkgPSAxOwotICAgIG1fbGF5ZXJMaXN0LnNocmluaygwKTsKICAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9v
dExheWVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVy
c1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5LCB2aXNpYmxlUmVjdCk7Ci0KLSAgICAvLyBTb3J0
IGxheWVycyBieSB0aGUgeiBjb29yZGluYXRlIG9mIHRoZWlyIGNlbnRlciBzbyB0aGF0IGxheWVy
cyBmdXJ0aGVyCi0gICAgLy8gYXdheSBnZXQgZHJhd24gZmlyc3QuCi0gICAgc3RkOjpzdGFibGVf
c29ydChtX2xheWVyTGlzdC5iZWdpbigpLCBtX2xheWVyTGlzdC5lbmQoKSwgY29tcGFyZUxheWVy
Wik7CisgICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7
IGkrKykKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwg
bWF0cml4LCBvcGFjaXR5KTsKIAogICAgIC8vIEVuYWJsZSBzY2lzc29yaW5nIHRvIGF2b2lkIHJl
bmRlcmluZyBjb21wb3NpdGVkIGxheWVycyBvdmVyIHRoZSBzY3JvbGxiYXJzLgotICAgIGdsRW5h
YmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgZ2xTY2lzc29yKDAsIHZpc2libGVSZWN0LmhlaWdo
dCgpIC0gY29udGVudFJlY3QuaGVpZ2h0KCksIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRS
ZWN0LmhlaWdodCgpKTsKKyAgICBHTEMoZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKSk7CisgICAg
R0xDKGdsU2Npc3NvcigwLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAtIGNvbnRlbnRSZWN0LmhlaWdo
dCgpLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSkpOwogCi0gICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2xheWVyTGlzdC5zaXplKCk7IGorKykKLSAgICAgICAg
ZHJhd0xheWVyKG1fbGF5ZXJMaXN0W2pdKTsKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJl
ZSBvbmUgbW9yZSB0aW1lIHRvIGRyYXcgdGhlIGxheWVycy4KKyAgICBtX3Zpc2libGVSZWN0ID0g
dmlzaWJsZVJlY3Q7CisgICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykK
KyAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOwogCi0gICAg
Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgR0xDKGdsRGlzYWJsZShHTF9TQ0lTU09S
X1RFU1QpKTsKIAotICAgIGdsRmx1c2goKTsKKyAgICAvLyBGSVhNRTogSXMgdGhlIGZsdXNoIHJl
YWxseSBuZWNlc3NhcnkgaGVyZT8KKyAgICBHTEMoZ2xGbHVzaCgpKTsKICAgICBtX2dsZXMyQ29u
dGV4dC0+c3dhcEJ1ZmZlcnMoKTsKIAogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAK
LS8vIFJldHVybnMgdGhlIGlkIG9mIHRoZSB0ZXh0dXJlIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdp
dGggdGhlIGxheWVyIG9yCi0vLyAtMSBpZiB0aGUgaWQgaGFzbid0IGJlZW4gcmVnaXN0ZXJlZCB5
ZXQuCi1pbnQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRUZXh0dXJlSWQoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIpCi17Ci0gICAgVGV4dHVyZUlkTWFwOjppdGVyYXRvciB0ZXh0dXJlSWQgPSBtX3Rl
eHR1cmVJZE1hcC5maW5kKGxheWVyKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlk
TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gdGV4dHVyZUlkLT5zZWNvbmQ7Ci0KLSAgICByZXR1
cm4gLTE7Ci19Ci0KLS8vIEFsbG9jYXRlcyBhIG5ldyB0ZXh0dXJlIGZvciB0aGUgbGF5ZXIgYW5k
IHJlZ2lzdGVycyBpdCBpbiB0aGUgdGV4dHVyZUlkIG1hcC4KLS8vIEZJWE1FOiBXZSB3aWxsIG5l
ZWQgdG8gY29tZSB1cCB3aXRoIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFsbG9jYXRpb24gc3RyYXRl
Z3kgaGVyZS4KLWludCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmFzc2lnblRleHR1cmVGb3JMYXll
cihMYXllckNocm9taXVtKiBsYXllcikKKy8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgZXZl
bnR1YWxseSBiZSByZXBsYWNlZCBieSBhIHByb3BlciB0ZXh0dXJlIG1hbmFnZXIuCit1bnNpZ25l
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVGV4dHVyZSgpCiB7Ci0gICAgR0x1
aW50IHRleHR1cmVJZCA9IGNyZWF0ZUxheWVyVGV4dHVyZSgpOwotCi0gICAgLy8gRklYTUU6IENo
ZWNrIHRoYXQgdGV4dHVyZUlkIGlzIHZhbGlkCi0gICAgbV90ZXh0dXJlSWRNYXAuc2V0KGxheWVy
LCB0ZXh0dXJlSWQpOwotCi0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0KKyAg
ICBHTHVpbnQgdGV4dHVyZUlkID0gMDsKKyAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlSWQp
OworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKKyAgICAvLyBE
byBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KKyAgICBnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgLy8gTlBPVCB0ZXh0dXJlcyBpbiBHTCBFUyBvbmx5IHdvcmsgd2hlbiB0aGUg
d3JhcCBtb2RlIGlzIHNldCB0byBHTF9DTEFNUF9UT19FREdFLgorICAgIGdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9D
TEFNUF9UT19FREdFKTsKICAgICByZXR1cm4gdGV4dHVyZUlkOwogfQogCi1ib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZnJlZUxheWVyVGV4dHVyZShMYXllckNocm9taXVtKiBsYXllcikKLXsK
LSAgICBUZXh0dXJlSWRNYXA6Oml0ZXJhdG9yIHRleHR1cmVJZCA9IG1fdGV4dHVyZUlkTWFwLmZp
bmQobGF5ZXIpOwotICAgIGlmICh0ZXh0dXJlSWQgPT0gbV90ZXh0dXJlSWRNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBGcmVlIHVwIHRoZSB0ZXh0dXJlLgotICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJih0ZXh0dXJlSWQtPnNlY29uZCkpOwotICAgIG1fdGV4dHVyZUlk
TWFwLnJlbW92ZSh0ZXh0dXJlSWQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBEcmF3cyBh
IGRlYnVnIGJvcmRlciBhcm91bmQgdGhlIGxheWVyJ3MgYm91bmRzLgotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcihMYXllckNocm9taXVtKiBsYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKLXsKLSAgICBzdGF0aWMgR0xmbG9hdCBnbE1h
dHJpeFsxNl07Ci0gICAgQ29sb3IgYm9yZGVyQ29sb3IgPSBsYXllci0+Ym9yZGVyQ29sb3IoKTsK
LSAgICBpZiAoIWJvcmRlckNvbG9yLmFscGhhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVz
ZVNoYWRlclByb2dyYW0oRGVidWdCb3JkZXJQcm9ncmFtKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCByZW5kZXJNYXRyaXggPSBtYXRyaXg7Ci0gICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+
Ym91bmRzKCk7Ci0gICAgcmVuZGVyTWF0cml4LnNjYWxlM2QoYm91bmRzLndpZHRoKCksIGJvdW5k
cy5oZWlnaHQoKSwgMSk7Ci0gICAgcmVuZGVyTWF0cml4Lm11bHRpcGx5KG1fcHJvamVjdGlvbk1h
dHJpeCk7Ci0gICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIHJlbmRlck1hdHJpeCk7Ci0gICAg
dW5zaWduZWQgYm9yZGVyTWF0cml4TG9jYXRpb24gPSBtX3NoYWRlclByb2dyYW1zW0RlYnVnQm9y
ZGVyUHJvZ3JhbV0ubV9tYXRyaXhMb2NhdGlvbjsKLSAgICBnbFVuaWZvcm1NYXRyaXg0ZnYoYm9y
ZGVyTWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pOwotCi0gICAgZ2xVbmlm
b3JtNGYobV9ib3JkZXJDb2xvckxvY2F0aW9uLCBib3JkZXJDb2xvci5yZWQoKSAvIDI1NS4wLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3IuZ3JlZW4o
KSAvIDI1NS4wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVy
Q29sb3IuYmx1ZSgpIC8gMjU1LjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxKTsKLQotICAgIGdsTGluZVdpZHRoKGxheWVyLT5ib3JkZXJXaWR0aCgpKTsKLQotICAg
IC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgbGluZSBhcmUgc3RvcmVkIGluIHRoZSBzYW1lIGFycmF5
IGFzIHRoZSB0cmlhbmdsZSBpbmRpY2VzLgotICAgIGdsRHJhd0VsZW1lbnRzKEdMX0xJTkVfTE9P
UCwgNCwgR0xfVU5TSUdORURfU0hPUlQsICh2b2lkKikoNiAqIHNpemVvZih1bnNpZ25lZCBzaG9y
dCkpKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKLX0KLQogLy8gUmV0dXJucyB0cnVlIGlmIGFueSBw
YXJ0IG9mIHRoZSBsYXllciBmYWxscyB3aXRoaW4gdGhlIHZpc2libGVSZWN0CiBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0KQogewpAQCAtNTg4LDkgKzM0NCw5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
c0xheWVyVmlzaWIKICAgICByZXR1cm4gbWFwcGVkUmVjdC5pbnRlcnNlY3RzKEZsb2F0UmVjdCgt
MSwgLTEsIDIsIDIpKTsKIH0KIAotLy8gVXBkYXRlcyBhbmQgY2FjaGVzIHRoZSBsYXllciB0cmFu
c2Zvcm1zIGFuZCBvcGFjaXR5IHZhbHVlcyB0aGF0IHdpbGwgYmUgdXNlZAotLy8gd2hlbiByZW5k
ZXJpbmcgdGhlbS4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1
cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
YXJlbnRNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQor
Ly8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVu
IG5vZGUgYW5kIHVwZGF0ZXMgdGhlIAorLy8gdHJhbnNmb3JtIGFuZCBvcGFjaXR5IHZhbHVlcy4K
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgs
IGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zv
cm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAogICAgIC8vIGFs
bCBpdHMgc3VibGF5ZXJzLiBJdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHRoZSBsYXll
cidzIHBvc2l0aW9uCkBAIC02MjcsMjMgKzM4MywxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJzCiAgICAgLy8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltj
XQogICAgIGxvY2FsTWF0cml4LnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgsIGNlbnRlck9mZnNl
dFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwogCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVy
IGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMgb2YgdGhlIHBhZ2UuCi0gICAgYm9vbCBs
YXllclZpc2libGUgPSBpc0xheWVyVmlzaWJsZShsYXllciwgbG9jYWxNYXRyaXgsIHZpc2libGVS
ZWN0KTsKLQotICAgIGJvb2wgc2tpcExheWVyID0gZmFsc2U7Ci0gICAgaWYgKGJvdW5kcy53aWR0
aCgpID4gMjA0OCB8fCBib3VuZHMuaGVpZ2h0KCkgPiAyMDQ4KSB7Ci0gICAgICAgIGlmIChsYXll
ci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgICAgICBMT0coTGF5ZXJSZW5kZXJlciwgIlNraXBw
aW5nIGxheWVyIHdpdGggc2l6ZSAlZCAlZCIsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0
KCkpOwotICAgICAgICBza2lwTGF5ZXIgPSB0cnVlOwotICAgIH0KLQogICAgIC8vIENhbGN1bGF0
ZSB0aGUgbGF5ZXIncyBvcGFjaXR5LgogICAgIG9wYWNpdHkgKj0gbGF5ZXItPm9wYWNpdHkoKTsK
IAogICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGxvY2FsTWF0cml4KTsKICAgICBsYXllci0+
c2V0RHJhd09wYWNpdHkob3BhY2l0eSk7Ci0gICAgaWYgKGxheWVyVmlzaWJsZSAmJiAhc2tpcExh
eWVyKQotICAgICAgICBtX2xheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwogCiAgICAgLy8gRmxhdHRl
biB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZSAzRC4KICAgICBpZiAoIWxheWVy
LT5wcmVzZXJ2ZXMzRCgpKSB7CkBAIC02NjcsMjkgKzQxMSw3MSBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzCiAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgdXBkYXRl
TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbG9jYWxNYXRyaXgsIG9wYWNpdHks
IHZpc2libGVSZWN0KTsKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tp
XS5nZXQoKSwgbG9jYWxNYXRyaXgsIG9wYWNpdHkpOworCisgICAgbGF5ZXItPnNldExheWVyUmVu
ZGVyZXIodGhpcyk7Cit9CisKKy8vIFJlY3Vyc2l2ZWx5IHdhbGsgdGhlIGxheWVyIHRyZWUgYW5k
IGRyYXcgdGhlIGxheWVycy4KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
UmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIHN0YXRpYyBib29sIGRlcHRo
VGVzdEVuYWJsZWRGb3JTdWJ0cmVlID0gZmFsc2U7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgbGF5
ZXIgZmFsbHMgd2l0aGluIHRoZSB2aXNpYmxlIGJvdW5kcyBvZiB0aGUgcGFnZS4KKyAgICBib29s
IGxheWVyVmlzaWJsZSA9IGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpLCBtX3Zpc2libGVSZWN0KTsKKworICAgIC8vIEVuYWJsZSBkZXB0aCB0ZXN0aW5nIGZvciB0
aGlzIGxheWVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzIGlmIHByZXNlcnZlczNEIGlzIHNldC4K
KyAgICBib29sIG11c3RDbGVhckRlcHRoID0gZmFsc2U7CisgICAgaWYgKGxheWVyLT5wcmVzZXJ2
ZXMzRCgpKSB7CisgICAgICAgIGlmICghZGVwdGhUZXN0RW5hYmxlZEZvclN1YnRyZWUpIHsKKyAg
ICAgICAgICAgIGdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICAgICAgZGVwdGhUZXN0
RW5hYmxlZEZvclN1YnRyZWUgPSB0cnVlOworCisgICAgICAgICAgICAvLyBOZWVkIHRvIGNsZWFy
IHRoZSBkZXB0aCBidWZmZXIgd2hlbiB3ZSdyZSBkb25lIHJlbmRlcmluZyB0aGlzIHN1YnRyZWUu
CisgICAgICAgICAgICBtdXN0Q2xlYXJEZXB0aCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAobGF5ZXJWaXNpYmxlKQorICAgICAgICBkcmF3TGF5ZXIobGF5ZXIpOworCisgICAg
Ly8gSWYgd2UncmUgdXNpbmcgZGVwdGggdGVzdGluZyB0aGVuIHdlIG5lZWQgdG8gc29ydCB0aGUg
Y2hpbGRyZW4gaW4gWiB0bworICAgIC8vIGdldCB0aGUgdHJhbnNwYXJlbmN5IHRvIHdvcmsgcHJv
cGVybHkuCisgICAgaWYgKGRlcHRoVGVzdEVuYWJsZWRGb3JTdWJ0cmVlKSB7CisgICAgICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdl
dFN1YmxheWVycygpOworICAgICAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+IHN1YmxheWVyTGlz
dDsKKyAgICAgICAgc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMu
c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBzdWJsYXllckxpc3QuYXBwZW5kKHN1YmxheWVyc1tp
XS5nZXQoKSk7CisKKyAgICAgICAgLy8gU29ydCBieSB0aGUgeiBjb29yZGluYXRlIG9mIHRoZSBs
YXllciBjZW50ZXIgc28gdGhhdCBsYXllcnMgZnVydGhlciBhd2F5CisgICAgICAgIC8vIGFyZSBk
cmF3biBmaXJzdC4KKyAgICAgICAgc3RkOjpzdGFibGVfc29ydChzdWJsYXllckxpc3QuYmVnaW4o
KSwgc3VibGF5ZXJMaXN0LmVuZCgpLCBjb21wYXJlTGF5ZXJaKTsKKworICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgc3VibGF5ZXJMaXN0LnNpemUoKTsgaSsrKQorICAgICAgICAgICAgZHJhd0xheWVy
c1JlY3Vyc2l2ZShzdWJsYXllckxpc3RbaV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1
YmxheWVycygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdl
dCgpKTsKKyAgICB9CisKKyAgICBpZiAobXVzdENsZWFyRGVwdGgpIHsKKyAgICAgICAgZ2xEaXNh
YmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICBnbENsZWFyKEdMX0RFUFRIX0JVRkZFUl9CSVQp
OworICAgICAgICBkZXB0aFRlc3RFbmFibGVkRm9yU3VidHJlZSA9IGZhbHNlOworICAgIH0KIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihMYXllckNocm9taXVtKiBs
YXllcikKIHsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbG9jYWxNYXRyaXggPSBs
YXllci0+ZHJhd1RyYW5zZm9ybSgpOwogICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5k
cygpOwogCiAgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBpbnQgdGV4
dHVyZUlkOwotICAgICAgICBpZiAobGF5ZXItPm93bnNUZXh0dXJlKCkpCi0gICAgICAgICAgICB0
ZXh0dXJlSWQgPSBsYXllci0+dGV4dHVyZUlkKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgdGV4dHVyZUlkID0gZ2V0VGV4dHVyZUlkKGxheWVyKTsKLSAgICAgICAgICAgIC8vIElmIG5v
IHRleHR1cmUgaGFzIGJlZW4gY3JlYXRlZCBmb3IgdGhlIGxheWVyIHlldCB0aGVuIGNyZWF0ZSBv
bmUgbm93LgotICAgICAgICAgICAgaWYgKHRleHR1cmVJZCA9PSAtMSkKLSAgICAgICAgICAgICAg
ICB0ZXh0dXJlSWQgPSBhc3NpZ25UZXh0dXJlRm9yTGF5ZXIobGF5ZXIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUmVkcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaWYgbmVjZXNzYXJ5
LgorICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpZiBuZWNlc3Nh
cnkuCiAgICAgICAgIGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7CiAgICAgICAgICAgICAv
LyBVcGRhdGUgdGhlIGJhY2tpbmcgdGV4dHVyZSBjb250ZW50cyBmb3IgYW55IGRpcnR5IHBvcnRp
b24gb2YgdGhlIGxheWVyLgotICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZVRleHR1cmVDb250ZW50
cyh0ZXh0dXJlSWQpOworICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRzKCk7CiAgICAg
ICAgICAgICBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKICAgICAgICAgfQogCkBAIC02
OTgsMTMgKzQ4NCwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExh
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdsRW5hYmxlKEdMX0NVTExfRkFDRSk7CiAKLSAg
ICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgICAgICB1
c2VTaGFkZXJQcm9ncmFtKHN0YXRpY19jYXN0PFNoYWRlclByb2dyYW1UeXBlPihsYXllci0+c2hh
ZGVyUHJvZ3JhbUlkKCkpKTsKLSAgICAgICAgZHJhd1RleHR1cmVkUXVhZChsb2NhbE1hdHJpeCwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgbGF5ZXItPmRyYXdPcGFjaXR5KCkpOwor
ICAgICAgICBsYXllci0+ZHJhdygpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGRlYnVnIGJv
cmRlciBpZiB0aGVyZSBpcyBvbmUuCi0gICAgZHJhd0RlYnVnQm9yZGVyKGxheWVyLCBsb2NhbE1h
dHJpeCk7CisgICAgbGF5ZXItPmRyYXdEZWJ1Z0JvcmRlcigpOwogfQogCiBib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6bWFrZUNvbnRleHRDdXJyZW50KCkKQEAgLTcxMiwyMSArNDk2LDIyIEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29udGV4dEMKICAgICByZXR1cm4gbV9n
bGVzMkNvbnRleHQtPm1ha2VDdXJyZW50KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25zKFNoYWRlclByb2dyYW1UeXBlIHByb2dyYW0p
CisvLyBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHNpemUgaXMgd2l0aGluIHRoZSBtYXhpbXVtIGFs
bG93ZWQgdGV4dHVyZSBzaXplIHJhbmdlLgorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNo
ZWNrVGV4dHVyZVNpemUoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUpCiB7Ci0gICAgdW5zaWdu
ZWQgcHJvZ3JhbUlkID0gbV9zaGFkZXJQcm9ncmFtc1twcm9ncmFtXS5tX3NoYWRlclByb2dyYW1J
ZDsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSWQsIG1fcG9zaXRpb25Mb2NhdGlv
biwgImFfcG9zaXRpb24iKTsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSWQsIG1f
dGV4Q29vcmRMb2NhdGlvbiwgImFfdGV4Q29vcmQiKTsKLQotICAgIC8vIFJlLWxpbmsgdGhlIHBy
b2dyYW0gZm9yIHRoZSBuZXcgYXR0cmlidXRlIGxvY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4KLSAg
ICBnbExpbmtQcm9ncmFtKHByb2dyYW1JZCk7Ci0gICAgY2hlY2tHTEVycm9yKCk7CisgICAgaWYg
KHRleHR1cmVTaXplLndpZHRoKCkgPiBtX21heFRleHR1cmVTaXplIHx8IHRleHR1cmVTaXplLmhl
aWdodCgpID4gbV9tYXhUZXh0dXJlU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZEdMT2JqZWN0cygpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMoKQogewotICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdpbmcgdGhlIGxheWVyIGNv
bnRlbnRzLgotICAgIGNoYXIgdmVydGV4U2hhZGVyU3RyaW5nW10gPQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgLy8gVmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIGZvciByZW5k
ZXJpbmcgdGhlIHNjcm9sbGVkIHJvb3QgbGF5ZXIgcXVhZC4KKyAgICAvLyBUaGV5IGRpZmZlciBm
cm9tIGEgcmVndWxhciBjb250ZW50IGxheWVyIHNoYWRlciBpbiB0aGF0IHRoZXkgZG9uJ3Qgc3dp
enpsZQorICAgIC8vIHRoZSBjb2xvcnMgb3IgdGFrZSBhbiBhbHBoYSB2YWx1ZS4KKyAgICBjaGFy
IHNjcm9sbFZlcnRleFNoYWRlclN0cmluZ1tdID0KICAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFf
cG9zaXRpb247ICAgXG4iCiAgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxu
IgogICAgICAgICAidW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIKQEAgLTczNiwzMCAr
NTIxLDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaAogICAgICAg
ICAiICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgogICAgICAgICAiICB2
X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iOwotICAgIC8vIE5vdGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBTa2lhIGFu
ZCBDb3JlIEdyYXBoaWNzIHZlcnNpb25zOgotICAgIC8vICAtIFNraWEgdXNlcyBCR1JBIGFuZCBv
cmlnaW4gaXMgdXBwZXIgbGVmdAotICAgIC8vICAtIENvcmUgR3JhcGhpY3MgdXNlcyBSR0JBIGFu
ZCBvcmlnaW4gaXMgbG93ZXIgbGVmdAotICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9
Ci0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCi0gICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhh
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ2b2lkIG1haW4o
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0j
aWYgUExBVEZPUk0oU0tJQSkKLSAgICAgICAgIiAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRChz
X3RleHR1cmUsIHZfdGV4Q29vcmQpOyBcbiIKLSAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVj
NCh0ZXhDb2xvci56LCB0ZXhDb2xvci55LCB0ZXhDb2xvci54LCB0ZXhDb2xvci53KSAqIGFscGhh
OyBcbiIKLSNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4
dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIDEuMCAtIHZfdGV4Q29vcmQueSkp
OyBcbiIKLSAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xv
ci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKLSNlbHNlCi0jZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKLSNlbmRpZgotICAgICAgICAi
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsK
LQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHNjcm9sbGVk
IHJvb3QgbGF5ZXIgcXVhZC4gSXQgZGlmZmVycwotICAgIC8vIGZyb20gZnJhZ21lbnRTaGFkZXJT
dHJpbmcgaW4gdGhhdCBpdCBkb2Vzbid0IHN3aXp6bGUgdGhlIGNvbG9ycyBhbmQgZG9lc24ndAot
ICAgIC8vIHRha2UgYW4gYWxwaGEgdmFsdWUuCiAgICAgY2hhciBzY3JvbGxGcmFnbWVudFNoYWRl
clN0cmluZ1tdID0KICAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKQEAgLTc3MCw4NiArNTMxLDE1IEBAIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAgZ2xfRnJhZ0Nv
bG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53
KTsgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iOwogCi0gICAgLy8gQ2FudmFzIGxheWVycyBuZWVkIHRvIGJlIGZsaXBw
ZWQgdmVydGljYWxseSBhbmQgdGhlaXIgY29sb3JzIHNob3VsZG4ndCBiZQotICAgIC8vIHN3aXp6
bGVkLgotICAgIGNoYXIgY2FudmFzRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9Ci0gICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0g
ICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIHZl
YzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgMS4w
IC0gdl90ZXhDb29yZC55KSk7IFxuIgotICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRl
eENvbG9yLngsIHRleENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxu
IgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIjsKLQotICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdpbmcgdGhlIGRlYnVnIGJvcmRl
cnMgYXJvdW5kIHRoZSBsYXllcnMuCi0gICAgY2hhciBib3JkZXJWZXJ0ZXhTaGFkZXJTdHJpbmdb
XSA9Ci0gICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgotICAgICAgICAi
dW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpICAg
ICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgotICAgICAgICAiICAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIK
LSAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwotICAgIGNoYXIgYm9y
ZGVyRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9Ci0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIHZl
YzQgY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ2
b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0g
ICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCi0gICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iOwotCi0gICAgR0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAt
MC41ZiwgIDAuNWYsIDAuMGYsIC8vIFBvc2l0aW9uIDAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjBmLCAgMS4wZiwgLy8gVGV4Q29vcmQgMCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0wLjVmLCAtMC41ZiwgMC4wZiwgLy8gUG9zaXRpb24gMQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuMGYsICAwLjBmLCAvLyBUZXhDb29yZCAxCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMC41ZiwgLTAuNWYsIDAuMGYsIC8vIFBvc2l0aW9uIDIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLjBmLCAgMC4wZiwgLy8gVGV4Q29vcmQgMgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAuNWYsICAwLjVmLCAwLjBmLCAvLyBQb3NpdGlvbiAzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4wZiwgIDEuMGYgLy8gVGV4Q29vcmQgMwotICAgICAgICAgICAg
ICAgICAgICAgICAgIH07Ci0gICAgR0x1c2hvcnQgaW5kaWNlc1tdID0geyAwLCAxLCAyLCAwLCAy
LCAzLCAvLyBUaGUgdHdvIHRyaWFuZ2xlcyB0aGF0IG1ha2UgdXAgdGhlIGxheWVyIHF1YWQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzfTsgLy8gQSBsaW5lIHBhdGggZm9y
IGRyYXdpbmcgdGhlIGxheWVyIGJvcmRlci4KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgaWYgKCFjcmVhdGVMYXllclNoYWRlcihDb250ZW50TGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhT
aGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKSkgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9yIGNvbnRlbnQgbGF5ZXJzIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgTGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVy
UHJvZ3JhbUlkKENvbnRlbnRMYXllclByb2dyYW0pOwotCi0gICAgaWYgKCFjcmVhdGVMYXllclNo
YWRlcihDYW52YXNMYXllclByb2dyYW0sIHZlcnRleFNoYWRlclN0cmluZywgY2FudmFzRnJhZ21l
bnRTaGFkZXJTdHJpbmcpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBz
aGFkZXIgcHJvZ3JhbSBmb3IgQ2FudmFzIGxheWVycyIpOworICAgIG1fc2Nyb2xsU2hhZGVyUHJv
Z3JhbSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0oc2Nyb2xsVmVydGV4U2hh
ZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVudFNoYWRlclN0cmluZyk7CisgICAgaWYgKCFtX3Njcm9s
bFNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJMYXllclJlbmRlcmVyQ2hyb21p
dW06IEZhaWxlZCB0byBjcmVhdGUgc2Nyb2xsIHNoYWRlciBwcm9ncmFtIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJv
Z3JhbUlkKENhbnZhc0xheWVyUHJvZ3JhbSk7CiAKLSAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVy
KFNjcm9sbExheWVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVudFNo
YWRlclN0cmluZykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRl
ciBwcm9ncmFtIGZvciBzY3JvbGxpbmcgbGF5ZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghY3JlYXRlTGF5ZXJTaGFkZXIoRGVidWdCb3JkZXJQcm9ncmFtLCBi
b3JkZXJWZXJ0ZXhTaGFkZXJTdHJpbmcsIGJvcmRlckZyYWdtZW50U2hhZGVyU3RyaW5nKSkgewot
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9yIGRl
YnVnIGJvcmRlcnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFNw
ZWNpZnkgdGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0aW9uIGFuZCB0ZXhDb29yZCBh
bmQgbWFrZSBpdCB0aGUgc2FtZSBmb3IgYWxsIHByb2dyYW1zIHRvCi0gICAgLy8gYXZvaWQgYmlu
ZGluZyByZS1iaW5kaW5nIHRoZSB2ZXJ0ZXggYXR0cmlidXRlcy4KLSAgICBiaW5kQ29tbW9uQXR0
cmliTG9jYXRpb25zKENvbnRlbnRMYXllclByb2dyYW0pOwotICAgIGJpbmRDb21tb25BdHRyaWJM
b2NhdGlvbnMoQ2FudmFzTGF5ZXJQcm9ncmFtKTsKLSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRp
b25zKERlYnVnQm9yZGVyUHJvZ3JhbSk7Ci0gICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9ucyhT
Y3JvbGxMYXllclByb2dyYW0pOwotCi0gICAgLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY29s
b3IgdW5pZm9ybSBmb3IgdGhlIGRlYnVnIGJvcmRlciBzaGFkZXIgcHJvZ3JhbS4KLSAgICBtX2Jv
cmRlckNvbG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW1z
W0RlYnVnQm9yZGVyUHJvZ3JhbV0ubV9zaGFkZXJQcm9ncmFtSWQsICJjb2xvciIpOwotCi0gICAg
Z2xHZW5CdWZmZXJzKDMsIG1fcXVhZFZib0lkcyk7Ci0gICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZ
X0JVRkZFUiwgbV9xdWFkVmJvSWRzW1ZlcnRpY2VzXSk7Ci0gICAgZ2xCdWZmZXJEYXRhKEdMX0FS
UkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKTsK
LSAgICBnbEJpbmRCdWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1fcXVhZFZib0lkc1tM
YXllckVsZW1lbnRzXSk7Ci0gICAgZ2xCdWZmZXJEYXRhKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
LCBzaXplb2YoaW5kaWNlcyksIGluZGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKKyAgICBtX3Njcm9s
bFNoYWRlclNhbXBsZXJMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fc2Nyb2xsU2hh
ZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOworICAgIG1fc2Nyb2xsU2hhZGVyTWF0cml4TG9jYXRp
b24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3Njcm9sbFNoYWRlclByb2dyYW0sICJtYXRyaXgi
KTsKKyAgICBBU1NFUlQobV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24gIT0gLTEgJiYgbV9z
Y3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiAhPSAtMSk7CiAKICAgICAvLyBDcmVhdGUgYSB0ZXh0
dXJlIG9iamVjdCB0byBob2xkIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KICAgICBt
X3Jvb3RMYXllclRleHR1cmVJZCA9IGNyZWF0ZUxheWVyVGV4dHVyZSgpOwpAQCAtODYzLDggKzU1
MywzNSBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoCiAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVB
UkVTVCk7CiAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTkVBUkVTVCk7CiAKKyAgICAvLyBHZXQgdGhlIG1heCB0ZXh0dXJlIHNpemUg
c3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0uCisgICAgZ2xHZXRJbnRlZ2VydihHTF9NQVhfVEVYVFVS
RV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBMYXllckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygmbV9sYXllclNoYXJlZFZhbHVlcyk7CisgICAgQ29udGVudExheWVy
Q2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCZtX2NvbnRlbnRMYXllclNoYXJlZFZh
bHVlcyk7CisgICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMo
Jm1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBMYXllckNocm9taXVtOjpjbGVhbnVwU2hhcmVk
T2JqZWN0cygmbV9sYXllclNoYXJlZFZhbHVlcyk7CisgICAgQ29udGVudExheWVyQ2hyb21pdW06
OmNsZWFudXBTaGFyZWRPYmplY3RzKCZtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyk7CisgICAg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoJm1fY2FudmFzTGF5ZXJT
aGFyZWRWYWx1ZXMpOworCisgICAgaWYgKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkgeworICAgICAg
ICBHTEMoZ2xEZWxldGVQcm9ncmFtKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBt
X3Njcm9sbFNoYWRlclByb2dyYW0gPSAwOworICAgIH0KKworICAgIGlmIChtX3Jvb3RMYXllclRl
eHR1cmVJZCkgeworICAgICAgICBHTEMoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9yb290TGF5ZXJU
ZXh0dXJlSWQpKTsKKyAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSWQgPSAwOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIAorI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKQEAgLTUxLDE1ICs1
MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdMRVMyQ29udGV4dDsKIAotY2xh
c3MgU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgU2hhZGVyUHJvZ3JhbSgpOwotCi0gICAg
dW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7Ci0gICAgaW50IG1fc2FtcGxlckxvY2F0aW9uOwot
ICAgIGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIGludCBtX2FscGhhTG9jYXRpb247Ci19Owor
I2lmbmRlZiBOREVCVUcKKy8vIE5vdGU6IFVuY29tbWVudGluZyB0aGUgZm9sbG93aW5nICNkZWZp
bmUgd2lsbCByZXN1bHQgaW4gc2xvdyBleGVjdXRpb24gc3BlZWQuCisvLyNkZWZpbmUgREVCVUdf
R0xfQ0FMTFMKKyNlbmRpZgogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21w
b3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW0gOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNzgsNzMgKzc1LDU4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgeyBtX25lZWRzRGlzcGxheSA9IHRydWU7IH0KIAot
ICAgIC8vIEZyZWVzIHRoZSB0ZXh0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbGF5ZXIu
Ci0gICAgYm9vbCBmcmVlTGF5ZXJUZXh0dXJlKExheWVyQ2hyb21pdW0qKTsKLQogICAgIGJvb2wg
aGFyZHdhcmVDb21wb3NpdGluZygpIGNvbnN0IHsgcmV0dXJuIG1faGFyZHdhcmVDb21wb3NpdGlu
ZzsgfQogCiAgICAgdm9pZCBzZXRSb290TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmKTsK
IAogICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQuZ2V0KCk7IH0KIAotcHJpdmF0ZToK
LSAgICBlbnVtIFNoYWRlclByb2dyYW1UeXBlIHsgRGVidWdCb3JkZXJQcm9ncmFtLCBTY3JvbGxM
YXllclByb2dyYW0sIENvbnRlbnRMYXllclByb2dyYW0sIENhbnZhc0xheWVyUHJvZ3JhbSwgTnVt
U2hhZGVyUHJvZ3JhbVR5cGVzIH07CisgICAgdW5zaWduZWQgY3JlYXRlTGF5ZXJUZXh0dXJlKCk7
CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgZmxvYXQgb3BhY2l0eSwg
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOworICAgIHN0YXRpYyB2b2lkIGRlYnVnR0xDYWxs
KGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKIAotICAg
IHZvaWQgZHJhd0xheWVyKExheWVyQ2hyb21pdW0qKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvamVjdGlvbk1h
dHJpeDsgfQogCi0gICAgdm9pZCBkcmF3RGVidWdCb3JkZXIoTGF5ZXJDaHJvbWl1bSosIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCB1c2VTaGFkZXIodW5zaWduZWQpOwog
Ci0gICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHkpOworICAgIGJv
b2wgY2hlY2tUZXh0dXJlU2l6ZShjb25zdCBJbnRTaXplJik7CiAKLSAgICBib29sIGlzTGF5ZXJW
aXNpYmxlKExheWVyQ2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0KTsKKyAgICBMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMq
IGxheWVyU2hhcmVkVmFsdWVzKCkgeyByZXR1cm4gJm1fbGF5ZXJTaGFyZWRWYWx1ZXM7IH0KKyAg
ICBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Q29udGVudExheWVyU2hhcmVkVmFsdWVzKiBjb250ZW50
TGF5ZXJTaGFyZWRWYWx1ZXMoKSB7IHJldHVybiAmbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXM7
IH0KKyAgICBDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXllclNoYXJlZFZhbHVlcyogY2Fu
dmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKSB7IHJldHVybiAmbV9jYW52YXNMYXllclNoYXJlZFZhbHVl
czsgfQogCi0gICAgYm9vbCBjcmVhdGVMYXllclNoYWRlcihTaGFkZXJQcm9ncmFtVHlwZSwgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNv
dXJjZSk7Citwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hy
b21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBm
bG9hdCBvcGFjaXR5KTsKIAotICAgIHZvaWQgdXNlU2hhZGVyUHJvZ3JhbShTaGFkZXJQcm9ncmFt
VHlwZSk7CisgICAgdm9pZCBkcmF3TGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAot
ICAgIHZvaWQgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9ucyhTaGFkZXJQcm9ncmFtVHlwZSk7Cisg
ICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSopOwogCi0gICAgZW51bSBWYm9JZHMgeyBW
ZXJ0aWNlcywgTGF5ZXJFbGVtZW50cyB9OworICAgIGJvb2wgaXNMYXllclZpc2libGUoTGF5ZXJD
aHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QpOwogCi0gICAgLy8gVGhlc2UgYXJlIGhlcmUgb25seSB0ZW1wb3JhcmlseSBhbmQg
c2hvdWxkIGJlIHJlbW92ZWQgb25jZSB3ZSBzd2l0Y2ggb3ZlciB0byBHR0wKICAgICBib29sIG1h
a2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgYm9vbCBpbml0aWFsaXplU2hhcmVkR0xPYmplY3Rz
KCk7Ci0gICAgaW50IGdldFRleHR1cmVJZChMYXllckNocm9taXVtKik7Ci0gICAgaW50IGFzc2ln
blRleHR1cmVGb3JMYXllcihMYXllckNocm9taXVtKik7Ci0KLSAgICBTaGFkZXJQcm9ncmFtIG1f
c2hhZGVyUHJvZ3JhbXNbTnVtU2hhZGVyUHJvZ3JhbVR5cGVzXTsKKyAgICBib29sIGluaXRpYWxp
emVTaGFyZWRPYmplY3RzKCk7CisgICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCiAg
ICAgdW5zaWduZWQgbV9yb290TGF5ZXJUZXh0dXJlSWQ7CiAgICAgaW50IG1fcm9vdExheWVyVGV4
dHVyZVdpZHRoOwogICAgIGludCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7CiAKLSAgICAvLyBT
aGFkZXIgdW5pZm9ybSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSAgICBjb25zdCBpbnQgbV9w
b3NpdGlvbkxvY2F0aW9uOwotICAgIGNvbnN0IGludCBtX3RleENvb3JkTG9jYXRpb247Ci0gICAg
aW50IG1fc2FtcGxlckxvY2F0aW9uOwotICAgIGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIGlu
dCBtX2FscGhhTG9jYXRpb247Ci0gICAgaW50IG1fYm9yZGVyQ29sb3JMb2NhdGlvbjsKKyAgICAv
LyBTY3JvbGwgc2hhZGVyIHVuaWZvcm0gbG9jYXRpb25zLgorICAgIHVuc2lnbmVkIG1fc2Nyb2xs
U2hhZGVyUHJvZ3JhbTsKKyAgICBpbnQgbV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb247Cisg
ICAgaW50IG1fc2Nyb2xsU2hhZGVyTWF0cml4TG9jYXRpb247CiAKLSAgICB1bnNpZ25lZCBtX3F1
YWRWYm9JZHNbM107CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4
OwogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdExheWVyOwogCi0gICAgVmVjdG9y
PExheWVyQ2hyb21pdW0qPiBtX2xheWVyTGlzdDsKLQogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7
CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1faGFyZHdhcmVDb21w
b3NpdGluZzsKIAotICAgIFNoYWRlclByb2dyYW1UeXBlIG1fY3VycmVudFNoYWRlclByb2dyYW1U
eXBlOwotCi0gICAgLy8gTWFwIGFzc29jaWF0aW5nIGxheWVycyB3aXRoIHRleHR1cmVzIGlkcyB1
c2VkIGJ5IHRoZSBHTCBjb21wb3NpdG9yLgotICAgIHR5cGVkZWYgSGFzaE1hcDxMYXllckNocm9t
aXVtKiwgdW5zaWduZWQ+IFRleHR1cmVJZE1hcDsKLSAgICBUZXh0dXJlSWRNYXAgbV90ZXh0dXJl
SWRNYXA7CisgICAgdW5zaWduZWQgaW50IG1fY3VycmVudFNoYWRlcjsKIAogI2lmIFBMQVRGT1JN
KFNLSUEpCiAgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZh
czsKQEAgLTE1OCw5ICsxNDAsMjggQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9yb290TGF5
ZXJDYW52YXNTaXplOwogCisgICAgSW50UmVjdCBtX3Zpc2libGVSZWN0OworCisgICAgaW50IG1f
bWF4VGV4dHVyZVNpemU7CisKKyAgICAvLyBTdG9yZSB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJl
dHdlZW4gaW5zdGFuY2VzIG9mIGVhY2ggbGF5ZXIgdHlwZQorICAgIC8vIGFzc29jaWF0ZWQgd2l0
aCB0aGlzIGluc3RhbmNlIG9mIHRoZSBjb21wb3NpdG9yLiBTaW5jZSB0aGVyZSBjYW4gYmUKKyAg
ICAvLyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIGNvbXBvc2l0b3IgcnVubmluZyBpbiB0aGUg
c2FtZSByZW5kZXJlciBwcm9jZXNzCisgICAgLy8gd2UgY2Fubm90IHN0b3JlIHRoZXNlIHZhbHVl
cyBpbiBzdGF0aWMgdmFyaWFibGVzLgorICAgIExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyBt
X2xheWVyU2hhcmVkVmFsdWVzOworICAgIENvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5
ZXJTaGFyZWRWYWx1ZXMgbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXM7CisgICAgQ2FudmFzTGF5
ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMgbV9jYW52YXNMYXllclNoYXJlZFZh
bHVlczsKKwogICAgIE93blB0cjxHTEVTMkNvbnRleHQ+IG1fZ2xlczJDb250ZXh0OwogfTsKIAor
I2lmZGVmIERFQlVHX0dMX0NBTExTCisjZGVmaW5lIEdMQyh4KSB7IHgsIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZGVidWdHTENhbGwoI3gsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0KKyNlbHNlCisj
ZGVmaW5lIEdMQyh4KSB4CisjZW5kaWYKKworCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDY1NTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1M
YXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NSZWZQdHI8VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bT4gVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUcmFuc2Zvcm1MYXllckNocm9taXVtKG93bmVyKSk7Ci19Ci0KLVRyYW5zZm9ybUxh
eWVyQ2hyb21pdW06OlRyYW5zZm9ybUxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcikKLSAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCi17Ci19Ci0KLX0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gNjU1NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ci0jaWZuZGVmIFRyYW5zZm9ybUxheWVyQ2hyb21pdW1faAotI2RlZmluZSBUcmFuc2Zvcm1MYXll
ckNocm9taXVtX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBIExheWVy
IHRoYXQgZG9lc24ndCBkcmF3IGFueSBjb250ZW50IGJ1dCBzaW1wbHkgZXhpc3RzIHRvIGdyb3Vw
IGFuZAotLy8gdHJhbnNmb3JtIGl0cyBkZXNjZW5kYW50cy4KLWNsYXNzIFRyYW5zZm9ybUxheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIgPSAwKTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1
cm4gZmFsc2U7IH0KLQotcHJpdmF0ZToKLSAgICBUcmFuc2Zvcm1MYXllckNocm9taXVtKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotfTsKLQotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCShyZXZp
c2lvbiA2NTU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsNyBAQCBQYXNzUmVm
UHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gVmlkZW9MYXllCiB9CiAKIFZpZGVvTGF5ZXJDaHJvbWl1
bTo6VmlkZW9MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAg
OiBMYXllckNocm9taXVtKG93bmVyKQotICAgICwgbV9hbGxvY2F0ZWRUZXh0dXJlSWQoMCkKKyAg
ICA6IENvbnRlbnRMYXllckNocm9taXVtKG93bmVyKQogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAg
LCBtX2NhbnZhcygwKQogICAgICwgbV9za2lhQ29udGV4dCgwKQpAQCAtNjQsNyArNjMsNyBAQCBW
aWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bShHCiB7CiB9CiAKLXZvaWQgVmlk
ZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlk
KQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKIHsKICAgICBSZW5k
ZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJhY2tpbmcq
PihtX293bmVyLT5jbGllbnQoKSk7CiAgICAgaWYgKCFiYWNraW5nIHx8IGJhY2tpbmctPnBhaW50
aW5nR29lc1RvV2luZG93KCkpCkBAIC0xMDksOSArMTA4LDIwIEBAIHZvaWQgVmlkZW9MYXllckNo
cm9taXVtOjp1cGRhdGVUZXh0dXJlQ28KICAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhl
IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgogICAgIG1fY2FudmFzLT50cmFu
c2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8
U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7CiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
dGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCisgICAgbV9za2lwc0RyYXcg
PSBmYWxzZTsKKyAgICBpZiAoIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShyZXF1
aXJlZFRleHR1cmVTaXplKSkgeworICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBtX2NvbnRlbnRzVGV4
dHVyZTsKKyAgICBpZiAoIXRleHR1cmVJZCkKKyAgICAgICAgdGV4dHVyZUlkID0gbGF5ZXJSZW5k
ZXJlcigpLT5jcmVhdGVMYXllclRleHR1cmUoKTsKKwogICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlk
IG9yIHNpemUgY2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUsIHRoZW4gd2UgbmVlZCB0byB0ZWxsIEdM
CiAgICAgLy8gdG8gcmUtYWxsb2NhdGUgYSB0ZXh0dXJlLgotICAgIGlmIChtX2FsbG9jYXRlZFRl
eHR1cmVJZCAhPSB0ZXh0dXJlSWQgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRl
ZFRleHR1cmVTaXplKQorICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZSAhPSB0ZXh0dXJlSWQgfHwg
cmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXplKQogICAgICAgICBj
cmVhdGVUZXh0dXJlUmVjdChyZXF1aXJlZFRleHR1cmVTaXplLCBkaXJ0eVJlY3QsIHRleHR1cmVJ
ZCk7CiAgICAgZWxzZQogICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChkaXJ0eVJlY3QsIHRleHR1
cmVJZCk7CkBAIC0xNTAsNyArMTYwLDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0
ZVRleHR1cmVSZQogICAgIEFTU0VSVChiaXRtYXBTaXplID09IHJlcXVpcmVkVGV4dHVyZVNpemUp
OwogICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRl
eHR1cmVTaXplLndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CiAKLSAgICBtX2FsbG9jYXRlZFRleHR1cmVJ
ZCA9IHRleHR1cmVJZDsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IHRleHR1cmVJZDsKICAgICBt
X2FsbG9jYXRlZFRleHR1cmVTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6ZTsKIAogICAgIHVwZGF0
ZUNvbXBsZXRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDE2ICszNCwxNiBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNvbnRl
bnRMYXllckNocm9taXVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQSBMYXllciB0
aGF0IGNvbnRhaW5zIGEgVmlkZW8gZWxlbWVudC4KLWNsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBMYXllckNocm9taXVtIHsKK2NsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6IHB1Ymxp
YyBDb250ZW50TGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
VmlkZW9MYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9
IDApOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQp
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOwogCiBwcml2YXRlOgogICAgIFZp
ZGVvTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKQEAgLTUxLDgg
KzUxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCk7CiAgICAgdm9pZCB1cGRhdGVDb21w
bGV0ZWQoKTsKIAotICAgIHVuc2lnbmVkIG1fYWxsb2NhdGVkVGV4dHVyZUlkOwotICAgIEludFNp
emUgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZTsKICNpZiBQTEFURk9STShTS0lBKQogICAgIE93blB0
cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9jYW52YXM7CiAgICAgT3duUHRyPFBsYXRmb3JtQ29u
dGV4dFNraWE+IG1fc2tpYUNvbnRleHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64734</attachid>
            <date>2010-08-18 10:51:48 -0700</date>
            <delta_ts>2010-08-18 22:55:28 -0700</delta_ts>
            <desc>Proposed patch - fixed style issue</desc>
            <filename>restructureCompositor_44148_3.txt</filename>
            <type>text/plain</type>
            <size>107466</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTU4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTExIEBACisyMDEwLTA4LTE3ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlz
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbY2hyb21pdW1dIFJlYXJyYW5naW5nIHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
ZyBjb2RlIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgbGF5ZXIgcmVuZGVyaW5nIGxvZ2ljIG5vdyBs
aXZlcyBpbiB0aGUgbGF5ZXIgY2xhc3NlcyByYXRoZXIgdGhhbiB0aGUKKyAgICAgICAgY29tcG9z
aXRvci4gVGhpcyBsaWZ0cyB0aGUgcmVzdHJpY3Rpb24gb2YgaGF2aW5nIG9uZSB0ZXh0dXJlIHBl
ciBsYXllcgorICAgICAgICBhbmQgc2lnbmlmaWNhbnRseSBjbGVhbnMgdXAgdGhlIGNvbXBvc2l0
b3IgY29kZS4gVGhpcyBjaGFuZ2UgbW9zdGx5CisgICAgICAgIHJlc3VsdGVkIGluIGEgbG90IG9m
IGNvZGUgbW92aW5nIGFyb3VuZCBmaWxlcy4gTm90ZXdvcnRoeSBjaGFuZ2VzCisgICAgICAgIGlu
Y2x1ZGU6CisgICAgICAgICogTWFkZSBMYXllckNocm9taXVtIGEgcHJvcGVyIGJhc2VkIGNsYXNz
IGZvciBsYXllcnMgdGhhdCBtb3N0bHkgaGFuZGxlcworICAgICAgICAgIHRoZSB1cGRhdGVzIHRv
IHRoZSBsYXllciBwcm9wZXJ0aWVzIGFuZCBzdXBlcmxheWVyIC8gc3VibGF5ZXIgdXBkYXRlcy4K
KyAgICAgICAgKiBJbnRyb2R1Y2VkIGEgbmV3IGxheWVyIHR5cGUsIENvbnRlbnRMYXllckNocm9t
aXVtLCB3aGljaCBoYW5kbGVzCisgICAgICAgICAgbGF5ZXJzIHRoYXQgcmVxdWlyZSBhIEdyYXBo
aWNzQ29udGV4dCB0byByZW5kZXIgdGhlaXIgY29udGVudC4KKyAgICAgICAgKiBJbWFnZUxheWVy
Q2hyb21pdW0gYW5kIFZpZGVvTGF5ZXJDaHJvbWl1bSBub3cgZGVyaXZlIGZyb20KKyAgICAgICAg
ICBDb250ZW50TGF5ZXJDaHJvbWl1bSBhcyB0aGV5IHNoYXJlIHRoZSBzYW1lIHNoYWRlciBhbmQg
ZHJhdyBmdW5jdGlvbi4KKyAgICAgICAgKiBSZW1vdmVkIFRyYW5zZm9ybUxheWVyQ2hyb21pdW0g
YXMgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgbm93IHJlcGxhY2VkIGJ5CisgICAgICAgICAgdGhlIGJh
c2UgTGF5ZXJDaHJvbWl1bSBjbGFzcy4KKyAgICAgICAgKiBSZS1hcnJhbmdlZCB0aGUgb3JkZXIg
aW4gd2hpY2ggdGhlIG1lbWJlcnMgb2YgTGF5ZXJDaHJvbWl1bSBhcmUgZGVmaW5lZAorICAgICAg
ICAgIGluIHRoZSBoZWFkZXIgZmlsZSB0byBmb3JtIGEgbW9yZSByZWFzb25hYmxlIGxvZ2ljYWwg
Z3JvdXBpbmcuCisgICAgICAgICogQ2hhbmdlZCBMYXllclJlbmRlcmVyQ2hyb21pdW0gdG8gdXNl
IHRoZSBzaGFkZXIgY3JlYXRpb24gYW5kIGRyYXdpbmcKKyAgICAgICAgICBtZXRob2RzIGRlZmlu
ZWQgaW4gdGhlIGxheWVyIGNsYXNzZXMuIEFzIGEgcmVzdWx0LCBhIGxvdCBvZiBHTCBjb2RlIHdh
cworICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgaW1wbGVtZW50YXRpb24gZmlsZS4KKyAgICAg
ICAgKiBFbGltaW5hdGVkIHJhbmRvbWx5IGRpc3BlcnNlZCBjYWxscyB0byBjaGVjayBmb3IgR0wg
ZXJyb3JzIGJ5IGEgbWFjcm8gKEdMQykKKyAgICAgICAgICB3aGljaCBhbGxvd3MgdHVybmluZyBl
cnJvciB0ZXN0aW5nIG9uL29mZiB3aXRoIGEgc2luZ2xlIGRlZmluZSAoREVCVUdfR0xfQ0FMTFMK
KyAgICAgICAgICBkZWZpbmVkIGluIExheWVyUmVuZGVyZXJDaHJvbWl1bS5oKQorICAgICAgICAq
IFJlcGxhY2VkIHRoZSBwcmV2aW91cyBsYXllciByZW5kZXIgbG9vcCB3aXRoIHR3byB0cmF2ZXJz
YWxzIG9mIHRoZSBsYXllcgorICAgICAgICAgIGhpZXJhcmNoeSwgdGhlIGZpcnN0IHRvIHVwZGF0
ZSB0cmFuc2Zvcm1zIGFuZCBvcGFjaXR5IHZhbHVlcyBhbmQgdGhlCisgICAgICAgICAgc2Vjb25k
IHRvIHJlbmRlciB0aGUgbGF5ZXJzLiBFbGltaW5hdGVkIGdsb2JhbCBaIHNvcnRpbmcgb2YgYWxs
IGxheWVycyBhcworICAgICAgICAgIGl0IHdhcyB3cm9uZy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTQ4CisKKyAgICAgICAgVGVzdDogVmVyaWZp
ZWQgdGhhdCBwYWdlcyB1c2luZyB0aGUgY29tcG9zaXRvciBhbmQgY29tcG9zaXRvcgorICAgICAg
ICAgICAgICBsYXlvdXQgdGVzdHMgaGF2ZSBub3QgcmVncmVzc2VkLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6
Q2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXM6OkNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06
OkNvbnRlbnRMYXllclNoYXJlZFZhbHVlczo6Q29udGVudExheWVyU2hhcmVkVmFsdWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmluaXRpYWxpemVT
aGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpj
bGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hy
b21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnRvR0xNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
ZHJhd1RleHR1cmVkUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3
RGVidWdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6
ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51
cFNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHJlcGFy
ZUZvckRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmdldFN1YmxheWVycyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpjb250ZW50c0RpcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmxheWVyUmVuZGVy
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjcmVhdGVMYXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tUZXh0dXJlU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpwcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6bGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjYW52YXNMYXllclNoYXJlZFZhbHVlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3Jt
TGF5ZXJDaHJvbWl1bS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xh
eWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRl
b0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oOgorCiAyMDEwLTA4LTE3ICBBcml5
YSBIaWRheWF0ICA8YXJpeWFAc2VuY2hhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRv
bmlvIEdvbWVzLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY1NTcyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTIyMjksNiArMjIyOSw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAnLApAQCAtMjI2
OCw4ICsyMjcwLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsaW5nRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxpbmdEYXRhLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBl
ci5jcHAnLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2NTU3MikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxOCBAQAogI2luY2x1ZGUgIkNhbnZhc0xheWVy
Q2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdW5zaWduZWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6bV9zaGFkZXJQ
cm9ncmFtSWQgPSAwOworQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJTaGFyZWRWYWx1
ZXM6OkNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKCkKKyAgICA6IG1fY2FudmFzU2hhZGVyUHJvZ3Jh
bSgwKQorICAgICwgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyU2Ft
cGxlckxvY2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9uKC0xKQoreworfQog
CiBQYXNzUmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IENhbnZhc0xheWVyQ2hyb21pdW06OmNy
ZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogewpAQCAtNTQsMTQgKzYxLDggQEAg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1bQogewogfQogCi11bnNpZ25l
ZCBDYW52YXNMYXllckNocm9taXVtOjp0ZXh0dXJlSWQoKQotewotICAgIHJldHVybiBtX3RleHR1
cmVJZDsKLX0KLQotdm9pZCBDYW52YXNMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVu
dHModW5zaWduZWQgdGV4dHVyZUlkKQordm9pZCBDYW52YXNMYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50cygpCiB7Ci0gICAgQVNTRVJUKHRleHR1cmVJZCA9PSBtX3RleHR1cmVJZCk7CiAgICAg
QVNTRVJUKG1fY29udGV4dCk7CiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKICAgICAgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CkBAIC05Miw1ICs5Myw2
NSBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnNldENvbnRleHQoY29uCiAgICAgbV90ZXh0
dXJlSWQgPSB0ZXh0dXJlSWQ7CiB9CiAKK3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6ZHJhdygp
Cit7CisgICAgQ2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5kZXJlcigpLT5j
YW52YXNMYXllclNoYXJlZFZhbHVlcygpOworICAgIGdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJF
MCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAg
bGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPm1fY2FudmFzU2hhZGVyUHJvZ3JhbSk7Cisg
ICAgR0xDKGdsVW5pZm9ybTFpKHN2LT5tX3NoYWRlclNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAg
IGRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRy
YXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJv
dW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3Yt
Pm1fc2hhZGVyTWF0cml4TG9jYXRpb24sIHN2LT5tX3NoYWRlckFscGhhTG9jYXRpb24pOworfQor
Citib29sIENhbnZhc0xheWVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKENhbnZh
c0xheWVyU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICBjaGFyIHZlcnRleFNoYWRlclN0cmluZ1td
ID0KKyAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAgICAgICJh
dHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQ0IG1h
dHJpeDsgICAgICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAg
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24g
PSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4
Q29vcmQ7ICAgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsK
KworICAgIC8vIENhbnZhcyBsYXllcnMgbmVlZCB0byBiZSBmbGlwcGVkIHZlcnRpY2FsbHkgYW5k
IHRoZWlyIGNvbG9ycyBzaG91bGRuJ3QgYmUKKyAgICAvLyBzd2l6emxlZC4KKyAgICBjaGFyIGZy
YWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZf
dGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9y
bSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAg
ICAidW5pZm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJE
KHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIDEuMCAtIHZfdGV4Q29vcmQueSkpOyBcbiIK
KyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0
ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBzdi0+
bV9jYW52YXNTaGFkZXJQcm9ncmFtID0gY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJT
dHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIXN2LT5tX2NhbnZhc1NoYWRl
clByb2dyYW0pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDYW52YXNMYXllckNocm9taXVtOiBGYWls
ZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBzdi0+bV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihzdi0+bV9jYW52YXNTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgc3YtPm1f
c2hhZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihzdi0+bV9jYW52YXNT
aGFkZXJQcm9ncmFtLCAibWF0cml4Iik7CisgICAgc3YtPm1fc2hhZGVyQWxwaGFMb2NhdGlvbiA9
IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHN2LT5tX2NhbnZhc1NoYWRlclByb2dyYW0sICJhbHBoYSIp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Y2xl
YW51cFNoYXJlZE9iamVjdHMoQ2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMqIHN2KQoreworICAgIGlm
IChzdi0+bV9jYW52YXNTaGFkZXJQcm9ncmFtKSB7CisgICAgICAgIEdMQyhnbERlbGV0ZVByb2dy
YW0oc3YtPm1fY2FudmFzU2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBzdi0+bV9jYW52YXNTaGFk
ZXJQcm9ncmFtID0gMDsKKyAgICB9Cit9CisKKwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNCArNDUsMjMgQEAgY2xhc3MgQ2FudmFzTGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBMYXllcgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZh
c0xheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7
CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQot
ICAgIHZpcnR1YWwgYm9vbCBvd25zVGV4dHVyZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIHRleHR1cmVJZCgpOwotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hhZGVyUHJvZ3JhbUlk
KCkgeyByZXR1cm4gbV9zaGFkZXJQcm9ncmFtSWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOwogCiAgICAgdm9pZCBzZXRDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKIAotICAgIHN0YXRpYyB2b2lk
IHNldFNoYWRlclByb2dyYW1JZCh1bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQpIHsgbV9zaGFkZXJQ
cm9ncmFtSWQgPSBzaGFkZXJQcm9ncmFtSWQ7IH0KKyAgICBjbGFzcyBDYW52YXNMYXllclNoYXJl
ZFZhbHVlcyB7CisgICAgcHVibGljOgorICAgICAgICBDYW52YXNMYXllclNoYXJlZFZhbHVlcygp
OworCisgICAgICAgIHVuc2lnbmVkIG1fY2FudmFzU2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgaW50
IG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uOworICAgICAgICBpbnQgbV9zaGFkZXJNYXRyaXhMb2Nh
dGlvbjsKKyAgICAgICAgaW50IG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsKKyAgICB9OworCisgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoQ2FudmFzTGF5ZXJTaGFyZWRWYWx1
ZXMqKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cyhDYW52YXNMYXllclNo
YXJlZFZhbHVlcyopOwogCiAgICAgY2xhc3MgUHJlcGFyZVRleHR1cmVDYWxsYmFjayA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgpAQCAtNjYsOCArNzUsNiBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKICAg
ICBPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxsYmFjaz4gbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNr
OwotCi0gICAgc3RhdGljIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3JhbUlkOwogfTsKIAogfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorCisj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCisKKyNpZiBQTEFURk9STShTS0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJza2lhL2V4
dC9wbGF0Zm9ybV9jYW52YXMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXll
clNoYXJlZFZhbHVlczo6Q29udGVudExheWVyU2hhcmVkVmFsdWVzKCkKKyAgICA6IG1fY29udGVu
dFNoYWRlclByb2dyYW0oMCkKKyAgICAsIG1fc2hhZGVyTWF0cml4TG9jYXRpb24oLTEpCisgICAg
LCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyQWxwaGFMb2NhdGlv
bigtMSkKK3sKK30KKworUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExh
eWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpKTsKK30KKwor
Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIpCisgICAgOiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9jb250
ZW50c1RleHR1cmUoMCkKK3sKK30KKworQ29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5
ZXJDaHJvbWl1bSgpCit7CisgICAgaWYgKG1fY29udGVudHNUZXh0dXJlKQorICAgICAgICBHTEMo
Z2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb250ZW50c1RleHR1cmUpKTsKK30KKworYm9vbCBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoQ29udGVudExheWVyU2hh
cmVkVmFsdWVzKiBzdikKK3sKKyAgICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBsYXllciBj
b250ZW50cy4KKyAgICBjaGFyIHZlcnRleFNoYWRlclN0cmluZ1tdID0KKyAgICAgICAgImF0dHJp
YnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3Rl
eENvb3JkOyAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIK
KyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgXG4iCisgICAgICAgICJ2b2lk
IG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0
aW9uOyBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAgXG4iCisgICAg
ICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIC8vIE5vdGUgZGlm
ZmVyZW5jZXMgYmV0d2VlbiBTa2lhIGFuZCBDb3JlIEdyYXBoaWNzIHZlcnNpb25zOgorICAgIC8v
ICAtIFNraWEgdXNlcyBCR1JBIGFuZCBvcmlnaW4gaXMgdXBwZXIgbGVmdAorICAgIC8vICAtIENv
cmUgR3JhcGhpY3MgdXNlcyBSR0JBIGFuZCBvcmlnaW4gaXMgbG93ZXIgbGVmdAorICAgIGNoYXIg
ZnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIg
dl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlm
b3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAg
ICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICAgICAgIiAgdmVj
NCB0ZXhDb2xvciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZfdGV4Q29vcmQpOyBcbiIKKyAgICAg
ICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci56LCB0ZXhDb2xvci55LCB0ZXhDb2xv
ci54LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyNlbGlmIFBMQVRGT1JNKENHKQorICAgICAg
ICAiICB2ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3Jk
LngsIDEuMCAtIHZfdGV4Q29vcmQueSkpOyBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0g
dmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFs
cGhhOyBcbiIKKyNlbHNlCisjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRm
b3JtLiIKKyNlbmRpZgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIHN2LT5tX2NvbnRlbnRTaGFkZXJQcm9ncmFt
ID0gY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVy
U3RyaW5nKTsKKyAgICBpZiAoIXN2LT5tX2NvbnRlbnRTaGFkZXJQcm9ncmFtKSB7CisgICAgICAg
IExPR19FUlJPUigiQ29udGVudExheWVyQ2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVy
IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN2LT5tX3No
YWRlclNhbXBsZXJMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKHN2LT5tX2NvbnRlbnRT
aGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgc3YtPm1fc2hhZGVyTWF0cml4TG9jYXRp
b24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihzdi0+bV9jb250ZW50U2hhZGVyUHJvZ3JhbSwgIm1h
dHJpeCIpOworICAgIHN2LT5tX3NoYWRlckFscGhhTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihzdi0+bV9jb250ZW50U2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVj
dHMoQ29udGVudExheWVyU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICBpZiAoc3YtPm1fY29udGVu
dFNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgR0xDKGdsRGVsZXRlUHJvZ3JhbShzdi0+bV9jb250
ZW50U2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBzdi0+bV9jb250ZW50U2hhZGVyUHJvZ3JhbSA9
IDA7CisgICAgfQorfQorCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50
cygpCit7CisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyTGF5ZXJCYWNraW5nKj4obV9vd25lci0+Y2xpZW50KCkpOworICAgIGlmICghYmFja2luZyB8
fCBiYWNraW5nLT5wYWludGluZ0dvZXNUb1dpbmRvdygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQoZHJhd3NDb250ZW50KCkpOworCisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7
CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgdGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUg
aW1wbGVtZW50ZWQuCisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKyAgICBpZiAoIWxheWVyUmVu
ZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShtX2JvdW5kcykpIHsKKyAgICAgICAgbV9za2lwc0Ry
YXcgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm9pZCogcGl4ZWxzID0g
MDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2RpcnR5UmVjdCk7CisgICAgSW50U2l6ZSByZXF1
aXJlZFRleHR1cmVTaXplOworICAgIEludFNpemUgYml0bWFwU2l6ZTsKKworI2lmIFBMQVRGT1JN
KFNLSUEpCisgICAgY29uc3QgU2tCaXRtYXAqIHNraWFCaXRtYXAgPSAwOworICAgIE93blB0cjxz
a2lhOjpQbGF0Zm9ybUNhbnZhcz4gY2FudmFzOworICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRT
a2lhPiBza2lhQ29udGV4dDsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0Nv
bnRleHQ7CisKKyAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7CisgICAgSW50UmVj
dCBib3VuZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7CisKKyAgICAvLyBJZiB0aGUg
dGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBl
bnRpcmUKKyAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCisgICAgaWYgKHJlcXVpcmVkVGV4
dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkKKyAgICAgICAgZGlydHlSZWN0ID0g
Ym91bmRzUmVjdDsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRv
IHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9pZCBkcmF3aW5nIG91dHNpZGUKKyAgICAgICAg
Ly8gdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJlLgorICAgICAgICBkaXJ0eVJlY3Qu
aW50ZXJzZWN0KGJvdW5kc1JlY3QpOworICAgIH0KKworICAgIGNhbnZhcy5zZXQobmV3IHNraWE6
OlBsYXRmb3JtQ2FudmFzKGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIGZh
bHNlKSk7CisgICAgc2tpYUNvbnRleHQuc2V0KG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKGNhbnZh
cy5nZXQoKSkpOworCisjaWYgT1MoV0lORE9XUykKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBn
ZXQgdGV4dCB0byBzaG93IHVwIGNvcnJlY3RseS4gV2l0aG91dCBpdCwKKyAgICAvLyBHREkgcmVu
ZGVycyB3aXRoIHplcm8gYWxwaGEgYW5kIHRoZSB0ZXh0IGJlY29tZXMgaW52aXNpYmxlLgorICAg
IC8vIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgdGhpcyB0byB0cnVlIGRpc2FibGVzIGNsZWFydHlw
ZS4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIHRha2UgdXMgZG93biBhIHZlcnkgc2xvdyB0ZXh0
IHJlbmRlcmluZyBwYXRoPworICAgIC8vIEZJWE1FOiB3aHkgaXMgdGhpcyBpcyBhIHdpbmRvd3Mt
b25seSBjYWxsID8KKyAgICBza2lhQ29udGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1
ZSk7CisjZW5kaWYKKworICAgIGdyYXBoaWNzQ29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4
dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oc2tpYUNvbnRleHQu
Z2V0KCkpKSk7CisKKyAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUg
c3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgorICAgIGNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19j
YXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LngoKSksIHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGly
dHlSZWN0LnkoKSkpOworCisgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMo
KmdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFw
ID0gY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBza2lhQml0
bWFwID0gJmJpdG1hcDsKKyAgICBBU1NFUlQoc2tpYUJpdG1hcCk7CisKKyAgICBTa0F1dG9Mb2Nr
UGl4ZWxzIGxvY2soKnNraWFCaXRtYXApOworICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZp
ZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOworICAgIC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1
cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9ucz8KKyAgICBpZiAoc2tpYUNvbmZpZyA9PSBT
a0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsKKyAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1h
cC0+Z2V0UGl4ZWxzKCk7CisgICAgICAgIGJpdG1hcFNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAt
PndpZHRoKCksIHNraWFCaXRtYXAtPmhlaWdodCgpKTsKKyAgICB9CisjZWxpZiBQTEFURk9STShD
RykKKyAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9ib3VuZHM7CisgICAgSW50UmVjdCBib3Vu
ZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7CisKKyAgICAvLyBJZiB0aGUgdGV4dHVy
ZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUK
KyAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCisgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNp
emUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkKKyAgICAgICAgZGlydHlSZWN0ID0gYm91bmRz
UmVjdDsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBz
aXplIG9mIHRoZSBsYXllciB0byBhdm9pZCBkcmF3aW5nIG91dHNpZGUKKyAgICAgICAgLy8gdGhl
IGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJlLgorICAgICAgICBkaXJ0eVJlY3QuaW50ZXJz
ZWN0KGJvdW5kc1JlY3QpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wVmVjdG9y
OworICAgIGludCByb3dCeXRlcyA9IDQgKiBkaXJ0eVJlY3Qud2lkdGgoKTsKKyAgICB0ZW1wVmVj
dG9yLnJlc2l6ZShyb3dCeXRlcyAqIGRpcnR5UmVjdC5oZWlnaHQoKSk7CisgICAgbWVtc2V0KHRl
bXBWZWN0b3IuZGF0YSgpLCAwLCB0ZW1wVmVjdG9yLnNpemUoKSk7CisgICAgUmV0YWluUHRyPENH
Q29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZp
Y2VSR0IoKSk7CisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4dENHKEFkb3B0Q0Ys
IENHQml0bWFwQ29udGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
cnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29sb3JTcGFjZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkTGFzdCkpOworCisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0Q0cuZ2V0KCkpOworCisgICAgLy8gVHJhbnNsYXRlIHRoZSBncmFwaGljcyBjb250eHQgaW50
byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGRpcnR5IHJlY3QuCisgICAgZ3JhcGhpY3ND
b250ZXh0LnRyYW5zbGF0ZSgtZGlydHlSZWN0LngoKSwgLWRpcnR5UmVjdC55KCkpOworCisgICAg
bV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0
eVJlY3QpOworCisgICAgcGl4ZWxzID0gdGVtcFZlY3Rvci5kYXRhKCk7CisgICAgYml0bWFwU2l6
ZSA9IGRpcnR5UmVjdC5zaXplKCk7CisjZWxzZQorI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBm
b3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKKworICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IG1f
Y29udGVudHNUZXh0dXJlOworICAgIGlmICghdGV4dHVyZUlkKQorICAgICAgICB0ZXh0dXJlSWQg
PSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworCisgICAgaWYgKHBpeGVs
cykKKyAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCByZXF1aXJl
ZFRleHR1cmVTaXplLCAgZGlydHlSZWN0LCB0ZXh0dXJlSWQpOworfQorCit2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNp
emUmIGJpdG1hcFNpemUsIGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0
IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCkKK3sKKyAgICBpZiAoIXBp
eGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCB0ZXh0dXJlSWQpOworCisgICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFuZ2Vk
IHNpbmNlIGxhc3QgdGltZSB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAorICAgIC8vIHRvIHJlLWFs
bG9jYXRlIGEgdGV4dHVyZS4KKyAgICBpZiAobV9jb250ZW50c1RleHR1cmUgIT0gdGV4dHVyZUlk
IHx8IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkgeworICAg
ICAgICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKKyAgICAgICAg
R0xDKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRleHR1
cmVTaXplLndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworCisgICAgICAgIG1fY29udGVudHNUZXh0dXJl
ID0gdGV4dHVyZUlkOworICAgICAgICBtX2FsbG9jYXRlZFRleHR1cmVTaXplID0gcmVxdWlyZWRU
ZXh0dXJlU2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodXBkYXRlUmVjdC53aWR0
aCgpIDw9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUud2lkdGgoKSAmJiB1cGRhdGVSZWN0LmhlaWdo
dCgpIDw9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQo
dXBkYXRlUmVjdC53aWR0aCgpID09IGJpdG1hcFNpemUud2lkdGgoKSAmJiB1cGRhdGVSZWN0Lmhl
aWdodCgpID09IGJpdG1hcFNpemUuaGVpZ2h0KCkpOworI2lmIFBMQVRGT1JNKENHKQorICAgICAg
ICAvLyBUaGUgb3JpZ2luIGlzIGF0IHRoZSBsb3dlciBsZWZ0IGluIENvcmUgR3JhcGhpY3MnIGNv
b3JkaW5hdGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNvcnJlY3QgZm9yIHRoaXMgaGVyZS4KKyAgICAg
ICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdo
dCgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSAtIHVwZGF0ZVJlY3QueSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBw
aXhlbHMpKTsKKyNlbGlmIFBMQVRGT1JNKFNLSUEpCisgICAgICAgIEdMQyhnbFRleFN1YkltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRh
dGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIHBpeGVscykpOworI2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlv
dXIgcGxhdGZvcm0uIgorI2VuZGlmCisgICAgfQorCisgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShG
bG9hdFNpemUoKSk7CisgICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OmRyYXcoKQoreworICAgIGlmIChtX3NraXBzRHJhdykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ29udGVudExheWVyU2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVu
ZGVyZXIoKS0+Y29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CisgICAgQVNTRVJUKGxheWVyUmVu
ZGVyZXIoKSk7CisgICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICBnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29udGVudHNUZXh0dXJlKTsKKyAgICBsYXllclJlbmRl
cmVyKCktPnVzZVNoYWRlcihzdi0+bV9jb250ZW50U2hhZGVyUHJvZ3JhbSk7CisgICAgR0xDKGds
VW5pZm9ybTFpKHN2LT5tX3NoYWRlclNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAgIGRyYXdUZXh0
dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zv
cm0oKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhl
aWdodCgpLCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3YtPm1fc2hhZGVy
TWF0cml4TG9jYXRpb24sIHN2LT5tX3NoYWRlckFscGhhTG9jYXRpb24pOworfQorCit9CisjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRl
ZiBDb250ZW50TGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5lIENvbnRlbnRMYXllckNocm9taXVtX2gK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBIExheWVyIHRoYXQgcmVxdWly
ZXMgYSBHcmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIGl0cyBjb250ZW50cy4KK2NsYXNzIENvbnRl
bnRMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworICAgIGZyaWVuZCBjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW07CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q29udGVudExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
ID0gMCk7CisKKyAgICB+Q29udGVudExheWVyQ2hyb21pdW0oKTsKKworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb250ZW50cygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisgICAgdmlydHVh
bCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3ND
b250ZW50KCk7IH0KKworICAgIC8vIFN0b3JlcyB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdl
ZW4gaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgdGhhdCBhcmUKKyAgICAvLyBhc3NvY2lhdGVkIHdp
dGggdGhlIHNhbWUgTGF5ZXJSZW5kZXJlckNocm9taXVtIChhbmQgaGVuY2UgdGhlIHNhbWUgR0wK
KyAgICAvLyBjb250ZXh0KS4KKyAgICBjbGFzcyBDb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgQ29udGVudExheWVyU2hhcmVkVmFsdWVzKCk7CisKKyAgICAg
ICAgdW5zaWduZWQgbV9jb250ZW50U2hhZGVyUHJvZ3JhbTsKKyAgICAgICAgaW50IG1fc2hhZGVy
U2FtcGxlckxvY2F0aW9uOworICAgICAgICBpbnQgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbjsKKyAg
ICAgICAgaW50IG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsKKyAgICB9OworCisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoQ29udGVudExheWVyU2hhcmVkVmFsdWVzKik7Cisg
ICAgc3RhdGljIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoQ29udGVudExheWVyU2hhcmVkVmFs
dWVzKik7CisKK3Byb3RlY3RlZDoKKyAgICBDb250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKKworICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qodm9pZCog
cGl4ZWxzLCBjb25zdCBJbnRTaXplJiBiaXRtYXBTaXplLCBjb25zdCBJbnRTaXplJiByZXF1aXJl
ZFRleHR1cmVTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkKTsKKworICAgIHVuc2lnbmVkIG1fY29udGVu
dHNUZXh0dXJlOworICAgIEludFNpemUgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZTsKKyAgICBib29s
IG1fc2tpcHNEcmF3OworCit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDY1NTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgIkNvbnRlbnRMYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTUyLDcgKzUzLDYgQEAKICNpbmNsdWRlICJM
YXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJT
eXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgpA
QCAtOTcsNyArOTcsNyBAQCBHcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJv
CiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29udGVudHNMYXllcikKICAgICAsIG1f
Y29udGVudHNMYXllckhhc0JhY2tncm91bmRDb2xvcihmYWxzZSkKIHsKLSAgICBtX2xheWVyID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOworICAgIG1fbGF5ZXIgPSBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKHRoaXMpOwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9
CkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVyUAogewogICAgIGlmIChtX3ByZXNlcnZlczNEICYmICFtX3RyYW5zZm9ybUxheWVyKSB7CiAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgdHJhbnNmb3JtIGxheWVyLgotICAgICAgICBtX3RyYW5zZm9y
bUxheWVyID0gVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBt
X3RyYW5zZm9ybUxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOwogCiAgICAgICAg
IC8vIENvcHkgdGhlIHBvc2l0aW9uIGZyb20gdGhpcyBsYXllci4KICAgICAgICAgdXBkYXRlTGF5
ZXJQb3NpdGlvbigpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjU1NzIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAogI2luY2x1ZGUgIkltYWdlTGF5
ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKICNp
ZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAgLTU0LDcgKzU2LDcgQEAgUGFzc1JlZlB0cjxJbWFn
ZUxheWVyQ2hyb21pdW0+IEltYWdlTGF5ZQogfQogCiBJbWFnZUxheWVyQ2hyb21pdW06OkltYWdl
TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogTGF5ZXJD
aHJvbWl1bShvd25lcikKKyAgICA6IENvbnRlbnRMYXllckNocm9taXVtKG93bmVyKQogICAgICwg
bV9jb250ZW50cygwKQogewogfQpAQCAtNjgsOCArNzAsMTAgQEAgdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OnNldENvbnRlbnRzKE5hdAogICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lk
IEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1
cmVJZCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCiB7CisgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisKICAgICB2b2lkKiBwaXhlbHMgPSAwOwogICAgIElu
dFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0KTsKICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVy
ZVNpemU7CkBAIC0xMjksNiArMTMzLDE3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRh
dGVUZXh0dXJlQ28KICNlbHNlCiAjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBs
YXRmb3JtLiIKICNlbmRpZgorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4gdGls
ZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICBtX3NraXBzRHJhdyA9IGZhbHNlOworICAg
IGlmICghbGF5ZXJSZW5kZXJlcigpLT5jaGVja1RleHR1cmVTaXplKHJlcXVpcmVkVGV4dHVyZVNp
emUpKSB7CisgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IG1fY29udGVudHNUZXh0dXJlOworICAgIGlm
ICghdGV4dHVyZUlkKQorICAgICAgICB0ZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0
ZUxheWVyVGV4dHVyZSgpOworCiAgICAgaWYgKHBpeGVscykKICAgICAgICAgdXBkYXRlVGV4dHVy
ZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCByZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlSZWN0
LCB0ZXh0dXJlSWQpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDE2ICszNCwxOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNv
bnRlbnRMYXllckNocm9taXVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQSBMYXll
ciB0aGF0IGNvbnRhaW5zIG9ubHkgYW4gSW1hZ2UgZWxlbWVudC4KLWNsYXNzIEltYWdlTGF5ZXJD
aHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK2NsYXNzIEltYWdlTGF5ZXJDaHJvbWl1
bSA6IHB1YmxpYyBDb250ZW50TGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lciA9IDApOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CiAgICAg
dmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIG1fY29udGVudHM7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCk7CisK
ICAgICB2b2lkIHNldENvbnRlbnRzKE5hdGl2ZUltYWdlUHRyKTsKIAogcHJpdmF0ZToKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcAkocmV2aXNpb24gNjU1NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCwzNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXVuc2lnbmVk
IExheWVyQ2hyb21pdW06Om1fc2hhZGVyUHJvZ3JhbUlkID0gMDsKK2NvbnN0IHVuc2lnbmVkIExh
eWVyQ2hyb21pdW06Om1fcG9zaXRpb25BdHRyaWJMb2NhdGlvbiA9IDA7Citjb25zdCB1bnNpZ25l
ZCBMYXllckNocm9taXVtOjptX3RleENvb3JkQXR0cmliTG9jYXRpb24gPSAxOworCitzdGF0aWMg
R0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkK
K3sKKyAgICBHTHVpbnQgc2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlwZSk7CisgICAgaWYgKCFz
aGFkZXIpCisgICAgICAgIHJldHVybiAwOworICAgIEdMQyhnbFNoYWRlclNvdXJjZShzaGFkZXIs
IDEsICZzaGFkZXJTb3VyY2UsIDApKTsKKyAgICBHTEMoZ2xDb21waWxlU2hhZGVyKHNoYWRlcikp
OworICAgIEdMaW50IGNvbXBpbGVkOworICAgIEdMQyhnbEdldFNoYWRlcml2KHNoYWRlciwgR0xf
Q09NUElMRV9TVEFUVVMsICZjb21waWxlZCkpOworICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAg
ICAgR0xDKGdsRGVsZXRlU2hhZGVyKHNoYWRlcikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgcmV0dXJuIHNoYWRlcjsKK30KKworTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpT
aGFyZWRWYWx1ZXMoKQorICAgIDogbV9xdWFkVmVydGljZXNWYm8oMCkKKyAgICAsIG1fcXVhZEVs
ZW1lbnRzVmJvKDApCisgICAgLCBtX21heFRleHR1cmVTaXplKDApCisgICAgLCBtX2JvcmRlclNo
YWRlclByb2dyYW0oMCkKKyAgICAsIG1fYm9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oLTEpCisg
ICAgLCBtX2JvcmRlclNoYWRlckNvbG9yTG9jYXRpb24oLTEpCit7Cit9CiAKIFBhc3NSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIpCiB7CkBAIC02MiwxMyArODksMTAgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1f
YmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCiAgICAgLCBtX2JvcmRlckNvbG9yKDAsIDAsIDAs
IDApCi0gICAgLCBtX2xheWVyUmVuZGVyZXIoMCkKLSAgICAsIG1fZWRnZUFudGlhbGlhc2luZ01h
c2soMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX3pQb3NpdGlvbigwLjApCiAgICAg
LCBtX2FuY2hvclBvaW50WigwKQogICAgICwgbV9ib3JkZXJXaWR0aCgwKQotICAgICwgbV9hbGxv
Y2F0ZWRUZXh0dXJlSWQoMCkKICAgICAsIG1fY2xlYXJzQ29udGV4dChmYWxzZSkKICAgICAsIG1f
ZG91YmxlU2lkZWQodHJ1ZSkKICAgICAsIG1faGlkZGVuKGZhbHNlKQpAQCAtNzYsNiArMTAwLDcg
QEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheQogICAgICwgbV9vcGFx
dWUodHJ1ZSkKICAgICAsIG1fZ2VvbWV0cnlGbGlwcGVkKGZhbHNlKQogICAgICwgbV9uZWVkc0Rp
c3BsYXlPbkJvdW5kc0NoYW5nZShmYWxzZSkKKyAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQogewog
fQogCkBAIC04NywxMCArMTEyLDYgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQog
CiAgICAgLy8gUmVtb3ZlIHRoZSBzdXBlcmxheWVyIHJlZmVyZW5jZSBmcm9tIGFsbCBzdWJsYXll
cnMuCiAgICAgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7Ci0KLSAgICAvLyBOb3RpZnkgdGhlIHJlbmRl
cmVyIHRvIGNsZWFuIHVwIHRoZSB0ZXh0dXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGF5ZXIuCi0g
ICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5mcmVlTGF5
ZXJUZXh0dXJlKHRoaXMpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVy
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKQEAgLTEwMSwxNDAgKzEyMiw0NiBA
QCB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5CiAgICAgbV9sYXllclJl
bmRlcmVyID0gcmVuZGVyZXI7CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVy
ZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCkKK3Vuc2lnbmVkIExheWVyQ2hyb21pdW06OmNy
ZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBj
aGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKIHsKLSAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJh
Y2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJhY2tpbmcqPihtX293bmVyLT5jbGllbnQo
KSk7Ci0gICAgaWYgKCFiYWNraW5nIHx8IGJhY2tpbmctPnBhaW50aW5nR29lc1RvV2luZG93KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7CisgICAgR0x1
aW50IHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfVkVSVEVYX1NIQURFUiwgdmVydGV4U2hh
ZGVyU291cmNlKTsKKyAgICBpZiAoIXZlcnRleFNoYWRlcikgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgdmVydGV4IHNoYWRlciIpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CiAKLSAgICB2b2lkKiBwaXhlbHMgPSAwOwotICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGly
dHlSZWN0KTsKLSAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7Ci0gICAgSW50U2l6ZSBi
aXRtYXBTaXplOwotCi0jaWYgUExBVEZPUk0oU0tJQSkKLSAgICBjb25zdCBTa0JpdG1hcCogc2tp
YUJpdG1hcCA9IDA7Ci0gICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBjYW52YXM7Ci0g
ICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IHNraWFDb250ZXh0OwotICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKLQotICAgIHJlcXVpcmVkVGV4dHVyZVNp
emUgPSBtX2JvdW5kczsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1f
Ym91bmRzKTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVk
IHRoZW4gd2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQotICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBs
YXllci4KLSAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVT
aXplKQotICAgICAgICBkaXJ0eVJlY3QgPSBib3VuZHNSZWN0OwotICAgIGVsc2UgewotICAgICAg
ICAvLyBDbGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lk
IGRyYXdpbmcgb3V0c2lkZQotICAgICAgICAvLyB0aGUgYm91bmRzIG9mIHRoZSBiYWNraW5nIHRl
eHR1cmUuCi0gICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVjdCk7Ci0gICAgfQot
Ci0gICAgY2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRo
KCksIGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBza2lhQ29udGV4dC5zZXQobmV3
IFBsYXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7Ci0KLSNpZiBPUyhXSU5ET1dTKQot
ICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5LiBX
aXRob3V0IGl0LAotICAgIC8vIEdESSByZW5kZXJzIHdpdGggemVybyBhbHBoYSBhbmQgdGhlIHRl
eHQgYmVjb21lcyBpbnZpc2libGUuCi0gICAgLy8gVW5mb3J0dW5hdGVseSwgc2V0dGluZyB0aGlz
IHRvIHRydWUgZGlzYWJsZXMgY2xlYXJ0eXBlLgotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgdGFr
ZSB1cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5nIHBhdGg/Ci0gICAgLy8gRklYTUU6
IHdoeSBpcyB0aGlzIGlzIGEgd2luZG93cy1vbmx5IGNhbGwgPwotICAgIHNraWFDb250ZXh0LT5z
ZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKLSNlbmRpZgotCi0gICAgZ3JhcGhpY3NDb250
ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpKTsKLQotICAgIC8vIEJyaW5nIHRoZSBj
YW52YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAg
Y2FudmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwg
c3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7Ci0KLSAgICBtX293bmVyLT5w
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwot
ICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NC
aXRtYXAoZmFsc2UpOwotICAgIHNraWFCaXRtYXAgPSAmYml0bWFwOwotICAgIEFTU0VSVChza2lh
Qml0bWFwKTsKLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAg
U2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7Ci0gICAg
Ly8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRpb25z
PwotICAgIGlmIChza2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykgewot
ICAgICAgICBwaXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKLSAgICAgICAgYml0bWFw
U2l6ZSA9IEludFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkp
OwotICAgIH0KLSNlbGlmIFBMQVRGT1JNKENHKQotICAgIHJlcXVpcmVkVGV4dHVyZVNpemUgPSBt
X2JvdW5kczsKLSAgICBJbnRSZWN0IGJvdW5kc1JlY3QoSW50UG9pbnQoMCwgMCksIG1fYm91bmRz
KTsKLQotICAgIC8vIElmIHRoZSB0ZXh0dXJlIG5lZWRzIHRvIGJlIHJlYWxsb2NhdGVkIHRoZW4g
d2UgbXVzdCByZWRyYXcgdGhlIGVudGlyZQotICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBsYXllci4K
LSAgICBpZiAocmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXplKQot
ICAgICAgICBkaXJ0eVJlY3QgPSBib3VuZHNSZWN0OwotICAgIGVsc2UgewotICAgICAgICAvLyBD
bGlwIHRoZSBkaXJ0eVJlY3QgdG8gdGhlIHNpemUgb2YgdGhlIGxheWVyIHRvIGF2b2lkIGRyYXdp
bmcgb3V0c2lkZQotICAgICAgICAvLyB0aGUgYm91bmRzIG9mIHRoZSBiYWNraW5nIHRleHR1cmUu
Ci0gICAgICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QoYm91bmRzUmVjdCk7Ci0gICAgfQotCi0gICAg
VmVjdG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7Ci0gICAgaW50IHJvd0J5dGVzID0gNCAqIGRpcnR5
UmVjdC53aWR0aCgpOwotICAgIHRlbXBWZWN0b3IucmVzaXplKHJvd0J5dGVzICogZGlydHlSZWN0
LmhlaWdodCgpKTsKLSAgICBtZW1zZXQodGVtcFZlY3Rvci5kYXRhKCksIDAsIHRlbXBWZWN0b3Iu
c2l6ZSgpKTsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlKEFkb3B0
Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKLSAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjb250ZXh0Q0coQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0
b3IuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGlydHlSZWN0LndpZHRoKCksIGRpcnR5UmVjdC5oZWln
aHQoKSwgOCwgcm93Qnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHRDRy5nZXQoKSk7Ci0KLSAgICAvLyBUcmFuc2xh
dGUgdGhlIGdyYXBoaWNzIGNvbnR4dCBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUg
ZGlydHkgcmVjdC4KLSAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgp
LCAtZGlydHlSZWN0LnkoKSk7Ci0KLSAgICBtX293bmVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250
ZW50cyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci0KLSAgICBwaXhlbHMgPSB0ZW1wVmVj
dG9yLmRhdGEoKTsKLSAgICBiaXRtYXBTaXplID0gZGlydHlSZWN0LnNpemUoKTsKLSNlbHNlCi0j
ZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKLSNlbmRpZgorICAg
IEdMdWludCBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBm
cmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgaWYgKCFmcmFnbWVudFNoYWRlcikgeworICAgICAg
ICBHTEMoZ2xEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKSk7CisgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHRvIGNyZWF0ZSBmcmFnbWVudCBzaGFkZXIiKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCi0gICAgaWYgKHBpeGVscykKLSAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxz
LCBiaXRtYXBTaXplLCByZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlSZWN0LCB0ZXh0dXJlSWQp
OwotfQorICAgIEdMdWludCBwcm9ncmFtT2JqZWN0ID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0
ZSBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLXZvaWQgTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXpl
JiBiaXRtYXBTaXplLCBjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJ
bnRSZWN0JiB1cGRhdGVSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQpCi17Ci0gICAgaWYgKCFwaXhl
bHMpCi0gICAgICAgIHJldHVybjsKKyAgICBHTEMoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbU9iamVj
dCwgdmVydGV4U2hhZGVyKSk7CisgICAgR0xDKGdsQXR0YWNoU2hhZGVyKHByb2dyYW1PYmplY3Qs
IGZyYWdtZW50U2hhZGVyKSk7CiAKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmVJZCk7Ci0gICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFuZ2VkIHNpbmNl
IGxhc3QgdGltZSB0aGVuIHdlIG5lZWQgdG8gdGVsbCBHTAotICAgIC8vIHRvIHJlLWFsbG9jYXRl
IGEgdGV4dHVyZS4KLSAgICBpZiAobV9hbGxvY2F0ZWRUZXh0dXJlSWQgIT0gdGV4dHVyZUlkIHx8
IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkgewotICAgICAg
ICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1aXJlZFRleHR1cmVTaXplKTsKLSAgICAgICAgZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIHJlcXVpcmVkVGV4dHVyZVNpemUu
d2lkdGgoKSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgcGl4ZWxzKTsKLQotICAgICAgICBtX2FsbG9jYXRlZFRleHR1cmVJZCA9IHRl
eHR1cmVJZDsKLSAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJlcXVpcmVkVGV4dHVy
ZVNpemU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHVwZGF0ZVJlY3Qud2lkdGgoKSA8
PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLndpZHRoKCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQoKSA8
PSBtX2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgpKTsKLSAgICAgICAgQVNTRVJUKHVwZGF0
ZVJlY3Qud2lkdGgoKSA9PSBiaXRtYXBTaXplLndpZHRoKCkgJiYgdXBkYXRlUmVjdC5oZWlnaHQo
KSA9PSBiaXRtYXBTaXplLmhlaWdodCgpKTsKLSNpZiBQTEFURk9STShDRykKLSAgICAgICAgLy8g
VGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGlu
YXRlIHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAgICAgIGds
VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
dXBkYXRlUmVjdC54KCksIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUuaGVpZ2h0KCkgLSB1cGRhdGVS
ZWN0LmhlaWdodCgpIC0gdXBkYXRlUmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotI2VsaWYgUExBVEZP
Uk0oU0tJQSkKLSAgICAgICAgZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVwZGF0
ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0
LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotI2Vsc2UKLSNl
cnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCisgICAg
Ly8gQmluZCB0aGUgY29tbW9uIGF0dHJpYiBsb2NhdGlvbnMuCisgICAgR0xDKGdsQmluZEF0dHJp
YkxvY2F0aW9uKHByb2dyYW1PYmplY3QsIG1fcG9zaXRpb25BdHRyaWJMb2NhdGlvbiwgImFfcG9z
aXRpb24iKSk7CisgICAgR0xDKGdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW1PYmplY3QsIG1f
dGV4Q29vcmRBdHRyaWJMb2NhdGlvbiwgImFfdGV4Q29vcmQiKSk7CisKKyAgICBHTEMoZ2xMaW5r
UHJvZ3JhbShwcm9ncmFtT2JqZWN0KSk7CisgICAgR0xpbnQgbGlua2VkOworICAgIEdMQyhnbEdl
dFByb2dyYW1pdihwcm9ncmFtT2JqZWN0LCBHTF9MSU5LX1NUQVRVUywgJmxpbmtlZCkpOworICAg
IGlmICghbGlua2VkKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGxpbmsgc2hhZGVy
IHByb2dyYW0iKTsKKyAgICAgICAgR0xDKGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtT2JqZWN0KSk7
CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIG1fZGlydHlSZWN0LnNldFNpemUoRmxv
YXRTaXplKCkpOwotICAgIG1fY29udGVudHNEaXJ0eSA9IGZhbHNlOworICAgIEdMQyhnbERlbGV0
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBHTEMoZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRT
aGFkZXIpKTsKKyAgICByZXR1cm4gcHJvZ3JhbU9iamVjdDsKIH0KIAogdm9pZCBMYXllckNocm9t
aXVtOjpzZXROZWVkc0NvbW1pdCgpCkBAIC0zNzcsNSArMzA0LDE1MCBAQCB2b2lkIExheWVyQ2hy
b21pdW06OnNldE5lZWRzRGlzcGxheSgpCiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKIH0K
IAordm9pZCBMYXllckNocm9taXVtOjp0b0dMTWF0cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQoreworICAgIGZsYXR0ZW5lZFswXSA9IG0ubTExKCk7
CisgICAgZmxhdHRlbmVkWzFdID0gbS5tMTIoKTsKKyAgICBmbGF0dGVuZWRbMl0gPSBtLm0xMygp
OworICAgIGZsYXR0ZW5lZFszXSA9IG0ubTE0KCk7CisgICAgZmxhdHRlbmVkWzRdID0gbS5tMjEo
KTsKKyAgICBmbGF0dGVuZWRbNV0gPSBtLm0yMigpOworICAgIGZsYXR0ZW5lZFs2XSA9IG0ubTIz
KCk7CisgICAgZmxhdHRlbmVkWzddID0gbS5tMjQoKTsKKyAgICBmbGF0dGVuZWRbOF0gPSBtLm0z
MSgpOworICAgIGZsYXR0ZW5lZFs5XSA9IG0ubTMyKCk7CisgICAgZmxhdHRlbmVkWzEwXSA9IG0u
bTMzKCk7CisgICAgZmxhdHRlbmVkWzExXSA9IG0ubTM0KCk7CisgICAgZmxhdHRlbmVkWzEyXSA9
IG0ubTQxKCk7CisgICAgZmxhdHRlbmVkWzEzXSA9IG0ubTQyKCk7CisgICAgZmxhdHRlbmVkWzE0
XSA9IG0ubTQzKCk7CisgICAgZmxhdHRlbmVkWzE1XSA9IG0ubTQ0KCk7Cit9CisKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKQoreworICAgIHN0YXRp
YyBHTGZsb2F0IGdsTWF0cml4WzE2XTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRl
ck1hdHJpeCA9IGRyYXdNYXRyaXg7CisKKyAgICAvLyBBcHBseSBhIHNjYWxpbmcgZmFjdG9yIHRv
IHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVkIHNpemUuCisgICAgcmVuZGVy
TWF0cml4LnNjYWxlM2Qod2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICAvLyBBcHBseSB0aGUgcHJv
amVjdGlvbiBtYXRyaXggYmVmb3JlIHNlbmRpbmcgdGhlIHRyYW5zZm9ybSBvdmVyIHRvIHRoZSBz
aGFkZXIuCisgICAgcmVuZGVyTWF0cml4Lm11bHRpcGx5KHByb2plY3Rpb25NYXRyaXgpOworCisg
ICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIHJlbmRlck1hdHJpeCk7CisKKyAgICBHTEMoZ2xV
bmlmb3JtTWF0cml4NGZ2KG1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKSk7
CisKKyAgICBpZiAoYWxwaGFMb2NhdGlvbiAhPSAtMSkKKyAgICAgICAgR0xDKGdsVW5pZm9ybTFm
KGFscGhhTG9jYXRpb24sIG9wYWNpdHkpKTsKKworICAgIEdMQyhnbERyYXdFbGVtZW50cyhHTF9U
UklBTkdMRVMsIDYsIEdMX1VOU0lHTkVEX1NIT1JULCAwKSk7Cit9CisKK3ZvaWQgTGF5ZXJDaHJv
bWl1bTo6ZHJhd0RlYnVnQm9yZGVyKCkKK3sKKyAgICBzdGF0aWMgR0xmbG9hdCBnbE1hdHJpeFsx
Nl07CisgICAgaWYgKCFib3JkZXJDb2xvcigpLmFscGhhKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFNoYXJlZFZhbHVlcyogc3YgPSBsYXllclJlbmRlcmVyKCktPmxheWVyU2hhcmVkVmFsdWVz
KCk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPm1fYm9yZGVyU2hhZGVyUHJv
Z3JhbSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gZHJhd1RyYW5z
Zm9ybSgpOworICAgIHJlbmRlck1hdHJpeC5zY2FsZTNkKGJvdW5kcygpLndpZHRoKCksIGJvdW5k
cygpLmhlaWdodCgpLCAxKTsKKyAgICByZW5kZXJNYXRyaXgubXVsdGlwbHkobGF5ZXJSZW5kZXJl
cigpLT5wcm9qZWN0aW9uTWF0cml4KCkpOworICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBy
ZW5kZXJNYXRyaXgpOworICAgIEdMQyhnbFVuaWZvcm1NYXRyaXg0ZnYoc3YtPm1fYm9yZGVyU2hh
ZGVyTWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pKTsKKworICAgIEdMQyhn
bFVuaWZvcm00Zihzdi0+bV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uLCBib3JkZXJDb2xvcigp
LnJlZCgpIC8gMjU1LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvcmRlckNvbG9yKCkuZ3JlZW4oKSAvIDI1NS4wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcigpLmJs
dWUoKSAvIDI1NS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxKSk7CisKKyAgICBHTEMoZ2xMaW5lV2lkdGgoYm9yZGVyV2lkdGgoKSkpOwor
CisgICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9yZWQgaW4gdGhlIHNhbWUg
YXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCisgICAgR0xDKGdsRHJhd0VsZW1lbnRzKEdM
X0xJTkVfTE9PUCwgNCwgR0xfVU5TSUdORURfU0hPUlQsICh2b2lkKikoNiAqIHNpemVvZih1bnNp
Z25lZCBzaG9ydCkpKSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJl
ZE9iamVjdHMoU2hhcmVkVmFsdWVzKiBzdikKK3sKKyAgICAvLyBWZXJ0ZXggcG9zaXRpb25zIGFu
ZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgNCBjb3JuZXJzIG9mIGEgMXgxIHF1YWQuCisg
ICAgR0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAtMC41ZiwgIDAuNWYsIDAuMGYsIDAuMGYsICAxLjBm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAuNWYsIC0wLjVmLCAwLjBmLCAwLjBmLCAg
MC4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAtMC41ZiwgMC4wZiwgMS4w
ZiwgIDAuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41ZiwgIDAuNWYsIDAuMGYs
IDEuMGYsICAxLjBmIH07CisgICAgR0x1c2hvcnQgaW5kaWNlc1tdID0geyAwLCAxLCAyLCAwLCAy
LCAzLCAvLyBUaGUgdHdvIHRyaWFuZ2xlcyB0aGF0IG1ha2UgdXAgdGhlIGxheWVyIHF1YWQuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzfTsgLy8gQSBsaW5lIHBhdGggZm9y
IGRyYXdpbmcgdGhlIGxheWVyIGJvcmRlci4KKworICAgIEdMdWludCB2Ym9JZHNbMl07CisgICAg
R0xDKGdsR2VuQnVmZmVycygyLCB2Ym9JZHMpKTsKKyAgICBzdi0+bV9xdWFkVmVydGljZXNWYm8g
PSB2Ym9JZHNbMF07CisgICAgc3YtPm1fcXVhZEVsZW1lbnRzVmJvID0gdmJvSWRzWzFdOworICAg
IEdMQyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBzdi0+bV9xdWFkVmVydGljZXNWYm8p
KTsKKyAgICBHTEMoZ2xCdWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2Vz
KSwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKSk7CisgICAgR0xDKGdsQmluZEJ1ZmZlcihHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUiwgc3YtPm1fcXVhZEVsZW1lbnRzVmJvKSk7CisgICAgR0xDKGds
QnVmZmVyRGF0YShHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKGluZGljZXMpLCBpbmRp
Y2VzLCBHTF9TVEFUSUNfRFJBVykpOworCisgICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXpl
IHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgorICAgIEdMQyhnbEdldEludGVnZXJ2KEdMX01BWF9U
RVhUVVJFX1NJWkUsICYoc3YtPm1fbWF4VGV4dHVyZVNpemUpKSk7CisKKyAgICAvLyBTaGFkZXJz
IGZvciBkcmF3aW5nIHRoZSBkZWJ1ZyBib3JkZXJzIGFyb3VuZCB0aGUgbGF5ZXJzLgorICAgIGNo
YXIgYm9yZGVyVmVydGV4U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAiYXR0cmlidXRlIHZlYzQg
YV9wb3NpdGlvbjsgICBcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0NCBtYXRyaXg7ICAgICAgICAg
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgIGdsX1Bvc2l0aW9u
ID0gbWF0cml4ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuIjsKKyAgICBjaGFyIGJvcmRlckZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQor
ICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidW5pZm9ybSB2ZWM0IGNvbG9yOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICBnbF9GcmFnQ29s
b3IgPSBjb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAifSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKwor
ICAgIHN2LT5tX2JvcmRlclNoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKGJvcmRl
clZlcnRleFNoYWRlclN0cmluZywgYm9yZGVyRnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlm
ICghc3YtPm1fYm9yZGVyU2hhZGVyUHJvZ3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIkxheWVy
Q2hyb21pdW06IEZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN2LT5tX2JvcmRlclNoYWRlck1hdHJpeExvY2F0aW9u
ID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24oc3YtPm1fYm9yZGVyU2hhZGVyUHJvZ3JhbSwgIm1hdHJp
eCIpOworICAgIHN2LT5tX2JvcmRlclNoYWRlckNvbG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1M
b2NhdGlvbihzdi0+bV9ib3JkZXJTaGFkZXJQcm9ncmFtLCAiY29sb3IiKTsKKyAgICBBU1NFUlQo
c3YtPm1fYm9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChzdi0+
bV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uICE9IC0xKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKFNoYXJlZFZhbHVl
cyogc3YpCit7CisgICAgR0x1aW50IHZib0lkc1syXSA9IHsgc3YtPm1fcXVhZFZlcnRpY2VzVmJv
LCBzdi0+bV9xdWFkRWxlbWVudHNWYm8gfTsKKyAgICBHTEMoZ2xEZWxldGVCdWZmZXJzKDIsIHZi
b0lkcykpOworICAgIHN2LT5tX3F1YWRWZXJ0aWNlc1ZibyA9IHN2LT5tX3F1YWRFbGVtZW50c1Zi
byA9IDA7CisKKyAgICBpZiAoc3YtPm1fYm9yZGVyU2hhZGVyUHJvZ3JhbSkgeworICAgICAgICBH
TEMoZ2xEZWxldGVQcm9ncmFtKHN2LT5tX2JvcmRlclNoYWRlclByb2dyYW0pKTsKKyAgICAgICAg
c3YtPm1fYm9yZGVyU2hhZGVyUHJvZ3JhbSA9IDA7CisgICAgfQorfQorCit2b2lkIExheWVyQ2hy
b21pdW06OnByZXBhcmVGb3JEcmF3KFNoYXJlZFZhbHVlcyogc2hhcmVkVmFsdWVzKQoreworICAg
IEdMQyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBzaGFyZWRWYWx1ZXMtPm1fcXVhZFZl
cnRpY2VzVmJvKSk7CisgICAgR0xDKGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
Uiwgc2hhcmVkVmFsdWVzLT5tX3F1YWRFbGVtZW50c1ZibykpOworICAgIEdMdWludCBvZmZzZXQg
PSAwOworICAgIEdMQyhnbFZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkF0dHJpYkxvY2F0
aW9uLCAzLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDUgKiBzaXplb2YoR0xmbG9hdCksIChHTHZvaWQq
KW9mZnNldCkpOworICAgIG9mZnNldCArPSAzICogc2l6ZW9mKEdMZmxvYXQpOworICAgIEdMQyhn
bFZlcnRleEF0dHJpYlBvaW50ZXIobV90ZXhDb29yZEF0dHJpYkxvY2F0aW9uLCAyLCBHTF9GTE9B
VCwgR0xfRkFMU0UsIDUgKiBzaXplb2YoR0xmbG9hdCksIChHTHZvaWQqKW9mZnNldCkpOworICAg
IEdMQyhnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fcG9zaXRpb25BdHRyaWJMb2NhdGlvbikp
OworICAgIEdMQyhnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4Q29vcmRBdHRyaWJMb2Nh
dGlvbikpOworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgJKHJldmlzaW9uIDY1NTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE5ICs1NSwyNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTsKIAotLy8gQmFzZSBjbGFzcyBmb3IgY29tcG9zaXRlZCBsYXll
cnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBjb3ZlcnMgbGF5ZXJzIHRoYXQgcmVxdWlyZQotLy8gYSBH
cmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIHRoZWlyIGNvbnRlbnRzLiBTcGVjaWFsIGxheWVyIHR5
cGVzIGFyZSBkZXJpdmVkIGZyb20KKy8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJz
LiBTcGVjaWFsIGxheWVyIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KIC8vIHRoaXMgY2xhc3MuCiBj
bGFzcyBMYXllckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewor
ICAgIGZyaWVuZCBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIgPSAwKTsKIAogICAgIH5MYXllckNocm9taXVtKCk7CiAKKyAgICBjb25zdCBMYXll
ckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdDsKKyAgICBMYXllckNocm9taXVtKiBzdXBlcmxh
eWVyKCkgY29uc3Q7CiAgICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21p
dW0+KTsKICAgICB2b2lkIGluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4s
IHNpemVfdCBpbmRleCk7CiAgICAgdm9pZCByZXBsYWNlU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bSog
cmVmZXJlbmNlLCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IG5ld0xheWVyKTsKICAgICB2b2lk
IHJlbW92ZUZyb21TdXBlcmxheWVyKCk7CisgICAgdm9pZCByZW1vdmVBbGxTdWJsYXllcnMoKTsK
KyAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGdldFN1Ymxh
eWVycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJzOyB9CiAKICAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1fYW5jaG9yUG9pbnQgPSBh
bmNob3JQb2ludDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9p
bnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CkBAIC05Myw5ICs5OCw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpIHsgbV9kb3Vi
bGVTaWRlZCA9IGRvdWJsZVNpZGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBkb3Vi
bGVTaWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlU2lkZWQ7IH0KIAotICAgIHZvaWQgc2V0
RWRnZUFudGlhbGlhc2luZ01hc2sodWludDMyX3QgbWFzaykgeyBtX2VkZ2VBbnRpYWxpYXNpbmdN
YXNrID0gbWFzazsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIHVpbnQzMl90IGVkZ2VBbnRpYWxp
YXNpbmdNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlQW50aWFsaWFzaW5nTWFzazsgfQotCiAg
ICAgdm9pZCBzZXRGcmFtZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICBGbG9hdFJlY3QgZnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKQEAgLTEyMCw3NiArMTIyLDkwIEBAIHB1Ymxp
YzoKICAgICBib29sIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CiAKICAgICB2
b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24g
PSBwb3NpdGlvbjsgIHNldE5lZWRzQ29tbWl0KCk7IH0KLQogICAgIEZsb2F0UG9pbnQgcG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAKICAgICB2b2lkIHNldFpQb3NpdGlv
bihmbG9hdCB6UG9zaXRpb24pIHsgbV96UG9zaXRpb24gPSB6UG9zaXRpb247IHNldE5lZWRzQ29t
bWl0KCk7IH0KICAgICBmbG9hdCB6UG9zaXRpb24oKSBjb25zdCB7ICByZXR1cm4gbV96UG9zaXRp
b247IH0KIAotICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0OwotCi0g
ICAgdm9pZCByZW1vdmVBbGxTdWJsYXllcnMoKTsKLQotICAgIHZvaWQgc2V0U3VibGF5ZXJzKGNv
bnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYpOwotCi0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBnZXRTdWJsYXllcnMoKSBjb25zdCB7IHJldHVybiBt
X3N1YmxheWVyczsgfQotCiAgICAgdm9pZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fc3VibGF5ZXJUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgc3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3Jt
OyB9CiAKLSAgICBMYXllckNocm9taXVtKiBzdXBlcmxheWVyKCkgY29uc3Q7Ci0KLQogICAgIHZv
aWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIHsg
bV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zv
cm07IH0KIAorICAgIC8vIEZJWE1FOiBUaGlzIHNldHRpbmcgaXMgY3VycmVudGx5IGlnbm9yZWQu
CiAgICAgdm9pZCBzZXRHZW9tZXRyeUZsaXBwZWQoYm9vbCBmbGlwcGVkKSB7IG1fZ2VvbWV0cnlG
bGlwcGVkID0gZmxpcHBlZDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgZ2VvbWV0cnlG
bGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9nZW9tZXRyeUZsaXBwZWQ7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVUZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlkKTsKLSAgICBi
b29sIGNvbnRlbnRzRGlydHkoKSB7IHJldHVybiBtX2NvbnRlbnRzRGlydHk7IH0KLQogICAgIHZv
aWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KSB7IG1fZHJhd1RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQogICAgIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3Jt
OyB9CiAKICAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3Bh
Y2l0eSA9IG9wYWNpdHk7IH0KICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhd09wYWNpdHk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJl
dHVybiBtX293bmVyICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgpOyB9Ci0KLSAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiB0aGUgbGF5ZXIgaGFzIGl0cyBvd24gR0wgdGV4dHVyZSBhbmQgZmFsc2UgaWYg
dGhlIHRleHR1cmUKLSAgICAvLyBuZWVkcyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhlIGNvbXBvc2l0
b3IuCi0gICAgdmlydHVhbCBib29sIG93bnNUZXh0dXJlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQot
ICAgIC8vIFJldHVybnMgdGhlIGlkIG9mIHRoZSBHTCB0ZXh0dXJlIHRoYXQgc3RvcmVzIHRoZSBj
b250ZW50cyBvZiB0aGlzIGxheWVyLgotICAgIC8vIERlcml2ZWQgbGF5ZXIgY2xhc3NlcyB0aGF0
IG93biB0aGVpciBvd24gdGV4dHVyZXMgc2hvdWxkIG92ZXJ3cml0ZSB0aGlzIG1ldGhvZC4KLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1cmVJZCgpIHsgcmV0dXJuIG1fYWxsb2NhdGVkVGV4dHVy
ZUlkOyB9Ci0KICAgICBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4gbV9vd25lciAmJiBtX293
bmVyLT5wcmVzZXJ2ZXMzRCgpOyB9CiAKICAgICB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKik7CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSWQo
dW5zaWduZWQgc2hhZGVyUHJvZ3JhbUlkKSB7IG1fc2hhZGVyUHJvZ3JhbUlkID0gc2hhZGVyUHJv
Z3JhbUlkOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaGFkZXJQcm9ncmFtSWQoKSB7IHJldHVy
biBtX3NoYWRlclByb2dyYW1JZDsgfQotCiAgICAgdm9pZCBzZXRPd25lcihHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKSB7IG1fb3duZXIgPSBvd25lcjsgfQogCisgICAgYm9vbCBjb250ZW50
c0RpcnR5KCkgeyByZXR1cm4gbV9jb250ZW50c0RpcnR5OyB9CisKKyAgICAvLyBUaGVzZSBtZXRo
b2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4K
KyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGRyYXco
KSB7IH07CisKKyAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcigpOworCisgICAgLy8gU3RvcmVzIHZh
bHVlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyB0aGF0
IGFyZQorICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBMYXllclJlbmRlcmVyQ2hyb21p
dW0gKGFuZCBoZW5jZSB0aGUgc2FtZSBHTAorICAgIC8vIGNvbnRleHQpLgorICAgIGNsYXNzIFNo
YXJlZFZhbHVlcyB7CisgICAgcHVibGljOgorICAgICAgICBTaGFyZWRWYWx1ZXMoKTsKKworICAg
ICAgICB1bnNpZ25lZCBtX3F1YWRWZXJ0aWNlc1ZibzsKKyAgICAgICAgdW5zaWduZWQgbV9xdWFk
RWxlbWVudHNWYm87CisgICAgICAgIGludCBtX21heFRleHR1cmVTaXplOworICAgICAgICB1bnNp
Z25lZCBtX2JvcmRlclNoYWRlclByb2dyYW07CisgICAgICAgIGludCBtX2JvcmRlclNoYWRlck1h
dHJpeExvY2F0aW9uOworICAgICAgICBpbnQgbV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uOwor
ICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cyhTaGFyZWRW
YWx1ZXMqKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cyhTaGFyZWRWYWx1
ZXMqKTsKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlRm9yRHJhdyhTaGFyZWRWYWx1ZXMqKTsKKwog
cHJvdGVjdGVkOgogICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbV9vd25lcjsKICAgICBMYXll
ckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotICAgIHZvaWQgdXBkYXRl
VGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiBiaXRtYXBTaXplLCBjb25z
dCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qs
IHVuc2lnbmVkIHRleHR1cmVJZCk7CisKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXI7IH0KKworICAgIHN0YXRp
YyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2pl
Y3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJpeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQs
IGZsb2F0IG9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0
cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKKworICAgIHN0YXRpYyB2b2lkIHRvR0xN
YXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAgc3RhdGlj
IHVuc2lnbmVkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAKICAgICBJbnRTaXplIG1f
Ym91bmRzOwogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBib29sIG1fY29udGVudHNE
aXJ0eTsKIAorICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNoYXJlIHRoZSBzYW1lIGF0dHJpYnV0
ZSBsb2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25zCisgICAgLy8gYW5kIHRleHR1cmUg
Y29vcmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBzaGFkZXJzIHdpdGhvdXQgcmViaW5k
aW5nIGF0dHJpYnV0ZQorICAgIC8vIGFycmF5cy4KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bV9wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtX3Rl
eENvb3JkQXR0cmliTG9jYXRpb247CisKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc0NvbW1p
dCgpOwogCiAgICAgdm9pZCBzZXRTdXBlcmxheWVyKExheWVyQ2hyb21pdW0qIHN1cGVybGF5ZXIp
IHsgbV9zdXBlcmxheWVyID0gc3VwZXJsYXllcjsgfQogCi0gICAgdm9pZCBwYWludE1lKCk7Ci0K
ICAgICBzaXplX3QgbnVtU3VibGF5ZXJzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBt
X3N1YmxheWVycy5zaXplKCk7CkBAIC0yMDQsMzUgKzIyMCwxNyBAQCBwcml2YXRlOgogICAgIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX3N1YmxheWVyczsKICAgICBMYXllckNocm9t
aXVtKiBtX3N1cGVybGF5ZXI7CiAKKyAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNp
emUgbV9iYWNraW5nU3RvcmVTaXplOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBG
bG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAg
ICAgQ29sb3IgbV9ib3JkZXJDb2xvcjsKLQotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9s
YXllclJlbmRlcmVyOwotCi0gICAgRmxvYXRSZWN0IG1fZnJhbWU7Ci0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXll
clRyYW5zZm9ybTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsK
LQotICAgIHVpbnQzMl90IG1fZWRnZUFudGlhbGlhc2luZ01hc2s7CiAgICAgZmxvYXQgbV9vcGFj
aXR5OwogICAgIGZsb2F0IG1felBvc2l0aW9uOwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwog
ICAgIGZsb2F0IG1fYm9yZGVyV2lkdGg7Ci0KICAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OwotCi0g
ICAgdW5zaWduZWQgbV9hbGxvY2F0ZWRUZXh0dXJlSWQ7Ci0gICAgSW50U2l6ZSBtX2FsbG9jYXRl
ZFRleHR1cmVTaXplOwotCi0gICAgLy8gVGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgYWxsIGxh
eWVycyBvZiB0aGlzIHR5cGUgaXMgdGhlIHNhbWUuCi0gICAgLy8gVGhpcyBzdGF0aWMgY2FuIGJl
IHNoYWRvd2VkIGJ5IGRlcml2ZWQgY2xhc3NlcyB0byB1c2UgYSBzcGVjaWFsIHNoYWRlci4KLSAg
ICBzdGF0aWMgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7Ci0KICAgICBib29sIG1fY2xlYXJz
Q29udGV4dDsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7CiAgICAgYm9vbCBtX2hpZGRlbjsKQEAg
LTI0MSw2ICsyMzksMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZ2VvbWV0cnlGbGlwcGVkOwog
ICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZTsKIAorICAgIC8vIFBvaW50cyB0
byB0aGUgbGF5ZXIgcmVuZGVyZXIgdGhhdCB1cGRhdGVzIGFuZCBkcmF3cyB0aGlzIGxheWVyLgor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOworCisgICAgRmxvYXRS
ZWN0IG1fZnJhbWU7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CisKICAgICBTdHJpbmcgbV9uYW1lOwogfTsKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNjU1NzIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
IkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR0xFUzJDb250ZXh0LmgiCiAjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgogI2lmIFBMQVRGT1JNKFNLSUEpCiAjaW5j
bHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5o
IgpAQCAtNTAsMTAxICs1MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmbmRlZiBO
REVCVUcKLXN0YXRpYyBXVEZMb2dDaGFubmVsIExvZ0xheWVyUmVuZGVyZXIgPSB7IDB4MDAwMDAw
MDAsICJMYXllclJlbmRlcmVyIiwgV1RGTG9nQ2hhbm5lbE9uIH07Ci0jZW5kaWYKLQotc3RhdGlj
IHZvaWQgY2hlY2tHTEVycm9yKCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgR0xlbnVtIGVycm9y
ID0gZ2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAgTE9HX0VSUk9SKCJHTCBF
cnJvcjogJWQgIiAsIGVycm9yKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgR0x1aW50IGxvYWRTaGFk
ZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKLXsKLSAgICBHTHVpbnQg
c2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlwZSk7Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZSwg
MCk7Ci0gICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgR0xpbnQgY29tcGlsZWQ7Ci0g
ICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAmY29tcGlsZWQpOwot
ICAgIGlmICghY29tcGlsZWQpIHsKLSAgICAgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBzaGFkZXI7Ci19Ci0KLXN0YXRpYyBH
THVpbnQgbG9hZFNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlLCBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKLXsKLSAgICBHTHVpbnQgdmVydGV4U2hh
ZGVyOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRlcjsKLSAgICBHTHVpbnQgcHJvZ3JhbU9iamVj
dDsKLSAgICBHTGludCBsaW5rZWQ7Ci0gICAgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRlcihHTF9W
RVJURVhfU0hBREVSLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwotICAgIGlmICghdmVydGV4U2hhZGVy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xf
RlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7Ci0gICAgaWYgKCFmcmFnbWVu
dFNoYWRlcikgewotICAgICAgICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcHJvZ3JhbU9iamVjdCA9IGdsQ3JlYXRlUHJvZ3JhbSgp
OwotICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZ2xBdHRh
Y2hTaGFkZXIocHJvZ3JhbU9iamVjdCwgdmVydGV4U2hhZGVyKTsKLSAgICBnbEF0dGFjaFNoYWRl
cihwcm9ncmFtT2JqZWN0LCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xMaW5rUHJvZ3JhbShwcm9n
cmFtT2JqZWN0KTsKLSAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtT2JqZWN0LCBHTF9MSU5LX1NU
QVRVUywgJmxpbmtlZCk7Ci0gICAgaWYgKCFsaW5rZWQpIHsKLSAgICAgICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW1PYmplY3QpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZ2xEZWxl
dGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRl
cik7Ci0gICAgcmV0dXJuIHByb2dyYW1PYmplY3Q7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGVMYXllclNoYWRlcihTaGFkZXJQcm9ncmFtVHlwZSB0eXBlLCBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNl
KQotewotICAgIHVuc2lnbmVkIHByb2dyYW1JZCA9IGxvYWRTaGFkZXJQcm9ncmFtKHZlcnRleFNo
YWRlclNvdXJjZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwotICAgIEFTU0VSVChwcm9ncmFtSWQp
OwotCi0gICAgU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSA9ICZtX3NoYWRlclByb2dyYW1zW3R5cGVd
OwotCi0gICAgcHJvZ3JhbS0+bV9zaGFkZXJQcm9ncmFtSWQgPSBwcm9ncmFtSWQ7Ci0gICAgcHJv
Z3JhbS0+bV9zYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtSWQs
ICJzX3RleHR1cmUiKTsKLSAgICBwcm9ncmFtLT5tX21hdHJpeExvY2F0aW9uID0gZ2xHZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbUlkLCAibWF0cml4Iik7Ci0gICAgcHJvZ3JhbS0+bV9hbHBoYUxv
Y2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlkLCAiYWxwaGEiKTsKLQotICAg
IHJldHVybiBwcm9ncmFtSWQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgdG9HTE1hdHJpeChmbG9hdCog
ZmxhdHRlbmVkLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKLXsKLSAgICBmbGF0dGVu
ZWRbMF0gPSBtLm0xMSgpOwotICAgIGZsYXR0ZW5lZFsxXSA9IG0ubTEyKCk7Ci0gICAgZmxhdHRl
bmVkWzJdID0gbS5tMTMoKTsKLSAgICBmbGF0dGVuZWRbM10gPSBtLm0xNCgpOwotICAgIGZsYXR0
ZW5lZFs0XSA9IG0ubTIxKCk7Ci0gICAgZmxhdHRlbmVkWzVdID0gbS5tMjIoKTsKLSAgICBmbGF0
dGVuZWRbNl0gPSBtLm0yMygpOwotICAgIGZsYXR0ZW5lZFs3XSA9IG0ubTI0KCk7Ci0gICAgZmxh
dHRlbmVkWzhdID0gbS5tMzEoKTsKLSAgICBmbGF0dGVuZWRbOV0gPSBtLm0zMigpOwotICAgIGZs
YXR0ZW5lZFsxMF0gPSBtLm0zMygpOwotICAgIGZsYXR0ZW5lZFsxMV0gPSBtLm0zNCgpOwotICAg
IGZsYXR0ZW5lZFsxMl0gPSBtLm00MSgpOwotICAgIGZsYXR0ZW5lZFsxM10gPSBtLm00MigpOwot
ICAgIGZsYXR0ZW5lZFsxNF0gPSBtLm00MygpOwotICAgIGZsYXR0ZW5lZFsxNV0gPSBtLm00NCgp
OwotfQotCiBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQgbGVm
dCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wLCBmbG9hdCBuZWFyWiwgZmxv
YXQgZmFyWikKIHsKICAgICBmbG9hdCBkZWx0YVggPSByaWdodCAtIGxlZnQ7CkBAIC0xNjIsMjEg
KzY3LDYgQEAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KAogICAgIHJl
dHVybiBvcnRobzsKIH0KIAotLy8gQ3JlYXRlcyBhIEdMIHRleHR1cmUgb2JqZWN0IHRvIGJlIHVz
ZWQgZm9yIHRyYW5zZmVyaW5nIHRoZSBsYXllcidzIGJpdG1hcCBpbnRvLgotc3RhdGljIEdMdWlu
dCBjcmVhdGVMYXllclRleHR1cmUoKQotewotICAgIEdMdWludCB0ZXh0dXJlSWQgPSAwOwotICAg
IGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmVJZCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIC8vIERvIGJhc2ljIGxpbmVhciBmaWx0ZXJpbmcgb24g
cmVzaXplLgotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01J
Tl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAvLyBOUE9UIHRleHR1cmVz
IGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRvIEdMX0NMQU1Q
X1RPX0VER0UuCi0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIHJldHVybiB0
ZXh0dXJlSWQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IExh
eWVyQ2hyb21pdW0qIGEsIGNvbnN0IExheWVyQ2hyb21pdW0qIGIpCiB7CiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUEgPSBhLT5kcmF3VHJhbnNmb3JtKCk7CkBAIC0x
ODUsNTEgKzc1LDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IEwK
ICAgICByZXR1cm4gdHJhbnNmb3JtQS5tNDMoKSA8IHRyYW5zZm9ybUIubTQzKCk7CiB9CiAKLVNo
YWRlclByb2dyYW06OlNoYWRlclByb2dyYW0oKQotICAgIDogbV9zaGFkZXJQcm9ncmFtSWQoMCkK
LSAgICAsIG1fc2FtcGxlckxvY2F0aW9uKC0xKQotICAgICwgbV9tYXRyaXhMb2NhdGlvbigtMSkK
LSAgICAsIG1fYWxwaGFMb2NhdGlvbigtMSkKLXsKLX0KLQogUGFzc093blB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKFBhc3NPd25QdHI8R0xF
UzJDb250ZXh0PiBnbGVzMkNvbnRleHQpCiB7CiAgICAgcmV0dXJuIG5ldyBMYXllclJlbmRlcmVy
Q2hyb21pdW0oZ2xlczJDb250ZXh0KTsKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXll
clJlbmRlcmVyQ2hyb21pdW0oUGFzc093blB0cjxHTEVTMkNvbnRleHQ+IGdsZXMyQ29udGV4dCkK
LSAgICA6IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKDApCisgICAgOiBtX3Jvb3RMYXllclRleHR1
cmVJZCgwKQorICAgICwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkKICAgICAsIG1fcm9vdExh
eWVyVGV4dHVyZUhlaWdodCgwKQotICAgICwgbV9wb3NpdGlvbkxvY2F0aW9uKDApCi0gICAgLCBt
X3RleENvb3JkTG9jYXRpb24oMSkKICAgICAsIG1fcm9vdExheWVyKDApCiAgICAgLCBtX25lZWRz
RGlzcGxheShmYWxzZSkKICAgICAsIG1fc2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoLTEsIC0xKSkK
LSAgICAsIG1fY3VycmVudFNoYWRlclByb2dyYW1UeXBlKE51bVNoYWRlclByb2dyYW1UeXBlcykK
KyAgICAsIG1fY3VycmVudFNoYWRlcigwKQogICAgICwgbV9nbGVzMkNvbnRleHQoZ2xlczJDb250
ZXh0KQogewotICAgIG1fcXVhZFZib0lkc1tWZXJ0aWNlc10gPSBtX3F1YWRWYm9JZHNbTGF5ZXJF
bGVtZW50c10gPSAwOwotICAgIG1faGFyZHdhcmVDb21wb3NpdGluZyA9IChtX2dsZXMyQ29udGV4
dCAmJiBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCkpOworICAgIG1faGFyZHdhcmVDb21wb3Np
dGluZyA9IChtX2dsZXMyQ29udGV4dCAmJiBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpKTsKIH0K
IAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp+TGF5ZXJSZW5kZXJlckNocm9taXVtKCkKIHsKLSAg
ICBpZiAobV9oYXJkd2FyZUNvbXBvc2l0aW5nKSB7Ci0gICAgICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgICAgICBnbERlbGV0ZUJ1ZmZlcnMoMywgbV9xdWFkVmJvSWRzKTsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE51bVNoYWRlclByb2dyYW1UeXBlczsgaSsrKSB7Ci0gICAg
ICAgICAgICBpZiAobV9zaGFkZXJQcm9ncmFtc1tpXS5tX3NoYWRlclByb2dyYW1JZCkKLSAgICAg
ICAgICAgICAgICBnbERlbGV0ZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtc1tpXS5tX3NoYWRlclBy
b2dyYW1JZCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsK
K30KIAotICAgIC8vIEZyZWUgdXAgYWxsIEdMIHRleHR1cmVzLgotICAgIGZvciAoVGV4dHVyZUlk
TWFwOjppdGVyYXRvciBpdGVyID0gbV90ZXh0dXJlSWRNYXAuYmVnaW4oKTsgaXRlciAhPSBtX3Rl
eHR1cmVJZE1hcC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwg
JihpdGVyLT5zZWNvbmQpKTsKLSAgICAgICAgaXRlci0+Zmlyc3QtPnNldExheWVyUmVuZGVyZXIo
MCk7Ci0gICAgfQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKGNvbnN0
IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKQoreworICAgIEdMZW51
bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1IpCisg
ICAgICAgIExPR19FUlJPUigiR0wgY29tbWFuZCBmYWlsZWQ6IEZpbGU6ICVzXG5cdExpbmUgJWRc
blx0Y29tbWFuZDogJXMsIGVycm9yICV4XG4iLCBmaWxlLCBsaW5lLCBjb21tYW5kLCBlcnJvcik7
CiB9CiAKIC8vIENyZWF0ZXMgYSBjYW52YXMgYW5kIGFuIGFzc29jaWF0ZWQgZ3JhcGhpY3MgY29u
dGV4dCB0aGF0IHRoZSByb290IGxheWVyIHdpbGwKQEAgLTI2OCw0MyArMTQxLDE0IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXIKICAgICBtX3Jvb3RMYXllckNhbnZh
c1NpemUgPSBzaXplOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVy
UHJvZ3JhbShTaGFkZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlwZSkKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1c2VTaGFkZXIodW5zaWduZWQgcHJvZ3JhbUlkKQogewotICAgIGlmIChwcm9n
cmFtVHlwZSAhPSBtX2N1cnJlbnRTaGFkZXJQcm9ncmFtVHlwZSkgewotICAgICAgICBTaGFkZXJQ
cm9ncmFtKiBwcm9ncmFtID0gJm1fc2hhZGVyUHJvZ3JhbXNbcHJvZ3JhbVR5cGVdOwotICAgICAg
ICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+bV9zaGFkZXJQcm9ncmFtSWQpOwotICAgICAgICBtX2N1
cnJlbnRTaGFkZXJQcm9ncmFtVHlwZSA9IHByb2dyYW1UeXBlOwotCi0gICAgICAgIC8vIFNldCB0
aGUgdW5pZm9ybSBsb2NhdGlvbnMgbWF0Y2hpbmcgdGhlIHByb2dyYW0uCi0gICAgICAgIG1fc2Ft
cGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+bV9zYW1wbGVyTG9jYXRpb247Ci0gICAgICAgIG1fbWF0
cml4TG9jYXRpb24gPSBwcm9ncmFtLT5tX21hdHJpeExvY2F0aW9uOwotICAgICAgICBtX2FscGhh
TG9jYXRpb24gPSBwcm9ncmFtLT5tX2FscGhhTG9jYXRpb247CisgICAgaWYgKHByb2dyYW1JZCAh
PSBtX2N1cnJlbnRTaGFkZXIpIHsKKyAgICAgICAgR0xDKGdsVXNlUHJvZ3JhbShwcm9ncmFtSWQp
KTsKKyAgICAgICAgbV9jdXJyZW50U2hhZGVyID0gcHJvZ3JhbUlkOwogICAgIH0KIH0KIAotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3Bh
Y2l0eSkKLXsKLSAgICBzdGF0aWMgR0xmbG9hdCBnbE1hdHJpeFsxNl07Ci0KLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBtYXRyaXg7Ci0KLSAgICAvLyBBcHBseSBhIHNj
YWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVkIHNp
emUuCi0gICAgcmVuZGVyTWF0cml4LnNjYWxlM2Qod2lkdGgsIGhlaWdodCwgMSk7Ci0KLSAgICAv
LyBBcHBseSB0aGUgcHJvamVjdGlvbiBtYXRyaXggYmVmb3JlIHNlbmRpbmcgdGhlIHRyYW5zZm9y
bSBvdmVyIHRvIHRoZSBzaGFkZXIuCi0gICAgcmVuZGVyTWF0cml4Lm11bHRpcGx5KG1fcHJvamVj
dGlvbk1hdHJpeCk7Ci0KLSAgICB0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgcmVuZGVyTWF0cml4
KTsKLQotICAgIGdsVW5pZm9ybU1hdHJpeDRmdihtX21hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwg
JmdsTWF0cml4WzBdKTsKLQotICAgIGlmIChtX2FscGhhTG9jYXRpb24gIT0gLTEpCi0gICAgICAg
IGdsVW5pZm9ybTFmKG1fYWxwaGFMb2NhdGlvbiwgb3BhY2l0eSk7Ci0KLSAgICBnbERyYXdFbGVt
ZW50cyhHTF9UUklBTkdMRVMsIDYsIEdMX1VOU0lHTkVEX1NIT1JULCAwKTsKLX0KLQotCiAvLyBV
cGRhdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllciB0ZXh0dXJlIHRoYXQgZmFsbCBp
bnNpZGUgdGhlIHVwZGF0ZVJlY3QKIC8vIGFuZCByZS1jb21wb3NpdHMgYWxsIHN1YmxheWVycy4K
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LApAQCAtMzE1LDE3ICsxNTksMTMg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoYwogICAgIGlmICghbV9y
b290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2
aXNpYmxlIGFyZWEgaGFzIGNoYW5nZWQgdGhlbiBhbGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCi0gICAg
Ly8gdG8gc3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhl
IHByb2plY3Rpb24gbWF0cml4Ci0gICAgLy8gYW5kIHZpZXdwb3J0LgogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogCi0gICAgY2hlY2tHTEVycm9yKCk7Ci0KLSAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKTsKLQotICAgIGNoZWNrR0xFcnJvcigp
OworICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVy
ZUlkKSk7CiAKKyAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSBhcmVhIGhhcyBjaGFu
Z2VkIHRoZW4gYWxsb2NhdGUgYSBuZXcgdGV4dHVyZQorICAgIC8vIHRvIHN0b3JlIHRoZSBjb250
ZW50cyBvZiB0aGUgcm9vdCBsYXllciBhbmQgYWRqdXN0IHRoZSBwcm9qZWN0aW9uIG1hdHJpeAor
ICAgIC8vIGFuZCB2aWV3cG9ydC4KICAgICBpbnQgdmlzaWJsZVJlY3RXaWR0aCA9IHZpc2libGVS
ZWN0LndpZHRoKCk7CiAgICAgaW50IHZpc2libGVSZWN0SGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVp
Z2h0KCk7CiAgICAgaWYgKHZpc2libGVSZWN0V2lkdGggIT0gbV9yb290TGF5ZXJUZXh0dXJlV2lk
dGggfHwgdmlzaWJsZVJlY3RIZWlnaHQgIT0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSB7CkBA
IC0zMzMsMzggKzE3MywxOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cyhjCiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCA9IHZpc2libGVSZWN0LmhlaWdo
dCgpOwogCiAgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KDAsIHZpc2li
bGVSZWN0V2lkdGgsIHZpc2libGVSZWN0SGVpZ2h0LCAwLCAtMTAwMCwgMTAwMCk7Ci0gICAgICAg
IGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3Jvb3RMYXllclRleHR1
cmVXaWR0aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKLQotICAgICAgICBjaGVja0dMRXJyb3IoKTsKKyAgICAgICAgR0xDKGdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3Jvb3RMYXllclRleHR1cmVXaWR0
aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCAwKSk7CiAgICAgfQogCiAgICAgLy8gVGhlIEdMIHZpZXdwb3J0IGNvdmVycyB0aGUgZW50aXJl
IHZpc2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXJzLgotICAgIGdsVmlld3BvcnQo
MCwgMCwgdmlzaWJsZVJlY3RXaWR0aCwgdmlzaWJsZVJlY3RIZWlnaHQpOworICAgIEdMQyhnbFZp
ZXdwb3J0KDAsIDAsIHZpc2libGVSZWN0V2lkdGgsIHZpc2libGVSZWN0SGVpZ2h0KSk7CiAKLSAg
ICBjaGVja0dMRXJyb3IoKTsKKyAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVydGV4IGF0dHJpYnV0
ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KKyAgICBMYXllckNocm9taXVtOjpw
cmVwYXJlRm9yRHJhdyhsYXllclNoYXJlZFZhbHVlcygpKTsKIAotICAgIC8vIFRoZSBsYXllciwg
c2Nyb2xsIGFuZCBkZWJ1ZyBib3JkZXIgc2hhZGVycyBhbGwgdXNlIHRoZSBzYW1lIHZlcnRleCBh
dHRyaWJ1dGVzCi0gICAgLy8gc28gd2UgY2FuIGJpbmQgdGhlbSBvbmx5IG9uY2UuCi0gICAgZ2xC
aW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgbV9xdWFkVmJvSWRzW1ZlcnRpY2VzXSk7Ci0gICAg
Y2hlY2tHTEVycm9yKCk7Ci0gICAgZ2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
LCBtX3F1YWRWYm9JZHNbTGF5ZXJFbGVtZW50c10pOwotICAgIGNoZWNrR0xFcnJvcigpOwotICAg
IEdMdWludCBvZmZzZXQgPSAwOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9u
TG9jYXRpb24sIDMsIEdMX0ZMT0FULCBHTF9GQUxTRSwgNSAqIHNpemVvZihHTGZsb2F0KSwgKEdM
dm9pZCopKG9mZnNldCkpOwotICAgIGNoZWNrR0xFcnJvcigpOwotICAgIG9mZnNldCArPSAzICog
c2l6ZW9mKEdMZmxvYXQpOwotICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3RleENvb3JkTG9j
YXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgNSAqIHNpemVvZihHTGZsb2F0KSwgKEdMdm9p
ZCopKG9mZnNldCkpOwotICAgIGNoZWNrR0xFcnJvcigpOwotICAgIGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKLSAgICBn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fdGV4Q29vcmRMb2NhdGlvbik7Ci0gICAgY2hlY2tH
TEVycm9yKCk7Ci0gICAgZ2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKLSAgICBjaGVja0dM
RXJyb3IoKTsKLSAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7Ci0gICAgY2hlY2tHTEVycm9y
KCk7Ci0gICAgZ2xEaXNhYmxlKEdMX0NVTExfRkFDRSk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Cisg
ICAgR0xDKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSk7CisgICAgR0xDKGdsRGlzYWJsZShHTF9D
VUxMX0ZBQ0UpKTsKKyAgICBHTEMoZ2xEZXB0aEZ1bmMoR0xfTEVRVUFMKSk7CiAKICAgICBpZiAo
bV9zY3JvbGxQb3NpdGlvbiA9PSBJbnRQb2ludCgtMSwgLTEpKQogICAgICAgICBtX3Njcm9sbFBv
c2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CkBAIC0zOTQsMTcgKzIxNCwxMyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjCiAgICAgICAgICAgICAoaW50KWZsb29yZigw
LjUgKiB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgKyBzY2FsZUZhY3RvciAqIHNjcm9sbERlbHRhLnko
KSwgMCk7CiAgICAgICAgIHNjcm9sbGVkTGF5ZXJNYXRyaXguc2NhbGUzZCgxLCAtMSwgMSk7CiAK
LSAgICAgICAgLy8gU3dpdGNoIHNoYWRlcnMgdG8gYXZvaWQgUkdCIHN3aXp6bGluZy4KLSAgICAg
ICAgdXNlU2hhZGVyUHJvZ3JhbShTY3JvbGxMYXllclByb2dyYW0pOwotICAgICAgICBnbFVuaWZv
cm0xaShtX3NoYWRlclByb2dyYW1zW1Njcm9sbExheWVyUHJvZ3JhbV0ubV9zYW1wbGVyTG9jYXRp
b24sIDApOwotICAgICAgICBjaGVja0dMRXJyb3IoKTsKLQotICAgICAgICBkcmF3VGV4dHVyZWRR
dWFkKHNjcm9sbGVkTGF5ZXJNYXRyaXgsIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0
LmhlaWdodCgpLCAxKTsKLSAgICAgICAgY2hlY2tHTEVycm9yKCk7CisgICAgICAgIHVzZVNoYWRl
cihtX3Njcm9sbFNoYWRlclByb2dyYW0pOworICAgICAgICBHTEMoZ2xVbmlmb3JtMWkobV9zY3Jv
bGxTaGFkZXJTYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bTo6ZHJh
d1RleHR1cmVkUXVhZChtX3Byb2plY3Rpb25NYXRyaXgsIHNjcm9sbGVkTGF5ZXJNYXRyaXgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgo
KSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zY3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiwgLTEpOwogCi0gICAgICAg
IGdsQ29weVRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgMCwgMCwgMCwgMCwgY29udGVu
dFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgICAgIGNoZWNrR0xF
cnJvcigpOworICAgICAgICBHTEMoZ2xDb3B5VGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCAwLCAwLCAwLCAwLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSkp
OwogICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CiAgICAgfQogCkBA
IC00MjMsMTU0ICsyMzksOTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoYwogICAgICAgICBBU1NFUlQocm9vdExheWVyV2lkdGggPT0gdXBkYXRlUmVjdC53aWR0aCgp
ICYmIHJvb3RMYXllckhlaWdodCA9PSB1cGRhdGVSZWN0LmhlaWdodCgpKTsKICAgICAgICAgdm9p
ZCogcGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOwogCi0gICAgICAgIGNoZWNrR0xFcnJvcigp
OwogICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRo
ZSByb290IGxheWVyIHRleHR1cmUuCi0gICAgICAgIGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgo
KSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxz
KTsKLSAgICAgICAgY2hlY2tHTEVycm9yKCk7CisgICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVS
ZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVscykpOwogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgICAgIC8vIEdldCB0aGUgY29u
dGVudHMgb2YgdGhlIHVwZGF0ZWQgcmVjdC4KICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGlu
dD4oQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9
PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1hcENvbnRleHRH
ZXRIZWlnaHQobV9yb290TGF5ZXJDR0NvbnRleHQuZ2V0KCkpKSA9PSB1cGRhdGVSZWN0LmhlaWdo
dCgpKTsKICAgICAgICAgdm9pZCogcGl4ZWxzID0gbV9yb290TGF5ZXJCYWNraW5nU3RvcmUuZGF0
YSgpOwogCi0gICAgICAgIGNoZWNrR0xFcnJvcigpOwogICAgICAgICAvLyBDb3B5IHRoZSBjb250
ZW50cyBvZiB0aGUgdXBkYXRlZCByZWN0IHRvIHRoZSByb290IGxheWVyIHRleHR1cmUuCiAgICAg
ICAgIC8vIFRoZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgaW4gQ29yZSBHcmFwaGljcycg
Y29vcmRpbmF0ZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY29ycmVjdCBmb3IgdGhpcyBoZXJlLgotICAg
ICAgICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQgLSB1cGRhdGVS
ZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICB1
cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgICAgICBjaGVj
a0dMRXJyb3IoKTsKKyAgICAgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBtX3Jvb3RMYXll
clRleHR1cmVIZWlnaHQgLSB1cGRhdGVSZWN0LnkoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIHBpeGVscykpOwogI2Vsc2UKICNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9y
IHlvdXIgcGxhdGZvcm0uIgogI2VuZGlmCiAgICAgfQogCiAgICAgZ2xDbGVhckNvbG9yKDAsIDAs
IDEsIDEpOwotICAgIGNoZWNrR0xFcnJvcigpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVS
X0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpOwotICAgIGNoZWNrR0xFcnJvcigpOwogCiAgICAg
Ly8gUmVuZGVyIHRoZSByb290IGxheWVyIHVzaW5nIGEgcXVhZCB0aGF0IHRha2VzIHVwIHRoZSBl
bnRpcmUgdmlzaWJsZSBhcmVhIG9mIHRoZSB3aW5kb3cuCi0gICAgdXNlU2hhZGVyUHJvZ3JhbShD
b250ZW50TGF5ZXJQcm9ncmFtKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKLSAgICBnbFVuaWZvcm0x
aShtX3NhbXBsZXJMb2NhdGlvbiwgMCk7Ci0gICAgY2hlY2tHTEVycm9yKCk7CisgICAgLy8gV2Ug
cmV1c2UgdGhlIHNoYWRlciBwcm9ncmFtIHVzZWQgYnkgQ29udGVudExheWVyQ2hyb21pdW0uCisg
ICAgQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllclNoYXJlZFZhbHVlcyogc3YgPSBj
b250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICB1c2VTaGFkZXIoc3YtPm1fY29udGVudFNo
YWRlclByb2dyYW0pOworICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+bV9zaGFkZXJTYW1wbGVyTG9j
YXRpb24sIDApKTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck1hdHJpeDsKICAgICBs
YXllck1hdHJpeC50cmFuc2xhdGUzZCh2aXNpYmxlUmVjdC53aWR0aCgpICogMC41ZiwgdmlzaWJs
ZVJlY3QuaGVpZ2h0KCkgKiAwLjVmLCAwKTsKLSAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyTWF0
cml4LCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSk7Ci0gICAg
Y2hlY2tHTEVycm9yKCk7CisgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChtX3By
b2plY3Rpb25NYXRyaXgsIGxheWVyTWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdi0+bV9zaGFkZXJNYXRyaXhMb2Nh
dGlvbiwgc3YtPm1fc2hhZGVyQWxwaGFMb2NhdGlvbik7CiAKICAgICAvLyBJZiBjdWxsaW5nIGlz
IGVuYWJsZWQgdGhlbiB3ZSB3aWxsIGN1bGwgdGhlIGJhY2tmYWNlLgotICAgIGdsQ3VsbEZhY2Uo
R0xfQkFDSyk7Ci0gICAgY2hlY2tHTEVycm9yKCk7CisgICAgR0xDKGdsQ3VsbEZhY2UoR0xfQkFD
SykpOwogICAgIC8vIFRoZSBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBpcyBzZXR1cCBzdWNoIHRo
YXQgWSBzdGFydHMgYXQgemVybyBhbmQKICAgICAvLyBpbmNyZWFzZXMgZ29pbmcgZG93biB0aGUg
cGFnZSBzbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgd2luZGluZyBvcmRlciBvZgogICAgIC8vIGZy
b250IGZhY2luZyB0cmlhbmdsZXMuCi0gICAgZ2xGcm9udEZhY2UoR0xfQ1cpOwotICAgIGNoZWNr
R0xFcnJvcigpOworICAgIEdMQyhnbEZyb250RmFjZShHTF9DVykpOwogCiAgICAgLy8gVGhlIHNo
YWRlciB1c2VkIHRvIHJlbmRlciBsYXllcnMgcmV0dXJucyBwcmUtbXVsdGlwbGllZCBhbHBoYSBj
b2xvcnMKICAgICAvLyBzbyB3ZSBuZWVkIHRvIHNlbmQgdGhlIGJsZW5kaW5nIG1vZGUgYXBwcm9w
cmlhdGVseS4KLSAgICBnbEVuYWJsZShHTF9CTEVORCk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Ci0g
ICAgZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKTsKLQotICAgIGNo
ZWNrR0xFcnJvcigpOworICAgIEdMQyhnbEVuYWJsZShHTF9CTEVORCkpOworICAgIEdMQyhnbEJs
ZW5kRnVuYyhHTF9PTkUsIEdMX09ORV9NSU5VU19TUkNfQUxQSEEpKTsKIAogICAgIC8vIFRyYW5z
bGF0ZSBhbGwgdGhlIGNvbXBvc2l0ZWQgbGF5ZXJzIGJ5IHRoZSBzY3JvbGwgcG9zaXRpb24uCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZCgt
bV9zY3JvbGxQb3NpdGlvbi54KCksIC1tX3Njcm9sbFBvc2l0aW9uLnkoKSwgMCk7CiAKKyAgICAv
LyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJlZSBhbmQgdXBkYXRlIHRoZSBsYXllciB0cmFuc2Zvcm1z
LgogICAgIGZsb2F0IG9wYWNpdHkgPSAxOwotICAgIG1fbGF5ZXJMaXN0LnNocmluaygwKTsKICAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9v
dExheWVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVy
c1tpXS5nZXQoKSwgbWF0cml4LCBvcGFjaXR5LCB2aXNpYmxlUmVjdCk7Ci0KLSAgICAvLyBTb3J0
IGxheWVycyBieSB0aGUgeiBjb29yZGluYXRlIG9mIHRoZWlyIGNlbnRlciBzbyB0aGF0IGxheWVy
cyBmdXJ0aGVyCi0gICAgLy8gYXdheSBnZXQgZHJhd24gZmlyc3QuCi0gICAgc3RkOjpzdGFibGVf
c29ydChtX2xheWVyTGlzdC5iZWdpbigpLCBtX2xheWVyTGlzdC5lbmQoKSwgY29tcGFyZUxheWVy
Wik7CisgICAgc2l6ZV90IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7
IGkrKykKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwg
bWF0cml4LCBvcGFjaXR5KTsKIAogICAgIC8vIEVuYWJsZSBzY2lzc29yaW5nIHRvIGF2b2lkIHJl
bmRlcmluZyBjb21wb3NpdGVkIGxheWVycyBvdmVyIHRoZSBzY3JvbGxiYXJzLgotICAgIGdsRW5h
YmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgZ2xTY2lzc29yKDAsIHZpc2libGVSZWN0LmhlaWdo
dCgpIC0gY29udGVudFJlY3QuaGVpZ2h0KCksIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRS
ZWN0LmhlaWdodCgpKTsKKyAgICBHTEMoZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKSk7CisgICAg
R0xDKGdsU2Npc3NvcigwLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAtIGNvbnRlbnRSZWN0LmhlaWdo
dCgpLCBjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSkpOwogCi0gICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBtX2xheWVyTGlzdC5zaXplKCk7IGorKykKLSAgICAgICAg
ZHJhd0xheWVyKG1fbGF5ZXJMaXN0W2pdKTsKKyAgICAvLyBUcmF2ZXJzZSB0aGUgbGF5ZXIgdHJl
ZSBvbmUgbW9yZSB0aW1lIHRvIGRyYXcgdGhlIGxheWVycy4KKyAgICBtX3Zpc2libGVSZWN0ID0g
dmlzaWJsZVJlY3Q7CisgICAgZm9yIChpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykK
KyAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCkpOwogCi0gICAg
Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgR0xDKGdsRGlzYWJsZShHTF9TQ0lTU09S
X1RFU1QpKTsKIAotICAgIGdsRmx1c2goKTsKKyAgICAvLyBGSVhNRTogSXMgdGhlIGZsdXNoIHJl
YWxseSBuZWNlc3NhcnkgaGVyZT8KKyAgICBHTEMoZ2xGbHVzaCgpKTsKICAgICBtX2dsZXMyQ29u
dGV4dC0+c3dhcEJ1ZmZlcnMoKTsKIAogICAgIG1fbmVlZHNEaXNwbGF5ID0gZmFsc2U7CiB9CiAK
LS8vIFJldHVybnMgdGhlIGlkIG9mIHRoZSB0ZXh0dXJlIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdp
dGggdGhlIGxheWVyIG9yCi0vLyAtMSBpZiB0aGUgaWQgaGFzbid0IGJlZW4gcmVnaXN0ZXJlZCB5
ZXQuCi1pbnQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRUZXh0dXJlSWQoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIpCi17Ci0gICAgVGV4dHVyZUlkTWFwOjppdGVyYXRvciB0ZXh0dXJlSWQgPSBtX3Rl
eHR1cmVJZE1hcC5maW5kKGxheWVyKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlk
TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gdGV4dHVyZUlkLT5zZWNvbmQ7Ci0KLSAgICByZXR1
cm4gLTE7Ci19Ci0KLS8vIEFsbG9jYXRlcyBhIG5ldyB0ZXh0dXJlIGZvciB0aGUgbGF5ZXIgYW5k
IHJlZ2lzdGVycyBpdCBpbiB0aGUgdGV4dHVyZUlkIG1hcC4KLS8vIEZJWE1FOiBXZSB3aWxsIG5l
ZWQgdG8gY29tZSB1cCB3aXRoIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFsbG9jYXRpb24gc3RyYXRl
Z3kgaGVyZS4KLWludCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmFzc2lnblRleHR1cmVGb3JMYXll
cihMYXllckNocm9taXVtKiBsYXllcikKKy8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgZXZl
bnR1YWxseSBiZSByZXBsYWNlZCBieSBhIHByb3BlciB0ZXh0dXJlIG1hbmFnZXIuCit1bnNpZ25l
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVGV4dHVyZSgpCiB7Ci0gICAgR0x1
aW50IHRleHR1cmVJZCA9IGNyZWF0ZUxheWVyVGV4dHVyZSgpOwotCi0gICAgLy8gRklYTUU6IENo
ZWNrIHRoYXQgdGV4dHVyZUlkIGlzIHZhbGlkCi0gICAgbV90ZXh0dXJlSWRNYXAuc2V0KGxheWVy
LCB0ZXh0dXJlSWQpOwotCi0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0KKyAg
ICBHTHVpbnQgdGV4dHVyZUlkID0gMDsKKyAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlSWQp
OworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKKyAgICAvLyBE
byBiYXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KKyAgICBnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7CisgICAgLy8gTlBPVCB0ZXh0dXJlcyBpbiBHTCBFUyBvbmx5IHdvcmsgd2hlbiB0aGUg
d3JhcCBtb2RlIGlzIHNldCB0byBHTF9DTEFNUF9UT19FREdFLgorICAgIGdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9D
TEFNUF9UT19FREdFKTsKICAgICByZXR1cm4gdGV4dHVyZUlkOwogfQogCi1ib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZnJlZUxheWVyVGV4dHVyZShMYXllckNocm9taXVtKiBsYXllcikKLXsK
LSAgICBUZXh0dXJlSWRNYXA6Oml0ZXJhdG9yIHRleHR1cmVJZCA9IG1fdGV4dHVyZUlkTWFwLmZp
bmQobGF5ZXIpOwotICAgIGlmICh0ZXh0dXJlSWQgPT0gbV90ZXh0dXJlSWRNYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBGcmVlIHVwIHRoZSB0ZXh0dXJlLgotICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJih0ZXh0dXJlSWQtPnNlY29uZCkpOwotICAgIG1fdGV4dHVyZUlk
TWFwLnJlbW92ZSh0ZXh0dXJlSWQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBEcmF3cyBh
IGRlYnVnIGJvcmRlciBhcm91bmQgdGhlIGxheWVyJ3MgYm91bmRzLgotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcihMYXllckNocm9taXVtKiBsYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKLXsKLSAgICBzdGF0aWMgR0xmbG9hdCBnbE1h
dHJpeFsxNl07Ci0gICAgQ29sb3IgYm9yZGVyQ29sb3IgPSBsYXllci0+Ym9yZGVyQ29sb3IoKTsK
LSAgICBpZiAoIWJvcmRlckNvbG9yLmFscGhhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVz
ZVNoYWRlclByb2dyYW0oRGVidWdCb3JkZXJQcm9ncmFtKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCByZW5kZXJNYXRyaXggPSBtYXRyaXg7Ci0gICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+
Ym91bmRzKCk7Ci0gICAgcmVuZGVyTWF0cml4LnNjYWxlM2QoYm91bmRzLndpZHRoKCksIGJvdW5k
cy5oZWlnaHQoKSwgMSk7Ci0gICAgcmVuZGVyTWF0cml4Lm11bHRpcGx5KG1fcHJvamVjdGlvbk1h
dHJpeCk7Ci0gICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIHJlbmRlck1hdHJpeCk7Ci0gICAg
dW5zaWduZWQgYm9yZGVyTWF0cml4TG9jYXRpb24gPSBtX3NoYWRlclByb2dyYW1zW0RlYnVnQm9y
ZGVyUHJvZ3JhbV0ubV9tYXRyaXhMb2NhdGlvbjsKLSAgICBnbFVuaWZvcm1NYXRyaXg0ZnYoYm9y
ZGVyTWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pOwotCi0gICAgZ2xVbmlm
b3JtNGYobV9ib3JkZXJDb2xvckxvY2F0aW9uLCBib3JkZXJDb2xvci5yZWQoKSAvIDI1NS4wLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3IuZ3JlZW4o
KSAvIDI1NS4wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVy
Q29sb3IuYmx1ZSgpIC8gMjU1LjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxKTsKLQotICAgIGdsTGluZVdpZHRoKGxheWVyLT5ib3JkZXJXaWR0aCgpKTsKLQotICAg
IC8vIFRoZSBpbmRpY2VzIGZvciB0aGUgbGluZSBhcmUgc3RvcmVkIGluIHRoZSBzYW1lIGFycmF5
IGFzIHRoZSB0cmlhbmdsZSBpbmRpY2VzLgotICAgIGdsRHJhd0VsZW1lbnRzKEdMX0xJTkVfTE9P
UCwgNCwgR0xfVU5TSUdORURfU0hPUlQsICh2b2lkKikoNiAqIHNpemVvZih1bnNpZ25lZCBzaG9y
dCkpKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKLX0KLQogLy8gUmV0dXJucyB0cnVlIGlmIGFueSBw
YXJ0IG9mIHRoZSBsYXllciBmYWxscyB3aXRoaW4gdGhlIHZpc2libGVSZWN0CiBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0KQogewpAQCAtNTg4LDkgKzM0NCw5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
c0xheWVyVmlzaWIKICAgICByZXR1cm4gbWFwcGVkUmVjdC5pbnRlcnNlY3RzKEZsb2F0UmVjdCgt
MSwgLTEsIDIsIDIpKTsKIH0KIAotLy8gVXBkYXRlcyBhbmQgY2FjaGVzIHRoZSBsYXllciB0cmFu
c2Zvcm1zIGFuZCBvcGFjaXR5IHZhbHVlcyB0aGF0IHdpbGwgYmUgdXNlZAotLy8gd2hlbiByZW5k
ZXJpbmcgdGhlbS4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1
cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
YXJlbnRNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQor
Ly8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVu
IG5vZGUgYW5kIHVwZGF0ZXMgdGhlIAorLy8gdHJhbnNmb3JtIGFuZCBvcGFjaXR5IHZhbHVlcy4K
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgs
IGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zv
cm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAogICAgIC8vIGFs
bCBpdHMgc3VibGF5ZXJzLiBJdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHRoZSBsYXll
cidzIHBvc2l0aW9uCkBAIC02MjcsMjMgKzM4MywxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJzCiAgICAgLy8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltj
XQogICAgIGxvY2FsTWF0cml4LnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgsIGNlbnRlck9mZnNl
dFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwogCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVy
IGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMgb2YgdGhlIHBhZ2UuCi0gICAgYm9vbCBs
YXllclZpc2libGUgPSBpc0xheWVyVmlzaWJsZShsYXllciwgbG9jYWxNYXRyaXgsIHZpc2libGVS
ZWN0KTsKLQotICAgIGJvb2wgc2tpcExheWVyID0gZmFsc2U7Ci0gICAgaWYgKGJvdW5kcy53aWR0
aCgpID4gMjA0OCB8fCBib3VuZHMuaGVpZ2h0KCkgPiAyMDQ4KSB7Ci0gICAgICAgIGlmIChsYXll
ci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgICAgICBMT0coTGF5ZXJSZW5kZXJlciwgIlNraXBw
aW5nIGxheWVyIHdpdGggc2l6ZSAlZCAlZCIsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0
KCkpOwotICAgICAgICBza2lwTGF5ZXIgPSB0cnVlOwotICAgIH0KLQogICAgIC8vIENhbGN1bGF0
ZSB0aGUgbGF5ZXIncyBvcGFjaXR5LgogICAgIG9wYWNpdHkgKj0gbGF5ZXItPm9wYWNpdHkoKTsK
IAogICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGxvY2FsTWF0cml4KTsKICAgICBsYXllci0+
c2V0RHJhd09wYWNpdHkob3BhY2l0eSk7Ci0gICAgaWYgKGxheWVyVmlzaWJsZSAmJiAhc2tpcExh
eWVyKQotICAgICAgICBtX2xheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwogCiAgICAgLy8gRmxhdHRl
biB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZSAzRC4KICAgICBpZiAoIWxheWVy
LT5wcmVzZXJ2ZXMzRCgpKSB7CkBAIC02NjcsMjkgKzQxMSw3MSBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzCiAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKLSAgICAgICAgdXBkYXRl
TGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbG9jYWxNYXRyaXgsIG9wYWNpdHks
IHZpc2libGVSZWN0KTsKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tp
XS5nZXQoKSwgbG9jYWxNYXRyaXgsIG9wYWNpdHkpOworCisgICAgbGF5ZXItPnNldExheWVyUmVu
ZGVyZXIodGhpcyk7Cit9CisKKy8vIFJlY3Vyc2l2ZWx5IHdhbGsgdGhlIGxheWVyIHRyZWUgYW5k
IGRyYXcgdGhlIGxheWVycy4KK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJz
UmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQoreworICAgIHN0YXRpYyBib29sIGRlcHRo
VGVzdEVuYWJsZWRGb3JTdWJ0cmVlID0gZmFsc2U7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgbGF5
ZXIgZmFsbHMgd2l0aGluIHRoZSB2aXNpYmxlIGJvdW5kcyBvZiB0aGUgcGFnZS4KKyAgICBib29s
IGxheWVyVmlzaWJsZSA9IGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpLCBtX3Zpc2libGVSZWN0KTsKKworICAgIC8vIEVuYWJsZSBkZXB0aCB0ZXN0aW5nIGZvciB0
aGlzIGxheWVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzIGlmIHByZXNlcnZlczNEIGlzIHNldC4K
KyAgICBib29sIG11c3RDbGVhckRlcHRoID0gZmFsc2U7CisgICAgaWYgKGxheWVyLT5wcmVzZXJ2
ZXMzRCgpKSB7CisgICAgICAgIGlmICghZGVwdGhUZXN0RW5hYmxlZEZvclN1YnRyZWUpIHsKKyAg
ICAgICAgICAgIGdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICAgICAgZGVwdGhUZXN0
RW5hYmxlZEZvclN1YnRyZWUgPSB0cnVlOworCisgICAgICAgICAgICAvLyBOZWVkIHRvIGNsZWFy
IHRoZSBkZXB0aCBidWZmZXIgd2hlbiB3ZSdyZSBkb25lIHJlbmRlcmluZyB0aGlzIHN1YnRyZWUu
CisgICAgICAgICAgICBtdXN0Q2xlYXJEZXB0aCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAobGF5ZXJWaXNpYmxlKQorICAgICAgICBkcmF3TGF5ZXIobGF5ZXIpOworCisgICAg
Ly8gSWYgd2UncmUgdXNpbmcgZGVwdGggdGVzdGluZyB0aGVuIHdlIG5lZWQgdG8gc29ydCB0aGUg
Y2hpbGRyZW4gaW4gWiB0bworICAgIC8vIGdldCB0aGUgdHJhbnNwYXJlbmN5IHRvIHdvcmsgcHJv
cGVybHkuCisgICAgaWYgKGRlcHRoVGVzdEVuYWJsZWRGb3JTdWJ0cmVlKSB7CisgICAgICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdl
dFN1YmxheWVycygpOworICAgICAgICBWZWN0b3I8TGF5ZXJDaHJvbWl1bSo+IHN1YmxheWVyTGlz
dDsKKyAgICAgICAgc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMu
c2l6ZSgpOyBpKyspCisgICAgICAgICAgICBzdWJsYXllckxpc3QuYXBwZW5kKHN1YmxheWVyc1tp
XS5nZXQoKSk7CisKKyAgICAgICAgLy8gU29ydCBieSB0aGUgeiBjb29yZGluYXRlIG9mIHRoZSBs
YXllciBjZW50ZXIgc28gdGhhdCBsYXllcnMgZnVydGhlciBhd2F5CisgICAgICAgIC8vIGFyZSBk
cmF3biBmaXJzdC4KKyAgICAgICAgc3RkOjpzdGFibGVfc29ydChzdWJsYXllckxpc3QuYmVnaW4o
KSwgc3VibGF5ZXJMaXN0LmVuZCgpLCBjb21wYXJlTGF5ZXJaKTsKKworICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgc3VibGF5ZXJMaXN0LnNpemUoKTsgaSsrKQorICAgICAgICAgICAgZHJhd0xheWVy
c1JlY3Vyc2l2ZShzdWJsYXllckxpc3RbaV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1
YmxheWVycygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdl
dCgpKTsKKyAgICB9CisKKyAgICBpZiAobXVzdENsZWFyRGVwdGgpIHsKKyAgICAgICAgZ2xEaXNh
YmxlKEdMX0RFUFRIX1RFU1QpOworICAgICAgICBnbENsZWFyKEdMX0RFUFRIX0JVRkZFUl9CSVQp
OworICAgICAgICBkZXB0aFRlc3RFbmFibGVkRm9yU3VidHJlZSA9IGZhbHNlOworICAgIH0KIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihMYXllckNocm9taXVtKiBs
YXllcikKIHsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbG9jYWxNYXRyaXggPSBs
YXllci0+ZHJhd1RyYW5zZm9ybSgpOwogICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5k
cygpOwogCiAgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBpbnQgdGV4
dHVyZUlkOwotICAgICAgICBpZiAobGF5ZXItPm93bnNUZXh0dXJlKCkpCi0gICAgICAgICAgICB0
ZXh0dXJlSWQgPSBsYXllci0+dGV4dHVyZUlkKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgdGV4dHVyZUlkID0gZ2V0VGV4dHVyZUlkKGxheWVyKTsKLSAgICAgICAgICAgIC8vIElmIG5v
IHRleHR1cmUgaGFzIGJlZW4gY3JlYXRlZCBmb3IgdGhlIGxheWVyIHlldCB0aGVuIGNyZWF0ZSBv
bmUgbm93LgotICAgICAgICAgICAgaWYgKHRleHR1cmVJZCA9PSAtMSkKLSAgICAgICAgICAgICAg
ICB0ZXh0dXJlSWQgPSBhc3NpZ25UZXh0dXJlRm9yTGF5ZXIobGF5ZXIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUmVkcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaWYgbmVjZXNzYXJ5
LgorICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXllciBpZiBuZWNlc3Nh
cnkuCiAgICAgICAgIGlmIChsYXllci0+Y29udGVudHNEaXJ0eSgpKSB7CiAgICAgICAgICAgICAv
LyBVcGRhdGUgdGhlIGJhY2tpbmcgdGV4dHVyZSBjb250ZW50cyBmb3IgYW55IGRpcnR5IHBvcnRp
b24gb2YgdGhlIGxheWVyLgotICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZVRleHR1cmVDb250ZW50
cyh0ZXh0dXJlSWQpOworICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbnRlbnRzKCk7CiAgICAg
ICAgICAgICBtX2dsZXMyQ29udGV4dC0+bWFrZUN1cnJlbnQoKTsKICAgICAgICAgfQogCkBAIC02
OTgsMTMgKzQ4NCwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKExh
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdsRW5hYmxlKEdMX0NVTExfRkFDRSk7CiAKLSAg
ICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgICAgICB1
c2VTaGFkZXJQcm9ncmFtKHN0YXRpY19jYXN0PFNoYWRlclByb2dyYW1UeXBlPihsYXllci0+c2hh
ZGVyUHJvZ3JhbUlkKCkpKTsKLSAgICAgICAgZHJhd1RleHR1cmVkUXVhZChsb2NhbE1hdHJpeCwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgbGF5ZXItPmRyYXdPcGFjaXR5KCkpOwor
ICAgICAgICBsYXllci0+ZHJhdygpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGRlYnVnIGJv
cmRlciBpZiB0aGVyZSBpcyBvbmUuCi0gICAgZHJhd0RlYnVnQm9yZGVyKGxheWVyLCBsb2NhbE1h
dHJpeCk7CisgICAgbGF5ZXItPmRyYXdEZWJ1Z0JvcmRlcigpOwogfQogCiBib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6bWFrZUNvbnRleHRDdXJyZW50KCkKQEAgLTcxMiwyMSArNDk2LDIyIEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29udGV4dEMKICAgICByZXR1cm4gbV9n
bGVzMkNvbnRleHQtPm1ha2VDdXJyZW50KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25zKFNoYWRlclByb2dyYW1UeXBlIHByb2dyYW0p
CisvLyBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHNpemUgaXMgd2l0aGluIHRoZSBtYXhpbXVtIGFs
bG93ZWQgdGV4dHVyZSBzaXplIHJhbmdlLgorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNo
ZWNrVGV4dHVyZVNpemUoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUpCiB7Ci0gICAgdW5zaWdu
ZWQgcHJvZ3JhbUlkID0gbV9zaGFkZXJQcm9ncmFtc1twcm9ncmFtXS5tX3NoYWRlclByb2dyYW1J
ZDsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSWQsIG1fcG9zaXRpb25Mb2NhdGlv
biwgImFfcG9zaXRpb24iKTsKLSAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtSWQsIG1f
dGV4Q29vcmRMb2NhdGlvbiwgImFfdGV4Q29vcmQiKTsKLQotICAgIC8vIFJlLWxpbmsgdGhlIHBy
b2dyYW0gZm9yIHRoZSBuZXcgYXR0cmlidXRlIGxvY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4KLSAg
ICBnbExpbmtQcm9ncmFtKHByb2dyYW1JZCk7Ci0gICAgY2hlY2tHTEVycm9yKCk7CisgICAgaWYg
KHRleHR1cmVTaXplLndpZHRoKCkgPiBtX21heFRleHR1cmVTaXplIHx8IHRleHR1cmVTaXplLmhl
aWdodCgpID4gbV9tYXhUZXh0dXJlU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZEdMT2JqZWN0cygpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMoKQogewotICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdpbmcgdGhlIGxheWVyIGNv
bnRlbnRzLgotICAgIGNoYXIgdmVydGV4U2hhZGVyU3RyaW5nW10gPQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgLy8gVmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIGZvciByZW5k
ZXJpbmcgdGhlIHNjcm9sbGVkIHJvb3QgbGF5ZXIgcXVhZC4KKyAgICAvLyBUaGV5IGRpZmZlciBm
cm9tIGEgcmVndWxhciBjb250ZW50IGxheWVyIHNoYWRlciBpbiB0aGF0IHRoZXkgZG9uJ3Qgc3dp
enpsZQorICAgIC8vIHRoZSBjb2xvcnMgb3IgdGFrZSBhbiBhbHBoYSB2YWx1ZS4KKyAgICBjaGFy
IHNjcm9sbFZlcnRleFNoYWRlclN0cmluZ1tdID0KICAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFf
cG9zaXRpb247ICAgXG4iCiAgICAgICAgICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxu
IgogICAgICAgICAidW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIKQEAgLTczNiwzMCAr
NTIxLDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaAogICAgICAg
ICAiICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgogICAgICAgICAiICB2
X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKICAgICAgICAgIn0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iOwotICAgIC8vIE5vdGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBTa2lhIGFu
ZCBDb3JlIEdyYXBoaWNzIHZlcnNpb25zOgotICAgIC8vICAtIFNraWEgdXNlcyBCR1JBIGFuZCBv
cmlnaW4gaXMgdXBwZXIgbGVmdAotICAgIC8vICAtIENvcmUgR3JhcGhpY3MgdXNlcyBSR0JBIGFu
ZCBvcmlnaW4gaXMgbG93ZXIgbGVmdAotICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9
Ci0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCi0gICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhh
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ2b2lkIG1haW4o
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0j
aWYgUExBVEZPUk0oU0tJQSkKLSAgICAgICAgIiAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRChz
X3RleHR1cmUsIHZfdGV4Q29vcmQpOyBcbiIKLSAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVj
NCh0ZXhDb2xvci56LCB0ZXhDb2xvci55LCB0ZXhDb2xvci54LCB0ZXhDb2xvci53KSAqIGFscGhh
OyBcbiIKLSNlbGlmIFBMQVRGT1JNKENHKQotICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4
dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIDEuMCAtIHZfdGV4Q29vcmQueSkp
OyBcbiIKLSAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xv
ci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKLSNlbHNlCi0jZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKLSNlbmRpZgotICAgICAgICAi
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsK
LQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB1c2VkIGZvciByZW5kZXJpbmcgdGhlIHNjcm9sbGVk
IHJvb3QgbGF5ZXIgcXVhZC4gSXQgZGlmZmVycwotICAgIC8vIGZyb20gZnJhZ21lbnRTaGFkZXJT
dHJpbmcgaW4gdGhhdCBpdCBkb2Vzbid0IHN3aXp6bGUgdGhlIGNvbG9ycyBhbmQgZG9lc24ndAot
ICAgIC8vIHRha2UgYW4gYWxwaGEgdmFsdWUuCiAgICAgY2hhciBzY3JvbGxGcmFnbWVudFNoYWRl
clN0cmluZ1tdID0KICAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKICAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKQEAgLTc3MCw4NiArNTMxLDE1IEBAIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAgZ2xfRnJhZ0Nv
bG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53
KTsgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iOwogCi0gICAgLy8gQ2FudmFzIGxheWVycyBuZWVkIHRvIGJlIGZsaXBw
ZWQgdmVydGljYWxseSBhbmQgdGhlaXIgY29sb3JzIHNob3VsZG4ndCBiZQotICAgIC8vIHN3aXp6
bGVkLgotICAgIGNoYXIgY2FudmFzRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9Ci0gICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0g
ICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICIgIHZl
YzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgMS4w
IC0gdl90ZXhDb29yZC55KSk7IFxuIgotICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRl
eENvbG9yLngsIHRleENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxu
IgotICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuIjsKLQotICAgIC8vIFNoYWRlcnMgZm9yIGRyYXdpbmcgdGhlIGRlYnVnIGJvcmRl
cnMgYXJvdW5kIHRoZSBsYXllcnMuCi0gICAgY2hhciBib3JkZXJWZXJ0ZXhTaGFkZXJTdHJpbmdb
XSA9Ci0gICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgotICAgICAgICAi
dW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAgICAgICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpICAg
ICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuIgotICAgICAgICAiICAgZ2xfUG9zaXRpb24gPSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIK
LSAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwotICAgIGNoYXIgYm9y
ZGVyRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9Ci0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIHZl
YzQgY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJ2
b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0g
ICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCi0gICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCi0gICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iOwotCi0gICAgR0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAt
MC41ZiwgIDAuNWYsIDAuMGYsIC8vIFBvc2l0aW9uIDAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjBmLCAgMS4wZiwgLy8gVGV4Q29vcmQgMCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0wLjVmLCAtMC41ZiwgMC4wZiwgLy8gUG9zaXRpb24gMQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuMGYsICAwLjBmLCAvLyBUZXhDb29yZCAxCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMC41ZiwgLTAuNWYsIDAuMGYsIC8vIFBvc2l0aW9uIDIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLjBmLCAgMC4wZiwgLy8gVGV4Q29vcmQgMgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAuNWYsICAwLjVmLCAwLjBmLCAvLyBQb3NpdGlvbiAzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4wZiwgIDEuMGYgLy8gVGV4Q29vcmQgMwotICAgICAgICAgICAg
ICAgICAgICAgICAgIH07Ci0gICAgR0x1c2hvcnQgaW5kaWNlc1tdID0geyAwLCAxLCAyLCAwLCAy
LCAzLCAvLyBUaGUgdHdvIHRyaWFuZ2xlcyB0aGF0IG1ha2UgdXAgdGhlIGxheWVyIHF1YWQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAyLCAzfTsgLy8gQSBsaW5lIHBhdGggZm9y
IGRyYXdpbmcgdGhlIGxheWVyIGJvcmRlci4KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgaWYgKCFjcmVhdGVMYXllclNoYWRlcihDb250ZW50TGF5ZXJQcm9ncmFtLCB2ZXJ0ZXhT
aGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKSkgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9yIGNvbnRlbnQgbGF5ZXJzIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgTGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVy
UHJvZ3JhbUlkKENvbnRlbnRMYXllclByb2dyYW0pOwotCi0gICAgaWYgKCFjcmVhdGVMYXllclNo
YWRlcihDYW52YXNMYXllclByb2dyYW0sIHZlcnRleFNoYWRlclN0cmluZywgY2FudmFzRnJhZ21l
bnRTaGFkZXJTdHJpbmcpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBz
aGFkZXIgcHJvZ3JhbSBmb3IgQ2FudmFzIGxheWVycyIpOworICAgIG1fc2Nyb2xsU2hhZGVyUHJv
Z3JhbSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZVNoYWRlclByb2dyYW0oc2Nyb2xsVmVydGV4U2hh
ZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVudFNoYWRlclN0cmluZyk7CisgICAgaWYgKCFtX3Njcm9s
bFNoYWRlclByb2dyYW0pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJMYXllclJlbmRlcmVyQ2hyb21p
dW06IEZhaWxlZCB0byBjcmVhdGUgc2Nyb2xsIHNoYWRlciBwcm9ncmFtIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJv
Z3JhbUlkKENhbnZhc0xheWVyUHJvZ3JhbSk7CiAKLSAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVy
KFNjcm9sbExheWVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVudFNo
YWRlclN0cmluZykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRl
ciBwcm9ncmFtIGZvciBzY3JvbGxpbmcgbGF5ZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghY3JlYXRlTGF5ZXJTaGFkZXIoRGVidWdCb3JkZXJQcm9ncmFtLCBi
b3JkZXJWZXJ0ZXhTaGFkZXJTdHJpbmcsIGJvcmRlckZyYWdtZW50U2hhZGVyU3RyaW5nKSkgewot
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0gZm9yIGRl
YnVnIGJvcmRlcnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFNw
ZWNpZnkgdGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGhlIHBvc2l0aW9uIGFuZCB0ZXhDb29yZCBh
bmQgbWFrZSBpdCB0aGUgc2FtZSBmb3IgYWxsIHByb2dyYW1zIHRvCi0gICAgLy8gYXZvaWQgYmlu
ZGluZyByZS1iaW5kaW5nIHRoZSB2ZXJ0ZXggYXR0cmlidXRlcy4KLSAgICBiaW5kQ29tbW9uQXR0
cmliTG9jYXRpb25zKENvbnRlbnRMYXllclByb2dyYW0pOwotICAgIGJpbmRDb21tb25BdHRyaWJM
b2NhdGlvbnMoQ2FudmFzTGF5ZXJQcm9ncmFtKTsKLSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRp
b25zKERlYnVnQm9yZGVyUHJvZ3JhbSk7Ci0gICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9ucyhT
Y3JvbGxMYXllclByb2dyYW0pOwotCi0gICAgLy8gR2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgY29s
b3IgdW5pZm9ybSBmb3IgdGhlIGRlYnVnIGJvcmRlciBzaGFkZXIgcHJvZ3JhbS4KLSAgICBtX2Jv
cmRlckNvbG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW1z
W0RlYnVnQm9yZGVyUHJvZ3JhbV0ubV9zaGFkZXJQcm9ncmFtSWQsICJjb2xvciIpOwotCi0gICAg
Z2xHZW5CdWZmZXJzKDMsIG1fcXVhZFZib0lkcyk7Ci0gICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZ
X0JVRkZFUiwgbV9xdWFkVmJvSWRzW1ZlcnRpY2VzXSk7Ci0gICAgZ2xCdWZmZXJEYXRhKEdMX0FS
UkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKTsK
LSAgICBnbEJpbmRCdWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1fcXVhZFZib0lkc1tM
YXllckVsZW1lbnRzXSk7Ci0gICAgZ2xCdWZmZXJEYXRhKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
LCBzaXplb2YoaW5kaWNlcyksIGluZGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKKyAgICBtX3Njcm9s
bFNoYWRlclNhbXBsZXJMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fc2Nyb2xsU2hh
ZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOworICAgIG1fc2Nyb2xsU2hhZGVyTWF0cml4TG9jYXRp
b24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3Njcm9sbFNoYWRlclByb2dyYW0sICJtYXRyaXgi
KTsKKyAgICBBU1NFUlQobV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24gIT0gLTEgJiYgbV9z
Y3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiAhPSAtMSk7CiAKICAgICAvLyBDcmVhdGUgYSB0ZXh0
dXJlIG9iamVjdCB0byBob2xkIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KICAgICBt
X3Jvb3RMYXllclRleHR1cmVJZCA9IGNyZWF0ZUxheWVyVGV4dHVyZSgpOwpAQCAtODYzLDggKzU1
MywzNSBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoCiAgICAgZ2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVB
UkVTVCk7CiAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTkVBUkVTVCk7CiAKKyAgICAvLyBHZXQgdGhlIG1heCB0ZXh0dXJlIHNpemUg
c3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0uCisgICAgZ2xHZXRJbnRlZ2VydihHTF9NQVhfVEVYVFVS
RV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSk7CisKKyAgICBMYXllckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygmbV9sYXllclNoYXJlZFZhbHVlcyk7CisgICAgQ29udGVudExheWVy
Q2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCZtX2NvbnRlbnRMYXllclNoYXJlZFZh
bHVlcyk7CisgICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMo
Jm1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBMYXllckNocm9taXVtOjpjbGVhbnVwU2hhcmVk
T2JqZWN0cygmbV9sYXllclNoYXJlZFZhbHVlcyk7CisgICAgQ29udGVudExheWVyQ2hyb21pdW06
OmNsZWFudXBTaGFyZWRPYmplY3RzKCZtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyk7CisgICAg
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoJm1fY2FudmFzTGF5ZXJT
aGFyZWRWYWx1ZXMpOworCisgICAgaWYgKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkgeworICAgICAg
ICBHTEMoZ2xEZWxldGVQcm9ncmFtKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkpOworICAgICAgICBt
X3Njcm9sbFNoYWRlclByb2dyYW0gPSAwOworICAgIH0KKworICAgIGlmIChtX3Jvb3RMYXllclRl
eHR1cmVJZCkgeworICAgICAgICBHTEMoZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9yb290TGF5ZXJU
ZXh0dXJlSWQpKTsKKyAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlSWQgPSAwOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIAorI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKQEAgLTUxLDE1ICs1
MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdMRVMyQ29udGV4dDsKIAotY2xh
c3MgU2hhZGVyUHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgU2hhZGVyUHJvZ3JhbSgpOwotCi0gICAg
dW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7Ci0gICAgaW50IG1fc2FtcGxlckxvY2F0aW9uOwot
ICAgIGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIGludCBtX2FscGhhTG9jYXRpb247Ci19Owor
Ly8gU2V0dGluZyBERUJVR19HTF9DQUxMUyB0byAxIHdpbGwgY2FsbCBnbEdldEVycm9yKCkgYWZ0
ZXIgYWxtb3N0IGV2ZXJ5IEdMCisvLyBjYWxsIG1hZGUgYnkgdGhlIGNvbXBvc2l0b3IuIFVzZWZ1
bCBmb3IgZGVidWdnaW5nIHJlbmRlcmluZyBpc3N1ZXMgYnV0CisvLyB3aWxsIHNpZ25pZmljYW50
bHkgZGVncmFkZSBwZXJmb3JtYW5jZS4KKyNkZWZpbmUgREVCVUdfR0xfQ0FMTFMgMAogCiAvLyBD
bGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNp
bmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgTm9uY29weWFibGUg
ewpAQCAtNzgsNzMgKzc1LDU4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KCkgeyBtX25lZWRzRGlzcGxheSA9IHRydWU7IH0KIAotICAgIC8vIEZyZWVzIHRoZSB0ZXh0dXJl
IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbGF5ZXIuCi0gICAgYm9vbCBmcmVlTGF5ZXJUZXh0
dXJlKExheWVyQ2hyb21pdW0qKTsKLQogICAgIGJvb2wgaGFyZHdhcmVDb21wb3NpdGluZygpIGNv
bnN0IHsgcmV0dXJuIG1faGFyZHdhcmVDb21wb3NpdGluZzsgfQogCiAgICAgdm9pZCBzZXRSb290
TGF5ZXJDYW52YXNTaXplKGNvbnN0IEludFNpemUmKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCog
cm9vdExheWVyR3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXJHcmFw
aGljc0NvbnRleHQuZ2V0KCk7IH0KIAotcHJpdmF0ZToKLSAgICBlbnVtIFNoYWRlclByb2dyYW1U
eXBlIHsgRGVidWdCb3JkZXJQcm9ncmFtLCBTY3JvbGxMYXllclByb2dyYW0sIENvbnRlbnRMYXll
clByb2dyYW0sIENhbnZhc0xheWVyUHJvZ3JhbSwgTnVtU2hhZGVyUHJvZ3JhbVR5cGVzIH07Cisg
ICAgdW5zaWduZWQgY3JlYXRlTGF5ZXJUZXh0dXJlKCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVy
c1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHBhcmVudE1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJl
Y3QpOworICAgIHN0YXRpYyB2b2lkIGRlYnVnR0xDYWxsKGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNv
bnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKIAotICAgIHZvaWQgZHJhd0xheWVyKExheWVyQ2hy
b21pdW0qKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJp
eCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvamVjdGlvbk1hdHJpeDsgfQogCi0gICAgdm9pZCBkcmF3
RGVidWdCb3JkZXIoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7
CisgICAgdm9pZCB1c2VTaGFkZXIodW5zaWduZWQpOwogCi0gICAgdm9pZCBkcmF3VGV4dHVyZWRR
dWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQsIGZsb2F0IG9wYWNpdHkpOworICAgIGJvb2wgY2hlY2tUZXh0dXJlU2l6ZShjb25z
dCBJbnRTaXplJik7CiAKLSAgICBib29sIGlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsK
KyAgICBMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGxheWVyU2hhcmVkVmFsdWVzKCkgeyBy
ZXR1cm4gJm1fbGF5ZXJTaGFyZWRWYWx1ZXM7IH0KKyAgICBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
Q29udGVudExheWVyU2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKSB7IHJl
dHVybiAmbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXM7IH0KKyAgICBDYW52YXNMYXllckNocm9t
aXVtOjpDYW52YXNMYXllclNoYXJlZFZhbHVlcyogY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKSB7
IHJldHVybiAmbV9jYW52YXNMYXllclNoYXJlZFZhbHVlczsgfQogCi0gICAgYm9vbCBjcmVhdGVM
YXllclNoYWRlcihTaGFkZXJQcm9ncmFtVHlwZSwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291
cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7Citwcml2YXRlOgorICAgIHZv
aWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBmbG9hdCBvcGFjaXR5KTsKIAotICAgIHZv
aWQgdXNlU2hhZGVyUHJvZ3JhbShTaGFkZXJQcm9ncmFtVHlwZSk7CisgICAgdm9pZCBkcmF3TGF5
ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAotICAgIHZvaWQgYmluZENvbW1vbkF0dHJp
YkxvY2F0aW9ucyhTaGFkZXJQcm9ncmFtVHlwZSk7CisgICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJD
aHJvbWl1bSopOwogCi0gICAgZW51bSBWYm9JZHMgeyBWZXJ0aWNlcywgTGF5ZXJFbGVtZW50cyB9
OworICAgIGJvb2wgaXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwogCi0gICAgLy8gVGhl
c2UgYXJlIGhlcmUgb25seSB0ZW1wb3JhcmlseSBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB3
ZSBzd2l0Y2ggb3ZlciB0byBHR0wKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0g
ICAgYm9vbCBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCk7Ci0gICAgaW50IGdldFRleHR1cmVJ
ZChMYXllckNocm9taXVtKik7Ci0gICAgaW50IGFzc2lnblRleHR1cmVGb3JMYXllcihMYXllckNo
cm9taXVtKik7Ci0KLSAgICBTaGFkZXJQcm9ncmFtIG1fc2hhZGVyUHJvZ3JhbXNbTnVtU2hhZGVy
UHJvZ3JhbVR5cGVzXTsKKyAgICBib29sIGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7CisgICAg
dm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCiAgICAgdW5zaWduZWQgbV9yb290TGF5ZXJU
ZXh0dXJlSWQ7CiAgICAgaW50IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoOwogICAgIGludCBtX3Jv
b3RMYXllclRleHR1cmVIZWlnaHQ7CiAKLSAgICAvLyBTaGFkZXIgdW5pZm9ybSBhbmQgYXR0cmli
dXRlIGxvY2F0aW9ucy4KLSAgICBjb25zdCBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwotICAgIGNv
bnN0IGludCBtX3RleENvb3JkTG9jYXRpb247Ci0gICAgaW50IG1fc2FtcGxlckxvY2F0aW9uOwot
ICAgIGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIGludCBtX2FscGhhTG9jYXRpb247Ci0gICAg
aW50IG1fYm9yZGVyQ29sb3JMb2NhdGlvbjsKKyAgICAvLyBTY3JvbGwgc2hhZGVyIHVuaWZvcm0g
bG9jYXRpb25zLgorICAgIHVuc2lnbmVkIG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbTsKKyAgICBpbnQg
bV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb247CisgICAgaW50IG1fc2Nyb2xsU2hhZGVyTWF0
cml4TG9jYXRpb247CiAKLSAgICB1bnNpZ25lZCBtX3F1YWRWYm9JZHNbM107CiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogCiAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IG1fcm9vdExheWVyOwogCi0gICAgVmVjdG9yPExheWVyQ2hyb21pdW0qPiBtX2xheWVy
TGlzdDsKLQogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQ
b3NpdGlvbjsKICAgICBib29sIG1faGFyZHdhcmVDb21wb3NpdGluZzsKIAotICAgIFNoYWRlclBy
b2dyYW1UeXBlIG1fY3VycmVudFNoYWRlclByb2dyYW1UeXBlOwotCi0gICAgLy8gTWFwIGFzc29j
aWF0aW5nIGxheWVycyB3aXRoIHRleHR1cmVzIGlkcyB1c2VkIGJ5IHRoZSBHTCBjb21wb3NpdG9y
LgotICAgIHR5cGVkZWYgSGFzaE1hcDxMYXllckNocm9taXVtKiwgdW5zaWduZWQ+IFRleHR1cmVJ
ZE1hcDsKLSAgICBUZXh0dXJlSWRNYXAgbV90ZXh0dXJlSWRNYXA7CisgICAgdW5zaWduZWQgaW50
IG1fY3VycmVudFNoYWRlcjsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgT3duUHRyPHNraWE6
OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKQEAgLTE1OCw5ICsxNDAsMjggQEAg
cHJpdmF0ZToKIAogICAgIEludFNpemUgbV9yb290TGF5ZXJDYW52YXNTaXplOwogCisgICAgSW50
UmVjdCBtX3Zpc2libGVSZWN0OworCisgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CisKKyAgICAv
LyBTdG9yZSB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIGVhY2gg
bGF5ZXIgdHlwZQorICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlIG9mIHRoZSBj
b21wb3NpdG9yLiBTaW5jZSB0aGVyZSBjYW4gYmUKKyAgICAvLyBtdWx0aXBsZSBpbnN0YW5jZXMg
b2YgdGhlIGNvbXBvc2l0b3IgcnVubmluZyBpbiB0aGUgc2FtZSByZW5kZXJlciBwcm9jZXNzCisg
ICAgLy8gd2UgY2Fubm90IHN0b3JlIHRoZXNlIHZhbHVlcyBpbiBzdGF0aWMgdmFyaWFibGVzLgor
ICAgIExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyBtX2xheWVyU2hhcmVkVmFsdWVzOworICAg
IENvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMgbV9jb250ZW50
TGF5ZXJTaGFyZWRWYWx1ZXM7CisgICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJT
aGFyZWRWYWx1ZXMgbV9jYW52YXNMYXllclNoYXJlZFZhbHVlczsKKwogICAgIE93blB0cjxHTEVT
MkNvbnRleHQ+IG1fZ2xlczJDb250ZXh0OwogfTsKIAorI2lmIERFQlVHX0dMX0NBTExTICYmICFk
ZWZpbmVkICggTkRFQlVHICkKKyNkZWZpbmUgR0xDKHgpIHsgeCwgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkZWJ1Z0dMQ2FsbCgjeCwgX19GSUxFX18sIF9fTElORV9fKTsgfQorI2Vsc2UKKyNkZWZp
bmUgR0xDKHgpIHgKKyNlbmRpZgorCisKIH0KIAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJh
bnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjU1
NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVy
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJU
cmFuc2Zvcm1MYXllckNocm9taXVtLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1Jl
ZlB0cjxUcmFuc2Zvcm1MYXllckNocm9taXVtPiBUcmFuc2Zvcm1MYXllckNocm9taXVtOjpjcmVh
dGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRyYW5zZm9ybUxheWVyQ2hyb21pdW0ob3duZXIpKTsKLX0KLQotVHJhbnNmb3JtTGF5ZXJD
aHJvbWl1bTo6VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKQotICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKLXsKLX0KLQotfQotI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oCShy
ZXZpc2lvbiA2NTU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJh
bnNmb3JtTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
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
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNp
Zm5kZWYgVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bV9oCi0jZGVmaW5lIFRyYW5zZm9ybUxheWVyQ2hy
b21pdW1faAotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEEgTGF5ZXIgdGhh
dCBkb2Vzbid0IGRyYXcgYW55IGNvbnRlbnQgYnV0IHNpbXBseSBleGlzdHMgdG8gZ3JvdXAgYW5k
Ci0vLyB0cmFuc2Zvcm0gaXRzIGRlc2NlbmRhbnRzLgotY2xhc3MgVHJhbnNmb3JtTGF5ZXJDaHJv
bWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUcmFuc2Zvcm1MYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lciA9IDApOwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiBm
YWxzZTsgfQotCi1wcml2YXRlOgotICAgIFRyYW5zZm9ybUxheWVyQ2hyb21pdW0oR3JhcGhpY3NM
YXllckNocm9taXVtKiBvd25lcik7Ci19OwotCi19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDY1NTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw3IEBAIFBhc3NSZWZQdHI8
VmlkZW9MYXllckNocm9taXVtPiBWaWRlb0xheWUKIH0KIAogVmlkZW9MYXllckNocm9taXVtOjpW
aWRlb0xheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKLSAgICA6IExh
eWVyQ2hyb21pdW0ob3duZXIpCi0gICAgLCBtX2FsbG9jYXRlZFRleHR1cmVJZCgwKQorICAgIDog
Q29udGVudExheWVyQ2hyb21pdW0ob3duZXIpCiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICAsIG1f
Y2FudmFzKDApCiAgICAgLCBtX3NraWFDb250ZXh0KDApCkBAIC02NCw3ICs2Myw3IEBAIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6VmlkZW9MYXllckNocm9taXVtKEcKIHsKIH0KIAotdm9pZCBWaWRlb0xh
eWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCit2
b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMoKQogewogICAgIFJlbmRlckxh
eWVyQmFja2luZyogYmFja2luZyA9IHN0YXRpY19jYXN0PFJlbmRlckxheWVyQmFja2luZyo+KG1f
b3duZXItPmNsaWVudCgpKTsKICAgICBpZiAoIWJhY2tpbmcgfHwgYmFja2luZy0+cGFpbnRpbmdH
b2VzVG9XaW5kb3coKSkKQEAgLTEwOSw5ICsxMDgsMjAgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21p
dW06OnVwZGF0ZVRleHR1cmVDbwogICAgIC8vIEJyaW5nIHRoZSBjYW52YXMgaW50byB0aGUgY29v
cmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCiAgICAgbV9jYW52YXMtPnRyYW5zbGF0
ZShzdGF0aWNfY2FzdDxTa1NjYWxhcj4oLWRpcnR5UmVjdC54KCkpLCBzdGF0aWNfY2FzdDxTa1Nj
YWxhcj4oLWRpcnR5UmVjdC55KCkpKTsKIAorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB0ZXN0
IHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICBtX3NraXBzRHJhdyA9IGZh
bHNlOworICAgIGlmICghbGF5ZXJSZW5kZXJlcigpLT5jaGVja1RleHR1cmVTaXplKHJlcXVpcmVk
VGV4dHVyZVNpemUpKSB7CisgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IG1fY29udGVudHNUZXh0dXJl
OworICAgIGlmICghdGV4dHVyZUlkKQorICAgICAgICB0ZXh0dXJlSWQgPSBsYXllclJlbmRlcmVy
KCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworCiAgICAgLy8gSWYgdGhlIHRleHR1cmUgaWQgb3Ig
c2l6ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSwgdGhlbiB3ZSBuZWVkIHRvIHRlbGwgR0wKICAg
ICAvLyB0byByZS1hbGxvY2F0ZSBhIHRleHR1cmUuCi0gICAgaWYgKG1fYWxsb2NhdGVkVGV4dHVy
ZUlkICE9IHRleHR1cmVJZCB8fCByZXF1aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVkVGV4
dHVyZVNpemUpCisgICAgaWYgKG1fY29udGVudHNUZXh0dXJlICE9IHRleHR1cmVJZCB8fCByZXF1
aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUpCiAgICAgICAgIGNyZWF0
ZVRleHR1cmVSZWN0KHJlcXVpcmVkVGV4dHVyZVNpemUsIGRpcnR5UmVjdCwgdGV4dHVyZUlkKTsK
ICAgICBlbHNlCiAgICAgICAgIHVwZGF0ZVRleHR1cmVSZWN0KGRpcnR5UmVjdCwgdGV4dHVyZUlk
KTsKQEAgLTE1MCw3ICsxNjAsNyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4
dHVyZVJlCiAgICAgQVNTRVJUKGJpdG1hcFNpemUgPT0gcmVxdWlyZWRUZXh0dXJlU2l6ZSk7CiAg
ICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIHJlcXVpcmVkVGV4dHVy
ZVNpemUud2lkdGgoKSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKIAotICAgIG1fYWxsb2NhdGVkVGV4dHVyZUlkID0g
dGV4dHVyZUlkOworICAgIG1fY29udGVudHNUZXh0dXJlID0gdGV4dHVyZUlkOwogICAgIG1fYWxs
b2NhdGVkVGV4dHVyZVNpemUgPSByZXF1aXJlZFRleHR1cmVTaXplOwogCiAgICAgdXBkYXRlQ29t
cGxldGVkKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVv
TGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgJKHJldmlzaW9uIDY1NTcyKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTYgKzM0LDE2IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAKLSNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiQ29udGVudExh
eWVyQ2hyb21pdW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBIExheWVyIHRoYXQg
Y29udGFpbnMgYSBWaWRlbyBlbGVtZW50LgotY2xhc3MgVmlkZW9MYXllckNocm9taXVtIDogcHVi
bGljIExheWVyQ2hyb21pdW0geworY2xhc3MgVmlkZW9MYXllckNocm9taXVtIDogcHVibGljIENv
bnRlbnRMYXllckNocm9taXVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaWRl
b0xheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7
CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCk7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CiAKIHByaXZhdGU6CiAgICAgVmlkZW9M
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwpAQCAtNTEsOCArNTEs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoY29uc3QgSW50UmVjdCYg
dXBkYXRlUmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkKTsKICAgICB2b2lkIHVwZGF0ZUNvbXBsZXRl
ZCgpOwogCi0gICAgdW5zaWduZWQgbV9hbGxvY2F0ZWRUZXh0dXJlSWQ7Ci0gICAgSW50U2l6ZSBt
X2FsbG9jYXRlZFRleHR1cmVTaXplOwogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgT3duUHRyPHNr
aWE6OlBsYXRmb3JtQ2FudmFzPiBtX2NhbnZhczsKICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0
U2tpYT4gbV9za2lhQ29udGV4dDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64810</attachid>
            <date>2010-08-18 22:55:28 -0700</date>
            <delta_ts>2010-08-19 11:47:42 -0700</delta_ts>
            <desc>Proposed patch addressing review comments</desc>
            <filename>restructureCompositor_44148_5.txt</filename>
            <type>text/plain</type>
            <size>109180</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTU4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTExIEBACisyMDEwLTA4LTE3ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlz
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbY2hyb21pdW1dIFJlYXJyYW5naW5nIHRoZSBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
ZyBjb2RlIHN1Y2ggdGhhdCB0aGUKKyAgICAgICAgbGF5ZXIgcmVuZGVyaW5nIGxvZ2ljIG5vdyBs
aXZlcyBpbiB0aGUgbGF5ZXIgY2xhc3NlcyByYXRoZXIgdGhhbiB0aGUKKyAgICAgICAgY29tcG9z
aXRvci4gVGhpcyBsaWZ0cyB0aGUgcmVzdHJpY3Rpb24gb2YgaGF2aW5nIG9uZSB0ZXh0dXJlIHBl
ciBsYXllcgorICAgICAgICBhbmQgc2lnbmlmaWNhbnRseSBjbGVhbnMgdXAgdGhlIGNvbXBvc2l0
b3IgY29kZS4gVGhpcyBjaGFuZ2UgbW9zdGx5CisgICAgICAgIHJlc3VsdGVkIGluIGEgbG90IG9m
IGNvZGUgbW92aW5nIGFyb3VuZCBmaWxlcy4gTm90ZXdvcnRoeSBjaGFuZ2VzCisgICAgICAgIGlu
Y2x1ZGU6CisgICAgICAgICogTWFkZSBMYXllckNocm9taXVtIGEgcHJvcGVyIGJhc2VkIGNsYXNz
IGZvciBsYXllcnMgdGhhdCBtb3N0bHkgaGFuZGxlcworICAgICAgICAgIHRoZSB1cGRhdGVzIHRv
IHRoZSBsYXllciBwcm9wZXJ0aWVzIGFuZCBzdXBlcmxheWVyIC8gc3VibGF5ZXIgdXBkYXRlcy4K
KyAgICAgICAgKiBJbnRyb2R1Y2VkIGEgbmV3IGxheWVyIHR5cGUsIENvbnRlbnRMYXllckNocm9t
aXVtLCB3aGljaCBoYW5kbGVzCisgICAgICAgICAgbGF5ZXJzIHRoYXQgcmVxdWlyZSBhIEdyYXBo
aWNzQ29udGV4dCB0byByZW5kZXIgdGhlaXIgY29udGVudC4KKyAgICAgICAgKiBJbWFnZUxheWVy
Q2hyb21pdW0gYW5kIFZpZGVvTGF5ZXJDaHJvbWl1bSBub3cgZGVyaXZlIGZyb20KKyAgICAgICAg
ICBDb250ZW50TGF5ZXJDaHJvbWl1bSBhcyB0aGV5IHNoYXJlIHRoZSBzYW1lIHNoYWRlciBhbmQg
ZHJhdyBmdW5jdGlvbi4KKyAgICAgICAgKiBSZW1vdmVkIFRyYW5zZm9ybUxheWVyQ2hyb21pdW0g
YXMgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgbm93IHJlcGxhY2VkIGJ5CisgICAgICAgICAgdGhlIGJh
c2UgTGF5ZXJDaHJvbWl1bSBjbGFzcy4KKyAgICAgICAgKiBSZS1hcnJhbmdlZCB0aGUgb3JkZXIg
aW4gd2hpY2ggdGhlIG1lbWJlcnMgb2YgTGF5ZXJDaHJvbWl1bSBhcmUgZGVmaW5lZAorICAgICAg
ICAgIGluIHRoZSBoZWFkZXIgZmlsZSB0byBmb3JtIGEgbW9yZSByZWFzb25hYmxlIGxvZ2ljYWwg
Z3JvdXBpbmcuCisgICAgICAgICogQ2hhbmdlZCBMYXllclJlbmRlcmVyQ2hyb21pdW0gdG8gdXNl
IHRoZSBzaGFkZXIgY3JlYXRpb24gYW5kIGRyYXdpbmcKKyAgICAgICAgICBtZXRob2RzIGRlZmlu
ZWQgaW4gdGhlIGxheWVyIGNsYXNzZXMuIEFzIGEgcmVzdWx0LCBhIGxvdCBvZiBHTCBjb2RlIHdh
cworICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgaW1wbGVtZW50YXRpb24gZmlsZS4KKyAgICAg
ICAgKiBFbGltaW5hdGVkIHJhbmRvbWx5IGRpc3BlcnNlZCBjYWxscyB0byBjaGVjayBmb3IgR0wg
ZXJyb3JzIGJ5IGEgbWFjcm8gKEdMQykKKyAgICAgICAgICB3aGljaCBhbGxvd3MgdHVybmluZyBl
cnJvciB0ZXN0aW5nIG9uL29mZiB3aXRoIGEgc2luZ2xlIGRlZmluZSAoREVCVUdfR0xfQ0FMTFMK
KyAgICAgICAgICBkZWZpbmVkIGluIExheWVyUmVuZGVyZXJDaHJvbWl1bS5oKQorICAgICAgICAq
IFJlcGxhY2VkIHRoZSBwcmV2aW91cyBsYXllciByZW5kZXIgbG9vcCB3aXRoIHR3byB0cmF2ZXJz
YWxzIG9mIHRoZSBsYXllcgorICAgICAgICAgIGhpZXJhcmNoeSwgdGhlIGZpcnN0IHRvIHVwZGF0
ZSB0cmFuc2Zvcm1zIGFuZCBvcGFjaXR5IHZhbHVlcyBhbmQgdGhlCisgICAgICAgICAgc2Vjb25k
IHRvIHJlbmRlciB0aGUgbGF5ZXJzLiBFbGltaW5hdGVkIGdsb2JhbCBaIHNvcnRpbmcgb2YgYWxs
IGxheWVycyBhcworICAgICAgICAgIGl0IHdhcyB3cm9uZy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MTQ4CisKKyAgICAgICAgVGVzdDogVmVyaWZp
ZWQgdGhhdCBwYWdlcyB1c2luZyB0aGUgY29tcG9zaXRvciBhbmQgY29tcG9zaXRvcgorICAgICAg
ICAgICAgICBsYXlvdXQgdGVzdHMgaGF2ZSBub3QgcmVncmVzc2VkLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6
Q2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXM6OkNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06
OkNvbnRlbnRMYXllclNoYXJlZFZhbHVlczo6Q29udGVudExheWVyU2hhcmVkVmFsdWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb21p
dW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OmluaXRpYWxpemVT
aGFyZWRPYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpj
bGVhbnVwU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hy
b21pdW06OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXll
ckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUHJlc2VydmVzM0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRl
bnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVTaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnRvR0xNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
ZHJhd1RleHR1cmVkUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3
RGVidWdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aW5pdGlhbGl6
ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51
cFNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHJlcGFy
ZUZvckRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmdldFN1YmxheWVycyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNocm9taXVtOjpjb250ZW50c0RpcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmxheWVyUmVuZGVy
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkZWJ1Z0dMQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjcmVhdGVMYXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzUmVjdXJzaXZlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tUZXh0dXJlU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3Rz
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpwcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6bGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjYW52YXNMYXllclNoYXJlZFZhbHVlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3Jt
TGF5ZXJDaHJvbWl1bS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xh
eWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRl
b0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVv
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oOgorCiAyMDEwLTA4LTE3ICBBcml5
YSBIaWRheWF0ICA8YXJpeWFAc2VuY2hhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRv
bmlvIEdvbWVzLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY1NTcyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTIyMjksNiArMjIyOSw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAnLApAQCAtMjI2
OCw4ICsyMjcwLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsaW5nRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxpbmdEYXRhLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBl
ci5jcHAnLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2NTU3MikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSw2MyBAQAogI2luY2x1ZGUgIkNhbnZhc0xheWVy
Q2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdW5zaWduZWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6bV9zaGFkZXJQ
cm9ncmFtSWQgPSAwOworQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRW
YWx1ZXMoKQorICAgIDogbV9jYW52YXNTaGFkZXJQcm9ncmFtKDApCisgICAgLCBtX3NoYWRlclNh
bXBsZXJMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyTWF0cml4TG9jYXRpb24oLTEpCisgICAg
LCBtX3NoYWRlckFscGhhTG9jYXRpb24oLTEpCisgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQor
eworICAgIGNoYXIgdmVydGV4U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAiYXR0cmlidXRlIHZl
YzQgYV9wb3NpdGlvbjsgICBcbiIKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7
ICAgXG4iCisgICAgICAgICJ1bmlmb3JtIG1hdDQgbWF0cml4OyAgICAgICAgIFxuIgorICAgICAg
ICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigp
ICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAiICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxu
IgorICAgICAgICAiICB2X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgIn0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisgICAgLy8gQ2FudmFzIGxheWVycyBu
ZWVkIHRvIGJlIGZsaXBwZWQgdmVydGljYWxseSBhbmQgdGhlaXIgY29sb3JzIHNob3VsZG4ndCBi
ZQorICAgIC8vIHN3aXp6bGVkLgorICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9Cisg
ICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAg
ICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2ZWMyKHZfdGV4Q29v
cmQueCwgMS4wIC0gdl90ZXhDb29yZC55KSk7IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3Ig
PSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpICog
YWxwaGE7IFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuIjsKKworICAgIG1fY2FudmFzU2hhZGVyUHJvZ3JhbSA9IGNyZWF0
ZVNoYWRlclByb2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZyk7
CisgICAgaWYgKCFtX2NhbnZhc1NoYWRlclByb2dyYW0pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJD
YW52YXNMYXllckNocm9taXVtOiBGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbiA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1fY2FudmFzU2hhZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOwor
ICAgIG1fc2hhZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2NhbnZh
c1NoYWRlclByb2dyYW0sICJtYXRyaXgiKTsKKyAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihtX2NhbnZhc1NoYWRlclByb2dyYW0sICJhbHBoYSIpOworICAg
IEFTU0VSVChtX3NoYWRlclNhbXBsZXJMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fc2hh
ZGVyTWF0cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3NoYWRlckFscGhhTG9jYXRp
b24gIT0gLTEpOworCisgICAgbV9pbml0aWFsaXplZCA9IHRydWU7Cit9CisKK0NhbnZhc0xheWVy
Q2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNoYXJlZFZhbHVlcygpCit7CisgICAgaWYgKG1fY2Fu
dmFzU2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgR0xDKGdsRGVsZXRlUHJvZ3JhbShtX2NhbnZhc1No
YWRlclByb2dyYW0pKTsKK30KIAogUGFzc1JlZlB0cjxDYW52YXNMYXllckNocm9taXVtPiBDYW52
YXNMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKIHsK
QEAgLTU0LDE0ICsxMDYsOCBAQCBDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXllckNocm9t
aXVtCiB7CiB9CiAKLXVuc2lnbmVkIENhbnZhc0xheWVyQ2hyb21pdW06OnRleHR1cmVJZCgpCi17
Ci0gICAgcmV0dXJuIG1fdGV4dHVyZUlkOwotfQotCi12b2lkIENhbnZhc0xheWVyQ2hyb21pdW06
OnVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCit2b2lkIENhbnZhc0xh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKIHsKLSAgICBBU1NFUlQodGV4dHVyZUlkID09
IG1fdGV4dHVyZUlkKTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKICAgICBpZiAobV90ZXh0dXJl
Q2hhbmdlZCkgewogICAgICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZUlkKTsKQEAgLTkyLDUgKzEzOCwxOSBAQCB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnNldENv
bnRleHQoY29uCiAgICAgbV90ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CiB9CiAKK3ZvaWQgQ2FudmFz
TGF5ZXJDaHJvbWl1bTo6ZHJhdygpCit7CisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7Cisg
ICAgY29uc3QgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVu
ZGVyZXIoKS0+Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICBBU1NFUlQoc3YgJiYgc3Yt
PmluaXRpYWxpemVkKCkpOworICAgIEdMQyhnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsK
KyAgICBHTEMoZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOworICAg
IGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5jYW52YXNTaGFkZXJQcm9ncmFtKCkpOwor
ICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAg
ICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBk
cmF3VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBi
b3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN2
LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKK30K
KwogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNCAr
NDUsMjkgQEAgY2xhc3MgQ2FudmFzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllcgogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0xheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29u
dGVudCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQotICAgIHZpcnR1YWwgYm9vbCBvd25zVGV4dHVy
ZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNvbnRl
bnRzKHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHRleHR1cmVJZCgpOwotICAgIHZp
cnR1YWwgdW5zaWduZWQgc2hhZGVyUHJvZ3JhbUlkKCkgeyByZXR1cm4gbV9zaGFkZXJQcm9ncmFt
SWQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhdygpOwogCiAgICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KTsKIAotICAgIHN0YXRpYyB2b2lkIHNldFNoYWRlclByb2dyYW1JZCh1bnNpZ25l
ZCBzaGFkZXJQcm9ncmFtSWQpIHsgbV9zaGFkZXJQcm9ncmFtSWQgPSBzaGFkZXJQcm9ncmFtSWQ7
IH0KKyAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2hhcmVk
VmFsdWVzKCk7CisgICAgICAgIH5TaGFyZWRWYWx1ZXMoKTsKKworICAgICAgICB1bnNpZ25lZCBj
YW52YXNTaGFkZXJQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXNTaGFkZXJQcm9ncmFt
OyB9CisgICAgICAgIGludCBzaGFkZXJTYW1wbGVyTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3NoYWRlclNhbXBsZXJMb2NhdGlvbjsgfQorICAgICAgICBpbnQgc2hhZGVyTWF0cml4TG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRlck1hdHJpeExvY2F0aW9uOyB9CisgICAgICAgIGlu
dCBzaGFkZXJBbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJBbHBoYUxvY2F0
aW9uOyB9CisgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2luaXRp
YWxpemVkOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBtX2NhbnZhc1NoYWRl
clByb2dyYW07CisgICAgICAgIGludCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsKKyAgICAgICAg
aW50IG1fc2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3NoYWRlckFscGhhTG9j
YXRpb247CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB9OwogCiAgICAgY2xhc3Mg
UHJlcGFyZVRleHR1cmVDYWxsYmFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGlj
OgpAQCAtNjYsOCArODEsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwog
ICAgIGJvb2wgbV90ZXh0dXJlQ2hhbmdlZDsKICAgICBPd25QdHI8UHJlcGFyZVRleHR1cmVDYWxs
YmFjaz4gbV9wcmVwYXJlVGV4dHVyZUNhbGxiYWNrOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIG1f
c2hhZGVyUHJvZ3JhbUlkOwogfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRl
ICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisKKyNpZiBQTEFURk9STShT
S0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dFNraWEuaCIKKyNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKKyNlbGlm
IFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4K
KyNlbmRpZgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKCkKKyAg
ICA6IG1fY29udGVudFNoYWRlclByb2dyYW0oMCkKKyAgICAsIG1fc2hhZGVyU2FtcGxlckxvY2F0
aW9uKC0xKQorICAgICwgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVy
QWxwaGFMb2NhdGlvbigtMSkKKyAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgLy8g
U2hhZGVycyBmb3IgZHJhd2luZyB0aGUgbGF5ZXIgY29udGVudHMuCisgICAgY2hhciB2ZXJ0ZXhT
aGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxu
IgorICAgICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgInVu
aWZvcm0gbWF0NCBtYXRyaXg7ICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90
ZXhDb29yZDsgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBc
biIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIg
IGdsX1Bvc2l0aW9uID0gbWF0cml4ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICIgIHZfdGV4
Q29vcmQgPSBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcbiI7CisKKyAgICAvLyBOb3RlIGRpZmZlcmVuY2VzIGJldHdlZW4gU2tpYSBhbmQg
Q29yZSBHcmFwaGljcyB2ZXJzaW9uczoKKyAgICAvLyAgLSBTa2lhIHVzZXMgQkdSQSBhbmQgb3Jp
Z2luIGlzIHVwcGVyIGxlZnQKKyAgICAvLyAgLSBDb3JlIEdyYXBoaWNzIHVzZXMgUkdCQSBhbmQg
b3JpZ2luIGlzIGxvd2VyIGxlZnQKKyAgICBjaGFyIGZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQor
ICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorI2lm
IFBMQVRGT1JNKFNLSUEpCisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190
ZXh0dXJlLCB2X3RleENvb3JkKTsgXG4iCisgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
dGV4Q29sb3IueiwgdGV4Q29sb3IueSwgdGV4Q29sb3IueCwgdGV4Q29sb3IudykgKiBhbHBoYTsg
XG4iCisjZWxpZiBQTEFURk9STShDRykKKyAgICAgICAgIiAgdmVjNCB0ZXhDb2xvciA9IHRleHR1
cmUyRChzX3RleHR1cmUsIHZlYzIodl90ZXhDb29yZC54LCAxLjAgLSB2X3RleENvb3JkLnkpKTsg
XG4iCisgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3Iu
eSwgdGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBoYTsgXG4iCisjZWxzZQorI2Vycm9yICJO
ZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKKyAgICAgICAgIn0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisK
KyAgICBtX2NvbnRlbnRTaGFkZXJQcm9ncmFtID0gY3JlYXRlU2hhZGVyUHJvZ3JhbSh2ZXJ0ZXhT
aGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIW1fY29udGVudFNo
YWRlclByb2dyYW0pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb250ZW50TGF5ZXJDaHJvbWl1bTog
RmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbiht
X2NvbnRlbnRTaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgbV9zaGFkZXJNYXRyaXhM
b2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fY29udGVudFNoYWRlclByb2dyYW0sICJt
YXRyaXgiKTsKKyAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihtX2NvbnRlbnRTaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKKyAgICBBU1NFUlQobV9zaGFkZXJT
YW1wbGVyTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3NoYWRlck1hdHJpeExvY2F0aW9u
ICE9IC0xKTsKKyAgICBBU1NFUlQobV9zaGFkZXJBbHBoYUxvY2F0aW9uICE9IC0xKTsKKworICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzOjp+U2hhcmVkVmFsdWVzKCkKK3sKKyAgICBpZiAobV9jb250ZW50U2hhZGVyUHJvZ3Jh
bSkKKyAgICAgICAgR0xDKGdsRGVsZXRlUHJvZ3JhbShtX2NvbnRlbnRTaGFkZXJQcm9ncmFtKSk7
Cit9CisKKworUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExheWVyQ2hy
b21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpKTsKK30KKworQ29udGVu
dExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIpCisgICAgOiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9jb250ZW50c1Rl
eHR1cmUoMCkKK3sKK30KKworQ29udGVudExheWVyQ2hyb21pdW06On5Db250ZW50TGF5ZXJDaHJv
bWl1bSgpCit7CisgICAgaWYgKG1fY29udGVudHNUZXh0dXJlKQorICAgICAgICBHTEMoZ2xEZWxl
dGVUZXh0dXJlcygxLCAmbV9jb250ZW50c1RleHR1cmUpKTsKK30KKworCit2b2lkIENvbnRlbnRM
YXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygpCit7CisgICAgUmVuZGVyTGF5ZXJCYWNraW5n
KiBiYWNraW5nID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGF5ZXJCYWNraW5nKj4obV9vd25lci0+Y2xp
ZW50KCkpOworICAgIGlmICghYmFja2luZyB8fCBiYWNraW5nLT5wYWludGluZ0dvZXNUb1dpbmRv
dygpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoZHJhd3NDb250ZW50KCkpOworCisg
ICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
dGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCisgICAgbV9za2lwc0RyYXcg
PSBmYWxzZTsKKyAgICBpZiAoIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShtX2Jv
dW5kcykpIHsKKyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdm9pZCogcGl4ZWxzID0gMDsKKyAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2Rp
cnR5UmVjdCk7CisgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplOworICAgIEludFNpemUg
Yml0bWFwU2l6ZTsKKworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgY29uc3QgU2tCaXRtYXAqIHNr
aWFCaXRtYXAgPSAwOworICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gY2FudmFzOwor
ICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBza2lhQ29udGV4dDsKKyAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CisKKyAgICByZXF1aXJlZFRleHR1cmVT
aXplID0gbV9ib3VuZHM7CisgICAgSW50UmVjdCBib3VuZHNSZWN0KEludFBvaW50KDAsIDApLCBt
X2JvdW5kcyk7CisKKyAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRl
ZCB0aGVuIHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKKyAgICAvLyBjb250ZW50cyBvZiB0aGUg
bGF5ZXIuCisgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJl
U2l6ZSkKKyAgICAgICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKKyAgICBlbHNlIHsKKyAgICAg
ICAgLy8gQ2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9p
ZCBkcmF3aW5nIG91dHNpZGUKKyAgICAgICAgLy8gdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0
ZXh0dXJlLgorICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGJvdW5kc1JlY3QpOworICAgIH0K
KworICAgIGNhbnZhcy5zZXQobmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKGRpcnR5UmVjdC53aWR0
aCgpLCBkaXJ0eVJlY3QuaGVpZ2h0KCksIGZhbHNlKSk7CisgICAgc2tpYUNvbnRleHQuc2V0KG5l
dyBQbGF0Zm9ybUNvbnRleHRTa2lhKGNhbnZhcy5nZXQoKSkpOworCisjaWYgT1MoV0lORE9XUykK
KyAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBnZXQgdGV4dCB0byBzaG93IHVwIGNvcnJlY3RseS4g
V2l0aG91dCBpdCwKKyAgICAvLyBHREkgcmVuZGVycyB3aXRoIHplcm8gYWxwaGEgYW5kIHRoZSB0
ZXh0IGJlY29tZXMgaW52aXNpYmxlLgorICAgIC8vIFVuZm9ydHVuYXRlbHksIHNldHRpbmcgdGhp
cyB0byB0cnVlIGRpc2FibGVzIGNsZWFydHlwZS4KKyAgICAvLyBGSVhNRTogRG9lcyB0aGlzIHRh
a2UgdXMgZG93biBhIHZlcnkgc2xvdyB0ZXh0IHJlbmRlcmluZyBwYXRoPworICAgIC8vIEZJWE1F
OiB3aHkgaXMgdGhpcyBpcyBhIHdpbmRvd3Mtb25seSBjYWxsID8KKyAgICBza2lhQ29udGV4dC0+
c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7CisjZW5kaWYKKworICAgIGdyYXBoaWNzQ29u
dGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0Kj4oc2tpYUNvbnRleHQuZ2V0KCkpKSk7CisKKyAgICAvLyBCcmluZyB0aGUg
Y2FudmFzIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgorICAg
IGNhbnZhcy0+dHJhbnNsYXRlKHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LngoKSks
IHN0YXRpY19jYXN0PFNrU2NhbGFyPigtZGlydHlSZWN0LnkoKSkpOworCisgICAgbV9vd25lci0+
cGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsK
KyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNz
Qml0bWFwKGZhbHNlKTsKKyAgICBza2lhQml0bWFwID0gJmJpdG1hcDsKKyAgICBBU1NFUlQoc2tp
YUJpdG1hcCk7CisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soKnNraWFCaXRtYXApOworICAg
IFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHNraWFCaXRtYXAtPmNvbmZpZygpOworICAg
IC8vIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgbW9yZSBpbWFnZSBjb25maWd1cmF0aW9u
cz8KKyAgICBpZiAoc2tpYUNvbmZpZyA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpIHsK
KyAgICAgICAgcGl4ZWxzID0gc2tpYUJpdG1hcC0+Z2V0UGl4ZWxzKCk7CisgICAgICAgIGJpdG1h
cFNpemUgPSBJbnRTaXplKHNraWFCaXRtYXAtPndpZHRoKCksIHNraWFCaXRtYXAtPmhlaWdodCgp
KTsKKyAgICB9CisjZWxpZiBQTEFURk9STShDRykKKyAgICByZXF1aXJlZFRleHR1cmVTaXplID0g
bV9ib3VuZHM7CisgICAgSW50UmVjdCBib3VuZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5k
cyk7CisKKyAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVu
IHdlIG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKKyAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5ZXIu
CisgICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkK
KyAgICAgICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8g
Q2xpcCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9pZCBkcmF3
aW5nIG91dHNpZGUKKyAgICAgICAgLy8gdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJl
LgorICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGJvdW5kc1JlY3QpOworICAgIH0KKworICAg
IFZlY3Rvcjx1aW50OF90PiB0ZW1wVmVjdG9yOworICAgIGludCByb3dCeXRlcyA9IDQgKiBkaXJ0
eVJlY3Qud2lkdGgoKTsKKyAgICB0ZW1wVmVjdG9yLnJlc2l6ZShyb3dCeXRlcyAqIGRpcnR5UmVj
dC5oZWlnaHQoKSk7CisgICAgbWVtc2V0KHRlbXBWZWN0b3IuZGF0YSgpLCAwLCB0ZW1wVmVjdG9y
LnNpemUoKSk7CisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZShBZG9w
dENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgUmV0YWluUHRyPENHQ29u
dGV4dFJlZj4gY29udGV4dENHKEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZSh0ZW1wVmVj
dG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5UmVjdC53aWR0aCgpLCBkaXJ0eVJlY3QuaGVp
Z2h0KCksIDgsIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworCisgICAgR3JhcGhpY3ND
b250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0Q0cuZ2V0KCkpOworCisgICAgLy8gVHJhbnNs
YXRlIHRoZSBncmFwaGljcyBjb250eHQgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhl
IGRpcnR5IHJlY3QuCisgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtZGlydHlSZWN0Lngo
KSwgLWRpcnR5UmVjdC55KCkpOworCisgICAgbV9vd25lci0+cGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOworCisgICAgcGl4ZWxzID0gdGVtcFZl
Y3Rvci5kYXRhKCk7CisgICAgYml0bWFwU2l6ZSA9IGRpcnR5UmVjdC5zaXplKCk7CisjZWxzZQor
I2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKKwor
ICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IG1fY29udGVudHNUZXh0dXJlOworICAgIGlmICghdGV4
dHVyZUlkKQorICAgICAgICB0ZXh0dXJlSWQgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVy
VGV4dHVyZSgpOworCisgICAgaWYgKHBpeGVscykKKyAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3Qo
cGl4ZWxzLCBiaXRtYXBTaXplLCByZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlSZWN0LCB0ZXh0
dXJlSWQpOworfQorCit2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlUmVj
dCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNpemUmIGJpdG1hcFNpemUsIGNvbnN0IEludFNpemUm
IHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVk
IHRleHR1cmVJZCkKK3sKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOworCisgICAgLy8gSWYgdGhl
IHRleHR1cmUgaWQgb3Igc2l6ZSBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSB0aGVuIHdlIG5lZWQg
dG8gdGVsbCBHTAorICAgIC8vIHRvIHJlLWFsbG9jYXRlIGEgdGV4dHVyZS4KKyAgICBpZiAobV9j
b250ZW50c1RleHR1cmUgIT0gdGV4dHVyZUlkIHx8IHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9h
bGxvY2F0ZWRUZXh0dXJlU2l6ZSkgeworICAgICAgICBBU1NFUlQoYml0bWFwU2l6ZSA9PSByZXF1
aXJlZFRleHR1cmVTaXplKTsKKyAgICAgICAgR0xDKGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCBHTF9SR0JBLCByZXF1aXJlZFRleHR1cmVTaXplLndpZHRoKCksIHJlcXVpcmVkVGV4dHVy
ZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOwor
CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlID0gdGV4dHVyZUlkOworICAgICAgICBtX2FsbG9j
YXRlZFRleHR1cmVTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6ZTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBBU1NFUlQodXBkYXRlUmVjdC53aWR0aCgpIDw9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUu
d2lkdGgoKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpIDw9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUu
aGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQodXBkYXRlUmVjdC53aWR0aCgpID09IGJpdG1hcFNp
emUud2lkdGgoKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID09IGJpdG1hcFNpemUuaGVpZ2h0KCkp
OworI2lmIFBMQVRGT1JNKENHKQorICAgICAgICAvLyBUaGUgb3JpZ2luIGlzIGF0IHRoZSBsb3dl
ciBsZWZ0IGluIENvcmUgR3JhcGhpY3MnIGNvb3JkaW5hdGUgc3lzdGVtLiBXZSBuZWVkIHRvIGNv
cnJlY3QgZm9yIHRoaXMgaGVyZS4KKyAgICAgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QueCgpLCBt
X2FsbG9jYXRlZFRleHR1cmVTaXplLmhlaWdodCgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSAtIHVw
ZGF0ZVJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qud2lk
dGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyNlbGlmIFBMQVRGT1JNKFNLSUEp
CisgICAgICAgIEdMQyhnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVj
dC54KCksIHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVp
Z2h0KCksIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscykpOworI2Vsc2UKKyNlcnJv
ciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgorI2VuZGlmCisgICAgfQor
CisgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7CisgICAgbV9jb250ZW50c0Rp
cnR5ID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXcoKQorewor
ICAgIGlmIChtX3NraXBzRHJhdykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxheWVy
UmVuZGVyZXIoKSk7CisgICAgY29uc3QgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
cyogc3YgPSBsYXllclJlbmRlcmVyKCktPmNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygpOworICAg
IEFTU0VSVChzdiAmJiBzdi0+aW5pdGlhbGl6ZWQoKSk7CisgICAgR0xDKGdsQWN0aXZlVGV4dHVy
ZShHTF9URVhUVVJFMCkpOworICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
Y29udGVudHNUZXh0dXJlKSk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPmNv
bnRlbnRTaGFkZXJQcm9ncmFtKCkpOworICAgIEdMQyhnbFVuaWZvcm0xaShzdi0+c2hhZGVyU2Ft
cGxlckxvY2F0aW9uKCksIDApKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGxheWVyUmVuZGVyZXIo
KS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAg
ICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwK
KyAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hh
ZGVyQWxwaGFMb2NhdGlvbigpKTsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ29udGVudExheWVyQ2hyb21pdW1f
aAorI2RlZmluZSBDb250ZW50TGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3NDb250ZXh0IHRv
IHJlbmRlciBpdHMgY29udGVudHMuCitjbGFzcyBDb250ZW50TGF5ZXJDaHJvbWl1bSA6IHB1Ymxp
YyBMYXllckNocm9taXVtIHsKKyAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
OworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBj
cmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOworCisgICAgfkNvbnRlbnRM
YXllckNocm9taXVtKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhdygpOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7
IHJldHVybiBtX293bmVyICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgpOyB9CisKKyAgICAvLyBT
dG9yZXMgdmFsdWVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiB0aGlzIGNs
YXNzIHRoYXQgYXJlCisgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSAoYW5kIGhlbmNlIHRoZSBzYW1lIEdMCisgICAgLy8gY29udGV4dCkuCisgICAg
Y2xhc3MgU2hhcmVkVmFsdWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNoYXJlZFZhbHVlcygp
OworICAgICAgICB+U2hhcmVkVmFsdWVzKCk7CisKKyAgICAgICAgdW5zaWduZWQgY29udGVudFNo
YWRlclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRTaGFkZXJQcm9ncmFtOyB9Cisg
ICAgICAgIGludCBzaGFkZXJTYW1wbGVyTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRl
clNhbXBsZXJMb2NhdGlvbjsgfQorICAgICAgICBpbnQgc2hhZGVyTWF0cml4TG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3NoYWRlck1hdHJpeExvY2F0aW9uOyB9CisgICAgICAgIGludCBzaGFk
ZXJBbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJBbHBoYUxvY2F0aW9uOyB9
CisgICAgICAgIGludCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbGl6ZWQ7
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fY29udGVudFNoYWRlclByb2dy
YW07CisgICAgICAgIGludCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsKKyAgICAgICAgaW50IG1f
c2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3NoYWRlckFscGhhTG9jYXRpb247
CisgICAgICAgIGludCBtX2luaXRpYWxpemVkOworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBD
b250ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKworICAg
IHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiBiaXRt
YXBTaXplLCBjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgdW5zaWduZWQgdGV4dHVy
ZUlkKTsKKworICAgIHVuc2lnbmVkIG1fY29udGVudHNUZXh0dXJlOworICAgIEludFNpemUgbV9h
bGxvY2F0ZWRUZXh0dXJlU2l6ZTsKKyAgICBib29sIG1fc2tpcHNEcmF3OworCit9OworCit9Cisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBo
aWNzTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDY1NTcyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0u
aCIKIAorI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIK
QEAgLTUyLDcgKzUzLDYgQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSAiVHJh
bnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgpAQCAtOTcsNyArOTcsNyBAQCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJQdXJw
b3NlKE5vQ29udGVudHNMYXllcikKICAgICAsIG1fY29udGVudHNMYXllckhhc0JhY2tncm91bmRD
b2xvcihmYWxzZSkKIHsKLSAgICBtX2xheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMp
OworICAgIG1fbGF5ZXIgPSBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMpOwogCiAg
ICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyUAogewogICAgIGlmIChtX3ByZXNlcnZl
czNEICYmICFtX3RyYW5zZm9ybUxheWVyKSB7CiAgICAgICAgIC8vIENyZWF0ZSB0aGUgdHJhbnNm
b3JtIGxheWVyLgotICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gVHJhbnNmb3JtTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX3RyYW5zZm9ybUxheWVyID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKHRoaXMpOwogCiAgICAgICAgIC8vIENvcHkgdGhlIHBvc2l0aW9uIGZyb20g
dGhpcyBsYXllci4KICAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNo
cm9taXVtLmNwcAkocmV2aXNpb24gNjU1NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDggQEAKIAogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisKICNpZiBQTEFURk9STShTS0lBKQogI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKQEAg
LTU0LDcgKzU2LDcgQEAgUGFzc1JlZlB0cjxJbWFnZUxheWVyQ2hyb21pdW0+IEltYWdlTGF5ZQog
fQogCiBJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKQotICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICA6IENvbnRl
bnRMYXllckNocm9taXVtKG93bmVyKQogICAgICwgbV9jb250ZW50cygwKQogewogfQpAQCAtNjgs
OCArNzAsMTAgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKE5hdAogICAg
IHNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
VGV4dHVyZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCkKK3ZvaWQgSW1hZ2VMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cygpCiB7CisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisK
ICAgICB2b2lkKiBwaXhlbHMgPSAwOwogICAgIEludFJlY3QgZGlydHlSZWN0KG1fZGlydHlSZWN0
KTsKICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemU7CkBAIC0xMjksNiArMTMzLDE3IEBA
IHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ28KICNlbHNlCiAjZXJyb3Ig
Ik5lZWQgdG8gaW1wbGVtZW50IGZvciB5b3VyIHBsYXRmb3JtLiIKICNlbmRpZgorICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyB0ZXN0IHdoZW4gdGlsZWQgbGF5ZXJzIGFyZSBpbXBsZW1lbnRlZC4K
KyAgICBtX3NraXBzRHJhdyA9IGZhbHNlOworICAgIGlmICghbGF5ZXJSZW5kZXJlcigpLT5jaGVj
a1RleHR1cmVTaXplKHJlcXVpcmVkVGV4dHVyZVNpemUpKSB7CisgICAgICAgIG1fc2tpcHNEcmF3
ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIHRleHR1cmVJ
ZCA9IG1fY29udGVudHNUZXh0dXJlOworICAgIGlmICghdGV4dHVyZUlkKQorICAgICAgICB0ZXh0
dXJlSWQgPSBsYXllclJlbmRlcmVyKCktPmNyZWF0ZUxheWVyVGV4dHVyZSgpOworCiAgICAgaWYg
KHBpeGVscykKICAgICAgICAgdXBkYXRlVGV4dHVyZVJlY3QocGl4ZWxzLCBiaXRtYXBTaXplLCBy
ZXF1aXJlZFRleHR1cmVTaXplLCAgZGlydHlSZWN0LCB0ZXh0dXJlSWQpOwogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE2ICsz
NCwxOCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQSBMYXllciB0aGF0IGNvbnRhaW5zIG9ubHkgYW4gSW1h
Z2UgZWxlbWVudC4KLWNsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9t
aXVtIHsKK2NsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDb250ZW50TGF5ZXJDaHJv
bWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVt
PiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOworCisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CiAgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IHsgcmV0dXJuIG1fY29udGVudHM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZUNv
bnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCk7CisKICAgICB2b2lkIHNldENvbnRlbnRzKE5hdGl2
ZUltYWdlUHRyKTsKIAogcHJpdmF0ZToKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNjU1NzIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw5MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXVuc2lnbmVkIExheWVyQ2hyb21pdW06Om1fc2hhZGVyUHJv
Z3JhbUlkID0gMDsKK2NvbnN0IHVuc2lnbmVkIExheWVyQ2hyb21pdW06OnNfcG9zaXRpb25BdHRy
aWJMb2NhdGlvbiA9IDA7Citjb25zdCB1bnNpZ25lZCBMYXllckNocm9taXVtOjpzX3RleENvb3Jk
QXR0cmliTG9jYXRpb24gPSAxOworCitzdGF0aWMgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5
cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkKK3sKKyAgICBHTHVpbnQgc2hhZGVyID0gZ2xD
cmVhdGVTaGFkZXIodHlwZSk7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiAwOwor
ICAgIEdMQyhnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2UsIDApKTsKKyAg
ICBHTEMoZ2xDb21waWxlU2hhZGVyKHNoYWRlcikpOworICAgIEdMaW50IGNvbXBpbGVkOworICAg
IEdMQyhnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsICZjb21waWxlZCkp
OworICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAgICAgR0xDKGdsRGVsZXRlU2hhZGVyKHNoYWRl
cikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHNoYWRlcjsKK30KKwor
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoKQorICAgIDogbV9xdWFk
VmVydGljZXNWYm8oMCkKKyAgICAsIG1fcXVhZEVsZW1lbnRzVmJvKDApCisgICAgLCBtX21heFRl
eHR1cmVTaXplKDApCisgICAgLCBtX2JvcmRlclNoYWRlclByb2dyYW0oMCkKKyAgICAsIG1fYm9y
ZGVyU2hhZGVyTWF0cml4TG9jYXRpb24oLTEpCisgICAgLCBtX2JvcmRlclNoYWRlckNvbG9yTG9j
YXRpb24oLTEpCisgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQoreworICAgIC8vIFZlcnRleCBw
b3NpdGlvbnMgYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoZSA0IGNvcm5lcnMgb2YgYSAx
eDEgcXVhZC4KKyAgICBHTGZsb2F0IHZlcnRpY2VzW10gPSB7IC0wLjVmLCAgMC41ZiwgMC4wZiwg
MC4wZiwgIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtMC41ZiwgLTAuNWYsIDAu
MGYsIDAuMGYsICAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNWYsIC0wLjVm
LCAwLjBmLCAxLjBmLCAgMC4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAg
MC41ZiwgMC4wZiwgMS4wZiwgIDEuMGYgfTsKKyAgICBHTHVzaG9ydCBpbmRpY2VzW10gPSB7IDAs
IDEsIDIsIDAsIDIsIDMsIC8vIFRoZSB0d28gdHJpYW5nbGVzIHRoYXQgbWFrZSB1cCB0aGUgbGF5
ZXIgcXVhZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDN9OyAvLyBBIGxp
bmUgcGF0aCBmb3IgZHJhd2luZyB0aGUgbGF5ZXIgYm9yZGVyLgorCisgICAgR0x1aW50IHZib0lk
c1syXTsKKyAgICBHTEMoZ2xHZW5CdWZmZXJzKDIsIHZib0lkcykpOworICAgIG1fcXVhZFZlcnRp
Y2VzVmJvID0gdmJvSWRzWzBdOworICAgIG1fcXVhZEVsZW1lbnRzVmJvID0gdmJvSWRzWzFdOwor
ICAgIEdMQyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3F1YWRWZXJ0aWNlc1Zibykp
OworICAgIEdMQyhnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMp
LCB2ZXJ0aWNlcywgR0xfU1RBVElDX0RSQVcpKTsKKyAgICBHTEMoZ2xCaW5kQnVmZmVyKEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRFbGVtZW50c1ZibykpOworICAgIEdMQyhnbEJ1ZmZl
ckRhdGEoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHNpemVvZihpbmRpY2VzKSwgaW5kaWNlcywg
R0xfU1RBVElDX0RSQVcpKTsKKworICAgIC8vIEdldCB0aGUgbWF4IHRleHR1cmUgc2l6ZSBzdXBw
b3J0ZWQgYnkgdGhlIHN5c3RlbS4KKyAgICBHTEMoZ2xHZXRJbnRlZ2VydihHTF9NQVhfVEVYVFVS
RV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSkpOworCisgICAgLy8gU2hhZGVycyBmb3IgZHJhd2lu
ZyB0aGUgZGVidWcgYm9yZGVycyBhcm91bmQgdGhlIGxheWVycy4KKyAgICBjaGFyIGJvcmRlclZl
cnRleFNoYWRlclN0cmluZ1tdID0KKyAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247
ICAgXG4iCisgICAgICAgICJ1bmlmb3JtIG1hdDQgbWF0cml4OyAgICAgICAgIFxuIgorICAgICAg
ICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAq
IGFfcG9zaXRpb247IFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
biI7CisgICAgY2hhciBib3JkZXJGcmFnbWVudFNoYWRlclN0cmluZ1tdID0KKyAgICAgICAgInBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAg
ICAgICAgInVuaWZvcm0gdmVjNCBjb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBtX2JvcmRl
clNoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKGJvcmRlclZlcnRleFNoYWRlclN0
cmluZywgYm9yZGVyRnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlmICghbV9ib3JkZXJTaGFk
ZXJQcm9ncmFtKSB7CisgICAgICAgIExPR19FUlJPUigiQ29udGVudExheWVyQ2hyb21pdW06IEZh
aWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fYm9yZGVyU2hhZGVyTWF0cml4TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlv
bihtX2JvcmRlclNoYWRlclByb2dyYW0sICJtYXRyaXgiKTsKKyAgICBtX2JvcmRlclNoYWRlckNv
bG9yTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX2JvcmRlclNoYWRlclByb2dyYW0s
ICJjb2xvciIpOworICAgIEFTU0VSVChtX2JvcmRlclNoYWRlck1hdHJpeExvY2F0aW9uICE9IC0x
KTsKKyAgICBBU1NFUlQobV9ib3JkZXJTaGFkZXJDb2xvckxvY2F0aW9uICE9IC0xKTsKKworICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6
On5TaGFyZWRWYWx1ZXMoKQoreworICAgIEdMdWludCB2Ym9JZHNbMl0gPSB7IG1fcXVhZFZlcnRp
Y2VzVmJvLCBtX3F1YWRFbGVtZW50c1ZibyB9OworICAgIEdMQyhnbERlbGV0ZUJ1ZmZlcnMoMiwg
dmJvSWRzKSk7CisKKyAgICBpZiAobV9ib3JkZXJTaGFkZXJQcm9ncmFtKQorICAgICAgICBHTEMo
Z2xEZWxldGVQcm9ncmFtKG1fYm9yZGVyU2hhZGVyUHJvZ3JhbSkpOworfQorCiAKIFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpCiB7CkBAIC02MiwxMyArMTQ4LDEwIEBAIExheWVyQ2hyb21pdW06OkxheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAg
LCBtX2JhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9ib3JkZXJDb2xvcigwLCAw
LCAwLCAwKQotICAgICwgbV9sYXllclJlbmRlcmVyKDApCi0gICAgLCBtX2VkZ2VBbnRpYWxpYXNp
bmdNYXNrKDApCiAgICAgLCBtX29wYWNpdHkoMS4wKQogICAgICwgbV96UG9zaXRpb24oMC4wKQog
ICAgICwgbV9hbmNob3JQb2ludFooMCkKICAgICAsIG1fYm9yZGVyV2lkdGgoMCkKLSAgICAsIG1f
YWxsb2NhdGVkVGV4dHVyZUlkKDApCiAgICAgLCBtX2NsZWFyc0NvbnRleHQoZmFsc2UpCiAgICAg
LCBtX2RvdWJsZVNpZGVkKHRydWUpCiAgICAgLCBtX2hpZGRlbihmYWxzZSkKQEAgLTc2LDYgKzE1
OSw3IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXkKICAgICAsIG1f
b3BhcXVlKHRydWUpCiAgICAgLCBtX2dlb21ldHJ5RmxpcHBlZChmYWxzZSkKICAgICAsIG1fbmVl
ZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2UpCisgICAgLCBtX2xheWVyUmVuZGVyZXIoMCkK
IHsKIH0KIApAQCAtODcsMTAgKzE3MSw2IEBAIExheWVyQ2hyb21pdW06On5MYXllckNocm9taXVt
KCkKIAogICAgIC8vIFJlbW92ZSB0aGUgc3VwZXJsYXllciByZWZlcmVuY2UgZnJvbSBhbGwgc3Vi
bGF5ZXJzLgogICAgIHJlbW92ZUFsbFN1YmxheWVycygpOwotCi0gICAgLy8gTm90aWZ5IHRoZSBy
ZW5kZXJlciB0byBjbGVhbiB1cCB0aGUgdGV4dHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGxheWVy
LgotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZnJl
ZUxheWVyVGV4dHVyZSh0aGlzKTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllclJl
bmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCkBAIC0xMDEsMTQwICsxODEs
NDYgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheQogICAgIG1fbGF5
ZXJSZW5kZXJlciA9IHJlbmRlcmVyOwogfQogCi12b2lkIExheWVyQ2hyb21pdW06OnVwZGF0ZVRl
eHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQpCit1bnNpZ25lZCBMYXllckNocm9taXVt
OjpjcmVhdGVTaGFkZXJQcm9ncmFtKGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSwgY29u
c3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UpCiB7Ci0gICAgUmVuZGVyTGF5ZXJCYWNraW5n
KiBiYWNraW5nID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGF5ZXJCYWNraW5nKj4obV9vd25lci0+Y2xp
ZW50KCkpOwotICAgIGlmICghYmFja2luZyB8fCBiYWNraW5nLT5wYWludGluZ0dvZXNUb1dpbmRv
dygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZHJhd3NDb250ZW50KCkpOwotCi0g
ICAgdm9pZCogcGl4ZWxzID0gMDsKLSAgICBJbnRSZWN0IGRpcnR5UmVjdChtX2RpcnR5UmVjdCk7
Ci0gICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplOwotICAgIEludFNpemUgYml0bWFwU2l6
ZTsKLQotI2lmIFBMQVRGT1JNKFNLSUEpCi0gICAgY29uc3QgU2tCaXRtYXAqIHNraWFCaXRtYXAg
PSAwOwotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gY2FudmFzOwotICAgIE93blB0
cjxQbGF0Zm9ybUNvbnRleHRTa2lhPiBza2lhQ29udGV4dDsKLSAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBncmFwaGljc0NvbnRleHQ7Ci0KLSAgICByZXF1aXJlZFRleHR1cmVTaXplID0gbV9i
b3VuZHM7Ci0gICAgSW50UmVjdCBib3VuZHNSZWN0KEludFBvaW50KDAsIDApLCBtX2JvdW5kcyk7
Ci0KLSAgICAvLyBJZiB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWFsbG9jYXRlZCB0aGVuIHdl
IG11c3QgcmVkcmF3IHRoZSBlbnRpcmUKLSAgICAvLyBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCi0g
ICAgaWYgKHJlcXVpcmVkVGV4dHVyZVNpemUgIT0gbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSkKLSAg
ICAgICAgZGlydHlSZWN0ID0gYm91bmRzUmVjdDsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQ2xp
cCB0aGUgZGlydHlSZWN0IHRvIHRoZSBzaXplIG9mIHRoZSBsYXllciB0byBhdm9pZCBkcmF3aW5n
IG91dHNpZGUKLSAgICAgICAgLy8gdGhlIGJvdW5kcyBvZiB0aGUgYmFja2luZyB0ZXh0dXJlLgot
ICAgICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KGJvdW5kc1JlY3QpOworICAgIEdMdWludCB2ZXJ0
ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFNoYWRlclNvdXJj
ZSk7CisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gY3JlYXRlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgY2FudmFzLnNldChuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoZGlydHlSZWN0LndpZHRoKCks
IGRpcnR5UmVjdC5oZWlnaHQoKSwgZmFsc2UpKTsKLSAgICBza2lhQ29udGV4dC5zZXQobmV3IFBs
YXRmb3JtQ29udGV4dFNraWEoY2FudmFzLmdldCgpKSk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAg
IC8vIFRoaXMgaXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5LiBXaXRo
b3V0IGl0LAotICAgIC8vIEdESSByZW5kZXJzIHdpdGggemVybyBhbHBoYSBhbmQgdGhlIHRleHQg
YmVjb21lcyBpbnZpc2libGUuCi0gICAgLy8gVW5mb3J0dW5hdGVseSwgc2V0dGluZyB0aGlzIHRv
IHRydWUgZGlzYWJsZXMgY2xlYXJ0eXBlLgotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgdGFrZSB1
cyBkb3duIGEgdmVyeSBzbG93IHRleHQgcmVuZGVyaW5nIHBhdGg/Ci0gICAgLy8gRklYTUU6IHdo
eSBpcyB0aGlzIGlzIGEgd2luZG93cy1vbmx5IGNhbGwgPwotICAgIHNraWFDb250ZXh0LT5zZXRE
cmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKLSNlbmRpZgotCi0gICAgZ3JhcGhpY3NDb250ZXh0
LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqPihza2lhQ29udGV4dC5nZXQoKSkpKTsKLQotICAgIC8vIEJyaW5nIHRoZSBjYW52
YXMgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhaW50IHJlY3QuCi0gICAgY2Fu
dmFzLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwgc3Rh
dGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7Ci0KLSAgICBtX293bmVyLT5wYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cygqZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwotICAg
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRt
YXAoZmFsc2UpOwotICAgIHNraWFCaXRtYXAgPSAmYml0bWFwOwotICAgIEFTU0VSVChza2lhQml0
bWFwKTsKLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jaygqc2tpYUJpdG1hcCk7Ci0gICAgU2tC
aXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUJpdG1hcC0+Y29uZmlnKCk7Ci0gICAgLy8g
RklYTUU6IGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGltYWdlIGNvbmZpZ3VyYXRpb25zPwot
ICAgIGlmIChza2lhQ29uZmlnID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykgewotICAg
ICAgICBwaXhlbHMgPSBza2lhQml0bWFwLT5nZXRQaXhlbHMoKTsKLSAgICAgICAgYml0bWFwU2l6
ZSA9IEludFNpemUoc2tpYUJpdG1hcC0+d2lkdGgoKSwgc2tpYUJpdG1hcC0+aGVpZ2h0KCkpOwor
ICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVS
LCBmcmFnbWVudFNoYWRlclNvdXJjZSk7CisgICAgaWYgKCFmcmFnbWVudFNoYWRlcikgeworICAg
ICAgICBHTEMoZ2xEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKSk7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBmcmFnbWVudCBzaGFkZXIiKTsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQotI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgcmVxdWlyZWRUZXh0dXJlU2l6ZSA9IG1f
Ym91bmRzOwotICAgIEludFJlY3QgYm91bmRzUmVjdChJbnRQb2ludCgwLCAwKSwgbV9ib3VuZHMp
OwotCi0gICAgLy8gSWYgdGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgcmVhbGxvY2F0ZWQgdGhlbiB3
ZSBtdXN0IHJlZHJhdyB0aGUgZW50aXJlCi0gICAgLy8gY29udGVudHMgb2YgdGhlIGxheWVyLgot
ICAgIGlmIChyZXF1aXJlZFRleHR1cmVTaXplICE9IG1fYWxsb2NhdGVkVGV4dHVyZVNpemUpCi0g
ICAgICAgIGRpcnR5UmVjdCA9IGJvdW5kc1JlY3Q7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIENs
aXAgdGhlIGRpcnR5UmVjdCB0byB0aGUgc2l6ZSBvZiB0aGUgbGF5ZXIgdG8gYXZvaWQgZHJhd2lu
ZyBvdXRzaWRlCi0gICAgICAgIC8vIHRoZSBib3VuZHMgb2YgdGhlIGJhY2tpbmcgdGV4dHVyZS4K
LSAgICAgICAgZGlydHlSZWN0LmludGVyc2VjdChib3VuZHNSZWN0KTsKLSAgICB9Ci0KLSAgICBW
ZWN0b3I8dWludDhfdD4gdGVtcFZlY3RvcjsKLSAgICBpbnQgcm93Qnl0ZXMgPSA0ICogZGlydHlS
ZWN0LndpZHRoKCk7Ci0gICAgdGVtcFZlY3Rvci5yZXNpemUocm93Qnl0ZXMgKiBkaXJ0eVJlY3Qu
aGVpZ2h0KCkpOwotICAgIG1lbXNldCh0ZW1wVmVjdG9yLmRhdGEoKSwgMCwgdGVtcFZlY3Rvci5z
aXplKCkpOwotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UoQWRvcHRD
RiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwotICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IGNvbnRleHRDRyhBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUodGVtcFZlY3Rv
ci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3Qud2lkdGgoKSwgZGlydHlSZWN0LmhlaWdo
dCgpLCA4LCByb3dCeXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLQotICAgIEdyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dENHLmdldCgpKTsKIAotICAgIC8vIFRyYW5zbGF0
ZSB0aGUgZ3JhcGhpY3MgY29udHh0IGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBk
aXJ0eSByZWN0LgotICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLWRpcnR5UmVjdC54KCks
IC1kaXJ0eVJlY3QueSgpKTsKLQotICAgIG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRl
bnRzKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLQotICAgIHBpeGVscyA9IHRlbXBWZWN0
b3IuZGF0YSgpOwotICAgIGJpdG1hcFNpemUgPSBkaXJ0eVJlY3Quc2l6ZSgpOwotI2Vsc2UKLSNl
cnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgotI2VuZGlmCi0KLSAg
ICBpZiAocGl4ZWxzKQotICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChwaXhlbHMsIGJpdG1hcFNp
emUsIHJlcXVpcmVkVGV4dHVyZVNpemUsICBkaXJ0eVJlY3QsIHRleHR1cmVJZCk7Ci19CisgICAg
R0x1aW50IHByb2dyYW1PYmplY3QgPSBnbENyZWF0ZVByb2dyYW0oKTsKKyAgICBpZiAoIXByb2dy
YW1PYmplY3QpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBw
cm9ncmFtIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotdm9pZCBMYXllckNocm9taXVt
Ojp1cGRhdGVUZXh0dXJlUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNpemUmIGJpdG1hcFNp
emUsIGNvbnN0IEludFNpemUmIHJlcXVpcmVkVGV4dHVyZVNpemUsIGNvbnN0IEludFJlY3QmIHVw
ZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCkKLXsKLSAgICBpZiAoIXBpeGVscykKLSAgICAg
ICAgcmV0dXJuOworICAgIEdMQyhnbEF0dGFjaFNoYWRlcihwcm9ncmFtT2JqZWN0LCB2ZXJ0ZXhT
aGFkZXIpKTsKKyAgICBHTEMoZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbU9iamVjdCwgZnJhZ21lbnRT
aGFkZXIpKTsKIAotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsK
LSAgICAvLyBJZiB0aGUgdGV4dHVyZSBpZCBvciBzaXplIGNoYW5nZWQgc2luY2UgbGFzdCB0aW1l
IHRoZW4gd2UgbmVlZCB0byB0ZWxsIEdMCi0gICAgLy8gdG8gcmUtYWxsb2NhdGUgYSB0ZXh0dXJl
LgotICAgIGlmIChtX2FsbG9jYXRlZFRleHR1cmVJZCAhPSB0ZXh0dXJlSWQgfHwgcmVxdWlyZWRU
ZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXplKSB7Ci0gICAgICAgIEFTU0VSVChi
aXRtYXBTaXplID09IHJlcXVpcmVkVGV4dHVyZVNpemUpOwotICAgICAgICBnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgcmVxdWlyZWRUZXh0dXJlU2l6ZS53aWR0aCgpLCBy
ZXF1aXJlZFRleHR1cmVTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCBwaXhlbHMpOwotCi0gICAgICAgIG1fYWxsb2NhdGVkVGV4dHVyZUlkID0gdGV4dHVyZUlkOwot
ICAgICAgICBtX2FsbG9jYXRlZFRleHR1cmVTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6ZTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBBU1NFUlQodXBkYXRlUmVjdC53aWR0aCgpIDw9IG1fYWxsb2Nh
dGVkVGV4dHVyZVNpemUud2lkdGgoKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpIDw9IG1fYWxsb2Nh
dGVkVGV4dHVyZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICBBU1NFUlQodXBkYXRlUmVjdC53aWR0
aCgpID09IGJpdG1hcFNpemUud2lkdGgoKSAmJiB1cGRhdGVSZWN0LmhlaWdodCgpID09IGJpdG1h
cFNpemUuaGVpZ2h0KCkpOwotI2lmIFBMQVRGT1JNKENHKQotICAgICAgICAvLyBUaGUgb3JpZ2lu
IGlzIGF0IHRoZSBsb3dlciBsZWZ0IGluIENvcmUgR3JhcGhpY3MnIGNvb3JkaW5hdGUgc3lzdGVt
LiBXZSBuZWVkIHRvIGNvcnJlY3QgZm9yIHRoaXMgaGVyZS4KLSAgICAgICAgZ2xUZXhTdWJJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0
LngoKSwgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZS5oZWlnaHQoKSAtIHVwZGF0ZVJlY3QuaGVpZ2h0
KCkgLSB1cGRhdGVSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qu
d2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0jZWxpZiBQTEFURk9STShTS0lBKQot
ICAgICAgICBnbFRleFN1YkltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgdXBkYXRlUmVjdC54KCks
IHVwZGF0ZVJlY3QueSgpLCB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCks
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0jZWxzZQotI2Vycm9yICJOZWVk
IHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0Zm9ybS4iCi0jZW5kaWYKKyAgICAvLyBCaW5kIHRo
ZSBjb21tb24gYXR0cmliIGxvY2F0aW9ucy4KKyAgICBHTEMoZ2xCaW5kQXR0cmliTG9jYXRpb24o
cHJvZ3JhbU9iamVjdCwgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uLCAiYV9wb3NpdGlvbiIpKTsK
KyAgICBHTEMoZ2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbU9iamVjdCwgc190ZXhDb29yZEF0
dHJpYkxvY2F0aW9uLCAiYV90ZXhDb29yZCIpKTsKKworICAgIEdMQyhnbExpbmtQcm9ncmFtKHBy
b2dyYW1PYmplY3QpKTsKKyAgICBHTGludCBsaW5rZWQ7CisgICAgR0xDKGdsR2V0UHJvZ3JhbWl2
KHByb2dyYW1PYmplY3QsIEdMX0xJTktfU1RBVFVTLCAmbGlua2VkKSk7CisgICAgaWYgKCFsaW5r
ZWQpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbGluayBzaGFkZXIgcHJvZ3JhbSIp
OworICAgICAgICBHTEMoZ2xEZWxldGVQcm9ncmFtKHByb2dyYW1PYmplY3QpKTsKKyAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogCi0gICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShGbG9hdFNpemUoKSk7
Ci0gICAgbV9jb250ZW50c0RpcnR5ID0gZmFsc2U7CisgICAgR0xDKGdsRGVsZXRlU2hhZGVyKHZl
cnRleFNoYWRlcikpOworICAgIEdMQyhnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcikpOwor
ICAgIHJldHVybiBwcm9ncmFtT2JqZWN0OwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldE5l
ZWRzQ29tbWl0KCkKQEAgLTM3Nyw1ICszNjMsODYgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXkoKQogICAgIG1fY29udGVudHNEaXJ0eSA9IHRydWU7CiB9CiAKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbSkKK3sKKyAgICBmbGF0dGVuZWRbMF0gPSBtLm0xMSgpOworICAgIGZsYXR0
ZW5lZFsxXSA9IG0ubTEyKCk7CisgICAgZmxhdHRlbmVkWzJdID0gbS5tMTMoKTsKKyAgICBmbGF0
dGVuZWRbM10gPSBtLm0xNCgpOworICAgIGZsYXR0ZW5lZFs0XSA9IG0ubTIxKCk7CisgICAgZmxh
dHRlbmVkWzVdID0gbS5tMjIoKTsKKyAgICBmbGF0dGVuZWRbNl0gPSBtLm0yMygpOworICAgIGZs
YXR0ZW5lZFs3XSA9IG0ubTI0KCk7CisgICAgZmxhdHRlbmVkWzhdID0gbS5tMzEoKTsKKyAgICBm
bGF0dGVuZWRbOV0gPSBtLm0zMigpOworICAgIGZsYXR0ZW5lZFsxMF0gPSBtLm0zMygpOworICAg
IGZsYXR0ZW5lZFsxMV0gPSBtLm0zNCgpOworICAgIGZsYXR0ZW5lZFsxMl0gPSBtLm00MSgpOwor
ICAgIGZsYXR0ZW5lZFsxM10gPSBtLm00MigpOworICAgIGZsYXR0ZW5lZFsxNF0gPSBtLm00Mygp
OworICAgIGZsYXR0ZW5lZFsxNV0gPSBtLm00NCgpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06
OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25N
YXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IG9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1h
dHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbikKK3sKKyAgICBzdGF0aWMgR0xmbG9hdCBn
bE1hdHJpeFsxNl07CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBk
cmF3TWF0cml4OworCisgICAgLy8gQXBwbHkgYSBzY2FsaW5nIGZhY3RvciB0byBzaXplIHRoZSBx
dWFkIGZyb20gMXgxIHRvIGl0cyBpbnRlbmRlZCBzaXplLgorICAgIHJlbmRlck1hdHJpeC5zY2Fs
ZTNkKHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgLy8gQXBwbHkgdGhlIHByb2plY3Rpb24gbWF0
cml4IGJlZm9yZSBzZW5kaW5nIHRoZSB0cmFuc2Zvcm0gb3ZlciB0byB0aGUgc2hhZGVyLgorICAg
IHJlbmRlck1hdHJpeC5tdWx0aXBseShwcm9qZWN0aW9uTWF0cml4KTsKKworICAgIHRvR0xNYXRy
aXgoJmdsTWF0cml4WzBdLCByZW5kZXJNYXRyaXgpOworCisgICAgR0xDKGdsVW5pZm9ybU1hdHJp
eDRmdihtYXRyaXhMb2NhdGlvbiwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSkpOworCisgICAgaWYg
KGFscGhhTG9jYXRpb24gIT0gLTEpCisgICAgICAgIEdMQyhnbFVuaWZvcm0xZihhbHBoYUxvY2F0
aW9uLCBvcGFjaXR5KSk7CisKKyAgICBHTEMoZ2xEcmF3RWxlbWVudHMoR0xfVFJJQU5HTEVTLCA2
LCBHTF9VTlNJR05FRF9TSE9SVCwgMCkpOworfQorCit2b2lkIExheWVyQ2hyb21pdW06OmRyYXdE
ZWJ1Z0JvcmRlcigpCit7CisgICAgc3RhdGljIEdMZmxvYXQgZ2xNYXRyaXhbMTZdOworICAgIGlm
ICghYm9yZGVyQ29sb3IoKS5hbHBoYSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
bGF5ZXJSZW5kZXJlcigpKTsKKyAgICBjb25zdCBTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5ZXJSZW5k
ZXJlcigpLT5sYXllclNoYXJlZFZhbHVlcygpOworICAgIEFTU0VSVChzdiAmJiBzdi0+aW5pdGlh
bGl6ZWQoKSk7CisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPmJvcmRlclNoYWRl
clByb2dyYW0oKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gZHJh
d1RyYW5zZm9ybSgpOworICAgIHJlbmRlck1hdHJpeC5zY2FsZTNkKGJvdW5kcygpLndpZHRoKCks
IGJvdW5kcygpLmhlaWdodCgpLCAxKTsKKyAgICByZW5kZXJNYXRyaXgubXVsdGlwbHkobGF5ZXJS
ZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCkpOworICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4
WzBdLCByZW5kZXJNYXRyaXgpOworICAgIEdMQyhnbFVuaWZvcm1NYXRyaXg0ZnYoc3YtPmJvcmRl
clNoYWRlck1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pKTsKKworICAg
IEdMQyhnbFVuaWZvcm00Zihzdi0+Ym9yZGVyU2hhZGVyQ29sb3JMb2NhdGlvbigpLCBib3JkZXJD
b2xvcigpLnJlZCgpIC8gMjU1LjAsIGJvcmRlckNvbG9yKCkuZ3JlZW4oKSAvIDI1NS4wLCBib3Jk
ZXJDb2xvcigpLmJsdWUoKSAvIDI1NS4wLCAxKSk7CisKKyAgICBHTEMoZ2xMaW5lV2lkdGgoYm9y
ZGVyV2lkdGgoKSkpOworCisgICAgLy8gVGhlIGluZGljZXMgZm9yIHRoZSBsaW5lIGFyZSBzdG9y
ZWQgaW4gdGhlIHNhbWUgYXJyYXkgYXMgdGhlIHRyaWFuZ2xlIGluZGljZXMuCisgICAgR0xDKGds
RHJhd0VsZW1lbnRzKEdMX0xJTkVfTE9PUCwgNCwgR0xfVU5TSUdORURfU0hPUlQsICh2b2lkKiko
NiAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKSk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBMYXll
ckNocm9taXVtOjpwcmVwYXJlRm9yRHJhdyhjb25zdCBTaGFyZWRWYWx1ZXMqIHN2KQoreworICAg
IEdMQyhnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBzdi0+cXVhZFZlcnRpY2VzVmJvKCkp
KTsKKyAgICBHTEMoZ2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBzdi0+cXVh
ZEVsZW1lbnRzVmJvKCkpKTsKKyAgICBHTHVpbnQgb2Zmc2V0ID0gMDsKKyAgICBHTEMoZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKHNfcG9zaXRpb25BdHRyaWJMb2NhdGlvbiwgMywgR0xfRkxPQVQsIEdM
X0ZBTFNFLCA1ICogc2l6ZW9mKEdMZmxvYXQpLCAoR0x2b2lkKilvZmZzZXQpKTsKKyAgICBvZmZz
ZXQgKz0gMyAqIHNpemVvZihHTGZsb2F0KTsKKyAgICBHTEMoZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KHNfdGV4Q29vcmRBdHRyaWJMb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCA1ICogc2l6
ZW9mKEdMZmxvYXQpLCAoR0x2b2lkKilvZmZzZXQpKTsKKyAgICBHTEMoZ2xFbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShzX3Bvc2l0aW9uQXR0cmliTG9jYXRpb24pKTsKKyAgICBHTEMoZ2xFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShzX3RleENvb3JkQXR0cmliTG9jYXRpb24pKTsKK30KKwogfQogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2
NTU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxOSArNTUsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07
CiAKLS8vIEJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZWQgbGF5ZXJzLiBUaGUgaW1wbGVtZW50YXRp
b24gY292ZXJzIGxheWVycyB0aGF0IHJlcXVpcmUKLS8vIGEgR3JhcGhpY3NDb250ZXh0IHRvIHJl
bmRlciB0aGVpciBjb250ZW50cy4gU3BlY2lhbCBsYXllciB0eXBlcyBhcmUgZGVyaXZlZCBmcm9t
CisvLyBCYXNlIGNsYXNzIGZvciBjb21wb3NpdGVkIGxheWVycy4gU3BlY2lhbCBsYXllciB0eXBl
cyBhcmUgZGVyaXZlZCBmcm9tCiAvLyB0aGlzIGNsYXNzLgogY2xhc3MgTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBSZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKKyAgICBmcmllbmQgY2xhc3MgTGF5
ZXJSZW5kZXJlckNocm9taXVtOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVy
Q2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAKICAg
ICB+TGF5ZXJDaHJvbWl1bSgpOwogCisgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVy
KCkgY29uc3Q7CisgICAgTGF5ZXJDaHJvbWl1bSogc3VwZXJsYXllcigpIGNvbnN0OwogICAgIHZv
aWQgYWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik7CiAgICAgdm9pZCBpbnNl
cnRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+LCBzaXplX3QgaW5kZXgpOwogICAg
IHZvaWQgcmVwbGFjZVN1YmxheWVyKExheWVyQ2hyb21pdW0qIHJlZmVyZW5jZSwgUGFzc1JlZlB0
cjxMYXllckNocm9taXVtPiBuZXdMYXllcik7CiAgICAgdm9pZCByZW1vdmVGcm9tU3VwZXJsYXll
cigpOworICAgIHZvaWQgcmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgdm9pZCBzZXRTdWJsYXll
cnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+Jik7CisgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBnZXRTdWJsYXllcnMoKSBjb25zdCB7IHJldHVy
biBtX3N1YmxheWVyczsgfQogCiAgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7IHNldE5lZWRz
Q29tbWl0KCk7IH0KICAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1cm4g
bV9hbmNob3JQb2ludDsgfQpAQCAtOTMsOSArOTgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRE
b3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7IG1fZG91YmxlU2lkZWQgPSBkb3VibGVTaWRl
ZDsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgZG91YmxlU2lkZWQoKSBjb25zdCB7IHJl
dHVybiBtX2RvdWJsZVNpZGVkOyB9CiAKLSAgICB2b2lkIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNr
KHVpbnQzMl90IG1hc2spIHsgbV9lZGdlQW50aWFsaWFzaW5nTWFzayA9IG1hc2s7IHNldE5lZWRz
Q29tbWl0KCk7IH0KLSAgICB1aW50MzJfdCBlZGdlQW50aWFsaWFzaW5nTWFzaygpIGNvbnN0IHsg
cmV0dXJuIG1fZWRnZUFudGlhbGlhc2luZ01hc2s7IH0KLQogICAgIHZvaWQgc2V0RnJhbWUoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgRmxvYXRSZWN0IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZTsgfQogCkBAIC0xMjAsNzYgKzEyMiw5OSBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGFxdWUo
KSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogCiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247ICBzZXROZWVk
c0NvbW1pdCgpOyB9Ci0KICAgICBGbG9hdFBvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9wb3NpdGlvbjsgfQogCiAgICAgdm9pZCBzZXRaUG9zaXRpb24oZmxvYXQgelBvc2l0aW9uKSB7
IG1felBvc2l0aW9uID0gelBvc2l0aW9uOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgZmxvYXQg
elBvc2l0aW9uKCkgY29uc3QgeyAgcmV0dXJuIG1felBvc2l0aW9uOyB9CiAKLSAgICBjb25zdCBM
YXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdDsKLQotICAgIHZvaWQgcmVtb3ZlQWxsU3Vi
bGF5ZXJzKCk7Ci0KLSAgICB2b2lkIHNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4mKTsKLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgZ2V0U3VibGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllcnM7IH0KLQogICAg
IHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSkgeyBtX3N1YmxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1p
dCgpOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQogCi0gICAgTGF5ZXJDaHJv
bWl1bSogc3VwZXJsYXllcigpIGNvbnN0OwotCi0KICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJhbnNm
b3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAKKyAgICAvLyBGSVhN
RTogVGhpcyBzZXR0aW5nIGlzIGN1cnJlbnRseSBpZ25vcmVkLgogICAgIHZvaWQgc2V0R2VvbWV0
cnlGbGlwcGVkKGJvb2wgZmxpcHBlZCkgeyBtX2dlb21ldHJ5RmxpcHBlZCA9IGZsaXBwZWQ7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGdlb21ldHJ5RmxpcHBlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZ2VvbWV0cnlGbGlwcGVkOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVy
ZUNvbnRlbnRzKHVuc2lnbmVkIHRleHR1cmVJZCk7Ci0gICAgYm9vbCBjb250ZW50c0RpcnR5KCkg
eyByZXR1cm4gbV9jb250ZW50c0RpcnR5OyB9Ci0KICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX2RyYXdUcmFuc2Zvcm0g
PSB0cmFuc2Zvcm07IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogCiAgICAgdm9pZCBzZXRE
cmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CiAg
ICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAK
LSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gbV9vd25lciAmJiBtX293
bmVyLT5kcmF3c0NvbnRlbnQoKTsgfQotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGxheWVy
IGhhcyBpdHMgb3duIEdMIHRleHR1cmUgYW5kIGZhbHNlIGlmIHRoZSB0ZXh0dXJlCi0gICAgLy8g
bmVlZHMgdG8gYmUgYWxsb2NhdGVkIGJ5IHRoZSBjb21wb3NpdG9yLgotICAgIHZpcnR1YWwgYm9v
bCBvd25zVGV4dHVyZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBp
ZCBvZiB0aGUgR0wgdGV4dHVyZSB0aGF0IHN0b3JlcyB0aGUgY29udGVudHMgb2YgdGhpcyBsYXll
ci4KLSAgICAvLyBEZXJpdmVkIGxheWVyIGNsYXNzZXMgdGhhdCBvd24gdGhlaXIgb3duIHRleHR1
cmVzIHNob3VsZCBvdmVyd3JpdGUgdGhpcyBtZXRob2QuCi0gICAgdmlydHVhbCB1bnNpZ25lZCB0
ZXh0dXJlSWQoKSB7IHJldHVybiBtX2FsbG9jYXRlZFRleHR1cmVJZDsgfQotCiAgICAgYm9vbCBw
cmVzZXJ2ZXMzRCgpIHsgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+cHJlc2VydmVzM0QoKTsg
fQogCiAgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwog
Ci0gICAgc3RhdGljIHZvaWQgc2V0U2hhZGVyUHJvZ3JhbUlkKHVuc2lnbmVkIHNoYWRlclByb2dy
YW1JZCkgeyBtX3NoYWRlclByb2dyYW1JZCA9IHNoYWRlclByb2dyYW1JZDsgfQotICAgIHZpcnR1
YWwgdW5zaWduZWQgc2hhZGVyUHJvZ3JhbUlkKCkgeyByZXR1cm4gbV9zaGFkZXJQcm9ncmFtSWQ7
IH0KLQogICAgIHZvaWQgc2V0T3duZXIoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikgeyBt
X293bmVyID0gb3duZXI7IH0KIAorICAgIGJvb2wgY29udGVudHNEaXJ0eSgpIHsgcmV0dXJuIG1f
Y29udGVudHNEaXJ0eTsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyB0eXBpY2FsbHkgbmVlZCB0
byBiZSBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGNsYXNzZXMuCisgICAgdmlydHVhbCBib29sIGRy
YXdzQ29udGVudCgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNv
bnRlbnRzKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCkgeyB9OworCisgICAgdm9pZCBk
cmF3RGVidWdCb3JkZXIoKTsKKworICAgIC8vIFN0b3JlcyB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVk
IGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgdGhhdCBhcmUKKyAgICAvLyBhc3NvY2lh
dGVkIHdpdGggdGhlIHNhbWUgTGF5ZXJSZW5kZXJlckNocm9taXVtIChhbmQgaGVuY2UgdGhlIHNh
bWUgR0wKKyAgICAvLyBjb250ZXh0KS4KKyAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgeworICAgIHB1
YmxpYzoKKyAgICAgICAgU2hhcmVkVmFsdWVzKCk7CisgICAgICAgIH5TaGFyZWRWYWx1ZXMoKTsK
KworICAgICAgICB1bnNpZ25lZCBxdWFkVmVydGljZXNWYm8oKSBjb25zdCB7IHJldHVybiBtX3F1
YWRWZXJ0aWNlc1ZibzsgfQorICAgICAgICB1bnNpZ25lZCBxdWFkRWxlbWVudHNWYm8oKSBjb25z
dCB7IHJldHVybiBtX3F1YWRFbGVtZW50c1ZibzsgfQorICAgICAgICBpbnQgbWF4VGV4dHVyZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX21heFRleHR1cmVTaXplOyB9CisgICAgICAgIHVuc2lnbmVk
IGJvcmRlclNoYWRlclByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclNoYWRlclByb2dy
YW07IH0KKyAgICAgICAgaW50IGJvcmRlclNoYWRlck1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9ib3JkZXJTaGFkZXJNYXRyaXhMb2NhdGlvbjsgfQorICAgICAgICBpbnQgYm9yZGVy
U2hhZGVyQ29sb3JMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyU2hhZGVyQ29sb3JM
b2NhdGlvbjsgfQorICAgICAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9p
bml0aWFsaXplZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgbV9xdWFkVmVy
dGljZXNWYm87CisgICAgICAgIHVuc2lnbmVkIG1fcXVhZEVsZW1lbnRzVmJvOworICAgICAgICBp
bnQgbV9tYXhUZXh0dXJlU2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbV9ib3JkZXJTaGFkZXJQcm9n
cmFtOworICAgICAgICBpbnQgbV9ib3JkZXJTaGFkZXJNYXRyaXhMb2NhdGlvbjsKKyAgICAgICAg
aW50IG1fYm9yZGVyU2hhZGVyQ29sb3JMb2NhdGlvbjsKKyAgICAgICAgYm9vbCBtX2luaXRpYWxp
emVkOworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlRm9yRHJhdyhjb25zdCBTaGFy
ZWRWYWx1ZXMqKTsKKwogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogbV9v
d25lcjsKICAgICBMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwot
ICAgIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiBi
aXRtYXBTaXplLCBjb25zdCBJbnRTaXplJiByZXF1aXJlZFRleHR1cmVTaXplLCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCk7CisKKyAgICBMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXI7
IH0KKworICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBs
YXllck1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKKworICAgIHN0
YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OworCisgICAgc3RhdGljIHVuc2lnbmVkIGNyZWF0ZVNoYWRlclByb2dyYW0oY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7CiAK
ICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEZsb2F0UmVjdCBtX2RpcnR5UmVjdDsKICAgICBi
b29sIG1fY29udGVudHNEaXJ0eTsKIAorICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNoYXJlIHRo
ZSBzYW1lIGF0dHJpYnV0ZSBsb2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25zCisgICAg
Ly8gYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBzaGFkZXJz
IHdpdGhvdXQgcmViaW5kaW5nIGF0dHJpYnV0ZQorICAgIC8vIGFycmF5cy4KKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9jYXRpb247CisKIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXROZWVkc0NvbW1pdCgpOwogCiAgICAgdm9pZCBzZXRTdXBlcmxheWVyKExheWVyQ2hyb21p
dW0qIHN1cGVybGF5ZXIpIHsgbV9zdXBlcmxheWVyID0gc3VwZXJsYXllcjsgfQogCi0gICAgdm9p
ZCBwYWludE1lKCk7Ci0KICAgICBzaXplX3QgbnVtU3VibGF5ZXJzKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX3N1YmxheWVycy5zaXplKCk7CkBAIC0yMDQsMzUgKzIyOSwxNyBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX3N1YmxheWVyczsK
ICAgICBMYXllckNocm9taXVtKiBtX3N1cGVybGF5ZXI7CiAKKyAgICAvLyBMYXllciBwcm9wZXJ0
aWVzLgogICAgIEludFNpemUgbV9iYWNraW5nU3RvcmVTaXplOwogICAgIEZsb2F0UG9pbnQgbV9w
b3NpdGlvbjsKICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CiAgICAgQ29sb3IgbV9iYWNr
Z3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9ib3JkZXJDb2xvcjsKLQotICAgIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVyOwotCi0gICAgRmxvYXRSZWN0IG1fZnJhbWU7Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
ZHJhd1RyYW5zZm9ybTsKLQotICAgIHVpbnQzMl90IG1fZWRnZUFudGlhbGlhc2luZ01hc2s7CiAg
ICAgZmxvYXQgbV9vcGFjaXR5OwogICAgIGZsb2F0IG1felBvc2l0aW9uOwogICAgIGZsb2F0IG1f
YW5jaG9yUG9pbnRaOwogICAgIGZsb2F0IG1fYm9yZGVyV2lkdGg7Ci0KICAgICBmbG9hdCBtX2Ry
YXdPcGFjaXR5OwotCi0gICAgdW5zaWduZWQgbV9hbGxvY2F0ZWRUZXh0dXJlSWQ7Ci0gICAgSW50
U2l6ZSBtX2FsbG9jYXRlZFRleHR1cmVTaXplOwotCi0gICAgLy8gVGhlIHNoYWRlciBwcm9ncmFt
IHVzZWQgYnkgYWxsIGxheWVycyBvZiB0aGlzIHR5cGUgaXMgdGhlIHNhbWUuCi0gICAgLy8gVGhp
cyBzdGF0aWMgY2FuIGJlIHNoYWRvd2VkIGJ5IGRlcml2ZWQgY2xhc3NlcyB0byB1c2UgYSBzcGVj
aWFsIHNoYWRlci4KLSAgICBzdGF0aWMgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtSWQ7Ci0KICAg
ICBib29sIG1fY2xlYXJzQ29udGV4dDsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7CiAgICAgYm9v
bCBtX2hpZGRlbjsKQEAgLTI0MSw2ICsyNDgsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZ2Vv
bWV0cnlGbGlwcGVkOwogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZTsKIAor
ICAgIC8vIFBvaW50cyB0byB0aGUgbGF5ZXIgcmVuZGVyZXIgdGhhdCB1cGRhdGVzIGFuZCBkcmF3
cyB0aGlzIGxheWVyLgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRlcmVy
OworCisgICAgRmxvYXRSZWN0IG1fZnJhbWU7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90
cmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CisKICAgICBTdHJpbmcg
bV9uYW1lOwogfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNjU1
NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICszNSwxMCBAQAogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR0xFUzJD
b250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgogI2lmIFBMQVRG
T1JNKFNLSUEpCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0U2tpYS5oIgpAQCAtNTAsMTAxICs1MCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotI2lmbmRlZiBOREVCVUcKLXN0YXRpYyBXVEZMb2dDaGFubmVsIExvZ0xheWVyUmVuZGVy
ZXIgPSB7IDB4MDAwMDAwMDAsICJMYXllclJlbmRlcmVyIiwgV1RGTG9nQ2hhbm5lbE9uIH07Ci0j
ZW5kaWYKLQotc3RhdGljIHZvaWQgY2hlY2tHTEVycm9yKCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgR0xlbnVtIGVycm9yID0gZ2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvcikKLSAgICAgICAg
TE9HX0VSUk9SKCJHTCBFcnJvcjogJWQgIiAsIGVycm9yKTsKLSNlbmRpZgotfQotCi1zdGF0aWMg
R0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSkK
LXsKLSAgICBHTHVpbnQgc2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlwZSk7Ci0gICAgaWYgKCFz
aGFkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwg
JnNoYWRlclNvdXJjZSwgMCk7Ci0gICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgR0xp
bnQgY29tcGlsZWQ7Ci0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVT
LCAmY29tcGlsZWQpOwotICAgIGlmICghY29tcGlsZWQpIHsKLSAgICAgICAgZ2xEZWxldGVTaGFk
ZXIoc2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBzaGFkZXI7
Ci19Ci0KLXN0YXRpYyBHTHVpbnQgbG9hZFNoYWRlclByb2dyYW0oY29uc3QgY2hhciogdmVydGV4
U2hhZGVyU291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSkKLXsKLSAgICBH
THVpbnQgdmVydGV4U2hhZGVyOwotICAgIEdMdWludCBmcmFnbWVudFNoYWRlcjsKLSAgICBHTHVp
bnQgcHJvZ3JhbU9iamVjdDsKLSAgICBHTGludCBsaW5rZWQ7Ci0gICAgdmVydGV4U2hhZGVyID0g
bG9hZFNoYWRlcihHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwotICAgIGlm
ICghdmVydGV4U2hhZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBmcmFnbWVudFNoYWRlciA9
IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7Ci0g
ICAgaWYgKCFmcmFnbWVudFNoYWRlcikgewotICAgICAgICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhT
aGFkZXIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcHJvZ3JhbU9iamVjdCA9IGds
Q3JlYXRlUHJvZ3JhbSgpOwotICAgIGlmICghcHJvZ3JhbU9iamVjdCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbU9iamVjdCwgdmVydGV4U2hhZGVyKTsKLSAg
ICBnbEF0dGFjaFNoYWRlcihwcm9ncmFtT2JqZWN0LCBmcmFnbWVudFNoYWRlcik7Ci0gICAgZ2xM
aW5rUHJvZ3JhbShwcm9ncmFtT2JqZWN0KTsKLSAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtT2Jq
ZWN0LCBHTF9MSU5LX1NUQVRVUywgJmxpbmtlZCk7Ci0gICAgaWYgKCFsaW5rZWQpIHsKLSAgICAg
ICAgZ2xEZWxldGVQcm9ncmFtKHByb2dyYW1PYmplY3QpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgZ2xEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBnbERlbGV0ZVNoYWRl
cihmcmFnbWVudFNoYWRlcik7Ci0gICAgcmV0dXJuIHByb2dyYW1PYmplY3Q7Ci19Ci0KLWJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclNoYWRlcihTaGFkZXJQcm9ncmFtVHlw
ZSB0eXBlLCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZGVyU291cmNlKQotewotICAgIHVuc2lnbmVkIHByb2dyYW1JZCA9IGxvYWRTaGFkZXJQ
cm9ncmFtKHZlcnRleFNoYWRlclNvdXJjZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwotICAgIEFT
U0VSVChwcm9ncmFtSWQpOwotCi0gICAgU2hhZGVyUHJvZ3JhbSogcHJvZ3JhbSA9ICZtX3NoYWRl
clByb2dyYW1zW3R5cGVdOwotCi0gICAgcHJvZ3JhbS0+bV9zaGFkZXJQcm9ncmFtSWQgPSBwcm9n
cmFtSWQ7Ci0gICAgcHJvZ3JhbS0+bV9zYW1wbGVyTG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtSWQsICJzX3RleHR1cmUiKTsKLSAgICBwcm9ncmFtLT5tX21hdHJpeExvY2F0
aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlkLCAibWF0cml4Iik7Ci0gICAgcHJv
Z3JhbS0+bV9hbHBoYUxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbUlkLCAi
YWxwaGEiKTsKLQotICAgIHJldHVybiBwcm9ncmFtSWQ7Ci19Ci0KLQotc3RhdGljIHZvaWQgdG9H
TE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkK
LXsKLSAgICBmbGF0dGVuZWRbMF0gPSBtLm0xMSgpOwotICAgIGZsYXR0ZW5lZFsxXSA9IG0ubTEy
KCk7Ci0gICAgZmxhdHRlbmVkWzJdID0gbS5tMTMoKTsKLSAgICBmbGF0dGVuZWRbM10gPSBtLm0x
NCgpOwotICAgIGZsYXR0ZW5lZFs0XSA9IG0ubTIxKCk7Ci0gICAgZmxhdHRlbmVkWzVdID0gbS5t
MjIoKTsKLSAgICBmbGF0dGVuZWRbNl0gPSBtLm0yMygpOwotICAgIGZsYXR0ZW5lZFs3XSA9IG0u
bTI0KCk7Ci0gICAgZmxhdHRlbmVkWzhdID0gbS5tMzEoKTsKLSAgICBmbGF0dGVuZWRbOV0gPSBt
Lm0zMigpOwotICAgIGZsYXR0ZW5lZFsxMF0gPSBtLm0zMygpOwotICAgIGZsYXR0ZW5lZFsxMV0g
PSBtLm0zNCgpOwotICAgIGZsYXR0ZW5lZFsxMl0gPSBtLm00MSgpOwotICAgIGZsYXR0ZW5lZFsx
M10gPSBtLm00MigpOwotICAgIGZsYXR0ZW5lZFsxNF0gPSBtLm00MygpOwotICAgIGZsYXR0ZW5l
ZFsxNV0gPSBtLm00NCgpOwotfQotCiBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9N
YXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wLCBm
bG9hdCBuZWFyWiwgZmxvYXQgZmFyWikKIHsKICAgICBmbG9hdCBkZWx0YVggPSByaWdodCAtIGxl
ZnQ7CkBAIC0xNjIsMjEgKzY3LDYgQEAgc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhv
TWF0cml4KAogICAgIHJldHVybiBvcnRobzsKIH0KIAotLy8gQ3JlYXRlcyBhIEdMIHRleHR1cmUg
b2JqZWN0IHRvIGJlIHVzZWQgZm9yIHRyYW5zZmVyaW5nIHRoZSBsYXllcidzIGJpdG1hcCBpbnRv
Lgotc3RhdGljIEdMdWludCBjcmVhdGVMYXllclRleHR1cmUoKQotewotICAgIEdMdWludCB0ZXh0
dXJlSWQgPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmVJZCk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIC8vIERvIGJhc2ljIGxpbmVh
ciBmaWx0ZXJpbmcgb24gcmVzaXplLgotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAv
LyBOUE9UIHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMg
c2V0IHRvIEdMX0NMQU1QX1RPX0VER0UuCi0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
OwotICAgIHJldHVybiB0ZXh0dXJlSWQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJl
TGF5ZXJaKGNvbnN0IExheWVyQ2hyb21pdW0qIGEsIGNvbnN0IExheWVyQ2hyb21pdW0qIGIpCiB7
CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybUEgPSBhLT5kcmF3VHJh
bnNmb3JtKCk7CkBAIC0xODUsNTEgKzc1LDM1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJl
TGF5ZXJaKGNvbnN0IEwKICAgICByZXR1cm4gdHJhbnNmb3JtQS5tNDMoKSA8IHRyYW5zZm9ybUIu
bTQzKCk7CiB9CiAKLVNoYWRlclByb2dyYW06OlNoYWRlclByb2dyYW0oKQotICAgIDogbV9zaGFk
ZXJQcm9ncmFtSWQoMCkKLSAgICAsIG1fc2FtcGxlckxvY2F0aW9uKC0xKQotICAgICwgbV9tYXRy
aXhMb2NhdGlvbigtMSkKLSAgICAsIG1fYWxwaGFMb2NhdGlvbigtMSkKLXsKLX0KLQogUGFzc093
blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRl
KFBhc3NPd25QdHI8R0xFUzJDb250ZXh0PiBnbGVzMkNvbnRleHQpCiB7CiAgICAgcmV0dXJuIG5l
dyBMYXllclJlbmRlcmVyQ2hyb21pdW0oZ2xlczJDb250ZXh0KTsKIH0KIAogTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc093blB0cjxHTEVTMkNvbnRleHQ+
IGdsZXMyQ29udGV4dCkKLSAgICA6IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoKDApCisgICAgOiBt
X3Jvb3RMYXllclRleHR1cmVJZCgwKQorICAgICwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgoMCkK
ICAgICAsIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCgwKQotICAgICwgbV9wb3NpdGlvbkxvY2F0
aW9uKDApCi0gICAgLCBtX3RleENvb3JkTG9jYXRpb24oMSkKKyAgICAsIG1fc2Nyb2xsU2hhZGVy
UHJvZ3JhbSgwKQogICAgICwgbV9yb290TGF5ZXIoMCkKICAgICAsIG1fbmVlZHNEaXNwbGF5KGZh
bHNlKQogICAgICwgbV9zY3JvbGxQb3NpdGlvbihJbnRQb2ludCgtMSwgLTEpKQotICAgICwgbV9j
dXJyZW50U2hhZGVyUHJvZ3JhbVR5cGUoTnVtU2hhZGVyUHJvZ3JhbVR5cGVzKQorICAgICwgbV9j
dXJyZW50U2hhZGVyKDApCiAgICAgLCBtX2dsZXMyQ29udGV4dChnbGVzMkNvbnRleHQpCiB7Ci0g
ICAgbV9xdWFkVmJvSWRzW1ZlcnRpY2VzXSA9IG1fcXVhZFZib0lkc1tMYXllckVsZW1lbnRzXSA9
IDA7Ci0gICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gKG1fZ2xlczJDb250ZXh0ICYmIGluaXRp
YWxpemVTaGFyZWRHTE9iamVjdHMoKSk7CisgICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gKG1f
Z2xlczJDb250ZXh0ICYmIGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkpOwogfQogCiBMYXllclJl
bmRlcmVyQ2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0oKQogewotICAgIGlmIChtX2hh
cmR3YXJlQ29tcG9zaXRpbmcpIHsKLSAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
ICAgIGdsRGVsZXRlQnVmZmVycygzLCBtX3F1YWRWYm9JZHMpOwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgTnVtU2hhZGVyUHJvZ3JhbVR5cGVzOyBpKyspIHsKLSAgICAgICAgICAgIGlm
IChtX3NoYWRlclByb2dyYW1zW2ldLm1fc2hhZGVyUHJvZ3JhbUlkKQotICAgICAgICAgICAgICAg
IGdsRGVsZXRlUHJvZ3JhbShtX3NoYWRlclByb2dyYW1zW2ldLm1fc2hhZGVyUHJvZ3JhbUlkKTsK
LSAgICAgICAgfQotICAgIH0KKyAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOworfQogCi0gICAg
Ly8gRnJlZSB1cCBhbGwgR0wgdGV4dHVyZXMuCi0gICAgZm9yIChUZXh0dXJlSWRNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3RleHR1cmVJZE1hcC5iZWdpbigpOyBpdGVyICE9IG1fdGV4dHVyZUlkTWFw
LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmKGl0ZXItPnNl
Y29uZCkpOwotICAgICAgICBpdGVyLT5maXJzdC0+c2V0TGF5ZXJSZW5kZXJlcigwKTsKLSAgICB9
Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwoY29uc3QgY2hhciogY29t
bWFuZCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpCit7CisgICAgR0xlbnVtIGVycm9yID0g
Z2xHZXRFcnJvcigpOworICAgIGlmIChlcnJvciAhPSBHTF9OT19FUlJPUikKKyAgICAgICAgTE9H
X0VSUk9SKCJHTCBjb21tYW5kIGZhaWxlZDogRmlsZTogJXNcblx0TGluZSAlZFxuXHRjb21tYW5k
OiAlcywgZXJyb3IgJXhcbiIsIGZpbGUsIGxpbmUsIGNvbW1hbmQsIGVycm9yKTsKIH0KIAogLy8g
Q3JlYXRlcyBhIGNhbnZhcyBhbmQgYW4gYXNzb2NpYXRlZCBncmFwaGljcyBjb250ZXh0IHRoYXQg
dGhlIHJvb3QgbGF5ZXIgd2lsbApAQCAtMjY4LDQzICsxNDIsMTQgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnNldFJvb3RMYXllcgogICAgIG1fcm9vdExheWVyQ2FudmFzU2l6ZSA9IHNp
emU7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTaGFkZXJQcm9ncmFtKFNo
YWRlclByb2dyYW1UeXBlIHByb2dyYW1UeXBlKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVzZVNoYWRlcih1bnNpZ25lZCBwcm9ncmFtSWQpCiB7Ci0gICAgaWYgKHByb2dyYW1UeXBlICE9
IG1fY3VycmVudFNoYWRlclByb2dyYW1UeXBlKSB7Ci0gICAgICAgIFNoYWRlclByb2dyYW0qIHBy
b2dyYW0gPSAmbV9zaGFkZXJQcm9ncmFtc1twcm9ncmFtVHlwZV07Ci0gICAgICAgIGdsVXNlUHJv
Z3JhbShwcm9ncmFtLT5tX3NoYWRlclByb2dyYW1JZCk7Ci0gICAgICAgIG1fY3VycmVudFNoYWRl
clByb2dyYW1UeXBlID0gcHJvZ3JhbVR5cGU7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSB1bmlmb3Jt
IGxvY2F0aW9ucyBtYXRjaGluZyB0aGUgcHJvZ3JhbS4KLSAgICAgICAgbV9zYW1wbGVyTG9jYXRp
b24gPSBwcm9ncmFtLT5tX3NhbXBsZXJMb2NhdGlvbjsKLSAgICAgICAgbV9tYXRyaXhMb2NhdGlv
biA9IHByb2dyYW0tPm1fbWF0cml4TG9jYXRpb247Ci0gICAgICAgIG1fYWxwaGFMb2NhdGlvbiA9
IHByb2dyYW0tPm1fYWxwaGFMb2NhdGlvbjsKKyAgICBpZiAocHJvZ3JhbUlkICE9IG1fY3VycmVu
dFNoYWRlcikgeworICAgICAgICBHTEMoZ2xVc2VQcm9ncmFtKHByb2dyYW1JZCkpOworICAgICAg
ICBtX2N1cnJlbnRTaGFkZXIgPSBwcm9ncmFtSWQ7CiAgICAgfQogfQogCi12b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5KQotewot
ICAgIHN0YXRpYyBHTGZsb2F0IGdsTWF0cml4WzE2XTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHJlbmRlck1hdHJpeCA9IG1hdHJpeDsKLQotICAgIC8vIEFwcGx5IGEgc2NhbGluZyBmYWN0
b3IgdG8gc2l6ZSB0aGUgcXVhZCBmcm9tIDF4MSB0byBpdHMgaW50ZW5kZWQgc2l6ZS4KLSAgICBy
ZW5kZXJNYXRyaXguc2NhbGUzZCh3aWR0aCwgaGVpZ2h0LCAxKTsKLQotICAgIC8vIEFwcGx5IHRo
ZSBwcm9qZWN0aW9uIG1hdHJpeCBiZWZvcmUgc2VuZGluZyB0aGUgdHJhbnNmb3JtIG92ZXIgdG8g
dGhlIHNoYWRlci4KLSAgICByZW5kZXJNYXRyaXgubXVsdGlwbHkobV9wcm9qZWN0aW9uTWF0cml4
KTsKLQotICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCByZW5kZXJNYXRyaXgpOwotCi0gICAg
Z2xVbmlmb3JtTWF0cml4NGZ2KG1fbWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhb
MF0pOwotCi0gICAgaWYgKG1fYWxwaGFMb2NhdGlvbiAhPSAtMSkKLSAgICAgICAgZ2xVbmlmb3Jt
MWYobV9hbHBoYUxvY2F0aW9uLCBvcGFjaXR5KTsKLQotICAgIGdsRHJhd0VsZW1lbnRzKEdMX1RS
SUFOR0xFUywgNiwgR0xfVU5TSUdORURfU0hPUlQsIDApOwotfQotCi0KIC8vIFVwZGF0ZXMgdGhl
IGNvbnRlbnRzIG9mIHRoZSByb290IGxheWVyIHRleHR1cmUgdGhhdCBmYWxsIGluc2lkZSB0aGUg
dXBkYXRlUmVjdAogLy8gYW5kIHJlLWNvbXBvc2l0cyBhbGwgc3VibGF5ZXJzLgogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwg
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsCkBAIC0zMTUsMTcgKzE2MCwxMyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjCiAgICAgaWYgKCFtX3Jvb3RMYXllcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgdGhlIHNpemUgb2YgdGhlIHZpc2libGUgYXJl
YSBoYXMgY2hhbmdlZCB0aGVuIGFsbG9jYXRlIGEgbmV3IHRleHR1cmUKLSAgICAvLyB0byBzdG9y
ZSB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgbGF5ZXIgYW5kIGFkanVzdCB0aGUgcHJvamVjdGlv
biBtYXRyaXgKLSAgICAvLyBhbmQgdmlld3BvcnQuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAKLSAgICBjaGVja0dMRXJyb3IoKTsKLQotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpOwotCi0gICAgY2hlY2tHTEVycm9yKCk7CisgICAgR0xD
KGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKIAor
ICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxlIGFyZWEgaGFzIGNoYW5nZWQgdGhlbiBh
bGxvY2F0ZSBhIG5ldyB0ZXh0dXJlCisgICAgLy8gdG8gc3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRo
ZSByb290IGxheWVyIGFuZCBhZGp1c3QgdGhlIHByb2plY3Rpb24gbWF0cml4CisgICAgLy8gYW5k
IHZpZXdwb3J0LgogICAgIGludCB2aXNpYmxlUmVjdFdpZHRoID0gdmlzaWJsZVJlY3Qud2lkdGgo
KTsKICAgICBpbnQgdmlzaWJsZVJlY3RIZWlnaHQgPSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKICAg
ICBpZiAodmlzaWJsZVJlY3RXaWR0aCAhPSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCB8fCB2aXNp
YmxlUmVjdEhlaWdodCAhPSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQpIHsKQEAgLTMzMywzOCAr
MTc0LDE4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGMKICAgICAg
ICAgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CiAKICAg
ICAgICAgbV9wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoMCwgdmlzaWJsZVJlY3RXaWR0
aCwgdmlzaWJsZVJlY3RIZWlnaHQsIDAsIC0xMDAwLCAxMDAwKTsKLSAgICAgICAgZ2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoLCBt
X3Jvb3RMYXllclRleHR1cmVIZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDAp
OwotCi0gICAgICAgIGNoZWNrR0xFcnJvcigpOworICAgICAgICBHTEMoZ2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoLCBtX3Jvb3RM
YXllclRleHR1cmVIZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApKTsKICAg
ICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBh
cmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCi0gICAgZ2xWaWV3cG9ydCgwLCAwLCB2aXNp
YmxlUmVjdFdpZHRoLCB2aXNpYmxlUmVjdEhlaWdodCk7CisgICAgR0xDKGdsVmlld3BvcnQoMCwg
MCwgdmlzaWJsZVJlY3RXaWR0aCwgdmlzaWJsZVJlY3RIZWlnaHQpKTsKIAotICAgIGNoZWNrR0xF
cnJvcigpOworICAgIC8vIEJpbmQgdGhlIGNvbW1vbiB2ZXJ0ZXggYXR0cmlidXRlcyB1c2VkIGZv
ciBkcmF3aW5nIGFsbCB0aGUgbGF5ZXJzLgorICAgIExheWVyQ2hyb21pdW06OnByZXBhcmVGb3JE
cmF3KGxheWVyU2hhcmVkVmFsdWVzKCkpOwogCi0gICAgLy8gVGhlIGxheWVyLCBzY3JvbGwgYW5k
IGRlYnVnIGJvcmRlciBzaGFkZXJzIGFsbCB1c2UgdGhlIHNhbWUgdmVydGV4IGF0dHJpYnV0ZXMK
LSAgICAvLyBzbyB3ZSBjYW4gYmluZCB0aGVtIG9ubHkgb25jZS4KLSAgICBnbEJpbmRCdWZmZXIo
R0xfQVJSQVlfQlVGRkVSLCBtX3F1YWRWYm9JZHNbVmVydGljZXNdKTsKLSAgICBjaGVja0dMRXJy
b3IoKTsKLSAgICBnbEJpbmRCdWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1fcXVhZFZi
b0lkc1tMYXllckVsZW1lbnRzXSk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Ci0gICAgR0x1aW50IG9m
ZnNldCA9IDA7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwg
MywgR0xfRkxPQVQsIEdMX0ZBTFNFLCA1ICogc2l6ZW9mKEdMZmxvYXQpLCAoR0x2b2lkKikob2Zm
c2V0KSk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Ci0gICAgb2Zmc2V0ICs9IDMgKiBzaXplb2YoR0xm
bG9hdCk7Ci0gICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4Q29vcmRMb2NhdGlvbiwgMiwg
R0xfRkxPQVQsIEdMX0ZBTFNFLCA1ICogc2l6ZW9mKEdMZmxvYXQpLCAoR0x2b2lkKikob2Zmc2V0
KSk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Ci0gICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSht
X3Bvc2l0aW9uTG9jYXRpb24pOwotICAgIGNoZWNrR0xFcnJvcigpOwotICAgIGdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV90ZXhDb29yZExvY2F0aW9uKTsKLSAgICBjaGVja0dMRXJyb3IoKTsK
LSAgICBnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwotICAgIGNoZWNrR0xFcnJvcigpOwot
ICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKLSAgICBn
bERpc2FibGUoR0xfQ1VMTF9GQUNFKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKKyAgICBHTEMoZ2xE
aXNhYmxlKEdMX0RFUFRIX1RFU1QpKTsKKyAgICBHTEMoZ2xEaXNhYmxlKEdMX0NVTExfRkFDRSkp
OworICAgIEdMQyhnbERlcHRoRnVuYyhHTF9MRVFVQUwpKTsKIAogICAgIGlmIChtX3Njcm9sbFBv
c2l0aW9uID09IEludFBvaW50KC0xLCAtMSkpCiAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBz
Y3JvbGxQb3NpdGlvbjsKQEAgLTM5NCwxNyArMjE1LDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzKGMKICAgICAgICAgICAgIChpbnQpZmxvb3JmKDAuNSAqIHZpc2li
bGVSZWN0LmhlaWdodCgpKSArIHNjYWxlRmFjdG9yICogc2Nyb2xsRGVsdGEueSgpLCAwKTsKICAg
ICAgICAgc2Nyb2xsZWRMYXllck1hdHJpeC5zY2FsZTNkKDEsIC0xLCAxKTsKIAotICAgICAgICAv
LyBTd2l0Y2ggc2hhZGVycyB0byBhdm9pZCBSR0Igc3dpenpsaW5nLgotICAgICAgICB1c2VTaGFk
ZXJQcm9ncmFtKFNjcm9sbExheWVyUHJvZ3JhbSk7Ci0gICAgICAgIGdsVW5pZm9ybTFpKG1fc2hh
ZGVyUHJvZ3JhbXNbU2Nyb2xsTGF5ZXJQcm9ncmFtXS5tX3NhbXBsZXJMb2NhdGlvbiwgMCk7Ci0g
ICAgICAgIGNoZWNrR0xFcnJvcigpOworICAgICAgICB1c2VTaGFkZXIobV9zY3JvbGxTaGFkZXJQ
cm9ncmFtKTsKKyAgICAgICAgR0xDKGdsVW5pZm9ybTFpKG1fc2Nyb2xsU2hhZGVyU2FtcGxlckxv
Y2F0aW9uLCAwKSk7CisgICAgICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQobV9w
cm9qZWN0aW9uTWF0cml4LCBzY3JvbGxlZExheWVyTWF0cml4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0Lmhl
aWdodCgpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2Ny
b2xsU2hhZGVyTWF0cml4TG9jYXRpb24sIC0xKTsKIAotICAgICAgICBkcmF3VGV4dHVyZWRRdWFk
KHNjcm9sbGVkTGF5ZXJNYXRyaXgsIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0Lmhl
aWdodCgpLCAxKTsKLSAgICAgICAgY2hlY2tHTEVycm9yKCk7Ci0KLSAgICAgICAgZ2xDb3B5VGV4
U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCAwLCAwLCAwLCAwLCBjb250ZW50UmVjdC53aWR0
aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgY2hlY2tHTEVycm9yKCk7Cisg
ICAgICAgIEdMQyhnbENvcHlUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIDAsIDAsIDAs
IDAsIGNvbnRlbnRSZWN0LndpZHRoKCksIGNvbnRlbnRSZWN0LmhlaWdodCgpKSk7CiAgICAgICAg
IG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICB9CiAKQEAgLTQyMywxNTQg
KzI0MCw5MiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjCiAgICAg
ICAgIEFTU0VSVChyb290TGF5ZXJXaWR0aCA9PSB1cGRhdGVSZWN0LndpZHRoKCkgJiYgcm9vdExh
eWVySGVpZ2h0ID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwogICAgICAgICB2b2lkKiBwaXhlbHMg
PSBiaXRtYXAuZ2V0UGl4ZWxzKCk7CiAKLSAgICAgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgICAg
IC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5
ZXIgdGV4dHVyZS4KLSAgICAgICAgZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIHVw
ZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVS
ZWN0LmhlaWdodCgpLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgICAg
ICBjaGVja0dMRXJyb3IoKTsKKyAgICAgICAgR0xDKGdsVGV4U3ViSW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCB1cGRhdGVSZWN0LngoKSwgdXBkYXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgo
KSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxz
KSk7CiAjZWxpZiBQTEFURk9STShDRykKICAgICAgICAgLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0
aGUgdXBkYXRlZCByZWN0LgogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihDR0JpdG1h
cENvbnRleHRHZXRXaWR0aChtX3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJl
Y3Qud2lkdGgoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KENHQml0bWFwQ29udGV4dEdldEhlaWdodCht
X3Jvb3RMYXllckNHQ29udGV4dC5nZXQoKSkpID09IHVwZGF0ZVJlY3QuaGVpZ2h0KCkpOwogICAg
ICAgICB2b2lkKiBwaXhlbHMgPSBtX3Jvb3RMYXllckJhY2tpbmdTdG9yZS5kYXRhKCk7CiAKLSAg
ICAgICAgY2hlY2tHTEVycm9yKCk7CiAgICAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRo
ZSB1cGRhdGVkIHJlY3QgdG8gdGhlIHJvb3QgbGF5ZXIgdGV4dHVyZS4KICAgICAgICAgLy8gVGhl
IG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBpbiBDb3JlIEdyYXBoaWNzJyBjb29yZGluYXRl
IHN5c3RlbS4gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGlzIGhlcmUuCi0gICAgICAgIGdsVGV4
U3ViSW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgdXBk
YXRlUmVjdC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAtIHVwZGF0ZVJlY3QueSgpIC0g
dXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3Qu
d2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0gICAgICAgIGNoZWNrR0xFcnJvcigp
OworICAgICAgICBHTEMoZ2xUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjdC54KCksIG1fcm9vdExheWVyVGV4dHVyZUhl
aWdodCAtIHVwZGF0ZVJlY3QueSgpIC0gdXBkYXRlUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVSZWN0LndpZHRoKCksIHVwZGF0ZVJlY3QuaGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
cGl4ZWxzKSk7CiAjZWxzZQogI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBmb3IgeW91ciBwbGF0
Zm9ybS4iCiAjZW5kaWYKICAgICB9CiAKICAgICBnbENsZWFyQ29sb3IoMCwgMCwgMSwgMSk7Ci0g
ICAgY2hlY2tHTEVycm9yKCk7CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUIHwgR0xf
REVQVEhfQlVGRkVSX0JJVCk7Ci0gICAgY2hlY2tHTEVycm9yKCk7CiAKICAgICAvLyBSZW5kZXIg
dGhlIHJvb3QgbGF5ZXIgdXNpbmcgYSBxdWFkIHRoYXQgdGFrZXMgdXAgdGhlIGVudGlyZSB2aXNp
YmxlIGFyZWEgb2YgdGhlIHdpbmRvdy4KLSAgICB1c2VTaGFkZXJQcm9ncmFtKENvbnRlbnRMYXll
clByb2dyYW0pOwotICAgIGNoZWNrR0xFcnJvcigpOwotICAgIGdsVW5pZm9ybTFpKG1fc2FtcGxl
ckxvY2F0aW9uLCAwKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKKyAgICAvLyBXZSByZXVzZSB0aGUg
c2hhZGVyIHByb2dyYW0gdXNlZCBieSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KKyAgICBjb25zdCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJWYWx1ZXMgPSBj
b250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICB1c2VTaGFkZXIoY29udGVudExheWVyVmFs
dWVzLT5jb250ZW50U2hhZGVyUHJvZ3JhbSgpKTsKKyAgICBHTEMoZ2xVbmlmb3JtMWkoY29udGVu
dExheWVyVmFsdWVzLT5zaGFkZXJTYW1wbGVyTG9jYXRpb24oKSwgMCkpOwogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGxheWVyTWF0cml4OwogICAgIGxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKHZp
c2libGVSZWN0LndpZHRoKCkgKiAwLjVmLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSAqIDAuNWYsIDAp
OwotICAgIGRyYXdUZXh0dXJlZFF1YWQobGF5ZXJNYXRyaXgsIHZpc2libGVSZWN0LndpZHRoKCks
IHZpc2libGVSZWN0LmhlaWdodCgpLCAxKTsKLSAgICBjaGVja0dMRXJyb3IoKTsKKyAgICBMYXll
ckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKG1fcHJvamVjdGlvbk1hdHJpeCwgbGF5ZXJNYXRy
aXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlUmVjdC53aWR0
aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRlbnRMYXllclZhbHVlcy0+c2hhZGVyTWF0cml4TG9jYXRpb24oKSwgY29u
dGVudExheWVyVmFsdWVzLT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOwogCiAgICAgLy8gSWYgY3Vs
bGluZyBpcyBlbmFibGVkIHRoZW4gd2Ugd2lsbCBjdWxsIHRoZSBiYWNrZmFjZS4KLSAgICBnbEN1
bGxGYWNlKEdMX0JBQ0spOwotICAgIGNoZWNrR0xFcnJvcigpOworICAgIEdMQyhnbEN1bGxGYWNl
KEdMX0JBQ0spKTsKICAgICAvLyBUaGUgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gaXMgc2V0dXAg
c3VjaCB0aGF0IFkgc3RhcnRzIGF0IHplcm8gYW5kCiAgICAgLy8gaW5jcmVhc2VzIGdvaW5nIGRv
d24gdGhlIHBhZ2Ugc28gd2UgbmVlZCB0byBhZGp1c3QgdGhlIHdpbmRpbmcgb3JkZXIgb2YKICAg
ICAvLyBmcm9udCBmYWNpbmcgdHJpYW5nbGVzLgotICAgIGdsRnJvbnRGYWNlKEdMX0NXKTsKLSAg
ICBjaGVja0dMRXJyb3IoKTsKKyAgICBHTEMoZ2xGcm9udEZhY2UoR0xfQ1cpKTsKIAogICAgIC8v
IFRoZSBzaGFkZXIgdXNlZCB0byByZW5kZXIgbGF5ZXJzIHJldHVybnMgcHJlLW11bHRpcGxpZWQg
YWxwaGEgY29sb3JzCiAgICAgLy8gc28gd2UgbmVlZCB0byBzZW5kIHRoZSBibGVuZGluZyBtb2Rl
IGFwcHJvcHJpYXRlbHkuCi0gICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAgIGNoZWNrR0xFcnJv
cigpOwotICAgIGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7Ci0K
LSAgICBjaGVja0dMRXJyb3IoKTsKKyAgICBHTEMoZ2xFbmFibGUoR0xfQkxFTkQpKTsKKyAgICBH
TEMoZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBKSk7CiAKICAgICAv
LyBUcmFuc2xhdGUgYWxsIHRoZSBjb21wb3NpdGVkIGxheWVycyBieSB0aGUgc2Nyb2xsIHBvc2l0
aW9uLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKICAgICBtYXRyaXgudHJhbnNs
YXRlM2QoLW1fc2Nyb2xsUG9zaXRpb24ueCgpLCAtbV9zY3JvbGxQb3NpdGlvbi55KCksIDApOwog
CisgICAgLy8gVHJhdmVyc2UgdGhlIGxheWVyIHRyZWUgYW5kIHVwZGF0ZSB0aGUgbGF5ZXIgdHJh
bnNmb3Jtcy4KICAgICBmbG9hdCBvcGFjaXR5ID0gMTsKLSAgICBtX2xheWVyTGlzdC5zaHJpbmso
MCk7CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMg
PSBtX3Jvb3RMYXllci0+Z2V0U3VibGF5ZXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShz
dWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwgb3BhY2l0eSwgdmlzaWJsZVJlY3QpOwotCi0gICAg
Ly8gU29ydCBsYXllcnMgYnkgdGhlIHogY29vcmRpbmF0ZSBvZiB0aGVpciBjZW50ZXIgc28gdGhh
dCBsYXllcnMgZnVydGhlcgotICAgIC8vIGF3YXkgZ2V0IGRyYXduIGZpcnN0LgotICAgIHN0ZDo6
c3RhYmxlX3NvcnQobV9sYXllckxpc3QuYmVnaW4oKSwgbV9sYXllckxpc3QuZW5kKCksIGNvbXBh
cmVMYXllclopOworICAgIHNpemVfdCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMu
c2l6ZSgpOyBpKyspCisgICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0u
Z2V0KCksIG1hdHJpeCwgb3BhY2l0eSk7CiAKICAgICAvLyBFbmFibGUgc2Npc3NvcmluZyB0byBh
dm9pZCByZW5kZXJpbmcgY29tcG9zaXRlZCBsYXllcnMgb3ZlciB0aGUgc2Nyb2xsYmFycy4KLSAg
ICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGdsU2Npc3NvcigwLCB2aXNpYmxlUmVj
dC5oZWlnaHQoKSAtIGNvbnRlbnRSZWN0LmhlaWdodCgpLCBjb250ZW50UmVjdC53aWR0aCgpLCBj
b250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgR0xDKGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCkp
OworICAgIEdMQyhnbFNjaXNzb3IoMCwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkgLSBjb250ZW50UmVj
dC5oZWlnaHQoKSwgY29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpKTsK
IAotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9sYXllckxpc3Quc2l6ZSgpOyBqKyspCi0g
ICAgICAgIGRyYXdMYXllcihtX2xheWVyTGlzdFtqXSk7CisgICAgLy8gVHJhdmVyc2UgdGhlIGxh
eWVyIHRyZWUgb25lIG1vcmUgdGltZSB0byBkcmF3IHRoZSBsYXllcnMuCisgICAgbV92aXNpYmxl
UmVjdCA9IHZpc2libGVSZWN0OworICAgIGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgp
OyBpKyspCisgICAgICAgIGRyYXdMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpKTsK
IAotICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIEdMQyhnbERpc2FibGUoR0xf
U0NJU1NPUl9URVNUKSk7CiAKLSAgICBnbEZsdXNoKCk7CiAgICAgbV9nbGVzMkNvbnRleHQtPnN3
YXBCdWZmZXJzKCk7CiAKICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwogfQogCi0vLyBSZXR1
cm5zIHRoZSBpZCBvZiB0aGUgdGV4dHVyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBs
YXllciBvcgotLy8gLTEgaWYgdGhlIGlkIGhhc24ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0LgotaW50
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0VGV4dHVyZUlkKExheWVyQ2hyb21pdW0qIGxheWVy
KQotewotICAgIFRleHR1cmVJZE1hcDo6aXRlcmF0b3IgdGV4dHVyZUlkID0gbV90ZXh0dXJlSWRN
YXAuZmluZChsYXllcik7Ci0gICAgaWYgKHRleHR1cmVJZCAhPSBtX3RleHR1cmVJZE1hcC5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIHRleHR1cmVJZC0+c2Vjb25kOwotCi0gICAgcmV0dXJuIC0xOwot
fQotCi0vLyBBbGxvY2F0ZXMgYSBuZXcgdGV4dHVyZSBmb3IgdGhlIGxheWVyIGFuZCByZWdpc3Rl
cnMgaXQgaW4gdGhlIHRleHR1cmVJZCBtYXAuCi0vLyBGSVhNRTogV2Ugd2lsbCBuZWVkIHRvIGNv
bWUgdXAgd2l0aCBhIG1vcmUgc29waGlzdGljYXRlZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGhlcmUu
Ci1pbnQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjphc3NpZ25UZXh0dXJlRm9yTGF5ZXIoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIpCisvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFsbHkg
YmUgcmVwbGFjZWQgYnkgYSBwcm9wZXIgdGV4dHVyZSBtYW5hZ2VyLgordW5zaWduZWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclRleHR1cmUoKQogewotICAgIEdMdWludCB0ZXh0
dXJlSWQgPSBjcmVhdGVMYXllclRleHR1cmUoKTsKLQotICAgIC8vIEZJWE1FOiBDaGVjayB0aGF0
IHRleHR1cmVJZCBpcyB2YWxpZAotICAgIG1fdGV4dHVyZUlkTWFwLnNldChsYXllciwgdGV4dHVy
ZUlkKTsKLQotICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotCisgICAgR0x1aW50
IHRleHR1cmVJZCA9IDA7CisgICAgR0xDKGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmVJZCkpOwor
ICAgIEdMQyhnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCkpOworICAgIC8v
IERvIGJhc2ljIGxpbmVhciBmaWx0ZXJpbmcgb24gcmVzaXplLgorICAgIEdMQyhnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpKTsK
KyAgICBHTEMoZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKSk7CisgICAgLy8gTlBPVCB0ZXh0dXJlcyBpbiBHTCBFUyBvbmx5IHdv
cmsgd2hlbiB0aGUgd3JhcCBtb2RlIGlzIHNldCB0byBHTF9DTEFNUF9UT19FREdFLgorICAgIEdM
QyhnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpKTsKKyAgICBHTEMoZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSk7CiAgICAgcmV0dXJuIHRleHR1cmVJ
ZDsKIH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZyZWVMYXllclRleHR1cmUoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIpCi17Ci0gICAgVGV4dHVyZUlkTWFwOjppdGVyYXRvciB0ZXh0dXJl
SWQgPSBtX3RleHR1cmVJZE1hcC5maW5kKGxheWVyKTsKLSAgICBpZiAodGV4dHVyZUlkID09IG1f
dGV4dHVyZUlkTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gRnJlZSB1
cCB0aGUgdGV4dHVyZS4KLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICYodGV4dHVyZUlkLT5zZWNv
bmQpKTsKLSAgICBtX3RleHR1cmVJZE1hcC5yZW1vdmUodGV4dHVyZUlkKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gRHJhd3MgYSBkZWJ1ZyBib3JkZXIgYXJvdW5kIHRoZSBsYXllcidzIGJv
dW5kcy4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXIoTGF5ZXJD
aHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCi17Ci0g
ICAgc3RhdGljIEdMZmxvYXQgZ2xNYXRyaXhbMTZdOwotICAgIENvbG9yIGJvcmRlckNvbG9yID0g
bGF5ZXItPmJvcmRlckNvbG9yKCk7Ci0gICAgaWYgKCFib3JkZXJDb2xvci5hbHBoYSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB1c2VTaGFkZXJQcm9ncmFtKERlYnVnQm9yZGVyUHJvZ3JhbSk7
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gbWF0cml4OwotICAgIElu
dFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwotICAgIHJlbmRlck1hdHJpeC5zY2FsZTNk
KGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIDEpOwotICAgIHJlbmRlck1hdHJpeC5t
dWx0aXBseShtX3Byb2plY3Rpb25NYXRyaXgpOwotICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBd
LCByZW5kZXJNYXRyaXgpOwotICAgIHVuc2lnbmVkIGJvcmRlck1hdHJpeExvY2F0aW9uID0gbV9z
aGFkZXJQcm9ncmFtc1tEZWJ1Z0JvcmRlclByb2dyYW1dLm1fbWF0cml4TG9jYXRpb247Ci0gICAg
Z2xVbmlmb3JtTWF0cml4NGZ2KGJvcmRlck1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0
cml4WzBdKTsKLQotICAgIGdsVW5pZm9ybTRmKG1fYm9yZGVyQ29sb3JMb2NhdGlvbiwgYm9yZGVy
Q29sb3IucmVkKCkgLyAyNTUuMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvcmRlckNvbG9yLmdyZWVuKCkgLyAyNTUuMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yLmJsdWUoKSAvIDI1NS4wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7Ci0KLSAgICBnbExpbmVXaWR0aChsYXllci0+
Ym9yZGVyV2lkdGgoKSk7Ci0KLSAgICAvLyBUaGUgaW5kaWNlcyBmb3IgdGhlIGxpbmUgYXJlIHN0
b3JlZCBpbiB0aGUgc2FtZSBhcnJheSBhcyB0aGUgdHJpYW5nbGUgaW5kaWNlcy4KLSAgICBnbERy
YXdFbGVtZW50cyhHTF9MSU5FX0xPT1AsIDQsIEdMX1VOU0lHTkVEX1NIT1JULCAodm9pZCopKDYg
KiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSk7Ci0gICAgY2hlY2tHTEVycm9yKCk7Ci19Ci0KIC8v
IFJldHVybnMgdHJ1ZSBpZiBhbnkgcGFydCBvZiB0aGUgbGF5ZXIgZmFsbHMgd2l0aGluIHRoZSB2
aXNpYmxlUmVjdAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExh
eWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKIHsKQEAgLTU4OCw5ICszNDMsOSBAQCBib29sIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2liCiAgICAgcmV0dXJuIG1hcHBlZFJlY3Qu
aW50ZXJzZWN0cyhGbG9hdFJlY3QoLTEsIC0xLCAyLCAyKSk7CiB9CiAKLS8vIFVwZGF0ZXMgYW5k
IGNhY2hlcyB0aGUgbGF5ZXIgdHJhbnNmb3JtcyBhbmQgb3BhY2l0eSB2YWx1ZXMgdGhhdCB3aWxs
IGJlIHVzZWQKLS8vIHdoZW4gcmVuZGVyaW5nIHRoZW0uCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCkKKy8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVl
IHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCB1cGRhdGVzIHRoZSAKKy8vIHRyYW5zZm9y
bSBhbmQgb3BhY2l0eSB2YWx1ZXMuCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
TGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcGFyZW50TWF0cml4LCBmbG9hdCBvcGFjaXR5KQogewogICAgIC8vIENvbXB1dGUg
dGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhp
cyBsYXllciBhbmQKICAgICAvLyBhbGwgaXRzIHN1YmxheWVycy4gSXQncyBpbXBvcnRhbnQgdG8g
cmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgpAQCAtNjI3LDIzICszODIsMTEgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycwogICAgIC8vIE0gPSBNW3Bd
ICogVHJbbF0gKiBNW2xdICogVHJbY10KICAgICBsb2NhbE1hdHJpeC50cmFuc2xhdGUzZChjZW50
ZXJPZmZzZXRYLCBjZW50ZXJPZmZzZXRZLCAtbGF5ZXItPmFuY2hvclBvaW50WigpKTsKIAotICAg
IC8vIENoZWNrIGlmIHRoZSBsYXllciBmYWxscyB3aXRoaW4gdGhlIHZpc2libGUgYm91bmRzIG9m
IHRoZSBwYWdlLgotICAgIGJvb2wgbGF5ZXJWaXNpYmxlID0gaXNMYXllclZpc2libGUobGF5ZXIs
IGxvY2FsTWF0cml4LCB2aXNpYmxlUmVjdCk7Ci0KLSAgICBib29sIHNraXBMYXllciA9IGZhbHNl
OwotICAgIGlmIChib3VuZHMud2lkdGgoKSA+IDIwNDggfHwgYm91bmRzLmhlaWdodCgpID4gMjA0
OCkgewotICAgICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgTE9H
KExheWVyUmVuZGVyZXIsICJTa2lwcGluZyBsYXllciB3aXRoIHNpemUgJWQgJWQiLCBib3VuZHMu
d2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKLSAgICAgICAgc2tpcExheWVyID0gdHJ1ZTsKLSAg
ICB9Ci0KICAgICAvLyBDYWxjdWxhdGUgdGhlIGxheWVyJ3Mgb3BhY2l0eS4KICAgICBvcGFjaXR5
ICo9IGxheWVyLT5vcGFjaXR5KCk7CiAKICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShsb2Nh
bE1hdHJpeCk7CiAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KG9wYWNpdHkpOwotICAgIGlmIChs
YXllclZpc2libGUgJiYgIXNraXBMYXllcikKLSAgICAgICAgbV9sYXllckxpc3QuYXBwZW5kKGxh
eWVyKTsKIAogICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYgdGhlIGxheWVyIGRvZXNuJ3QgcHJlc2Vy
dmUgM0QuCiAgICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0QoKSkgewpAQCAtNjY3LDI5ICs0MTAs
NzEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycwogCiAgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0
U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgp
OyBpKyspCi0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCks
IGxvY2FsTWF0cml4LCBvcGFjaXR5LCB2aXNpYmxlUmVjdCk7CisgICAgICAgIHVwZGF0ZUxheWVy
c1JlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIGxvY2FsTWF0cml4LCBvcGFjaXR5KTsKKwor
ICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOworfQorCisvLyBSZWN1cnNpdmVseSB3
YWxrIHRoZSBsYXllciB0cmVlIGFuZCBkcmF3IHRoZSBsYXllcnMuCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllcikKK3sK
KyAgICBzdGF0aWMgYm9vbCBkZXB0aFRlc3RFbmFibGVkRm9yU3VidHJlZSA9IGZhbHNlOworCisg
ICAgLy8gQ2hlY2sgaWYgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZSBib3VuZHMg
b2YgdGhlIHBhZ2UuCisgICAgYm9vbCBsYXllclZpc2libGUgPSBpc0xheWVyVmlzaWJsZShsYXll
ciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSwgbV92aXNpYmxlUmVjdCk7CisKKyAgICAvLyBFbmFi
bGUgZGVwdGggdGVzdGluZyBmb3IgdGhpcyBsYXllciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cyBp
ZiBwcmVzZXJ2ZXMzRCBpcyBzZXQuCisgICAgYm9vbCBtdXN0Q2xlYXJEZXB0aCA9IGZhbHNlOwor
ICAgIGlmIChsYXllci0+cHJlc2VydmVzM0QoKSkgeworICAgICAgICBpZiAoIWRlcHRoVGVzdEVu
YWJsZWRGb3JTdWJ0cmVlKSB7CisgICAgICAgICAgICBHTEMoZ2xFbmFibGUoR0xfREVQVEhfVEVT
VCkpOworICAgICAgICAgICAgZGVwdGhUZXN0RW5hYmxlZEZvclN1YnRyZWUgPSB0cnVlOworCisg
ICAgICAgICAgICAvLyBOZWVkIHRvIGNsZWFyIHRoZSBkZXB0aCBidWZmZXIgd2hlbiB3ZSdyZSBk
b25lIHJlbmRlcmluZyB0aGlzIHN1YnRyZWUuCisgICAgICAgICAgICBtdXN0Q2xlYXJEZXB0aCA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobGF5ZXJWaXNpYmxlKQorICAgICAg
ICBkcmF3TGF5ZXIobGF5ZXIpOworCisgICAgLy8gSWYgd2UncmUgdXNpbmcgZGVwdGggdGVzdGlu
ZyB0aGVuIHdlIG5lZWQgdG8gc29ydCB0aGUgY2hpbGRyZW4gaW4gWiB0bworICAgIC8vIGdldCB0
aGUgdHJhbnNwYXJlbmN5IHRvIHdvcmsgcHJvcGVybHkuCisgICAgaWYgKGRlcHRoVGVzdEVuYWJs
ZWRGb3JTdWJ0cmVlKSB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOworICAgICAgICBWZWN0b3I8
TGF5ZXJDaHJvbWl1bSo+IHN1YmxheWVyTGlzdDsKKyAgICAgICAgc2l6ZV90IGk7CisgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBzdWJs
YXllckxpc3QuYXBwZW5kKHN1YmxheWVyc1tpXS5nZXQoKSk7CisKKyAgICAgICAgLy8gU29ydCBi
eSB0aGUgeiBjb29yZGluYXRlIG9mIHRoZSBsYXllciBjZW50ZXIgc28gdGhhdCBsYXllcnMgZnVy
dGhlciBhd2F5CisgICAgICAgIC8vIGFyZSBkcmF3biBmaXJzdC4KKyAgICAgICAgc3RkOjpzdGFi
bGVfc29ydChzdWJsYXllckxpc3QuYmVnaW4oKSwgc3VibGF5ZXJMaXN0LmVuZCgpLCBjb21wYXJl
TGF5ZXJaKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3VibGF5ZXJMaXN0LnNpemUoKTsg
aSsrKQorICAgICAgICAgICAgZHJhd0xheWVyc1JlY3Vyc2l2ZShzdWJsYXllckxpc3RbaV0pOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGRyYXdMYXll
cnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpKTsKKyAgICB9CisKKyAgICBpZiAobXVzdENs
ZWFyRGVwdGgpIHsKKyAgICAgICAgR0xDKGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKSk7CisgICAg
ICAgIEdMQyhnbENsZWFyKEdMX0RFUFRIX0JVRkZFUl9CSVQpKTsKKyAgICAgICAgZGVwdGhUZXN0
RW5hYmxlZEZvclN1YnRyZWUgPSBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiB7Ci0gICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGxvY2FsTWF0cml4ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KTsKICAgICBJbnRTaXplIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKIAogICAgIGlmIChsYXll
ci0+ZHJhd3NDb250ZW50KCkpIHsKLSAgICAgICAgaW50IHRleHR1cmVJZDsKLSAgICAgICAgaWYg
KGxheWVyLT5vd25zVGV4dHVyZSgpKQotICAgICAgICAgICAgdGV4dHVyZUlkID0gbGF5ZXItPnRl
eHR1cmVJZCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRleHR1cmVJZCA9IGdldFRl
eHR1cmVJZChsYXllcik7Ci0gICAgICAgICAgICAvLyBJZiBubyB0ZXh0dXJlIGhhcyBiZWVuIGNy
ZWF0ZWQgZm9yIHRoZSBsYXllciB5ZXQgdGhlbiBjcmVhdGUgb25lIG5vdy4KLSAgICAgICAgICAg
IGlmICh0ZXh0dXJlSWQgPT0gLTEpCi0gICAgICAgICAgICAgICAgdGV4dHVyZUlkID0gYXNzaWdu
VGV4dHVyZUZvckxheWVyKGxheWVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlZHJhdyB0
aGUgY29udGVudHMgb2YgdGhlIGxheWVyIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgLy8gVXBkYXRl
IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIgaWYgbmVjZXNzYXJ5LgogICAgICAgICBpZiAobGF5
ZXItPmNvbnRlbnRzRGlydHkoKSkgewogICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBiYWNraW5n
IHRleHR1cmUgY29udGVudHMgZm9yIGFueSBkaXJ0eSBwb3J0aW9uIG9mIHRoZSBsYXllci4KLSAg
ICAgICAgICAgIGxheWVyLT51cGRhdGVUZXh0dXJlQ29udGVudHModGV4dHVyZUlkKTsKKyAgICAg
ICAgICAgIGxheWVyLT51cGRhdGVDb250ZW50cygpOwogICAgICAgICAgICAgbV9nbGVzMkNvbnRl
eHQtPm1ha2VDdXJyZW50KCk7CiAgICAgICAgIH0KIApAQCAtNjk4LDEzICs0ODMsMTEgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihMYQogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBnbEVuYWJsZShHTF9DVUxMX0ZBQ0UpOwogCi0gICAgICAgIGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICAgICAgdXNlU2hhZGVyUHJvZ3JhbShzdGF0
aWNfY2FzdDxTaGFkZXJQcm9ncmFtVHlwZT4obGF5ZXItPnNoYWRlclByb2dyYW1JZCgpKSk7Ci0g
ICAgICAgIGRyYXdUZXh0dXJlZFF1YWQobG9jYWxNYXRyaXgsIGJvdW5kcy53aWR0aCgpLCBib3Vu
ZHMuaGVpZ2h0KCksIGxheWVyLT5kcmF3T3BhY2l0eSgpKTsKKyAgICAgICAgbGF5ZXItPmRyYXco
KTsKICAgICB9CiAKICAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBib3JkZXIgaWYgdGhlcmUgaXMgb25l
LgotICAgIGRyYXdEZWJ1Z0JvcmRlcihsYXllciwgbG9jYWxNYXRyaXgpOworICAgIGxheWVyLT5k
cmF3RGVidWdCb3JkZXIoKTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Om1ha2VD
b250ZXh0Q3VycmVudCgpCkBAIC03MTIsMjEgKzQ5NSwyMiBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6bWFrZUNvbnRleHRDCiAgICAgcmV0dXJuIG1fZ2xlczJDb250ZXh0LT5tYWtlQ3Vy
cmVudCgpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZENvbW1vbkF0dHJp
YkxvY2F0aW9ucyhTaGFkZXJQcm9ncmFtVHlwZSBwcm9ncmFtKQorLy8gQ2hlY2tzIHdoZXRoZXIg
YSBnaXZlbiBzaXplIGlzIHdpdGhpbiB0aGUgbWF4aW11bSBhbGxvd2VkIHRleHR1cmUgc2l6ZSBy
YW5nZS4KK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjaGVja1RleHR1cmVTaXplKGNvbnN0
IEludFNpemUmIHRleHR1cmVTaXplKQogewotICAgIHVuc2lnbmVkIHByb2dyYW1JZCA9IG1fc2hh
ZGVyUHJvZ3JhbXNbcHJvZ3JhbV0ubV9zaGFkZXJQcm9ncmFtSWQ7Ci0gICAgZ2xCaW5kQXR0cmli
TG9jYXRpb24ocHJvZ3JhbUlkLCBtX3Bvc2l0aW9uTG9jYXRpb24sICJhX3Bvc2l0aW9uIik7Ci0g
ICAgZ2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbUlkLCBtX3RleENvb3JkTG9jYXRpb24sICJh
X3RleENvb3JkIik7Ci0KLSAgICAvLyBSZS1saW5rIHRoZSBwcm9ncmFtIGZvciB0aGUgbmV3IGF0
dHJpYnV0ZSBsb2NhdGlvbnMgdG8gdGFrZSBlZmZlY3QuCi0gICAgZ2xMaW5rUHJvZ3JhbShwcm9n
cmFtSWQpOwotICAgIGNoZWNrR0xFcnJvcigpOworICAgIGlmICh0ZXh0dXJlU2l6ZS53aWR0aCgp
ID4gbV9tYXhUZXh0dXJlU2l6ZSB8fCB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSA+IG1fbWF4VGV4dHVy
ZVNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRHTE9iamVjdHMoKQorYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIHsKLSAg
ICAvLyBTaGFkZXJzIGZvciBkcmF3aW5nIHRoZSBsYXllciBjb250ZW50cy4KLSAgICBjaGFyIHZl
cnRleFNoYWRlclN0cmluZ1tdID0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8v
IFZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyBmb3IgcmVuZGVyaW5nIHRoZSBzY3JvbGxlZCBy
b290IGxheWVyIHF1YWQuCisgICAgLy8gVGhleSBkaWZmZXIgZnJvbSBhIHJlZ3VsYXIgY29udGVu
dCBsYXllciBzaGFkZXIgaW4gdGhhdCB0aGV5IGRvbid0IHN3aXp6bGUKKyAgICAvLyB0aGUgY29s
b3JzIG9yIHRha2UgYW4gYWxwaGEgdmFsdWUuCisgICAgY2hhciBzY3JvbGxWZXJ0ZXhTaGFkZXJT
dHJpbmdbXSA9CiAgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgogICAg
ICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICBcbiIKICAgICAgICAgInVuaWZvcm0g
bWF0NCBtYXRyaXg7ICAgICAgICAgXG4iCkBAIC03MzYsMzAgKzUyMCw2IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBt
YXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIKICAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4Q29v
cmQ7ICAgXG4iCiAgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKLSAg
ICAvLyBOb3RlIGRpZmZlcmVuY2VzIGJldHdlZW4gU2tpYSBhbmQgQ29yZSBHcmFwaGljcyB2ZXJz
aW9uczoKLSAgICAvLyAgLSBTa2lhIHVzZXMgQkdSQSBhbmQgb3JpZ2luIGlzIHVwcGVyIGxlZnQK
LSAgICAvLyAgLSBDb3JlIEdyYXBoaWNzIHVzZXMgUkdCQSBhbmQgb3JpZ2luIGlzIGxvd2VyIGxl
ZnQKLSAgICBjaGFyIGZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQotICAgICAgICAicHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAi
dmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgot
ICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgotICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgotICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAieyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotI2lmIFBMQVRGT1JNKFNLSUEpCi0g
ICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2X3RleENvb3Jk
KTsgXG4iCi0gICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueiwgdGV4Q29s
b3IueSwgdGV4Q29sb3IueCwgdGV4Q29sb3IudykgKiBhbHBoYTsgXG4iCi0jZWxpZiBQTEFURk9S
TShDRykKLSAgICAgICAgIiAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZl
YzIodl90ZXhDb29yZC54LCAxLjAgLSB2X3RleENvb3JkLnkpKTsgXG4iCi0gICAgICAgICIgIGds
X0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3IueSwgdGV4Q29sb3IueiwgdGV4
Q29sb3IudykgKiBhbHBoYTsgXG4iCi0jZWxzZQotI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBm
b3IgeW91ciBwbGF0Zm9ybS4iCi0jZW5kaWYKLSAgICAgICAgIn0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7Ci0KLSAgICAvLyBGcmFnbWVudCBz
aGFkZXIgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBzY3JvbGxlZCByb290IGxheWVyIHF1YWQuIEl0
IGRpZmZlcnMKLSAgICAvLyBmcm9tIGZyYWdtZW50U2hhZGVyU3RyaW5nIGluIHRoYXQgaXQgZG9l
c24ndCBzd2l6emxlIHRoZSBjb2xvcnMgYW5kIGRvZXNuJ3QKLSAgICAvLyB0YWtlIGFuIGFscGhh
IHZhbHVlLgogICAgIGNoYXIgc2Nyb2xsRnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CiAgICAgICAg
ICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CiAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCkBAIC03NzAsMTAxICs1MzAsNjcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmluaXRpYWxpemVTaAogICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9y
LngsIHRleENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpOyBcbiIKICAgICAgICAgIn0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CiAK
LSAgICAvLyBDYW52YXMgbGF5ZXJzIG5lZWQgdG8gYmUgZmxpcHBlZCB2ZXJ0aWNhbGx5IGFuZCB0
aGVpciBjb2xvcnMgc2hvdWxkbid0IGJlCi0gICAgLy8gc3dpenpsZWQuCi0gICAgY2hhciBjYW52
YXNGcmFnbWVudFNoYWRlclN0cmluZ1tdID0KLSAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInZhcnlpbmcgdmVj
MiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInVu
aWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAg
ICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKLSAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAgdmVjNCB0ZXhDb2xvciA9IHRleHR1
cmUyRChzX3RleHR1cmUsIHZlYzIodl90ZXhDb29yZC54LCAxLjAgLSB2X3RleENvb3JkLnkpKTsg
XG4iCi0gICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29sb3Iu
eSwgdGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBoYTsgXG4iCi0gICAgICAgICJ9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwotCi0gICAg
Ly8gU2hhZGVycyBmb3IgZHJhd2luZyB0aGUgZGVidWcgYm9yZGVycyBhcm91bmQgdGhlIGxheWVy
cy4KLSAgICBjaGFyIGJvcmRlclZlcnRleFNoYWRlclN0cmluZ1tdID0KLSAgICAgICAgImF0dHJp
YnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCi0gICAgICAgICJ1bmlmb3JtIG1hdDQgbWF0cml4
OyAgICAgICAgIFxuIgotICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIK
LSAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICIgICBn
bF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgotICAgICAgICAifSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiI7Ci0gICAgY2hhciBib3JkZXJGcmFnbWVudFNoYWRlclN0
cmluZ1tdID0KLSAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInVuaWZvcm0gdmVjNCBjb2xvcjsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIiAg
Z2xfRnJhZ0NvbG9yID0gY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAg
ICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiI7Ci0KLSAgICBHTGZsb2F0IHZlcnRpY2VzW10gPSB7IC0wLjVmLCAgMC41ZiwgMC4wZiwg
Ly8gUG9zaXRpb24gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsICAxLjBmLCAv
LyBUZXhDb29yZCAwIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAuNWYsIC0wLjVmLCAw
LjBmLCAvLyBQb3NpdGlvbiAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wZiwgIDAu
MGYsIC8vIFRleENvb3JkIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAtMC41
ZiwgMC4wZiwgLy8gUG9zaXRpb24gMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYs
ICAwLjBmLCAvLyBUZXhDb29yZCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC41Ziwg
IDAuNWYsIDAuMGYsIC8vIFBvc2l0aW9uIDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
LjBmLCAgMS4wZiAvLyBUZXhDb29yZCAzCi0gICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAg
ICBHTHVzaG9ydCBpbmRpY2VzW10gPSB7IDAsIDEsIDIsIDAsIDIsIDMsIC8vIFRoZSB0d28gdHJp
YW5nbGVzIHRoYXQgbWFrZSB1cCB0aGUgbGF5ZXIgcXVhZC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDEsIDIsIDN9OyAvLyBBIGxpbmUgcGF0aCBmb3IgZHJhd2luZyB0aGUgbGF5ZXIg
Ym9yZGVyLgotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAoIWNyZWF0ZUxh
eWVyU2hhZGVyKENvbnRlbnRMYXllclByb2dyYW0sIHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21l
bnRTaGFkZXJTdHJpbmcpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBz
aGFkZXIgcHJvZ3JhbSBmb3IgY29udGVudCBsYXllcnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBMYXllckNocm9taXVtOjpzZXRTaGFkZXJQcm9ncmFtSWQoQ29udGVudExh
eWVyUHJvZ3JhbSk7Ci0KLSAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVyKENhbnZhc0xheWVyUHJv
Z3JhbSwgdmVydGV4U2hhZGVyU3RyaW5nLCBjYW52YXNGcmFnbWVudFNoYWRlclN0cmluZykpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZvciBD
YW52YXMgbGF5ZXJzIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQ2FudmFz
TGF5ZXJDaHJvbWl1bTo6c2V0U2hhZGVyUHJvZ3JhbUlkKENhbnZhc0xheWVyUHJvZ3JhbSk7Ci0K
LSAgICBpZiAoIWNyZWF0ZUxheWVyU2hhZGVyKFNjcm9sbExheWVyUHJvZ3JhbSwgdmVydGV4U2hh
ZGVyU3RyaW5nLCBzY3JvbGxGcmFnbWVudFNoYWRlclN0cmluZykpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIGZvciBzY3JvbGxpbmcgbGF5ZXIi
KTsKKyAgICBtX3Njcm9sbFNoYWRlclByb2dyYW0gPSBMYXllckNocm9taXVtOjpjcmVhdGVTaGFk
ZXJQcm9ncmFtKHNjcm9sbFZlcnRleFNoYWRlclN0cmluZywgc2Nyb2xsRnJhZ21lbnRTaGFkZXJT
dHJpbmcpOworICAgIGlmICghbV9zY3JvbGxTaGFkZXJQcm9ncmFtKSB7CisgICAgICAgIExPR19F
UlJPUigiTGF5ZXJSZW5kZXJlckNocm9taXVtOiBGYWlsZWQgdG8gY3JlYXRlIHNjcm9sbCBzaGFk
ZXIgcHJvZ3JhbSIpOworICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFjcmVhdGVMYXllclNoYWRlcihEZWJ1Z0Jv
cmRlclByb2dyYW0sIGJvcmRlclZlcnRleFNoYWRlclN0cmluZywgYm9yZGVyRnJhZ21lbnRTaGFk
ZXJTdHJpbmcpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIg
cHJvZ3JhbSBmb3IgZGVidWcgYm9yZGVycyIpOworICAgIEdMQyhtX3Njcm9sbFNoYWRlclNhbXBs
ZXJMb2NhdGlvbiA9IGdsR2V0VW5pZm9ybUxvY2F0aW9uKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSwg
InNfdGV4dHVyZSIpKTsKKyAgICBHTEMobV9zY3JvbGxTaGFkZXJNYXRyaXhMb2NhdGlvbiA9IGds
R2V0VW5pZm9ybUxvY2F0aW9uKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSwgIm1hdHJpeCIpKTsKKyAg
ICBpZiAobV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb24gPT0gLTEgfHwgbV9zY3JvbGxTaGFk
ZXJNYXRyaXhMb2NhdGlvbiA9PSAtMSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBp
bml0aWFsaXplIHNjcm9sbCBzaGFkZXIuIik7CisgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3Rz
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBTcGVjaWZ5IHRoZSBh
dHRyaWIgbG9jYXRpb24gZm9yIHRoZSBwb3NpdGlvbiBhbmQgdGV4Q29vcmQgYW5kIG1ha2UgaXQg
dGhlIHNhbWUgZm9yIGFsbCBwcm9ncmFtcyB0bwotICAgIC8vIGF2b2lkIGJpbmRpbmcgcmUtYmlu
ZGluZyB0aGUgdmVydGV4IGF0dHJpYnV0ZXMuCi0gICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9u
cyhDb250ZW50TGF5ZXJQcm9ncmFtKTsKLSAgICBiaW5kQ29tbW9uQXR0cmliTG9jYXRpb25zKENh
bnZhc0xheWVyUHJvZ3JhbSk7Ci0gICAgYmluZENvbW1vbkF0dHJpYkxvY2F0aW9ucyhEZWJ1Z0Jv
cmRlclByb2dyYW0pOwotICAgIGJpbmRDb21tb25BdHRyaWJMb2NhdGlvbnMoU2Nyb2xsTGF5ZXJQ
cm9ncmFtKTsKLQotICAgIC8vIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbG9yIHVuaWZvcm0g
Zm9yIHRoZSBkZWJ1ZyBib3JkZXIgc2hhZGVyIHByb2dyYW0uCi0gICAgbV9ib3JkZXJDb2xvckxv
Y2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9zaGFkZXJQcm9ncmFtc1tEZWJ1Z0JvcmRl
clByb2dyYW1dLm1fc2hhZGVyUHJvZ3JhbUlkLCAiY29sb3IiKTsKLQotICAgIGdsR2VuQnVmZmVy
cygzLCBtX3F1YWRWYm9JZHMpOwotICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1f
cXVhZFZib0lkc1tWZXJ0aWNlc10pOwotICAgIGdsQnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIs
IHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7Ci0gICAgZ2xCaW5k
QnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX3F1YWRWYm9JZHNbTGF5ZXJFbGVtZW50
c10pOwotICAgIGdsQnVmZmVyRGF0YShHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKGlu
ZGljZXMpLCBpbmRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7Ci0KICAgICAvLyBDcmVhdGUgYSB0ZXh0
dXJlIG9iamVjdCB0byBob2xkIHRoZSBjb250ZW50cyBvZiB0aGUgcm9vdCBsYXllci4KICAgICBt
X3Jvb3RMYXllclRleHR1cmVJZCA9IGNyZWF0ZUxheWVyVGV4dHVyZSgpOwogICAgIGlmICghbV9y
b290TGF5ZXJUZXh0dXJlSWQpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRl
IHRleHR1cmUgZm9yIHJvb3QgbGF5ZXIiKTsKKyAgICAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMo
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBUdXJuIG9mZiBmaWx0ZXJp
bmcgZm9yIHRoZSByb290IGxheWVyIHRvIGF2b2lkIGJsdXJyaW5nIGZyb20gdGhlIHJlcGVhdGVk
CiAgICAgLy8gd3JpdGVzIGFuZCByZWFkcyB0byB0aGUgZnJhbWVidWZmZXIgdGhhdCBoYXBwZW4g
d2hpbGUgc2Nyb2xsaW5nLgotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9yb290
TGF5ZXJUZXh0dXJlSWQpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX05FQVJFU1QpOworICAgIEdMQyhn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fcm9vdExheWVyVGV4dHVyZUlkKSk7CisgICAg
R0xDKGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX05FQVJFU1QpKTsKKyAgICBHTEMoZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCkpOworCisgICAgLy8gR2V0IHRoZSBtYXgg
dGV4dHVyZSBzaXplIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgorICAgIEdMQyhnbEdldEludGVn
ZXJ2KEdMX01BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7CisKKyAgICBtX2xh
eWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
cygpKTsKKyAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDb250
ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKCkpOworICAgIG1fY2FudmFzTGF5ZXJTaGFy
ZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
KCkpOworICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9j
b250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY2FudmFzTGF5ZXJT
aGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgY2xlYW51cFNoYXJlZE9iamVj
dHMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwog
fQorCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgbV9sYXllclNoYXJlZFZhbHVlcy5j
bGVhcigpOworICAgIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CisgICAgbV9j
YW52YXNMYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOworCisgICAgaWYgKG1fc2Nyb2xsU2hhZGVy
UHJvZ3JhbSkgeworICAgICAgICBHTEMoZ2xEZWxldGVQcm9ncmFtKG1fc2Nyb2xsU2hhZGVyUHJv
Z3JhbSkpOworICAgICAgICBtX3Njcm9sbFNoYWRlclByb2dyYW0gPSAwOworICAgIH0KKworICAg
IGlmIChtX3Jvb3RMYXllclRleHR1cmVJZCkgeworICAgICAgICBHTEMoZ2xEZWxldGVUZXh0dXJl
cygxLCAmbV9yb290TGF5ZXJUZXh0dXJlSWQpKTsKKyAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJl
SWQgPSAwOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShy
ZXZpc2lvbiA2NTU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2luY2x1ZGUgIkNhbnZhc0xheWVy
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2tCaXRt
YXAuaCIKQEAgLTUxLDE2ICs1Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR0xF
UzJDb250ZXh0OwogCi1jbGFzcyBTaGFkZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAgICBTaGFkZXJQ
cm9ncmFtKCk7Ci0KLSAgICB1bnNpZ25lZCBtX3NoYWRlclByb2dyYW1JZDsKLSAgICBpbnQgbV9z
YW1wbGVyTG9jYXRpb247Ci0gICAgaW50IG1fbWF0cml4TG9jYXRpb247Ci0gICAgaW50IG1fYWxw
aGFMb2NhdGlvbjsKLX07Ci0KIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBv
c2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CkBAIC03OCw3MyArNzAsNTggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSB7IG1fbmVlZHNEaXNwbGF5ID0gdHJ1
ZTsgfQogCi0gICAgLy8gRnJlZXMgdGhlIHRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZl
biBsYXllci4KLSAgICBib29sIGZyZWVMYXllclRleHR1cmUoTGF5ZXJDaHJvbWl1bSopOwotCiAg
ICAgYm9vbCBoYXJkd2FyZUNvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9oYXJkd2FyZUNv
bXBvc2l0aW5nOyB9CiAKICAgICB2b2lkIHNldFJvb3RMYXllckNhbnZhc1NpemUoY29uc3QgSW50
U2l6ZSYpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiByb290TGF5ZXJHcmFwaGljc0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dC5nZXQoKTsgfQogCi1w
cml2YXRlOgotICAgIGVudW0gU2hhZGVyUHJvZ3JhbVR5cGUgeyBEZWJ1Z0JvcmRlclByb2dyYW0s
IFNjcm9sbExheWVyUHJvZ3JhbSwgQ29udGVudExheWVyUHJvZ3JhbSwgQ2FudmFzTGF5ZXJQcm9n
cmFtLCBOdW1TaGFkZXJQcm9ncmFtVHlwZXMgfTsKKyAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRl
eHR1cmUoKTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0q
IGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7CisgICAgc3RhdGljIHZvaWQgZGVi
dWdHTENhbGwoY29uc3QgY2hhciogY29tbWFuZCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUp
OwogCi0gICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJDaHJvbWl1bSopOworICAgIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9wcm9q
ZWN0aW9uTWF0cml4OyB9CiAKLSAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcihMYXllckNocm9taXVt
KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIHVzZVNoYWRlcih1bnNp
Z25lZCk7CiAKLSAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSk7
CisgICAgYm9vbCBjaGVja1RleHR1cmVTaXplKGNvbnN0IEludFNpemUmKTsKIAotICAgIGJvb2wg
aXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOworICAgIGNvbnN0IExheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcyogbGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2xheWVy
U2hhcmVkVmFsdWVzLmdldCgpOyB9CisgICAgY29uc3QgQ29udGVudExheWVyQ2hyb21pdW06OlNo
YXJlZFZhbHVlcyogY29udGVudExheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KKyAgICBjb25zdCBDYW52YXNMYXllckNo
cm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogCi0gICAgYm9vbCBjcmVh
dGVMYXllclNoYWRlcihTaGFkZXJQcm9ncmFtVHlwZSwgY29uc3QgY2hhciogdmVydGV4U2hhZGVy
U291cmNlLCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSk7Citwcml2YXRlOgorICAg
IHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBmbG9hdCBvcGFjaXR5KTsKIAotICAg
IHZvaWQgdXNlU2hhZGVyUHJvZ3JhbShTaGFkZXJQcm9ncmFtVHlwZSk7CisgICAgdm9pZCBkcmF3
TGF5ZXJzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKIAotICAgIHZvaWQgYmluZENvbW1vbkF0
dHJpYkxvY2F0aW9ucyhTaGFkZXJQcm9ncmFtVHlwZSk7CisgICAgdm9pZCBkcmF3TGF5ZXIoTGF5
ZXJDaHJvbWl1bSopOwogCi0gICAgZW51bSBWYm9JZHMgeyBWZXJ0aWNlcywgTGF5ZXJFbGVtZW50
cyB9OworICAgIGJvb2wgaXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpOwogCi0gICAgLy8g
VGhlc2UgYXJlIGhlcmUgb25seSB0ZW1wb3JhcmlseSBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgb25j
ZSB3ZSBzd2l0Y2ggb3ZlciB0byBHR0wKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
Ci0gICAgYm9vbCBpbml0aWFsaXplU2hhcmVkR0xPYmplY3RzKCk7Ci0gICAgaW50IGdldFRleHR1
cmVJZChMYXllckNocm9taXVtKik7Ci0gICAgaW50IGFzc2lnblRleHR1cmVGb3JMYXllcihMYXll
ckNocm9taXVtKik7Ci0KLSAgICBTaGFkZXJQcm9ncmFtIG1fc2hhZGVyUHJvZ3JhbXNbTnVtU2hh
ZGVyUHJvZ3JhbVR5cGVzXTsKKyAgICBib29sIGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7Cisg
ICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCiAgICAgdW5zaWduZWQgbV9yb290TGF5
ZXJUZXh0dXJlSWQ7CiAgICAgaW50IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoOwogICAgIGludCBt
X3Jvb3RMYXllclRleHR1cmVIZWlnaHQ7CiAKLSAgICAvLyBTaGFkZXIgdW5pZm9ybSBhbmQgYXR0
cmlidXRlIGxvY2F0aW9ucy4KLSAgICBjb25zdCBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwotICAg
IGNvbnN0IGludCBtX3RleENvb3JkTG9jYXRpb247Ci0gICAgaW50IG1fc2FtcGxlckxvY2F0aW9u
OwotICAgIGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIGludCBtX2FscGhhTG9jYXRpb247Ci0g
ICAgaW50IG1fYm9yZGVyQ29sb3JMb2NhdGlvbjsKKyAgICAvLyBTY3JvbGwgc2hhZGVyIHVuaWZv
cm0gbG9jYXRpb25zLgorICAgIHVuc2lnbmVkIG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbTsKKyAgICBp
bnQgbV9zY3JvbGxTaGFkZXJTYW1wbGVyTG9jYXRpb247CisgICAgaW50IG1fc2Nyb2xsU2hhZGVy
TWF0cml4TG9jYXRpb247CiAKLSAgICB1bnNpZ25lZCBtX3F1YWRWYm9JZHNbM107CiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogCiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IG1fcm9vdExheWVyOwogCi0gICAgVmVjdG9yPExheWVyQ2hyb21pdW0qPiBtX2xh
eWVyTGlzdDsKLQogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CiAgICAgSW50UG9pbnQgbV9zY3Jv
bGxQb3NpdGlvbjsKICAgICBib29sIG1faGFyZHdhcmVDb21wb3NpdGluZzsKIAotICAgIFNoYWRl
clByb2dyYW1UeXBlIG1fY3VycmVudFNoYWRlclByb2dyYW1UeXBlOwotCi0gICAgLy8gTWFwIGFz
c29jaWF0aW5nIGxheWVycyB3aXRoIHRleHR1cmVzIGlkcyB1c2VkIGJ5IHRoZSBHTCBjb21wb3Np
dG9yLgotICAgIHR5cGVkZWYgSGFzaE1hcDxMYXllckNocm9taXVtKiwgdW5zaWduZWQ+IFRleHR1
cmVJZE1hcDsKLSAgICBUZXh0dXJlSWRNYXAgbV90ZXh0dXJlSWRNYXA7CisgICAgdW5zaWduZWQg
aW50IG1fY3VycmVudFNoYWRlcjsKIAogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgT3duUHRyPHNr
aWE6OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKQEAgLTE1OCw5ICsxMzUsMzMg
QEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgbV9yb290TGF5ZXJDYW52YXNTaXplOwogCisgICAg
SW50UmVjdCBtX3Zpc2libGVSZWN0OworCisgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CisKKyAg
ICAvLyBTdG9yZSB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIGVh
Y2ggbGF5ZXIgdHlwZQorICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlIG9mIHRo
ZSBjb21wb3NpdG9yLiBTaW5jZSB0aGVyZSBjYW4gYmUKKyAgICAvLyBtdWx0aXBsZSBpbnN0YW5j
ZXMgb2YgdGhlIGNvbXBvc2l0b3IgcnVubmluZyBpbiB0aGUgc2FtZSByZW5kZXJlciBwcm9jZXNz
CisgICAgLy8gd2UgY2Fubm90IHN0b3JlIHRoZXNlIHZhbHVlcyBpbiBzdGF0aWMgdmFyaWFibGVz
LgorICAgIE93blB0cjxMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1fbGF5ZXJTaGFyZWRW
YWx1ZXM7CisgICAgT3duUHRyPENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1f
Y29udGVudExheWVyU2hhcmVkVmFsdWVzOworICAgIE93blB0cjxDYW52YXNMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXM+IG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXM7CisKICAgICBPd25QdHI8
R0xFUzJDb250ZXh0PiBtX2dsZXMyQ29udGV4dDsKIH07CiAKKy8vIFNldHRpbmcgREVCVUdfR0xf
Q0FMTFMgdG8gMSB3aWxsIGNhbGwgZ2xHZXRFcnJvcigpIGFmdGVyIGFsbW9zdCBldmVyeSBHTAor
Ly8gY2FsbCBtYWRlIGJ5IHRoZSBjb21wb3NpdG9yLiBVc2VmdWwgZm9yIGRlYnVnZ2luZyByZW5k
ZXJpbmcgaXNzdWVzIGJ1dAorLy8gd2lsbCBzaWduaWZpY2FudGx5IGRlZ3JhZGUgcGVyZm9ybWFu
Y2UuCisjZGVmaW5lIERFQlVHX0dMX0NBTExTIDAKKworI2lmIERFQlVHX0dMX0NBTExTICYmICFk
ZWZpbmVkICggTkRFQlVHICkKKyNkZWZpbmUgR0xDKHgpIHsgKHgpLCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRlYnVnR0xDYWxsKCN4LCBfX0ZJTEVfXywgX19MSU5FX18pOyB9CisjZWxzZQorI2Rl
ZmluZSBHTEMoeCkgKHgpCisjZW5kaWYKKworCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDY1NTcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc2Zvcm1M
YXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NSZWZQdHI8VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bT4gVHJhbnNmb3JtTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUcmFuc2Zvcm1MYXllckNocm9taXVtKG93bmVyKSk7Ci19Ci0KLVRyYW5zZm9ybUxh
eWVyQ2hyb21pdW06OlRyYW5zZm9ybUxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcikKLSAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCi17Ci19Ci0KLX0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zZm9ybUxheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gNjU1NzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyYW5zZm9ybUxheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ci0jaWZuZGVmIFRyYW5zZm9ybUxheWVyQ2hyb21pdW1faAotI2RlZmluZSBUcmFuc2Zvcm1MYXll
ckNocm9taXVtX2gKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBIExheWVy
IHRoYXQgZG9lc24ndCBkcmF3IGFueSBjb250ZW50IGJ1dCBzaW1wbHkgZXhpc3RzIHRvIGdyb3Vw
IGFuZAotLy8gdHJhbnNmb3JtIGl0cyBkZXNjZW5kYW50cy4KLWNsYXNzIFRyYW5zZm9ybUxheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8VHJhbnNmb3JtTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIgPSAwKTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1
cm4gZmFsc2U7IH0KLQotcHJpdmF0ZToKLSAgICBUcmFuc2Zvcm1MYXllckNocm9taXVtKEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwotfTsKLQotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCShyZXZp
c2lvbiA2NTU3MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsNyBAQCBQYXNzUmVm
UHRyPFZpZGVvTGF5ZXJDaHJvbWl1bT4gVmlkZW9MYXllCiB9CiAKIFZpZGVvTGF5ZXJDaHJvbWl1
bTo6VmlkZW9MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAg
OiBMYXllckNocm9taXVtKG93bmVyKQotICAgICwgbV9hbGxvY2F0ZWRUZXh0dXJlSWQoMCkKKyAg
ICA6IENvbnRlbnRMYXllckNocm9taXVtKG93bmVyKQogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAg
LCBtX2NhbnZhcygwKQogICAgICwgbV9za2lhQ29udGV4dCgwKQpAQCAtNjQsNyArNjMsNyBAQCBW
aWRlb0xheWVyQ2hyb21pdW06OlZpZGVvTGF5ZXJDaHJvbWl1bShHCiB7CiB9CiAKLXZvaWQgVmlk
ZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlQ29udGVudHModW5zaWduZWQgdGV4dHVyZUlk
KQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKIHsKICAgICBSZW5k
ZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJhY2tpbmcq
PihtX293bmVyLT5jbGllbnQoKSk7CiAgICAgaWYgKCFiYWNraW5nIHx8IGJhY2tpbmctPnBhaW50
aW5nR29lc1RvV2luZG93KCkpCkBAIC0xMDksOSArMTA4LDIwIEBAIHZvaWQgVmlkZW9MYXllckNo
cm9taXVtOjp1cGRhdGVUZXh0dXJlQ28KICAgICAvLyBCcmluZyB0aGUgY2FudmFzIGludG8gdGhl
IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWludCByZWN0LgogICAgIG1fY2FudmFzLT50cmFu
c2xhdGUoc3RhdGljX2Nhc3Q8U2tTY2FsYXI+KC1kaXJ0eVJlY3QueCgpKSwgc3RhdGljX2Nhc3Q8
U2tTY2FsYXI+KC1kaXJ0eVJlY3QueSgpKSk7CiAKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMg
dGVzdCB3aGVuIHRpbGVkIGxheWVycyBhcmUgaW1wbGVtZW50ZWQuCisgICAgbV9za2lwc0RyYXcg
PSBmYWxzZTsKKyAgICBpZiAoIWxheWVyUmVuZGVyZXIoKS0+Y2hlY2tUZXh0dXJlU2l6ZShyZXF1
aXJlZFRleHR1cmVTaXplKSkgeworICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBtX2NvbnRlbnRzVGV4
dHVyZTsKKyAgICBpZiAoIXRleHR1cmVJZCkKKyAgICAgICAgdGV4dHVyZUlkID0gbGF5ZXJSZW5k
ZXJlcigpLT5jcmVhdGVMYXllclRleHR1cmUoKTsKKwogICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlk
IG9yIHNpemUgY2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUsIHRoZW4gd2UgbmVlZCB0byB0ZWxsIEdM
CiAgICAgLy8gdG8gcmUtYWxsb2NhdGUgYSB0ZXh0dXJlLgotICAgIGlmIChtX2FsbG9jYXRlZFRl
eHR1cmVJZCAhPSB0ZXh0dXJlSWQgfHwgcmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRl
ZFRleHR1cmVTaXplKQorICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZSAhPSB0ZXh0dXJlSWQgfHwg
cmVxdWlyZWRUZXh0dXJlU2l6ZSAhPSBtX2FsbG9jYXRlZFRleHR1cmVTaXplKQogICAgICAgICBj
cmVhdGVUZXh0dXJlUmVjdChyZXF1aXJlZFRleHR1cmVTaXplLCBkaXJ0eVJlY3QsIHRleHR1cmVJ
ZCk7CiAgICAgZWxzZQogICAgICAgICB1cGRhdGVUZXh0dXJlUmVjdChkaXJ0eVJlY3QsIHRleHR1
cmVJZCk7CkBAIC0xNTAsNyArMTYwLDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0
ZVRleHR1cmVSZQogICAgIEFTU0VSVChiaXRtYXBTaXplID09IHJlcXVpcmVkVGV4dHVyZVNpemUp
OwogICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCByZXF1aXJlZFRl
eHR1cmVTaXplLndpZHRoKCksIHJlcXVpcmVkVGV4dHVyZVNpemUuaGVpZ2h0KCksIDAsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CiAKLSAgICBtX2FsbG9jYXRlZFRleHR1cmVJ
ZCA9IHRleHR1cmVJZDsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IHRleHR1cmVJZDsKICAgICBt
X2FsbG9jYXRlZFRleHR1cmVTaXplID0gcmVxdWlyZWRUZXh0dXJlU2l6ZTsKIAogICAgIHVwZGF0
ZUNvbXBsZXRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA2NTU3MikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDE2ICszNCwxNiBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNvbnRl
bnRMYXllckNocm9taXVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gQSBMYXllciB0
aGF0IGNvbnRhaW5zIGEgVmlkZW8gZWxlbWVudC4KLWNsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBMYXllckNocm9taXVtIHsKK2NsYXNzIFZpZGVvTGF5ZXJDaHJvbWl1bSA6IHB1Ymxp
YyBDb250ZW50TGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
VmlkZW9MYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9
IDApOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVDb250ZW50cyh1bnNpZ25lZCB0ZXh0dXJlSWQp
OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOwogCiBwcml2YXRlOgogICAgIFZp
ZGVvTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKQEAgLTUxLDgg
KzUxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCk7CiAgICAgdm9pZCB1cGRhdGVDb21w
bGV0ZWQoKTsKIAotICAgIHVuc2lnbmVkIG1fYWxsb2NhdGVkVGV4dHVyZUlkOwotICAgIEludFNp
emUgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZTsKICNpZiBQTEFURk9STShTS0lBKQogICAgIE93blB0
cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9jYW52YXM7CiAgICAgT3duUHRyPFBsYXRmb3JtQ29u
dGV4dFNraWE+IG1fc2tpYUNvbnRleHQ7Cg==
</data>
<flag name="review"
          id="53455"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>