<?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>200185</bug_id>
          
          <creation_ts>2019-07-26 17:02:31 -0700</creation_ts>
          <short_desc>ShareableBitmap::createGraphicsContext() should return nullptr when CGBitmapContextCreateWithData returns nil</short_desc>
          <delta_ts>2019-07-29 18:36:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200184</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ggaren</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1556291</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-26 17:02:31 -0700</bug_when>
    <thetext>We should be returning nullptr instead of creating GraphicsContext with null platform graphics context when CGBitmapContextCreateWithData returns nil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556337</commentid>
    <comment_count>1</comment_count>
      <attachid>375013</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-26 20:06:37 -0700</bug_when>
    <thetext>Created attachment 375013
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556709</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-29 14:21:56 -0700</bug_when>
    <thetext>Committed r247921: &lt;https://trac.webkit.org/changeset/247921&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556710</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-29 14:22:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/53679029&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556785</commentid>
    <comment_count>4</comment_count>
      <attachid>375013</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-07-29 16:08:15 -0700</bug_when>
    <thetext>Comment on attachment 375013
Fixes the bug

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

&gt; Source/WebKit/Shared/ContextMenuContextData.cpp:71
&gt; +    auto graphicsContext = m_controlledImage-&gt;createGraphicsContext();
&gt; +    if (!graphicsContext)
&gt; +        return;
&gt; +    graphicsContext-&gt;drawImage(*image, IntPoint());

These four lines can be shorten to two:

if (auto graphicsContext = m_controlledImage-&gt;createGraphicsContext())
    graphicsContext-&gt;drawImage(*image, IntPoint());

&gt; Source/WebKit/Shared/WebCoreArgumentCoders.cpp:1100
&gt; +    auto graphicsContext = bitmap-&gt;createGraphicsContext();
&gt; +    if (graphicsContext)
&gt; +        graphicsContext-&gt;drawImage(image, IntPoint());

Getting graphicsContext can be moved to the if-statement.

&gt; Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.mm:283
&gt; +        if (context)
&gt; +            drawInContext(*context, backImage.get());

The check for &quot;if (context)&quot; should be moved above few lines immediately after assigning the context. There is no need to calculate backImage if context is null.

&gt; Source/WebKit/Shared/cg/ShareableBitmapCG.cpp:97
&gt;      ASSERT(bitmapContext.get());

I do not think we need this assertion after adding the above if-statement.

&gt; Source/WebKit/WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:188
&gt;      auto graphicsContext = webImage-&gt;bitmap().createGraphicsContext();
&gt; +    if (!graphicsContext)
&gt; +        return nullptr;
&gt; +
&gt;      graphicsContext-&gt;drawImage(bitmapImage, {{ }, size});

These four lines can be shortened to two if use &quot;if (auto graphicsContext = ...)&quot;

&gt; Source/WebKit/WebProcess/Plugins/PluginProxy.cpp:216
&gt;          auto graphicsContext = m_backingStore-&gt;createGraphicsContext();
&gt; -        graphicsContext-&gt;applyDeviceScaleFactor(contentsScaleFactor());
&gt; -        graphicsContext-&gt;setCompositeOperation(CompositeCopy);
&gt; +        if (graphicsContext) {

Calculating graphicsContext can be moved to the if-statement.

&gt; Source/WebKit/WebProcess/Plugins/PluginProxy.cpp:728
&gt;          // Blit the plug-in backing store into our own backing store.
&gt;          auto graphicsContext = m_backingStore-&gt;createGraphicsContext();
&gt; -        graphicsContext-&gt;applyDeviceScaleFactor(contentsScaleFactor());
&gt; -        graphicsContext-&gt;setCompositeOperation(CompositeCopy);
&gt; -        m_pluginBackingStore-&gt;paint(*graphicsContext, contentsScaleFactor(), paintedRect.location(), paintedRect);
&gt; +        if (graphicsContext) {

Ditto.

&gt; Source/WebKit/WebProcess/Plugins/Netscape/NetscapePlugin.cpp:750
&gt;      auto bitmap = ShareableBitmap::createShareable(backingStoreSize, { });

Don&apos;t we need check whether bitmap is equal to nullptr or not? We check for that in convertCGImageToBitmap().

&gt; Source/WebKit/WebProcess/Plugins/PDF/PDFPlugin.mm:1245
&gt;      auto bitmap = ShareableBitmap::createShareable(backingStoreSize, { });

Ditto.

&gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:4789
&gt; +        if (graphicsContext) {

It is strange that you decided to continue in this function if graphicsContext is nullptr instead of returning. Above this code we return if (!bitmap). What is the point in continuing this function If graphicsContext is nullptr?

&gt; Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:744
&gt; +        if (graphicsContext)
&gt; +            m_webPage.drawRect(*graphicsContext, rect);
&gt;          updateInfo.updateRects.append(rect);

Why do we append rect to updateRects if graphicsContext is nullptr? We are not drawing on this rect in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556858</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-07-29 18:36:31 -0700</bug_when>
    <thetext>Please feel free to post a cleanup patch. I don&apos;t know enough about this code to follow up in a meaningful way. I was just trying to fix a crash.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375013</attachid>
            <date>2019-07-26 20:06:37 -0700</date>
            <delta_ts>2019-07-28 10:07:13 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-200185-20190726200636.patch</filename>
            <type>text/plain</type>
            <size>18279</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDc4ODcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE5LTA3LTI2ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KCkgc2hvdWxkIHJldHVybiBudWxscHRyIHdoZW4gQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlV2l0aERhdGEgcmV0dXJucyBuaWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlIHNob3VsZCBub3QgYmUgY3JlYXRpbmcgR3JhcGhpY3ND
b250ZXh0IHdpdGggbmlsIENHQ29udGV4dFJlZiBpbiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpCisgICAgICAgIGFzIHN1Y2ggYSBHcmFwaGljc0NvbnRleHQgaXMgb25s
eSB1c2VkIGZvciBzcGVjaWZpYyBwdXJwb3Nlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMg
YW4gZWFybHkgcmV0dXJuIHRvIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkgd2hlbiBDR0JpdG1hcENvbnRleHRDcmVhdGVXaXRoRGF0YQorICAgICAgICByZXR1cm5zIG5p
bCBDR0NvbnRleHRSZWYuCisKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6cGFp
bnQpOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9jZy9XS0ltYWdlQ0cuY3BwOgorICAgICAgICAo
V0tJbWFnZUNyZWF0ZUZyb21DR0ltYWdlKToKKyAgICAgICAgKiBTaGFyZWQvQ29udGV4dE1lbnVD
b250ZXh0RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dERhdGE6
OkNvbnRleHRNZW51Q29udGV4dERhdGEpOgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAqIFNo
YXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjptYWtlQ0dJbWFnZUNvcHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmltYWdlRm9yUmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9E
T00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0OjppbWFnZSBjb25zdCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OnNuYXBzaG90KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpzbmFwc2hvdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJveHk6OnBhaW50KToKKyAgICAgICAg
KFdlYktpdDo6UGx1Z2luUHJveHk6OnVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29u
dmVydENHSW1hZ2VUb0JpdG1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaXNwbGF5KToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QgY29uc3QpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c25hcHNob3RBdFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzbmFwc2hvdE5vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UmVjdFRvSW1hZ2UpOgorCiAyMDE5LTA3
LTI2ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTmF2aWdh
dGlvblNPQXV0aG9yaXphdGlvblNlc3Npb24gc2hvdWxkIGNoZWNrIHRoZSBhY3RpdmUgVVJMIG9m
IHRoZSByZXNwb25kaW5nIHBhZ2UgYWZ0ZXIgd2FraW5nIHVwIGZyb20gd2FpdGluZwpJbmRleDog
U291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5jcHAJKHJldmlzaW9uIDI0Nzg4MikKKysrIFNvdXJjZS9XZWJLaXQvUGx1Z2luUHJvY2Vz
cy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgz
LDggQEAgdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnBhaW50KCkKIAogICAgIC8vIENyZWF0
ZSBhIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBtX2JhY2tp
bmdTdG9yZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKCFncmFwaGljc0NvbnRl
eHQpCisgICAgICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcmVhbGx5IGNhbGwgYXBwbHlEZXZpY2VTY2FsZUZhY3RvciBpbnN0ZWFkIG9m
IHNjYWxlLCBidXQgdGhhdCBlbmRzIHVwIGNhbGxpbmcgaW50byBXS1NJCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db250ZXh0TWVudUNvbnRleHREYXRhLmNwcAkocmV2aXNpb24g
MjQ3ODgyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvQ29udGV4dE1lbnVDb250ZXh0RGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDEwIEBAIENvbnRleHRNZW51Q29udGV4dERh
dGE6OkNvbnRleHRNZW51Q29udGUKIAogICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IHRoZSByb3Vu
ZGluZyBzdHJhdGVneSBmb3IgU2hhcmVhYmxlQml0bWFwLgogICAgIG1fY29udHJvbGxlZEltYWdl
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoSW50U2l6ZShpbWFnZS0+c2l6ZSgp
KSwgeyB9KTsKLSAgICBtX2NvbnRyb2xsZWRJbWFnZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkt
PmRyYXdJbWFnZSgqaW1hZ2UsIEludFBvaW50KCkpOworICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0
ID0gbV9jb250cm9sbGVkSW1hZ2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICgh
Z3JhcGhpY3NDb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2UoKmltYWdlLCBJbnRQb2ludCgpKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDI0
Nzg4MikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOTUsNyArMTA5NSw5IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxD
cmVkZW50aWFsPjo6ZGVjb2RlKEQKIHN0YXRpYyB2b2lkIGVuY29kZUltYWdlKEVuY29kZXImIGVu
Y29kZXIsIEltYWdlJiBpbWFnZSkKIHsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKGltYWdlLnNpemUo
KSksIHsgfSk7Ci0gICAgYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKS0+ZHJhd0ltYWdl
KGltYWdlLCBJbnRQb2ludCgpKTsKKyAgICBhdXRvIGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKKyAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIEludFBvaW50KCkpOwogCiAgICAg
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwogICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvYy9jZy9XS0ltYWdlQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2NnL1dLSW1hZ2VD
Ry5jcHAJKHJldmlzaW9uIDI0Nzg4MikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2Nn
L1dLSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDkgQEAgV0tJbWFnZVJl
ZiBXS0ltYWdlQ3JlYXRlRnJvbUNHSW1hZ2UoQ0dJbQogICAgIGF1dG8gd2ViSW1hZ2UgPSBXZWJL
aXQ6OldlYkltYWdlOjpjcmVhdGUoaW1hZ2VTaXplLCBXZWJLaXQ6OnRvSW1hZ2VPcHRpb25zKG9w
dGlvbnMpKTsKIAogICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gd2ViSW1hZ2UtPmJpdG1hcCgp
LmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0KQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0KFdlYkNv
cmU6OkZsb2F0UG9pbnQoMCwgMCksIGltYWdlU2l6ZSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGVhclJlY3QocmVjdCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3TmF0aXZlSW1hZ2UoaW1h
Z2VSZWYsIGltYWdlU2l6ZSwgcmVjdCwgcmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLm1tCShyZXZpc2lvbiAyNDc4ODIpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1v
dGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI3OSw3ICsyNzksOCBAQCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KCkK
ICAgICAgICAgaWYgKG1fYmFja0J1ZmZlci5iaXRtYXAgJiYgIXdpbGxQYWludEVudGlyZUJhY2tp
bmdTdG9yZSkKICAgICAgICAgICAgIGJhY2tJbWFnZSA9IG1fYmFja0J1ZmZlci5iaXRtYXAtPm1h
a2VDR0ltYWdlKCk7CiAKLSAgICAgICAgZHJhd0luQ29udGV4dCgqY29udGV4dCwgYmFja0ltYWdl
LmdldCgpKTsKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgICAgICBkcmF3SW5Db250ZXh0
KCpjb250ZXh0LCBiYWNrSW1hZ2UuZ2V0KCkpOwogICAgIH0KICAgICAKICAgICBtX2xheWVyLT5v
d25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJMYXllckRpZERpc3BsYXkobV9sYXllcik7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCShyZXZpc2lv
biAyNDc4ODIpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDkgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gU2hhcmVhYgogCiAgICAgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IGNhbGN1
bGF0ZUJ5dGVzUGVyUGl4ZWwobV9jb25maWd1cmF0aW9uKTsKICAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVXaXRo
RGF0YShkYXRhKCksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUGl4
ZWwgKiA4IC8gNCwgY2FsY3VsYXRlQnl0ZXNQZXJSb3cobV9zaXplLCBtX2NvbmZpZ3VyYXRpb24p
LnVuc2FmZUdldCgpLCBjb2xvclNwYWNlKG1fY29uZmlndXJhdGlvbiksIGJpdG1hcEluZm8obV9j
b25maWd1cmF0aW9uKSwgcmVsZWFzZUJpdG1hcENvbnRleHREYXRhLCB0aGlzKSk7Ci0gICAgCisg
ICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIEFT
U0VSVChiaXRtYXBDb250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdlIHdhbnQgdGhlIG9yaWdpbiB0
byBiZSBpbiB0aGUgdG9wIGxlZnQgY29ybmVyIHNvIHdlIGZsaXAgdGhlIGJhY2tpbmcgc3RvcmUg
Y29udGV4dC4KQEAgLTExNCw2ICsxMTYsOSBAQCB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQo
V2ViQ29yZTo6R3JhCiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gU2hhcmVhYmxlQml0bWFwOjptYWtl
Q0dJbWFnZUNvcHkoKQogewogICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gY3JlYXRlR3JhcGhp
Y3NDb250ZXh0KCk7CisgICAgaWYgKCFncmFwaGljc0NvbnRleHQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
KSk7CiAgICAgcmV0dXJuIGltYWdlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDI0Nzg4MikKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDkgQEAgUmVmUHRyPFdlYkltYWdlPiBJbmpl
Y3RlZEJ1bmRsZUhpdFRlc3RSZQogCiAgICAgLy8gRklYTUU6IG5lZWQgdG8gaGFuZGxlIEVYSUYg
cm90YXRpb24uCiAgICAgYXV0byBncmFwaGljc0NvbnRleHQgPSB3ZWJJbWFnZS0+Yml0bWFwKCku
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKCFncmFwaGljc0NvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCiAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoYml0
bWFwSW1hZ2UsIHt7IH0sIHNpemV9KTsKIAogICAgIHJldHVybiB3ZWJJbWFnZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAJKHJldmlzaW9uIDI0
Nzg4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw5
IEBAIHN0YXRpYyBSZWZQdHI8V2ViSW1hZ2U+IGltYWdlRm9yUmVjdChGcmEKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIGdyYXBoaWNzQ29udGV4dCA9IHNuYXBzaG90LT5iaXRt
YXAoKS5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyUmVj
dChJbnRSZWN0KEludFBvaW50KCksIGJpdG1hcFNpemUpKTsKICAgICBncmFwaGljc0NvbnRleHQt
PmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGdyYXBoaWNz
Q29udGV4dC0+c2NhbGUoYml0bWFwU2NhbGVGYWN0b3IpOwpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCShyZXZpc2lvbiAyNDc4ODIpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDkgQEAgUmVmUHRy
PFdlYkltYWdlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gYmFja2luZ1N0b3JlLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKICAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKHNjYWxlRmFjdG9yKTsKIAog
ICAgIHBhaW50UmVjdC5tb3ZlKGZyYW1lVmlldy0+ZnJhbWVSZWN0KCkueCgpLCBmcmFtZVZpZXct
PmZyYW1lUmVjdCgpLnkoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCShyZXZpc2lvbiAyNDc4ODIpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxMywxMiArMjEzLDE0IEBAIHZvaWQgUGx1Z2luUHJveHk6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCYKICAgICAKICAgICAgICAgLy8gQmxpdCB0aGUgcGx1Zy1pbiBiYWNraW5nIHN0b3JlIGludG8g
b3VyIG93biBiYWNraW5nIHN0b3JlLgogICAgICAgICBhdXRvIGdyYXBoaWNzQ29udGV4dCA9IG1f
YmFja2luZ1N0b3JlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5hcHBseURldmljZVNjYWxlRmFjdG9yKGNvbnRlbnRzU2NhbGVGYWN0b3IoKSk7Ci0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNv
cHkpOworICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KSB7CisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoY29udGVudHNTY2FsZUZhY3RvcigpKTsK
KyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZUNvcHkpOwogCi0gICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3JlLT5wYWludCgqZ3JhcGhp
Y3NDb250ZXh0LCBjb250ZW50c1NjYWxlRmFjdG9yKCksIEludFBvaW50KCksIHBsdWdpbkJvdW5k
cygpKTsKKyAgICAgICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3JlLT5wYWludCgqZ3JhcGhpY3ND
b250ZXh0LCBjb250ZW50c1NjYWxlRmFjdG9yKCksIEludFBvaW50KCksIHBsdWdpbkJvdW5kcygp
KTsKIAotICAgICAgICBtX3BsdWdpbkJhY2tpbmdTdG9yZUNvbnRhaW5zVmFsaWREYXRhID0gdHJ1
ZTsKKyAgICAgICAgICAgIG1fcGx1Z2luQmFja2luZ1N0b3JlQ29udGFpbnNWYWxpZERhdGEgPSB0
cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9iYWNraW5nU3RvcmUtPnBhaW50KGdyYXBo
aWNzQ29udGV4dCwgY29udGVudHNTY2FsZUZhY3RvcigpLCBkaXJ0eVJlY3QubG9jYXRpb24oKSwg
ZGlydHlSZWN0KTsKQEAgLTcyMyw5ICs3MjUsMTEgQEAgdm9pZCBQbHVnaW5Qcm94eTo6dXBkYXRl
KGNvbnN0IEludFJlY3QmIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICAvLyBC
bGl0IHRoZSBwbHVnLWluIGJhY2tpbmcgc3RvcmUgaW50byBvdXIgb3duIGJhY2tpbmcgc3RvcmUu
CiAgICAgICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCgpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoY29udGVudHNTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7Ci0gICAgICAgIG1fcGx1Z2lu
QmFja2luZ1N0b3JlLT5wYWludCgqZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50c1NjYWxlRmFjdG9y
KCksIHBhaW50ZWRSZWN0LmxvY2F0aW9uKCksIHBhaW50ZWRSZWN0KTsKKyAgICAgICAgaWYgKGdy
YXBoaWNzQ29udGV4dCkgeworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hcHBseURldmlj
ZVNjYWxlRmFjdG9yKGNvbnRlbnRzU2NhbGVGYWN0b3IoKSk7CisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAg
ICAgIG1fcGx1Z2luQmFja2luZ1N0b3JlLT5wYWludCgqZ3JhcGhpY3NDb250ZXh0LCBjb250ZW50
c1NjYWxlRmFjdG9yKCksIHBhaW50ZWRSZWN0LmxvY2F0aW9uKCksIHBhaW50ZWRSZWN0KTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIEFzayB0aGUgY29udHJvbGxlciB0byBpbnZhbGlkYXRl
IHRoZSByZWN0IGZvciB1cy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAJKHJldmlzaW9u
IDI0Nzg4MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ5LDYgKzc0OSw4IEBAIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IE5ldHNjYXBlUGx1Z2luOjoKIAogICAgIGF1dG8gYml0bWFwID0g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgeyB9KTsK
ICAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHJlYWxseSBjYWxsIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgaW5zdGVhZCBvZiBz
Y2FsZSwgYnV0IHRoYXQgZW5kcyB1cCBjYWxsaW5nIGludG8gV0tTSQogICAgIC8vIHdoaWNoIHdl
IGN1cnJlbnRseSBkb24ndCBoYXZlIGluaXRpYXRlZCBpbiB0aGUgcGx1Zy1pbiBwcm9jZXNzLgpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCShyZXZpc2lvbiAyNDc4ODIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ0LDYgKzEyNDQsOCBA
QCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBQREZQbHVnaW46OnNuYXBzCiAKICAgICBhdXRvIGJp
dG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9yZVNpemUs
IHsgfSk7CiAgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQo
KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKGNvbnRlbnRzU2NhbGVGYWN0b3IsIC1jb250ZW50c1NjYWxl
RmFjdG9yKSk7CiAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgp
LCAtbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgKyBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRy
YWdDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCShyZXZpc2lvbiAyNDc4ODIpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGll
bnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsOSBAQCBzdGF0aWMgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gY29udmVydENHCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
OworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwog
ICAgIFVJR3JhcGhpY3NQdXNoQ29udGV4dChncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpLCBp
bWFnZSk7CiAgICAgVUlHcmFwaGljc1BvcENvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDI0Nzg4MikKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODU2LDYgKzg1Niw5IEBAIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFdlYkZyYW1l
OjpjcmVhdGUKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHByb3ZpZGluZyBhIHdh
eSB0byB1c2Ugc3VicGl4ZWwgYW50aWFsaWFzaW5nIGZvciB0aGUgc25hcHNob3QKICAgICAvLyBp
ZiB3ZSdyZSBjb21wb3NpdGluZyB0aGlzIGltYWdlIG9udG8gYSBzb2xpZCBjb2xvciAoZS5nLiB0
aGUgbW9kZXJuIGZpbmQgaW5kaWNhdG9yIHN0eWxlKS4KICAgICBhdXRvIGdyYXBoaWNzQ29udGV4
dCA9IHNoYXJlZFNuYXBzaG90LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWdy
YXBoaWNzQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvciA9IGNvcmVGcmFtZSgpLT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7
CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShzbmFwc2hvdCks
IEZsb2F0UG9pbnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjQ3ODgyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzIsNiArMjM3Miw4
IEBAIFJlZlB0cjxXZWJJbWFnZT4gV2ViUGFnZTo6c25hcHNob3RBdFNpemUKICAgICBpZiAoIXNu
YXBzaG90KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIGdyYXBoaWNzQ29udGV4
dCA9IHNuYXBzaG90LT5iaXRtYXAoKS5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAo
IWdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBwYWludFNu
YXBzaG90QXRTaXplKHJlY3QsIGJpdG1hcFNpemUsIG9wdGlvbnMsICpjb3JlRnJhbWUsICpmcmFt
ZVZpZXcsICpncmFwaGljc0NvbnRleHQpOwogCkBAIC0yNDQxLDYgKzI0NDMsOCBAQCBSZWZQdHI8
V2ViSW1hZ2U+IFdlYlBhZ2U6OnNuYXBzaG90Tm9kZShXCiAgICAgaWYgKCFzbmFwc2hvdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBzbmFwc2hv
dC0+Yml0bWFwKCkuY3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKCFncmFwaGljc0Nv
bnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCEob3B0aW9ucyAmIFNu
YXBzaG90T3B0aW9uc0V4Y2x1ZGVEZXZpY2VTY2FsZUZhY3RvcikpIHsKICAgICAgICAgZG91Ymxl
IGRldmljZVNjYWxlRmFjdG9yID0gY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAg
LTQ3ODIsMjAgKzQ3ODYsMjEgQEAgdm9pZCBXZWJQYWdlOjpkcmF3UmVjdFRvSW1hZ2UodWludDY0
X3QgZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZ3JhcGhp
Y3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLQotICAgICAgICBm
bG9hdCBwcmludGluZ1NjYWxlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGltYWdlU2l6ZS53aWR0aCgp
KSAvIHJlY3Qud2lkdGgoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShwcmludGlu
Z1NjYWxlKTsKKyAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkgeworICAgICAgICAgICAgZmxv
YXQgcHJpbnRpbmdTY2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0PihpbWFnZVNpemUud2lkdGgoKSkg
LyByZWN0LndpZHRoKCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKHByaW50
aW5nU2NhbGUpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpZiAoUmV0YWluUHRyPFBE
RkRvY3VtZW50PiBwZGZEb2N1bWVudCA9IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFtZShjb3Jl
RnJhbWUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fcHJpbnRDb250ZXh0KTsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgwLCAtcmVjdC5oZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBkcmF3UERGRG9jdW1lbnQoZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
cGRmRG9jdW1lbnQuZ2V0KCksIHByaW50SW5mbywgcmVjdCk7Ci0gICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgaWYgKFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQgPSBwZGZEb2N1
bWVudEZvclByaW50aW5nRnJhbWUoY29yZUZyYW1lKSkgeworICAgICAgICAgICAgICAgIEFTU0VS
VCghbV9wcmludENvbnRleHQpOworICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50
cmFuc2xhdGUoMCwgLXJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGRyYXdQREZEb2N1
bWVudChncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBwZGZEb2N1bWVudC5nZXQo
KSwgcHJpbnRJbmZvLCByZWN0KTsKKyAgICAgICAgICAgIH0gZWxzZQogI2VuZGlmCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbFJlY3QoKmdyYXBoaWNzQ29udGV4
dCwgcmVjdCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9wcmludENvbnRleHQt
PnNwb29sUmVjdCgqZ3JhcGhpY3NDb250ZXh0LCByZWN0KTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCiAgICAgICAgIGltYWdlID0gV2ViSW1hZ2U6OmNyZWF0ZShiaXRtYXAucmVsZWFzZU5v
bk51bGwoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCShyZXZpc2lvbiAyNDc4ODIpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMSwx
NCArNzMxLDE2IEBAIHZvaWQgRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaXMKICAg
ICBtX3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKIAogICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0
ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICBncmFwaGljc0NvbnRleHQt
PmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIGlmIChncmFw
aGljc0NvbnRleHQpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hcHBseURldmljZVNjYWxl
RmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFu
c2xhdGUoLWJvdW5kcy54KCksIC1ib3VuZHMueSgpKTsKKyAgICB9CiAKICAgICB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMgPSBib3VuZHM7CiAKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5z
bGF0ZSgtYm91bmRzLngoKSwgLWJvdW5kcy55KCkpOwotCiAgICAgZm9yIChjb25zdCBhdXRvJiBy
ZWN0IDogcmVjdHMpIHsKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdSZWN0KCpncmFwaGljc0NvbnRl
eHQsIHJlY3QpOworICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICAgICAgbV93
ZWJQYWdlLmRyYXdSZWN0KCpncmFwaGljc0NvbnRleHQsIHJlY3QpOwogICAgICAgICB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RzLmFwcGVuZChyZWN0KTsKICAgICB9CiAK
</data>
<flag name="review"
          id="390810"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>