<?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>103606</bug_id>
          
          <creation_ts>2012-11-29 00:31:52 -0800</creation_ts>
          <short_desc>WebGL: Add a class to abstract the status of the Image in texImage2D() and texSubImage2D()</short_desc>
          <delta_ts>2012-11-30 15:04:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jun Jiang">jun.a.jiang</reporter>
          <assigned_to name="Jun Jiang">jun.a.jiang</assigned_to>
          <cc>dino</cc>
    
    <cc>d-r</cc>
    
    <cc>kbr</cc>
    
    <cc>noam</cc>
    
    <cc>ojan</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>778770</commentid>
    <comment_count>0</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-29 00:31:52 -0800</bug_when>
    <thetext>In texImage2D and texSubImage2D, the status of the Image is extracted and kept in the function GraphicsContext3D::getImageData() and has some inconvenience.

There are no interface and guaranteed way to use the status of the Image outside of GraphicsContext3D::getImageData() safely. For example, you can not get the address of the Image data and operate it outside the scope of the function and there is at least a memory copy existed. The lifetime of some key status is constrained and only kept in in getImageData(). This prevents some potential optimizations and affect the flexibility of the code.

It can be solved by adding a ImageLocker class to abstract the status of the Image. Then the lifetime and validity are determined by the lifetime of the object. It provides flexibility on code refactoring and optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778797</commentid>
    <comment_count>1</comment_count>
      <attachid>176669</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-29 00:53:30 -0800</bug_when>
    <thetext>Created attachment 176669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779366</commentid>
    <comment_count>2</comment_count>
      <attachid>176669</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-11-29 13:04:05 -0800</bug_when>
    <thetext>Comment on attachment 176669
Patch

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

Thanks for doing this restructuring. It looks pretty good overall but a few changes are needed. Please upload a revised patch fixing these issues and I&apos;ll gladly r+ it. Please mark it cq? if you want it submitted to the commit queue (I strongly recommend you go through the commit queue since it touches nearly all the ports). Also, please don&apos;t forget to regenerate the ChangeLog if you rename the methods and classes as I suggested.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3629
&gt; +    void* imagePixelData = const_cast&lt;void*&gt;(imageLocker.imagePixelData());

Please fix the signature of texImage2DBase to take const void* instead of casting away const here.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3639
&gt; +    }

It&apos;s WebKit policy to keep patches focused and not introduce unrelated changes like this optimization. I would prefer you do it in a second patch, but since it&apos;s pretty trivial I won&apos;t argue if you want to do it here. Same for texSubImage2DImpl below.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3879
&gt; +    void* imagePixelData = const_cast&lt;void*&gt;(imageLocker.imagePixelData());

Please fix the signature of texSubImage2DBase to take const void* instead of casting away const here.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:879
&gt; +    // flags. Returns true upon success.

This comment is now out of date; please update it. In particular, ignoreGammaAndColorProfile is only given to the ImageLocker, and AlphaOp is now passed here directly. I think this method should also be renamed to &quot;packImageData&quot;. Suggested text:

Packs the contents of the given image, passed in |pixels|, into the passed Vector, according to the given format and type, and obeying the flipY and AlphaOp flags. Returns true upon success.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:882
&gt; +    class ImageLocker {

Upon seeing how this class is used, I think it should be named ImageExtractor. See further comments below.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:883
&gt; +    public:

Indent by two spaces here.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:885
&gt; +        bool getImageData(bool premultiplyAlpha, bool ignoreGammaAndColorProfile);

getImageData shouldn&apos;t be public. Having it be public means it could be called multiple times and I don&apos;t think the implementations are prepared to handle that. Please change the constructor to take &quot;Image* image, bool premultiplyAlpha, bool ignoreGammaAndColorProfile&quot; and call getImageData (or whatever it ends up being called) inside the constructor. Set a flag called m_succeeded (e.g., &quot;m_succeeded = getImageData(...)&quot;), add a &quot;bool succeeded()&quot; method returning that flag, and in WebGLRenderingContext, call succeeded() instead of getImageData. Also, please document explicitly that each platform needs to implement the destructor and getImageData. The constructor should be the first public method in the class; please move it up. Also, I think getImageData should now be renamed to something else, like extractImage -- it doesn&apos;t behave like a getter any more.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:887
&gt; +        ImageLocker(Image* image) {m_image = image;};

Please move the body of the constructor into GraphicsContext3D.cpp, since it will become non-trivial.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:888
&gt; +        const void* imagePixelData() {return m_imagePixelData;};

Please add spaces inside the braces and get rid of the &apos;;&apos;s at the end of the lines here and below.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:894
&gt; +    private:

Indent by two spaces here.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:902
&gt; +        CGImageRef cgImage;

These three members need to use the m_ naming convention.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:917
&gt; +    private:

Indentation is wrong here. Back up &quot;private&quot; by two spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779942</commentid>
    <comment_count>3</comment_count>
      <attachid>176925</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-30 01:48:50 -0800</bug_when>
    <thetext>Created attachment 176925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779948</commentid>
    <comment_count>4</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-30 01:56:23 -0800</bug_when>
    <thetext>Kenneth, thanks for your comments and suggestions. I had made changes accordingly and submitted it to commit queue. Please help to add more reviewers if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780424</commentid>
    <comment_count>5</comment_count>
      <attachid>176925</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-11-30 14:22:27 -0800</bug_when>
    <thetext>Comment on attachment 176925
Patch

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

Looks great. Thank you for pushing through this change. A couple of minor nits which are not blockers for committing in my opinion. If you wouldn&apos;t mind, please clean them up in a subsequent patch. Submitting this to the commit queue for you. r=me

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:877
&gt; +    // according to the given format and type, and obeying the flipY and premultiplyAlpha flags.

Typo: premultiplyAlpha -&gt; AlphaOp

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:900
&gt; +        // Return true upon success

Please use complete sentences in comments (end each sentence with a period).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780454</commentid>
    <comment_count>6</comment_count>
      <attachid>176925</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-30 15:04:53 -0800</bug_when>
    <thetext>Comment on attachment 176925
Patch

Clearing flags on attachment: 176925

Committed r136282: &lt;http://trac.webkit.org/changeset/136282&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780455</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-30 15:04:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176669</attachid>
            <date>2012-11-29 00:53:30 -0800</date>
            <delta_ts>2012-11-30 01:48:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103606-20121129164829.patch</filename>
            <type>text/plain</type>
            <size>38437</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MTA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2M2NjBhYzk5Y2ViY2E4
ZjVlNmQ3NTVkYTY1MzU2MGMyZTljZTAyNC4uNDUwZDRhZTBiODU0ZjA0ZTVlOGRhZWQ2OGEzNWVi
YTJlZDc1NmM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTExLTI5ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEFkZCBhIGNs
YXNzIHRvIGFic3RyYWN0IHRoZSBzdGF0dXMgb2YgdGhlIEltYWdlIGluIHRleEltYWdlMkQoKSBh
bmQgdGV4U3ViSW1hZ2UyRCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDM2MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbiB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIGZvciBXZWJHTCwgdGhl
IHN0YXR1cyBvZiB0aGUgSW1hZ2UgaXMgZXh0cmFjdGVkIGFuZCBrZXB0IGluIHRoZSBmdW5jdGlv
biBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKCkgYW5kIHByb3ZpZGVzIG5vIGludGVy
ZmFjZSBvciBndWFyYW50ZWVkIHdheSB0byB1c2UgdGhlIHN0YXR1cyBvZiB0aGUgSW1hZ2Ugb3V0
c2lkZSBvZiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKCkgc2FmZWx5LiBGb3IgZXhh
bXBsZSwgeW91IGNhbiBub3QgZ2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBJbWFnZSBkYXRhIGFuZCBv
cGVyYXRlIGl0IG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBmdW5jdGlvbiBhbmQgdGhlcmUgaXMg
YXQgbGVhc3QgYSBtZW1vcnkgY29weSBleGlzdGVkLgorICAgICAgIFRoaXMgcGF0Y2ggc29sdmVz
IHRoZSBpc3N1ZSBieSBhZGRpbmcgYSBJbWFnZUxvY2tlciBjbGFzcyB0byBhYnN0cmFjdCB0aGUg
c3RhdHVzIG9mIHRoZSBJbWFnZS4gVGhlIGxpZmV0aW1lIGFuZCB2YWxpZGl0eSBhcmUgZGV0ZXJt
aW5lZCBieSB0aGUgbGlmZXRpbWUgb2YgdGhlIG9iamVjdCBpbnN0ZWFkIG9mIHRoZSBzY29wZSBv
ZiBnZXRJbWFnZURhdGEoKS4gSXQgcHJvdmlkZXMgZmxleGliaWxpdHkgb24gY29kZSByZWZhY3Rv
cmluZyBhbmQgZnV0dXJlIG9wdGltaXphdGlvbnMuIAorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
SXQgaXMgYW4gY29kZSByZWZhY3RvcmluZyBwYXRjaC4KKworICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKEltYWdlTG9ja2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6SW1h
Z2VMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9j
a2VyOjppbWFnZVBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VMb2NrZXI6OmltYWdlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlTG9ja2VyOjppbWFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmltYWdlU291cmNlRm9ybWF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6aW1hZ2VBbHBoYU9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6aW1h
Z2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05h
dGl2ZUltYWdlUHRyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fklt
YWdlTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdlTG9ja2Vy
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcik6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUxvY2tlcjo6fkltYWdlTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdl
TG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorCiAyMDEyLTExLTI5ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgUmVnaW9uc10gRml4
IGNvbnRlbnQgbm9kZSByZW5kZXJlcnMgb3JkZXJpbmcgaW5zaWRlIHRoZSBuYW1lZCBmbG93IHRo
cmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKaW5kZXggNzBjYjg1M2MzNzlmZjA2NWI5ODdkOWRlZTEwNDM1N2QyODFiZGI4
MS4uY2UzNzI5Y2RmNmM3YzJhMTczNzE4N2QyMWZhYTgzNjM1OWVlMzVhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBA
IC0zNjE5LDE0ICszNjE5LDI4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFn
ZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgaWYgKCF2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQog
ICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFtX2Nv
bnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFksIHByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkUsIGRhdGEpKSB7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2Vy
IGltYWdlTG9ja2VyKGltYWdlKTsKKyAgICBpZiAoIWltYWdlTG9ja2VyLmdldEltYWdlRGF0YShw
cmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT05FKSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0
YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VMb2NrZXIuaW1hZ2VTb3VyY2VGb3JtYXQo
KTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VMb2NrZXIu
aW1hZ2VBbHBoYU9wKCk7CisgICAgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBjb25zdF9jYXN0PHZv
aWQqPihpbWFnZUxvY2tlci5pbWFnZVBpeGVsRGF0YSgpKTsKKworICAgIGJvb2wgbmVlZENvbnZl
cnNpb24gPSB0cnVlOworICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZv
cm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9w
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCisgICAgICAg
IG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250
ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBl
LCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VMb2NrZXIuaW1hZ2VXaWR0
aCgpLCBpbWFnZUxvY2tlci5pbWFnZUhlaWdodCgpLCBpbWFnZUxvY2tlci5pbWFnZVNvdXJjZVVu
cGFja0FsaWdubWVudCgpLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFn
ZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBp
ZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4SW1hZ2Uy
REJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFn
ZS0+aGVpZ2h0KCksIDAsCi0gICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLmRh
dGEoKSwgZWMpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwogICAgIGlm
IChtX3VucGFja0FsaWdubWVudCAhPSAxKQogICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7
CiB9CkBAIC0zODU1LDE0ICszODY5LDI4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiAgICAg
aWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBmb3Jt
YXQsIHR5cGUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252
ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FLCBkYXRhKSkgeworICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUxvY2tlciBpbWFnZUxvY2tlcihpbWFnZSk7ICAKKyAgICBpZiAoIWlt
YWdlTG9ja2VyLmdldEltYWdlRGF0YShwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKSkgewogICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1Yklt
YWdlMkQiLCAiYmFkIGltYWdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNvdXJjZURhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlTG9j
a2VyLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3Ag
YWxwaGFPcCA9IGltYWdlTG9ja2VyLmltYWdlQWxwaGFPcCgpOworICAgIHZvaWQqIGltYWdlUGl4
ZWxEYXRhID0gY29uc3RfY2FzdDx2b2lkKj4oaW1hZ2VMb2NrZXIuaW1hZ2VQaXhlbERhdGEoKSk7
CisKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhp
bmcgJiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2Ug
eworICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgaW1hZ2VQ
aXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQs
IGltYWdlTG9ja2VyLmltYWdlV2lkdGgoKSwgaW1hZ2VMb2NrZXIuaW1hZ2VIZWlnaHQoKSwgaW1h
Z2VMb2NrZXIuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAg
IG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1F
TlQsIDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSwgZWMpOworICAgIHRleFN1YkltYWdlMkRC
YXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFn
ZS0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6
IGltYWdlUGl4ZWxEYXRhLCBlYyk7CiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAg
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAppbmRleCBhOThiNTQ2
YmFmN2U4MTNiOTI4OTgyYTdkYzcyOTM3NWM1M2M0ODRmLi5kYWVhNzNlYWM5Mzc2ZmFlOGUyZGNk
YzNkMGIwODFhMjNkZWI3ZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBAIC0xNjgsMzAgKzE2OCw1MSBAQCBH
QzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eQogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1I7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEoSW1h
Z2UqIGltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgZmxpcFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIGlmICgh
aW1hZ2UpCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKAorICAgIElt
YWdlKiBpbWFnZSwKKyAgICB2b2lkKiBwaXhlbHMsCisgICAgR0MzRGVudW0gZm9ybWF0LAorICAg
IEdDM0RlbnVtIHR5cGUsCisgICAgYm9vbCBmbGlwWSwKKyAgICBBbHBoYU9wIGFscGhhT3AsCisg
ICAgU291cmNlRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIAorICAgIHVuc2lnbmVkIHdpZHRoLAor
ICAgIHVuc2lnbmVkIGhlaWdodCwKKyAgICB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQs
CisgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQoreworICAgIGlmICghcGl4ZWxzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBwYWNrZWRTaXplOworICAgIC8vIE91dHB1
dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCisgICAgaWYgKGNvbXB1
dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnBhY2tl
ZFNpemUsIDApICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghZ2V0SW1hZ2VEYXRhKGltYWdlLCBmb3JtYXQsIHR5cGUsIHByZW11
bHRpcGx5QWxwaGEsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBkYXRhKSkKKyAgICBkYXRh
LnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAgIGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLAorICAgICAgICBzb3VyY2VGb3JtYXQsCisgICAg
ICAgIHdpZHRoLAorICAgICAgICBoZWlnaHQsCisgICAgICAgIHNvdXJjZVVucGFja0FsaWdubWVu
dCwKKyAgICAgICAgZm9ybWF0LAorICAgICAgICB0eXBlLAorICAgICAgICBhbHBoYU9wLAorICAg
ICAgICBkYXRhLmRhdGEoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZmxpcFkp
IHsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21w
b25lbnQ7CisgICAgICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21w
b25lbnQ7CiAgICAgICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1h
dCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNv
bXBvbmVudHNQZXJQaXhlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50KSkKKyAgICAgICAgICAgICZjb21wb25lbnRzUGVyUGl4
ZWwsCisgICAgICAgICAgICAmYnl0ZXNQZXJDb21wb25lbnQpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAvLyBUaGUgaW1hZ2UgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCwgYW5k
IHdlIHVwbG9hZCBpdCBhcyBzdWNoLgotICAgICAgICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25t
ZW50ID0gMTsKLSAgICAgICAgZmxpcFZlcnRpY2FsbHkoZGF0YS5kYXRhKCksIGltYWdlLT53aWR0
aCgpLCBpbWFnZS0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNQ
ZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICB1bnBh
Y2tBbGlnbm1lbnQpOworICAgICAgICB1bnNpZ25lZCB1bnBhY2tBbGlnbm1lbnQgPSAxOworICAg
ICAgICBmbGlwVmVydGljYWxseShkYXRhLmRhdGEoKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAg
ICAgIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAorICAgICAgICAgICAg
dW5wYWNrQWxpZ25tZW50KTsKICAgICB9CisKICAgICBpZiAoSW1hZ2VPYnNlcnZlciAqb2JzZXJ2
ZXIgPSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQogICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdyhp
bWFnZSk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA0ZWRlMGY4MTdmNmMwYzMwYjdh
M2U1NTI4OTZkZTA2ZDQ3M2IyOTAwLi4xMzUwNzA0MGY4ZDZkNmRjNTliZWRjYzg2MzE3MThkNTIw
NTZjNGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250
ZXh0M0RfaAogI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRF9oCiAKKyNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCkBAIC0xMDEsNiArMTAyLDcgQEAgY2xhc3MgRXh0ZW5z
aW9uczNEUXQ7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbWFnZUJ1
ZmZlcjsKK2NsYXNzIEltYWdlU291cmNlOwogY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSW50UmVj
dDsKIGNsYXNzIEludFNpemU7CkBAIC01NjQsMTggKzU2Niw2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGltYWdlU2l6ZUluQnl0
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBw
YWRkaW5nSW5CeXRlcyk7CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdp
dmVuIEltYWdlIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCi0gICAgLy8gcGFja2luZyB0aGUgcGl4
ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKLSAgICAvLyBh
bmQgb2JleWluZyB0aGUgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGFuZCBpZ25vcmVHYW1tYUFu
ZENvbG9yUHJvZmlsZQotICAgIC8vIGZsYWdzLiBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgot
ICAgIHN0YXRpYyBib29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2UqLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQogICAgIC8vIEV4dHJh
Y3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZCBW
ZWN0b3IsCiAgICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdp
dmVuIGZvcm1hdCBhbmQgdHlwZSwKICAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHBy
ZW11bHRpcGx5QWxwaGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQpAQCAtODc0LDM1ICs4NjQsNiBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQzNE
ZW51bSk7CiAKLSAgcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRChBdHRyaWJ1dGVzLCBI
b3N0V2luZG93KiwgUmVuZGVyU3R5bGUgPSBSZW5kZXJPZmZzY3JlZW4pOwotCi0gICAgLy8gRWFj
aCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2Qu
Ci0gICAgLy8KLSAgICAvLyBHZXRzIHRoZSBkYXRhIGZvciB0aGUgZ2l2ZW4gSW1hZ2UgaW50byBv
dXRwdXRWZWN0b3IgaW4gdGhlCi0gICAgLy8gZm9ybWF0IHNwZWNpZmllZCBieSB0aGUgKE9wZW5H
TC1zdHlsZSkgZm9ybWF0IGFuZCB0eXBlCi0gICAgLy8gYXJndW1lbnRzLiBEZXNwaXRlIHRoZSBm
YWN0IHRoYXQgdGhlIG91dHB1dFZlY3RvciBjb250YWlucwotICAgIC8vIHVpbnQ4X3QsIGlmIHRo
ZSBmb3JtYXQgYW5kIHR5cGUgc3BlY2lmeSBwYWNrZWQgcGl4ZWxzLCB0aGVuCi0gICAgLy8gaXQg
d2lsbCBlc3NlbnRpYWxseSBjb250YWluIHVpbnQxNl90IGFmdGVyIHRoZSBleHRyYWN0aW9uCi0g
ICAgLy8gcHJvY2Vzcy4KLSAgICAvLwotICAgIC8vIElmIHByZW11bHRpcGx5QWxwaGEgaXMgdHJ1
ZSwgdGhlIGFscGhhIGNoYW5uZWwsIGlmIGFueSwKLSAgICAvLyB3aWxsIGJlIG11bHRpcGxpZWQg
aW50byB0aGUgY29sb3IgY2hhbm5lbHMgZHVyaW5nIHRoZQotICAgIC8vIGV4dHJhY3Rpb24gcHJv
Y2Vzcy4gVGhpcyBwcmVtdWx0aXBsaWNhdGlvbiBvY2N1cnMgYmVmb3JlCi0gICAgLy8gYW55IHBh
Y2tpbmcgb2YgcGl4ZWwgZGF0YS4KLSAgICAvLwotICAgIC8vIElmIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlIGlzIHRydWUsIGdhbW1hIGNvcnJlY3Rpb24gYW5kIElDQwotICAgIC8vIHByb2Zp
bGUgd29uJ3QgYmUgYXBwbGllZC4KLSAgICAvLwotICAgIC8vIE5vIHZlcnRpY2FsIGZsaXAgb2Yg
dGhlIGltYWdlIGRhdGEgaXMgcGVyZm9ybWVkIGJ5IHRoaXMKLSAgICAvLyBtZXRob2QuCi0gICAg
c3RhdGljIGJvb2wgZ2V0SW1hZ2VEYXRhKEltYWdlKiwKLSAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3Rvcik7Ci0KICAgICAvLyBQb3NzaWJs
ZSBhbHBoYSBvcGVyYXRpb25zIHRoYXQgbWF5IG5lZWQgdG8gb2NjdXIgZHVyaW5nCiAgICAgLy8g
cGl4ZWwgcGFja2luZy4gRklYTUU6IGtBbHBoYURvVW5tdWx0aXBseSBpcyBsb3NzeSBhbmQgbXVz
dAogICAgIC8vIGJlIHJlbW92ZWQuCkBAIC05MTIsNiArODczLDUwIEBAIHB1YmxpYzoKICAgICAg
ICAgQWxwaGFEb1VubXVsdGlwbHkgPSAyCiAgICAgfTsKIAorICAgIC8vIEV4dHJhY3RzIHRoZSBj
b250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2UgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKKyAgICAv
LyBwYWNraW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFu
ZCB0eXBlLAorICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwg
YW5kIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlCisgICAgLy8gZmxhZ3MuIFJldHVybnMgdHJ1
ZSB1cG9uIHN1Y2Nlc3MuCisgICAgc3RhdGljIGJvb2wgZXh0cmFjdEltYWdlRGF0YShJbWFnZSos
IHZvaWQqIHBpeGVscywgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIGZsaXBZ
LCBBbHBoYU9wLCBTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpOworCisgICAgY2xhc3MgSW1hZ2VMb2NrZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgfkltYWdlTG9ja2VyKCk7CisgICAgICAgIGJvb2wgZ2V0SW1hZ2VEYXRhKGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7CisKKyAg
ICAgICAgSW1hZ2VMb2NrZXIoSW1hZ2UqIGltYWdlKSB7bV9pbWFnZSA9IGltYWdlO307CisgICAg
ICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhKCkge3JldHVybiBtX2ltYWdlUGl4ZWxEYXRh
O307CisgICAgICAgIHVuc2lnbmVkIGltYWdlV2lkdGgoKSB7cmV0dXJuIG1faW1hZ2VXaWR0aDt9
OworICAgICAgICB1bnNpZ25lZCBpbWFnZUhlaWdodCgpIHtyZXR1cm4gbV9pbWFnZUhlaWdodDt9
OworICAgICAgICBTb3VyY2VEYXRhRm9ybWF0IGltYWdlU291cmNlRm9ybWF0KCkge3JldHVybiBt
X2ltYWdlU291cmNlRm9ybWF0O307CisgICAgICAgIEFscGhhT3AgaW1hZ2VBbHBoYU9wKCkge3Jl
dHVybiBtX2FscGhhT3A7fQorICAgICAgICB1bnNpZ25lZCBpbWFnZVNvdXJjZVVucGFja0FsaWdu
bWVudCgpIHtyZXR1cm4gbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDt9OyAKKyAgICBwcml2
YXRlOgorI2lmIFVTRShTS0lBKQorICAgICAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBtX25h
dGl2ZUltYWdlOworICAgICAgICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZTsKKyNlbGlmIFVT
RShDQUlSTykKKyAgICAgICAgSW1hZ2VTb3VyY2UqIG1fZGVjb2RlcjsKKyAgICAgICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gbV9pbWFnZVN1cmZhY2U7CisjZWxpZiBVU0UoQ0cpCisgICAgICAg
IENHSW1hZ2VSZWYgY2dJbWFnZTsKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGRlY29k
ZWRJbWFnZTsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcGl4ZWxEYXRhOworI2VsaWYg
UExBVEZPUk0oUVQpCisgICAgICAgIFFJbWFnZSBtX3F0SW1hZ2U7CisjZW5kaWYKKyAgICAgICAg
SW1hZ2UqIG1faW1hZ2U7CisgICAgICAgIGNvbnN0IHZvaWQqIG1faW1hZ2VQaXhlbERhdGE7Cisg
ICAgICAgIHVuc2lnbmVkIG1faW1hZ2VXaWR0aDsKKyAgICAgICAgdW5zaWduZWQgbV9pbWFnZUhl
aWdodDsKKyAgICAgICAgU291cmNlRGF0YUZvcm1hdCBtX2ltYWdlU291cmNlRm9ybWF0OworICAg
ICAgICBBbHBoYU9wIG1fYWxwaGFPcDsKKyAgICAgICAgdW5zaWduZWQgbV9pbWFnZVNvdXJjZVVu
cGFja0FsaWdubWVudDsKKyAgICB9OworCisgICAgcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRl
eHQzRChBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgUmVuZGVyU3R5bGUgPSBSZW5kZXJPZmZzY3Jl
ZW4pOworCiAgICAgLy8gSGVscGVyIGZvciBnZXRJbWFnZURhdGEgd2hpY2ggaW1wbGVtZW50cyBw
YWNraW5nIG9mIHBpeGVsCiAgICAgLy8gZGF0YSBpbnRvIHRoZSBzcGVjaWZpZWQgT3BlbkdMIGRl
c3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KICAgICAvLyBBIHNvdXJjZVVucGFja0FsaWdubWVu
dCBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBzb3VyY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCmluZGV4IGM5OGY4YzI1YTlhODc2
YzRhYjZlNDA4NjhjMmRiY2IyNzZkMGRjZDAuLjA1MzBhZGUxMjc5N2RmMGYyMDRhODU4ODJiODVj
YjVhNGEwM2NjZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L05hdGl2ZUltYWdlUHRyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TmF0aXZlSW1hZ2VQdHIuaApAQCAtMzQsNiArMzQsNyBAQCBjbGFzcyB3eEdyYXBoaWNzQml0bWFw
OwogI2VsaWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsKICNl
bGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUXQuaCIKICNpbmNsdWRlIDxx
Z2xvYmFsLmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFQaXhtYXA7CkBAIC00MSw2ICs0
Miw3IEBAIFFUX0VORF9OQU1FU1BBQ0UKICNlbGlmIFVTRShDQUlSTykKICNpbmNsdWRlICJOYXRp
dmVJbWFnZUNhaXJvLmgiCiAjZWxpZiBVU0UoU0tJQSkKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNr
aWEuaCIKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE5hdGl2ZUltYWdlU2tpYTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggNzAzM2ZhNmRhNjc2MTAxMzZiNDQz
YmY2OTFkMzFjNmYzNmQ0NjBmNS4uMWE0YTFhZTYwYTIzZDc3M2Y5YjNiYjk2ZTBkYWQxYTY3NDAz
YzZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTE2Myw1NiArMTYz
LDYwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogICAgIDo6Z2xE
ZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWdu
ZWQgaW50IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZSwgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGljc0NvbnRl
eHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcigpCiB7Ci0gICAgaWYgKCFpbWFnZSkKKyAg
ICBpZiAobV9kZWNvZGVyKQorICAgICAgICBkZWxldGUgbV9kZWNvZGVyOworfQorCitib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKK3sKKyAgICBpZiAoIW1f
aW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBXZSBuZWVkIHRoaXMgdG8gc3Rh
eSBpbiBzY29wZSBiZWNhdXNlIHRoZSBuYXRpdmUgaW1hZ2UgaXMganVzdCBhIHNoYWxsb3cgY29w
eSBvZiB0aGUgZGF0YS4KLSAgICBJbWFnZVNvdXJjZSBkZWNvZGVyKHByZW11bHRpcGx5QWxwaGEg
PyBJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkIDogSW1hZ2VTb3VyY2U6OkFscGhhTm90
UHJlbXVsdGlwbGllZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IElt
YWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpOwotICAgIEFscGhhT3AgYWxw
aGFPcCA9IEFscGhhRG9Ob3RoaW5nOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdl
U3VyZmFjZTsKLSAgICBpZiAoaW1hZ2UtPmRhdGEoKSkgewotICAgICAgICBkZWNvZGVyLnNldERh
dGEoaW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CisgICAgbV9kZWNvZGVyID0gbmV3IEltYWdlU291cmNl
KHByZW11bHRpcGx5QWxwaGEgPyBJbWFnZVNvdXJjZTo6QWxwaGFQcmVtdWx0aXBsaWVkIDogSW1h
Z2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUgPyBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVJZ25vcmVkIDogSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CisgICAgaWYgKCFtX2RlY29kZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBJbWFnZVNvdXJjZSYgZGVjb2RlciA9ICptX2RlY29k
ZXI7CisKKyAgICBtX2FscGhhT3AgPSBBbHBoYURvTm90aGluZzsKKyAgICBpZiAobV9pbWFnZS0+
ZGF0YSgpKSB7CisgICAgICAgIGRlY29kZXIuc2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUp
OwogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpIHx8ICFkZWNvZGVyLmZyYW1lSXND
b21wbGV0ZUF0SW5kZXgoMCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIE93
blB0cjxOYXRpdmVJbWFnZUNhaXJvPiBuYXRpdmVJbWFnZSA9IGFkb3B0UHRyKGRlY29kZXIuY3Jl
YXRlRnJhbWVBdEluZGV4KDApKTsKLSAgICAgICAgaW1hZ2VTdXJmYWNlID0gbmF0aXZlSW1hZ2Ut
PnN1cmZhY2UoKTsKKyAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBuYXRpdmVJbWFnZS0+c3VyZmFj
ZSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlU3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpLT5zdXJmYWNlKCk7CisgICAgICAgIG1faW1hZ2VTdXJmYWNl
ID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c3VyZmFjZSgpOwogICAg
ICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBhbHBoYU9wID0gQWxwaGFE
b1VubXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsK
ICAgICB9CiAKLSAgICBpZiAoIWltYWdlU3VyZmFjZSkKKyAgICBpZiAoIW1faW1hZ2VTdXJmYWNl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIGludCBoZWlnaHQgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICBp
ZiAoIXdpZHRoIHx8ICFoZWlnaHQpCisgICAgbV9pbWFnZVdpZHRoID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOworICAgIG1faW1hZ2VIZWlnaHQg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOwor
ICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFtX2ltYWdlSGVpZ2h0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KGltYWdlU3Vy
ZmFjZS5nZXQoKSkgIT0gQ0FJUk9fRk9STUFUX0FSR0IzMikKKyAgICBpZiAoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZm9ybWF0KG1faW1hZ2VTdXJmYWNlLmdldCgpKSAhPSBDQUlST19GT1JNQVRf
QVJHQjMyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBpbnQgc3JjVW5w
YWNrQWxpZ25tZW50ID0gMTsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBzaXplX3QgYnl0ZXNQ
ZXJSb3cgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9pbWFnZVN1cmZhY2UuZ2V0
KCkpOwogICAgIHNpemVfdCBiaXRzUGVyUGl4ZWwgPSAzMjsKLSAgICB1bnNpZ25lZCBpbnQgcGFk
ZGluZyA9IGJ5dGVzUGVyUm93IC0gYml0c1BlclBpeGVsIC8gOCAqIHdpZHRoOworICAgIHVuc2ln
bmVkIHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhlbCAvIDggKiBtX2ltYWdlV2lk
dGg7CiAgICAgaWYgKHBhZGRpbmcpIHsKICAgICAgICAgc3JjVW5wYWNrQWxpZ25tZW50ID0gcGFk
ZGluZyArIDE7CiAgICAgICAgIHdoaWxlIChieXRlc1BlclJvdyAlIHNyY1VucGFja0FsaWdubWVu
dCkKICAgICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25tZW50OwogICAgIH0KIAotICAgIHVuc2ln
bmVkIGludCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2Vk
IChhbGlnbm1lbnQgPT0gMSkuCi0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1h
dCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnBhY2tlZFNpemUsIDApICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG91dHB1dFZlY3Rv
ci5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICByZXR1cm4gcGFja1BpeGVscyhjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSksIFNvdXJjZUZvcm1hdEJHUkE4
LAotICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIHNyY1VucGFja0FsaWdubWVu
dCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsKKyAgICBtX2lt
YWdlUGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2ltYWdlU3VyZmFj
ZS5nZXQoKSk7CisgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IFNvdXJjZUZvcm1hdEJHUkE4Owor
ICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSBzcmNVbnBhY2tBbGlnbm1lbnQ7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52
YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQg
aW1hZ2VIZWlnaHQsIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgUGxhdGZvcm1D
b250ZXh0Q2Fpcm8qIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCmluZGV4IGFjMDBjNDNk
ZTBhYTRkYjExN2FlNjEyNGI1ODQ2MzgxYjQ5NzRmZTYuLjViYTc1N2YzMjU0MzBjNGExMDIxNWE3
Y2QzZDQ3N2E0ODYyNDY5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCkBAIC04OSwzNCArODks
MzEgQEAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0IGdldFNvdXJj
ZURhdGFGb3JtYXQodW5zaWduZWQgaW50IGNvbXAKICAgICByZXR1cm4gZm9ybWF0VGFibGVbZm9y
bWF0QmFzZV1bKGlzMTZCaXRGb3JtYXQgPyAyIDogMCkgKyAoYmlnRW5kaWFuID8gMSA6IDApXTsK
IH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
dWludDhfdD4mIG91dHB1dFZlY3RvcikKK0dyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6
fkltYWdlTG9ja2VyKCkKIHsKLSAgICBpZiAoIWltYWdlKQorfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKK3sKKyAgICBpZiAoIW1faW1hZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBDR0ltYWdlUmVmIGNnSW1hZ2U7Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGRlY29kZWRJbWFnZTsKLSAgICBib29sIGhhc0FscGhhID0gaW1hZ2Ut
PmlzQml0bWFwSW1hZ2UoKSA/IGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpIDogdHJ1ZTsK
LSAgICBpZiAoKGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJl
bXVsdGlwbHlBbHBoYSkpICYmIGltYWdlLT5kYXRhKCkpIHsKKyAgICBib29sIGhhc0FscGhhID0g
bV9pbWFnZS0+aXNCaXRtYXBJbWFnZSgpID8gbV9pbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEo
KSA6IHRydWU7CisgICAgaWYgKChpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSB8fCAoaGFzQWxw
aGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBtX2ltYWdlLT5kYXRhKCkpIHsKICAgICAgICAg
SW1hZ2VTb3VyY2UgZGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8g
SW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpOwotICAgICAgICBkZWNvZGVyLnNldERhdGEoaW1h
Z2UtPmRhdGEoKSwgdHJ1ZSk7CisgICAgICAgIGRlY29kZXIuc2V0RGF0YShtX2ltYWdlLT5kYXRh
KCksIHRydWUpOwogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihkZWNvZGVyLmNy
ZWF0ZUZyYW1lQXRJbmRleCgwKSk7CiAgICAgICAgIGNnSW1hZ2UgPSBkZWNvZGVkSW1hZ2UuZ2V0
KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JD
dXJyZW50RnJhbWUoKTsKKyAgICAgICAgY2dJbWFnZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFjZ0ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7Ci0gICAgc2l6
ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7Ci0gICAgaWYgKCF3aWR0aCB8
fCAhaGVpZ2h0KQorICAgIG1faW1hZ2VXaWR0aCA9IENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKTsK
KyAgICBtX2ltYWdlSGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKKyAgICBpZiAo
IW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gU2VlIHdoZXRoZXIgdGhlIGltYWdlIGlzIHVzaW5nIGFuIGluZGV4ZWQgY29sb3Ig
c3BhY2UsIGFuZCBpZgpAQCAtMTMxLDcgKzEyOCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAgICAgICAgIC8vIHRoZSBjb2xvciB0YWJsZSwg
d2hpY2ggd291bGQgYWxsb3cgdXMgdG8gYXZvaWQgcHJlbXVsdGlwbHlpbmcgdGhlCiAgICAgICAg
IC8vIGFscGhhIGNoYW5uZWwuIENyZWF0aW9uIG9mIGEgYml0bWFwIGNvbnRleHQgd2l0aCBhbiBh
bHBoYSBjaGFubmVsCiAgICAgICAgIC8vIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHVubGVzcyBpdCdz
IHByZW11bHRpcGxpZWQuCi0gICAgICAgIGJpdG1hcENvbnRleHQuYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUoMCwgd2lkdGgsIGhlaWdodCwgOCwgd2lkdGggKiA0LAorICAgICAgICBiaXRt
YXBDb250ZXh0LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIG1faW1hZ2VXaWR0aCwg
bV9pbWFnZUhlaWdodCwgOCwgbV9pbWFnZVdpZHRoICogNCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkp
OwogICAgICAgICBpZiAoIWJpdG1hcENvbnRleHQpCkBAIC0xMzksNyArMTM2LDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKIAogICAgICAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7CiAgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGJpdG1hcENvbnRl
eHQuZ2V0KCksIGtDR0ludGVycG9sYXRpb25Ob25lKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0lt
YWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCks
IGNnSW1hZ2UpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQo
KSwgQ0dSZWN0TWFrZSgwLCAwLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQpLCBjZ0ltYWdl
KTsKIAogICAgICAgICAvLyBOb3cgZGlzY2FyZCB0aGUgb3JpZ2luYWwgQ0cgaW1hZ2UgYW5kIHJl
cGxhY2UgaXQgd2l0aCBhIGNvcHkgZnJvbSB0aGUgYml0bWFwIGNvbnRleHQuCiAgICAgICAgIGRl
Y29kZWRJbWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRl
eHQuZ2V0KCkpKTsKQEAgLTE5NCwxOCArMTkxLDE4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBbHBo
YU9wIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKKyAgICBtX2FscGhhT3AgPSBBbHBo
YURvTm90aGluZzsKICAgICBBbHBoYUZvcm1hdCBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Tm9u
ZTsKICAgICBzd2l0Y2ggKENHSW1hZ2VHZXRBbHBoYUluZm8oY2dJbWFnZSkpIHsKICAgICBjYXNl
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Q6CiAgICAgICAgIGlmICghcHJlbXVsdGlw
bHlBbHBoYSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsK
KyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OwogICAgICAgICBhbHBo
YUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Uga0NH
SW1hZ2VBbHBoYUZpcnN0OgogICAgICAgICAvLyBUaGlzIHBhdGggaXMgb25seSBhY2Nlc3NpYmxl
IGZvciBNYWNPUyBlYXJsaWVyIHRoYW4gMTAuNi40LgogICAgICAgICBpZiAocHJlbXVsdGlwbHlB
bHBoYSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7Cisg
ICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CiAgICAgICAgIGFscGhh
Rm9ybWF0ID0gQWxwaGFGb3JtYXRGaXJzdDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBrQ0dJ
bWFnZUFscGhhTm9uZVNraXBGaXJzdDoKQEAgLTIxNCwxMiArMjExLDEyIEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2Uga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OgogICAgICAgICBpZiAoIXBy
ZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb1VubXVs
dGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKICAgICAg
ICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdExhc3Q7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2Uga0NHSW1hZ2VBbHBoYUxhc3Q6CiAgICAgICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQotICAg
ICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsKKyAgICAgICAgICAg
IG1fYWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsKICAgICAgICAgYWxwaGFGb3JtYXQgPSBB
bHBoYUZvcm1hdExhc3Q7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5v
bmVTa2lwTGFzdDoKQEAgLTIzMSwzMyArMjI4LDI5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICBTb3VyY2VEYXRhRm9ybWF0IHNyY0RhdGFGb3JtYXQgPSBnZXRT
b3VyY2VEYXRhRm9ybWF0KGNvbXBvbmVudHNQZXJQaXhlbCwgYWxwaGFGb3JtYXQsIGJpdHNQZXJD
b21wb25lbnQgPT0gMTYsIGJpZ0VuZGlhblNvdXJjZSk7Ci0gICAgaWYgKHNyY0RhdGFGb3JtYXQg
PT0gU291cmNlRm9ybWF0TnVtRm9ybWF0cykKKworICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBn
ZXRTb3VyY2VEYXRhRm9ybWF0KGNvbXBvbmVudHNQZXJQaXhlbCwgYWxwaGFGb3JtYXQsIGJpdHNQ
ZXJDb21wb25lbnQgPT0gMTYsIGJpZ0VuZGlhblNvdXJjZSk7CisgICAgaWYgKG1faW1hZ2VTb3Vy
Y2VGb3JtYXQgPT0gU291cmNlRm9ybWF0TnVtRm9ybWF0cykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcGl4ZWxEYXRhOwogICAgIHBpeGVsRGF0YS5h
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihjZ0lt
YWdlKSkpOwogICAgIGlmICghcGl4ZWxEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVUludDgqIHJnYmEgPSBDRkRhdGFHZXRCeXRlUHRyKHBpeGVsRGF0YS5nZXQoKSk7CiAK
LSAgICB1bnNpZ25lZCBpbnQgcGFja2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdo
dGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgotICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5C
eXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZwYWNrZWRTaXplLCAwKSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBv
dXRwdXRWZWN0b3IucmVzaXplKHBhY2tlZFNpemUpOworICAgIG1faW1hZ2VQaXhlbERhdGEgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihDRkRhdGFHZXRCeXRlUHRyKHBpeGVsRGF0YS5n
ZXQoKSkpOwogCiAgICAgdW5zaWduZWQgaW50IHNyY1VucGFja0FsaWdubWVudCA9IDA7CiAgICAg
c2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGNnSW1hZ2UpOwotICAg
IHVuc2lnbmVkIGludCBwYWRkaW5nID0gYnl0ZXNQZXJSb3cgLSBiaXRzUGVyUGl4ZWwgLyA4ICog
d2lkdGg7CisgICAgdW5zaWduZWQgcGFkZGluZyA9IGJ5dGVzUGVyUm93IC0gYml0c1BlclBpeGVs
IC8gOCAqIG1faW1hZ2VXaWR0aDsKICAgICBpZiAocGFkZGluZykgewogICAgICAgICBzcmNVbnBh
Y2tBbGlnbm1lbnQgPSBwYWRkaW5nICsgMTsKICAgICAgICAgd2hpbGUgKGJ5dGVzUGVyUm93ICUg
c3JjVW5wYWNrQWxpZ25tZW50KQogICAgICAgICAgICAgKytzcmNVbnBhY2tBbGlnbm1lbnQ7CiAg
ICAgfQotICAgIGJvb2wgcnQgPSBwYWNrUGl4ZWxzKHJnYmEsIHNyY0RhdGFGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIHNyY1VucGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwotICAgIHJl
dHVybiBydDsKKworICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSBzcmNVbnBhY2tB
bGlnbm1lbnQ7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGlt
YWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2FudmFzSGVp
Z2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RD
bHV0dGVyLmNwcAppbmRleCA3ZGYxZWU5MmRiNTkzYmY3NzAwODE3ZDUyYWQ1YjgzNTlmMDc5ZmIx
Li45ZDFhYjE0M2I1ODY2YmQ4N2JhNzUwYjllYzI2NzVkZjFhYmM1ZjBhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNE
Q2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCkBAIC01Niw3ICs1NiwxMSBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCB1
bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBWZWN0b3I8dWludDhfdD4mIG91
dHB1dFZlY3RvcikKK0dyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdlTG9ja2Vy
KCkKK3sKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmdldEltYWdl
RGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNERWZsLmNwcAppbmRleCAyZTJhNDkzMTM4OTAzMmMzMDZkMzZjZmFlMWJkOTBkNjRi
MTk4NTAzLi41ZWZmZTJkZTQzZjk2NTc0YmVmMjUzMGE2MmIzMjMwYmY3MDExNTg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzREVmbC5jcHAKQEAgLTI0MSw3ICsyNDEsMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJiBzaXplKQogfQog
I2VuZGlmCiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSosIEdD
M0RlbnVtIC8qIGZvcm1hdCAqLywgR0MzRGVudW0gLyogdHlwZSAqLywgYm9vbCAvKiBwcmVtdWx0
aXBseUFscGhhICovLCBib29sIC8qIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlICovLCBWZWN0
b3I8dWludDhfdD4mIC8qIG91dHB1dFZlY3RvciAqLykKK0dyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUxvY2tlcjo6fkltYWdlTG9ja2VyKCkKK3sKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IGYyMDYzY2ViY2I3ZDQxMjE1
Yzc4ZTNlODEyNzk5MjdlMjEwODdlMTUuLmYxNjcyYTk2MjExNDRjOTM4ZThjY2I2OGZmNDE0MzUz
MjJjMjcxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC00ODYsNTQgKzQ4Niw1MyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNp
emUmIHNpemUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VE
YXRhKEltYWdlKiBpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBy
ZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKK0dyYXBoaWNzQ29udGV4
dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdlTG9ja2VyKCkKK3sKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKLSAgICBpZiAoIWltYWdlKQorICAgIGlmICghbV9p
bWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUUltYWdlIHF0SW1hZ2U7CiAgICAg
Ly8gSXMgaW1hZ2UgYWxyZWFkeSBsb2FkZWQ/IElmIG5vdCwgbG9hZCBpdC4KLSAgICBpZiAoaW1h
Z2UtPmRhdGEoKSkKLSAgICAgICAgcXRJbWFnZSA9IFFJbWFnZTo6ZnJvbURhdGEocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1Y2hhcio+KGltYWdlLT5kYXRhKCktPmRhdGEoKSksIGltYWdlLT5kYXRh
KCktPnNpemUoKSk7CisgICAgaWYgKG1faW1hZ2UtPmRhdGEoKSkKKyAgICAgICAgbV9xdEltYWdl
ID0gUUltYWdlOjpmcm9tRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4obV9pbWFn
ZS0+ZGF0YSgpLT5kYXRhKCkpLCBtX2ltYWdlLT5kYXRhKCktPnNpemUoKSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOworICAgICAgICBRUGl4bWFwKiBuYXRpdmVQaXhtYXAgPSBtX2ltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAvLyBXaXRoIFFQQSwgd2UgY2Fu
IGF2b2lkIGEgZGVlcCBjb3B5LgotICAgICAgICBxdEltYWdlID0gKm5hdGl2ZVBpeG1hcC0+aGFu
ZGxlKCktPmJ1ZmZlcigpOworICAgICAgICBtX3F0SW1hZ2UgPSAqbmF0aXZlUGl4bWFwLT5oYW5k
bGUoKS0+YnVmZmVyKCk7CiAgICAgfQogCi0gICAgQWxwaGFPcCBhbHBoYU9wID0gQWxwaGFEb05v
dGhpbmc7Ci0gICAgc3dpdGNoIChxdEltYWdlLmZvcm1hdCgpKSB7CisgICAgbV9hbHBoYU9wID0g
QWxwaGFEb05vdGhpbmc7CisgICAgc3dpdGNoIChtX3F0SW1hZ2UuZm9ybWF0KCkpIHsKICAgICBj
YXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjMyOgogICAgICAgICAvLyBGb3Igb3BhcXVlIGltYWdlcywg
d2Ugc2hvdWxkIG5vdCBwcmVtdWx0aXBseSBvciB1bm11bHRpcGx5IGFscGhhLgogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMjoKICAgICAgICAgaWYgKHByZW11
bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBhbHBoYU9wID0gQWxwaGFEb1ByZW11bHRpcGx5Owor
ICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1ByZW11bHRpcGx5OwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkOgogICAgICAg
ICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBhbHBoYU9wID0gQWxwaGFEb1Vu
bXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gVGhlIGltYWdlIGhhcyBhIGZv
cm1hdCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gcGFja1BpeGVscy4gV2UgaGF2ZSB0byBjb252
ZXJ0IGl0IGhlcmUuCi0gICAgICAgIHF0SW1hZ2UgPSBxdEltYWdlLmNvbnZlcnRUb0Zvcm1hdChw
cmVtdWx0aXBseUFscGhhID8gUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQgOiBR
SW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgICAgICBtX3F0SW1hZ2UgPSBtX3F0SW1hZ2UuY29u
dmVydFRvRm9ybWF0KHByZW11bHRpcGx5QWxwaGEgPyBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJl
bXVsdGlwbGllZCA6IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIHVuc2lnbmVkIGludCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlz
IHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAgaWYgKGNvbXB1dGVJbWFnZVNp
emVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwg
MSwgJnBhY2tlZFNpemUsIDApICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKyAgICBt
X2ltYWdlV2lkdGggPSBtX2ltYWdlLT53aWR0aCgpOworICAgIG1faW1hZ2VIZWlnaHQgPSBtX2lt
YWdlLT5oZWlnaHQoKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1faW1hZ2VQaXhlbERhdGEgPSBtX3F0SW1hZ2Uu
Y29uc3RCaXRzKCk7CisgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IFNvdXJjZUZvcm1hdEJHUkE4
OworICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSAwOwogCi0gICAgb3V0cHV0VmVj
dG9yLnJlc2l6ZShwYWNrZWRTaXplKTsKLQotICAgIHJldHVybiBwYWNrUGl4ZWxzKHF0SW1hZ2Uu
Y29uc3RCaXRzKCksIFNvdXJjZUZvcm1hdEJHUkE4LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhl
aWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIGFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0
TG9zdENhbGxiYWNrKFBhc3NPd25QdHI8Q29udGV4dExvc3RDYWxsYmFjaz4pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNE
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNz
Q29udGV4dDNEU2tpYS5jcHAKaW5kZXggZmVhNmFkY2UzMDE4NTc3NjQwODZlYTI3Yjc1Y2ViYjll
NmIxNTY4ZS4uNGM2ZTkxYjFjNTk5MWY3N2Q5NDI0YzU5ZGFmZTkxOWVhZjVmY2M0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHQzRFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcApAQCAtNDIsNTggKzQyLDU2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdl
KiBpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5
QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVH
YW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKK0dyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUxvY2tlcjo6fkltYWdlTG9ja2VyKCkKIHsKLSAgICBpZiAoIWltYWdlKQorICAgIGlmIChza2lh
SW1hZ2UpCisgICAgICAgIHNraWFJbWFnZS0+Yml0bWFwKCkudW5sb2NrUGl4ZWxzKCk7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEoYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQoreworICAg
IGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIE93blB0cjxOYXRpdmVJ
bWFnZVNraWE+IHBpeGVsczsKLSAgICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIEFscGhhT3AgbmVlZGVkQWxwaGFP
cCA9IEFscGhhRG9Ob3RoaW5nOworICAgIHNraWFJbWFnZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CisgICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CiAgICAg
Ym9vbCBoYXNBbHBoYSA9IHNraWFJbWFnZSA/ICFza2lhSW1hZ2UtPmJpdG1hcCgpLmlzT3BhcXVl
KCkgOiB0cnVlOwotICAgIGlmICgoIXNraWFJbWFnZSB8fCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSB8fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBpbWFnZS0+ZGF0YSgp
KSB7CisgICAgaWYgKCghc2tpYUltYWdlIHx8IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8
IChoYXNBbHBoYSAmJiAhcHJlbXVsdGlwbHlBbHBoYSkpICYmIG1faW1hZ2UtPmRhdGEoKSkgewog
ICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCByYXcgdW5wcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEu
CiAgICAgICAgIE93blB0cjxJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIoSW1hZ2VEZWNv
ZGVyOjpjcmVhdGUoCi0gICAgICAgICAgICAqKGltYWdlLT5kYXRhKCkpLCBJbWFnZVNvdXJjZTo6
QWxwaGFOb3RQcmVtdWx0aXBsaWVkLAorICAgICAgICAgICAgKihtX2ltYWdlLT5kYXRhKCkpLCBJ
bWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLAogICAgICAgICAgICAgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUgPyBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVJZ25v
cmVkIDogSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKICAgICAg
ICAgaWYgKCFkZWNvZGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWNv
ZGVyLT5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgICAgICBkZWNvZGVyLT5zZXRE
YXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CiAgICAgICAgIGlmICghZGVjb2Rlci0+ZnJhbWVD
b3VudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBJbWFnZUZyYW1lKiBm
cmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKICAgICAgICAgaWYgKCFmcmFt
ZSB8fCBmcmFtZS0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaGFzQWxwaGEgPSBmcmFtZS0+aGFzQWxwaGEo
KTsKLSAgICAgICAgcGl4ZWxzID0gYWRvcHRQdHIoZnJhbWUtPmFzTmV3TmF0aXZlSW1hZ2UoKSk7
Ci0gICAgICAgIGlmICghcGl4ZWxzLmdldCgpIHx8ICFwaXhlbHMtPmlzRGF0YUNvbXBsZXRlKCkg
fHwgIXBpeGVscy0+Yml0bWFwKCkud2lkdGgoKSB8fCAhcGl4ZWxzLT5iaXRtYXAoKS5oZWlnaHQo
KSkKKyAgICAgICAgbV9uYXRpdmVJbWFnZSA9IGFkb3B0UHRyKGZyYW1lLT5hc05ld05hdGl2ZUlt
YWdlKCkpOworICAgICAgICBpZiAoIW1fbmF0aXZlSW1hZ2UuZ2V0KCkgfHwgIW1fbmF0aXZlSW1h
Z2UtPmlzRGF0YUNvbXBsZXRlKCkgfHwgIW1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLndpZHRoKCkg
fHwgIW1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBwaXhlbHMtPmJp
dG1hcCgpLmNvbmZpZygpOworICAgICAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBt
X25hdGl2ZUltYWdlLT5iaXRtYXAoKS5jb25maWcoKTsKICAgICAgICAgaWYgKHNraWFDb25maWcg
IT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBza2lhSW1hZ2UgPSBwaXhlbHMuZ2V0KCk7CisgICAgICAgIHNraWFJbWFnZSA9
IG1fbmF0aXZlSW1hZ2UuZ2V0KCk7CiAgICAgICAgIGlmIChoYXNBbHBoYSAmJiBwcmVtdWx0aXBs
eUFscGhhKQotICAgICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsK
KyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsKICAgICB9IGVsc2Ug
aWYgKCFwcmVtdWx0aXBseUFscGhhICYmIGhhc0FscGhhKQotICAgICAgICBuZWVkZWRBbHBoYU9w
ID0gQWxwaGFEb1VubXVsdGlwbHk7CisgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRp
cGx5OwogICAgIGlmICghc2tpYUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29u
c3QgU2tCaXRtYXAmIHNraWFJbWFnZVJlZiA9IHNraWFJbWFnZS0+Yml0bWFwKCk7Ci0gICAgU2tB
dXRvTG9ja1BpeGVscyBsb2NrKHNraWFJbWFnZVJlZik7Ci0gICAgQVNTRVJUKHNraWFJbWFnZVJl
Zi5yb3dCeXRlcygpID09IHNraWFJbWFnZVJlZi53aWR0aCgpICogNCk7Ci0gICAgdW5zaWduZWQg
aW50IHBhY2tlZFNpemU7Ci0gICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFs
aWdubWVudCA9PSAxKS4KLSAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCBza2lhSW1hZ2VSZWYud2lkdGgoKSwgc2tpYUltYWdlUmVmLmhlaWdodCgpLCAxLCAmcGFj
a2VkU2l6ZSwgMCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorCisgICAgbV9pbWFn
ZVNvdXJjZUZvcm1hdCA9IFNLX0IzMl9TSElGVCA/IFNvdXJjZUZvcm1hdFJHQkE4IDogU291cmNl
Rm9ybWF0QkdSQTg7CisgICAgbV9pbWFnZVdpZHRoID0gc2tpYUltYWdlLT5iaXRtYXAoKS53aWR0
aCgpOworICAgIG1faW1hZ2VIZWlnaHQgPSBza2lhSW1hZ2UtPmJpdG1hcCgpLmhlaWdodCgpOwor
ICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFtX2ltYWdlSGVpZ2h0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShwYWNrZWRTaXplKTsKLSAgICByZXR1cm4g
cGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihza2lhSW1hZ2VSZWYu
Z2V0UGl4ZWxzKCkpLAotICAgICAgICAgICAgICAgICAgICAgIFNLX0IzMl9TSElGVCA/IFNvdXJj
ZUZvcm1hdFJHQkE4IDogU291cmNlRm9ybWF0QkdSQTgsCi0gICAgICAgICAgICAgICAgICAgICAg
c2tpYUltYWdlUmVmLndpZHRoKCksIHNraWFJbWFnZVJlZi5oZWlnaHQoKSwgMCwKLSAgICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5k
YXRhKCkpOworICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSAwOworICAgIHNraWFJ
bWFnZS0+Yml0bWFwKCkubG9ja1BpeGVscygpOworICAgIG1faW1hZ2VQaXhlbERhdGEgPSBza2lh
SW1hZ2UtPmJpdG1hcCgpLmdldFBpeGVscygpOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176925</attachid>
            <date>2012-11-30 01:48:50 -0800</date>
            <delta_ts>2012-11-30 15:04:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103606-20121130174348.patch</filename>
            <type>text/plain</type>
            <size>40036</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGZiNTliYWQwYWVmNDMy
MWJkY2E1Mzc3NzVlZjU0NmUzNjFkMGFhYy4uMjkwZDEwM2ZkMjc3N2E0MTU1MTAzM2NhNjYyZGJh
ODlhMTBjZWNmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTExLTMwICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEFkZCBhIGNs
YXNzIHRvIGFic3RyYWN0IHRoZSBzdGF0dXMgb2YgdGhlIEltYWdlIGluIHRleEltYWdlMkQoKSBh
bmQgdGV4U3ViSW1hZ2UyRCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDM2MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbiB0ZXhJbWFnZTJEKCkgYW5kIHRleFN1YkltYWdlMkQoKSBmb3IgV2ViR0ws
IHRoZSBzdGF0dXMgb2YgdGhlIEltYWdlIGlzIGV4dHJhY3RlZCBhbmQga2VwdCBpbiB0aGUgZnVu
Y3Rpb24gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSgpIGJ1dCBwcm92aWRlcyBubyBp
bnRlcmZhY2Ugb3IgZ3VhcmFudGVlZCB3YXkgdG8gdXNlIHRoZSBzdGF0dXMgb2YgdGhlIEltYWdl
IG91dHNpZGUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSgpIHNhZmVseS4gRm9yIGV4
YW1wbGUsIHlvdSBjYW4gbm90IGdldCB0aGUgYWRkcmVzcyBvZiB0aGUgcmF3IEltYWdlIGRhdGEg
YW5kIG9wZXJhdGUgaXQgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRJbWFnZURhdGEoKSBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG1lbW9yeSBjb3B5IGV4
aXN0ZWQgZnJvbSB0aGUgSW1hZ2UgdG8gdGhlIGludGVybWVkaWF0ZSB2ZWN0b3IuCisgICAgICAg
VGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGNvZGUgYnkgYWRkaW5nIGEgSW1hZ2VFeHRyYWN0b3Ig
Y2xhc3MgdG8gYWJzdHJhY3QgYW5kIGtlZXAgdGhlIHN0YXR1cyBvZiB0aGUgSW1hZ2UuIFRoZSBs
aWZldGltZSBhbmQgdmFsaWRpdHkgb2YgSW1hZ2Ugc3RhdHVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRo
ZSBsaWZldGltZSBvZiB0aGUgb2JqZWN0IGluc3RlYWQgb2YgdGhlIHNjb3BlIG9mIGdldEltYWdl
RGF0YSgpLiBJdCBwcm92aWRlcyBmbGV4aWJpbGl0eSBvbiBmdXR1cmUgb3B0aW1pemF0aW9ucy4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIEl0IGlzIGEgY29kZSByZWZhY3RvcmluZyBwYXRjaC4K
KworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4SW1hZ2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJESW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yOjpJbWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWNrSW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChJbWFnZUV4dHJhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6
OmV4dHJhY3RTdWNjZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlRXh0cmFjdG9yOjppbWFnZVBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmltYWdlV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjppbWFnZUhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmltYWdl
U291cmNlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUV4dHJhY3Rvcjo6aW1hZ2VBbHBoYU9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJh
Y3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRy
YWN0SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0M0RTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1h
Z2UpOgorCiAyMDEyLTExLTMwICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBGaXggdHlwb3MgaW4gRGF0ZVRpbWVOdW1lcmljRmllbGRFbGVtZW50LmNwcCBhbmQg
RGF0ZVRpbWVTeW1ib2xpY0ZpZWxkRWxlbWVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDcwY2I4NTNjMzc5
ZmYwNjViOTg3ZDlkZWUxMDQzNTdkMjgxYmRiODEuLjVhOGRjOTVmMzEwYjFhOGRkZmRhNTVlNDU5
ODY1ZTliZWJjNWJiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzYxOSwxMCArMzYxOSwxNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZQogICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4
SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKGltYWdl
LCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FLCBkYXRhKSkgeworICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgcHJl
bXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9ORSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVk
KCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisKKyAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWln
aHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZURhdGEgZXJyb3IiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQogICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKICAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwKQEAgLTM4NTUsMTAgKzM4NjIsMTcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFtX2NvbnRl
eHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFksIHByZW11bHRp
cGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PTkUsIGRhdGEpKSB7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9y
IGltYWdlRXh0cmFjdG9yKGltYWdlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsgIAorICAgIGlmICghaW1h
Z2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJi
YWQgaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGlmICghbV9jb250ZXh0
LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpLCBm
b3JtYXQsIHR5cGUsIGZsaXBZLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKSwgaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgp
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJj
ZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAicGFja0ltYWdl
RGF0YSBlcnJvciIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fdW5wYWNr
QWxpZ25tZW50ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogICAgIHRleFN1YkltYWdlMkRCYXNlKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5jcHAKaW5kZXggYTk4YjU0NmJhZjdlODEzYjkyODk4MmE3ZGM3MjkzNzVj
NTNjNDg0Zi4uZmZhOGVjNjNhNzZjMDIxNzU1YjEyMmNlNWU0MWJjZTdjNzc0MjI0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcApAQCAtMTY4LDMwICsxNjgsNTcgQEAgR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6
OmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHkKICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwogfQogCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xv
clByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiYgZGF0YSkKLXsKLSAgICBpZiAoIWltYWdlKQorR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlRXh0cmFjdG9yOjpJbWFnZUV4dHJhY3RvcihJbWFnZSogaW1hZ2UsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKK3sKKyAgICBtX2lt
YWdlID0gaW1hZ2U7CisgICAgbV9leHRyYWN0U3VjY2VlZGVkID0gZXh0cmFjdEltYWdlKHByZW11
bHRpcGx5QWxwaGEsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6cGFja0ltYWdlRGF0YSgKKyAgICBJbWFnZSogaW1hZ2UsCisgICAgY29u
c3Qgdm9pZCogcGl4ZWxzLAorICAgIEdDM0RlbnVtIGZvcm1hdCwKKyAgICBHQzNEZW51bSB0eXBl
LAorICAgIGJvb2wgZmxpcFksCisgICAgQWxwaGFPcCBhbHBoYU9wLAorICAgIFNvdXJjZURhdGFG
b3JtYXQgc291cmNlRm9ybWF0LCAKKyAgICB1bnNpZ25lZCB3aWR0aCwKKyAgICB1bnNpZ25lZCBo
ZWlnaHQsCisgICAgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LAorICAgIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSkKK3sKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgdW5zaWduZWQgcGFja2VkU2l6ZTsKKyAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdo
dGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgorICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5C
eXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZwYWNrZWRTaXplLCAwKSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWdldEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhLCBp
Z25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgZGF0YSkpCisgICAgZGF0YS5yZXNpemUocGFja2Vk
U2l6ZSk7CisKKyAgICBpZiAoIXBhY2tQaXhlbHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4ocGl4ZWxzKSwKKyAgICAgICAgc291cmNlRm9ybWF0LAorICAgICAgICB3aWR0aCwKKyAg
ICAgICAgaGVpZ2h0LAorICAgICAgICBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCisgICAgICAgIGZv
cm1hdCwKKyAgICAgICAgdHlwZSwKKyAgICAgICAgYWxwaGFPcCwKKyAgICAgICAgZGF0YS5kYXRh
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGZsaXBZKSB7Ci0gICAgICAgIHVu
c2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVzUGVyQ29tcG9uZW50OworICAgICAg
ICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVzUGVyQ29tcG9uZW50OwogICAgICAg
ICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wb25lbnRzUGVyUGl4
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc1Bl
ckNvbXBvbmVudCkpCisgICAgICAgICAgICAmY29tcG9uZW50c1BlclBpeGVsLAorICAgICAgICAg
ICAgJmJ5dGVzUGVyQ29tcG9uZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgLy8gVGhlIGltYWdlIGRhdGEgaXMgdGlnaHRseSBwYWNrZWQsIGFuZCB3ZSB1cGxvYWQgaXQg
YXMgc3VjaC4KLSAgICAgICAgdW5zaWduZWQgaW50IHVucGFja0FsaWdubWVudCA9IDE7Ci0gICAg
ICAgIGZsaXBWZXJ0aWNhbGx5KGRhdGEuZGF0YSgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhl
aWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRl
c1BlckNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5wYWNrQWxpZ25tZW50KTsK
KyAgICAgICAgdW5zaWduZWQgdW5wYWNrQWxpZ25tZW50ID0gMTsKKyAgICAgICAgZmxpcFZlcnRp
Y2FsbHkoZGF0YS5kYXRhKCksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICBjb21wb25lbnRz
UGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCwKKyAgICAgICAgICAgIHVucGFja0FsaWdubWVu
dCk7CiAgICAgfQorCiAgICAgaWYgKEltYWdlT2JzZXJ2ZXIgKm9ic2VydmVyID0gaW1hZ2UtPmlt
YWdlT2JzZXJ2ZXIoKSkKICAgICAgICAgb2JzZXJ2ZXItPmRpZERyYXcoaW1hZ2UpOwogICAgIHJl
dHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKaW5kZXggNGVkZTBmODE3ZjZjMGMzMGI3YTNlNTUyODk2ZGUwNmQ0
NzNiMjkwMC4uOTVlZWE3YWFhNzRmMTIyZWU5MzhjM2MwODVhNzQwMGIzOTVkZTZjNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEX2gKICNkZWZp
bmUgR3JhcGhpY3NDb250ZXh0M0RfaAogCisjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1MYXllci5oIgpAQCAtMTAxLDYgKzEwMiw3IEBAIGNsYXNzIEV4dGVuc2lvbnMzRFF0OwogY2xh
c3MgSG9zdFdpbmRvdzsKIGNsYXNzIEltYWdlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJ
bWFnZVNvdXJjZTsKIGNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRT
aXplOwpAQCAtNTY0LDE4ICs1NjYsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBpbWFnZVNpemVJbkJ5dGVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogcGFkZGluZ0luQnl0ZXMp
OwogCi0gICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSBpbnRv
IHRoZSBwYXNzZWQgVmVjdG9yLAotICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNjb3Jk
aW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCi0gICAgLy8gYW5kIG9iZXlpbmcgdGhl
IGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBhbmQgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUK
LSAgICAvLyBmbGFncy4gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KLSAgICBzdGF0aWMgYm9v
bCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7Ci0KICAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVu
dHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAogICAgIC8v
IHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5k
IHR5cGUsCiAgICAgLy8gYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhh
IGZsYWdzLiBSZXR1cm5zIHRydWUKQEAgLTg3NCwzNSArODY0LDYgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHVuc2lnbmVkIGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0pOwogCi0gIHBy
aXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJl
bmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKLQotICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVz
dCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgotICAgIC8vCi0gICAg
Ly8gR2V0cyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIEltYWdlIGludG8gb3V0cHV0VmVjdG9yIGlu
IHRoZQotICAgIC8vIGZvcm1hdCBzcGVjaWZpZWQgYnkgdGhlIChPcGVuR0wtc3R5bGUpIGZvcm1h
dCBhbmQgdHlwZQotICAgIC8vIGFyZ3VtZW50cy4gRGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBv
dXRwdXRWZWN0b3IgY29udGFpbnMKLSAgICAvLyB1aW50OF90LCBpZiB0aGUgZm9ybWF0IGFuZCB0
eXBlIHNwZWNpZnkgcGFja2VkIHBpeGVscywgdGhlbgotICAgIC8vIGl0IHdpbGwgZXNzZW50aWFs
bHkgY29udGFpbiB1aW50MTZfdCBhZnRlciB0aGUgZXh0cmFjdGlvbgotICAgIC8vIHByb2Nlc3Mu
Ci0gICAgLy8KLSAgICAvLyBJZiBwcmVtdWx0aXBseUFscGhhIGlzIHRydWUsIHRoZSBhbHBoYSBj
aGFubmVsLCBpZiBhbnksCi0gICAgLy8gd2lsbCBiZSBtdWx0aXBsaWVkIGludG8gdGhlIGNvbG9y
IGNoYW5uZWxzIGR1cmluZyB0aGUKLSAgICAvLyBleHRyYWN0aW9uIHByb2Nlc3MuIFRoaXMgcHJl
bXVsdGlwbGljYXRpb24gb2NjdXJzIGJlZm9yZQotICAgIC8vIGFueSBwYWNraW5nIG9mIHBpeGVs
IGRhdGEuCi0gICAgLy8KLSAgICAvLyBJZiBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSBpcyB0
cnVlLCBnYW1tYSBjb3JyZWN0aW9uIGFuZCBJQ0MKLSAgICAvLyBwcm9maWxlIHdvbid0IGJlIGFw
cGxpZWQuCi0gICAgLy8KLSAgICAvLyBObyB2ZXJ0aWNhbCBmbGlwIG9mIHRoZSBpbWFnZSBkYXRh
IGlzIHBlcmZvcm1lZCBieSB0aGlzCi0gICAgLy8gbWV0aG9kLgotICAgIHN0YXRpYyBib29sIGdl
dEltYWdlRGF0YShJbWFnZSosCi0gICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpOwotCiAgICAgLy8gUG9zc2libGUgYWxwaGEgb3BlcmF0
aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9jY3VyIGR1cmluZwogICAgIC8vIHBpeGVsIHBhY2tpbmcu
IEZJWE1FOiBrQWxwaGFEb1VubXVsdGlwbHkgaXMgbG9zc3kgYW5kIG11c3QKICAgICAvLyBiZSBy
ZW1vdmVkLgpAQCAtOTEyLDYgKzg3Myw1OSBAQCBwdWJsaWM6CiAgICAgICAgIEFscGhhRG9Vbm11
bHRpcGx5ID0gMgogICAgIH07CiAKKyAgICAvLyBQYWNrcyB0aGUgY29udGVudHMgb2YgdGhlIGdp
dmVuIEltYWdlIHdoaWNoIGlzIHBhc3NlZCBpbiB8cGl4ZWxzfCBpbnRvIHRoZSBwYXNzZWQgVmVj
dG9yCisgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsIGFuZCBv
YmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4KKyAgICAvLyBSZXR1
cm5zIHRydWUgdXBvbiBzdWNjZXNzLgorICAgIHN0YXRpYyBib29sIHBhY2tJbWFnZURhdGEoSW1h
Z2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
Ym9vbCBmbGlwWSwgQWxwaGFPcCwgU291cmNlRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVu
dCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKworICAgIGNsYXNzIEltYWdlRXh0cmFjdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEltYWdlRXh0cmFjdG9yKEltYWdlKiwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKKworICAgICAgICAv
LyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1l
dGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVhc2UgcmVzb3VyY2VzCisgICAgICAgIC8vIGFzc29j
aWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYgbmVlZGVkLgorICAgICAgICB+SW1hZ2VFeHRyYWN0b3Io
KTsKKworICAgICAgICBib29sIGV4dHJhY3RTdWNjZWVkZWQoKSB7IHJldHVybiBtX2V4dHJhY3RT
dWNjZWVkZWQ7IH0KKyAgICAgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEoKSB7IHJldHVy
biBtX2ltYWdlUGl4ZWxEYXRhOyB9CisgICAgICAgIHVuc2lnbmVkIGltYWdlV2lkdGgoKSB7IHJl
dHVybiBtX2ltYWdlV2lkdGg7IH0KKyAgICAgICAgdW5zaWduZWQgaW1hZ2VIZWlnaHQoKSB7IHJl
dHVybiBtX2ltYWdlSGVpZ2h0OyB9CisgICAgICAgIFNvdXJjZURhdGFGb3JtYXQgaW1hZ2VTb3Vy
Y2VGb3JtYXQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlRm9ybWF0OyB9CisgICAgICAgIEFscGhh
T3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9CisgICAgICAgIHVuc2lnbmVk
IGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZVVucGFj
a0FsaWdubWVudDsgfSAKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11
c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KKyAgICAgICAgLy8g
RXh0cmFjdHMgdGhlIGltYWdlIGFuZCBrZWVwcyB0cmFjayBvZiBpdHMgc3RhdHVzLCBzdWNoIGFz
IHdpZHRoLCBoZWlnaHQsIFNvdXJjZSBBbGlnbm1lbnQsIGZvcm1hdCBhbmQgQWxwaGFPcCBldGMK
KyAgICAgICAgLy8gbmVlZHMgdG8gbG9jayB0aGUgcmVzb3VyY2VzIG9yIHJlbGV2YW50IGRhdGEg
aWYgbmVlZGVkCisgICAgICAgIC8vIFJldHVybiB0cnVlIHVwb24gc3VjY2VzcworICAgICAgICBi
b29sIGV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFB
bmRDb2xvclByb2ZpbGUpOworCisjaWYgVVNFKFNLSUEpCisgICAgICAgIE93blB0cjxOYXRpdmVJ
bWFnZVNraWE+IG1fbmF0aXZlSW1hZ2U7CisgICAgICAgIE5hdGl2ZUltYWdlU2tpYSogbV9za2lh
SW1hZ2U7CisjZWxpZiBVU0UoQ0FJUk8pCisgICAgICAgIEltYWdlU291cmNlKiBtX2RlY29kZXI7
CisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2VTdXJmYWNlOworI2VsaWYg
VVNFKENHKQorICAgICAgICBDR0ltYWdlUmVmIG1fY2dJbWFnZTsKKyAgICAgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IG1fZGVjb2RlZEltYWdlOworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBtX3BpeGVsRGF0YTsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgICAgICBRSW1hZ2UgbV9xdElt
YWdlOworI2VuZGlmCisgICAgICAgIEltYWdlKiBtX2ltYWdlOworICAgICAgICBib29sIG1fZXh0
cmFjdFN1Y2NlZWRlZDsKKyAgICAgICAgY29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKKyAg
ICAgICAgdW5zaWduZWQgbV9pbWFnZVdpZHRoOworICAgICAgICB1bnNpZ25lZCBtX2ltYWdlSGVp
Z2h0OworICAgICAgICBTb3VyY2VEYXRhRm9ybWF0IG1faW1hZ2VTb3VyY2VGb3JtYXQ7CisgICAg
ICAgIEFscGhhT3AgbV9hbHBoYU9wOworICAgICAgICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5w
YWNrQWxpZ25tZW50OworICAgIH07CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0Qo
QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsK
KwogICAgIC8vIEhlbHBlciBmb3IgZ2V0SW1hZ2VEYXRhIHdoaWNoIGltcGxlbWVudHMgcGFja2lu
ZyBvZiBwaXhlbAogICAgIC8vIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIE9wZW5HTCBkZXN0aW5h
dGlvbiBmb3JtYXQgYW5kIHR5cGUuCiAgICAgLy8gQSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgb2Yg
emVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaAppbmRleCBjOThmOGMyNWE5YTg3NmM0YWI2
ZTQwODY4YzJkYmNiMjc2ZDBkY2QwLi4wNTMwYWRlMTI3OTdkZjBmMjA0YTg1ODgyYjg1Y2I1YTRh
MDNjY2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRp
dmVJbWFnZVB0ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2
ZUltYWdlUHRyLmgKQEAgLTM0LDYgKzM0LDcgQEAgY2xhc3Mgd3hHcmFwaGljc0JpdG1hcDsKICNl
bGlmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAjZWxpZiBQ
TEFURk9STShRVCkKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVF0LmgiCiAjaW5jbHVkZSA8cWdsb2Jh
bC5oPgogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRUGl4bWFwOwpAQCAtNDEsNiArNDIsNyBA
QCBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiTmF0aXZlSW1h
Z2VDYWlyby5oIgogI2VsaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgi
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBOYXRpdmVJbWFnZVNraWE7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IDhiYTA0OWIxNzdkOTg1MWJlOTdlYTExYWEw
MmM2YzNmNzg5YmZiMDAuLmJkM2JkZmRhOWFhMTM4ZTg2NDkzZDE0ODJlODU5M2ZhNDRjY2FmYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC0xNjMsNTcgKzE2Myw2MSBA
QCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICA6OmdsRGVsZXRl
RnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGlu
dCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKQogewotICAgIGlmICghaW1hZ2UpCisg
ICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCit7CisgICAgaWYg
KCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gV2UgbmVlZCB0aGlzIHRv
IHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGltYWdlIGlzIGp1c3QgYSBzaGFsbG93
IGNvcHkgb2YgdGhlIGRhdGEuCi0gICAgSW1hZ2VTb3VyY2UgZGVjb2RlcihwcmVtdWx0aXBseUFs
cGhhID8gSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCA6IEltYWdlU291cmNlOjpBbHBo
YU5vdFByZW11bHRpcGxpZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVHYW1tYUFu
ZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9yZWQg
OiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKLSAgICBBbHBoYU9w
IGFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBp
bWFnZVN1cmZhY2U7Ci0gICAgaWYgKGltYWdlLT5kYXRhKCkpIHsKLSAgICAgICAgZGVjb2Rlci5z
ZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgIG1fZGVjb2RlciA9IG5ldyBJbWFnZVNv
dXJjZShwcmVtdWx0aXBseUFscGhhID8gSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCA6
IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIGlnbm9yZUdhbW1hQW5kQ29sb3JQ
cm9maWxlID8gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpOworICAgIGlmICghbV9kZWNvZGVy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW1hZ2VTb3VyY2UmIGRlY29kZXIgPSAqbV9k
ZWNvZGVyOworCisgICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CisgICAgaWYgKG1faW1h
Z2UtPmRhdGEoKSkgeworICAgICAgICBkZWNvZGVyLnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0
cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFt
ZUlzQ29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBPd25QdHI8TmF0aXZlSW1hZ2VDYWlybz4gbmF0aXZlSW1hZ2UgPSBhZG9wdFB0cihkZWNvZGVy
LmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7Ci0gICAgICAgIGltYWdlU3VyZmFjZSA9IG5hdGl2ZUlt
YWdlLT5zdXJmYWNlKCk7CisgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gbmF0aXZlSW1hZ2UtPnN1
cmZhY2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBOYXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJ
bWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICBpbWFn
ZVN1cmZhY2UgPSAobmF0aXZlSW1hZ2UpID8gbmF0aXZlSW1hZ2UtPnN1cmZhY2UoKSA6IDA7Cisg
ICAgICAgIE5hdGl2ZUltYWdlQ2Fpcm8qIG5hdGl2ZUltYWdlID0gbV9pbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSAobmF0aXZlSW1h
Z2UpID8gbmF0aXZlSW1hZ2UtPnN1cmZhY2UoKSA6IDA7CiAgICAgICAgIGlmICghcHJlbXVsdGlw
bHlBbHBoYSkKLSAgICAgICAgICAgIGFscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKKyAgICAg
ICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OwogICAgIH0KIAotICAgIGlmICgh
aW1hZ2VTdXJmYWNlKQorICAgIGlmICghbV9pbWFnZVN1cmZhY2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGludCB3aWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGlt
YWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIGlmICghd2lkdGggfHwgIWhlaWdo
dCkKKyAgICBtX2ltYWdlV2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChtX2lt
YWdlU3VyZmFjZS5nZXQoKSk7CisgICAgbV9pbWFnZUhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2hlaWdodChtX2ltYWdlU3VyZmFjZS5nZXQoKSk7CisgICAgaWYgKCFtX2ltYWdlV2lk
dGggfHwgIW1faW1hZ2VIZWlnaHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQoaW1hZ2VTdXJmYWNlLmdldCgpKSAhPSBDQUlS
T19GT1JNQVRfQVJHQjMyKQorICAgIGlmIChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQo
bV9pbWFnZVN1cmZhY2UuZ2V0KCkpICE9IENBSVJPX0ZPUk1BVF9BUkdCMzIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHVuc2lnbmVkIGludCBzcmNVbnBhY2tBbGlnbm1lbnQgPSAxOwot
ICAgIHNpemVfdCBieXRlc1BlclJvdyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShp
bWFnZVN1cmZhY2UuZ2V0KCkpOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3N0cmlkZShtX2ltYWdlU3VyZmFjZS5nZXQoKSk7CiAgICAgc2l6ZV90IGJp
dHNQZXJQaXhlbCA9IDMyOwotICAgIHVuc2lnbmVkIGludCBwYWRkaW5nID0gYnl0ZXNQZXJSb3cg
LSBiaXRzUGVyUGl4ZWwgLyA4ICogd2lkdGg7CisgICAgdW5zaWduZWQgcGFkZGluZyA9IGJ5dGVz
UGVyUm93IC0gYml0c1BlclBpeGVsIC8gOCAqIG1faW1hZ2VXaWR0aDsKICAgICBpZiAocGFkZGlu
ZykgewogICAgICAgICBzcmNVbnBhY2tBbGlnbm1lbnQgPSBwYWRkaW5nICsgMTsKICAgICAgICAg
d2hpbGUgKGJ5dGVzUGVyUm93ICUgc3JjVW5wYWNrQWxpZ25tZW50KQogICAgICAgICAgICAgKytz
cmNVbnBhY2tBbGlnbm1lbnQ7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IHBhY2tlZFNpemU7
Ci0gICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4K
LSAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVp
Z2h0LCAxLCAmcGFja2VkU2l6ZSwgMCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShwYWNrZWRTaXpl
KTsKLQotICAgIHJldHVybiBwYWNrUGl4ZWxzKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
aW1hZ2VTdXJmYWNlLmdldCgpKSwgU291cmNlRm9ybWF0QkdSQTgsCi0gICAgICAgICAgICAgICAg
ICAgICAgd2lkdGgsIGhlaWdodCwgc3JjVW5wYWNrQWxpZ25tZW50LCBmb3JtYXQsIHR5cGUsIGFs
cGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOworICAgIG1faW1hZ2VQaXhlbERhdGEgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBtX2lt
YWdlU291cmNlRm9ybWF0ID0gU291cmNlRm9ybWF0QkdSQTg7CisgICAgbV9pbWFnZVNvdXJjZVVu
cGFja0FsaWdubWVudCA9IHNyY1VucGFja0FsaWdubWVudDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBj
aGFyKiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwgaW50IGNh
bnZhc1dpZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBQbGF0Zm9ybUNvbnRleHRDYWlybyogY29udGV4
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dDNEQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKaW5kZXggYWMwMGM0M2RlMGFhNGRiMTE3YWU2MTI0YjU4
NDYzODFiNDk3NGZlNi4uOTQyY2RkYmYzZGVkMGY0YThiMGU0NGI1YzAzMzhmYzBjMGRiNjM5YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0M0RDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKQEAgLTg5LDQxICs4OSwzOCBAQCBzdGF0aWMgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNvdXJjZURhdGFGb3JtYXQgZ2V0U291cmNlRGF0YUZvcm1hdCh1bnNpZ25l
ZCBpbnQgY29tcAogICAgIHJldHVybiBmb3JtYXRUYWJsZVtmb3JtYXRCYXNlXVsoaXMxNkJpdEZv
cm1hdCA/IDIgOiAwKSArIChiaWdFbmRpYW4gPyAxIDogMCldOwogfQogCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVj
dG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3Io
KQogewotICAgIGlmICghaW1hZ2UpCit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdl
RXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlKQoreworICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIENHSW1hZ2VSZWYgY2dJbWFnZTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gZGVjb2RlZEltYWdlOwotICAgIGJvb2wgaGFzQWxwaGEgPSBpbWFnZS0+aXNCaXRtYXBJ
bWFnZSgpID8gaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgOiB0cnVlOwotICAgIGlmICgo
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFs
cGhhKSkgJiYgaW1hZ2UtPmRhdGEoKSkgeworICAgIGJvb2wgaGFzQWxwaGEgPSBtX2ltYWdlLT5p
c0JpdG1hcEltYWdlKCkgPyBtX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpIDogdHJ1ZTsK
KyAgICBpZiAoKGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJl
bXVsdGlwbHlBbHBoYSkpICYmIG1faW1hZ2UtPmRhdGEoKSkgewogICAgICAgICBJbWFnZVNvdXJj
ZSBkZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVJZ25vcmVkIDogSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlQXBwbGllZCk7Ci0gICAgICAgIGRlY29kZXIuc2V0RGF0YShpbWFnZS0+ZGF0YSgp
LCB0cnVlKTsKKyAgICAgICAgZGVjb2Rlci5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7
CiAgICAgICAgIGlmICghZGVjb2Rlci5mcmFtZUNvdW50KCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGRlY29kZWRJbWFnZS5hZG9wdENGKGRlY29kZXIuY3JlYXRlRnJhbWVB
dEluZGV4KDApKTsKLSAgICAgICAgY2dJbWFnZSA9IGRlY29kZWRJbWFnZS5nZXQoKTsKKyAgICAg
ICAgbV9kZWNvZGVkSW1hZ2UuYWRvcHRDRihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7
CisgICAgICAgIG1fY2dJbWFnZSA9IG1fZGVjb2RlZEltYWdlLmdldCgpOwogICAgIH0gZWxzZQot
ICAgICAgICBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0g
ICAgaWYgKCFjZ0ltYWdlKQorICAgICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghbV9jZ0ltYWdlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7Ci0g
ICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7Ci0gICAgaWYgKCF3
aWR0aCB8fCAhaGVpZ2h0KQorICAgIG1faW1hZ2VXaWR0aCA9IENHSW1hZ2VHZXRXaWR0aChtX2Nn
SW1hZ2UpOworICAgIG1faW1hZ2VIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KG1fY2dJbWFnZSk7
CisgICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VIZWlnaHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIFNlZSB3aGV0aGVyIHRoZSBpbWFnZSBpcyB1c2luZyBhbiBpbmRl
eGVkIGNvbG9yIHNwYWNlLCBhbmQgaWYKICAgICAvLyBzbywgcmUtcmVuZGVyIGl0IGludG8gYW4g
UkdCIGNvbG9yIHNwYWNlLiBUaGUgaW1hZ2UgcmUtcGFja2luZwogICAgIC8vIGNvZGUgcmVxdWly
ZXMgY29sb3IgZGF0YSwgbm90IGNvbG9yIHRhYmxlIGluZGljZXMsIGZvciB0aGUKICAgICAvLyBp
bWFnZSBkYXRhLgotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dJbWFnZUdldENv
bG9yU3BhY2UoY2dJbWFnZSk7CisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0lt
YWdlR2V0Q29sb3JTcGFjZShtX2NnSW1hZ2UpOwogICAgIENHQ29sb3JTcGFjZU1vZGVsIG1vZGVs
ID0gQ0dDb2xvclNwYWNlR2V0TW9kZWwoY29sb3JTcGFjZSk7CiAgICAgaWYgKG1vZGVsID09IGtD
R0NvbG9yU3BhY2VNb2RlbEluZGV4ZWQpIHsKICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gYml0bWFwQ29udGV4dDsKQEAgLTEzMSw3ICsxMjgsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICAvLyB0aGUgY29sb3IgdGFi
bGUsIHdoaWNoIHdvdWxkIGFsbG93IHVzIHRvIGF2b2lkIHByZW11bHRpcGx5aW5nIHRoZQogICAg
ICAgICAvLyBhbHBoYSBjaGFubmVsLiBDcmVhdGlvbiBvZiBhIGJpdG1hcCBjb250ZXh0IHdpdGgg
YW4gYWxwaGEgY2hhbm5lbAogICAgICAgICAvLyBkb2Vzbid0IHNlZW0gdG8gd29yayB1bmxlc3Mg
aXQncyBwcmVtdWx0aXBsaWVkLgotICAgICAgICBiaXRtYXBDb250ZXh0LmFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKDAsIHdpZHRoLCBoZWlnaHQsIDgsIHdpZHRoICogNCwKKyAgICAgICAg
Yml0bWFwQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBtX2ltYWdlV2lk
dGgsIG1faW1hZ2VIZWlnaHQsIDgsIG1faW1hZ2VXaWR0aCAqIDQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlUkdCQ29sb3JTcGFjZVJl
ZigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhv
c3QpKTsKICAgICAgICAgaWYgKCFiaXRtYXBDb250ZXh0KQpAQCAtMTM5LDIyICsxMzYsMjIgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKIAogICAg
ICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRN
b2RlQ29weSk7CiAgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGJpdG1h
cENvbnRleHQuZ2V0KCksIGtDR0ludGVycG9sYXRpb25Ob25lKTsKLSAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhl
aWdodCksIGNnSW1hZ2UpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4
dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQpLCBt
X2NnSW1hZ2UpOwogCiAgICAgICAgIC8vIE5vdyBkaXNjYXJkIHRoZSBvcmlnaW5hbCBDRyBpbWFn
ZSBhbmQgcmVwbGFjZSBpdCB3aXRoIGEgY29weSBmcm9tIHRoZSBiaXRtYXAgY29udGV4dC4KLSAg
ICAgICAgZGVjb2RlZEltYWdlLmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0
bWFwQ29udGV4dC5nZXQoKSkpOwotICAgICAgICBjZ0ltYWdlID0gZGVjb2RlZEltYWdlLmdldCgp
OworICAgICAgICBtX2RlY29kZWRJbWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUlt
YWdlKGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgbV9jZ0ltYWdlID0gbV9kZWNvZGVk
SW1hZ2UuZ2V0KCk7CiAgICAgfQogCi0gICAgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQgPSBDR0lt
YWdlR2V0Qml0c1BlckNvbXBvbmVudChjZ0ltYWdlKTsKLSAgICBzaXplX3QgYml0c1BlclBpeGVs
ID0gQ0dJbWFnZUdldEJpdHNQZXJQaXhlbChjZ0ltYWdlKTsKKyAgICBzaXplX3QgYml0c1BlckNv
bXBvbmVudCA9IENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KG1fY2dJbWFnZSk7CisgICAgc2l6
ZV90IGJpdHNQZXJQaXhlbCA9IENHSW1hZ2VHZXRCaXRzUGVyUGl4ZWwobV9jZ0ltYWdlKTsKICAg
ICBpZiAoYml0c1BlckNvbXBvbmVudCAhPSA4ICYmIGJpdHNQZXJDb21wb25lbnQgIT0gMTYpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoYml0c1BlclBpeGVsICUgYml0c1BlckNvbXBv
bmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHNpemVfdCBjb21wb25lbnRzUGVyUGl4
ZWwgPSBiaXRzUGVyUGl4ZWwgLyBiaXRzUGVyQ29tcG9uZW50OwogCi0gICAgQ0dCaXRtYXBJbmZv
IGJpdEluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhjZ0ltYWdlKTsKKyAgICBDR0JpdG1hcElu
Zm8gYml0SW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKG1fY2dJbWFnZSk7CiAgICAgYm9vbCBi
aWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKICAgICAvLyBUaGVzZSBjb3VsZCB0ZWNobmljYWxseSBi
ZSBjb21iaW5lZCBpbnRvIG9uZSBsYXJnZSBzd2l0Y2gKICAgICAvLyBzdGF0ZW1lbnQsIGJ1dCB3
ZSBwcmVmZXIgbm90IHRvIHNvIHRoYXQgd2UgZmFpbCBmYXN0IGlmIHdlCkBAIC0xOTQsMTggKzE5
MSwxOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdl
LAogICAgICAgICB9CiAgICAgfQogCi0gICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFE
b05vdGhpbmc7CisgICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CiAgICAgQWxwaGFGb3Jt
YXQgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdE5vbmU7Ci0gICAgc3dpdGNoIChDR0ltYWdlR2V0
QWxwaGFJbmZvKGNnSW1hZ2UpKSB7CisgICAgc3dpdGNoIChDR0ltYWdlR2V0QWxwaGFJbmZvKG1f
Y2dJbWFnZSkpIHsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Q6CiAg
ICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhhT3Ag
PSBBbHBoYURvVW5tdWx0aXBseTsKKyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Vbm11
bHRpcGx5OwogICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2Uga0NHSW1hZ2VBbHBoYUZpcnN0OgogICAgICAgICAvLyBUaGlzIHBh
dGggaXMgb25seSBhY2Nlc3NpYmxlIGZvciBNYWNPUyBlYXJsaWVyIHRoYW4gMTAuNi40LgogICAg
ICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhhT3AgPSBB
bHBoYURvUHJlbXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVs
dGlwbHk7CiAgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRGaXJzdDsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdDoKQEAgLTIxNCwxMiAr
MjExLDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1h
Z2UsCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Uga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRM
YXN0OgogICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRB
bHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBo
YURvVW5tdWx0aXBseTsKICAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdExhc3Q7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2Uga0NHSW1hZ2VBbHBoYUxhc3Q6CiAgICAgICAgIGlmIChw
cmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9QcmVt
dWx0aXBseTsKKyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsKICAg
ICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdExhc3Q7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDoKQEAgLTIzMSwzMyArMjI4LDI5IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBTb3VyY2VEYXRhRm9ybWF0
IHNyY0RhdGFGb3JtYXQgPSBnZXRTb3VyY2VEYXRhRm9ybWF0KGNvbXBvbmVudHNQZXJQaXhlbCwg
YWxwaGFGb3JtYXQsIGJpdHNQZXJDb21wb25lbnQgPT0gMTYsIGJpZ0VuZGlhblNvdXJjZSk7Ci0g
ICAgaWYgKHNyY0RhdGFGb3JtYXQgPT0gU291cmNlRm9ybWF0TnVtRm9ybWF0cykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcGl4ZWxEYXRhOwotICAg
IHBpeGVsRGF0YS5hZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQ
cm92aWRlcihjZ0ltYWdlKSkpOwotICAgIGlmICghcGl4ZWxEYXRhKQorICAgIG1faW1hZ2VTb3Vy
Y2VGb3JtYXQgPSBnZXRTb3VyY2VEYXRhRm9ybWF0KGNvbXBvbmVudHNQZXJQaXhlbCwgYWxwaGFG
b3JtYXQsIGJpdHNQZXJDb21wb25lbnQgPT0gMTYsIGJpZ0VuZGlhblNvdXJjZSk7CisgICAgaWYg
KG1faW1hZ2VTb3VyY2VGb3JtYXQgPT0gU291cmNlRm9ybWF0TnVtRm9ybWF0cykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFVJbnQ4KiByZ2JhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihw
aXhlbERhdGEuZ2V0KCkpOwogCi0gICAgdW5zaWduZWQgaW50IHBhY2tlZFNpemU7Ci0gICAgLy8g
T3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KLSAgICBpZiAo
Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAm
cGFja2VkU2l6ZSwgMCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgIG1fcGl4
ZWxEYXRhLmFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3Zp
ZGVyKG1fY2dJbWFnZSkpKTsKKyAgICBpZiAoIW1fcGl4ZWxEYXRhKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAgIG1faW1h
Z2VQaXhlbERhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihDRkRhdGFHZXRCeXRl
UHRyKG1fcGl4ZWxEYXRhLmdldCgpKSk7CiAKICAgICB1bnNpZ25lZCBpbnQgc3JjVW5wYWNrQWxp
Z25tZW50ID0gMDsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJS
b3coY2dJbWFnZSk7Ci0gICAgdW5zaWduZWQgaW50IHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJp
dHNQZXJQaXhlbCAvIDggKiB3aWR0aDsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdl
R2V0Qnl0ZXNQZXJSb3cobV9jZ0ltYWdlKTsKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0gYnl0ZXNQ
ZXJSb3cgLSBiaXRzUGVyUGl4ZWwgLyA4ICogbV9pbWFnZVdpZHRoOwogICAgIGlmIChwYWRkaW5n
KSB7CiAgICAgICAgIHNyY1VucGFja0FsaWdubWVudCA9IHBhZGRpbmcgKyAxOwogICAgICAgICB3
aGlsZSAoYnl0ZXNQZXJSb3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQpCiAgICAgICAgICAgICArK3Ny
Y1VucGFja0FsaWdubWVudDsKICAgICB9Ci0gICAgYm9vbCBydCA9IHBhY2tQaXhlbHMocmdiYSwg
c3JjRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3JjVW5wYWNrQWxpZ25tZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFPcCwgb3V0cHV0VmVj
dG9yLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHJ0OworCisgICAgbV9pbWFnZVNvdXJjZVVucGFja0Fs
aWdubWVudCA9IHNyY1VucGFja0FsaWdubWVudDsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIq
IGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFz
V2lkdGgsIGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRl
eHQzRENsdXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCmluZGV4IDdkZjFlZTkyZGI1OTNiZjc3MDA4
MTdkNTJhZDViODM1OWYwNzlmYjEuLjc2YTM2YzA0NWJlNWM2OGQxZTE3ZjQ1M2Y5NDZiYmZiNTcx
Y2I3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0
ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKQEAgLTU2
LDcgKzU2LDExIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdl
RGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBl
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUs
IFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdl
RXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IDJlMmE0
OTMxMzg5MDMyYzMwNmQzNmNmYWUxYmQ5MGQ2NGIxOTg1MDMuLjRhZmU1MDgyOGRiNGVhZDE1OTdh
YzNjNjhjZjY3ZjUzZDdhODdhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAtMjQx
LDcgKzI0MSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVHcmFwaGljc1N1cmZh
Y2VzKGNvbnN0IEludFNpemUmIHNpemUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiwgR0MzRGVudW0gLyogZm9ybWF0ICovLCBHQzNEZW51
bSAvKiB0eXBlICovLCBib29sIC8qIHByZW11bHRpcGx5QWxwaGEgKi8sIGJvb2wgLyogaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUgKi8sIFZlY3Rvcjx1aW50OF90PiYgLyogb3V0cHV0VmVjdG9y
ICovKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3Io
KQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFj
dEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAKaW5kZXggMjM3ZDQ3ZWVkN2M3MmJlMzdkMTNhNWI1NDk4YzQxYzQ2ZmRm
YmI0OS4uYTUwY2ViOTQxMzU3MTc4ZTNmNWIyMTc4MDc1ZDllNGQyZjg1OGRkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RR
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAKQEAgLTQ4Niw1NyArNDg2LDU2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIH0KICNlbmRp
ZgogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9y
Ojp+SW1hZ2VFeHRyYWN0b3IoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKIHsKICAgICBVTlVTRURfUEFSQU0oaWdub3JlR2FtbWFB
bmRDb2xvclByb2ZpbGUpOwotICAgIGlmICghaW1hZ2UpCisgICAgaWYgKCFtX2ltYWdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBRSW1hZ2UgcXRJbWFnZTsKICAgICAvLyBJcyBpbWFn
ZSBhbHJlYWR5IGxvYWRlZD8gSWYgbm90LCBsb2FkIGl0LgotICAgIGlmIChpbWFnZS0+ZGF0YSgp
KQotICAgICAgICBxdEltYWdlID0gUUltYWdlOjpmcm9tRGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVjaGFyKj4oaW1hZ2UtPmRhdGEoKS0+ZGF0YSgpKSwgaW1hZ2UtPmRhdGEoKS0+c2l6ZSgp
KTsKKyAgICBpZiAobV9pbWFnZS0+ZGF0YSgpKQorICAgICAgICBtX3F0SW1hZ2UgPSBRSW1hZ2U6
OmZyb21EYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWNoYXIqPihtX2ltYWdlLT5kYXRhKCkt
PmRhdGEoKSksIG1faW1hZ2UtPmRhdGEoKS0+c2l6ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAg
UVBpeG1hcCogbmF0aXZlUGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgICAgIFFQaXhtYXAqIG5hdGl2ZVBpeG1hcCA9IG1faW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgIGlmICghbmF0aXZlUGl4bWFwKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFdpdGggUVBBLCB3ZSBjYW4gYXZvaWQgYSBk
ZWVwIGNvcHkuCi0gICAgICAgIHF0SW1hZ2UgPSAqbmF0aXZlUGl4bWFwLT5oYW5kbGUoKS0+YnVm
ZmVyKCk7CisgICAgICAgIG1fcXRJbWFnZSA9ICpuYXRpdmVQaXhtYXAtPmhhbmRsZSgpLT5idWZm
ZXIoKTsKICAgICB9CiAKLSAgICBBbHBoYU9wIGFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKLSAg
ICBzd2l0Y2ggKHF0SW1hZ2UuZm9ybWF0KCkpIHsKKyAgICBtX2FscGhhT3AgPSBBbHBoYURvTm90
aGluZzsKKyAgICBzd2l0Y2ggKG1fcXRJbWFnZS5mb3JtYXQoKSkgewogICAgIGNhc2UgUUltYWdl
OjpGb3JtYXRfUkdCMzI6CiAgICAgICAgIC8vIEZvciBvcGFxdWUgaW1hZ2VzLCB3ZSBzaG91bGQg
bm90IHByZW11bHRpcGx5IG9yIHVubXVsdGlwbHkgYWxwaGEuCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgUUltYWdlOjpGb3JtYXRfQVJHQjMyOgogICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBo
YSkKLSAgICAgICAgICAgIGFscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CisgICAgICAgICAg
ICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQ6CiAgICAgICAgIGlmICghcHJl
bXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIGFscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsK
KyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUaGUgaW1hZ2UgaGFzIGEgZm9ybWF0IHRoYXQg
aXMgbm90IHN1cHBvcnRlZCBpbiBwYWNrUGl4ZWxzLiBXZSBoYXZlIHRvIGNvbnZlcnQgaXQgaGVy
ZS4KLSAgICAgICAgcXRJbWFnZSA9IHF0SW1hZ2UuY29udmVydFRvRm9ybWF0KHByZW11bHRpcGx5
QWxwaGEgPyBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCA6IFFJbWFnZTo6Rm9y
bWF0X0FSR0IzMik7CisgICAgICAgIG1fcXRJbWFnZSA9IG1fcXRJbWFnZS5jb252ZXJ0VG9Gb3Jt
YXQocHJlbXVsdGlwbHlBbHBoYSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVk
IDogUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
dW5zaWduZWQgaW50IHBhY2tlZFNpemU7Ci0gICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBw
YWNrZWQgKGFsaWdubWVudCA9PSAxKS4KLSAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
Zm9ybWF0LCB0eXBlLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxLCAmcGFja2Vk
U2l6ZSwgMCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgIG1faW1hZ2VXaWR0
aCA9IG1faW1hZ2UtPndpZHRoKCk7CisgICAgbV9pbWFnZUhlaWdodCA9IG1faW1hZ2UtPmhlaWdo
dCgpOworICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFtX2ltYWdlSGVpZ2h0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgbV9pbWFnZVBpeGVsRGF0YSA9IG1fcXRJbWFnZS5jb25zdEJpdHMo
KTsKKyAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gU291cmNlRm9ybWF0QkdSQTg7CisgICAgbV9p
bWFnZVNvdXJjZVVucGFja0FsaWdubWVudCA9IDA7CiAKLSAgICBvdXRwdXRWZWN0b3IucmVzaXpl
KHBhY2tlZFNpemUpOwotCi0gICAgcmV0dXJuIHBhY2tQaXhlbHMocXRJbWFnZS5jb25zdEJpdHMo
KSwgU291cmNlRm9ybWF0QkdSQTgsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgYWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJh
Y2soUGFzc093blB0cjxDb250ZXh0TG9zdENhbGxiYWNrPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RT
a2lhLmNwcAppbmRleCBmZWE2YWRjZTMwMTg1Nzc2NDA4NmVhMjdiNzVjZWJiOWU2YjE1NjhlLi5i
M2QxZWE3ZjdlYjdmOWE3ZTI0MmY1NDRkMWFjZGY2YThiNzNiOWI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHQzRFNraWEuY3BwCkBAIC00Miw1OCArNDIsNTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9y
Ojp+SW1hZ2VFeHRyYWN0b3IoKQogewotICAgIGlmICghaW1hZ2UpCisgICAgaWYgKG1fc2tpYUlt
YWdlKQorICAgICAgICBtX3NraWFJbWFnZS0+Yml0bWFwKCkudW5sb2NrUGl4ZWxzKCk7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQorewor
ICAgIGlmICghbV9pbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIE93blB0cjxOYXRp
dmVJbWFnZVNraWE+IHBpeGVsczsKLSAgICBOYXRpdmVJbWFnZVNraWEqIHNraWFJbWFnZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIEFscGhhT3AgbmVlZGVkQWxw
aGFPcCA9IEFscGhhRG9Ob3RoaW5nOwotICAgIGJvb2wgaGFzQWxwaGEgPSBza2lhSW1hZ2UgPyAh
c2tpYUltYWdlLT5iaXRtYXAoKS5pc09wYXF1ZSgpIDogdHJ1ZTsKLSAgICBpZiAoKCFza2lhSW1h
Z2UgfHwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0
aXBseUFscGhhKSkgJiYgaW1hZ2UtPmRhdGEoKSkgeworICAgIG1fc2tpYUltYWdlID0gbV9pbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBtX2FscGhhT3AgPSBBbHBoYURv
Tm90aGluZzsKKyAgICBib29sIGhhc0FscGhhID0gbV9za2lhSW1hZ2UgPyAhbV9za2lhSW1hZ2Ut
PmJpdG1hcCgpLmlzT3BhcXVlKCkgOiB0cnVlOworICAgIGlmICgoIW1fc2tpYUltYWdlIHx8IGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJlbXVsdGlwbHlBbHBo
YSkpICYmIG1faW1hZ2UtPmRhdGEoKSkgewogICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCByYXcg
dW5wcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEuCiAgICAgICAgIE93blB0cjxJbWFnZURlY29kZXI+
IGRlY29kZXIoYWRvcHRQdHIoSW1hZ2VEZWNvZGVyOjpjcmVhdGUoCi0gICAgICAgICAgICAqKGlt
YWdlLT5kYXRhKCkpLCBJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLAorICAgICAg
ICAgICAgKihtX2ltYWdlLT5kYXRhKCkpLCBJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBs
aWVkLAogICAgICAgICAgICAgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBJbWFnZVNvdXJj
ZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVJZ25vcmVkIDogSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlQXBwbGllZCkpKTsKICAgICAgICAgaWYgKCFkZWNvZGVyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBkZWNvZGVyLT5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRy
dWUpOworICAgICAgICBkZWNvZGVyLT5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CiAg
ICAgICAgIGlmICghZGVjb2Rlci0+ZnJhbWVDb3VudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleCgwKTsKICAgICAgICAgaWYgKCFmcmFtZSB8fCBmcmFtZS0+c3RhdHVzKCkgIT0gSW1hZ2VG
cmFtZTo6RnJhbWVDb21wbGV0ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
aGFzQWxwaGEgPSBmcmFtZS0+aGFzQWxwaGEoKTsKLSAgICAgICAgcGl4ZWxzID0gYWRvcHRQdHIo
ZnJhbWUtPmFzTmV3TmF0aXZlSW1hZ2UoKSk7Ci0gICAgICAgIGlmICghcGl4ZWxzLmdldCgpIHx8
ICFwaXhlbHMtPmlzRGF0YUNvbXBsZXRlKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkud2lkdGgoKSB8
fCAhcGl4ZWxzLT5iaXRtYXAoKS5oZWlnaHQoKSkKKyAgICAgICAgbV9uYXRpdmVJbWFnZSA9IGFk
b3B0UHRyKGZyYW1lLT5hc05ld05hdGl2ZUltYWdlKCkpOworICAgICAgICBpZiAoIW1fbmF0aXZl
SW1hZ2UuZ2V0KCkgfHwgIW1fbmF0aXZlSW1hZ2UtPmlzRGF0YUNvbXBsZXRlKCkgfHwgIW1fbmF0
aXZlSW1hZ2UtPmJpdG1hcCgpLndpZHRoKCkgfHwgIW1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmhl
aWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBTa0JpdG1hcDo6Q29u
ZmlnIHNraWFDb25maWcgPSBwaXhlbHMtPmJpdG1hcCgpLmNvbmZpZygpOworICAgICAgICBTa0Jp
dG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5jb25maWco
KTsKICAgICAgICAgaWYgKHNraWFDb25maWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmln
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBza2lhSW1hZ2UgPSBwaXhlbHMu
Z2V0KCk7CisgICAgICAgIG1fc2tpYUltYWdlID0gbV9uYXRpdmVJbWFnZS5nZXQoKTsKICAgICAg
ICAgaWYgKGhhc0FscGhhICYmIHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRB
bHBoYU9wID0gQWxwaGFEb1ByZW11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxw
aGFEb1ByZW11bHRpcGx5OwogICAgIH0gZWxzZSBpZiAoIXByZW11bHRpcGx5QWxwaGEgJiYgaGFz
QWxwaGEpCi0gICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKLSAgICBp
ZiAoIXNraWFJbWFnZSkKKyAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7Cisg
ICAgaWYgKCFtX3NraWFJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFNr
Qml0bWFwJiBza2lhSW1hZ2VSZWYgPSBza2lhSW1hZ2UtPmJpdG1hcCgpOwotICAgIFNrQXV0b0xv
Y2tQaXhlbHMgbG9jayhza2lhSW1hZ2VSZWYpOwotICAgIEFTU0VSVChza2lhSW1hZ2VSZWYucm93
Qnl0ZXMoKSA9PSBza2lhSW1hZ2VSZWYud2lkdGgoKSAqIDQpOwotICAgIHVuc2lnbmVkIGludCBw
YWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1l
bnQgPT0gMSkuCi0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwg
c2tpYUltYWdlUmVmLndpZHRoKCksIHNraWFJbWFnZVJlZi5oZWlnaHQoKSwgMSwgJnBhY2tlZFNp
emUsIDApICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKworICAgIG1faW1hZ2VTb3Vy
Y2VGb3JtYXQgPSBTS19CMzJfU0hJRlQgPyBTb3VyY2VGb3JtYXRSR0JBOCA6IFNvdXJjZUZvcm1h
dEJHUkE4OworICAgIG1faW1hZ2VXaWR0aCA9IG1fc2tpYUltYWdlLT5iaXRtYXAoKS53aWR0aCgp
OworICAgIG1faW1hZ2VIZWlnaHQgPSBtX3NraWFJbWFnZS0+Yml0bWFwKCkuaGVpZ2h0KCk7Cisg
ICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VIZWlnaHQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBvdXRwdXRWZWN0b3IucmVzaXplKHBhY2tlZFNpemUpOwotICAgIHJldHVybiBw
YWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZVJlZi5n
ZXRQaXhlbHMoKSksCi0gICAgICAgICAgICAgICAgICAgICAgU0tfQjMyX1NISUZUID8gU291cmNl
Rm9ybWF0UkdCQTggOiBTb3VyY2VGb3JtYXRCR1JBOCwKLSAgICAgICAgICAgICAgICAgICAgICBz
a2lhSW1hZ2VSZWYud2lkdGgoKSwgc2tpYUltYWdlUmVmLmhlaWdodCgpLCAwLAotICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRh
dGEoKSk7CisgICAgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCA9IDA7CisgICAgbV9za2lh
SW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gbV9z
a2lhSW1hZ2UtPmJpdG1hcCgpLmdldFBpeGVscygpOworICAgIHJldHVybiB0cnVlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>