<?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>69530</bug_id>
          
          <creation_ts>2011-10-06 09:04:33 -0700</creation_ts>
          <short_desc>re-add support for GDI text behind a compile flag</short_desc>
          <delta_ts>2011-10-13 15:07:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mike Reed">reed</reporter>
          <assigned_to name="Mike Reed">reed</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>479190</commentid>
    <comment_count>0</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-06 09:04:33 -0700</bug_when>
    <thetext>resupport GDI text behind a compile-flag[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[C-add support for GDI text behind a compile flag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479213</commentid>
    <comment_count>1</comment_count>
      <attachid>109968</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-06 09:38:52 -0700</bug_when>
    <thetext>Created attachment 109968
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479215</commentid>
    <comment_count>2</comment_count>
      <attachid>109968</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-06 09:40:04 -0700</bug_when>
    <thetext>Comment on attachment 109968
Patch

not ready for review yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479994</commentid>
    <comment_count>3</comment_count>
      <attachid>110144</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-07 07:50:36 -0700</bug_when>
    <thetext>Created attachment 110144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480002</commentid>
    <comment_count>4</comment_count>
      <attachid>110146</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-07 08:00:47 -0700</bug_when>
    <thetext>Created attachment 110146
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480011</commentid>
    <comment_count>5</comment_count>
      <attachid>110146</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 08:19:03 -0700</bug_when>
    <thetext>Comment on attachment 110146
Patch

Attachment 110146 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10006221</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480198</commentid>
    <comment_count>6</comment_count>
      <attachid>110191</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-07 12:14:09 -0700</bug_when>
    <thetext>Created attachment 110191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480199</commentid>
    <comment_count>7</comment_count>
      <attachid>110192</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-07 12:17:45 -0700</bug_when>
    <thetext>Created attachment 110192
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480346</commentid>
    <comment_count>8</comment_count>
      <attachid>110192</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-07 15:25:50 -0700</bug_when>
    <thetext>Comment on attachment 110192
Patch

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

Would you mind sending this to the win-layout trybot and posting a link? I want to be extra sure that this won&apos;t need a bunch of rebaselines before landing on a Friday afternoon.

&gt; LayoutTests/platform/chromium/test_expectations.txt:1373
&gt; +// Disable these while we&apos;re back to using GDI for text drawing. These give slightly
&gt; +// different results than with Skia. When we switch back to Skia, we can
&gt; +// reenable these.
&gt; +BUGCR99500 WIN : media/audio-repaint.html = IMAGE
&gt; +BUGCR99500 WIN : svg/as-background-image/animated-svg-as-background.html = IMAGE
&gt; +BUGCR99500 WIN : svg/batik/text/textStyles.svg = IMAGE
&gt; +BUGCR99500 WIN : svg/custom/simple-text-double-shadow.svg = IMAGE

these are the only layout tests that render differently on windows with this change? wow!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481052</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-10 12:07:19 -0700</bug_when>
    <thetext>http://build.chromium.org/p/tryserver.chromium/builders/win_layout_rel/builds/606</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481085</commentid>
    <comment_count>10</comment_count>
      <attachid>110192</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-10 12:57:32 -0700</bug_when>
    <thetext>Comment on attachment 110192
Patch

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

Awesome! Thanks so much.

r=me with a few nits to address before landing

&gt; Source/WebCore/ChangeLog:11
&gt; +        Reverts back to using GDI for text (when possible)
&gt; +        but keeps skia-text version behind a compile-flag. If/when we can
&gt; +        resolve the outstanding soft-clip and intl-performance bugs with the
&gt; +        skia version, we may change the compile-flag to reenable skia.

Please add a link to the commit where this code was deleted so people can look at the original history if they need to (you can link to revisions in WebKit with URLs of the form http://trac.webkit.org/changeset/12345).

&gt; Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp:449
&gt; +//    graphicsContext-&gt;platformContext()-&gt;prepareForSoftwareDraw();
&gt; +

don&apos;t check this in commented out - I don&apos;t think you need it, so it can just be deleted.

&gt; Source/WebCore/platform/graphics/chromium/FontChromiumWin.cpp:469
&gt; +        int curLen = std::min(kMaxBufferLength, numGlyphs - glyphIndex);

nit: webkit style is to put a &apos;using namespace std&apos; declaration at the top of the file and have this call be just min()

&gt; Source/WebCore/platform/graphics/skia/SkiaFontWin.cpp:47
&gt; +bool windowsCanHandleDrawTextShadow(GraphicsContext *context)

nit: WebKit style is the * goes with the type name, so GraphicsContext* context</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481094</commentid>
    <comment_count>11</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-10 13:10:13 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=65203

This was the change when GDI was initially removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481095</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-10 13:13:19 -0700</bug_when>
    <thetext>Right, please add a link to that in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481099</commentid>
    <comment_count>13</comment_count>
      <attachid>110388</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-10 13:21:47 -0700</bug_when>
    <thetext>Created attachment 110388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481101</commentid>
    <comment_count>14</comment_count>
      <attachid>110388</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-10 13:24:20 -0700</bug_when>
    <thetext>Comment on attachment 110388
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +        re-add support for GDI text behind a compile flag
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=69530
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +

I was hoping for a link somewhere in here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481103</commentid>
    <comment_count>15</comment_count>
      <attachid>110390</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-10 13:30:09 -0700</bug_when>
    <thetext>Created attachment 110390
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481105</commentid>
    <comment_count>16</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-10-10 13:31:48 -0700</bug_when>
    <thetext>previous patch lost all ChangeLog comments (I do love cygwin so)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481132</commentid>
    <comment_count>17</comment_count>
      <attachid>110390</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-10 13:55:53 -0700</bug_when>
    <thetext>Comment on attachment 110390
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481593</commentid>
    <comment_count>18</comment_count>
      <attachid>110390</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 06:10:42 -0700</bug_when>
    <thetext>Comment on attachment 110390
Patch

Clearing flags on attachment: 110390

Committed r97149: &lt;http://trac.webkit.org/changeset/97149&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481594</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-11 06:10:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483538</commentid>
    <comment_count>20</comment_count>
      <attachid>110390</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-13 15:07:57 -0700</bug_when>
    <thetext>Comment on attachment 110390
Patch

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

&gt; Source/WebCore/platform/graphics/skia/SkiaFontWin.cpp:46
&gt; +#if !ENABLE(SKIA_TEXT)

For future reference, this should have been USE(SKIA_TEXT).  ENABLE is for features visible in the platform.  USE is for which libraries (and which parts of those libraries) we use.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109968</attachid>
            <date>2011-10-06 09:38:52 -0700</date>
            <delta_ts>2011-10-07 07:50:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69530-20111006123850.patch</filename>
            <type>text/plain</type>
            <size>33347</size>
            <attacher name="Mike Reed">reed</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2ODE0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTEtMTAtMDYgIE1pa2UgUmVl
ZCAgPHJlZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRl
eHQgYmVoaW5kIGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gUmV2ZXJ0cyBiYWNrIHRvIHVzaW5nIEdESSBm
b3IgdGV4dCAod2hlbiBwb3NzaWJsZSkKKyAgICAgICAgYnV0IGtlZXBzIHNraWEtdGV4dCB2ZXJz
aW9uIGJlaGluZCBhIGNvbXBpbGUtZmxhZy4gSWYvd2hlbiB3ZSBjYW4KKyAgICAgICAgcmVzb2x2
ZSB0aGUgb3V0c3RhbmRpbmcgc29mdC1jbGlwIGFuZCBpbnRsLXBlcmZvcm1hbmNlIGJ1Z3Mgd2l0
aCB0aGUKKyAgICAgICAgc2tpYSB2ZXJzaW9uLCB3ZSBtYXkgY2hhbmdlIHRoZSBjb21waWxlLWZs
YWcgdG8gcmVlbmFibGUgc2tpYS4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5
QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJl
bmN5QXdhcmVGb250UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2Fy
ZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3
YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6
flRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6OlRy
YW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFy
ZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjp+VHJh
bnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJl
bmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6OmVzdGlt
YXRlVGV4dEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQ
YWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZHJhd0dseXBocyk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lB
d2FyZVVuaXNjcmliZVBhaW50ZXI6OmhkYyk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVu
Y3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6OlRy
YW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFu
c3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50
ZXI6On5UcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3Jp
YmVQYWludGVyOjplc3RpbWF0ZVRleHRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0ds
eXBoc1dpbik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVu
aXNjcmliZUhlbHBlcjo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4
dFNraWE6OmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93
c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NDYW5I
YW5kbGVUZXh0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzQ2FuSGFuZGxlVGV4
dERyYXdpbmdXaXRob3V0U2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NraWFGb250V2luLmg6CisKIDIwMTEtMTAtMDYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5Njc5
MS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
aHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAkocmV2aXNpb24gOTY3MjApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMzMzIEBACiAjaW5jbHVkZSAiU2tpYUZv
bnRXaW4uaCIKICNpbmNsdWRlICJVbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgiCiAKKyNpZmRlZiBT
VVBQT1JUX0dESV9URVhUCisjaW5jbHVkZSAiVHJhbnNwYXJlbmN5V2luLmgiCisjaW5jbHVkZSAi
c2tpYS9leHQvc2tpYV91dGlsc193aW4uaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8d2luZG93cy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZmRlZiBTVVBQT1JUX0dESV9URVhUCituYW1l
c3BhY2UgeworCitib29sIGNhbnZhc0hhc011bHRpcGxlTGF5ZXJzKGNvbnN0IFNrQ2FudmFzKiBj
YW52YXMpCit7CisgICAgU2tDYW52YXM6OkxheWVySXRlciBpdGVyKGNvbnN0X2Nhc3Q8U2tDYW52
YXMqPihjYW52YXMpLCBmYWxzZSk7CisgICAgaXRlci5uZXh0KCk7IC8vIFRoZXJlIGlzIGFsd2F5
cyBhdCBsZWFzdCBvbmUgbGF5ZXIuCisgICAgcmV0dXJuICFpdGVyLmRvbmUoKTsgLy8gVGhlcmUg
aXMgPiAxIGxheWVyIGlmIHRoZSB0aGUgaXRlcmF0b3IgY2FuIHN0aWwgYWR2YW5jZS4KK30KKwor
Y2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlciB7CitwdWJsaWM6CisgICAgVHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgflRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoKTsKKworcHJvdGVjdGVkOgor
ICAgIC8vIENhbGxlZCBieSBvdXIgc3ViY2xhc3MnIGNvbnN0cnVjdG9yIHRvIGluaXRpYWxpemUg
R0RJIGlmIG5lY2Vzc2FyeS4gVGhpcworICAgIC8vIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28g
aXQgY2FuIGJlIGNhbGxlZCBhZnRlciB0aGUgc3ViY2xhc3MgZmluaXNoZXMKKyAgICAvLyBjb25z
dHJ1Y3Rpb24gKGl0IGNhbGxzIHZpcnR1YWwgZnVuY3Rpb25zKS4KKyAgICB2b2lkIGluaXQoKTsK
KworICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0ZVRleHRCb3VuZHMoKSA9IDA7CisKKyAgICAv
LyBVc2UgdGhlIGNvbnRleHQgZnJvbSB0aGUgdHJhbnNwYXJlbmN5IGhlbHBlciB3aGVuIGRyYXdp
bmcgd2l0aCBHREkuIEl0CisgICAgLy8gbWF5IHBvaW50IHRvIGEgdGVtcG9yYXJ5IG9uZS4KKyAg
ICBHcmFwaGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0OworICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBtX3BsYXRmb3JtQ29udGV4dDsKKworICAgIEZsb2F0UG9pbnQgbV9wb2ludDsK
KworICAgIC8vIFNldCB3aGVuIFdpbmRvd3MgY2FuIGhhbmRsZSB0aGUgdHlwZSBvZiBkcmF3aW5n
IHdlJ3JlIGRvaW5nLgorICAgIGJvb2wgbV91c2VHREk7CisKKyAgICAvLyBUaGVzZSBtZW1iZXJz
IGFyZSB2YWxpZCBvbmx5IHdoZW4gbV91c2VHREkgaXMgc2V0LgorICAgIEhEQyBtX2hkYzsKKyAg
ICBUcmFuc3BhcmVuY3lXaW4gbV90cmFuc3BhcmVuY3k7CisKK3ByaXZhdGU6CisgICAgLy8gQ2Fs
bCB3aGVuIHdlJ3JlIHVzaW5nIEdESSBtb2RlIHRvIGluaXRpYWxpemUgdGhlIFRyYW5zcGFyZW5j
eVdpbiB0byBoZWxwCisgICAgLy8gdXMgZHJhdyBHREkgdGV4dC4KKyAgICB2b2lkIGluaXRpYWxp
emVGb3JHREkoKTsKKworICAgIGJvb2wgbV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXI7IC8vIFdl
IGNyZWF0ZWQgYSBsYXllciB0byBnaXZlIHRoZSBmb250IHNvbWUgYWxwaGEuCit9OworCitUcmFu
c3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAg
OiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCisgICAgLCBtX3BvaW50KHBvaW50KQorICAgICwgbV91
c2VHREkod2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKGNvbnRleHQpKQorICAgICwgbV9oZGMo
MCkKKyAgICAsIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyKGZhbHNlKQoreworfQorCit2b2lk
IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXQoKQoreworICAgIGlmIChtX3VzZUdE
SSkKKyAgICAgICAgaW5pdGlhbGl6ZUZvckdESSgpOworfQorCit2b2lkIFRyYW5zcGFyZW5jeUF3
YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkoKQoreworICAgIG1fZ3JhcGhpY3NDb250
ZXh0LT5zYXZlKCk7CisgICAgU2tDb2xvciBjb2xvciA9IG1fcGxhdGZvcm1Db250ZXh0LT5lZmZl
Y3RpdmVGaWxsQ29sb3IoKTsKKyAgICAvLyBVc2VkIG9ubHkgd2hlbiBtX2NyZWF0ZWRUcmFuc3Bh
cmVuY3lMYXllciBpcyB0cnVlLgorICAgIGZsb2F0IGxheWVyQWxwaGEgPSAwLjBmOworICAgIGlm
IChTa0NvbG9yR2V0QShjb2xvcikgIT0gMHhGRikgeworICAgICAgICAvLyBXaGVuIHRoZSBmb250
IGhhcyBzb21lIHRyYW5zcGFyZW5jeSwgYXBwbHkgaXQgYnkgY3JlYXRpbmcgYSBuZXcKKyAgICAg
ICAgLy8gdHJhbnNwYXJlbmN5IGxheWVyIHdpdGggdGhhdCBvcGFjaXR5IGFwcGxpZWQuIFdlJ2xs
IGFjdHVhbGx5IGNyZWF0ZQorICAgICAgICAvLyBhIG5ldyB0cmFuc3BhcmVuY3kgbGF5ZXIgYWZ0
ZXIgd2UgY2FsY3VsYXRlIHRoZSBib3VuZGluZyBib3guCisgICAgICAgIG1fY3JlYXRlZFRyYW5z
cGFyZW5jeUxheWVyID0gdHJ1ZTsKKyAgICAgICAgbGF5ZXJBbHBoYSA9IFNrQ29sb3JHZXRBKGNv
bG9yKSAvIDI1NS4wZjsKKyAgICAgICAgLy8gVGhlIGNvbG9yIHNob3VsZCBiZSBvcGFxdWUgbm93
LgorICAgICAgICBjb2xvciA9IFNrQ29sb3JTZXRSR0IoU2tDb2xvckdldFIoY29sb3IpLCBTa0Nv
bG9yR2V0Ryhjb2xvciksIFNrQ29sb3JHZXRCKGNvbG9yKSk7CisgICAgfQorCisgICAgVHJhbnNw
YXJlbmN5V2luOjpMYXllck1vZGUgbGF5ZXJNb2RlOworICAgIEludFJlY3QgbGF5ZXJSZWN0Owor
ICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC0+aXNEcmF3aW5nVG9JbWFnZUJ1ZmZlcigpKSB7Cisg
ICAgICAgIC8vIEFzc3VtZSBpZiB3ZSdyZSBkcmF3aW5nIHRvIGFuIGltYWdlIGJ1ZmZlciB0aGF0
IHRoZSBiYWNrZ3JvdW5kCisgICAgICAgIC8vIGlzIG5vdCBvcGFxdWUgYW5kIHdlIGhhdmUgdG8g
dW5kbyBDbGVhclR5cGUuIFdlIG1heSB3YW50IHRvCisgICAgICAgIC8vIGVuaGFuY2UgdGhpcyB0
byBhY3R1YWxseSBjaGVjaywgc2luY2UgaXQgd2lsbCBvZnRlbiBiZSBvcGFxdWUKKyAgICAgICAg
Ly8gYW5kIHdlIGNvdWxkIGRvIENsZWFyVHlwZSBpbiB0aGF0IGNhc2UuCisgICAgICAgIGxheWVy
TW9kZSA9IFRyYW5zcGFyZW5jeVdpbjo6VGV4dENvbXBvc2l0ZTsKKyAgICAgICAgbGF5ZXJSZWN0
ID0gZXN0aW1hdGVUZXh0Qm91bmRzKCk7CisgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5jbGlw
KGxheWVyUmVjdCk7CisgICAgICAgIGlmIChtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllcikKKyAg
ICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKGxheWVy
QWxwaGEpOworCisgICAgICAgIC8vIFRoZSB0cmFuc3BhcmVuY3kgaGVscGVyIHJlcXVpcmVzIHRo
YXQgd2UgZHJhdyB0ZXh0IGluIGJsYWNrIGluCisgICAgICAgIC8vIHRoaXMgbW9kZSBhbmQgaXQg
d2lsbCBhcHBseSB0aGUgY29sb3IuCisgICAgICAgIG1fdHJhbnNwYXJlbmN5LnNldFRleHRDb21w
b3NpdGVDb2xvcihjb2xvcik7CisgICAgICAgIGNvbG9yID0gU2tDb2xvclNldFJHQigwLCAwLCAw
KTsKKyAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyIHx8IGNhbnZhc0hh
c011bHRpcGxlTGF5ZXJzKG1fcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKSkpIHsKKyAgICAgICAg
Ly8gV2hlbiB3ZSdyZSBkcmF3aW5nIGEgd2ViIHBhZ2UsIHdlIGtub3cgdGhlIGJhY2tncm91bmQg
aXMgb3BhcXVlLAorICAgICAgICAvLyBidXQgaWYgd2UncmUgZHJhd2luZyB0byBhIGxheWVyLCB3
ZSBzdGlsbCBuZWVkIGV4dHJhIHdvcmsuCisgICAgICAgIGxheWVyTW9kZSA9IFRyYW5zcGFyZW5j
eVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXI7CisgICAgICAgIGxheWVyUmVjdCA9IGVzdGltYXRl
VGV4dEJvdW5kcygpOworICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+Y2xpcChsYXllclJlY3Qp
OworICAgICAgICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCisgICAgICAgICAgICBt
X2dyYXBoaWNzQ29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihsYXllckFscGhhKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBDb21tb24gY2FzZSBvZiBkcmF3aW5nIG9udG8gdGhlIGJv
dHRvbSBsYXllciBvZiBhIHdlYiBwYWdlOiB3ZQorICAgICAgICAvLyBrbm93IGV2ZXJ5dGhpbmcg
aXMgb3BhcXVlIHNvIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAg
bGF5ZXJNb2RlID0gVHJhbnNwYXJlbmN5V2luOjpOb0xheWVyOworICAgIH0KKworICAgIC8vIEJ1
ZyAyNjA4OCAtIGluaXQoKSBtaWdodCBmYWlsIGlmIGxheWVyUmVjdCBpcyBpbnZhbGlkLiBHaXZl
biB0aGlzLCB3ZQorICAgIC8vIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBjaGVjayBmb3IgbnVsbCBw
b2ludGVycyBldmVyeXdoZXJlIGFmdGVyIHRoaXMgY2FsbAorICAgIG1fdHJhbnNwYXJlbmN5Lmlu
aXQobV9ncmFwaGljc0NvbnRleHQsIGxheWVyTW9kZSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sIGxheWVyUmVjdCk7CisKKyAgICAvLyBT
ZXQgdXAgdGhlIERDLCB1c2luZyB0aGUgb25lIGZyb20gdGhlIHRyYW5zcGFyZW5jeSBoZWxwZXIu
CisgICAgaWYgKG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpKSB7CisgICAgICAgIG1f
aGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKSk7CisgICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgc2tpYTo6U2tD
b2xvclRvQ09MT1JSRUYoY29sb3IpKTsKKyAgICAgICAgU2V0QmtNb2RlKG1faGRjLCBUUkFOU1BB
UkVOVCk7CisgICAgfQorfQorCitUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcigpCit7CisgICAgaWYgKCFtX3VzZUdESSB8fCAhbV9ncmFw
aGljc0NvbnRleHQgfHwgIW1fcGxhdGZvcm1Db250ZXh0KQorICAgICAgICByZXR1cm47CisgICAg
bV90cmFuc3BhcmVuY3kuY29tcG9zaXRlKCk7CisgICAgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5j
eUxheWVyKQorICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOworICAgIGlmIChtX3RyYW5zcGFy
ZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkKKyAgICAgICAgc2tpYTo6RW5kUGxhdGZvcm1QYWludCht
X3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpOworfQorCisvLyBTcGVj
aWFsaXphdGlvbiBmb3Igc2ltcGxlIEdseXBoQnVmZmVyIHBhaW50aW5nLgorY2xhc3MgVHJhbnNw
YXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIgOiBwdWJsaWMgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlciB7CisgcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKEdyYXBo
aWNzQ29udGV4dCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2lt
cGxlRm9udERhdGEqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEds
eXBoQnVmZmVyJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwg
aW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50Jik7CisgICAgflRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKCk7CisKKyAg
ICAvLyBEcmF3cyB0aGUgcGFydGlhbCBzdHJpbmcgb2YgZ2x5cGhzLCBzdGFydGluZyBhdCB8c3Rh
cnRBZHZhbmNlfCB0byB0aGUKKyAgICAvLyBsZWZ0IG9mIG1fcG9pbnQuIFdlIGV4cHJlc3MgaXQg
dGhpcyB3YXkgc28gdGhhdCBpZiB3ZSdyZSB1c2luZyB0aGUgU2tpYQorICAgIC8vIGRyYXdpbmcg
cGF0aCB3ZSBjYW4gdXNlIGZsb2F0aW5nLXBvaW50IHBvc2l0aW9uaW5nLCBldmVuIHRob3VnaCB3
ZSBoYXZlCisgICAgLy8gdG8gdXNlIGludGVnZXIgcG9zaXRpb25pbmcgaW4gdGhlIEdESSBwYXRo
LgorICAgIGJvb2wgZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLCBjb25zdCBXT1JEKiBnbHlwaHMs
IGNvbnN0IGludCogYWR2YW5jZXMsIGZsb2F0IHN0YXJ0QWR2YW5jZSkgY29uc3Q7CisKKyBwcml2
YXRlOgorICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0ZVRleHRCb3VuZHMoKTsKKworICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnQ7CisgICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5
cGhCdWZmZXI7CisgICAgaW50IG1fZnJvbTsKKyAgICBpbnQgbV9udW1HbHlwaHM7CisKKyAgICAv
LyBXaGVuIG1fdXNlR2RpIGlzIHNldCwgdGhpcyBzdG9yZXMgdGhlIHByZXZpb3VzIEhGT05UIHNl
bGVjdGVkIGludG8gdGhlCisgICAgLy8gbV9oZGMgc28gd2UgY2FuIHJlc3RvcmUgaXQuCisgICAg
SEdESU9CSiBtX29sZEZvbnQ7IC8vIEZvciByZXN0b3JpbmcgdGhlIERDIHRvIGl0cyBvcmlnaW5h
bCBzdGF0ZS4KK307CisKK1RyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpUcmFuc3BhcmVu
Y3lBd2FyZUdseXBoUGFpbnRlcigKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCisgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLAorICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAorICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQorICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihjb250ZXh0LCBw
b2ludCkKKyAgICAsIG1fZm9udChmb250KQorICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZl
cikKKyAgICAsIG1fZnJvbShmcm9tKQorICAgICwgbV9udW1HbHlwaHMobnVtR2x5cGhzKQorICAg
ICwgbV9vbGRGb250KDApCit7CisgICAgaW5pdCgpOworCisgICAgaWYgKG1faGRjKQorICAgICAg
ICBtX29sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9mb250LT5wbGF0Zm9ybURhdGEo
KS5oZm9udCgpKTsKK30KKworVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6On5UcmFuc3Bh
cmVuY3lBd2FyZUdseXBoUGFpbnRlcigpCit7CisgICAgaWYgKG1fdXNlR0RJICYmIG1faGRjKQor
ICAgICAgICA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9vbGRGb250KTsKK30KKworCisvLyBFc3Rp
bWF0ZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgZ2l2ZW4gdGV4dC4gVGhpcyBpcyBjb3BpZWQg
ZnJvbQorLy8gRm9udENHV2luLmNwcCwgaXQgaXMgcG9zc2libGUsIGJ1dCBhIGxvdCBtb3JlIHdv
cmssIHRvIGdldCB0aGUgcHJlY2lkZQorLy8gYm91bmRzLgorSW50UmVjdCBUcmFuc3BhcmVuY3lB
d2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1hdGVUZXh0Qm91bmRzKCkKK3sKKyAgICBpbnQgdG90YWxX
aWR0aCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bUdseXBoczsgaSsrKQorICAg
ICAgICB0b3RhbFdpZHRoICs9IGxyb3VuZGYobV9nbHlwaEJ1ZmZlci5hZHZhbmNlQXQobV9mcm9t
ICsgaSkpOworCisgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gbV9mb250LT5m
b250TWV0cmljcygpOworICAgIHJldHVybiBJbnRSZWN0KG1fcG9pbnQueCgpIC0gKGZvbnRNZXRy
aWNzLmFzY2VudCgpICsgZm9udE1ldHJpY3MuZGVzY2VudCgpKSAvIDIsCisgICAgICAgICAgICAg
ICAgICAgbV9wb2ludC55KCkgLSBmb250TWV0cmljcy5hc2NlbnQoKSAtIGZvbnRNZXRyaWNzLmxp
bmVHYXAoKSwKKyAgICAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICsgZm9udE1ldHJpY3MuYXNj
ZW50KCkgKyBmb250TWV0cmljcy5kZXNjZW50KCksCisgICAgICAgICAgICAgICAgICAgZm9udE1l
dHJpY3MubGluZVNwYWNpbmcoKSk7IAorfQorCitib29sIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQ
YWludGVyOjpkcmF3R2x5cGhzKGludCBudW1HbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3Rh
cnRBZHZhbmNlKSBjb25zdAoreworICAgIGlmICghbV91c2VHREkpIHsKKyAgICAgICAgU2tQb2lu
dCBvcmlnaW4gPSBtX3BvaW50OworICAgICAgICBvcmlnaW4uZlggKz0gU2tGbG9hdFRvU2NhbGFy
KHN0YXJ0QWR2YW5jZSk7CisgICAgICAgIHBhaW50U2tpYVRleHQobV9ncmFwaGljc0NvbnRleHQs
IG1fZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICBu
dW1HbHlwaHMsIGdseXBocywgYWR2YW5jZXMsIDAsICZvcmlnaW4pOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZ3JhcGhpY3NDb250ZXh0IHx8ICFtX2hkYykKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBXaW5kb3dzJyBvcmlnaW4gaXMgdGhlIHRvcC1s
ZWZ0IG9mIHRoZSBib3VuZGluZyBib3gsIHNvIHdlIGhhdmUKKyAgICAvLyB0byBzdWJ0cmFjdCBv
ZmYgdGhlIGZvbnQgYXNjZW50IHRvIGdldCBpdC4KKyAgICBpbnQgeCA9IGxyb3VuZGYobV9wb2lu
dC54KCkgKyBzdGFydEFkdmFuY2UpOworICAgIGludCB5ID0gbHJvdW5kZihtX3BvaW50LnkoKSAt
IG1fZm9udC0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBh
IG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmlsbCBjb2xvciBhbmQgc2hhZG93IGNvbG9y
IAorICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRob3V0IHNraWEuIAorICAgIEZsb2F0U2l6
ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dD
b2xvcjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7CisgICAgaWYgKG1fZ3JhcGhp
Y3NDb250ZXh0LT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xv
ciwgc2hhZG93Q29sb3JTcGFjZSkpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzaGFkb3cg
YW5kIHRoaXMgY29kZSBpcyByZWFjaGVkLCB3aW5kb3dzQ2FuSGFuZGxlRHJhd1RleHRTaGFkb3co
KQorICAgICAgICAvLyB3aWxsIGhhdmUgYWxyZWFkeSByZXR1cm5lZCB0cnVlIGR1cmluZyB0aGUg
Y3RvciBpbml0aWF0aXphdGlvbiBvZiBtX3VzZUdESQorICAgICAgICBBU1NFUlQoc2hhZG93Q29s
b3IuYWxwaGEoKSA9PSAyNTUpOworICAgICAgICBBU1NFUlQobV9ncmFwaGljc0NvbnRleHQtPmZp
bGxDb2xvcigpLmFscGhhKCkgPT0gMjU1KTsKKyAgICAgICAgQVNTRVJUKCFzaGFkb3dCbHVyKTsK
KyAgICAgICAgQ09MT1JSRUYgdGV4dENvbG9yID0gc2tpYTo6U2tDb2xvclRvQ09MT1JSRUYoU2tD
b2xvclNldEFSR0IoMjU1LCBzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwg
c2hhZG93Q29sb3IuYmx1ZSgpKSk7CisgICAgICAgIENPTE9SUkVGIHNhdmVkVGV4dENvbG9yID0g
R2V0VGV4dENvbG9yKG1faGRjKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKG1faGRjLCB0ZXh0Q29s
b3IpOworICAgICAgICBFeHRUZXh0T3V0KG1faGRjLCB4ICsgc2hhZG93T2Zmc2V0LndpZHRoKCks
IHkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCksIEVUT19HTFlQSF9JTkRFWCwgMCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB3Y2hhcl90Kj4oJmdseXBoc1swXSksIG51bUdseXBocywgJmFkdmFuY2Vz
WzBdKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKG1faGRjLCBzYXZlZFRleHRDb2xvcik7CisgICAg
fQorICAgIAorICAgIHJldHVybiAhIUV4dFRleHRPdXQobV9oZGMsIHgsIHksIEVUT19HTFlQSF9J
TkRFWCwgMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB3Y2hhcl90Kj4oJmdseXBoc1swXSksIG51
bUdseXBocywgJmFkdmFuY2VzWzBdKTsKK30KKworY2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVVbmlz
Y3JpYmVQYWludGVyIDogcHVibGljIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIgeworIHB1
YmxpYzoKKyAgICBUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIoR3JhcGhpY3NDb250
ZXh0KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9udCos
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRSdW4mLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50Jik7
CisgICAgflRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigpOworCisgICAgLy8gVW5p
c2NpYmUgd2lsbCBkcmF3IGRpcmVjdGx5IGludG8gb3VyIGJ1ZmZlciwgc28gd2UgbmVlZCB0byBl
eHBvc2Ugb3VyIERDLgorICAgIEhEQyBoZGMoKSBjb25zdCB7IHJldHVybiBtX2hkYzsgfQorCisg
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIEludFJlY3QgZXN0aW1hdGVUZXh0Qm91bmRzKCk7CisKKyAg
ICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisgICAgaW50
IG1fZnJvbTsKKyAgICBpbnQgbV90bzsKK307CisKK1RyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJl
UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyKAorICAgIEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBGb250KiBmb250LAorICAgIGNvbnN0IFRleHRS
dW4mIHJ1biwKKyAgICBpbnQgZnJvbSwgaW50IHRvLAorICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQorICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihjb250ZXh0LCBwb2ludCkK
KyAgICAsIG1fZm9udChmb250KQorICAgICwgbV9ydW4ocnVuKQorICAgICwgbV9mcm9tKGZyb20p
CisgICAgLCBtX3RvKHRvKQoreworICAgIGluaXQoKTsKK30KKworVHJhbnNwYXJlbmN5QXdhcmVV
bmlzY3JpYmVQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyKCkKK3sK
K30KKworSW50UmVjdCBUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6OmVzdGltYXRl
VGV4dEJvdW5kcygpCit7CisgICAgLy8gVGhpcyBjYXNlIHJlYWxseSByZWFsbHkgc3Vja3MuIFRo
ZXJlIGlzIG5vIGNvbnZlbmllbnQgd2F5IHRvIGVzdGltYXRlCisgICAgLy8gdGhlIGJvdW5kaW5n
IGJveC4gU28gd2UgcnVuIFVuaXNjcmliZSB0d2ljZS4gSWYgd2UgZmluZCB0aGlzIGhhcHBlbnMg
YQorICAgIC8vIGxvdCwgdGhlIHdheSB0byBmaXggaXQgaXMgdG8gbWFrZSB0aGUgZXh0cmEgbGF5
ZXIgYWZ0ZXIgdGhlCisgICAgLy8gVW5pc2NyaWJlSGVscGVyIGhhcyBtZWFzdXJlZCB0aGUgdGV4
dC4KKyAgICBJbnRQb2ludCBpbnRQb2ludChscm91bmRmKG1fcG9pbnQueCgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICBscm91bmRmKG1fcG9pbnQueSgpKSk7CisKKyAgICBVbmlzY3JpYmVIZWxw
ZXJUZXh0UnVuIHN0YXRlKG1fcnVuLCAqbV9mb250KTsKKyAgICBpbnQgbGVmdCA9IGxyb3VuZGYo
bV9wb2ludC54KCkpICsgc3RhdGUuY2hhcmFjdGVyVG9YKG1fZnJvbSk7CisgICAgaW50IHJpZ2h0
ID0gbHJvdW5kZihtX3BvaW50LngoKSkgKyBzdGF0ZS5jaGFyYWN0ZXJUb1gobV90byk7CisgICAg
CisgICAgLy8gQWRqdXN0IGZvciBSVEwgc2NyaXB0IHNpbmNlIHdlIGp1c3Qgd2FudCB0byBrbm93
IHRoZSB0ZXh0IGJvdW5kcy4KKyAgICBpZiAobGVmdCA+IHJpZ2h0KQorICAgICAgICBzdGQ6OnN3
YXAobGVmdCwgcmlnaHQpOworCisgICAgLy8gVGhpcyBhbGdvcml0aG0gZm9yIGVzdGltYXRpbmcg
aG93IG11Y2ggZXh0cmEgc3BhY2Ugd2UgbmVlZCAodGhlIHRleHQgbWF5CisgICAgLy8gZ28gb3V0
c2lkZSB0aGUgc2VsZWN0aW9uIHJlY3QpIGlzIGJhc2VkIHJvdWdobHkgb24KKyAgICAvLyBUcmFu
c3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1hdGVUZXh0Qm91bmRzIGFib3ZlLgorICAg
IGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKTsK
KyAgICByZXR1cm4gSW50UmVjdChsZWZ0IC0gKGZvbnRNZXRyaWNzLmFzY2VudCgpICsgZm9udE1l
dHJpY3MuZGVzY2VudCgpKSAvIDIsCisgICAgICAgICAgICAgICAgICAgbV9wb2ludC55KCkgLSBm
b250TWV0cmljcy5hc2NlbnQoKSAtIGZvbnRNZXRyaWNzLmxpbmVHYXAoKSwKKyAgICAgICAgICAg
ICAgICAgICAocmlnaHQgLSBsZWZ0KSArIGZvbnRNZXRyaWNzLmFzY2VudCgpICsgZm9udE1ldHJp
Y3MuZGVzY2VudCgpLAorICAgICAgICAgICAgICAgICAgIGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5n
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKIGJvb2wgRm9udDo6Y2FuUmV0dXJu
RmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC01
NSw2ICszNzgsMTA4IEBAIGJvb2wgRm9udDo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ28K
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZmRlZiBTVVBQT1JUX0dESV9URVhUCitzdGF0aWMg
dm9pZCBkcmF3R2x5cGhzV2luKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpIHsKKy8vICAgIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKworICAgIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQ
YWludGVyIHBhaW50ZXIoZ3JhcGhpY3NDb250ZXh0LCBmb250LCBnbHlwaEJ1ZmZlciwgZnJvbSwg
bnVtR2x5cGhzLCBwb2ludCk7CisKKyAgICAvLyBXZSBkcmF3IHRoZSBnbHlwaHMgaW4gY2h1bmtz
IHRvIGF2b2lkIGhhdmluZyB0byBkbyBhIGhlYXAgYWxsb2NhdGlvbiBmb3IKKyAgICAvLyB0aGUg
YXJyYXlzIG9mIGNoYXJhY3RlcnMgYW5kIGFkdmFuY2VzLiBTaW5jZSBFeHRUZXh0T3V0IGlzIHRo
ZQorICAgIC8vIGxvd2VzdC1sZXZlbCB0ZXh0IG91dHB1dCBmdW5jdGlvbiBvbiBXaW5kb3dzLCB0
aGVyZSBzaG91bGQgYmUgbGl0dGxlCisgICAgLy8gcGVuYWx0eSBmb3Igc3BsaXR0aW5nIHVwIHRo
ZSB0ZXh0LiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGJ1ZmZlciBjYW5ub3QKKyAgICAvLyBiZSBi
aWdnZXIgdGhhbiA0MDk0IG9yIHRoZSBmdW5jdGlvbiB3aWxsIGZhaWwuCisgICAgY29uc3QgaW50
IGtNYXhCdWZmZXJMZW5ndGggPSAyNTY7CisgICAgVmVjdG9yPFdPUkQsIGtNYXhCdWZmZXJMZW5n
dGg+IGdseXBoczsKKyAgICBWZWN0b3I8aW50LCBrTWF4QnVmZmVyTGVuZ3RoPiBhZHZhbmNlczsK
KyAgICBpbnQgZ2x5cGhJbmRleCA9IDA7IC8vIFRoZSBzdGFydGluZyBnbHlwaCBvZiB0aGUgY3Vy
cmVudCBjaHVuay4KKworICAgIC8vIEluIG9yZGVyIHRvIHJvdW5kIGFsbCBvZmZzZXRzIHRvIHRo
ZSBjb3JyZWN0IHBpeGVsIGJvdW5kYXJ5LCB0aGlzIGNvZGUga2VlcHMgdHJhY2sgb2YgdGhlIGFi
c29sdXRlIHBvc2l0aW9uCisgICAgLy8gb2YgZWFjaCBnbHlwaCBpbiBmbG9hdGluZyBwb2ludCB1
bml0cyBhbmQgcm91bmRzIHRvIGludGVnZXIgYWR2YW5jZXMgYXQgdGhlIGxhc3QgcG9zc2libGUg
bW9tZW50LgorCisgICAgZmxvYXQgaG9yaXpvbnRhbE9mZnNldCA9IHBvaW50LngoKTsgLy8gVGhl
IGZsb2F0aW5nIHBvaW50IG9mZnNldCBvZiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBjdXJyZW50IGds
eXBoLgorICAgIGludCBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQgPSBscm91bmRmKGhvcml6
b250YWxPZmZzZXQpOyAvLyBUaGUgcm91bmRlZCBvZmZzZXQgb2YgdGhlIGxlZnQgc2lkZSBvZiB0
aGUgbGFzdCBnbHlwaCByZW5kZXJlZC4KKyAgICB3aGlsZSAoZ2x5cGhJbmRleCA8IG51bUdseXBo
cykgeworICAgICAgICAvLyBIb3cgbWFueSBjaGFycyB3aWxsIGJlIGluIHRoaXMgY2h1bms/Cisg
ICAgICAgIGludCBjdXJMZW4gPSBzdGQ6Om1pbihrTWF4QnVmZmVyTGVuZ3RoLCBudW1HbHlwaHMg
LSBnbHlwaEluZGV4KTsKKyAgICAgICAgZ2x5cGhzLnJlc2l6ZShjdXJMZW4pOworICAgICAgICBh
ZHZhbmNlcy5yZXNpemUoY3VyTGVuKTsKKworICAgICAgICBmbG9hdCBjdXJyZW50V2lkdGggPSAw
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN1ckxlbjsgKytpLCArK2dseXBoSW5kZXgp
IHsKKyAgICAgICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoZnJvbSArIGds
eXBoSW5kZXgpOworICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSBnbHlwaEJ1ZmZlci5h
ZHZhbmNlQXQoZnJvbSArIGdseXBoSW5kZXgpOworICAgICAgICAgICAgYWR2YW5jZXNbaV0gPSBs
cm91bmRmKGhvcml6b250YWxPZmZzZXQpIC0gbGFzdEhvcml6b250YWxPZmZzZXRSb3VuZGVkOwor
ICAgICAgICAgICAgbGFzdEhvcml6b250YWxPZmZzZXRSb3VuZGVkICs9IGFkdmFuY2VzW2ldOwor
ICAgICAgICAgICAgY3VycmVudFdpZHRoICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsg
Z2x5cGhJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEJ1ZyAyNjA4OCAtIHZl
cnkgbGFyZ2UgcG9zaXRpdmUgb3IgbmVnYXRpdmUgcnVucyBjYW4gZmFpbCB0bworICAgICAgICAg
ICAgLy8gcmVuZGVyIHNvIHdlIGNsYW1wIHRoZSBzaXplIGhlcmUuIEluIHRoZSBzcGVjcywgbmVn
YXRpdmUKKyAgICAgICAgICAgIC8vIGxldHRlci1zcGFjaW5nIGlzIGltcGxlbWVudGF0aW9uLWRl
ZmluZWQsIHNvIHRoaXMgc2hvdWxkIGJlCisgICAgICAgICAgICAvLyBmaW5lLCBhbmQgaXQgbWF0
Y2hlcyBTYWZhcmkncyBpbXBsZW1lbnRhdGlvbi4gVGhlIGNhbGwgYWN0dWFsbHkKKyAgICAgICAg
ICAgIC8vIHNlZW1zIHRvIGNyYXNoIGlmIGtNYXhOZWdhdGl2ZVJ1biBpcyBzZXQgdG8gc29tZXdo
ZXJlIGFyb3VuZAorICAgICAgICAgICAgLy8gLTMyODMwLCBzbyB3ZSBnaXZlIG91cnNlbHZlcyBh
IGxpdHRsZSBicmVhdGhpbmcgcm9vbS4KKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhOZWdhdGl2
ZVJ1biA9IC0zMjc2ODsKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhQb3NpdGl2ZVJ1biA9ICAz
Mjc2ODsKKyAgICAgICAgICAgIGlmICgoY3VycmVudFdpZHRoICsgYWR2YW5jZXNbaV0gPCBtYXhO
ZWdhdGl2ZVJ1bikgfHwgKGN1cnJlbnRXaWR0aCArIGFkdmFuY2VzW2ldID4gbWF4UG9zaXRpdmVS
dW4pKSAKKyAgICAgICAgICAgICAgICBhZHZhbmNlc1tpXSA9IDA7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBBY3R1YWxseSBkcmF3IHRoZSBnbHlwaHMgKHdpdGggcmV0cnkgb24gZmFpbHVyZSku
CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBmb3IgKGludCBleGVjdXRp
b25zID0gMDsgZXhlY3V0aW9ucyA8IDI7ICsrZXhlY3V0aW9ucykgeworICAgICAgICAgICAgc3Vj
Y2VzcyA9IHBhaW50ZXIuZHJhd0dseXBocyhjdXJMZW4sICZnbHlwaHNbMF0sICZhZHZhbmNlc1sw
XSwgaG9yaXpvbnRhbE9mZnNldCAtIHBvaW50LngoKSAtIGN1cnJlbnRXaWR0aCk7CisgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MgJiYgIWV4ZWN1dGlvbnMpIHsKKyAgICAgICAgICAgICAgICAvLyBB
c2sgdGhlIGJyb3dzZXIgdG8gbG9hZCB0aGUgZm9udCBmb3IgdXMgYW5kIHJldHJ5LgorICAgICAg
ICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6ZW5zdXJlRm9udExvYWRlZChmb250LT5wbGF0Zm9y
bURhdGEoKS5oZm9udCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZHJhdyB0aGUgZ2x5cGhzIGFmdGVy
IHNlY29uZCBhdHRlbXB0Iik7CisgICAgfQorfQorCit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLAor
ICAgICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMsCisgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgU2tDb2xvciBjb2xvciA9
IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmVmZmVjdGl2ZUZpbGxDb2xvcigp
OworICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBTa0NvbG9yR2V0QShjb2xvcik7CisgICAgLy8g
U2tpcCAxMDAlIHRyYW5zcGFyZW50IHRleHQ7IG5vIG5lZWQgdG8gZHJhdyBhbnl0aGluZy4KKyAg
ICBpZiAoIWFscGhhICYmIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0
cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UgJiYgIWdyYXBoaWNzQ29udGV4dC0+aGFzU2hhZG93KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWFscGhhIHx8IHdpbmRvd3NDYW5IYW5kbGVEcmF3
VGV4dFNoYWRvdyhncmFwaGljc0NvbnRleHQpIHx8ICF3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdp
bmdXaXRob3V0U2hhZG93KGdyYXBoaWNzQ29udGV4dCkpIHsKKyAgICAgICAgZHJhd0dseXBoc1dp
bihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBv
aW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBEcmF3IGluIHR3byBwYXNzZXM6
IHNraWEgZm9yIHRoZSBzaGFkb3csIEdESSBmb3IgZm9yZWdyb3VuZCB0ZXh0CisgICAgLy8gcGFz
czE6IHNoYWRvdyAod2lsbCB1c2Ugc2tpYSkKKyAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsK
KyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQsIGdy
YXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSk7CisgICAgZHJhd0dseXBoc1dpbihncmFw
aGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsK
KyAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAvLyBwYXNzMjogZm9yZWdyb3Vu
ZCB0ZXh0ICh3aWxsIHVzZSBHREkpCisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBm
bG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIENvbG9yU3BhY2Ug
c2hhZG93Q29sb3JTcGFjZTsKKyAgICBncmFwaGljc0NvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKKyAgICBn
cmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIENvbG9y
Ojp0cmFuc3BhcmVudCwgc2hhZG93Q29sb3JTcGFjZSk7CisgICAgZHJhd0dseXBoc1dpbihncmFw
aGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsK
KyAgICBncmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIs
IHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKK30KKyNlbHNlCiB2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLApAQCAtMTEzLDYgKzUzOCw3IEBAIHZv
aWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGcKICAgICAgICAgcGFpbnRTa2lh
VGV4dChncmFwaGljc0NvbnRleHQsIGhmb250LCBjdXJMZW4sICZnbHlwaHNbMF0sICZhZHZhbmNl
c1swXSwgMCwgJm9yaWdpbik7CiAgICAgfQogfQorI2VuZGlmCiAKIEZsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwKQEAgLTE0OCw5ICs1NzQsNDAgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhp
Y3NDb250ZQogICAgIGlmICghYWxwaGEgJiYgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Z2V0U3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCisj
aWZkZWYgU1VQUE9SVF9HRElfVEVYVAorICAgIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFp
bnRlciBwYWludGVyKGdyYXBoaWNzQ29udGV4dCwgdGhpcywgcnVuLCBmcm9tLCB0bywgcG9pbnQp
OworCisgICAgSERDIGhkYyA9IHBhaW50ZXIuaGRjKCk7CisgICAgaWYgKHdpbmRvd3NDYW5IYW5k
bGVUZXh0RHJhd2luZyhncmFwaGljc0NvbnRleHQpICYmICFoZGMpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFRPRE8obWFydWVsKTogaHR0cDovL2IvNzAwNDY0IFNldFRleHRDb2xvciBkb2Vz
bid0IHN1cHBvcnQgdHJhbnNwYXJlbmN5LgorICAgIC8vIEVuZm9yY2Ugbm9uLXRyYW5zcGFyZW50
IGNvbG9yLgorICAgIGNvbG9yID0gU2tDb2xvclNldFJHQihTa0NvbG9yR2V0Uihjb2xvciksIFNr
Q29sb3JHZXRHKGNvbG9yKSwgU2tDb2xvckdldEIoY29sb3IpKTsKKyAgICBpZiAoaGRjKSB7Cisg
ICAgICAgIFNldFRleHRDb2xvcihoZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNvbG9yKSk7
CisgICAgICAgIFNldEJrTW9kZShoZGMsIFRSQU5TUEFSRU5UKTsKKyAgICB9CisKKyAgICAvLyBJ
ZiB0aGVyZSBpcyBhIG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmlsbCBjb2xvciBhbmQg
c2hhZG93IGNvbG9yIAorICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRob3V0IHNraWEuIAor
ICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBD
b2xvciBzaGFkb3dDb2xvcjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7CisgICAg
aWYgKGdyYXBoaWNzQ29udGV4dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwg
c2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpICYmIHdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4
dFNoYWRvdyhncmFwaGljc0NvbnRleHQpKSB7CisgICAgICAgIENPTE9SUkVGIHRleHRDb2xvciA9
IHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKFNrQ29sb3JTZXRBUkdCKDI1NSwgc2hhZG93Q29sb3Iu
cmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSkpOworICAgICAg
ICBDT0xPUlJFRiBzYXZlZFRleHRDb2xvciA9IEdldFRleHRDb2xvcihoZGMpOworICAgICAgICBT
ZXRUZXh0Q29sb3IoaGRjLCB0ZXh0Q29sb3IpOworICAgICAgICBzdGF0ZS5kcmF3KGdyYXBoaWNz
Q29udGV4dCwgaGRjLCBzdGF0aWNfY2FzdDxpbnQ+KHBvaW50LngoKSkgKyBzaGFkb3dPZmZzZXQu
d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHBvaW50LnkoKSAt
IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpLCBmcm9tLCB0
byk7CisgICAgICAgIFNldFRleHRDb2xvcihoZGMsIHNhdmVkVGV4dENvbG9yKTsgCisgICAgfQor
I2Vsc2UKKyAgICBIREMgaGRjID0gMDsKKyNlbmRpZgogICAgIC8vIFVuaXNjcmliZSBjb3VudHMg
dGhlIGNvb3JkaW5hdGVzIGZyb20gdGhlIHVwcGVyIGxlZnQsIHdoaWxlIFdlYktpdCB1c2VzCiAg
ICAgLy8gdGhlIGJhc2VsaW5lLCBzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0IG9mZiB0aGUgYXNjZW50
LgotICAgIEhEQyBoZGMgPSAwOwogICAgIHN0YXRlLmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBoZGMs
IGxyb3VuZGYocG9pbnQueCgpKSwgbHJvdW5kZihwb2ludC55KCkgLSBmb250TWV0cmljcygpLmFz
Y2VudCgpKSwgZnJvbSwgdG8pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAJ
KHJldmlzaW9uIDk2NzIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDYgKzMwOSw5
IEBAIHZvaWQgVW5pc2NyaWJlSGVscGVyOjpkcmF3KEdyYXBoaWNzQ29udGUKICAgICBIR0RJT0JK
IG9sZEZvbnQgPSAwOwogICAgIGludCBjdXJYID0geDsKICAgICBib29sIGZpcnN0UnVuID0gdHJ1
ZTsKKyNpZmRlZiBTVVBQT1JUX0dESV9URVhUCisgICAgYm9vbCB1c2VXaW5kb3dzRHJhd2luZyA9
IHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhncmFwaGljc0NvbnRleHQpOworI2VuZGlmCiAK
ICAgICBmb3IgKHNpemVfdCBzY3JlZW5JbmRleCA9IDA7IHNjcmVlbkluZGV4IDwgbV9ydW5zLnNp
emUoKTsgc2NyZWVuSW5kZXgrKykgewogICAgICAgICBpbnQgaXRlbUluZGV4ID0gbV9zY3JlZW5P
cmRlcltzY3JlZW5JbmRleF07CkBAIC0zODcsMTQgKzM5MCwyNiBAQCB2b2lkIFVuaXNjcmliZUhl
bHBlcjo6ZHJhdyhHcmFwaGljc0NvbnRlCiAgICAgICAgICAgICAvLyBQYXNzIDAgaW4gd2hlbiB0
aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uLgogICAgICAgICAgICAgY29uc3QgaW50KiBqdXN0aWZ5
ID0gc2hhcGluZy5tX2p1c3RpZnkuc2l6ZSgpID09IDAgPyAwIDogJnNoYXBpbmcubV9qdXN0aWZ5
W2Zyb21HbHlwaF07CiAKKyNpZm5kZWYgU1VQUE9SVF9HRElfVEVYVAogICAgICAgICAgICAgY29u
c3QgaW50KiBhZHZhbmNlcyA9IHNoYXBpbmcubV9qdXN0aWZ5LnNpemUoKSA/CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fanVzdGlmeVtmcm9tR2x5cGhd
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICZzaGFwaW5nLm1fYWR2YW5j
ZVtmcm9tR2x5cGhdOworI2Vsc2UKKyAgICAgICAgICAgIGlmICh1c2VXaW5kb3dzRHJhd2luZykg
eworICAgICAgICAgICAgICAgIGlmIChmaXJzdFJ1bikgeworICAgICAgICAgICAgICAgICAgICBv
bGRGb250ID0gU2VsZWN0T2JqZWN0KGRjLCBzaGFwaW5nLm1faGZvbnQpOworICAgICAgICAgICAg
ICAgICAgICBmaXJzdFJ1biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgICAgICBTZWxlY3RPYmplY3QoZGMsIHNoYXBpbmcubV9oZm9udCk7CisgICAgICAg
ICAgICB9CisKKyNlbmRpZgogICAgICAgICAgICAgLy8gRm9udHMgd2l0aCBkaWZmZXJlbnQgYXNj
ZW50cyBjYW4gYmUgdXNlZCB0byByZW5kZXIgZGlmZmVyZW50CiAgICAgICAgICAgICAvLyBydW5z
LiAgJ0Fjcm9zcy1ydW5zJyB5LWNvb3JkaW5hdGUgY29ycmVjdGlvbiBuZWVkcyB0byBiZQogICAg
ICAgICAgICAgLy8gYWRqdXN0ZWQgZm9yIGVhY2ggZm9udC4KICAgICAgICAgICAgIGJvb2wgdGV4
dE91dE9rID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKGludCBleGVjdXRpb25zID0gMDsgZXhl
Y3V0aW9ucyA8IDI7ICsrZXhlY3V0aW9ucykgeworI2lmbmRlZiBTVVBQT1JUX0dESV9URVhUCiAg
ICAgICAgICAgICAgICAgU2tQb2ludCBvcmlnaW47CiAgICAgICAgICAgICAgICAgb3JpZ2luLmZY
ID0gY3VyWCArICsgaW5uZXJPZmZzZXQ7CiAgICAgICAgICAgICAgICAgb3JpZ2luLmZZID0geSAr
IG1fYXNjZW50OwpAQCAtNDA2LDYgKzQyMSwzMiBAQCB2b2lkIFVuaXNjcmliZUhlbHBlcjo6ZHJh
dyhHcmFwaGljc0NvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5t
X29mZnNldHNbZnJvbUdseXBoXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcmln
aW4pOwogICAgICAgICAgICAgICAgIHRleHRPdXRPayA9IHRydWU7CisjZWxzZQorICAgICAgICAg
ICAgICAgIGlmICh1c2VXaW5kb3dzRHJhd2luZykgeworICAgICAgICAgICAgICAgICAgICBIUkVT
VUxUIGhyID0gU2NyaXB0VGV4dE91dChkYywgc2hhcGluZy5tX3NjcmlwdENhY2hlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJYICsgaW5uZXJPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgLSBz
aGFwaW5nLm1fYXNjZW50T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAmaXRlbS5hLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2dseXBoc1tmcm9tR2x5cGhdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaENvdW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGlu
Zy5tX2FkdmFuY2VbZnJvbUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAganVzdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnNoYXBpbmcubV9vZmZzZXRzW2Zyb21HbHlwaF0pOworICAgICAgICAg
ICAgICAgICAgICB0ZXh0T3V0T2sgPSAoaHIgPT0gU19PSyk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU2tQb2ludCBvcmlnaW47CisgICAgICAgICAgICAg
ICAgICAgIG9yaWdpbi5mWCA9IGN1clggKyArIGlubmVyT2Zmc2V0OworICAgICAgICAgICAgICAg
ICAgICBvcmlnaW4uZlkgPSB5ICsgbV9hc2NlbnQ7CisgICAgICAgICAgICAgICAgICAgIHBhaW50
U2tpYVRleHQoZ3JhcGhpY3NDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNoYXBpbmcubV9oZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bHlwaENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1f
Z2x5cGhzW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNo
YXBpbmcubV9hZHZhbmNlW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnNoYXBpbmcubV9vZmZzZXRzW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJm9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIHRleHRPdXRPayA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgICAgICAgICBpZiAo
IXRleHRPdXRPayAmJiAwID09IGV4ZWN1dGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgVGV4dE91dCBpcyBjYWxsZWQgZnJvbSB0aGUgcmVuZGVyZXIgaXQgbWlnaHQgZmFpbApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA5NjcyMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3OSw2ICs1NzksMTkgQEAgY29uc3QgU2tCaXRtYXAqIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmJpdAogICAgIHJldHVybiAmbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nl
c3NCaXRtYXAoZmFsc2UpOwogfQogCisjaWZkZWYgU1VQUE9SVF9HRElfVEVYVAorYm9vbCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkKK3sKKyNpZiBF
TkFCTEUoU0tJQV9URVhUKQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgaWYgKGlzQWNj
ZWxlcmF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBza2lhOjpTdXBw
b3J0c1BsYXRmb3JtUGFpbnQobV9jYW52YXMpOworI2VuZGlmCit9CisKKyNlbmRpZgogdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRJbWFnZVJlc2FtcGxpbmdIaW50KEludFNpemUqIHNyY1Np
emUsIEZsb2F0U2l6ZSogZHN0U2l6ZSkgY29uc3QKIHsKICAgICAqc3JjU2l6ZSA9IG1faW1hZ2VS
ZXNhbXBsaW5nSGludFNyY1NpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNp
b24gOTY3MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogI2lmbmRl
ZiBQbGF0Zm9ybUNvbnRleHRTa2lhX2gKICNkZWZpbmUgUGxhdGZvcm1Db250ZXh0U2tpYV9oCiAK
Ky8vIGhhY2sgdG8gZGVmaW5lIFNVUFBPUlRfR0RJX1RFWFQKKyNpbmNsdWRlICJTa2lhRm9udFdp
bi5oIgorCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm9uY29weWFi
bGUuaCIKIApAQCAtMTY3LDYgKzE3MCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmludGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wg
cCkgeyBtX3ByaW50aW5nID0gcDsgfQogCisjaWZkZWYgU1VQUE9SVF9HRElfVEVYVAorICAgIC8v
IFJldHVybnMgaWYgdGhlIGNvbnRleHQgYWxsb3dzIHJlbmRlcmluZyBvZiBmb250cyB1c2luZyBu
YXRpdmUgcGxhdGZvcm0KKyAgICAvLyBBUElzLiBJZiBmYWxzZSBpcyByZXR1cm5lZCBmb250IHJl
bmRlcmluZyBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIHNraWEKKyAgICAvLyB0ZXh0IGRyYXdpbmcg
QVBJcy4KKyAgICBib29sIGlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKTsKKworI2VuZGlm
CiAgICAgdm9pZCBnZXRJbWFnZVJlc2FtcGxpbmdIaW50KEludFNpemUqIHNyY1NpemUsIEZsb2F0
U2l6ZSogZHN0U2l6ZSkgY29uc3Q7CiAgICAgdm9pZCBzZXRJbWFnZVJlc2FtcGxpbmdIaW50KGNv
bnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEZsb2F0U2l6ZSYgZHN0U2l6ZSk7CiAgICAgdm9p
ZCBjbGVhckltYWdlUmVzYW1wbGluZ0hpbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCShyZXZpc2lvbiA5
NjcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw2MCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKyNpZmRlZiBTVVBQT1JUX0dESV9URVhUCitib29sIHdpbmRvd3NDYW5IYW5kbGVE
cmF3VGV4dFNoYWRvdyhHcmFwaGljc0NvbnRleHQgKmNvbnRleHQpCit7CisgICAgRmxvYXRTaXpl
IHNoYWRvd09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0Nv
bG9yOworICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKKworICAgIGJvb2wgaGFzU2hh
ZG93ID0gY29udGV4dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93
Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpOworICAgIHJldHVybiAhaGFzU2hhZG93IHx8ICghc2hh
ZG93Qmx1ciAmJiAoc2hhZG93Q29sb3IuYWxwaGEoKSA9PSAyNTUpICYmIChjb250ZXh0LT5maWxs
Q29sb3IoKS5hbHBoYSgpID09IDI1NSkpOworfQorCitib29sIHdpbmRvd3NDYW5IYW5kbGVUZXh0
RHJhd2luZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKCF3aW5kb3dzQ2Fu
SGFuZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KGNvbnRleHQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3Igc2hhZG93IGVmZmVjdHMuCisgICAgaWYgKCF3aW5k
b3dzQ2FuSGFuZGxlRHJhd1RleHRTaGFkb3coY29udGV4dCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJh
d2luZ1dpdGhvdXRTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIC8vIENo
ZWNrIGZvciBub24tdHJhbnNsYXRpb24gdHJhbnNmb3Jtcy4gU29tZXRpbWVzIHpvb21zIHdpbGwg
bG9vayBiZXR0ZXIgaW4KKyAgICAvLyBTa2lhLCBhbmQgc29tZXRpbWVzIGJldHRlciBpbiBXaW5k
b3dzLiBUaGUgbWFpbiBwcm9ibGVtIGlzIHRoYXQgem9vbWluZworICAgIC8vIGluIHVzaW5nIFNr
aWEgd2lsbCBzaG93IHlvdSB0aGUgaGludGVkIG91dGxpbmVzIGZvciB0aGUgc21hbGxlciBzaXpl
LAorICAgIC8vIHdoaWNoIGxvb2sgd2VpcmQuIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCBpdCdzIGJl
dHRlciB0byB1c2UgV2luZG93cycgdGV4dAorICAgIC8vIGRyYXdpbmcsIHNvIHdlIGRvbid0IGNo
ZWNrIGZvciB6b29tcy4KKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCA9IGNvbnRl
eHQtPmdldENUTSgpOworICAgIGlmIChtYXRyaXguYigpIHx8IG1hdHJpeC5jKCkpIC8vIENoZWNr
IGZvciBza2V3LgorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3Igc3Ry
b2tlIGVmZmVjdHMuCisgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0
RHJhd2luZ01vZGUoKSAhPSBUZXh0TW9kZUZpbGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIENoZWNrIGZvciBncmFkaWVudHMuCisgICAgaWYgKGNvbnRleHQtPmZpbGxHcmFkaWVu
dCgpIHx8IGNvbnRleHQtPnN0cm9rZUdyYWRpZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIENoZWNrIGZvciBwYXR0ZXJucy4KKyAgICBpZiAoY29udGV4dC0+ZmlsbFBhdHRl
cm4oKSB8fCBjb250ZXh0LT5zdHJva2VQYXR0ZXJuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzTmF0aXZlRm9udFJlbmRl
cmluZ0FsbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgc2tpYURyYXdUZXh0KFNrQ2FudmFzKiBjYW52YXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQb2ludCYgcG9pbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2tQYWludCogcGFpbnQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oCShyZXZpc2lvbiA5
NjcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRX
aW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDQ2IEBACiAjaWZuZGVmIFNraWFGb250
V2luX2gKICNkZWZpbmUgU2tpYUZvbnRXaW5faAogCisjZGVmaW5lIFNVUFBPUlRfR0RJX1RFWFQK
KwogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx1c3AxMC5oPgogCi1jbGFzcyBTa1Bv
aW50Oworc3RydWN0IFNrUG9pbnQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tpYTsKKworI2lmZGVmIFNVUFBP
UlRfR0RJX1RFWFQKKy8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgZm9yIG1vcmUgY29t
cGxleCBmb250IGRyYXdpbmcgKGVmZmVjdHMgc3VjaCBhcworLy8gc3Ryb2tpbmcgYW5kIG1vcmUg
Y29tcGxleCB0cmFuc2Zvcm1zKSB0aGFuIFdpbmRvd3Mgc3VwcG9ydHMgZGlyZWN0bHkuIFNpbmNl
CisvLyBXaW5kb3dzIGRyYXdpbmcgaXMgZmFzdGVyIHlvdSBzaG91bGQgdXNlIHdpbmRvd3NDYW5I
YW5kbGVUZXh0RHJhd2luZyBmaXJzdCB0bworLy8gY2hlY2sgaWYgdXNpbmcgU2tpYSBpcyByZXF1
aXJlZCBhdCBhbGwuCisvLyBOb3RlIHRoYXQgdGhlIHRleHQgd2lsbCBsb29rIGRpZmZlcmVudCAo
bm8gQ2xlYXJUeXBlKSBzbyB0aGlzIHNob3VsZCBvbmx5IGJlCisvLyB1c2VkIHdoZW4gbmVjZXNz
YXJ5LgorLy8KKy8vIFdoZW4geW91IGNhbGwgYSBTa2lhKiB0ZXh0IGRyYXdpbmcgZnVuY3Rpb24s
IHZhcmlvdXMgZ2x5cGggb3V0bGluZXMgd2lsbCBiZQorLy8gY2FjaGVkLiBBcyBhIHJlc3VsdCwg
eW91IHNob3VsZCBjYWxsIFNraWFXaW5PdXRsaW5lQ2FjaGU6OnJlbW92ZVBhdGhzRm9yRm9udAor
Ly8gd2hlbiB0aGUgZm9udCBpcyBkZXN0cm95ZWQgc28gdGhhdCB0aGUgY2FjaGUgZG9lcyBub3Qg
b3V0bGl2ZSB0aGUgZm9udCAoc2luY2UKKy8vIHRoZSBIRk9OVHMgYXJlIHJlY3ljbGVkKS4KKy8v
CisvLyBSZW1lbWJlciB0aGF0IFNraWEncyB0ZXh0IGRyYXdpbmcgb3JpZ2luIGlzIHRoZSBiYXNl
bGluZSwgbGlrZSBXZWJLaXQsIG5vdAorLy8gdGhlIHRvcCwgbGlrZSBXaW5kb3dzLgorCisvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGZpbGxDb2xvciBhbmQgc2hhZG93Q29sb3IgYXJlIG9wYXF1ZSBh
bmQgdGhlIHRleHQtc2hhZG93CisvLyBpcyBub3QgYmx1cnJlZC4KK2Jvb2wgd2luZG93c0Nhbkhh
bmRsZURyYXdUZXh0U2hhZG93KEdyYXBoaWNzQ29udGV4dCopOworCisvLyBSZXR1cm5zIHRydWUg
aWYgYWR2YW5jZWQgZm9udCByZW5kZXJpbmcgaXMgcmVjb21tZW5kZWQuCitib29sIHdpbmRvd3ND
YW5IYW5kbGVUZXh0RHJhd2luZyhHcmFwaGljc0NvbnRleHQqKTsKKworLy8gUmV0dXJucyB0cnVl
IGlmIGFkdmFuY2VkIGZvbnQgcmVuZGVyaW5nIGlzIHJlY29tbWVuZGVkIGlmIHNoYWRvd3MgYXJl
CisvLyBkaXNyZWdhcmRlZC4KK2Jvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91
dFNoYWRvdyhHcmFwaGljc0NvbnRleHQqKTsKIAorI2VuZGlmCiAvLyBOb3RlIHRoYXQgdGhlIG9m
ZnNldHMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiAgSWYgbm90IE5VTEwgaXQgcmVwcmVzZW50cyBh
CiAvLyBwZXIgZ2x5cGggb2Zmc2V0IChzdWNoIGFzIHJldHVybmVkIGJ5IFNjcmlwdFBsYWNlIFdp
bmRvd3MgQVBJIGZ1bmN0aW9uKS4KIHZvaWQgcGFpbnRTa2lhVGV4dChHcmFwaGljc0NvbnRleHQq
LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110144</attachid>
            <date>2011-10-07 07:50:36 -0700</date>
            <delta_ts>2011-10-07 08:00:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69530-20111007105035.patch</filename>
            <type>text/plain</type>
            <size>12204</size>
            <attacher name="Mike Reed">reed</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2OTM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMDcgIE1pa2UgUmVl
ZCAgPHJlZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRl
eHQgYmVoaW5kIGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oOgorCiAyMDExLTEwLTA3ICBBbmRyZWFzIEts
aW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBTaHJpbmsgU3R5bGVJbmhlcml0ZWRE
YXRhLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5p
c2NyaWJlSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwCShyZXZpc2lvbiA5NjkzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksOSBAQCB2b2lkIFVuaXNjcmliZUhl
bHBlcjo6ZHJhdyhHcmFwaGljc0NvbnRlCiAgICAgSEdESU9CSiBvbGRGb250ID0gMDsKICAgICBp
bnQgY3VyWCA9IHg7CiAgICAgYm9vbCBmaXJzdFJ1biA9IHRydWU7CisjaWYgIUVOQUJMRShTS0lB
X1RFWFQpCisgICAgYm9vbCB1c2VXaW5kb3dzRHJhd2luZyA9IHdpbmRvd3NDYW5IYW5kbGVUZXh0
RHJhd2luZyhncmFwaGljc0NvbnRleHQpOworI2VuZGlmCiAKICAgICBmb3IgKHNpemVfdCBzY3Jl
ZW5JbmRleCA9IDA7IHNjcmVlbkluZGV4IDwgbV9ydW5zLnNpemUoKTsgc2NyZWVuSW5kZXgrKykg
ewogICAgICAgICBpbnQgaXRlbUluZGV4ID0gbV9zY3JlZW5PcmRlcltzY3JlZW5JbmRleF07CkBA
IC0zODcsMTQgKzM5MCwyNiBAQCB2b2lkIFVuaXNjcmliZUhlbHBlcjo6ZHJhdyhHcmFwaGljc0Nv
bnRlCiAgICAgICAgICAgICAvLyBQYXNzIDAgaW4gd2hlbiB0aGVyZSBpcyBubyBqdXN0aWZpY2F0
aW9uLgogICAgICAgICAgICAgY29uc3QgaW50KiBqdXN0aWZ5ID0gc2hhcGluZy5tX2p1c3RpZnku
c2l6ZSgpID09IDAgPyAwIDogJnNoYXBpbmcubV9qdXN0aWZ5W2Zyb21HbHlwaF07CiAKKyNpZiBF
TkFCTEUoU0tJQV9URVhUKQogICAgICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcyA9IHNoYXBp
bmcubV9qdXN0aWZ5LnNpemUoKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZzaGFwaW5nLm1fanVzdGlmeVtmcm9tR2x5cGhdCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6ICZzaGFwaW5nLm1fYWR2YW5jZVtmcm9tR2x5cGhdOworI2Vsc2UKKyAg
ICAgICAgICAgIGlmICh1c2VXaW5kb3dzRHJhd2luZykgeworICAgICAgICAgICAgICAgIGlmIChm
aXJzdFJ1bikgeworICAgICAgICAgICAgICAgICAgICBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGRj
LCBzaGFwaW5nLm1faGZvbnQpOworICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1biA9IGZhbHNl
OworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBTZWxlY3RPYmpl
Y3QoZGMsIHNoYXBpbmcubV9oZm9udCk7CisgICAgICAgICAgICB9CisKKyNlbmRpZgogICAgICAg
ICAgICAgLy8gRm9udHMgd2l0aCBkaWZmZXJlbnQgYXNjZW50cyBjYW4gYmUgdXNlZCB0byByZW5k
ZXIgZGlmZmVyZW50CiAgICAgICAgICAgICAvLyBydW5zLiAgJ0Fjcm9zcy1ydW5zJyB5LWNvb3Jk
aW5hdGUgY29ycmVjdGlvbiBuZWVkcyB0byBiZQogICAgICAgICAgICAgLy8gYWRqdXN0ZWQgZm9y
IGVhY2ggZm9udC4KICAgICAgICAgICAgIGJvb2wgdGV4dE91dE9rID0gZmFsc2U7CiAgICAgICAg
ICAgICBmb3IgKGludCBleGVjdXRpb25zID0gMDsgZXhlY3V0aW9ucyA8IDI7ICsrZXhlY3V0aW9u
cykgeworI2lmIEVOQUJMRShTS0lBX1RFWFQpCiAgICAgICAgICAgICAgICAgU2tQb2ludCBvcmln
aW47CiAgICAgICAgICAgICAgICAgb3JpZ2luLmZYID0gY3VyWCArICsgaW5uZXJPZmZzZXQ7CiAg
ICAgICAgICAgICAgICAgb3JpZ2luLmZZID0geSArIG1fYXNjZW50OwpAQCAtNDA2LDYgKzQyMSwz
MiBAQCB2b2lkIFVuaXNjcmliZUhlbHBlcjo6ZHJhdyhHcmFwaGljc0NvbnRlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX29mZnNldHNbZnJvbUdseXBoXSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZvcmlnaW4pOwogICAgICAgICAgICAgICAgIHRleHRP
dXRPayA9IHRydWU7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmICh1c2VXaW5kb3dzRHJhd2lu
ZykgeworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIGhyID0gU2NyaXB0VGV4dE91dChkYywg
c2hhcGluZy5tX3NjcmlwdENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjdXJYICsgaW5uZXJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHkgLSBzaGFwaW5nLm1fYXNjZW50T2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAmaXRlbS5h
LCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
c2hhcGluZy5tX2dseXBoc1tmcm9tR2x5cGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbHlwaENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2FkdmFuY2VbZnJvbUdseXBoXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9v
ZmZzZXRzW2Zyb21HbHlwaF0pOworICAgICAgICAgICAgICAgICAgICB0ZXh0T3V0T2sgPSAoaHIg
PT0gU19PSyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
U2tQb2ludCBvcmlnaW47CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbi5mWCA9IGN1clggKyAr
IGlubmVyT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBvcmlnaW4uZlkgPSB5ICsgbV9hc2Nl
bnQ7CisgICAgICAgICAgICAgICAgICAgIHBhaW50U2tpYVRleHQoZ3JhcGhpY3NDb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBpbmcubV9oZm9udCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaENvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fZ2x5cGhzW2Zyb21HbHlwaF0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9hZHZhbmNlW2Zyb21HbHlwaF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9vZmZzZXRzW2Zy
b21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9yaWdpbik7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHRPdXRPayA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
I2VuZGlmCiAKICAgICAgICAgICAgICAgICBpZiAoIXRleHRPdXRPayAmJiAwID09IGV4ZWN1dGlv
bnMpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgVGV4dE91dCBpcyBjYWxsZWQgZnJvbSB0
aGUgcmVuZGVyZXIgaXQgbWlnaHQgZmFpbApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3Bw
CShyZXZpc2lvbiA5NjkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OSw2ICs1Nzks
MTcgQEAgY29uc3QgU2tCaXRtYXAqIFBsYXRmb3JtQ29udGV4dFNraWE6OmJpdAogICAgIHJldHVy
biAmbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogfQogCitib29s
IFBsYXRmb3JtQ29udGV4dFNraWE6OmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKQorewor
I2lmIEVOQUJMRShTS0lBX1RFWFQpCisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBpZiAo
aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHNraWE6
OlN1cHBvcnRzUGxhdGZvcm1QYWludChtX2NhbnZhcyk7CisjZW5kaWYKK30KKwogdm9pZCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpnZXRJbWFnZVJlc2FtcGxpbmdIaW50KEludFNpemUqIHNyY1NpemUs
IEZsb2F0U2l6ZSogZHN0U2l6ZSkgY29uc3QKIHsKICAgICAqc3JjU2l6ZSA9IG1faW1hZ2VSZXNh
bXBsaW5nSGludFNyY1NpemU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24g
OTY5MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogI2lmbmRlZiBQ
bGF0Zm9ybUNvbnRleHRTa2lhX2gKICNkZWZpbmUgUGxhdGZvcm1Db250ZXh0U2tpYV9oCiAKKy8v
IGhhY2sgdG8gZGVmaW5lIEVOQUJMRV9TS0lBX1RFWFQKKyNpbmNsdWRlICJTa2lhRm9udFdpbi5o
IgorCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm9uY29weWFibGUu
aCIKIApAQCAtMTY3LDYgKzE3MCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmludGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wgcCkg
eyBtX3ByaW50aW5nID0gcDsgfQogCisgICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBhbGxv
d3MgcmVuZGVyaW5nIG9mIGZvbnRzIHVzaW5nIG5hdGl2ZSBwbGF0Zm9ybQorICAgIC8vIEFQSXMu
IElmIGZhbHNlIGlzIHJldHVybmVkIGZvbnQgcmVuZGVyaW5nIGlzIHBlcmZvcm1lZCB1c2luZyB0
aGUgc2tpYQorICAgIC8vIHRleHQgZHJhd2luZyBBUElzLgorICAgIC8vIGlmIFNLSUFfVEVYVCBp
cyBlbmFibGVkLCB0aGlzIGFsd2F5cyByZXR1cm5zIGZhbHNlCisgICAgYm9vbCBpc05hdGl2ZUZv
bnRSZW5kZXJpbmdBbGxvd2VkKCk7CisKICAgICB2b2lkIGdldEltYWdlUmVzYW1wbGluZ0hpbnQo
SW50U2l6ZSogc3JjU2l6ZSwgRmxvYXRTaXplKiBkc3RTaXplKSBjb25zdDsKICAgICB2b2lkIHNl
dEltYWdlUmVzYW1wbGluZ0hpbnQoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgRmxvYXRT
aXplJiBkc3RTaXplKTsKICAgICB2b2lkIGNsZWFySW1hZ2VSZXNhbXBsaW5nSGludCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lh
Rm9udFdpbi5jcHAJKHJldmlzaW9uIDk2OTM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQz
LDYwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFFTkFCTEUoU0tJQV9URVhUKQor
Ym9vbCB3aW5kb3dzQ2FuSGFuZGxlRHJhd1RleHRTaGFkb3coR3JhcGhpY3NDb250ZXh0ICpjb250
ZXh0KQoreworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1
cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3Bh
Y2U7CisKKyAgICBib29sIGhhc1NoYWRvdyA9IGNvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKKyAgICByZXR1
cm4gIWhhc1NoYWRvdyB8fCAoIXNoYWRvd0JsdXIgJiYgKHNoYWRvd0NvbG9yLmFscGhhKCkgPT0g
MjU1KSAmJiAoY29udGV4dC0+ZmlsbENvbG9yKCkuYWxwaGEoKSA9PSAyNTUpKTsKK30KKworYm9v
bCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQor
eworICAgIGlmICghd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91dFNoYWRvdyhjb250
ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIHNoYWRvdyBl
ZmZlY3RzLgorICAgIGlmICghd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KGNvbnRleHQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCB3
aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICAvLyBDaGVjayBmb3Igbm9uLXRyYW5zbGF0aW9uIHRyYW5zZm9ybXMu
IFNvbWV0aW1lcyB6b29tcyB3aWxsIGxvb2sgYmV0dGVyIGluCisgICAgLy8gU2tpYSwgYW5kIHNv
bWV0aW1lcyBiZXR0ZXIgaW4gV2luZG93cy4gVGhlIG1haW4gcHJvYmxlbSBpcyB0aGF0IHpvb21p
bmcKKyAgICAvLyBpbiB1c2luZyBTa2lhIHdpbGwgc2hvdyB5b3UgdGhlIGhpbnRlZCBvdXRsaW5l
cyBmb3IgdGhlIHNtYWxsZXIgc2l6ZSwKKyAgICAvLyB3aGljaCBsb29rIHdlaXJkLiBBbGwgZWxz
ZSBiZWluZyBlcXVhbCwgaXQncyBiZXR0ZXIgdG8gdXNlIFdpbmRvd3MnIHRleHQKKyAgICAvLyBk
cmF3aW5nLCBzbyB3ZSBkb24ndCBjaGVjayBmb3Igem9vbXMuCisgICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBtYXRyaXggPSBjb250ZXh0LT5nZXRDVE0oKTsKKyAgICBpZiAobWF0cml4LmIoKSB8
fCBtYXRyaXguYygpKSAvLyBDaGVjayBmb3Igc2tldy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQ2hlY2sgZm9yIHN0cm9rZSBlZmZlY3RzLgorICAgIGlmIChjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Z2V0VGV4dERyYXdpbmdNb2RlKCkgIT0gVGV4dE1vZGVGaWxsKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3IgZ3JhZGllbnRzLgorICAgIGlm
IChjb250ZXh0LT5maWxsR3JhZGllbnQoKSB8fCBjb250ZXh0LT5zdHJva2VHcmFkaWVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3IgcGF0dGVybnMuCisgICAg
aWYgKGNvbnRleHQtPmZpbGxQYXR0ZXJuKCkgfHwgY29udGV4dC0+c3Ryb2tlUGF0dGVybigpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5pc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHNraWFEcmF3
VGV4dChTa0NhbnZhcyogY2FudmFzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNr
UG9pbnQmIHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIFNrUGFpbnQqIHBhaW50LApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tp
YUZvbnRXaW4uaAkocmV2aXNpb24gOTY5MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NraWFGb250V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSw0
NSBAQAogI2lmbmRlZiBTa2lhRm9udFdpbl9oCiAjZGVmaW5lIFNraWFGb250V2luX2gKIAorLy8g
I2RlZmluZSBFTkFCTEVfU0tJQV9URVhUIDEKKwogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNs
dWRlIDx1c3AxMC5oPgogCi1jbGFzcyBTa1BvaW50Oworc3RydWN0IFNrUG9pbnQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUGxhdGZvcm1D
b250ZXh0U2tpYTsKKworI2lmICFFTkFCTEUoU0tJQV9URVhUKQorLy8gVGhlIGZ1bmN0aW9ucyBi
ZWxvdyBhcmUgdXNlZCBmb3IgbW9yZSBjb21wbGV4IGZvbnQgZHJhd2luZyAoZWZmZWN0cyBzdWNo
IGFzCisvLyBzdHJva2luZyBhbmQgbW9yZSBjb21wbGV4IHRyYW5zZm9ybXMpIHRoYW4gV2luZG93
cyBzdXBwb3J0cyBkaXJlY3RseS4gU2luY2UKKy8vIFdpbmRvd3MgZHJhd2luZyBpcyBmYXN0ZXIg
eW91IHNob3VsZCB1c2Ugd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nIGZpcnN0IHRvCisvLyBj
aGVjayBpZiB1c2luZyBTa2lhIGlzIHJlcXVpcmVkIGF0IGFsbC4KKy8vIE5vdGUgdGhhdCB0aGUg
dGV4dCB3aWxsIGxvb2sgZGlmZmVyZW50IChubyBDbGVhclR5cGUpIHNvIHRoaXMgc2hvdWxkIG9u
bHkgYmUKKy8vIHVzZWQgd2hlbiBuZWNlc3NhcnkuCisvLworLy8gV2hlbiB5b3UgY2FsbCBhIFNr
aWEqIHRleHQgZHJhd2luZyBmdW5jdGlvbiwgdmFyaW91cyBnbHlwaCBvdXRsaW5lcyB3aWxsIGJl
CisvLyBjYWNoZWQuIEFzIGEgcmVzdWx0LCB5b3Ugc2hvdWxkIGNhbGwgU2tpYVdpbk91dGxpbmVD
YWNoZTo6cmVtb3ZlUGF0aHNGb3JGb250CisvLyB3aGVuIHRoZSBmb250IGlzIGRlc3Ryb3llZCBz
byB0aGF0IHRoZSBjYWNoZSBkb2VzIG5vdCBvdXRsaXZlIHRoZSBmb250IChzaW5jZQorLy8gdGhl
IEhGT05UcyBhcmUgcmVjeWNsZWQpLgorLy8KKy8vIFJlbWVtYmVyIHRoYXQgU2tpYSdzIHRleHQg
ZHJhd2luZyBvcmlnaW4gaXMgdGhlIGJhc2VsaW5lLCBsaWtlIFdlYktpdCwgbm90CisvLyB0aGUg
dG9wLCBsaWtlIFdpbmRvd3MuCisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsbENvbG9yIGFu
ZCBzaGFkb3dDb2xvciBhcmUgb3BhcXVlIGFuZCB0aGUgdGV4dC1zaGFkb3cKKy8vIGlzIG5vdCBi
bHVycmVkLgorYm9vbCB3aW5kb3dzQ2FuSGFuZGxlRHJhd1RleHRTaGFkb3coR3JhcGhpY3NDb250
ZXh0Kik7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBhZHZhbmNlZCBmb250IHJlbmRlcmluZyBpcyBy
ZWNvbW1lbmRlZC4KK2Jvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKEdyYXBoaWNzQ29u
dGV4dCopOworCisvLyBSZXR1cm5zIHRydWUgaWYgYWR2YW5jZWQgZm9udCByZW5kZXJpbmcgaXMg
cmVjb21tZW5kZWQgaWYgc2hhZG93cyBhcmUKKy8vIGRpc3JlZ2FyZGVkLgorYm9vbCB3aW5kb3dz
Q2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCopOworI2Vu
ZGlmCiAKIC8vIE5vdGUgdGhhdCB0aGUgb2Zmc2V0cyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuICBJ
ZiBub3QgTlVMTCBpdCByZXByZXNlbnRzIGEKIC8vIHBlciBnbHlwaCBvZmZzZXQgKHN1Y2ggYXMg
cmV0dXJuZWQgYnkgU2NyaXB0UGxhY2UgV2luZG93cyBBUEkgZnVuY3Rpb24pLgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2OTM1KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0x
MC0wNyAgTWlrZSBSZWVkICA8cmVlZEBnb29nbGUuY29tPgorCisgICAgICAgIHJlLWFkZCBzdXBw
b3J0IGZvciBHREkgdGV4dCBiZWhpbmQgYSBjb21waWxlIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmZWF0dXJlcy5neXBpOgorCiAyMDExLTEw
LTA3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTY4NzkuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9mZWF0dXJlcy5neXBpCShyZXZpc2lvbiA5NjkzNCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQAogICAgICAg
J0VOQUJMRV9TQU5EQk9YPTEnLAogICAgICAgJ0VOQUJMRV9TSEFSRURfV09SS0VSUz0xJywKICAg
ICAgICdFTkFCTEVfU0tJQV9HUFU9PCh1c2Vfc2tpYV9ncHUpJywKKyAgICAgICdFTkFCTEVfU0tJ
QV9URVhUPTwoZW5hYmxlX3NraWFfdGV4dCknLAogICAgICAgJ0VOQUJMRV9TTU9PVEhfU0NST0xM
SU5HPTEnLAogICAgICAgJ0VOQUJMRV9TUUxfREFUQUJBU0U9MScsCiAgICAgICAnRU5BQkxFX1NW
Rz08KGVuYWJsZV9zdmcpJywKQEAgLTEwOSw4ICsxMTAsMTAgQEAKICAgICAndmFyaWFibGVzJzog
ewogICAgICAgJ3VzZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyUnOiAxLAogICAgICAgJ3VzZV90
aHJlYWRlZF9jb21wb3NpdGluZyUnOiAwLAorICAgICAgJ2VuYWJsZV9za2lhX3RleHQmJzogMCwK
ICAgICAgICdlbmFibGVfc3ZnJSc6IDEsCiAgICAgICAnZW5hYmxlX3RvdWNoX2V2ZW50cyUnOiAx
LAorICAgICAgJ2VuYWJsZV9za2lhX3RleHQlJzogMCwKICAgICAgICd1c2Vfc2tpYV9ncHUlJzog
MCwKICAgICAgICd1c2Vfc2tpYSUnOiAwLAogICAgICAgJ2VuYWJsZV90b3VjaF9pY29uX2xvYWRp
bmclJyA6IDAsCkBAIC0xMTgsNiArMTIxLDcgQEAKICAgICB9LAogICAgICd1c2VfYWNjZWxlcmF0
ZWRfY29tcG9zaXRpbmclJzogJzwodXNlX2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nKScsCiAgICAg
J3VzZV90aHJlYWRlZF9jb21wb3NpdGluZyUnOiAnPCh1c2VfdGhyZWFkZWRfY29tcG9zaXRpbmcp
JywKKyAgICAnZW5hYmxlX3NraWFfdGV4dCUnOiAnPChlbmFibGVfc2tpYV90ZXh0KScsCiAgICAg
J2VuYWJsZV9zdmclJzogJzwoZW5hYmxlX3N2ZyknLAogICAgICdlbmFibGVfdG91Y2hfZXZlbnRz
JSc6ICc8KGVuYWJsZV90b3VjaF9ldmVudHMpJywKICAgICAndXNlX3NraWElJzogJzwodXNlX3Nr
aWEpJywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110146</attachid>
            <date>2011-10-07 08:00:47 -0700</date>
            <delta_ts>2011-10-07 12:14:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69530-20111007110045.patch</filename>
            <type>text/plain</type>
            <size>33266</size>
            <attacher name="Mike Reed">reed</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2OTM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTAtMDcgIE1pa2UgUmVl
ZCAgPHJlZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRl
eHQgYmVoaW5kIGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBSZXZlcnRzIGJhY2sgdG8g
dXNpbmcgR0RJIGZvciB0ZXh0ICh3aGVuIHBvc3NpYmxlKQorICAgICAgICBidXQga2VlcHMgc2tp
YS10ZXh0IHZlcnNpb24gYmVoaW5kIGEgY29tcGlsZS1mbGFnLiBJZi93aGVuIHdlIGNhbgorICAg
ICAgICByZXNvbHZlIHRoZSBvdXRzdGFuZGluZyBzb2Z0LWNsaXAgYW5kIGludGwtcGVyZm9ybWFu
Y2UgYnVncyB3aXRoIHRoZQorICAgICAgICBza2lhIHZlcnNpb24sIHdlIG1heSBjaGFuZ2UgdGhl
IGNvbXBpbGUtZmxhZyB0byByZWVuYWJsZSBza2lhLgorIAorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uaDoKKwogMjAxMS0xMC0wNyAgQW5kcmVhcyBLbGluZyAg
PGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU2hyaW5rIFN0eWxlSW5oZXJpdGVkRGF0YS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJv
bWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAkocmV2aXNpb24gOTY5MzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMzMzIEBACiAjaW5jbHVkZSAiU2tpYUZvbnRX
aW4uaCIKICNpbmNsdWRlICJVbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgiCiAKKyNpZiAhRU5BQkxF
KFNLSUFfVEVYVCkKKyNpbmNsdWRlICJUcmFuc3BhcmVuY3lXaW4uaCIKKyNpbmNsdWRlICJza2lh
L2V4dC9za2lhX3V0aWxzX3dpbi5oIgorI2VuZGlmCisKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFFTkFCTEUoU0tJQV9URVhUKQorbmFtZXNwYWNl
IHsKKworYm9vbCBjYW52YXNIYXNNdWx0aXBsZUxheWVycyhjb25zdCBTa0NhbnZhcyogY2FudmFz
KQoreworICAgIFNrQ2FudmFzOjpMYXllckl0ZXIgaXRlcihjb25zdF9jYXN0PFNrQ2FudmFzKj4o
Y2FudmFzKSwgZmFsc2UpOworICAgIGl0ZXIubmV4dCgpOyAvLyBUaGVyZSBpcyBhbHdheXMgYXQg
bGVhc3Qgb25lIGxheWVyLgorICAgIHJldHVybiAhaXRlci5kb25lKCk7IC8vIFRoZXJlIGlzID4g
MSBsYXllciBpZiB0aGUgdGhlIGl0ZXJhdG9yIGNhbiBzdGlsIGFkdmFuY2UuCit9CisKK2NsYXNz
IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIgeworcHVibGljOgorICAgIFRyYW5zcGFyZW5j
eUF3YXJlRm9udFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYpOwor
ICAgIH5UcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICAv
LyBDYWxsZWQgYnkgb3VyIHN1YmNsYXNzJyBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIEdESSBp
ZiBuZWNlc3NhcnkuIFRoaXMKKyAgICAvLyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0IGNh
biBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHN1YmNsYXNzIGZpbmlzaGVzCisgICAgLy8gY29uc3RydWN0
aW9uIChpdCBjYWxscyB2aXJ0dWFsIGZ1bmN0aW9ucykuCisgICAgdm9pZCBpbml0KCk7CisKKyAg
ICB2aXJ0dWFsIEludFJlY3QgZXN0aW1hdGVUZXh0Qm91bmRzKCkgPSAwOworCisgICAgLy8gVXNl
IHRoZSBjb250ZXh0IGZyb20gdGhlIHRyYW5zcGFyZW5jeSBoZWxwZXIgd2hlbiBkcmF3aW5nIHdp
dGggR0RJLiBJdAorICAgIC8vIG1heSBwb2ludCB0byBhIHRlbXBvcmFyeSBvbmUuCisgICAgR3Jh
cGhpY3NDb250ZXh0KiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogbV9wbGF0Zm9ybUNvbnRleHQ7CisKKyAgICBGbG9hdFBvaW50IG1fcG9pbnQ7CisKKyAg
ICAvLyBTZXQgd2hlbiBXaW5kb3dzIGNhbiBoYW5kbGUgdGhlIHR5cGUgb2YgZHJhd2luZyB3ZSdy
ZSBkb2luZy4KKyAgICBib29sIG1fdXNlR0RJOworCisgICAgLy8gVGhlc2UgbWVtYmVycyBhcmUg
dmFsaWQgb25seSB3aGVuIG1fdXNlR0RJIGlzIHNldC4KKyAgICBIREMgbV9oZGM7CisgICAgVHJh
bnNwYXJlbmN5V2luIG1fdHJhbnNwYXJlbmN5OworCitwcml2YXRlOgorICAgIC8vIENhbGwgd2hl
biB3ZSdyZSB1c2luZyBHREkgbW9kZSB0byBpbml0aWFsaXplIHRoZSBUcmFuc3BhcmVuY3lXaW4g
dG8gaGVscAorICAgIC8vIHVzIGRyYXcgR0RJIHRleHQuCisgICAgdm9pZCBpbml0aWFsaXplRm9y
R0RJKCk7CisKKyAgICBib29sIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyOyAvLyBXZSBjcmVh
dGVkIGEgbGF5ZXIgdG8gZ2l2ZSB0aGUgZm9udCBzb21lIGFscGhhLgorfTsKKworVHJhbnNwYXJl
bmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIDogbV9n
cmFwaGljc0NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKQorICAgICwgbV9wb2ludChwb2ludCkKKyAgICAsIG1fdXNlR0RJ
KHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhjb250ZXh0KSkKKyAgICAsIG1faGRjKDApCisg
ICAgLCBtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllcihmYWxzZSkKK3sKK30KKwordm9pZCBUcmFu
c3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0KCkKK3sKKyAgICBpZiAobV91c2VHREkpCisg
ICAgICAgIGluaXRpYWxpemVGb3JHREkoKTsKK30KKwordm9pZCBUcmFuc3BhcmVuY3lBd2FyZUZv
bnRQYWludGVyOjppbml0aWFsaXplRm9yR0RJKCkKK3sKKyAgICBtX2dyYXBoaWNzQ29udGV4dC0+
c2F2ZSgpOworICAgIFNrQ29sb3IgY29sb3IgPSBtX3BsYXRmb3JtQ29udGV4dC0+ZWZmZWN0aXZl
RmlsbENvbG9yKCk7CisgICAgLy8gVXNlZCBvbmx5IHdoZW4gbV9jcmVhdGVkVHJhbnNwYXJlbmN5
TGF5ZXIgaXMgdHJ1ZS4KKyAgICBmbG9hdCBsYXllckFscGhhID0gMC4wZjsKKyAgICBpZiAoU2tD
b2xvckdldEEoY29sb3IpICE9IDB4RkYpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgZm9udCBoYXMg
c29tZSB0cmFuc3BhcmVuY3ksIGFwcGx5IGl0IGJ5IGNyZWF0aW5nIGEgbmV3CisgICAgICAgIC8v
IHRyYW5zcGFyZW5jeSBsYXllciB3aXRoIHRoYXQgb3BhY2l0eSBhcHBsaWVkLiBXZSdsbCBhY3R1
YWxseSBjcmVhdGUKKyAgICAgICAgLy8gYSBuZXcgdHJhbnNwYXJlbmN5IGxheWVyIGFmdGVyIHdl
IGNhbGN1bGF0ZSB0aGUgYm91bmRpbmcgYm94LgorICAgICAgICBtX2NyZWF0ZWRUcmFuc3BhcmVu
Y3lMYXllciA9IHRydWU7CisgICAgICAgIGxheWVyQWxwaGEgPSBTa0NvbG9yR2V0QShjb2xvcikg
LyAyNTUuMGY7CisgICAgICAgIC8vIFRoZSBjb2xvciBzaG91bGQgYmUgb3BhcXVlIG5vdy4KKyAg
ICAgICAgY29sb3IgPSBTa0NvbG9yU2V0UkdCKFNrQ29sb3JHZXRSKGNvbG9yKSwgU2tDb2xvckdl
dEcoY29sb3IpLCBTa0NvbG9yR2V0Qihjb2xvcikpOworICAgIH0KKworICAgIFRyYW5zcGFyZW5j
eVdpbjo6TGF5ZXJNb2RlIGxheWVyTW9kZTsKKyAgICBJbnRSZWN0IGxheWVyUmVjdDsKKyAgICBp
ZiAobV9wbGF0Zm9ybUNvbnRleHQtPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKSkgeworICAgICAg
ICAvLyBBc3N1bWUgaWYgd2UncmUgZHJhd2luZyB0byBhbiBpbWFnZSBidWZmZXIgdGhhdCB0aGUg
YmFja2dyb3VuZAorICAgICAgICAvLyBpcyBub3Qgb3BhcXVlIGFuZCB3ZSBoYXZlIHRvIHVuZG8g
Q2xlYXJUeXBlLiBXZSBtYXkgd2FudCB0bworICAgICAgICAvLyBlbmhhbmNlIHRoaXMgdG8gYWN0
dWFsbHkgY2hlY2ssIHNpbmNlIGl0IHdpbGwgb2Z0ZW4gYmUgb3BhcXVlCisgICAgICAgIC8vIGFu
ZCB3ZSBjb3VsZCBkbyBDbGVhclR5cGUgaW4gdGhhdCBjYXNlLgorICAgICAgICBsYXllck1vZGUg
PSBUcmFuc3BhcmVuY3lXaW46OlRleHRDb21wb3NpdGU7CisgICAgICAgIGxheWVyUmVjdCA9IGVz
dGltYXRlVGV4dEJvdW5kcygpOworICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+Y2xpcChsYXll
clJlY3QpOworICAgICAgICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCisgICAgICAg
ICAgICBtX2dyYXBoaWNzQ29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihsYXllckFscGhh
KTsKKworICAgICAgICAvLyBUaGUgdHJhbnNwYXJlbmN5IGhlbHBlciByZXF1aXJlcyB0aGF0IHdl
IGRyYXcgdGV4dCBpbiBibGFjayBpbgorICAgICAgICAvLyB0aGlzIG1vZGUgYW5kIGl0IHdpbGwg
YXBwbHkgdGhlIGNvbG9yLgorICAgICAgICBtX3RyYW5zcGFyZW5jeS5zZXRUZXh0Q29tcG9zaXRl
Q29sb3IoY29sb3IpOworICAgICAgICBjb2xvciA9IFNrQ29sb3JTZXRSR0IoMCwgMCwgMCk7Cisg
ICAgfSBlbHNlIGlmIChtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllciB8fCBjYW52YXNIYXNNdWx0
aXBsZUxheWVycyhtX3BsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCkpKSB7CisgICAgICAgIC8vIFdo
ZW4gd2UncmUgZHJhd2luZyBhIHdlYiBwYWdlLCB3ZSBrbm93IHRoZSBiYWNrZ3JvdW5kIGlzIG9w
YXF1ZSwKKyAgICAgICAgLy8gYnV0IGlmIHdlJ3JlIGRyYXdpbmcgdG8gYSBsYXllciwgd2Ugc3Rp
bGwgbmVlZCBleHRyYSB3b3JrLgorICAgICAgICBsYXllck1vZGUgPSBUcmFuc3BhcmVuY3lXaW46
Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyOworICAgICAgICBsYXllclJlY3QgPSBlc3RpbWF0ZVRleHRC
b3VuZHMoKTsKKyAgICAgICAgbV9ncmFwaGljc0NvbnRleHQtPmNsaXAobGF5ZXJSZWN0KTsKKyAg
ICAgICAgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyKQorICAgICAgICAgICAgbV9ncmFw
aGljc0NvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobGF5ZXJBbHBoYSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gQ29tbW9uIGNhc2Ugb2YgZHJhd2luZyBvbnRvIHRoZSBib3R0b20g
bGF5ZXIgb2YgYSB3ZWIgcGFnZTogd2UKKyAgICAgICAgLy8ga25vdyBldmVyeXRoaW5nIGlzIG9w
YXF1ZSBzbyBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgIGxheWVy
TW9kZSA9IFRyYW5zcGFyZW5jeVdpbjo6Tm9MYXllcjsKKyAgICB9CisKKyAgICAvLyBCdWcgMjYw
ODggLSBpbml0KCkgbWlnaHQgZmFpbCBpZiBsYXllclJlY3QgaXMgaW52YWxpZC4gR2l2ZW4gdGhp
cywgd2UKKyAgICAvLyBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gY2hlY2sgZm9yIG51bGwgcG9pbnRl
cnMgZXZlcnl3aGVyZSBhZnRlciB0aGlzIGNhbGwKKyAgICBtX3RyYW5zcGFyZW5jeS5pbml0KG1f
Z3JhcGhpY3NDb250ZXh0LCBsYXllck1vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgVHJh
bnNwYXJlbmN5V2luOjpLZWVwVHJhbnNmb3JtLCBsYXllclJlY3QpOworCisgICAgLy8gU2V0IHVw
IHRoZSBEQywgdXNpbmcgdGhlIG9uZSBmcm9tIHRoZSB0cmFuc3BhcmVuY3kgaGVscGVyLgorICAg
IGlmIChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkgeworICAgICAgICBtX2hkYyA9
IHNraWE6OkJlZ2luUGxhdGZvcm1QYWludChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCkpOworICAgICAgICBTZXRUZXh0Q29sb3IobV9oZGMsIHNraWE6OlNrQ29sb3JU
b0NPTE9SUkVGKGNvbG9yKSk7CisgICAgICAgIFNldEJrTW9kZShtX2hkYywgVFJBTlNQQVJFTlQp
OworICAgIH0KK30KKworVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6flRyYW5zcGFyZW5j
eUF3YXJlRm9udFBhaW50ZXIoKQoreworICAgIGlmICghbV91c2VHREkgfHwgIW1fZ3JhcGhpY3ND
b250ZXh0IHx8ICFtX3BsYXRmb3JtQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdHJh
bnNwYXJlbmN5LmNvbXBvc2l0ZSgpOworICAgIGlmIChtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXll
cikKKyAgICAgICAgbV9ncmFwaGljc0NvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Cisg
ICAgbV9ncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICBpZiAobV90cmFuc3BhcmVuY3ku
cGxhdGZvcm1Db250ZXh0KCkpCisgICAgICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQobV90cmFu
c3BhcmVuY3kucGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKTsKK30KKworLy8gU3BlY2lhbGl6
YXRpb24gZm9yIHNpbXBsZSBHbHlwaEJ1ZmZlciBwYWludGluZy4KK2NsYXNzIFRyYW5zcGFyZW5j
eUF3YXJlR2x5cGhQYWludGVyIDogcHVibGljIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIg
eworIHB1YmxpYzoKKyAgICBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcihHcmFwaGljc0Nv
bnRleHQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1
ZmZlciYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBu
dW1HbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYpOworICAgIH5UcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcigpOworCisgICAgLy8g
RHJhd3MgdGhlIHBhcnRpYWwgc3RyaW5nIG9mIGdseXBocywgc3RhcnRpbmcgYXQgfHN0YXJ0QWR2
YW5jZXwgdG8gdGhlCisgICAgLy8gbGVmdCBvZiBtX3BvaW50LiBXZSBleHByZXNzIGl0IHRoaXMg
d2F5IHNvIHRoYXQgaWYgd2UncmUgdXNpbmcgdGhlIFNraWEKKyAgICAvLyBkcmF3aW5nIHBhdGgg
d2UgY2FuIHVzZSBmbG9hdGluZy1wb2ludCBwb3NpdGlvbmluZywgZXZlbiB0aG91Z2ggd2UgaGF2
ZQorICAgIC8vIHRvIHVzZSBpbnRlZ2VyIHBvc2l0aW9uaW5nIGluIHRoZSBHREkgcGF0aC4KKyAg
ICBib29sIGRyYXdHbHlwaHMoaW50IG51bUdseXBocywgY29uc3QgV09SRCogZ2x5cGhzLCBjb25z
dCBpbnQqIGFkdmFuY2VzLCBmbG9hdCBzdGFydEFkdmFuY2UpIGNvbnN0OworCisgcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIEludFJlY3QgZXN0aW1hdGVUZXh0Qm91bmRzKCk7CisKKyAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogbV9mb250OworICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVm
ZmVyOworICAgIGludCBtX2Zyb207CisgICAgaW50IG1fbnVtR2x5cGhzOworCisgICAgLy8gV2hl
biBtX3VzZUdkaSBpcyBzZXQsIHRoaXMgc3RvcmVzIHRoZSBwcmV2aW91cyBIRk9OVCBzZWxlY3Rl
ZCBpbnRvIHRoZQorICAgIC8vIG1faGRjIHNvIHdlIGNhbiByZXN0b3JlIGl0LgorICAgIEhHRElP
QkogbV9vbGRGb250OyAvLyBGb3IgcmVzdG9yaW5nIHRoZSBEQyB0byBpdHMgb3JpZ2luYWwgc3Rh
dGUuCit9OworCitUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdh
cmVHbHlwaFBhaW50ZXIoCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250LAorICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwKKyAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywKKyAgICBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKKyAgICA6IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoY29udGV4dCwgcG9pbnQp
CisgICAgLCBtX2ZvbnQoZm9udCkKKyAgICAsIG1fZ2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIpCisg
ICAgLCBtX2Zyb20oZnJvbSkKKyAgICAsIG1fbnVtR2x5cGhzKG51bUdseXBocykKKyAgICAsIG1f
b2xkRm9udCgwKQoreworICAgIGluaXQoKTsKKworICAgIGlmIChtX2hkYykKKyAgICAgICAgbV9v
bGRGb250ID0gOjpTZWxlY3RPYmplY3QobV9oZGMsIG1fZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZv
bnQoKSk7Cit9CisKK1RyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjp+VHJhbnNwYXJlbmN5
QXdhcmVHbHlwaFBhaW50ZXIoKQoreworICAgIGlmIChtX3VzZUdESSAmJiBtX2hkYykKKyAgICAg
ICAgOjpTZWxlY3RPYmplY3QobV9oZGMsIG1fb2xkRm9udCk7Cit9CisKKworLy8gRXN0aW1hdGVz
IHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGdpdmVuIHRleHQuIFRoaXMgaXMgY29waWVkIGZyb20K
Ky8vIEZvbnRDR1dpbi5jcHAsIGl0IGlzIHBvc3NpYmxlLCBidXQgYSBsb3QgbW9yZSB3b3JrLCB0
byBnZXQgdGhlIHByZWNpZGUKKy8vIGJvdW5kcy4KK0ludFJlY3QgVHJhbnNwYXJlbmN5QXdhcmVH
bHlwaFBhaW50ZXI6OmVzdGltYXRlVGV4dEJvdW5kcygpCit7CisgICAgaW50IHRvdGFsV2lkdGgg
PSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9udW1HbHlwaHM7IGkrKykKKyAgICAgICAg
dG90YWxXaWR0aCArPSBscm91bmRmKG1fZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KG1fZnJvbSArIGkp
KTsKKworICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IG1fZm9udC0+Zm9udE1l
dHJpY3MoKTsKKyAgICByZXR1cm4gSW50UmVjdChtX3BvaW50LngoKSAtIChmb250TWV0cmljcy5h
c2NlbnQoKSArIGZvbnRNZXRyaWNzLmRlc2NlbnQoKSkgLyAyLAorICAgICAgICAgICAgICAgICAg
IG1fcG9pbnQueSgpIC0gZm9udE1ldHJpY3MuYXNjZW50KCkgLSBmb250TWV0cmljcy5saW5lR2Fw
KCksCisgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCArIGZvbnRNZXRyaWNzLmFzY2VudCgp
ICsgZm9udE1ldHJpY3MuZGVzY2VudCgpLAorICAgICAgICAgICAgICAgICAgIGZvbnRNZXRyaWNz
LmxpbmVTcGFjaW5nKCkpOyAKK30KKworYm9vbCBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRl
cjo6ZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCogYWR2YW5jZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0QWR2
YW5jZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdXNlR0RJKSB7CisgICAgICAgIFNrUG9pbnQgb3Jp
Z2luID0gbV9wb2ludDsKKyAgICAgICAgb3JpZ2luLmZYICs9IFNrRmxvYXRUb1NjYWxhcihzdGFy
dEFkdmFuY2UpOworICAgICAgICBwYWludFNraWFUZXh0KG1fZ3JhcGhpY3NDb250ZXh0LCBtX2Zv
bnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCksCisgICAgICAgICAgICAgICAgICAgICAgbnVtR2x5
cGhzLCBnbHlwaHMsIGFkdmFuY2VzLCAwLCAmb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKCFtX2dyYXBoaWNzQ29udGV4dCB8fCAhbV9oZGMpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8gV2luZG93cycgb3JpZ2luIGlzIHRoZSB0b3AtbGVmdCBv
ZiB0aGUgYm91bmRpbmcgYm94LCBzbyB3ZSBoYXZlCisgICAgLy8gdG8gc3VidHJhY3Qgb2ZmIHRo
ZSBmb250IGFzY2VudCB0byBnZXQgaXQuCisgICAgaW50IHggPSBscm91bmRmKG1fcG9pbnQueCgp
ICsgc3RhcnRBZHZhbmNlKTsKKyAgICBpbnQgeSA9IGxyb3VuZGYobV9wb2ludC55KCkgLSBtX2Zv
bnQtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgYSBub24t
Ymx1ciBzaGFkb3cgYW5kIGJvdGggdGhlIGZpbGwgY29sb3IgYW5kIHNoYWRvdyBjb2xvciAKKyAg
ICAvLyBhcmUgb3BhcXVlLCBoYW5kbGUgd2l0aG91dCBza2lhLiAKKyAgICBGbG9hdFNpemUgc2hh
ZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7
CisgICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlOworICAgIGlmIChtX2dyYXBoaWNzQ29u
dGV4dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNo
YWRvd0NvbG9yU3BhY2UpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc2hhZG93IGFuZCB0
aGlzIGNvZGUgaXMgcmVhY2hlZCwgd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KCkKKyAg
ICAgICAgLy8gd2lsbCBoYXZlIGFscmVhZHkgcmV0dXJuZWQgdHJ1ZSBkdXJpbmcgdGhlIGN0b3Ig
aW5pdGlhdGl6YXRpb24gb2YgbV91c2VHREkKKyAgICAgICAgQVNTRVJUKHNoYWRvd0NvbG9yLmFs
cGhhKCkgPT0gMjU1KTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29s
b3IoKS5hbHBoYSgpID09IDI1NSk7CisgICAgICAgIEFTU0VSVCghc2hhZG93Qmx1cik7CisgICAg
ICAgIENPTE9SUkVGIHRleHRDb2xvciA9IHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKFNrQ29sb3JT
ZXRBUkdCKDI1NSwgc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRv
d0NvbG9yLmJsdWUoKSkpOworICAgICAgICBDT0xPUlJFRiBzYXZlZFRleHRDb2xvciA9IEdldFRl
eHRDb2xvcihtX2hkYyk7CisgICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgdGV4dENvbG9yKTsK
KyAgICAgICAgRXh0VGV4dE91dChtX2hkYywgeCArIHNoYWRvd09mZnNldC53aWR0aCgpLCB5ICsg
c2hhZG93T2Zmc2V0LmhlaWdodCgpLCBFVE9fR0xZUEhfSU5ERVgsIDAsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3Qgd2NoYXJfdCo+KCZnbHlwaHNbMF0pLCBudW1HbHlwaHMsICZhZHZhbmNlc1swXSk7
CisgICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgc2F2ZWRUZXh0Q29sb3IpOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gISFFeHRUZXh0T3V0KG1faGRjLCB4LCB5LCBFVE9fR0xZUEhfSU5ERVgs
IDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KCZnbHlwaHNbMF0pLCBudW1HbHlw
aHMsICZhZHZhbmNlc1swXSk7Cit9CisKK2NsYXNzIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJl
UGFpbnRlciA6IHB1YmxpYyBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsKKyBwdWJsaWM6
CisgICAgVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyKEdyYXBoaWNzQ29udGV4dCos
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQqLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0UnVuJiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYpOworICAg
IH5UcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIoKTsKKworICAgIC8vIFVuaXNjaWJl
IHdpbGwgZHJhdyBkaXJlY3RseSBpbnRvIG91ciBidWZmZXIsIHNvIHdlIG5lZWQgdG8gZXhwb3Nl
IG91ciBEQy4KKyAgICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9oZGM7IH0KKworIHByaXZh
dGU6CisgICAgdmlydHVhbCBJbnRSZWN0IGVzdGltYXRlVGV4dEJvdW5kcygpOworCisgICAgY29u
c3QgRm9udCogbV9mb250OworICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOworICAgIGludCBtX2Zy
b207CisgICAgaW50IG1fdG87Cit9OworCitUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50
ZXI6OlRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsCisgICAgY29uc3QgRm9udCogZm9udCwKKyAgICBjb25zdCBUZXh0UnVuJiBy
dW4sCisgICAgaW50IGZyb20sIGludCB0bywKKyAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
KyAgICA6IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoY29udGV4dCwgcG9pbnQpCisgICAg
LCBtX2ZvbnQoZm9udCkKKyAgICAsIG1fcnVuKHJ1bikKKyAgICAsIG1fZnJvbShmcm9tKQorICAg
ICwgbV90byh0bykKK3sKKyAgICBpbml0KCk7Cit9CisKK1RyYW5zcGFyZW5jeUF3YXJlVW5pc2Ny
aWJlUGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigpCit7Cit9CisK
K0ludFJlY3QgVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjplc3RpbWF0ZVRleHRC
b3VuZHMoKQoreworICAgIC8vIFRoaXMgY2FzZSByZWFsbHkgcmVhbGx5IHN1Y2tzLiBUaGVyZSBp
cyBubyBjb252ZW5pZW50IHdheSB0byBlc3RpbWF0ZQorICAgIC8vIHRoZSBib3VuZGluZyBib3gu
IFNvIHdlIHJ1biBVbmlzY3JpYmUgdHdpY2UuIElmIHdlIGZpbmQgdGhpcyBoYXBwZW5zIGEKKyAg
ICAvLyBsb3QsIHRoZSB3YXkgdG8gZml4IGl0IGlzIHRvIG1ha2UgdGhlIGV4dHJhIGxheWVyIGFm
dGVyIHRoZQorICAgIC8vIFVuaXNjcmliZUhlbHBlciBoYXMgbWVhc3VyZWQgdGhlIHRleHQuCisg
ICAgSW50UG9pbnQgaW50UG9pbnQobHJvdW5kZihtX3BvaW50LngoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgbHJvdW5kZihtX3BvaW50LnkoKSkpOworCisgICAgVW5pc2NyaWJlSGVscGVyVGV4
dFJ1biBzdGF0ZShtX3J1biwgKm1fZm9udCk7CisgICAgaW50IGxlZnQgPSBscm91bmRmKG1fcG9p
bnQueCgpKSArIHN0YXRlLmNoYXJhY3RlclRvWChtX2Zyb20pOworICAgIGludCByaWdodCA9IGxy
b3VuZGYobV9wb2ludC54KCkpICsgc3RhdGUuY2hhcmFjdGVyVG9YKG1fdG8pOworICAgIAorICAg
IC8vIEFkanVzdCBmb3IgUlRMIHNjcmlwdCBzaW5jZSB3ZSBqdXN0IHdhbnQgdG8ga25vdyB0aGUg
dGV4dCBib3VuZHMuCisgICAgaWYgKGxlZnQgPiByaWdodCkKKyAgICAgICAgc3RkOjpzd2FwKGxl
ZnQsIHJpZ2h0KTsKKworICAgIC8vIFRoaXMgYWxnb3JpdGhtIGZvciBlc3RpbWF0aW5nIGhvdyBt
dWNoIGV4dHJhIHNwYWNlIHdlIG5lZWQgKHRoZSB0ZXh0IG1heQorICAgIC8vIGdvIG91dHNpZGUg
dGhlIHNlbGVjdGlvbiByZWN0KSBpcyBiYXNlZCByb3VnaGx5IG9uCisgICAgLy8gVHJhbnNwYXJl
bmN5QXdhcmVHbHlwaFBhaW50ZXI6OmVzdGltYXRlVGV4dEJvdW5kcyBhYm92ZS4KKyAgICBjb25z
dCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCk7CisgICAg
cmV0dXJuIEludFJlY3QobGVmdCAtIChmb250TWV0cmljcy5hc2NlbnQoKSArIGZvbnRNZXRyaWNz
LmRlc2NlbnQoKSkgLyAyLAorICAgICAgICAgICAgICAgICAgIG1fcG9pbnQueSgpIC0gZm9udE1l
dHJpY3MuYXNjZW50KCkgLSBmb250TWV0cmljcy5saW5lR2FwKCksCisgICAgICAgICAgICAgICAg
ICAgKHJpZ2h0IC0gbGVmdCkgKyBmb250TWV0cmljcy5hc2NlbnQoKSArIGZvbnRNZXRyaWNzLmRl
c2NlbnQoKSwKKyAgICAgICAgICAgICAgICAgICBmb250TWV0cmljcy5saW5lU3BhY2luZygpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UKKyNlbmRpZgorCiBib29sIEZvbnQ6OmNhblJldHVybkZhbGxi
YWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTUsNiAr
Mzc4LDcgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5DbwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShTS0lBX1RFWFQpCiB2b2lkIEZvbnQ6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLApAQCAtMTE0LDYgKzQzOCwxMDggQEAgdm9p
ZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZwogICAgICAgICBwYWludFNraWFU
ZXh0KGdyYXBoaWNzQ29udGV4dCwgaGZvbnQsIGN1ckxlbiwgJmdseXBoc1swXSwgJmFkdmFuY2Vz
WzBdLCAwLCAmb3JpZ2luKTsKICAgICB9CiB9CisjZWxzZQorc3RhdGljIHZvaWQgZHJhd0dseXBo
c1dpbihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlw
aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSB7
CisvLyAgICBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29m
dHdhcmVEcmF3KCk7CisKKyAgICBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlciBwYWludGVy
KGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9p
bnQpOworCisgICAgLy8gV2UgZHJhdyB0aGUgZ2x5cGhzIGluIGNodW5rcyB0byBhdm9pZCBoYXZp
bmcgdG8gZG8gYSBoZWFwIGFsbG9jYXRpb24gZm9yCisgICAgLy8gdGhlIGFycmF5cyBvZiBjaGFy
YWN0ZXJzIGFuZCBhZHZhbmNlcy4gU2luY2UgRXh0VGV4dE91dCBpcyB0aGUKKyAgICAvLyBsb3dl
c3QtbGV2ZWwgdGV4dCBvdXRwdXQgZnVuY3Rpb24gb24gV2luZG93cywgdGhlcmUgc2hvdWxkIGJl
IGxpdHRsZQorICAgIC8vIHBlbmFsdHkgZm9yIHNwbGl0dGluZyB1cCB0aGUgdGV4dC4gT24gdGhl
IG90aGVyIGhhbmQsIHRoZSBidWZmZXIgY2Fubm90CisgICAgLy8gYmUgYmlnZ2VyIHRoYW4gNDA5
NCBvciB0aGUgZnVuY3Rpb24gd2lsbCBmYWlsLgorICAgIGNvbnN0IGludCBrTWF4QnVmZmVyTGVu
Z3RoID0gMjU2OworICAgIFZlY3RvcjxXT1JELCBrTWF4QnVmZmVyTGVuZ3RoPiBnbHlwaHM7Cisg
ICAgVmVjdG9yPGludCwga01heEJ1ZmZlckxlbmd0aD4gYWR2YW5jZXM7CisgICAgaW50IGdseXBo
SW5kZXggPSAwOyAvLyBUaGUgc3RhcnRpbmcgZ2x5cGggb2YgdGhlIGN1cnJlbnQgY2h1bmsuCisK
KyAgICAvLyBJbiBvcmRlciB0byByb3VuZCBhbGwgb2Zmc2V0cyB0byB0aGUgY29ycmVjdCBwaXhl
bCBib3VuZGFyeSwgdGhpcyBjb2RlIGtlZXBzIHRyYWNrIG9mIHRoZSBhYnNvbHV0ZSBwb3NpdGlv
bgorICAgIC8vIG9mIGVhY2ggZ2x5cGggaW4gZmxvYXRpbmcgcG9pbnQgdW5pdHMgYW5kIHJvdW5k
cyB0byBpbnRlZ2VyIGFkdmFuY2VzIGF0IHRoZSBsYXN0IHBvc3NpYmxlIG1vbWVudC4KKworICAg
IGZsb2F0IGhvcml6b250YWxPZmZzZXQgPSBwb2ludC54KCk7IC8vIFRoZSBmbG9hdGluZyBwb2lu
dCBvZmZzZXQgb2YgdGhlIGxlZnQgc2lkZSBvZiB0aGUgY3VycmVudCBnbHlwaC4KKyAgICBpbnQg
bGFzdEhvcml6b250YWxPZmZzZXRSb3VuZGVkID0gbHJvdW5kZihob3Jpem9udGFsT2Zmc2V0KTsg
Ly8gVGhlIHJvdW5kZWQgb2Zmc2V0IG9mIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGxhc3QgZ2x5cGgg
cmVuZGVyZWQuCisgICAgd2hpbGUgKGdseXBoSW5kZXggPCBudW1HbHlwaHMpIHsKKyAgICAgICAg
Ly8gSG93IG1hbnkgY2hhcnMgd2lsbCBiZSBpbiB0aGlzIGNodW5rPworICAgICAgICBpbnQgY3Vy
TGVuID0gc3RkOjptaW4oa01heEJ1ZmZlckxlbmd0aCwgbnVtR2x5cGhzIC0gZ2x5cGhJbmRleCk7
CisgICAgICAgIGdseXBocy5yZXNpemUoY3VyTGVuKTsKKyAgICAgICAgYWR2YW5jZXMucmVzaXpl
KGN1ckxlbik7CisKKyAgICAgICAgZmxvYXQgY3VycmVudFdpZHRoID0gMDsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjdXJMZW47ICsraSwgKytnbHlwaEluZGV4KSB7CisgICAgICAgICAg
ICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGZyb20gKyBnbHlwaEluZGV4KTsKKyAg
ICAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20g
KyBnbHlwaEluZGV4KTsKKyAgICAgICAgICAgIGFkdmFuY2VzW2ldID0gbHJvdW5kZihob3Jpem9u
dGFsT2Zmc2V0KSAtIGxhc3RIb3Jpem9udGFsT2Zmc2V0Um91bmRlZDsKKyAgICAgICAgICAgIGxh
c3RIb3Jpem9udGFsT2Zmc2V0Um91bmRlZCArPSBhZHZhbmNlc1tpXTsKKyAgICAgICAgICAgIGN1
cnJlbnRXaWR0aCArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGdseXBoSW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBCdWcgMjYwODggLSB2ZXJ5IGxhcmdlIHBvc2l0
aXZlIG9yIG5lZ2F0aXZlIHJ1bnMgY2FuIGZhaWwgdG8KKyAgICAgICAgICAgIC8vIHJlbmRlciBz
byB3ZSBjbGFtcCB0aGUgc2l6ZSBoZXJlLiBJbiB0aGUgc3BlY3MsIG5lZ2F0aXZlCisgICAgICAg
ICAgICAvLyBsZXR0ZXItc3BhY2luZyBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLCBzbyB0aGlz
IHNob3VsZCBiZQorICAgICAgICAgICAgLy8gZmluZSwgYW5kIGl0IG1hdGNoZXMgU2FmYXJpJ3Mg
aW1wbGVtZW50YXRpb24uIFRoZSBjYWxsIGFjdHVhbGx5CisgICAgICAgICAgICAvLyBzZWVtcyB0
byBjcmFzaCBpZiBrTWF4TmVnYXRpdmVSdW4gaXMgc2V0IHRvIHNvbWV3aGVyZSBhcm91bmQKKyAg
ICAgICAgICAgIC8vIC0zMjgzMCwgc28gd2UgZ2l2ZSBvdXJzZWx2ZXMgYSBsaXR0bGUgYnJlYXRo
aW5nIHJvb20uCisgICAgICAgICAgICBjb25zdCBpbnQgbWF4TmVnYXRpdmVSdW4gPSAtMzI3Njg7
CisgICAgICAgICAgICBjb25zdCBpbnQgbWF4UG9zaXRpdmVSdW4gPSAgMzI3Njg7CisgICAgICAg
ICAgICBpZiAoKGN1cnJlbnRXaWR0aCArIGFkdmFuY2VzW2ldIDwgbWF4TmVnYXRpdmVSdW4pIHx8
IChjdXJyZW50V2lkdGggKyBhZHZhbmNlc1tpXSA+IG1heFBvc2l0aXZlUnVuKSkgCisgICAgICAg
ICAgICAgICAgYWR2YW5jZXNbaV0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWN0dWFs
bHkgZHJhdyB0aGUgZ2x5cGhzICh3aXRoIHJldHJ5IG9uIGZhaWx1cmUpLgorICAgICAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgZXhlY3V0aW9ucyA9IDA7IGV4ZWN1
dGlvbnMgPCAyOyArK2V4ZWN1dGlvbnMpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBwYWludGVy
LmRyYXdHbHlwaHMoY3VyTGVuLCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sIGhvcml6b250YWxP
ZmZzZXQgLSBwb2ludC54KCkgLSBjdXJyZW50V2lkdGgpOworICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzICYmICFleGVjdXRpb25zKSB7CisgICAgICAgICAgICAgICAgLy8gQXNrIHRoZSBicm93c2Vy
IHRvIGxvYWQgdGhlIGZvbnQgZm9yIHVzIGFuZCByZXRyeS4KKyAgICAgICAgICAgICAgICBQbGF0
Zm9ybVN1cHBvcnQ6OmVuc3VyZUZvbnRMb2FkZWQoZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQo
KSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGRyYXcgdGhlIGdseXBocyBhZnRlciBzZWNvbmQgYXR0ZW1w
dCIpOworICAgIH0KK30KKwordm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKKyAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbnVtR2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIFNrQ29sb3IgY29sb3IgPSBncmFwaGljc0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5lZmZlY3RpdmVGaWxsQ29sb3IoKTsKKyAgICB1bnNpZ25l
ZCBjaGFyIGFscGhhID0gU2tDb2xvckdldEEoY29sb3IpOworICAgIC8vIFNraXAgMTAwJSB0cmFu
c3BhcmVudCB0ZXh0OyBubyBuZWVkIHRvIGRyYXcgYW55dGhpbmcuCisgICAgaWYgKCFhbHBoYSAm
JiBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VTdHlsZSgpID09
IE5vU3Ryb2tlICYmICFncmFwaGljc0NvbnRleHQtPmhhc1NoYWRvdygpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFhbHBoYSB8fCB3aW5kb3dzQ2FuSGFuZGxlRHJhd1RleHRTaGFkb3coZ3Jh
cGhpY3NDb250ZXh0KSB8fCAhd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91dFNoYWRv
dyhncmFwaGljc0NvbnRleHQpKSB7CisgICAgICAgIGRyYXdHbHlwaHNXaW4oZ3JhcGhpY3NDb250
ZXh0LCBmb250LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgLy8gRHJhdyBpbiB0d28gcGFzc2VzOiBza2lhIGZvciB0aGUg
c2hhZG93LCBHREkgZm9yIGZvcmVncm91bmQgdGV4dAorICAgIC8vIHBhc3MxOiBzaGFkb3cgKHdp
bGwgdXNlIHNraWEpCisgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50LCBncmFwaGljc0NvbnRleHQt
PmZpbGxDb2xvclNwYWNlKCkpOworICAgIGRyYXdHbHlwaHNXaW4oZ3JhcGhpY3NDb250ZXh0LCBm
b250LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT5yZXN0b3JlKCk7CisgICAgLy8gcGFzczI6IGZvcmVncm91bmQgdGV4dCAod2lsbCB1
c2UgR0RJKQorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1
cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3Bh
Y2U7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dC
bHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7CisgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBDb2xvcjo6dHJhbnNwYXJlbnQs
IHNoYWRvd0NvbG9yU3BhY2UpOworICAgIGRyYXdHbHlwaHNXaW4oZ3JhcGhpY3NDb250ZXh0LCBm
b250LCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwg
c2hhZG93Q29sb3JTcGFjZSk7Cit9CisjZW5kaWYKIAogRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LApAQCAt
MTQ5LDkgKzU3NSw0MCBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
CiAgICAgaWYgKCFhbHBoYSAmJiBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5n
ZXRTdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFC
TEUoU0tJQV9URVhUKQorICAgIEhEQyBoZGMgPSAwOworI2Vsc2UKKyAgICBUcmFuc3BhcmVuY3lB
d2FyZVVuaXNjcmliZVBhaW50ZXIgcGFpbnRlcihncmFwaGljc0NvbnRleHQsIHRoaXMsIHJ1biwg
ZnJvbSwgdG8sIHBvaW50KTsKKworICAgIEhEQyBoZGMgPSBwYWludGVyLmhkYygpOworICAgIGlm
ICh3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcoZ3JhcGhpY3NDb250ZXh0KSAmJiAhaGRjKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RPKG1hcnVlbCk6IGh0dHA6Ly9iLzcwMDQ2NCBT
ZXRUZXh0Q29sb3IgZG9lc24ndCBzdXBwb3J0IHRyYW5zcGFyZW5jeS4KKyAgICAvLyBFbmZvcmNl
IG5vbi10cmFuc3BhcmVudCBjb2xvci4KKyAgICBjb2xvciA9IFNrQ29sb3JTZXRSR0IoU2tDb2xv
ckdldFIoY29sb3IpLCBTa0NvbG9yR2V0Ryhjb2xvciksIFNrQ29sb3JHZXRCKGNvbG9yKSk7Cisg
ICAgaWYgKGhkYykgeworICAgICAgICBTZXRUZXh0Q29sb3IoaGRjLCBza2lhOjpTa0NvbG9yVG9D
T0xPUlJFRihjb2xvcikpOworICAgICAgICBTZXRCa01vZGUoaGRjLCBUUkFOU1BBUkVOVCk7Cisg
ICAgfQorCisgICAgLy8gSWYgdGhlcmUgaXMgYSBub24tYmx1ciBzaGFkb3cgYW5kIGJvdGggdGhl
IGZpbGwgY29sb3IgYW5kIHNoYWRvdyBjb2xvciAKKyAgICAvLyBhcmUgb3BhcXVlLCBoYW5kbGUg
d2l0aG91dCBza2lhLiAKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNo
YWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgQ29sb3JTcGFjZSBzaGFkb3dD
b2xvclNwYWNlOworICAgIGlmIChncmFwaGljc0NvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKSAmJiB3aW5kb3dz
Q2FuSGFuZGxlRHJhd1RleHRTaGFkb3coZ3JhcGhpY3NDb250ZXh0KSkgeworICAgICAgICBDT0xP
UlJFRiB0ZXh0Q29sb3IgPSBza2lhOjpTa0NvbG9yVG9DT0xPUlJFRihTa0NvbG9yU2V0QVJHQigy
NTUsIHNoYWRvd0NvbG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5i
bHVlKCkpKTsKKyAgICAgICAgQ09MT1JSRUYgc2F2ZWRUZXh0Q29sb3IgPSBHZXRUZXh0Q29sb3Io
aGRjKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKGhkYywgdGV4dENvbG9yKTsKKyAgICAgICAgc3Rh
dGUuZHJhdyhncmFwaGljc0NvbnRleHQsIGhkYywgc3RhdGljX2Nhc3Q8aW50Pihwb2ludC54KCkp
ICsgc2hhZG93T2Zmc2V0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50Pihwb2ludC55KCkgLSBmb250TWV0cmljcygpLmFzY2VudCgpKSArIHNoYWRvd09mZnNldC5o
ZWlnaHQoKSwgZnJvbSwgdG8pOworICAgICAgICBTZXRUZXh0Q29sb3IoaGRjLCBzYXZlZFRleHRD
b2xvcik7IAorICAgIH0KKyNlbmRpZgogICAgIC8vIFVuaXNjcmliZSBjb3VudHMgdGhlIGNvb3Jk
aW5hdGVzIGZyb20gdGhlIHVwcGVyIGxlZnQsIHdoaWxlIFdlYktpdCB1c2VzCiAgICAgLy8gdGhl
IGJhc2VsaW5lLCBzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0IG9mZiB0aGUgYXNjZW50LgotICAgIEhE
QyBoZGMgPSAwOwogICAgIHN0YXRlLmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBoZGMsIGxyb3VuZGYo
cG9pbnQueCgpKSwgbHJvdW5kZihwb2ludC55KCkgLSBmb250TWV0cmljcygpLmFzY2VudCgpKSwg
ZnJvbSwgdG8pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAJKHJldmlzaW9u
IDk2OTM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5p
c2NyaWJlSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDYgKzMwOSw5IEBAIHZvaWQg
VW5pc2NyaWJlSGVscGVyOjpkcmF3KEdyYXBoaWNzQ29udGUKICAgICBIR0RJT0JKIG9sZEZvbnQg
PSAwOwogICAgIGludCBjdXJYID0geDsKICAgICBib29sIGZpcnN0UnVuID0gdHJ1ZTsKKyNpZiAh
RU5BQkxFKFNLSUFfVEVYVCkKKyAgICBib29sIHVzZVdpbmRvd3NEcmF3aW5nID0gd2luZG93c0Nh
bkhhbmRsZVRleHREcmF3aW5nKGdyYXBoaWNzQ29udGV4dCk7CisjZW5kaWYKIAogICAgIGZvciAo
c2l6ZV90IHNjcmVlbkluZGV4ID0gMDsgc2NyZWVuSW5kZXggPCBtX3J1bnMuc2l6ZSgpOyBzY3Jl
ZW5JbmRleCsrKSB7CiAgICAgICAgIGludCBpdGVtSW5kZXggPSBtX3NjcmVlbk9yZGVyW3NjcmVl
bkluZGV4XTsKQEAgLTM4NywxNCArMzkwLDI2IEBAIHZvaWQgVW5pc2NyaWJlSGVscGVyOjpkcmF3
KEdyYXBoaWNzQ29udGUKICAgICAgICAgICAgIC8vIFBhc3MgMCBpbiB3aGVuIHRoZXJlIGlzIG5v
IGp1c3RpZmljYXRpb24uCiAgICAgICAgICAgICBjb25zdCBpbnQqIGp1c3RpZnkgPSBzaGFwaW5n
Lm1fanVzdGlmeS5zaXplKCkgPT0gMCA/IDAgOiAmc2hhcGluZy5tX2p1c3RpZnlbZnJvbUdseXBo
XTsKIAorI2lmIEVOQUJMRShTS0lBX1RFWFQpCiAgICAgICAgICAgICBjb25zdCBpbnQqIGFkdmFu
Y2VzID0gc2hhcGluZy5tX2p1c3RpZnkuc2l6ZSgpID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnNoYXBpbmcubV9qdXN0aWZ5W2Zyb21HbHlwaF0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogJnNoYXBpbmcubV9hZHZhbmNlW2Zyb21HbHlwaF07
CisjZWxzZQorICAgICAgICAgICAgaWYgKHVzZVdpbmRvd3NEcmF3aW5nKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0UnVuKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZEZvbnQgPSBTZWxl
Y3RPYmplY3QoZGMsIHNoYXBpbmcubV9oZm9udCk7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0
UnVuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IFNlbGVjdE9iamVjdChkYywgc2hhcGluZy5tX2hmb250KTsKKyAgICAgICAgICAgIH0KKworI2Vu
ZGlmCiAgICAgICAgICAgICAvLyBGb250cyB3aXRoIGRpZmZlcmVudCBhc2NlbnRzIGNhbiBiZSB1
c2VkIHRvIHJlbmRlciBkaWZmZXJlbnQKICAgICAgICAgICAgIC8vIHJ1bnMuICAnQWNyb3NzLXJ1
bnMnIHktY29vcmRpbmF0ZSBjb3JyZWN0aW9uIG5lZWRzIHRvIGJlCiAgICAgICAgICAgICAvLyBh
ZGp1c3RlZCBmb3IgZWFjaCBmb250LgogICAgICAgICAgICAgYm9vbCB0ZXh0T3V0T2sgPSBmYWxz
ZTsKICAgICAgICAgICAgIGZvciAoaW50IGV4ZWN1dGlvbnMgPSAwOyBleGVjdXRpb25zIDwgMjsg
KytleGVjdXRpb25zKSB7CisjaWYgRU5BQkxFKFNLSUFfVEVYVCkKICAgICAgICAgICAgICAgICBT
a1BvaW50IG9yaWdpbjsKICAgICAgICAgICAgICAgICBvcmlnaW4uZlggPSBjdXJYICsgKyBpbm5l
ck9mZnNldDsKICAgICAgICAgICAgICAgICBvcmlnaW4uZlkgPSB5ICsgbV9hc2NlbnQ7CkBAIC00
MDYsNiArNDIxLDMyIEBAIHZvaWQgVW5pc2NyaWJlSGVscGVyOjpkcmF3KEdyYXBoaWNzQ29udGUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fb2Zmc2V0c1tmcm9tR2x5
cGhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9yaWdpbik7CiAgICAgICAgICAg
ICAgICAgdGV4dE91dE9rID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgICAgICAgICAgaWYgKHVzZVdp
bmRvd3NEcmF3aW5nKSB7CisgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBTY3JpcHRU
ZXh0T3V0KGRjLCBzaGFwaW5nLm1fc2NyaXB0Q2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1clggKyBpbm5lck9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtIHNoYXBpbmcubV9hc2NlbnRP
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsICZpdGVtLmEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZzaGFwaW5nLm1fZ2x5cGhzW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQ291bnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fYWR2YW5jZVtmcm9t
R2x5cGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dXN0aWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
c2hhcGluZy5tX29mZnNldHNbZnJvbUdseXBoXSk7CisgICAgICAgICAgICAgICAgICAgIHRleHRP
dXRPayA9IChociA9PSBTX09LKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBTa1BvaW50IG9yaWdpbjsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luLmZY
ID0gY3VyWCArICsgaW5uZXJPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbi5mWSA9
IHkgKyBtX2FzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgcGFpbnRTa2lhVGV4dChncmFwaGlj
c0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGluZy5tX2hm
b250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQ291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9nbHlwaHNbZnJvbUdseXBo
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2FkdmFuY2Vb
ZnJvbUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5t
X29mZnNldHNbZnJvbUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
b3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dE91dE9rID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICAgICAgICAgIGlmICghdGV4dE91dE9rICYmIDAg
PT0gZXhlY3V0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiBUZXh0T3V0IGlzIGNh
bGxlZCBmcm9tIHRoZSByZW5kZXJlciBpdCBtaWdodCBmYWlsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDk2OTM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTc5LDYgKzU3OSwxNyBAQCBjb25zdCBTa0JpdG1hcCogUGxhdGZvcm1Db250ZXh0U2tpYTo6Yml0
CiAgICAgcmV0dXJuICZtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7
CiB9CiAKK2Jvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6aXNOYXRpdmVGb250UmVuZGVyaW5nQWxs
b3dlZCgpCit7CisjaWYgRU5BQkxFKFNLSUFfVEVYVCkKKyAgICByZXR1cm4gZmFsc2U7CisjZWxz
ZQorICAgIGlmIChpc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gc2tpYTo6U3VwcG9ydHNQbGF0Zm9ybVBhaW50KG1fY2FudmFzKTsKKyNlbmRpZgorfQor
CiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmdldEltYWdlUmVzYW1wbGluZ0hpbnQoSW50U2l6
ZSogc3JjU2l6ZSwgRmxvYXRTaXplKiBkc3RTaXplKSBjb25zdAogewogICAgICpzcmNTaXplID0g
bV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5o
CShyZXZpc2lvbiA5NjkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw5IEBA
CiAjaWZuZGVmIFBsYXRmb3JtQ29udGV4dFNraWFfaAogI2RlZmluZSBQbGF0Zm9ybUNvbnRleHRT
a2lhX2gKIAorLy8gaGFjayB0byBkZWZpbmUgRU5BQkxFX1NLSUFfVEVYVAorI2luY2x1ZGUgIlNr
aWFGb250V2luLmgiCisKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJO
b25jb3B5YWJsZS5oIgogCkBAIC0xNjcsNiArMTcwLDEyIEBAIHB1YmxpYzoKICAgICBib29sIHBy
aW50aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmludGluZzsgfQogICAgIHZvaWQgc2V0UHJpbnRp
bmcoYm9vbCBwKSB7IG1fcHJpbnRpbmcgPSBwOyB9CiAKKyAgICAvLyBSZXR1cm5zIGlmIHRoZSBj
b250ZXh0IGFsbG93cyByZW5kZXJpbmcgb2YgZm9udHMgdXNpbmcgbmF0aXZlIHBsYXRmb3JtCisg
ICAgLy8gQVBJcy4gSWYgZmFsc2UgaXMgcmV0dXJuZWQgZm9udCByZW5kZXJpbmcgaXMgcGVyZm9y
bWVkIHVzaW5nIHRoZSBza2lhCisgICAgLy8gdGV4dCBkcmF3aW5nIEFQSXMuCisgICAgLy8gaWYg
U0tJQV9URVhUIGlzIGVuYWJsZWQsIHRoaXMgYWx3YXlzIHJldHVybnMgZmFsc2UKKyAgICBib29s
IGlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKTsKKwogICAgIHZvaWQgZ2V0SW1hZ2VSZXNh
bXBsaW5nSGludChJbnRTaXplKiBzcmNTaXplLCBGbG9hdFNpemUqIGRzdFNpemUpIGNvbnN0Owog
ICAgIHZvaWQgc2V0SW1hZ2VSZXNhbXBsaW5nSGludChjb25zdCBJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBGbG9hdFNpemUmIGRzdFNpemUpOwogICAgIHZvaWQgY2xlYXJJbWFnZVJlc2FtcGxpbmdI
aW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFG
b250V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1NraWFGb250V2luLmNwcAkocmV2aXNpb24gOTY5MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNjAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIUVOQUJMRShT
S0lBX1RFWFQpCitib29sIHdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhHcmFwaGljc0Nv
bnRleHQgKmNvbnRleHQpCit7CisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBmbG9h
dCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIENvbG9yU3BhY2Ugc2hh
ZG93Q29sb3JTcGFjZTsKKworICAgIGJvb2wgaGFzU2hhZG93ID0gY29udGV4dC0+Z2V0U2hhZG93
KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2Up
OworICAgIHJldHVybiAhaGFzU2hhZG93IHx8ICghc2hhZG93Qmx1ciAmJiAoc2hhZG93Q29sb3Iu
YWxwaGEoKSA9PSAyNTUpICYmIChjb250ZXh0LT5maWxsQ29sb3IoKS5hbHBoYSgpID09IDI1NSkp
OworfQorCitib29sIHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQpCit7CisgICAgaWYgKCF3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0
U2hhZG93KGNvbnRleHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBm
b3Igc2hhZG93IGVmZmVjdHMuCisgICAgaWYgKCF3aW5kb3dzQ2FuSGFuZGxlRHJhd1RleHRTaGFk
b3coY29udGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZ1dpdGhvdXRTaGFkb3coR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIC8vIENoZWNrIGZvciBub24tdHJhbnNsYXRpb24g
dHJhbnNmb3Jtcy4gU29tZXRpbWVzIHpvb21zIHdpbGwgbG9vayBiZXR0ZXIgaW4KKyAgICAvLyBT
a2lhLCBhbmQgc29tZXRpbWVzIGJldHRlciBpbiBXaW5kb3dzLiBUaGUgbWFpbiBwcm9ibGVtIGlz
IHRoYXQgem9vbWluZworICAgIC8vIGluIHVzaW5nIFNraWEgd2lsbCBzaG93IHlvdSB0aGUgaGlu
dGVkIG91dGxpbmVzIGZvciB0aGUgc21hbGxlciBzaXplLAorICAgIC8vIHdoaWNoIGxvb2sgd2Vp
cmQuIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCBpdCdzIGJldHRlciB0byB1c2UgV2luZG93cycgdGV4
dAorICAgIC8vIGRyYXdpbmcsIHNvIHdlIGRvbid0IGNoZWNrIGZvciB6b29tcy4KKyAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCA9IGNvbnRleHQtPmdldENUTSgpOworICAgIGlmICht
YXRyaXguYigpIHx8IG1hdHJpeC5jKCkpIC8vIENoZWNrIGZvciBza2V3LgorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3Igc3Ryb2tlIGVmZmVjdHMuCisgICAgaWYgKGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKSAhPSBUZXh0TW9k
ZUZpbGwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIGZvciBncmFkaWVu
dHMuCisgICAgaWYgKGNvbnRleHQtPmZpbGxHcmFkaWVudCgpIHx8IGNvbnRleHQtPnN0cm9rZUdy
YWRpZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIGZvciBwYXR0
ZXJucy4KKyAgICBpZiAoY29udGV4dC0+ZmlsbFBhdHRlcm4oKSB8fCBjb250ZXh0LT5zdHJva2VQ
YXR0ZXJuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogc3RhdGljIHZv
aWQgc2tpYURyYXdUZXh0KFNrQ2FudmFzKiBjYW52YXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2tQb2ludCYgcG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2tQYWlu
dCogcGFpbnQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFGb250V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9Ta2lhRm9udFdpbi5oCShyZXZpc2lvbiA5NjkzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTQgKzMxLDQ1IEBACiAjaWZuZGVmIFNraWFGb250V2luX2gKICNkZWZpbmUgU2tpYUZvbnRX
aW5faAogCisvLyAjZGVmaW5lIEVOQUJMRV9TS0lBX1RFWFQgMQorCiAjaW5jbHVkZSA8d2luZG93
cy5oPgogI2luY2x1ZGUgPHVzcDEwLmg+CiAKLWNsYXNzIFNrUG9pbnQ7CitzdHJ1Y3QgU2tQb2lu
dDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFz
cyBQbGF0Zm9ybUNvbnRleHRTa2lhOworCisjaWYgIUVOQUJMRShTS0lBX1RFWFQpCisvLyBUaGUg
ZnVuY3Rpb25zIGJlbG93IGFyZSB1c2VkIGZvciBtb3JlIGNvbXBsZXggZm9udCBkcmF3aW5nIChl
ZmZlY3RzIHN1Y2ggYXMKKy8vIHN0cm9raW5nIGFuZCBtb3JlIGNvbXBsZXggdHJhbnNmb3Jtcykg
dGhhbiBXaW5kb3dzIHN1cHBvcnRzIGRpcmVjdGx5LiBTaW5jZQorLy8gV2luZG93cyBkcmF3aW5n
IGlzIGZhc3RlciB5b3Ugc2hvdWxkIHVzZSB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcgZmly
c3QgdG8KKy8vIGNoZWNrIGlmIHVzaW5nIFNraWEgaXMgcmVxdWlyZWQgYXQgYWxsLgorLy8gTm90
ZSB0aGF0IHRoZSB0ZXh0IHdpbGwgbG9vayBkaWZmZXJlbnQgKG5vIENsZWFyVHlwZSkgc28gdGhp
cyBzaG91bGQgb25seSBiZQorLy8gdXNlZCB3aGVuIG5lY2Vzc2FyeS4KKy8vCisvLyBXaGVuIHlv
dSBjYWxsIGEgU2tpYSogdGV4dCBkcmF3aW5nIGZ1bmN0aW9uLCB2YXJpb3VzIGdseXBoIG91dGxp
bmVzIHdpbGwgYmUKKy8vIGNhY2hlZC4gQXMgYSByZXN1bHQsIHlvdSBzaG91bGQgY2FsbCBTa2lh
V2luT3V0bGluZUNhY2hlOjpyZW1vdmVQYXRoc0ZvckZvbnQKKy8vIHdoZW4gdGhlIGZvbnQgaXMg
ZGVzdHJveWVkIHNvIHRoYXQgdGhlIGNhY2hlIGRvZXMgbm90IG91dGxpdmUgdGhlIGZvbnQgKHNp
bmNlCisvLyB0aGUgSEZPTlRzIGFyZSByZWN5Y2xlZCkuCisvLworLy8gUmVtZW1iZXIgdGhhdCBT
a2lhJ3MgdGV4dCBkcmF3aW5nIG9yaWdpbiBpcyB0aGUgYmFzZWxpbmUsIGxpa2UgV2ViS2l0LCBu
b3QKKy8vIHRoZSB0b3AsIGxpa2UgV2luZG93cy4KKworLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBm
aWxsQ29sb3IgYW5kIHNoYWRvd0NvbG9yIGFyZSBvcGFxdWUgYW5kIHRoZSB0ZXh0LXNoYWRvdwor
Ly8gaXMgbm90IGJsdXJyZWQuCitib29sIHdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhH
cmFwaGljc0NvbnRleHQqKTsKKworLy8gUmV0dXJucyB0cnVlIGlmIGFkdmFuY2VkIGZvbnQgcmVu
ZGVyaW5nIGlzIHJlY29tbWVuZGVkLgorYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmco
R3JhcGhpY3NDb250ZXh0Kik7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBhZHZhbmNlZCBmb250IHJl
bmRlcmluZyBpcyByZWNvbW1lbmRlZCBpZiBzaGFkb3dzIGFyZQorLy8gZGlzcmVnYXJkZWQuCiti
b29sIHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZ1dpdGhvdXRTaGFkb3coR3JhcGhpY3NDb250
ZXh0Kik7CisjZW5kaWYKIAogLy8gTm90ZSB0aGF0IHRoZSBvZmZzZXRzIHBhcmFtZXRlciBpcyBv
cHRpb25hbC4gIElmIG5vdCBOVUxMIGl0IHJlcHJlc2VudHMgYQogLy8gcGVyIGdseXBoIG9mZnNl
dCAoc3VjaCBhcyByZXR1cm5lZCBieSBTY3JpcHRQbGFjZSBXaW5kb3dzIEFQSSBmdW5jdGlvbiku
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTY5MzUpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDExLTEwLTA3ICBNaWtlIFJlZWQgIDxyZWVkQGdvb2dsZS5jb20+CisKKyAgICAgICAg
cmUtYWRkIHN1cHBvcnQgZm9yIEdESSB0ZXh0IGJlaGluZCBhIGNvbXBpbGUgZmxhZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1MzAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6
CisKIDIwMTEtMTAtMDcgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5Njg3OS4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDk2OTM0KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3
IEBACiAgICAgICAnRU5BQkxFX1NBTkRCT1g9MScsCiAgICAgICAnRU5BQkxFX1NIQVJFRF9XT1JL
RVJTPTEnLAogICAgICAgJ0VOQUJMRV9TS0lBX0dQVT08KHVzZV9za2lhX2dwdSknLAorICAgICAg
J0VOQUJMRV9TS0lBX1RFWFQ9PChlbmFibGVfc2tpYV90ZXh0KScsCiAgICAgICAnRU5BQkxFX1NN
T09USF9TQ1JPTExJTkc9MScsCiAgICAgICAnRU5BQkxFX1NRTF9EQVRBQkFTRT0xJywKICAgICAg
ICdFTkFCTEVfU1ZHPTwoZW5hYmxlX3N2ZyknLApAQCAtMTA5LDYgKzExMCw3IEBACiAgICAgJ3Zh
cmlhYmxlcyc6IHsKICAgICAgICd1c2VfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmclJzogMSwKICAg
ICAgICd1c2VfdGhyZWFkZWRfY29tcG9zaXRpbmclJzogMCwKKyAgICAgICdlbmFibGVfc2tpYV90
ZXh0Jic6IDAsCiAgICAgICAnZW5hYmxlX3N2ZyUnOiAxLAogICAgICAgJ2VuYWJsZV90b3VjaF9l
dmVudHMlJzogMSwKICAgICAgICd1c2Vfc2tpYV9ncHUlJzogMCwKQEAgLTExOCw2ICsxMjAsNyBA
QAogICAgIH0sCiAgICAgJ3VzZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyUnOiAnPCh1c2VfYWNj
ZWxlcmF0ZWRfY29tcG9zaXRpbmcpJywKICAgICAndXNlX3RocmVhZGVkX2NvbXBvc2l0aW5nJSc6
ICc8KHVzZV90aHJlYWRlZF9jb21wb3NpdGluZyknLAorICAgICdlbmFibGVfc2tpYV90ZXh0JSc6
ICc8KGVuYWJsZV9za2lhX3RleHQpJywKICAgICAnZW5hYmxlX3N2ZyUnOiAnPChlbmFibGVfc3Zn
KScsCiAgICAgJ2VuYWJsZV90b3VjaF9ldmVudHMlJzogJzwoZW5hYmxlX3RvdWNoX2V2ZW50cykn
LAogICAgICd1c2Vfc2tpYSUnOiAnPCh1c2Vfc2tpYSknLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110191</attachid>
            <date>2011-10-07 12:14:09 -0700</date>
            <delta_ts>2011-10-07 12:17:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69530-20111007151407.patch</filename>
            <type>text/plain</type>
            <size>36369</size>
            <attacher name="Mike Reed">reed</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2OTY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMDcgIE1pa2UgUmVl
ZCAgPHJlZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRl
eHQgYmVoaW5kIGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVt
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6
OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJh
bnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFu
c3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpp
bml0aWFsaXplRm9yR0RJKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9u
dFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2Fy
ZUZvbnRQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUds
eXBoUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWlu
dGVyOjpUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlR2x5
cGhQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50
ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjplc3RpbWF0ZVRleHRCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJl
bmN5QXdhcmVHbHlwaFBhaW50ZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWlu
dGVyOjpoZGMpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVu
aXNjcmliZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjp+VHJhbnNwYXJlbmN5
QXdhcmVVbmlzY3JpYmVQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3
YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcjo6ZXN0aW1h
dGVUZXh0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHNXaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpk
cmF3Q29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Vu
aXNjcmliZUhlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXI6OmRy
YXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZv
bnRSZW5kZXJpbmdBbGxvd2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFGb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NDYW5IYW5kbGVEcmF3VGV4
dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91dFNo
YWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oOgor
CiAyMDExLTEwLTA3ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgTWFrZSBJY29uTG9hZGVyIGEgQ2FjaGVkUmVzb3VyY2VDbGllbnQgaW5zdGVhZCBvZiBhIFN1
YnJlc291cmNlTG9hZGVyQ2xpZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCShy
ZXZpc2lvbiA5Njk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwzMzMg
QEAKICNpbmNsdWRlICJTa2lhRm9udFdpbi5oIgogI2luY2x1ZGUgIlVuaXNjcmliZUhlbHBlclRl
eHRSdW4uaCIKIAorI2lmICFFTkFCTEUoU0tJQV9URVhUKQorI2luY2x1ZGUgIlRyYW5zcGFyZW5j
eVdpbi5oIgorI2luY2x1ZGUgInNraWEvZXh0L3NraWFfdXRpbHNfd2luLmgiCisjZW5kaWYKKwog
I2luY2x1ZGUgPHdpbmRvd3MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIUVOQUJM
RShTS0lBX1RFWFQpCituYW1lc3BhY2UgeworCitib29sIGNhbnZhc0hhc011bHRpcGxlTGF5ZXJz
KGNvbnN0IFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgU2tDYW52YXM6OkxheWVySXRlciBpdGVy
KGNvbnN0X2Nhc3Q8U2tDYW52YXMqPihjYW52YXMpLCBmYWxzZSk7CisgICAgaXRlci5uZXh0KCk7
IC8vIFRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgbGF5ZXIuCisgICAgcmV0dXJuICFpdGVy
LmRvbmUoKTsgLy8gVGhlcmUgaXMgPiAxIGxheWVyIGlmIHRoZSB0aGUgaXRlcmF0b3IgY2FuIHN0
aWwgYWR2YW5jZS4KK30KKworY2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlciB7Citw
dWJsaWM6CisgICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgflRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIo
KTsKKworcHJvdGVjdGVkOgorICAgIC8vIENhbGxlZCBieSBvdXIgc3ViY2xhc3MnIGNvbnN0cnVj
dG9yIHRvIGluaXRpYWxpemUgR0RJIGlmIG5lY2Vzc2FyeS4gVGhpcworICAgIC8vIGlzIGEgc2Vw
YXJhdGUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGNhbGxlZCBhZnRlciB0aGUgc3ViY2xhc3MgZmlu
aXNoZXMKKyAgICAvLyBjb25zdHJ1Y3Rpb24gKGl0IGNhbGxzIHZpcnR1YWwgZnVuY3Rpb25zKS4K
KyAgICB2b2lkIGluaXQoKTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0ZVRleHRCb3Vu
ZHMoKSA9IDA7CisKKyAgICAvLyBVc2UgdGhlIGNvbnRleHQgZnJvbSB0aGUgdHJhbnNwYXJlbmN5
IGhlbHBlciB3aGVuIGRyYXdpbmcgd2l0aCBHREkuIEl0CisgICAgLy8gbWF5IHBvaW50IHRvIGEg
dGVtcG9yYXJ5IG9uZS4KKyAgICBHcmFwaGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250ZXh0Owor
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBtX3BsYXRmb3JtQ29udGV4dDsKKworICAgIEZs
b2F0UG9pbnQgbV9wb2ludDsKKworICAgIC8vIFNldCB3aGVuIFdpbmRvd3MgY2FuIGhhbmRsZSB0
aGUgdHlwZSBvZiBkcmF3aW5nIHdlJ3JlIGRvaW5nLgorICAgIGJvb2wgbV91c2VHREk7CisKKyAg
ICAvLyBUaGVzZSBtZW1iZXJzIGFyZSB2YWxpZCBvbmx5IHdoZW4gbV91c2VHREkgaXMgc2V0Lgor
ICAgIEhEQyBtX2hkYzsKKyAgICBUcmFuc3BhcmVuY3lXaW4gbV90cmFuc3BhcmVuY3k7CisKK3By
aXZhdGU6CisgICAgLy8gQ2FsbCB3aGVuIHdlJ3JlIHVzaW5nIEdESSBtb2RlIHRvIGluaXRpYWxp
emUgdGhlIFRyYW5zcGFyZW5jeVdpbiB0byBoZWxwCisgICAgLy8gdXMgZHJhdyBHREkgdGV4dC4K
KyAgICB2b2lkIGluaXRpYWxpemVGb3JHREkoKTsKKworICAgIGJvb2wgbV9jcmVhdGVkVHJhbnNw
YXJlbmN5TGF5ZXI7IC8vIFdlIGNyZWF0ZWQgYSBsYXllciB0byBnaXZlIHRoZSBmb250IHNvbWUg
YWxwaGEuCit9OworCitUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCisgICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQorICAgICwgbV9w
bGF0Zm9ybUNvbnRleHQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCisgICAgLCBtX3BvaW50
KHBvaW50KQorICAgICwgbV91c2VHREkod2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKGNvbnRl
eHQpKQorICAgICwgbV9oZGMoMCkKKyAgICAsIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyKGZh
bHNlKQoreworfQorCit2b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXQoKQor
eworICAgIGlmIChtX3VzZUdESSkKKyAgICAgICAgaW5pdGlhbGl6ZUZvckdESSgpOworfQorCit2
b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkoKQorewor
ICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgU2tDb2xvciBjb2xvciA9IG1fcGxh
dGZvcm1Db250ZXh0LT5lZmZlY3RpdmVGaWxsQ29sb3IoKTsKKyAgICAvLyBVc2VkIG9ubHkgd2hl
biBtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllciBpcyB0cnVlLgorICAgIGZsb2F0IGxheWVyQWxw
aGEgPSAwLjBmOworICAgIGlmIChTa0NvbG9yR2V0QShjb2xvcikgIT0gMHhGRikgeworICAgICAg
ICAvLyBXaGVuIHRoZSBmb250IGhhcyBzb21lIHRyYW5zcGFyZW5jeSwgYXBwbHkgaXQgYnkgY3Jl
YXRpbmcgYSBuZXcKKyAgICAgICAgLy8gdHJhbnNwYXJlbmN5IGxheWVyIHdpdGggdGhhdCBvcGFj
aXR5IGFwcGxpZWQuIFdlJ2xsIGFjdHVhbGx5IGNyZWF0ZQorICAgICAgICAvLyBhIG5ldyB0cmFu
c3BhcmVuY3kgbGF5ZXIgYWZ0ZXIgd2UgY2FsY3VsYXRlIHRoZSBib3VuZGluZyBib3guCisgICAg
ICAgIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyID0gdHJ1ZTsKKyAgICAgICAgbGF5ZXJBbHBo
YSA9IFNrQ29sb3JHZXRBKGNvbG9yKSAvIDI1NS4wZjsKKyAgICAgICAgLy8gVGhlIGNvbG9yIHNo
b3VsZCBiZSBvcGFxdWUgbm93LgorICAgICAgICBjb2xvciA9IFNrQ29sb3JTZXRSR0IoU2tDb2xv
ckdldFIoY29sb3IpLCBTa0NvbG9yR2V0Ryhjb2xvciksIFNrQ29sb3JHZXRCKGNvbG9yKSk7Cisg
ICAgfQorCisgICAgVHJhbnNwYXJlbmN5V2luOjpMYXllck1vZGUgbGF5ZXJNb2RlOworICAgIElu
dFJlY3QgbGF5ZXJSZWN0OworICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC0+aXNEcmF3aW5nVG9J
bWFnZUJ1ZmZlcigpKSB7CisgICAgICAgIC8vIEFzc3VtZSBpZiB3ZSdyZSBkcmF3aW5nIHRvIGFu
IGltYWdlIGJ1ZmZlciB0aGF0IHRoZSBiYWNrZ3JvdW5kCisgICAgICAgIC8vIGlzIG5vdCBvcGFx
dWUgYW5kIHdlIGhhdmUgdG8gdW5kbyBDbGVhclR5cGUuIFdlIG1heSB3YW50IHRvCisgICAgICAg
IC8vIGVuaGFuY2UgdGhpcyB0byBhY3R1YWxseSBjaGVjaywgc2luY2UgaXQgd2lsbCBvZnRlbiBi
ZSBvcGFxdWUKKyAgICAgICAgLy8gYW5kIHdlIGNvdWxkIGRvIENsZWFyVHlwZSBpbiB0aGF0IGNh
c2UuCisgICAgICAgIGxheWVyTW9kZSA9IFRyYW5zcGFyZW5jeVdpbjo6VGV4dENvbXBvc2l0ZTsK
KyAgICAgICAgbGF5ZXJSZWN0ID0gZXN0aW1hdGVUZXh0Qm91bmRzKCk7CisgICAgICAgIG1fZ3Jh
cGhpY3NDb250ZXh0LT5jbGlwKGxheWVyUmVjdCk7CisgICAgICAgIGlmIChtX2NyZWF0ZWRUcmFu
c3BhcmVuY3lMYXllcikKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKGxheWVyQWxwaGEpOworCisgICAgICAgIC8vIFRoZSB0cmFuc3BhcmVuY3kg
aGVscGVyIHJlcXVpcmVzIHRoYXQgd2UgZHJhdyB0ZXh0IGluIGJsYWNrIGluCisgICAgICAgIC8v
IHRoaXMgbW9kZSBhbmQgaXQgd2lsbCBhcHBseSB0aGUgY29sb3IuCisgICAgICAgIG1fdHJhbnNw
YXJlbmN5LnNldFRleHRDb21wb3NpdGVDb2xvcihjb2xvcik7CisgICAgICAgIGNvbG9yID0gU2tD
b2xvclNldFJHQigwLCAwLCAwKTsKKyAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5j
eUxheWVyIHx8IGNhbnZhc0hhc011bHRpcGxlTGF5ZXJzKG1fcGxhdGZvcm1Db250ZXh0LT5jYW52
YXMoKSkpIHsKKyAgICAgICAgLy8gV2hlbiB3ZSdyZSBkcmF3aW5nIGEgd2ViIHBhZ2UsIHdlIGtu
b3cgdGhlIGJhY2tncm91bmQgaXMgb3BhcXVlLAorICAgICAgICAvLyBidXQgaWYgd2UncmUgZHJh
d2luZyB0byBhIGxheWVyLCB3ZSBzdGlsbCBuZWVkIGV4dHJhIHdvcmsuCisgICAgICAgIGxheWVy
TW9kZSA9IFRyYW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXI7CisgICAgICAgIGxh
eWVyUmVjdCA9IGVzdGltYXRlVGV4dEJvdW5kcygpOworICAgICAgICBtX2dyYXBoaWNzQ29udGV4
dC0+Y2xpcChsYXllclJlY3QpOworICAgICAgICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5
ZXIpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXll
cihsYXllckFscGhhKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21tb24gY2FzZSBvZiBk
cmF3aW5nIG9udG8gdGhlIGJvdHRvbSBsYXllciBvZiBhIHdlYiBwYWdlOiB3ZQorICAgICAgICAv
LyBrbm93IGV2ZXJ5dGhpbmcgaXMgb3BhcXVlIHNvIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcg
c3BlY2lhbC4KKyAgICAgICAgbGF5ZXJNb2RlID0gVHJhbnNwYXJlbmN5V2luOjpOb0xheWVyOwor
ICAgIH0KKworICAgIC8vIEJ1ZyAyNjA4OCAtIGluaXQoKSBtaWdodCBmYWlsIGlmIGxheWVyUmVj
dCBpcyBpbnZhbGlkLiBHaXZlbiB0aGlzLCB3ZQorICAgIC8vIG5lZWQgdG8gYmUgY2FyZWZ1bCB0
byBjaGVjayBmb3IgbnVsbCBwb2ludGVycyBldmVyeXdoZXJlIGFmdGVyIHRoaXMgY2FsbAorICAg
IG1fdHJhbnNwYXJlbmN5LmluaXQobV9ncmFwaGljc0NvbnRleHQsIGxheWVyTW9kZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0sIGxheWVy
UmVjdCk7CisKKyAgICAvLyBTZXQgdXAgdGhlIERDLCB1c2luZyB0aGUgb25lIGZyb20gdGhlIHRy
YW5zcGFyZW5jeSBoZWxwZXIuCisgICAgaWYgKG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4
dCgpKSB7CisgICAgICAgIG1faGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KG1fdHJhbnNw
YXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSk7CisgICAgICAgIFNldFRleHRDb2xv
cihtX2hkYywgc2tpYTo6U2tDb2xvclRvQ09MT1JSRUYoY29sb3IpKTsKKyAgICAgICAgU2V0QmtN
b2RlKG1faGRjLCBUUkFOU1BBUkVOVCk7CisgICAgfQorfQorCitUcmFuc3BhcmVuY3lBd2FyZUZv
bnRQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcigpCit7CisgICAgaWYgKCFt
X3VzZUdESSB8fCAhbV9ncmFwaGljc0NvbnRleHQgfHwgIW1fcGxhdGZvcm1Db250ZXh0KQorICAg
ICAgICByZXR1cm47CisgICAgbV90cmFuc3BhcmVuY3kuY29tcG9zaXRlKCk7CisgICAgaWYgKG1f
Y3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyKQorICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwor
ICAgIGlmIChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkKKyAgICAgICAgc2tpYTo6
RW5kUGxhdGZvcm1QYWludChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCkpOworfQorCisvLyBTcGVjaWFsaXphdGlvbiBmb3Igc2ltcGxlIEdseXBoQnVmZmVyIHBhaW50
aW5nLgorY2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIgOiBwdWJsaWMgVHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlciB7CisgcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUF3YXJl
R2x5cGhQYWludGVyKEdyYXBoaWNzQ29udGV4dCosCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgflRyYW5zcGFyZW5jeUF3YXJlR2x5
cGhQYWludGVyKCk7CisKKyAgICAvLyBEcmF3cyB0aGUgcGFydGlhbCBzdHJpbmcgb2YgZ2x5cGhz
LCBzdGFydGluZyBhdCB8c3RhcnRBZHZhbmNlfCB0byB0aGUKKyAgICAvLyBsZWZ0IG9mIG1fcG9p
bnQuIFdlIGV4cHJlc3MgaXQgdGhpcyB3YXkgc28gdGhhdCBpZiB3ZSdyZSB1c2luZyB0aGUgU2tp
YQorICAgIC8vIGRyYXdpbmcgcGF0aCB3ZSBjYW4gdXNlIGZsb2F0aW5nLXBvaW50IHBvc2l0aW9u
aW5nLCBldmVuIHRob3VnaCB3ZSBoYXZlCisgICAgLy8gdG8gdXNlIGludGVnZXIgcG9zaXRpb25p
bmcgaW4gdGhlIEdESSBwYXRoLgorICAgIGJvb2wgZHJhd0dseXBocyhpbnQgbnVtR2x5cGhzLCBj
b25zdCBXT1JEKiBnbHlwaHMsIGNvbnN0IGludCogYWR2YW5jZXMsIGZsb2F0IHN0YXJ0QWR2YW5j
ZSkgY29uc3Q7CisKKyBwcml2YXRlOgorICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0ZVRleHRC
b3VuZHMoKTsKKworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnQ7CisgICAgY29uc3Qg
R2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7CisgICAgaW50IG1fZnJvbTsKKyAgICBpbnQgbV9u
dW1HbHlwaHM7CisKKyAgICAvLyBXaGVuIG1fdXNlR2RpIGlzIHNldCwgdGhpcyBzdG9yZXMgdGhl
IHByZXZpb3VzIEhGT05UIHNlbGVjdGVkIGludG8gdGhlCisgICAgLy8gbV9oZGMgc28gd2UgY2Fu
IHJlc3RvcmUgaXQuCisgICAgSEdESU9CSiBtX29sZEZvbnQ7IC8vIEZvciByZXN0b3JpbmcgdGhl
IERDIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS4KK307CisKK1RyYW5zcGFyZW5jeUF3YXJlR2x5cGhQ
YWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcigKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAor
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcihjb250ZXh0LCBwb2ludCkKKyAgICAsIG1fZm9udChmb250KQorICAgICwgbV9nbHlw
aEJ1ZmZlcihnbHlwaEJ1ZmZlcikKKyAgICAsIG1fZnJvbShmcm9tKQorICAgICwgbV9udW1HbHlw
aHMobnVtR2x5cGhzKQorICAgICwgbV9vbGRGb250KDApCit7CisgICAgaW5pdCgpOworCisgICAg
aWYgKG1faGRjKQorICAgICAgICBtX29sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9m
b250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKK30KKworVHJhbnNwYXJlbmN5QXdhcmVHbHlw
aFBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcigpCit7CisgICAgaWYgKG1f
dXNlR0RJICYmIG1faGRjKQorICAgICAgICA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9vbGRGb250
KTsKK30KKworCisvLyBFc3RpbWF0ZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgZ2l2ZW4gdGV4
dC4gVGhpcyBpcyBjb3BpZWQgZnJvbQorLy8gRm9udENHV2luLmNwcCwgaXQgaXMgcG9zc2libGUs
IGJ1dCBhIGxvdCBtb3JlIHdvcmssIHRvIGdldCB0aGUgcHJlY2lkZQorLy8gYm91bmRzLgorSW50
UmVjdCBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1hdGVUZXh0Qm91bmRzKCkK
K3sKKyAgICBpbnQgdG90YWxXaWR0aCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251
bUdseXBoczsgaSsrKQorICAgICAgICB0b3RhbFdpZHRoICs9IGxyb3VuZGYobV9nbHlwaEJ1ZmZl
ci5hZHZhbmNlQXQobV9mcm9tICsgaSkpOworCisgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRN
ZXRyaWNzID0gbV9mb250LT5mb250TWV0cmljcygpOworICAgIHJldHVybiBJbnRSZWN0KG1fcG9p
bnQueCgpIC0gKGZvbnRNZXRyaWNzLmFzY2VudCgpICsgZm9udE1ldHJpY3MuZGVzY2VudCgpKSAv
IDIsCisgICAgICAgICAgICAgICAgICAgbV9wb2ludC55KCkgLSBmb250TWV0cmljcy5hc2NlbnQo
KSAtIGZvbnRNZXRyaWNzLmxpbmVHYXAoKSwKKyAgICAgICAgICAgICAgICAgICB0b3RhbFdpZHRo
ICsgZm9udE1ldHJpY3MuYXNjZW50KCkgKyBmb250TWV0cmljcy5kZXNjZW50KCksCisgICAgICAg
ICAgICAgICAgICAgZm9udE1ldHJpY3MubGluZVNwYWNpbmcoKSk7IAorfQorCitib29sIFRyYW5z
cGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpkcmF3R2x5cGhzKGludCBudW1HbHlwaHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGds
eXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50KiBhZHZhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgc3RhcnRBZHZhbmNlKSBjb25zdAoreworICAgIGlmICghbV91c2VHREkp
IHsKKyAgICAgICAgU2tQb2ludCBvcmlnaW4gPSBtX3BvaW50OworICAgICAgICBvcmlnaW4uZlgg
Kz0gU2tGbG9hdFRvU2NhbGFyKHN0YXJ0QWR2YW5jZSk7CisgICAgICAgIHBhaW50U2tpYVRleHQo
bV9ncmFwaGljc0NvbnRleHQsIG1fZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICBudW1HbHlwaHMsIGdseXBocywgYWR2YW5jZXMsIDAsICZvcmlnaW4p
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZ3JhcGhpY3NDb250
ZXh0IHx8ICFtX2hkYykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBXaW5kb3dzJyBv
cmlnaW4gaXMgdGhlIHRvcC1sZWZ0IG9mIHRoZSBib3VuZGluZyBib3gsIHNvIHdlIGhhdmUKKyAg
ICAvLyB0byBzdWJ0cmFjdCBvZmYgdGhlIGZvbnQgYXNjZW50IHRvIGdldCBpdC4KKyAgICBpbnQg
eCA9IGxyb3VuZGYobV9wb2ludC54KCkgKyBzdGFydEFkdmFuY2UpOworICAgIGludCB5ID0gbHJv
dW5kZihtX3BvaW50LnkoKSAtIG1fZm9udC0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CisKKyAg
ICAvLyBJZiB0aGVyZSBpcyBhIG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmlsbCBjb2xv
ciBhbmQgc2hhZG93IGNvbG9yIAorICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRob3V0IHNr
aWEuIAorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsK
KyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7
CisgICAgaWYgKG1fZ3JhcGhpY3NDb250ZXh0LT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dCbHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSkpIHsKKyAgICAgICAgLy8gSWYg
dGhlcmUgaXMgYSBzaGFkb3cgYW5kIHRoaXMgY29kZSBpcyByZWFjaGVkLCB3aW5kb3dzQ2FuSGFu
ZGxlRHJhd1RleHRTaGFkb3coKQorICAgICAgICAvLyB3aWxsIGhhdmUgYWxyZWFkeSByZXR1cm5l
ZCB0cnVlIGR1cmluZyB0aGUgY3RvciBpbml0aWF0aXphdGlvbiBvZiBtX3VzZUdESQorICAgICAg
ICBBU1NFUlQoc2hhZG93Q29sb3IuYWxwaGEoKSA9PSAyNTUpOworICAgICAgICBBU1NFUlQobV9n
cmFwaGljc0NvbnRleHQtPmZpbGxDb2xvcigpLmFscGhhKCkgPT0gMjU1KTsKKyAgICAgICAgQVNT
RVJUKCFzaGFkb3dCbHVyKTsKKyAgICAgICAgQ09MT1JSRUYgdGV4dENvbG9yID0gc2tpYTo6U2tD
b2xvclRvQ09MT1JSRUYoU2tDb2xvclNldEFSR0IoMjU1LCBzaGFkb3dDb2xvci5yZWQoKSwgc2hh
ZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpKSk7CisgICAgICAgIENPTE9SUkVG
IHNhdmVkVGV4dENvbG9yID0gR2V0VGV4dENvbG9yKG1faGRjKTsKKyAgICAgICAgU2V0VGV4dENv
bG9yKG1faGRjLCB0ZXh0Q29sb3IpOworICAgICAgICBFeHRUZXh0T3V0KG1faGRjLCB4ICsgc2hh
ZG93T2Zmc2V0LndpZHRoKCksIHkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCksIEVUT19HTFlQSF9J
TkRFWCwgMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB3Y2hhcl90Kj4oJmdseXBoc1swXSksIG51
bUdseXBocywgJmFkdmFuY2VzWzBdKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKG1faGRjLCBzYXZl
ZFRleHRDb2xvcik7CisgICAgfQorICAgIAorICAgIHJldHVybiAhIUV4dFRleHRPdXQobV9oZGMs
IHgsIHksIEVUT19HTFlQSF9JTkRFWCwgMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB3Y2hhcl90
Kj4oJmdseXBoc1swXSksIG51bUdseXBocywgJmFkdmFuY2VzWzBdKTsKK30KKworY2xhc3MgVHJh
bnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyIDogcHVibGljIFRyYW5zcGFyZW5jeUF3YXJl
Rm9udFBhaW50ZXIgeworIHB1YmxpYzoKKyAgICBUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBh
aW50ZXIoR3JhcGhpY3NDb250ZXh0KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRm9udCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRleHRSdW4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZnJvbSwgaW50IHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50Jik7CisgICAgflRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRl
cigpOworCisgICAgLy8gVW5pc2NpYmUgd2lsbCBkcmF3IGRpcmVjdGx5IGludG8gb3VyIGJ1ZmZl
ciwgc28gd2UgbmVlZCB0byBleHBvc2Ugb3VyIERDLgorICAgIEhEQyBoZGMoKSBjb25zdCB7IHJl
dHVybiBtX2hkYzsgfQorCisgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEludFJlY3QgZXN0aW1hdGVU
ZXh0Qm91bmRzKCk7CisKKyAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgVGV4dFJ1
biYgbV9ydW47CisgICAgaW50IG1fZnJvbTsKKyAgICBpbnQgbV90bzsKK307CisKK1RyYW5zcGFy
ZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWlu
dGVyKAorICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBGb250KiBmb250
LAorICAgIGNvbnN0IFRleHRSdW4mIHJ1biwKKyAgICBpbnQgZnJvbSwgaW50IHRvLAorICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cihjb250ZXh0LCBwb2ludCkKKyAgICAsIG1fZm9udChmb250KQorICAgICwgbV9ydW4ocnVuKQor
ICAgICwgbV9mcm9tKGZyb20pCisgICAgLCBtX3RvKHRvKQoreworICAgIGluaXQoKTsKK30KKwor
VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVVbmlz
Y3JpYmVQYWludGVyKCkKK3sKK30KKworSW50UmVjdCBUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmli
ZVBhaW50ZXI6OmVzdGltYXRlVGV4dEJvdW5kcygpCit7CisgICAgLy8gVGhpcyBjYXNlIHJlYWxs
eSByZWFsbHkgc3Vja3MuIFRoZXJlIGlzIG5vIGNvbnZlbmllbnQgd2F5IHRvIGVzdGltYXRlCisg
ICAgLy8gdGhlIGJvdW5kaW5nIGJveC4gU28gd2UgcnVuIFVuaXNjcmliZSB0d2ljZS4gSWYgd2Ug
ZmluZCB0aGlzIGhhcHBlbnMgYQorICAgIC8vIGxvdCwgdGhlIHdheSB0byBmaXggaXQgaXMgdG8g
bWFrZSB0aGUgZXh0cmEgbGF5ZXIgYWZ0ZXIgdGhlCisgICAgLy8gVW5pc2NyaWJlSGVscGVyIGhh
cyBtZWFzdXJlZCB0aGUgdGV4dC4KKyAgICBJbnRQb2ludCBpbnRQb2ludChscm91bmRmKG1fcG9p
bnQueCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBscm91bmRmKG1fcG9pbnQueSgpKSk7CisK
KyAgICBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuIHN0YXRlKG1fcnVuLCAqbV9mb250KTsKKyAgICBp
bnQgbGVmdCA9IGxyb3VuZGYobV9wb2ludC54KCkpICsgc3RhdGUuY2hhcmFjdGVyVG9YKG1fZnJv
bSk7CisgICAgaW50IHJpZ2h0ID0gbHJvdW5kZihtX3BvaW50LngoKSkgKyBzdGF0ZS5jaGFyYWN0
ZXJUb1gobV90byk7CisgICAgCisgICAgLy8gQWRqdXN0IGZvciBSVEwgc2NyaXB0IHNpbmNlIHdl
IGp1c3Qgd2FudCB0byBrbm93IHRoZSB0ZXh0IGJvdW5kcy4KKyAgICBpZiAobGVmdCA+IHJpZ2h0
KQorICAgICAgICBzdGQ6OnN3YXAobGVmdCwgcmlnaHQpOworCisgICAgLy8gVGhpcyBhbGdvcml0
aG0gZm9yIGVzdGltYXRpbmcgaG93IG11Y2ggZXh0cmEgc3BhY2Ugd2UgbmVlZCAodGhlIHRleHQg
bWF5CisgICAgLy8gZ28gb3V0c2lkZSB0aGUgc2VsZWN0aW9uIHJlY3QpIGlzIGJhc2VkIHJvdWdo
bHkgb24KKyAgICAvLyBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1hdGVUZXh0
Qm91bmRzIGFib3ZlLgorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IG1fZm9u
dC0+Zm9udE1ldHJpY3MoKTsKKyAgICByZXR1cm4gSW50UmVjdChsZWZ0IC0gKGZvbnRNZXRyaWNz
LmFzY2VudCgpICsgZm9udE1ldHJpY3MuZGVzY2VudCgpKSAvIDIsCisgICAgICAgICAgICAgICAg
ICAgbV9wb2ludC55KCkgLSBmb250TWV0cmljcy5hc2NlbnQoKSAtIGZvbnRNZXRyaWNzLmxpbmVH
YXAoKSwKKyAgICAgICAgICAgICAgICAgICAocmlnaHQgLSBsZWZ0KSArIGZvbnRNZXRyaWNzLmFz
Y2VudCgpICsgZm9udE1ldHJpY3MuZGVzY2VudCgpLAorICAgICAgICAgICAgICAgICAgIGZvbnRN
ZXRyaWNzLmxpbmVTcGFjaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZQorI2VuZGlmCisKIGJv
b2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC01NSw2ICszNzgsNyBAQCBib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3Vu
ZElkZW9ncmFwaHNJbkNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKFNLSUFf
VEVYVCkKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCkBA
IC0xMTQsNiArNDM4LDEwOCBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBnCiAgICAgICAgIHBhaW50U2tpYVRleHQoZ3JhcGhpY3NDb250ZXh0LCBoZm9udCwgY3VyTGVu
LCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sIDAsICZvcmlnaW4pOwogICAgIH0KIH0KKyNlbHNl
CitzdGF0aWMgdm9pZCBkcmF3R2x5cGhzV2luKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIHsKKy8vICAgIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKworICAgIFRyYW5zcGFyZW5jeUF3
YXJlR2x5cGhQYWludGVyIHBhaW50ZXIoZ3JhcGhpY3NDb250ZXh0LCBmb250LCBnbHlwaEJ1ZmZl
ciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CisKKyAgICAvLyBXZSBkcmF3IHRoZSBnbHlwaHMg
aW4gY2h1bmtzIHRvIGF2b2lkIGhhdmluZyB0byBkbyBhIGhlYXAgYWxsb2NhdGlvbiBmb3IKKyAg
ICAvLyB0aGUgYXJyYXlzIG9mIGNoYXJhY3RlcnMgYW5kIGFkdmFuY2VzLiBTaW5jZSBFeHRUZXh0
T3V0IGlzIHRoZQorICAgIC8vIGxvd2VzdC1sZXZlbCB0ZXh0IG91dHB1dCBmdW5jdGlvbiBvbiBX
aW5kb3dzLCB0aGVyZSBzaG91bGQgYmUgbGl0dGxlCisgICAgLy8gcGVuYWx0eSBmb3Igc3BsaXR0
aW5nIHVwIHRoZSB0ZXh0LiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGJ1ZmZlciBjYW5ub3QKKyAg
ICAvLyBiZSBiaWdnZXIgdGhhbiA0MDk0IG9yIHRoZSBmdW5jdGlvbiB3aWxsIGZhaWwuCisgICAg
Y29uc3QgaW50IGtNYXhCdWZmZXJMZW5ndGggPSAyNTY7CisgICAgVmVjdG9yPFdPUkQsIGtNYXhC
dWZmZXJMZW5ndGg+IGdseXBoczsKKyAgICBWZWN0b3I8aW50LCBrTWF4QnVmZmVyTGVuZ3RoPiBh
ZHZhbmNlczsKKyAgICBpbnQgZ2x5cGhJbmRleCA9IDA7IC8vIFRoZSBzdGFydGluZyBnbHlwaCBv
ZiB0aGUgY3VycmVudCBjaHVuay4KKworICAgIC8vIEluIG9yZGVyIHRvIHJvdW5kIGFsbCBvZmZz
ZXRzIHRvIHRoZSBjb3JyZWN0IHBpeGVsIGJvdW5kYXJ5LCB0aGlzIGNvZGUga2VlcHMgdHJhY2sg
b2YgdGhlIGFic29sdXRlIHBvc2l0aW9uCisgICAgLy8gb2YgZWFjaCBnbHlwaCBpbiBmbG9hdGlu
ZyBwb2ludCB1bml0cyBhbmQgcm91bmRzIHRvIGludGVnZXIgYWR2YW5jZXMgYXQgdGhlIGxhc3Qg
cG9zc2libGUgbW9tZW50LgorCisgICAgZmxvYXQgaG9yaXpvbnRhbE9mZnNldCA9IHBvaW50Lngo
KTsgLy8gVGhlIGZsb2F0aW5nIHBvaW50IG9mZnNldCBvZiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBj
dXJyZW50IGdseXBoLgorICAgIGludCBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQgPSBscm91
bmRmKGhvcml6b250YWxPZmZzZXQpOyAvLyBUaGUgcm91bmRlZCBvZmZzZXQgb2YgdGhlIGxlZnQg
c2lkZSBvZiB0aGUgbGFzdCBnbHlwaCByZW5kZXJlZC4KKyAgICB3aGlsZSAoZ2x5cGhJbmRleCA8
IG51bUdseXBocykgeworICAgICAgICAvLyBIb3cgbWFueSBjaGFycyB3aWxsIGJlIGluIHRoaXMg
Y2h1bms/CisgICAgICAgIGludCBjdXJMZW4gPSBzdGQ6Om1pbihrTWF4QnVmZmVyTGVuZ3RoLCBu
dW1HbHlwaHMgLSBnbHlwaEluZGV4KTsKKyAgICAgICAgZ2x5cGhzLnJlc2l6ZShjdXJMZW4pOwor
ICAgICAgICBhZHZhbmNlcy5yZXNpemUoY3VyTGVuKTsKKworICAgICAgICBmbG9hdCBjdXJyZW50
V2lkdGggPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN1ckxlbjsgKytpLCArK2ds
eXBoSW5kZXgpIHsKKyAgICAgICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQo
ZnJvbSArIGdseXBoSW5kZXgpOworICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSBnbHlw
aEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGdseXBoSW5kZXgpOworICAgICAgICAgICAgYWR2YW5j
ZXNbaV0gPSBscm91bmRmKGhvcml6b250YWxPZmZzZXQpIC0gbGFzdEhvcml6b250YWxPZmZzZXRS
b3VuZGVkOworICAgICAgICAgICAgbGFzdEhvcml6b250YWxPZmZzZXRSb3VuZGVkICs9IGFkdmFu
Y2VzW2ldOworICAgICAgICAgICAgY3VycmVudFdpZHRoICs9IGdseXBoQnVmZmVyLmFkdmFuY2VB
dChmcm9tICsgZ2x5cGhJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEJ1ZyAy
NjA4OCAtIHZlcnkgbGFyZ2UgcG9zaXRpdmUgb3IgbmVnYXRpdmUgcnVucyBjYW4gZmFpbCB0bwor
ICAgICAgICAgICAgLy8gcmVuZGVyIHNvIHdlIGNsYW1wIHRoZSBzaXplIGhlcmUuIEluIHRoZSBz
cGVjcywgbmVnYXRpdmUKKyAgICAgICAgICAgIC8vIGxldHRlci1zcGFjaW5nIGlzIGltcGxlbWVu
dGF0aW9uLWRlZmluZWQsIHNvIHRoaXMgc2hvdWxkIGJlCisgICAgICAgICAgICAvLyBmaW5lLCBh
bmQgaXQgbWF0Y2hlcyBTYWZhcmkncyBpbXBsZW1lbnRhdGlvbi4gVGhlIGNhbGwgYWN0dWFsbHkK
KyAgICAgICAgICAgIC8vIHNlZW1zIHRvIGNyYXNoIGlmIGtNYXhOZWdhdGl2ZVJ1biBpcyBzZXQg
dG8gc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgLy8gLTMyODMwLCBzbyB3ZSBnaXZlIG91
cnNlbHZlcyBhIGxpdHRsZSBicmVhdGhpbmcgcm9vbS4KKyAgICAgICAgICAgIGNvbnN0IGludCBt
YXhOZWdhdGl2ZVJ1biA9IC0zMjc2ODsKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhQb3NpdGl2
ZVJ1biA9ICAzMjc2ODsKKyAgICAgICAgICAgIGlmICgoY3VycmVudFdpZHRoICsgYWR2YW5jZXNb
aV0gPCBtYXhOZWdhdGl2ZVJ1bikgfHwgKGN1cnJlbnRXaWR0aCArIGFkdmFuY2VzW2ldID4gbWF4
UG9zaXRpdmVSdW4pKSAKKyAgICAgICAgICAgICAgICBhZHZhbmNlc1tpXSA9IDA7CisgICAgICAg
IH0KKworICAgICAgICAvLyBBY3R1YWxseSBkcmF3IHRoZSBnbHlwaHMgKHdpdGggcmV0cnkgb24g
ZmFpbHVyZSkuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBmb3IgKGlu
dCBleGVjdXRpb25zID0gMDsgZXhlY3V0aW9ucyA8IDI7ICsrZXhlY3V0aW9ucykgeworICAgICAg
ICAgICAgc3VjY2VzcyA9IHBhaW50ZXIuZHJhd0dseXBocyhjdXJMZW4sICZnbHlwaHNbMF0sICZh
ZHZhbmNlc1swXSwgaG9yaXpvbnRhbE9mZnNldCAtIHBvaW50LngoKSAtIGN1cnJlbnRXaWR0aCk7
CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgIWV4ZWN1dGlvbnMpIHsKKyAgICAgICAgICAg
ICAgICAvLyBBc2sgdGhlIGJyb3dzZXIgdG8gbG9hZCB0aGUgZm9udCBmb3IgdXMgYW5kIHJldHJ5
LgorICAgICAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6ZW5zdXJlRm9udExvYWRlZChmb250
LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFzdWNjZXNzKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZHJhdyB0aGUgZ2x5
cGhzIGFmdGVyIHNlY29uZCBhdHRlbXB0Iik7CisgICAgfQorfQorCit2b2lkIEZvbnQ6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMsCisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgU2tDb2xv
ciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmVmZmVjdGl2ZUZp
bGxDb2xvcigpOworICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBTa0NvbG9yR2V0QShjb2xvcik7
CisgICAgLy8gU2tpcCAxMDAlIHRyYW5zcGFyZW50IHRleHQ7IG5vIG5lZWQgdG8gZHJhdyBhbnl0
aGluZy4KKyAgICBpZiAoIWFscGhhICYmIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmdldFN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UgJiYgIWdyYXBoaWNzQ29udGV4dC0+aGFz
U2hhZG93KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWFscGhhIHx8IHdpbmRvd3NDYW5I
YW5kbGVEcmF3VGV4dFNoYWRvdyhncmFwaGljc0NvbnRleHQpIHx8ICF3aW5kb3dzQ2FuSGFuZGxl
VGV4dERyYXdpbmdXaXRob3V0U2hhZG93KGdyYXBoaWNzQ29udGV4dCkpIHsKKyAgICAgICAgZHJh
d0dseXBoc1dpbihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1H
bHlwaHMsIHBvaW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBEcmF3IGluIHR3
byBwYXNzZXM6IHNraWEgZm9yIHRoZSBzaGFkb3csIEdESSBmb3IgZm9yZWdyb3VuZCB0ZXh0Cisg
ICAgLy8gcGFzczE6IHNoYWRvdyAod2lsbCB1c2Ugc2tpYSkKKyAgICBncmFwaGljc0NvbnRleHQt
PnNhdmUoKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNw
YXJlbnQsIGdyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSk7CisgICAgZHJhd0dseXBo
c1dpbihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMs
IHBvaW50KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAvLyBwYXNzMjog
Zm9yZWdyb3VuZCB0ZXh0ICh3aWxsIHVzZSBHREkpCisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNl
dDsKKyAgICBmbG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIENv
bG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKKyAgICBncmFwaGljc0NvbnRleHQtPmdldFNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNl
KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0Js
dXIsIENvbG9yOjp0cmFuc3BhcmVudCwgc2hhZG93Q29sb3JTcGFjZSk7CisgICAgZHJhd0dseXBo
c1dpbihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMs
IHBvaW50KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKK30KKyNlbmRpZgogCiBG
bG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsCkBAIC0xNDksOSArNTc1LDQwIEBAIHZvaWQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICBpZiAoIWFscGhhICYmIGdyYXBoaWNzQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAgICAg
ICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShTS0lBX1RFWFQpCisgICAgSERDIGhkYyA9IDA7Cisj
ZWxzZQorICAgIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlciBwYWludGVyKGdyYXBo
aWNzQ29udGV4dCwgdGhpcywgcnVuLCBmcm9tLCB0bywgcG9pbnQpOworCisgICAgSERDIGhkYyA9
IHBhaW50ZXIuaGRjKCk7CisgICAgaWYgKHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhncmFw
aGljc0NvbnRleHQpICYmICFoZGMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRPRE8obWFy
dWVsKTogaHR0cDovL2IvNzAwNDY0IFNldFRleHRDb2xvciBkb2Vzbid0IHN1cHBvcnQgdHJhbnNw
YXJlbmN5LgorICAgIC8vIEVuZm9yY2Ugbm9uLXRyYW5zcGFyZW50IGNvbG9yLgorICAgIGNvbG9y
ID0gU2tDb2xvclNldFJHQihTa0NvbG9yR2V0Uihjb2xvciksIFNrQ29sb3JHZXRHKGNvbG9yKSwg
U2tDb2xvckdldEIoY29sb3IpKTsKKyAgICBpZiAoaGRjKSB7CisgICAgICAgIFNldFRleHRDb2xv
cihoZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNvbG9yKSk7CisgICAgICAgIFNldEJrTW9k
ZShoZGMsIFRSQU5TUEFSRU5UKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBpcyBhIG5vbi1i
bHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmlsbCBjb2xvciBhbmQgc2hhZG93IGNvbG9yIAorICAg
IC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRob3V0IHNraWEuIAorICAgIEZsb2F0U2l6ZSBzaGFk
b3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsK
KyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7CisgICAgaWYgKGdyYXBoaWNzQ29udGV4
dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRv
d0NvbG9yU3BhY2UpICYmIHdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhncmFwaGljc0Nv
bnRleHQpKSB7CisgICAgICAgIENPTE9SUkVGIHRleHRDb2xvciA9IHNraWE6OlNrQ29sb3JUb0NP
TE9SUkVGKFNrQ29sb3JTZXRBUkdCKDI1NSwgc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9y
LmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSkpOworICAgICAgICBDT0xPUlJFRiBzYXZlZFRl
eHRDb2xvciA9IEdldFRleHRDb2xvcihoZGMpOworICAgICAgICBTZXRUZXh0Q29sb3IoaGRjLCB0
ZXh0Q29sb3IpOworICAgICAgICBzdGF0ZS5kcmF3KGdyYXBoaWNzQ29udGV4dCwgaGRjLCBzdGF0
aWNfY2FzdDxpbnQ+KHBvaW50LngoKSkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHBvaW50LnkoKSAtIGZvbnRNZXRyaWNzKCkuYXNj
ZW50KCkpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpLCBmcm9tLCB0byk7CisgICAgICAgIFNldFRl
eHRDb2xvcihoZGMsIHNhdmVkVGV4dENvbG9yKTsgCisgICAgfQorI2VuZGlmCiAgICAgLy8gVW5p
c2NyaWJlIGNvdW50cyB0aGUgY29vcmRpbmF0ZXMgZnJvbSB0aGUgdXBwZXIgbGVmdCwgd2hpbGUg
V2ViS2l0IHVzZXMKICAgICAvLyB0aGUgYmFzZWxpbmUsIHNvIHdlIGhhdmUgdG8gc3VidHJhY3Qg
b2ZmIHRoZSBhc2NlbnQuCi0gICAgSERDIGhkYyA9IDA7CiAgICAgc3RhdGUuZHJhdyhncmFwaGlj
c0NvbnRleHQsIGhkYywgbHJvdW5kZihwb2ludC54KCkpLCBscm91bmRmKHBvaW50LnkoKSAtIGZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpLCBmcm9tLCB0byk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2Ny
aWJlSGVscGVyLmNwcAkocmV2aXNpb24gOTY5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDksNiArMzA5LDkgQEAgdm9pZCBVbmlzY3JpYmVIZWxwZXI6OmRyYXcoR3JhcGhpY3NDb250
ZQogICAgIEhHRElPQkogb2xkRm9udCA9IDA7CiAgICAgaW50IGN1clggPSB4OwogICAgIGJvb2wg
Zmlyc3RSdW4gPSB0cnVlOworI2lmICFFTkFCTEUoU0tJQV9URVhUKQorICAgIGJvb2wgdXNlV2lu
ZG93c0RyYXdpbmcgPSB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcoZ3JhcGhpY3NDb250ZXh0
KTsKKyNlbmRpZgogCiAgICAgZm9yIChzaXplX3Qgc2NyZWVuSW5kZXggPSAwOyBzY3JlZW5JbmRl
eCA8IG1fcnVucy5zaXplKCk7IHNjcmVlbkluZGV4KyspIHsKICAgICAgICAgaW50IGl0ZW1JbmRl
eCA9IG1fc2NyZWVuT3JkZXJbc2NyZWVuSW5kZXhdOwpAQCAtMzg3LDE0ICszOTAsMjYgQEAgdm9p
ZCBVbmlzY3JpYmVIZWxwZXI6OmRyYXcoR3JhcGhpY3NDb250ZQogICAgICAgICAgICAgLy8gUGFz
cyAwIGluIHdoZW4gdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbi4KICAgICAgICAgICAgIGNvbnN0
IGludCoganVzdGlmeSA9IHNoYXBpbmcubV9qdXN0aWZ5LnNpemUoKSA9PSAwID8gMCA6ICZzaGFw
aW5nLm1fanVzdGlmeVtmcm9tR2x5cGhdOwogCisjaWYgRU5BQkxFKFNLSUFfVEVYVCkKICAgICAg
ICAgICAgIGNvbnN0IGludCogYWR2YW5jZXMgPSBzaGFwaW5nLm1fanVzdGlmeS5zaXplKCkgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2p1c3RpZnlb
ZnJvbUdseXBoXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAmc2hhcGlu
Zy5tX2FkdmFuY2VbZnJvbUdseXBoXTsKKyNlbHNlCisgICAgICAgICAgICBpZiAodXNlV2luZG93
c0RyYXdpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RSdW4pIHsKKyAgICAgICAgICAg
ICAgICAgICAgb2xkRm9udCA9IFNlbGVjdE9iamVjdChkYywgc2hhcGluZy5tX2hmb250KTsKKyAg
ICAgICAgICAgICAgICAgICAgZmlyc3RSdW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBzaGFwaW5nLm1faGZvbnQp
OworICAgICAgICAgICAgfQorCisjZW5kaWYKICAgICAgICAgICAgIC8vIEZvbnRzIHdpdGggZGlm
ZmVyZW50IGFzY2VudHMgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIGRpZmZlcmVudAogICAgICAgICAg
ICAgLy8gcnVucy4gICdBY3Jvc3MtcnVucycgeS1jb29yZGluYXRlIGNvcnJlY3Rpb24gbmVlZHMg
dG8gYmUKICAgICAgICAgICAgIC8vIGFkanVzdGVkIGZvciBlYWNoIGZvbnQuCiAgICAgICAgICAg
ICBib29sIHRleHRPdXRPayA9IGZhbHNlOwogICAgICAgICAgICAgZm9yIChpbnQgZXhlY3V0aW9u
cyA9IDA7IGV4ZWN1dGlvbnMgPCAyOyArK2V4ZWN1dGlvbnMpIHsKKyNpZiBFTkFCTEUoU0tJQV9U
RVhUKQogICAgICAgICAgICAgICAgIFNrUG9pbnQgb3JpZ2luOwogICAgICAgICAgICAgICAgIG9y
aWdpbi5mWCA9IGN1clggKyArIGlubmVyT2Zmc2V0OwogICAgICAgICAgICAgICAgIG9yaWdpbi5m
WSA9IHkgKyBtX2FzY2VudDsKQEAgLTQwNiw2ICs0MjEsMzIgQEAgdm9pZCBVbmlzY3JpYmVIZWxw
ZXI6OmRyYXcoR3JhcGhpY3NDb250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNo
YXBpbmcubV9vZmZzZXRzW2Zyb21HbHlwaF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmb3JpZ2luKTsKICAgICAgICAgICAgICAgICB0ZXh0T3V0T2sgPSB0cnVlOworI2Vsc2UKKyAg
ICAgICAgICAgICAgICBpZiAodXNlV2luZG93c0RyYXdpbmcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgSFJFU1VMVCBociA9IFNjcmlwdFRleHRPdXQoZGMsIHNoYXBpbmcubV9zY3JpcHRDYWNoZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyWCArIGlu
bmVyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB5IC0gc2hhcGluZy5tX2FzY2VudE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgJml0ZW0uYSwgMCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9nbHlwaHNbZnJvbUds
eXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5
cGhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JnNoYXBpbmcubV9hZHZhbmNlW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fb2Zmc2V0c1tmcm9tR2x5cGhdKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dE91dE9rID0gKGhyID09IFNfT0spOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNrUG9pbnQgb3JpZ2luOworICAgICAg
ICAgICAgICAgICAgICBvcmlnaW4uZlggPSBjdXJYICsgKyBpbm5lck9mZnNldDsKKyAgICAgICAg
ICAgICAgICAgICAgb3JpZ2luLmZZID0geSArIG1fYXNjZW50OworICAgICAgICAgICAgICAgICAg
ICBwYWludFNraWFUZXh0KGdyYXBoaWNzQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaGFwaW5nLm1faGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2x5cGhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hh
cGluZy5tX2dseXBoc1tmcm9tR2x5cGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZzaGFwaW5nLm1fYWR2YW5jZVtmcm9tR2x5cGhdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzaGFwaW5nLm1fb2Zmc2V0c1tmcm9tR2x5cGhdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZvcmlnaW4pOworICAgICAgICAgICAgICAgICAgICB0ZXh0
T3V0T2sgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgICAgICAg
ICAgaWYgKCF0ZXh0T3V0T2sgJiYgMCA9PSBleGVjdXRpb25zKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIFRleHRPdXQgaXMgY2FsbGVkIGZyb20gdGhlIHJlbmRlcmVyIGl0IG1pZ2h0IGZh
aWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gOTY5NjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzksNiArNTc5LDE3IEBAIGNvbnN0IFNrQml0bWFwKiBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpiaXQKICAgICByZXR1cm4gJm1fY2FudmFzLT5nZXREZXZpY2Uo
KS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAorYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpp
c05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkKK3sKKyNpZiBFTkFCTEUoU0tJQV9URVhUKQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBza2lhOjpTdXBwb3J0c1BsYXRmb3JtUGFpbnQo
bV9jYW52YXMpOworI2VuZGlmCit9CisKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0SW1h
Z2VSZXNhbXBsaW5nSGludChJbnRTaXplKiBzcmNTaXplLCBGbG9hdFNpemUqIGRzdFNpemUpIGNv
bnN0CiB7CiAgICAgKnNyY1NpemUgPSBtX2ltYWdlUmVzYW1wbGluZ0hpbnRTcmNTaXplOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHJldmlzaW9uIDk2OTYxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw2ICsxNjcsMTIgQEAgcHVibGljOgogICAgIGJvb2wgcHJpbnRpbmcoKSBj
b25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgdm9pZCBzZXRQcmludGluZyhib29sIHAp
IHsgbV9wcmludGluZyA9IHA7IH0KIAorICAgIC8vIFJldHVybnMgaWYgdGhlIGNvbnRleHQgYWxs
b3dzIHJlbmRlcmluZyBvZiBmb250cyB1c2luZyBuYXRpdmUgcGxhdGZvcm0KKyAgICAvLyBBUElz
LiBJZiBmYWxzZSBpcyByZXR1cm5lZCBmb250IHJlbmRlcmluZyBpcyBwZXJmb3JtZWQgdXNpbmcg
dGhlIHNraWEKKyAgICAvLyB0ZXh0IGRyYXdpbmcgQVBJcy4KKyAgICAvLyBpZiBTS0lBX1RFWFQg
aXMgZW5hYmxlZCwgdGhpcyBhbHdheXMgcmV0dXJucyBmYWxzZQorICAgIGJvb2wgaXNOYXRpdmVG
b250UmVuZGVyaW5nQWxsb3dlZCgpOworCiAgICAgdm9pZCBnZXRJbWFnZVJlc2FtcGxpbmdIaW50
KEludFNpemUqIHNyY1NpemUsIEZsb2F0U2l6ZSogZHN0U2l6ZSkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRJbWFnZVJlc2FtcGxpbmdIaW50KGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEZsb2F0
U2l6ZSYgZHN0U2l6ZSk7CiAgICAgdm9pZCBjbGVhckltYWdlUmVzYW1wbGluZ0hpbnQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tp
YUZvbnRXaW4uY3BwCShyZXZpc2lvbiA5Njk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0
Myw2MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhRU5BQkxFKFNLSUFfVEVYVCkK
K2Jvb2wgd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KEdyYXBoaWNzQ29udGV4dCAqY29u
dGV4dCkKK3sKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0Js
dXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xvclNw
YWNlOworCisgICAgYm9vbCBoYXNTaGFkb3cgPSBjb250ZXh0LT5nZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7CisgICAgcmV0
dXJuICFoYXNTaGFkb3cgfHwgKCFzaGFkb3dCbHVyICYmIChzaGFkb3dDb2xvci5hbHBoYSgpID09
IDI1NSkgJiYgKGNvbnRleHQtPmZpbGxDb2xvcigpLmFscGhhKCkgPT0gMjU1KSk7Cit9CisKK2Jv
b2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkK
K3sKKyAgICBpZiAoIXdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZ1dpdGhvdXRTaGFkb3coY29u
dGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIGZvciBzaGFkb3cg
ZWZmZWN0cy4KKyAgICBpZiAoIXdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhjb250ZXh0
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
d2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91dFNoYWRvdyhHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQpCit7CisgICAgLy8gQ2hlY2sgZm9yIG5vbi10cmFuc2xhdGlvbiB0cmFuc2Zvcm1z
LiBTb21ldGltZXMgem9vbXMgd2lsbCBsb29rIGJldHRlciBpbgorICAgIC8vIFNraWEsIGFuZCBz
b21ldGltZXMgYmV0dGVyIGluIFdpbmRvd3MuIFRoZSBtYWluIHByb2JsZW0gaXMgdGhhdCB6b29t
aW5nCisgICAgLy8gaW4gdXNpbmcgU2tpYSB3aWxsIHNob3cgeW91IHRoZSBoaW50ZWQgb3V0bGlu
ZXMgZm9yIHRoZSBzbWFsbGVyIHNpemUsCisgICAgLy8gd2hpY2ggbG9vayB3ZWlyZC4gQWxsIGVs
c2UgYmVpbmcgZXF1YWwsIGl0J3MgYmV0dGVyIHRvIHVzZSBXaW5kb3dzJyB0ZXh0CisgICAgLy8g
ZHJhd2luZywgc28gd2UgZG9uJ3QgY2hlY2sgZm9yIHpvb21zLgorICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgbWF0cml4ID0gY29udGV4dC0+Z2V0Q1RNKCk7CisgICAgaWYgKG1hdHJpeC5iKCkg
fHwgbWF0cml4LmMoKSkgLy8gQ2hlY2sgZm9yIHNrZXcuCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIENoZWNrIGZvciBzdHJva2UgZWZmZWN0cy4KKyAgICBpZiAoY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmdldFRleHREcmF3aW5nTW9kZSgpICE9IFRleHRNb2RlRmlsbCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIGdyYWRpZW50cy4KKyAgICBp
ZiAoY29udGV4dC0+ZmlsbEdyYWRpZW50KCkgfHwgY29udGV4dC0+c3Ryb2tlR3JhZGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIHBhdHRlcm5zLgorICAg
IGlmIChjb250ZXh0LT5maWxsUGF0dGVybigpIHx8IGNvbnRleHQtPnN0cm9rZVBhdHRlcm4oKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBza2lhRHJh
d1RleHQoU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
a1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BhaW50KiBwYWludCwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFGb250V2luLmgJKHJldmlzaW9uIDk2OTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQs
NDAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8dXNwMTAuaD4KIAotY2xhc3Mg
U2tQb2ludDsKK3N0cnVjdCBTa1BvaW50OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFBsYXRmb3JtQ29udGV4dFNraWE7CisKKyNpZiAhRU5B
QkxFKFNLSUFfVEVYVCkKKy8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgZm9yIG1vcmUg
Y29tcGxleCBmb250IGRyYXdpbmcgKGVmZmVjdHMgc3VjaCBhcworLy8gc3Ryb2tpbmcgYW5kIG1v
cmUgY29tcGxleCB0cmFuc2Zvcm1zKSB0aGFuIFdpbmRvd3Mgc3VwcG9ydHMgZGlyZWN0bHkuIFNp
bmNlCisvLyBXaW5kb3dzIGRyYXdpbmcgaXMgZmFzdGVyIHlvdSBzaG91bGQgdXNlIHdpbmRvd3ND
YW5IYW5kbGVUZXh0RHJhd2luZyBmaXJzdCB0bworLy8gY2hlY2sgaWYgdXNpbmcgU2tpYSBpcyBy
ZXF1aXJlZCBhdCBhbGwuCisvLyBOb3RlIHRoYXQgdGhlIHRleHQgd2lsbCBsb29rIGRpZmZlcmVu
dCAobm8gQ2xlYXJUeXBlKSBzbyB0aGlzIHNob3VsZCBvbmx5IGJlCisvLyB1c2VkIHdoZW4gbmVj
ZXNzYXJ5LgorLy8KKy8vIFdoZW4geW91IGNhbGwgYSBTa2lhKiB0ZXh0IGRyYXdpbmcgZnVuY3Rp
b24sIHZhcmlvdXMgZ2x5cGggb3V0bGluZXMgd2lsbCBiZQorLy8gY2FjaGVkLiBBcyBhIHJlc3Vs
dCwgeW91IHNob3VsZCBjYWxsIFNraWFXaW5PdXRsaW5lQ2FjaGU6OnJlbW92ZVBhdGhzRm9yRm9u
dAorLy8gd2hlbiB0aGUgZm9udCBpcyBkZXN0cm95ZWQgc28gdGhhdCB0aGUgY2FjaGUgZG9lcyBu
b3Qgb3V0bGl2ZSB0aGUgZm9udCAoc2luY2UKKy8vIHRoZSBIRk9OVHMgYXJlIHJlY3ljbGVkKS4K
Ky8vCisvLyBSZW1lbWJlciB0aGF0IFNraWEncyB0ZXh0IGRyYXdpbmcgb3JpZ2luIGlzIHRoZSBi
YXNlbGluZSwgbGlrZSBXZWJLaXQsIG5vdAorLy8gdGhlIHRvcCwgbGlrZSBXaW5kb3dzLgorCisv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGZpbGxDb2xvciBhbmQgc2hhZG93Q29sb3IgYXJlIG9wYXF1
ZSBhbmQgdGhlIHRleHQtc2hhZG93CisvLyBpcyBub3QgYmx1cnJlZC4KK2Jvb2wgd2luZG93c0Nh
bkhhbmRsZURyYXdUZXh0U2hhZG93KEdyYXBoaWNzQ29udGV4dCopOworCisvLyBSZXR1cm5zIHRy
dWUgaWYgYWR2YW5jZWQgZm9udCByZW5kZXJpbmcgaXMgcmVjb21tZW5kZWQuCitib29sIHdpbmRv
d3NDYW5IYW5kbGVUZXh0RHJhd2luZyhHcmFwaGljc0NvbnRleHQqKTsKKworLy8gUmV0dXJucyB0
cnVlIGlmIGFkdmFuY2VkIGZvbnQgcmVuZGVyaW5nIGlzIHJlY29tbWVuZGVkIGlmIHNoYWRvd3Mg
YXJlCisvLyBkaXNyZWdhcmRlZC4KK2Jvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0
aG91dFNoYWRvdyhHcmFwaGljc0NvbnRleHQqKTsKKyNlbmRpZgogCiAvLyBOb3RlIHRoYXQgdGhl
IG9mZnNldHMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiAgSWYgbm90IE5VTEwgaXQgcmVwcmVzZW50
cyBhCiAvLyBwZXIgZ2x5cGggb2Zmc2V0IChzdWNoIGFzIHJldHVybmVkIGJ5IFNjcmlwdFBsYWNl
IFdpbmRvd3MgQVBJIGZ1bmN0aW9uKS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA5Njk2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTAtMDcgIE1pa2UgUmVlZCAgPHJlZWRA
Z29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRleHQgYmVoaW5k
IGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMS0xMC0wNyAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZpeCBjaHJvbWl1bSBjb21waWxlIHdoZW4gdXNpbmcg
dGhlIGNvbXBvbmVudHMgYnVpbGQuICBUaGlzIHRlc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vZmVhdHVyZXMuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L2ZlYXR1cmVzLmd5cGkJKHJldmlzaW9uIDk2OTYxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9mZWF0dXJlcy5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBACiAgICAgICAn
RU5BQkxFX1NBTkRCT1g9MScsCiAgICAgICAnRU5BQkxFX1NIQVJFRF9XT1JLRVJTPTEnLAogICAg
ICAgJ0VOQUJMRV9TS0lBX0dQVT08KHVzZV9za2lhX2dwdSknLAorICAgICAgJ0VOQUJMRV9TS0lB
X1RFWFQ9PChlbmFibGVfc2tpYV90ZXh0KScsCiAgICAgICAnRU5BQkxFX1NNT09USF9TQ1JPTExJ
Tkc9MScsCiAgICAgICAnRU5BQkxFX1NRTF9EQVRBQkFTRT0xJywKICAgICAgICdFTkFCTEVfU1ZH
PTwoZW5hYmxlX3N2ZyknLApAQCAtMTA5LDYgKzExMCw3IEBACiAgICAgJ3ZhcmlhYmxlcyc6IHsK
ICAgICAgICd1c2VfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmclJzogMSwKICAgICAgICd1c2VfdGhy
ZWFkZWRfY29tcG9zaXRpbmclJzogMCwKKyAgICAgICdlbmFibGVfc2tpYV90ZXh0JSc6IDAsCiAg
ICAgICAnZW5hYmxlX3N2ZyUnOiAxLAogICAgICAgJ2VuYWJsZV90b3VjaF9ldmVudHMlJzogMSwK
ICAgICAgICd1c2Vfc2tpYV9ncHUlJzogMCwKQEAgLTExOCw2ICsxMjAsNyBAQAogICAgIH0sCiAg
ICAgJ3VzZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyUnOiAnPCh1c2VfYWNjZWxlcmF0ZWRfY29t
cG9zaXRpbmcpJywKICAgICAndXNlX3RocmVhZGVkX2NvbXBvc2l0aW5nJSc6ICc8KHVzZV90aHJl
YWRlZF9jb21wb3NpdGluZyknLAorICAgICdlbmFibGVfc2tpYV90ZXh0JSc6ICc8KGVuYWJsZV9z
a2lhX3RleHQpJywKICAgICAnZW5hYmxlX3N2ZyUnOiAnPChlbmFibGVfc3ZnKScsCiAgICAgJ2Vu
YWJsZV90b3VjaF9ldmVudHMlJzogJzwoZW5hYmxlX3RvdWNoX2V2ZW50cyknLAogICAgICd1c2Vf
c2tpYSUnOiAnPCh1c2Vfc2tpYSknLApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTY5NjUpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0x
MC0wNyAgTWlrZSBSZWVkICA8cmVlZEBnb29nbGUuY29tPgorCisgICAgICAgIHJlLWFkZCBzdXBw
b3J0IGZvciBHREkgdGV4dCBiZWhpbmQgYSBjb21waWxlIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMTAtMDcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyOTYyNTcpOiBmYXN0L3JlcGFpbnQvc2VsZWN0
aW9uLWNsZWFyLmh0bWwgZmFpbApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2aXNpb24gOTY5NjEpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNjQsNiArMTM2NCwxNCBAQCBCVUdDUjEwNDMwIExJTlVYIFdJTiA6IHN2Zy9X
M0MtU1ZHLTEuMS90CiAvLyBUaGlzIHRlc3QgYWxzbyBzdGFydGVkIGZhaWxpbmcgd2l0aCB0aGUg
bWVyZ2Ugb2YgTWFyY2ggMjV0aCAyMDA5CiBCVUdDUjEwNDQxIE1BQyBXSU4gOiB0cmFuc2l0aW9u
cy90cmFuc2l0aW9uLWVuZC1ldmVudC10cmFuc2Zvcm0uaHRtbCA9IFBBU1MgVEVYVAogCisvLyBE
aXNhYmxlIHRoZXNlIHdoaWxlIHdlJ3JlIGJhY2sgdG8gdXNpbmcgR0RJIGZvciB0ZXh0IGRyYXdp
bmcuIFRoZXNlIGdpdmUgc2xpZ2h0bHkKKy8vIGRpZmZlcmVudCByZXN1bHRzIHRoYW4gd2l0aCBT
a2lhLiBXaGVuIHdlIHN3aXRjaCBiYWNrIHRvIFNraWEsIHdlIGNhbgorLy8gcmVlbmFibGUgdGhl
c2UuCitCVUdDUjk5NTAwIFdJTiA6IG1lZGlhL2F1ZGlvLXJlcGFpbnQuaHRtbCA9IElNQUdFCitC
VUdDUjk5NTAwIFdJTiA6IHN2Zy9hcy1iYWNrZ3JvdW5kLWltYWdlL2FuaW1hdGVkLXN2Zy1hcy1i
YWNrZ3JvdW5kLmh0bWwgPSBJTUFHRQorQlVHQ1I5OTUwMCBXSU4gOiBzdmcvYmF0aWsvdGV4dC90
ZXh0U3R5bGVzLnN2ZyA9IElNQUdFCitCVUdDUjk5NTAwIFdJTiA6IHN2Zy9jdXN0b20vc2ltcGxl
LXRleHQtZG91YmxlLXNoYWRvdy5zdmcgPSBJTUFHRQorCiAvLyBNZXJnZSA0MTc2ODo0MTgwNwog
Ly8gUGVyaGFwcyBqdXN0IG5lZWRzIG5ldyBiYXNlbGluZT8KIC8vIFRoZXNlIHRlc3RzIHdlcmUg
cmViYXNlbGluZWQgd2l0aCBmYWlsdXJlIGxvbmcgYWdvLiBXZSBzaG91bGRuJ3QgZG8gdGhpcywg
YW5kCkBAIC0yMDUzLDcgKzIwNjEsNiBAQCBCVUdXSzY1MjAzIFdJTiA6IHN2Zy96b29tL3RleHQv
em9vbS1oaXhpCiAKIC8vIE9uIFhQLCBzb21lIGdseXBocyBzaG93IHN1YnBpeGVsIGFudGlhbGlh
c2luZyB3aGVuIHRoZXkgc2hvdWxkbid0CiBCVUdXSzY1MjAzIFhQIDogZmFzdC90ZXh0L2ludGVy
bmF0aW9uYWwvYmlkaS1taXJyb3ItaGUtYXIuaHRtbCA9IElNQUdFCi1CVUdXSzY1MjAzIFhQIDog
c3ZnL2JhdGlrL3RleHQvdGV4dFN0eWxlcy5zdmcgPSBJTUFHRQogCiBCVUdXSzQyNDI4IExJTlVY
IFdJTiA6IHN2Zy9XM0MtU1ZHLTEuMS9maWx0ZXJzLWNvbnYtMDEtZi5zdmcgPSBJTUFHRStURVhU
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110192</attachid>
            <date>2011-10-07 12:17:45 -0700</date>
            <delta_ts>2011-10-10 13:21:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69530-20111007151743.patch</filename>
            <type>text/plain</type>
            <size>36656</size>
            <attacher name="Mike Reed">reed</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2OTY1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTEtMTAtMDcgIE1pa2UgUmVl
ZCAgPHJlZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRl
eHQgYmVoaW5kIGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJldmVydHMgYmFjayB0byB1c2luZyBHREkgZm9yIHRleHQgKHdoZW4g
cG9zc2libGUpCisgICAgICAgIGJ1dCBrZWVwcyBza2lhLXRleHQgdmVyc2lvbiBiZWhpbmQgYSBj
b21waWxlLWZsYWcuIElmL3doZW4gd2UgY2FuCisgICAgICAgIHJlc29sdmUgdGhlIG91dHN0YW5k
aW5nIHNvZnQtY2xpcCBhbmQgaW50bC1wZXJmb3JtYW5jZSBidWdzIHdpdGggdGhlCisgICAgICAg
IHNraWEgdmVyc2lvbiwgd2UgbWF5IGNoYW5nZSB0aGUgY29tcGlsZS1mbGFnIHRvIHJlZW5hYmxl
IHNraWEuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21p
dW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpU
cmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlRy
YW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6
OmluaXRpYWxpemVGb3JHREkpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVG
b250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3
YXJlRm9udFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJl
R2x5cGhQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVH
bHlwaFBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6OmVzdGltYXRlVGV4dEJvdW5kcyk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3Bh
cmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpU
cmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBh
aW50ZXI6OmhkYyk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWlu
dGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJl
VW5pc2NyaWJlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZv
bnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6On5UcmFuc3BhcmVu
Y3lBd2FyZVVuaXNjcmliZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5
QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjplc3Rp
bWF0ZVRleHRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0dseXBoc1dpbik6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VW5pc2NyaWJlSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUhlbHBlcjo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmlzTmF0aXZl
Rm9udFJlbmRlcmluZ0FsbG93ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
U2tpYUZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0NhbkhhbmRsZURyYXdU
ZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0
U2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmg6
CisKIDIwMTEtMTAtMDcgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBNYWtlIEljb25Mb2FkZXIgYSBDYWNoZWRSZXNvdXJjZUNsaWVudCBpbnN0ZWFkIG9mIGEg
U3VicmVzb3VyY2VMb2FkZXJDbGllbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJ
KHJldmlzaW9uIDk2OTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udENocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDMz
MyBAQAogI2luY2x1ZGUgIlNraWFGb250V2luLmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJlSGVscGVy
VGV4dFJ1bi5oIgogCisjaWYgIUVOQUJMRShTS0lBX1RFWFQpCisjaW5jbHVkZSAiVHJhbnNwYXJl
bmN5V2luLmgiCisjaW5jbHVkZSAic2tpYS9leHQvc2tpYV91dGlsc193aW4uaCIKKyNlbmRpZgor
CiAjaW5jbHVkZSA8d2luZG93cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhRU5B
QkxFKFNLSUFfVEVYVCkKK25hbWVzcGFjZSB7CisKK2Jvb2wgY2FudmFzSGFzTXVsdGlwbGVMYXll
cnMoY29uc3QgU2tDYW52YXMqIGNhbnZhcykKK3sKKyAgICBTa0NhbnZhczo6TGF5ZXJJdGVyIGl0
ZXIoY29uc3RfY2FzdDxTa0NhbnZhcyo+KGNhbnZhcyksIGZhbHNlKTsKKyAgICBpdGVyLm5leHQo
KTsgLy8gVGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBsYXllci4KKyAgICByZXR1cm4gIWl0
ZXIuZG9uZSgpOyAvLyBUaGVyZSBpcyA+IDEgbGF5ZXIgaWYgdGhlIHRoZSBpdGVyYXRvciBjYW4g
c3RpbCBhZHZhbmNlLgorfQorCitjbGFzcyBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsK
K3B1YmxpYzoKKyAgICBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB+VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cigpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gQ2FsbGVkIGJ5IG91ciBzdWJjbGFzcycgY29uc3Ry
dWN0b3IgdG8gaW5pdGlhbGl6ZSBHREkgaWYgbmVjZXNzYXJ5LiBUaGlzCisgICAgLy8gaXMgYSBz
ZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgY2FsbGVkIGFmdGVyIHRoZSBzdWJjbGFzcyBm
aW5pc2hlcworICAgIC8vIGNvbnN0cnVjdGlvbiAoaXQgY2FsbHMgdmlydHVhbCBmdW5jdGlvbnMp
LgorICAgIHZvaWQgaW5pdCgpOworCisgICAgdmlydHVhbCBJbnRSZWN0IGVzdGltYXRlVGV4dEJv
dW5kcygpID0gMDsKKworICAgIC8vIFVzZSB0aGUgY29udGV4dCBmcm9tIHRoZSB0cmFuc3BhcmVu
Y3kgaGVscGVyIHdoZW4gZHJhd2luZyB3aXRoIEdESS4gSXQKKyAgICAvLyBtYXkgcG9pbnQgdG8g
YSB0ZW1wb3Jhcnkgb25lLgorICAgIEdyYXBoaWNzQ29udGV4dCogbV9ncmFwaGljc0NvbnRleHQ7
CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIG1fcGxhdGZvcm1Db250ZXh0OworCisgICAg
RmxvYXRQb2ludCBtX3BvaW50OworCisgICAgLy8gU2V0IHdoZW4gV2luZG93cyBjYW4gaGFuZGxl
IHRoZSB0eXBlIG9mIGRyYXdpbmcgd2UncmUgZG9pbmcuCisgICAgYm9vbCBtX3VzZUdESTsKKwor
ICAgIC8vIFRoZXNlIG1lbWJlcnMgYXJlIHZhbGlkIG9ubHkgd2hlbiBtX3VzZUdESSBpcyBzZXQu
CisgICAgSERDIG1faGRjOworICAgIFRyYW5zcGFyZW5jeVdpbiBtX3RyYW5zcGFyZW5jeTsKKwor
cHJpdmF0ZToKKyAgICAvLyBDYWxsIHdoZW4gd2UncmUgdXNpbmcgR0RJIG1vZGUgdG8gaW5pdGlh
bGl6ZSB0aGUgVHJhbnNwYXJlbmN5V2luIHRvIGhlbHAKKyAgICAvLyB1cyBkcmF3IEdESSB0ZXh0
LgorICAgIHZvaWQgaW5pdGlhbGl6ZUZvckdESSgpOworCisgICAgYm9vbCBtX2NyZWF0ZWRUcmFu
c3BhcmVuY3lMYXllcjsgLy8gV2UgY3JlYXRlZCBhIGxheWVyIHRvIGdpdmUgdGhlIGZvbnQgc29t
ZSBhbHBoYS4KK307CisKK1RyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5j
eUF3YXJlRm9udFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKKyAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCisgICAgLCBt
X3BsYXRmb3JtQ29udGV4dChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSkKKyAgICAsIG1fcG9p
bnQocG9pbnQpCisgICAgLCBtX3VzZUdESSh3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcoY29u
dGV4dCkpCisgICAgLCBtX2hkYygwKQorICAgICwgbV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIo
ZmFsc2UpCit7Cit9CisKK3ZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdCgp
Cit7CisgICAgaWYgKG1fdXNlR0RJKQorICAgICAgICBpbml0aWFsaXplRm9yR0RJKCk7Cit9CisK
K3ZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGlhbGl6ZUZvckdESSgpCit7
CisgICAgbV9ncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICBTa0NvbG9yIGNvbG9yID0gbV9w
bGF0Zm9ybUNvbnRleHQtPmVmZmVjdGl2ZUZpbGxDb2xvcigpOworICAgIC8vIFVzZWQgb25seSB3
aGVuIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyIGlzIHRydWUuCisgICAgZmxvYXQgbGF5ZXJB
bHBoYSA9IDAuMGY7CisgICAgaWYgKFNrQ29sb3JHZXRBKGNvbG9yKSAhPSAweEZGKSB7CisgICAg
ICAgIC8vIFdoZW4gdGhlIGZvbnQgaGFzIHNvbWUgdHJhbnNwYXJlbmN5LCBhcHBseSBpdCBieSBj
cmVhdGluZyBhIG5ldworICAgICAgICAvLyB0cmFuc3BhcmVuY3kgbGF5ZXIgd2l0aCB0aGF0IG9w
YWNpdHkgYXBwbGllZC4gV2UnbGwgYWN0dWFsbHkgY3JlYXRlCisgICAgICAgIC8vIGEgbmV3IHRy
YW5zcGFyZW5jeSBsYXllciBhZnRlciB3ZSBjYWxjdWxhdGUgdGhlIGJvdW5kaW5nIGJveC4KKyAg
ICAgICAgbV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIgPSB0cnVlOworICAgICAgICBsYXllckFs
cGhhID0gU2tDb2xvckdldEEoY29sb3IpIC8gMjU1LjBmOworICAgICAgICAvLyBUaGUgY29sb3Ig
c2hvdWxkIGJlIG9wYXF1ZSBub3cuCisgICAgICAgIGNvbG9yID0gU2tDb2xvclNldFJHQihTa0Nv
bG9yR2V0Uihjb2xvciksIFNrQ29sb3JHZXRHKGNvbG9yKSwgU2tDb2xvckdldEIoY29sb3IpKTsK
KyAgICB9CisKKyAgICBUcmFuc3BhcmVuY3lXaW46OkxheWVyTW9kZSBsYXllck1vZGU7CisgICAg
SW50UmVjdCBsYXllclJlY3Q7CisgICAgaWYgKG1fcGxhdGZvcm1Db250ZXh0LT5pc0RyYXdpbmdU
b0ltYWdlQnVmZmVyKCkpIHsKKyAgICAgICAgLy8gQXNzdW1lIGlmIHdlJ3JlIGRyYXdpbmcgdG8g
YW4gaW1hZ2UgYnVmZmVyIHRoYXQgdGhlIGJhY2tncm91bmQKKyAgICAgICAgLy8gaXMgbm90IG9w
YXF1ZSBhbmQgd2UgaGF2ZSB0byB1bmRvIENsZWFyVHlwZS4gV2UgbWF5IHdhbnQgdG8KKyAgICAg
ICAgLy8gZW5oYW5jZSB0aGlzIHRvIGFjdHVhbGx5IGNoZWNrLCBzaW5jZSBpdCB3aWxsIG9mdGVu
IGJlIG9wYXF1ZQorICAgICAgICAvLyBhbmQgd2UgY291bGQgZG8gQ2xlYXJUeXBlIGluIHRoYXQg
Y2FzZS4KKyAgICAgICAgbGF5ZXJNb2RlID0gVHJhbnNwYXJlbmN5V2luOjpUZXh0Q29tcG9zaXRl
OworICAgICAgICBsYXllclJlY3QgPSBlc3RpbWF0ZVRleHRCb3VuZHMoKTsKKyAgICAgICAgbV9n
cmFwaGljc0NvbnRleHQtPmNsaXAobGF5ZXJSZWN0KTsKKyAgICAgICAgaWYgKG1fY3JlYXRlZFRy
YW5zcGFyZW5jeUxheWVyKQorICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQtPmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIobGF5ZXJBbHBoYSk7CisKKyAgICAgICAgLy8gVGhlIHRyYW5zcGFyZW5j
eSBoZWxwZXIgcmVxdWlyZXMgdGhhdCB3ZSBkcmF3IHRleHQgaW4gYmxhY2sgaW4KKyAgICAgICAg
Ly8gdGhpcyBtb2RlIGFuZCBpdCB3aWxsIGFwcGx5IHRoZSBjb2xvci4KKyAgICAgICAgbV90cmFu
c3BhcmVuY3kuc2V0VGV4dENvbXBvc2l0ZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgY29sb3IgPSBT
a0NvbG9yU2V0UkdCKDAsIDAsIDApOworICAgIH0gZWxzZSBpZiAobV9jcmVhdGVkVHJhbnNwYXJl
bmN5TGF5ZXIgfHwgY2FudmFzSGFzTXVsdGlwbGVMYXllcnMobV9wbGF0Zm9ybUNvbnRleHQtPmNh
bnZhcygpKSkgeworICAgICAgICAvLyBXaGVuIHdlJ3JlIGRyYXdpbmcgYSB3ZWIgcGFnZSwgd2Ug
a25vdyB0aGUgYmFja2dyb3VuZCBpcyBvcGFxdWUsCisgICAgICAgIC8vIGJ1dCBpZiB3ZSdyZSBk
cmF3aW5nIHRvIGEgbGF5ZXIsIHdlIHN0aWxsIG5lZWQgZXh0cmEgd29yay4KKyAgICAgICAgbGF5
ZXJNb2RlID0gVHJhbnNwYXJlbmN5V2luOjpPcGFxdWVDb21wb3NpdGVMYXllcjsKKyAgICAgICAg
bGF5ZXJSZWN0ID0gZXN0aW1hdGVUZXh0Qm91bmRzKCk7CisgICAgICAgIG1fZ3JhcGhpY3NDb250
ZXh0LT5jbGlwKGxheWVyUmVjdCk7CisgICAgICAgIGlmIChtX2NyZWF0ZWRUcmFuc3BhcmVuY3lM
YXllcikKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGxheWVyQWxwaGEpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENvbW1vbiBjYXNlIG9m
IGRyYXdpbmcgb250byB0aGUgYm90dG9tIGxheWVyIG9mIGEgd2ViIHBhZ2U6IHdlCisgICAgICAg
IC8vIGtub3cgZXZlcnl0aGluZyBpcyBvcGFxdWUgc28gZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGlu
ZyBzcGVjaWFsLgorICAgICAgICBsYXllck1vZGUgPSBUcmFuc3BhcmVuY3lXaW46Ok5vTGF5ZXI7
CisgICAgfQorCisgICAgLy8gQnVnIDI2MDg4IC0gaW5pdCgpIG1pZ2h0IGZhaWwgaWYgbGF5ZXJS
ZWN0IGlzIGludmFsaWQuIEdpdmVuIHRoaXMsIHdlCisgICAgLy8gbmVlZCB0byBiZSBjYXJlZnVs
IHRvIGNoZWNrIGZvciBudWxsIHBvaW50ZXJzIGV2ZXJ5d2hlcmUgYWZ0ZXIgdGhpcyBjYWxsCisg
ICAgbV90cmFuc3BhcmVuY3kuaW5pdChtX2dyYXBoaWNzQ29udGV4dCwgbGF5ZXJNb2RlLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW5jeVdpbjo6S2VlcFRyYW5zZm9ybSwgbGF5
ZXJSZWN0KTsKKworICAgIC8vIFNldCB1cCB0aGUgREMsIHVzaW5nIHRoZSBvbmUgZnJvbSB0aGUg
dHJhbnNwYXJlbmN5IGhlbHBlci4KKyAgICBpZiAobV90cmFuc3BhcmVuY3kucGxhdGZvcm1Db250
ZXh0KCkpIHsKKyAgICAgICAgbV9oZGMgPSBza2lhOjpCZWdpblBsYXRmb3JtUGFpbnQobV90cmFu
c3BhcmVuY3kucGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpKTsKKyAgICAgICAgU2V0VGV4dENv
bG9yKG1faGRjLCBza2lhOjpTa0NvbG9yVG9DT0xPUlJFRihjb2xvcikpOworICAgICAgICBTZXRC
a01vZGUobV9oZGMsIFRSQU5TUEFSRU5UKTsKKyAgICB9Cit9CisKK1RyYW5zcGFyZW5jeUF3YXJl
Rm9udFBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKCkKK3sKKyAgICBpZiAo
IW1fdXNlR0RJIHx8ICFtX2dyYXBoaWNzQ29udGV4dCB8fCAhbV9wbGF0Zm9ybUNvbnRleHQpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3RyYW5zcGFyZW5jeS5jb21wb3NpdGUoKTsKKyAgICBpZiAo
bV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCisgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7
CisgICAgaWYgKG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpKQorICAgICAgICBza2lh
OjpFbmRQbGF0Zm9ybVBhaW50KG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKSk7Cit9CisKKy8vIFNwZWNpYWxpemF0aW9uIGZvciBzaW1wbGUgR2x5cGhCdWZmZXIgcGFp
bnRpbmcuCitjbGFzcyBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlciA6IHB1YmxpYyBUcmFu
c3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsKKyBwdWJsaWM6CisgICAgVHJhbnNwYXJlbmN5QXdh
cmVHbHlwaFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0KiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSosCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB+VHJhbnNwYXJlbmN5QXdhcmVH
bHlwaFBhaW50ZXIoKTsKKworICAgIC8vIERyYXdzIHRoZSBwYXJ0aWFsIHN0cmluZyBvZiBnbHlw
aHMsIHN0YXJ0aW5nIGF0IHxzdGFydEFkdmFuY2V8IHRvIHRoZQorICAgIC8vIGxlZnQgb2YgbV9w
b2ludC4gV2UgZXhwcmVzcyBpdCB0aGlzIHdheSBzbyB0aGF0IGlmIHdlJ3JlIHVzaW5nIHRoZSBT
a2lhCisgICAgLy8gZHJhd2luZyBwYXRoIHdlIGNhbiB1c2UgZmxvYXRpbmctcG9pbnQgcG9zaXRp
b25pbmcsIGV2ZW4gdGhvdWdoIHdlIGhhdmUKKyAgICAvLyB0byB1c2UgaW50ZWdlciBwb3NpdGlv
bmluZyBpbiB0aGUgR0RJIHBhdGguCisgICAgYm9vbCBkcmF3R2x5cGhzKGludCBudW1HbHlwaHMs
IGNvbnN0IFdPUkQqIGdseXBocywgY29uc3QgaW50KiBhZHZhbmNlcywgZmxvYXQgc3RhcnRBZHZh
bmNlKSBjb25zdDsKKworIHByaXZhdGU6CisgICAgdmlydHVhbCBJbnRSZWN0IGVzdGltYXRlVGV4
dEJvdW5kcygpOworCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udDsKKyAgICBjb25z
dCBHbHlwaEJ1ZmZlciYgbV9nbHlwaEJ1ZmZlcjsKKyAgICBpbnQgbV9mcm9tOworICAgIGludCBt
X251bUdseXBoczsKKworICAgIC8vIFdoZW4gbV91c2VHZGkgaXMgc2V0LCB0aGlzIHN0b3JlcyB0
aGUgcHJldmlvdXMgSEZPTlQgc2VsZWN0ZWQgaW50byB0aGUKKyAgICAvLyBtX2hkYyBzbyB3ZSBj
YW4gcmVzdG9yZSBpdC4KKyAgICBIR0RJT0JKIG1fb2xkRm9udDsgLy8gRm9yIHJlc3RvcmluZyB0
aGUgREMgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgorfTsKKworVHJhbnNwYXJlbmN5QXdhcmVHbHlw
aFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKAorICAgIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwKKyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKKyAgICBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCisgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMs
CisgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgOiBUcmFuc3BhcmVuY3lBd2FyZUZv
bnRQYWludGVyKGNvbnRleHQsIHBvaW50KQorICAgICwgbV9mb250KGZvbnQpCisgICAgLCBtX2ds
eXBoQnVmZmVyKGdseXBoQnVmZmVyKQorICAgICwgbV9mcm9tKGZyb20pCisgICAgLCBtX251bUds
eXBocyhudW1HbHlwaHMpCisgICAgLCBtX29sZEZvbnQoMCkKK3sKKyAgICBpbml0KCk7CisKKyAg
ICBpZiAobV9oZGMpCisgICAgICAgIG1fb2xkRm9udCA9IDo6U2VsZWN0T2JqZWN0KG1faGRjLCBt
X2ZvbnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkpOworfQorCitUcmFuc3BhcmVuY3lBd2FyZUds
eXBoUGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKCkKK3sKKyAgICBpZiAo
bV91c2VHREkgJiYgbV9oZGMpCisgICAgICAgIDo6U2VsZWN0T2JqZWN0KG1faGRjLCBtX29sZEZv
bnQpOworfQorCisKKy8vIEVzdGltYXRlcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBnaXZlbiB0
ZXh0LiBUaGlzIGlzIGNvcGllZCBmcm9tCisvLyBGb250Q0dXaW4uY3BwLCBpdCBpcyBwb3NzaWJs
ZSwgYnV0IGEgbG90IG1vcmUgd29yaywgdG8gZ2V0IHRoZSBwcmVjaWRlCisvLyBib3VuZHMuCitJ
bnRSZWN0IFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjplc3RpbWF0ZVRleHRCb3VuZHMo
KQoreworICAgIGludCB0b3RhbFdpZHRoID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
bnVtR2x5cGhzOyBpKyspCisgICAgICAgIHRvdGFsV2lkdGggKz0gbHJvdW5kZihtX2dseXBoQnVm
ZmVyLmFkdmFuY2VBdChtX2Zyb20gKyBpKSk7CisKKyAgICBjb25zdCBGb250TWV0cmljcyYgZm9u
dE1ldHJpY3MgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCk7CisgICAgcmV0dXJuIEludFJlY3QobV9w
b2ludC54KCkgLSAoZm9udE1ldHJpY3MuYXNjZW50KCkgKyBmb250TWV0cmljcy5kZXNjZW50KCkp
IC8gMiwKKyAgICAgICAgICAgICAgICAgICBtX3BvaW50LnkoKSAtIGZvbnRNZXRyaWNzLmFzY2Vu
dCgpIC0gZm9udE1ldHJpY3MubGluZUdhcCgpLAorICAgICAgICAgICAgICAgICAgIHRvdGFsV2lk
dGggKyBmb250TWV0cmljcy5hc2NlbnQoKSArIGZvbnRNZXRyaWNzLmRlc2NlbnQoKSwKKyAgICAg
ICAgICAgICAgICAgICBmb250TWV0cmljcy5saW5lU3BhY2luZygpKTsgCit9CisKK2Jvb2wgVHJh
bnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6OmRyYXdHbHlwaHMoaW50IG51bUdseXBocywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV09SRCog
Z2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBpbnQqIGFkdmFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBzdGFydEFkdmFuY2UpIGNvbnN0Cit7CisgICAgaWYgKCFtX3VzZUdE
SSkgeworICAgICAgICBTa1BvaW50IG9yaWdpbiA9IG1fcG9pbnQ7CisgICAgICAgIG9yaWdpbi5m
WCArPSBTa0Zsb2F0VG9TY2FsYXIoc3RhcnRBZHZhbmNlKTsKKyAgICAgICAgcGFpbnRTa2lhVGV4
dChtX2dyYXBoaWNzQ29udGV4dCwgbV9mb250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpLAorICAg
ICAgICAgICAgICAgICAgICAgIG51bUdseXBocywgZ2x5cGhzLCBhZHZhbmNlcywgMCwgJm9yaWdp
bik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghbV9ncmFwaGljc0Nv
bnRleHQgfHwgIW1faGRjKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFdpbmRvd3Mn
IG9yaWdpbiBpcyB0aGUgdG9wLWxlZnQgb2YgdGhlIGJvdW5kaW5nIGJveCwgc28gd2UgaGF2ZQor
ICAgIC8vIHRvIHN1YnRyYWN0IG9mZiB0aGUgZm9udCBhc2NlbnQgdG8gZ2V0IGl0LgorICAgIGlu
dCB4ID0gbHJvdW5kZihtX3BvaW50LngoKSArIHN0YXJ0QWR2YW5jZSk7CisgICAgaW50IHkgPSBs
cm91bmRmKG1fcG9pbnQueSgpIC0gbV9mb250LT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKKwor
ICAgIC8vIElmIHRoZXJlIGlzIGEgbm9uLWJsdXIgc2hhZG93IGFuZCBib3RoIHRoZSBmaWxsIGNv
bG9yIGFuZCBzaGFkb3cgY29sb3IgCisgICAgLy8gYXJlIG9wYXF1ZSwgaGFuZGxlIHdpdGhvdXQg
c2tpYS4gCisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dCbHVy
OworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFj
ZTsKKyAgICBpZiAobV9ncmFwaGljc0NvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKSkgeworICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBhIHNoYWRvdyBhbmQgdGhpcyBjb2RlIGlzIHJlYWNoZWQsIHdpbmRvd3NDYW5I
YW5kbGVEcmF3VGV4dFNoYWRvdygpCisgICAgICAgIC8vIHdpbGwgaGF2ZSBhbHJlYWR5IHJldHVy
bmVkIHRydWUgZHVyaW5nIHRoZSBjdG9yIGluaXRpYXRpemF0aW9uIG9mIG1fdXNlR0RJCisgICAg
ICAgIEFTU0VSVChzaGFkb3dDb2xvci5hbHBoYSgpID09IDI1NSk7CisgICAgICAgIEFTU0VSVCht
X2dyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yKCkuYWxwaGEoKSA9PSAyNTUpOworICAgICAgICBB
U1NFUlQoIXNoYWRvd0JsdXIpOworICAgICAgICBDT0xPUlJFRiB0ZXh0Q29sb3IgPSBza2lhOjpT
a0NvbG9yVG9DT0xPUlJFRihTa0NvbG9yU2V0QVJHQigyNTUsIHNoYWRvd0NvbG9yLnJlZCgpLCBz
aGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCkpKTsKKyAgICAgICAgQ09MT1JS
RUYgc2F2ZWRUZXh0Q29sb3IgPSBHZXRUZXh0Q29sb3IobV9oZGMpOworICAgICAgICBTZXRUZXh0
Q29sb3IobV9oZGMsIHRleHRDb2xvcik7CisgICAgICAgIEV4dFRleHRPdXQobV9oZGMsIHggKyBz
aGFkb3dPZmZzZXQud2lkdGgoKSwgeSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSwgRVRPX0dMWVBI
X0lOREVYLCAwLCByZWludGVycHJldF9jYXN0PGNvbnN0IHdjaGFyX3QqPigmZ2x5cGhzWzBdKSwg
bnVtR2x5cGhzLCAmYWR2YW5jZXNbMF0pOworICAgICAgICBTZXRUZXh0Q29sb3IobV9oZGMsIHNh
dmVkVGV4dENvbG9yKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICEhRXh0VGV4dE91dChtX2hk
YywgeCwgeSwgRVRPX0dMWVBIX0lOREVYLCAwLCByZWludGVycHJldF9jYXN0PGNvbnN0IHdjaGFy
X3QqPigmZ2x5cGhzWzBdKSwgbnVtR2x5cGhzLCAmYWR2YW5jZXNbMF0pOworfQorCitjbGFzcyBU
cmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXIgOiBwdWJsaWMgVHJhbnNwYXJlbmN5QXdh
cmVGb250UGFpbnRlciB7CisgcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJl
UGFpbnRlcihHcmFwaGljc0NvbnRleHQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBGb250KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGV4dFJ1biYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBmcm9tLCBpbnQgdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB+VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWlu
dGVyKCk7CisKKyAgICAvLyBVbmlzY2liZSB3aWxsIGRyYXcgZGlyZWN0bHkgaW50byBvdXIgYnVm
ZmVyLCBzbyB3ZSBuZWVkIHRvIGV4cG9zZSBvdXIgREMuCisgICAgSERDIGhkYygpIGNvbnN0IHsg
cmV0dXJuIG1faGRjOyB9CisKKyBwcml2YXRlOgorICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0
ZVRleHRCb3VuZHMoKTsKKworICAgIGNvbnN0IEZvbnQqIG1fZm9udDsKKyAgICBjb25zdCBUZXh0
UnVuJiBtX3J1bjsKKyAgICBpbnQgbV9mcm9tOworICAgIGludCBtX3RvOworfTsKKworVHJhbnNw
YXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBh
aW50ZXIoCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IEZvbnQqIGZv
bnQsCisgICAgY29uc3QgVGV4dFJ1biYgcnVuLAorICAgIGludCBmcm9tLCBpbnQgdG8sCisgICAg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCisgICAgOiBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWlu
dGVyKGNvbnRleHQsIHBvaW50KQorICAgICwgbV9mb250KGZvbnQpCisgICAgLCBtX3J1bihydW4p
CisgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAsIG1fdG8odG8pCit7CisgICAgaW5pdCgpOworfQor
CitUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2FyZVVu
aXNjcmliZVBhaW50ZXIoKQoreworfQorCitJbnRSZWN0IFRyYW5zcGFyZW5jeUF3YXJlVW5pc2Ny
aWJlUGFpbnRlcjo6ZXN0aW1hdGVUZXh0Qm91bmRzKCkKK3sKKyAgICAvLyBUaGlzIGNhc2UgcmVh
bGx5IHJlYWxseSBzdWNrcy4gVGhlcmUgaXMgbm8gY29udmVuaWVudCB3YXkgdG8gZXN0aW1hdGUK
KyAgICAvLyB0aGUgYm91bmRpbmcgYm94LiBTbyB3ZSBydW4gVW5pc2NyaWJlIHR3aWNlLiBJZiB3
ZSBmaW5kIHRoaXMgaGFwcGVucyBhCisgICAgLy8gbG90LCB0aGUgd2F5IHRvIGZpeCBpdCBpcyB0
byBtYWtlIHRoZSBleHRyYSBsYXllciBhZnRlciB0aGUKKyAgICAvLyBVbmlzY3JpYmVIZWxwZXIg
aGFzIG1lYXN1cmVkIHRoZSB0ZXh0LgorICAgIEludFBvaW50IGludFBvaW50KGxyb3VuZGYobV9w
b2ludC54KCkpLAorICAgICAgICAgICAgICAgICAgICAgIGxyb3VuZGYobV9wb2ludC55KCkpKTsK
KworICAgIFVuaXNjcmliZUhlbHBlclRleHRSdW4gc3RhdGUobV9ydW4sICptX2ZvbnQpOworICAg
IGludCBsZWZ0ID0gbHJvdW5kZihtX3BvaW50LngoKSkgKyBzdGF0ZS5jaGFyYWN0ZXJUb1gobV9m
cm9tKTsKKyAgICBpbnQgcmlnaHQgPSBscm91bmRmKG1fcG9pbnQueCgpKSArIHN0YXRlLmNoYXJh
Y3RlclRvWChtX3RvKTsKKyAgICAKKyAgICAvLyBBZGp1c3QgZm9yIFJUTCBzY3JpcHQgc2luY2Ug
d2UganVzdCB3YW50IHRvIGtub3cgdGhlIHRleHQgYm91bmRzLgorICAgIGlmIChsZWZ0ID4gcmln
aHQpCisgICAgICAgIHN0ZDo6c3dhcChsZWZ0LCByaWdodCk7CisKKyAgICAvLyBUaGlzIGFsZ29y
aXRobSBmb3IgZXN0aW1hdGluZyBob3cgbXVjaCBleHRyYSBzcGFjZSB3ZSBuZWVkICh0aGUgdGV4
dCBtYXkKKyAgICAvLyBnbyBvdXRzaWRlIHRoZSBzZWxlY3Rpb24gcmVjdCkgaXMgYmFzZWQgcm91
Z2hseSBvbgorICAgIC8vIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjplc3RpbWF0ZVRl
eHRCb3VuZHMgYWJvdmUuCisgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gbV9m
b250LT5mb250TWV0cmljcygpOworICAgIHJldHVybiBJbnRSZWN0KGxlZnQgLSAoZm9udE1ldHJp
Y3MuYXNjZW50KCkgKyBmb250TWV0cmljcy5kZXNjZW50KCkpIC8gMiwKKyAgICAgICAgICAgICAg
ICAgICBtX3BvaW50LnkoKSAtIGZvbnRNZXRyaWNzLmFzY2VudCgpIC0gZm9udE1ldHJpY3MubGlu
ZUdhcCgpLAorICAgICAgICAgICAgICAgICAgIChyaWdodCAtIGxlZnQpICsgZm9udE1ldHJpY3Mu
YXNjZW50KCkgKyBmb250TWV0cmljcy5kZXNjZW50KCksCisgICAgICAgICAgICAgICAgICAgZm9u
dE1ldHJpY3MubGluZVNwYWNpbmcoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisjZW5kaWYKKwog
Ym9vbCBGb250OjpjYW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQogewogICAg
IHJldHVybiBmYWxzZTsKQEAgLTU1LDYgKzM3OCw3IEBAIGJvb2wgRm9udDo6Y2FuRXhwYW5kQXJv
dW5kSWRlb2dyYXBoc0luQ28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoU0tJ
QV9URVhUKQogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwK
QEAgLTExNCw2ICs0MzgsMTA4IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRl
eHQqIGcKICAgICAgICAgcGFpbnRTa2lhVGV4dChncmFwaGljc0NvbnRleHQsIGhmb250LCBjdXJM
ZW4sICZnbHlwaHNbMF0sICZhZHZhbmNlc1swXSwgMCwgJm9yaWdpbik7CiAgICAgfQogfQorI2Vs
c2UKK3N0YXRpYyB2b2lkIGRyYXdHbHlwaHNXaW4oR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbnVtR2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkgeworLy8gICAgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworCisgICAgVHJhbnNwYXJlbmN5
QXdhcmVHbHlwaFBhaW50ZXIgcGFpbnRlcihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVm
ZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsKKworICAgIC8vIFdlIGRyYXcgdGhlIGdseXBo
cyBpbiBjaHVua3MgdG8gYXZvaWQgaGF2aW5nIHRvIGRvIGEgaGVhcCBhbGxvY2F0aW9uIGZvcgor
ICAgIC8vIHRoZSBhcnJheXMgb2YgY2hhcmFjdGVycyBhbmQgYWR2YW5jZXMuIFNpbmNlIEV4dFRl
eHRPdXQgaXMgdGhlCisgICAgLy8gbG93ZXN0LWxldmVsIHRleHQgb3V0cHV0IGZ1bmN0aW9uIG9u
IFdpbmRvd3MsIHRoZXJlIHNob3VsZCBiZSBsaXR0bGUKKyAgICAvLyBwZW5hbHR5IGZvciBzcGxp
dHRpbmcgdXAgdGhlIHRleHQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYnVmZmVyIGNhbm5vdAor
ICAgIC8vIGJlIGJpZ2dlciB0aGFuIDQwOTQgb3IgdGhlIGZ1bmN0aW9uIHdpbGwgZmFpbC4KKyAg
ICBjb25zdCBpbnQga01heEJ1ZmZlckxlbmd0aCA9IDI1NjsKKyAgICBWZWN0b3I8V09SRCwga01h
eEJ1ZmZlckxlbmd0aD4gZ2x5cGhzOworICAgIFZlY3RvcjxpbnQsIGtNYXhCdWZmZXJMZW5ndGg+
IGFkdmFuY2VzOworICAgIGludCBnbHlwaEluZGV4ID0gMDsgLy8gVGhlIHN0YXJ0aW5nIGdseXBo
IG9mIHRoZSBjdXJyZW50IGNodW5rLgorCisgICAgLy8gSW4gb3JkZXIgdG8gcm91bmQgYWxsIG9m
ZnNldHMgdG8gdGhlIGNvcnJlY3QgcGl4ZWwgYm91bmRhcnksIHRoaXMgY29kZSBrZWVwcyB0cmFj
ayBvZiB0aGUgYWJzb2x1dGUgcG9zaXRpb24KKyAgICAvLyBvZiBlYWNoIGdseXBoIGluIGZsb2F0
aW5nIHBvaW50IHVuaXRzIGFuZCByb3VuZHMgdG8gaW50ZWdlciBhZHZhbmNlcyBhdCB0aGUgbGFz
dCBwb3NzaWJsZSBtb21lbnQuCisKKyAgICBmbG9hdCBob3Jpem9udGFsT2Zmc2V0ID0gcG9pbnQu
eCgpOyAvLyBUaGUgZmxvYXRpbmcgcG9pbnQgb2Zmc2V0IG9mIHRoZSBsZWZ0IHNpZGUgb2YgdGhl
IGN1cnJlbnQgZ2x5cGguCisgICAgaW50IGxhc3RIb3Jpem9udGFsT2Zmc2V0Um91bmRlZCA9IGxy
b3VuZGYoaG9yaXpvbnRhbE9mZnNldCk7IC8vIFRoZSByb3VuZGVkIG9mZnNldCBvZiB0aGUgbGVm
dCBzaWRlIG9mIHRoZSBsYXN0IGdseXBoIHJlbmRlcmVkLgorICAgIHdoaWxlIChnbHlwaEluZGV4
IDwgbnVtR2x5cGhzKSB7CisgICAgICAgIC8vIEhvdyBtYW55IGNoYXJzIHdpbGwgYmUgaW4gdGhp
cyBjaHVuaz8KKyAgICAgICAgaW50IGN1ckxlbiA9IHN0ZDo6bWluKGtNYXhCdWZmZXJMZW5ndGgs
IG51bUdseXBocyAtIGdseXBoSW5kZXgpOworICAgICAgICBnbHlwaHMucmVzaXplKGN1ckxlbik7
CisgICAgICAgIGFkdmFuY2VzLnJlc2l6ZShjdXJMZW4pOworCisgICAgICAgIGZsb2F0IGN1cnJl
bnRXaWR0aCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3VyTGVuOyArK2ksICsr
Z2x5cGhJbmRleCkgeworICAgICAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhB
dChmcm9tICsgZ2x5cGhJbmRleCk7CisgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGds
eXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsgZ2x5cGhJbmRleCk7CisgICAgICAgICAgICBhZHZh
bmNlc1tpXSA9IGxyb3VuZGYoaG9yaXpvbnRhbE9mZnNldCkgLSBsYXN0SG9yaXpvbnRhbE9mZnNl
dFJvdW5kZWQ7CisgICAgICAgICAgICBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQgKz0gYWR2
YW5jZXNbaV07CisgICAgICAgICAgICBjdXJyZW50V2lkdGggKz0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KGZyb20gKyBnbHlwaEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQnVn
IDI2MDg4IC0gdmVyeSBsYXJnZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBydW5zIGNhbiBmYWlsIHRv
CisgICAgICAgICAgICAvLyByZW5kZXIgc28gd2UgY2xhbXAgdGhlIHNpemUgaGVyZS4gSW4gdGhl
IHNwZWNzLCBuZWdhdGl2ZQorICAgICAgICAgICAgLy8gbGV0dGVyLXNwYWNpbmcgaXMgaW1wbGVt
ZW50YXRpb24tZGVmaW5lZCwgc28gdGhpcyBzaG91bGQgYmUKKyAgICAgICAgICAgIC8vIGZpbmUs
IGFuZCBpdCBtYXRjaGVzIFNhZmFyaSdzIGltcGxlbWVudGF0aW9uLiBUaGUgY2FsbCBhY3R1YWxs
eQorICAgICAgICAgICAgLy8gc2VlbXMgdG8gY3Jhc2ggaWYga01heE5lZ2F0aXZlUnVuIGlzIHNl
dCB0byBzb21ld2hlcmUgYXJvdW5kCisgICAgICAgICAgICAvLyAtMzI4MzAsIHNvIHdlIGdpdmUg
b3Vyc2VsdmVzIGEgbGl0dGxlIGJyZWF0aGluZyByb29tLgorICAgICAgICAgICAgY29uc3QgaW50
IG1heE5lZ2F0aXZlUnVuID0gLTMyNzY4OworICAgICAgICAgICAgY29uc3QgaW50IG1heFBvc2l0
aXZlUnVuID0gIDMyNzY4OworICAgICAgICAgICAgaWYgKChjdXJyZW50V2lkdGggKyBhZHZhbmNl
c1tpXSA8IG1heE5lZ2F0aXZlUnVuKSB8fCAoY3VycmVudFdpZHRoICsgYWR2YW5jZXNbaV0gPiBt
YXhQb3NpdGl2ZVJ1bikpIAorICAgICAgICAgICAgICAgIGFkdmFuY2VzW2ldID0gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEFjdHVhbGx5IGRyYXcgdGhlIGdseXBocyAod2l0aCByZXRyeSBv
biBmYWlsdXJlKS4KKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIGZvciAo
aW50IGV4ZWN1dGlvbnMgPSAwOyBleGVjdXRpb25zIDwgMjsgKytleGVjdXRpb25zKSB7CisgICAg
ICAgICAgICBzdWNjZXNzID0gcGFpbnRlci5kcmF3R2x5cGhzKGN1ckxlbiwgJmdseXBoc1swXSwg
JmFkdmFuY2VzWzBdLCBob3Jpem9udGFsT2Zmc2V0IC0gcG9pbnQueCgpIC0gY3VycmVudFdpZHRo
KTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiAhZXhlY3V0aW9ucykgeworICAgICAgICAg
ICAgICAgIC8vIEFzayB0aGUgYnJvd3NlciB0byBsb2FkIHRoZSBmb250IGZvciB1cyBhbmQgcmV0
cnkuCisgICAgICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjplbnN1cmVGb250TG9hZGVkKGZv
bnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBkcmF3IHRoZSBn
bHlwaHMgYWZ0ZXIgc2Vjb25kIGF0dGVtcHQiKTsKKyAgICB9Cit9CisKK3ZvaWQgRm9udDo6ZHJh
d0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKKyAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg
aW50IGZyb20sCisgICAgICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBocywKKyAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBTa0Nv
bG9yIGNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZWZmZWN0aXZl
RmlsbENvbG9yKCk7CisgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IFNrQ29sb3JHZXRBKGNvbG9y
KTsKKyAgICAvLyBTa2lwIDEwMCUgdHJhbnNwYXJlbnQgdGV4dDsgbm8gbmVlZCB0byBkcmF3IGFu
eXRoaW5nLgorICAgIGlmICghYWxwaGEgJiYgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Z2V0U3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSAmJiAhZ3JhcGhpY3NDb250ZXh0LT5o
YXNTaGFkb3coKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghYWxwaGEgfHwgd2luZG93c0Nh
bkhhbmRsZURyYXdUZXh0U2hhZG93KGdyYXBoaWNzQ29udGV4dCkgfHwgIXdpbmRvd3NDYW5IYW5k
bGVUZXh0RHJhd2luZ1dpdGhvdXRTaGFkb3coZ3JhcGhpY3NDb250ZXh0KSkgeworICAgICAgICBk
cmF3R2x5cGhzV2luKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51
bUdseXBocywgcG9pbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIERyYXcgaW4g
dHdvIHBhc3Nlczogc2tpYSBmb3IgdGhlIHNoYWRvdywgR0RJIGZvciBmb3JlZ3JvdW5kIHRleHQK
KyAgICAvLyBwYXNzMTogc2hhZG93ICh3aWxsIHVzZSBza2lhKQorICAgIGdyYXBoaWNzQ29udGV4
dC0+c2F2ZSgpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFu
c3BhcmVudCwgZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3JTcGFjZSgpKTsKKyAgICBkcmF3R2x5
cGhzV2luKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBo
cywgcG9pbnQpOworICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOworICAgIC8vIHBhc3My
OiBmb3JlZ3JvdW5kIHRleHQgKHdpbGwgdXNlIEdESSkKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OworICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAg
Q29sb3JTcGFjZSBzaGFkb3dDb2xvclNwYWNlOworICAgIGdyYXBoaWNzQ29udGV4dC0+Z2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3Bh
Y2UpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93
Qmx1ciwgQ29sb3I6OnRyYW5zcGFyZW50LCBzaGFkb3dDb2xvclNwYWNlKTsKKyAgICBkcmF3R2x5
cGhzV2luKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBo
cywgcG9pbnQpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpOworfQorI2VuZGlmCiAK
IEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwKQEAgLTE0OSw5ICs1NzUsNDAgQEAgdm9pZCBGb250OjpkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZQogICAgIGlmICghYWxwaGEgJiYgZ3JhcGhpY3NDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAg
ICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFNLSUFfVEVYVCkKKyAgICBIREMgaGRjID0gMDsK
KyNlbHNlCisgICAgVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyIHBhaW50ZXIoZ3Jh
cGhpY3NDb250ZXh0LCB0aGlzLCBydW4sIGZyb20sIHRvLCBwb2ludCk7CisKKyAgICBIREMgaGRj
ID0gcGFpbnRlci5oZGMoKTsKKyAgICBpZiAod2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKGdy
YXBoaWNzQ29udGV4dCkgJiYgIWhkYykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVE9ETyht
YXJ1ZWwpOiBodHRwOi8vYi83MDA0NjQgU2V0VGV4dENvbG9yIGRvZXNuJ3Qgc3VwcG9ydCB0cmFu
c3BhcmVuY3kuCisgICAgLy8gRW5mb3JjZSBub24tdHJhbnNwYXJlbnQgY29sb3IuCisgICAgY29s
b3IgPSBTa0NvbG9yU2V0UkdCKFNrQ29sb3JHZXRSKGNvbG9yKSwgU2tDb2xvckdldEcoY29sb3Ip
LCBTa0NvbG9yR2V0Qihjb2xvcikpOworICAgIGlmIChoZGMpIHsKKyAgICAgICAgU2V0VGV4dENv
bG9yKGhkYywgc2tpYTo6U2tDb2xvclRvQ09MT1JSRUYoY29sb3IpKTsKKyAgICAgICAgU2V0QmtN
b2RlKGhkYywgVFJBTlNQQVJFTlQpOworICAgIH0KKworICAgIC8vIElmIHRoZXJlIGlzIGEgbm9u
LWJsdXIgc2hhZG93IGFuZCBib3RoIHRoZSBmaWxsIGNvbG9yIGFuZCBzaGFkb3cgY29sb3IgCisg
ICAgLy8gYXJlIG9wYXF1ZSwgaGFuZGxlIHdpdGhvdXQgc2tpYS4gCisgICAgRmxvYXRTaXplIHNo
YWRvd09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9y
OworICAgIENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKKyAgICBpZiAoZ3JhcGhpY3NDb250
ZXh0LT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwgc2hh
ZG93Q29sb3JTcGFjZSkgJiYgd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KGdyYXBoaWNz
Q29udGV4dCkpIHsKKyAgICAgICAgQ09MT1JSRUYgdGV4dENvbG9yID0gc2tpYTo6U2tDb2xvclRv
Q09MT1JSRUYoU2tDb2xvclNldEFSR0IoMjU1LCBzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29s
b3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpKSk7CisgICAgICAgIENPTE9SUkVGIHNhdmVk
VGV4dENvbG9yID0gR2V0VGV4dENvbG9yKGhkYyk7CisgICAgICAgIFNldFRleHRDb2xvcihoZGMs
IHRleHRDb2xvcik7CisgICAgICAgIHN0YXRlLmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBoZGMsIHN0
YXRpY19jYXN0PGludD4ocG9pbnQueCgpKSArIHNoYWRvd09mZnNldC53aWR0aCgpLAorICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocG9pbnQueSgpIC0gZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCksIGZyb20sIHRvKTsKKyAgICAgICAgU2V0
VGV4dENvbG9yKGhkYywgc2F2ZWRUZXh0Q29sb3IpOyAKKyAgICB9CisjZW5kaWYKICAgICAvLyBV
bmlzY3JpYmUgY291bnRzIHRoZSBjb29yZGluYXRlcyBmcm9tIHRoZSB1cHBlciBsZWZ0LCB3aGls
ZSBXZWJLaXQgdXNlcwogICAgIC8vIHRoZSBiYXNlbGluZSwgc28gd2UgaGF2ZSB0byBzdWJ0cmFj
dCBvZmYgdGhlIGFzY2VudC4KLSAgICBIREMgaGRjID0gMDsKICAgICBzdGF0ZS5kcmF3KGdyYXBo
aWNzQ29udGV4dCwgaGRjLCBscm91bmRmKHBvaW50LngoKSksIGxyb3VuZGYocG9pbnQueSgpIC0g
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSksIGZyb20sIHRvKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Vbmlz
Y3JpYmVIZWxwZXIuY3BwCShyZXZpc2lvbiA5Njk2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwOSw2ICszMDksOSBAQCB2b2lkIFVuaXNjcmliZUhlbHBlcjo6ZHJhdyhHcmFwaGljc0Nv
bnRlCiAgICAgSEdESU9CSiBvbGRGb250ID0gMDsKICAgICBpbnQgY3VyWCA9IHg7CiAgICAgYm9v
bCBmaXJzdFJ1biA9IHRydWU7CisjaWYgIUVOQUJMRShTS0lBX1RFWFQpCisgICAgYm9vbCB1c2VX
aW5kb3dzRHJhd2luZyA9IHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhncmFwaGljc0NvbnRl
eHQpOworI2VuZGlmCiAKICAgICBmb3IgKHNpemVfdCBzY3JlZW5JbmRleCA9IDA7IHNjcmVlbklu
ZGV4IDwgbV9ydW5zLnNpemUoKTsgc2NyZWVuSW5kZXgrKykgewogICAgICAgICBpbnQgaXRlbUlu
ZGV4ID0gbV9zY3JlZW5PcmRlcltzY3JlZW5JbmRleF07CkBAIC0zODcsMTQgKzM5MCwyNiBAQCB2
b2lkIFVuaXNjcmliZUhlbHBlcjo6ZHJhdyhHcmFwaGljc0NvbnRlCiAgICAgICAgICAgICAvLyBQ
YXNzIDAgaW4gd2hlbiB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uLgogICAgICAgICAgICAgY29u
c3QgaW50KiBqdXN0aWZ5ID0gc2hhcGluZy5tX2p1c3RpZnkuc2l6ZSgpID09IDAgPyAwIDogJnNo
YXBpbmcubV9qdXN0aWZ5W2Zyb21HbHlwaF07CiAKKyNpZiBFTkFCTEUoU0tJQV9URVhUKQogICAg
ICAgICAgICAgY29uc3QgaW50KiBhZHZhbmNlcyA9IHNoYXBpbmcubV9qdXN0aWZ5LnNpemUoKSA/
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fanVzdGlm
eVtmcm9tR2x5cGhdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICZzaGFw
aW5nLm1fYWR2YW5jZVtmcm9tR2x5cGhdOworI2Vsc2UKKyAgICAgICAgICAgIGlmICh1c2VXaW5k
b3dzRHJhd2luZykgeworICAgICAgICAgICAgICAgIGlmIChmaXJzdFJ1bikgeworICAgICAgICAg
ICAgICAgICAgICBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGRjLCBzaGFwaW5nLm1faGZvbnQpOwor
ICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBTZWxlY3RPYmplY3QoZGMsIHNoYXBpbmcubV9oZm9u
dCk7CisgICAgICAgICAgICB9CisKKyNlbmRpZgogICAgICAgICAgICAgLy8gRm9udHMgd2l0aCBk
aWZmZXJlbnQgYXNjZW50cyBjYW4gYmUgdXNlZCB0byByZW5kZXIgZGlmZmVyZW50CiAgICAgICAg
ICAgICAvLyBydW5zLiAgJ0Fjcm9zcy1ydW5zJyB5LWNvb3JkaW5hdGUgY29ycmVjdGlvbiBuZWVk
cyB0byBiZQogICAgICAgICAgICAgLy8gYWRqdXN0ZWQgZm9yIGVhY2ggZm9udC4KICAgICAgICAg
ICAgIGJvb2wgdGV4dE91dE9rID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKGludCBleGVjdXRp
b25zID0gMDsgZXhlY3V0aW9ucyA8IDI7ICsrZXhlY3V0aW9ucykgeworI2lmIEVOQUJMRShTS0lB
X1RFWFQpCiAgICAgICAgICAgICAgICAgU2tQb2ludCBvcmlnaW47CiAgICAgICAgICAgICAgICAg
b3JpZ2luLmZYID0gY3VyWCArICsgaW5uZXJPZmZzZXQ7CiAgICAgICAgICAgICAgICAgb3JpZ2lu
LmZZID0geSArIG1fYXNjZW50OwpAQCAtNDA2LDYgKzQyMSwzMiBAQCB2b2lkIFVuaXNjcmliZUhl
bHBlcjo6ZHJhdyhHcmFwaGljc0NvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
c2hhcGluZy5tX29mZnNldHNbZnJvbUdseXBoXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZvcmlnaW4pOwogICAgICAgICAgICAgICAgIHRleHRPdXRPayA9IHRydWU7CisjZWxzZQor
ICAgICAgICAgICAgICAgIGlmICh1c2VXaW5kb3dzRHJhd2luZykgeworICAgICAgICAgICAgICAg
ICAgICBIUkVTVUxUIGhyID0gU2NyaXB0VGV4dE91dChkYywgc2hhcGluZy5tX3NjcmlwdENhY2hl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJYICsg
aW5uZXJPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHkgLSBzaGFwaW5nLm1fYXNjZW50T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAmaXRlbS5hLCAwLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2dseXBoc1tmcm9t
R2x5cGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bHlwaENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmc2hhcGluZy5tX2FkdmFuY2VbZnJvbUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9vZmZzZXRzW2Zyb21HbHlwaF0pOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0T3V0T2sgPSAoaHIgPT0gU19PSyk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU2tQb2ludCBvcmlnaW47CisgICAg
ICAgICAgICAgICAgICAgIG9yaWdpbi5mWCA9IGN1clggKyArIGlubmVyT2Zmc2V0OworICAgICAg
ICAgICAgICAgICAgICBvcmlnaW4uZlkgPSB5ICsgbV9hc2NlbnQ7CisgICAgICAgICAgICAgICAg
ICAgIHBhaW50U2tpYVRleHQoZ3JhcGhpY3NDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNoYXBpbmcubV9oZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZz
aGFwaW5nLm1fZ2x5cGhzW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnNoYXBpbmcubV9hZHZhbmNlW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnNoYXBpbmcubV9vZmZzZXRzW2Zyb21HbHlwaF0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJm9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIHRl
eHRPdXRPayA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgICAg
ICAgICBpZiAoIXRleHRPdXRPayAmJiAwID09IGV4ZWN1dGlvbnMpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgVGV4dE91dCBpcyBjYWxsZWQgZnJvbSB0aGUgcmVuZGVyZXIgaXQgbWlnaHQg
ZmFpbApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9y
bUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA5Njk2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OSw2ICs1NzksMTcgQEAgY29uc3QgU2tCaXRtYXAq
IFBsYXRmb3JtQ29udGV4dFNraWE6OmJpdAogICAgIHJldHVybiAmbV9jYW52YXMtPmdldERldmlj
ZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogfQogCitib29sIFBsYXRmb3JtQ29udGV4dFNraWE6
OmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKQoreworI2lmIEVOQUJMRShTS0lBX1RFWFQp
CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBpZiAoaXNBY2NlbGVyYXRlZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHNraWE6OlN1cHBvcnRzUGxhdGZvcm1QYWlu
dChtX2NhbnZhcyk7CisjZW5kaWYKK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRJ
bWFnZVJlc2FtcGxpbmdIaW50KEludFNpemUqIHNyY1NpemUsIEZsb2F0U2l6ZSogZHN0U2l6ZSkg
Y29uc3QKIHsKICAgICAqc3JjU2l6ZSA9IG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gOTY5NjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY3LDYgKzE2NywxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmludGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wg
cCkgeyBtX3ByaW50aW5nID0gcDsgfQogCisgICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBh
bGxvd3MgcmVuZGVyaW5nIG9mIGZvbnRzIHVzaW5nIG5hdGl2ZSBwbGF0Zm9ybQorICAgIC8vIEFQ
SXMuIElmIGZhbHNlIGlzIHJldHVybmVkIGZvbnQgcmVuZGVyaW5nIGlzIHBlcmZvcm1lZCB1c2lu
ZyB0aGUgc2tpYQorICAgIC8vIHRleHQgZHJhd2luZyBBUElzLgorICAgIC8vIGlmIFNLSUFfVEVY
VCBpcyBlbmFibGVkLCB0aGlzIGFsd2F5cyByZXR1cm5zIGZhbHNlCisgICAgYm9vbCBpc05hdGl2
ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCk7CisKICAgICB2b2lkIGdldEltYWdlUmVzYW1wbGluZ0hp
bnQoSW50U2l6ZSogc3JjU2l6ZSwgRmxvYXRTaXplKiBkc3RTaXplKSBjb25zdDsKICAgICB2b2lk
IHNldEltYWdlUmVzYW1wbGluZ0hpbnQoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgRmxv
YXRTaXplJiBkc3RTaXplKTsKICAgICB2b2lkIGNsZWFySW1hZ2VSZXNhbXBsaW5nSGludCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9T
a2lhRm9udFdpbi5jcHAJKHJldmlzaW9uIDk2OTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDYwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFFTkFCTEUoU0tJQV9URVhU
KQorYm9vbCB3aW5kb3dzQ2FuSGFuZGxlRHJhd1RleHRTaGFkb3coR3JhcGhpY3NDb250ZXh0ICpj
b250ZXh0KQoreworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93
Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9y
U3BhY2U7CisKKyAgICBib29sIGhhc1NoYWRvdyA9IGNvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dP
ZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKKyAgICBy
ZXR1cm4gIWhhc1NoYWRvdyB8fCAoIXNoYWRvd0JsdXIgJiYgKHNoYWRvd0NvbG9yLmFscGhhKCkg
PT0gMjU1KSAmJiAoY29udGV4dC0+ZmlsbENvbG9yKCkuYWxwaGEoKSA9PSAyNTUpKTsKK30KKwor
Ym9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
KQoreworICAgIGlmICghd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91dFNoYWRvdyhj
b250ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIHNoYWRv
dyBlZmZlY3RzLgorICAgIGlmICghd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KGNvbnRl
eHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICAvLyBDaGVjayBmb3Igbm9uLXRyYW5zbGF0aW9uIHRyYW5zZm9y
bXMuIFNvbWV0aW1lcyB6b29tcyB3aWxsIGxvb2sgYmV0dGVyIGluCisgICAgLy8gU2tpYSwgYW5k
IHNvbWV0aW1lcyBiZXR0ZXIgaW4gV2luZG93cy4gVGhlIG1haW4gcHJvYmxlbSBpcyB0aGF0IHpv
b21pbmcKKyAgICAvLyBpbiB1c2luZyBTa2lhIHdpbGwgc2hvdyB5b3UgdGhlIGhpbnRlZCBvdXRs
aW5lcyBmb3IgdGhlIHNtYWxsZXIgc2l6ZSwKKyAgICAvLyB3aGljaCBsb29rIHdlaXJkLiBBbGwg
ZWxzZSBiZWluZyBlcXVhbCwgaXQncyBiZXR0ZXIgdG8gdXNlIFdpbmRvd3MnIHRleHQKKyAgICAv
LyBkcmF3aW5nLCBzbyB3ZSBkb24ndCBjaGVjayBmb3Igem9vbXMuCisgICAgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBtYXRyaXggPSBjb250ZXh0LT5nZXRDVE0oKTsKKyAgICBpZiAobWF0cml4LmIo
KSB8fCBtYXRyaXguYygpKSAvLyBDaGVjayBmb3Igc2tldy4KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gQ2hlY2sgZm9yIHN0cm9rZSBlZmZlY3RzLgorICAgIGlmIChjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Z2V0VGV4dERyYXdpbmdNb2RlKCkgIT0gVGV4dE1vZGVGaWxsKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3IgZ3JhZGllbnRzLgorICAg
IGlmIChjb250ZXh0LT5maWxsR3JhZGllbnQoKSB8fCBjb250ZXh0LT5zdHJva2VHcmFkaWVudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3IgcGF0dGVybnMuCisg
ICAgaWYgKGNvbnRleHQtPmZpbGxQYXR0ZXJuKCkgfHwgY29udGV4dC0+c3Ryb2tlUGF0dGVybigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5pc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHNraWFE
cmF3VGV4dChTa0NhbnZhcyogY2FudmFzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNrUG9pbnQmIHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIFNrUGFpbnQqIHBhaW50
LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
U2tpYUZvbnRXaW4uaAkocmV2aXNpb24gOTY5NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICsz
NCw0MCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx1c3AxMC5oPgogCi1jbGFz
cyBTa1BvaW50Oworc3RydWN0IFNrUG9pbnQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tpYTsKKworI2lmICFF
TkFCTEUoU0tJQV9URVhUKQorLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgdXNlZCBmb3IgbW9y
ZSBjb21wbGV4IGZvbnQgZHJhd2luZyAoZWZmZWN0cyBzdWNoIGFzCisvLyBzdHJva2luZyBhbmQg
bW9yZSBjb21wbGV4IHRyYW5zZm9ybXMpIHRoYW4gV2luZG93cyBzdXBwb3J0cyBkaXJlY3RseS4g
U2luY2UKKy8vIFdpbmRvd3MgZHJhd2luZyBpcyBmYXN0ZXIgeW91IHNob3VsZCB1c2Ugd2luZG93
c0NhbkhhbmRsZVRleHREcmF3aW5nIGZpcnN0IHRvCisvLyBjaGVjayBpZiB1c2luZyBTa2lhIGlz
IHJlcXVpcmVkIGF0IGFsbC4KKy8vIE5vdGUgdGhhdCB0aGUgdGV4dCB3aWxsIGxvb2sgZGlmZmVy
ZW50IChubyBDbGVhclR5cGUpIHNvIHRoaXMgc2hvdWxkIG9ubHkgYmUKKy8vIHVzZWQgd2hlbiBu
ZWNlc3NhcnkuCisvLworLy8gV2hlbiB5b3UgY2FsbCBhIFNraWEqIHRleHQgZHJhd2luZyBmdW5j
dGlvbiwgdmFyaW91cyBnbHlwaCBvdXRsaW5lcyB3aWxsIGJlCisvLyBjYWNoZWQuIEFzIGEgcmVz
dWx0LCB5b3Ugc2hvdWxkIGNhbGwgU2tpYVdpbk91dGxpbmVDYWNoZTo6cmVtb3ZlUGF0aHNGb3JG
b250CisvLyB3aGVuIHRoZSBmb250IGlzIGRlc3Ryb3llZCBzbyB0aGF0IHRoZSBjYWNoZSBkb2Vz
IG5vdCBvdXRsaXZlIHRoZSBmb250IChzaW5jZQorLy8gdGhlIEhGT05UcyBhcmUgcmVjeWNsZWQp
LgorLy8KKy8vIFJlbWVtYmVyIHRoYXQgU2tpYSdzIHRleHQgZHJhd2luZyBvcmlnaW4gaXMgdGhl
IGJhc2VsaW5lLCBsaWtlIFdlYktpdCwgbm90CisvLyB0aGUgdG9wLCBsaWtlIFdpbmRvd3MuCisK
Ky8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsbENvbG9yIGFuZCBzaGFkb3dDb2xvciBhcmUgb3Bh
cXVlIGFuZCB0aGUgdGV4dC1zaGFkb3cKKy8vIGlzIG5vdCBibHVycmVkLgorYm9vbCB3aW5kb3dz
Q2FuSGFuZGxlRHJhd1RleHRTaGFkb3coR3JhcGhpY3NDb250ZXh0Kik7CisKKy8vIFJldHVybnMg
dHJ1ZSBpZiBhZHZhbmNlZCBmb250IHJlbmRlcmluZyBpcyByZWNvbW1lbmRlZC4KK2Jvb2wgd2lu
ZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKEdyYXBoaWNzQ29udGV4dCopOworCisvLyBSZXR1cm5z
IHRydWUgaWYgYWR2YW5jZWQgZm9udCByZW5kZXJpbmcgaXMgcmVjb21tZW5kZWQgaWYgc2hhZG93
cyBhcmUKKy8vIGRpc3JlZ2FyZGVkLgorYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdX
aXRob3V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCopOworI2VuZGlmCiAKIC8vIE5vdGUgdGhhdCB0
aGUgb2Zmc2V0cyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuICBJZiBub3QgTlVMTCBpdCByZXByZXNl
bnRzIGEKIC8vIHBlciBnbHlwaCBvZmZzZXQgKHN1Y2ggYXMgcmV0dXJuZWQgYnkgU2NyaXB0UGxh
Y2UgV2luZG93cyBBUEkgZnVuY3Rpb24pLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDk2OTY1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0xMC0wNyAgTWlrZSBSZWVkICA8cmVl
ZEBnb29nbGUuY29tPgorCisgICAgICAgIHJlLWFkZCBzdXBwb3J0IGZvciBHREkgdGV4dCBiZWhp
bmQgYSBjb21waWxlIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY5NTMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmZWF0dXJlcy5neXBpOgorCiAyMDExLTEwLTA3ICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIGNvbXBpbGUgd2hlbiB1c2lu
ZyB0aGUgY29tcG9uZW50cyBidWlsZC4gIFRoaXMgdGVzdApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9mZWF0dXJlcy5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vZmVhdHVyZXMuZ3lwaQkocmV2aXNpb24gOTY5NjEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAKICAgICAg
ICdFTkFCTEVfU0FOREJPWD0xJywKICAgICAgICdFTkFCTEVfU0hBUkVEX1dPUktFUlM9MScsCiAg
ICAgICAnRU5BQkxFX1NLSUFfR1BVPTwodXNlX3NraWFfZ3B1KScsCisgICAgICAnRU5BQkxFX1NL
SUFfVEVYVD08KGVuYWJsZV9za2lhX3RleHQpJywKICAgICAgICdFTkFCTEVfU01PT1RIX1NDUk9M
TElORz0xJywKICAgICAgICdFTkFCTEVfU1FMX0RBVEFCQVNFPTEnLAogICAgICAgJ0VOQUJMRV9T
Vkc9PChlbmFibGVfc3ZnKScsCkBAIC0xMDksNiArMTEwLDcgQEAKICAgICAndmFyaWFibGVzJzog
ewogICAgICAgJ3VzZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyUnOiAxLAogICAgICAgJ3VzZV90
aHJlYWRlZF9jb21wb3NpdGluZyUnOiAwLAorICAgICAgJ2VuYWJsZV9za2lhX3RleHQlJzogMCwK
ICAgICAgICdlbmFibGVfc3ZnJSc6IDEsCiAgICAgICAnZW5hYmxlX3RvdWNoX2V2ZW50cyUnOiAx
LAogICAgICAgJ3VzZV9za2lhX2dwdSUnOiAwLApAQCAtMTE4LDYgKzEyMCw3IEBACiAgICAgfSwK
ICAgICAndXNlX2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nJSc6ICc8KHVzZV9hY2NlbGVyYXRlZF9j
b21wb3NpdGluZyknLAogICAgICd1c2VfdGhyZWFkZWRfY29tcG9zaXRpbmclJzogJzwodXNlX3Ro
cmVhZGVkX2NvbXBvc2l0aW5nKScsCisgICAgJ2VuYWJsZV9za2lhX3RleHQlJzogJzwoZW5hYmxl
X3NraWFfdGV4dCknLAogICAgICdlbmFibGVfc3ZnJSc6ICc8KGVuYWJsZV9zdmcpJywKICAgICAn
ZW5hYmxlX3RvdWNoX2V2ZW50cyUnOiAnPChlbmFibGVfdG91Y2hfZXZlbnRzKScsCiAgICAgJ3Vz
ZV9za2lhJSc6ICc8KHVzZV9za2lhKScsCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5Njk2NSkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEx
LTEwLTA3ICBNaWtlIFJlZWQgIDxyZWVkQGdvb2dsZS5jb20+CisKKyAgICAgICAgcmUtYWRkIHN1
cHBvcnQgZm9yIEdESSB0ZXh0IGJlaGluZCBhIGNvbXBpbGUgZmxhZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1MzAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dDoKKwogMjAxMS0xMC0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHI5NjI1Nyk6IGZhc3QvcmVwYWludC9zZWxl
Y3Rpb24tY2xlYXIuaHRtbCBmYWlsCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA5Njk2MSkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM2NCw2ICsxMzY0LDE0IEBAIEJVR0NSMTA0MzAgTElOVVggV0lOIDogc3Zn
L1czQy1TVkctMS4xL3QKIC8vIFRoaXMgdGVzdCBhbHNvIHN0YXJ0ZWQgZmFpbGluZyB3aXRoIHRo
ZSBtZXJnZSBvZiBNYXJjaCAyNXRoIDIwMDkKIEJVR0NSMTA0NDEgTUFDIFdJTiA6IHRyYW5zaXRp
b25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXRyYW5zZm9ybS5odG1sID0gUEFTUyBURVhUCiAKKy8v
IERpc2FibGUgdGhlc2Ugd2hpbGUgd2UncmUgYmFjayB0byB1c2luZyBHREkgZm9yIHRleHQgZHJh
d2luZy4gVGhlc2UgZ2l2ZSBzbGlnaHRseQorLy8gZGlmZmVyZW50IHJlc3VsdHMgdGhhbiB3aXRo
IFNraWEuIFdoZW4gd2Ugc3dpdGNoIGJhY2sgdG8gU2tpYSwgd2UgY2FuCisvLyByZWVuYWJsZSB0
aGVzZS4KK0JVR0NSOTk1MDAgV0lOIDogbWVkaWEvYXVkaW8tcmVwYWludC5odG1sID0gSU1BR0UK
K0JVR0NSOTk1MDAgV0lOIDogc3ZnL2FzLWJhY2tncm91bmQtaW1hZ2UvYW5pbWF0ZWQtc3ZnLWFz
LWJhY2tncm91bmQuaHRtbCA9IElNQUdFCitCVUdDUjk5NTAwIFdJTiA6IHN2Zy9iYXRpay90ZXh0
L3RleHRTdHlsZXMuc3ZnID0gSU1BR0UKK0JVR0NSOTk1MDAgV0lOIDogc3ZnL2N1c3RvbS9zaW1w
bGUtdGV4dC1kb3VibGUtc2hhZG93LnN2ZyA9IElNQUdFCisKIC8vIE1lcmdlIDQxNzY4OjQxODA3
CiAvLyBQZXJoYXBzIGp1c3QgbmVlZHMgbmV3IGJhc2VsaW5lPwogLy8gVGhlc2UgdGVzdHMgd2Vy
ZSByZWJhc2VsaW5lZCB3aXRoIGZhaWx1cmUgbG9uZyBhZ28uIFdlIHNob3VsZG4ndCBkbyB0aGlz
LCBhbmQKQEAgLTIwNTMsNyArMjA2MSw2IEBAIEJVR1dLNjUyMDMgV0lOIDogc3ZnL3pvb20vdGV4
dC96b29tLWhpeGkKIAogLy8gT24gWFAsIHNvbWUgZ2x5cGhzIHNob3cgc3VicGl4ZWwgYW50aWFs
aWFzaW5nIHdoZW4gdGhleSBzaG91bGRuJ3QKIEJVR1dLNjUyMDMgWFAgOiBmYXN0L3RleHQvaW50
ZXJuYXRpb25hbC9iaWRpLW1pcnJvci1oZS1hci5odG1sID0gSU1BR0UKLUJVR1dLNjUyMDMgWFAg
OiBzdmcvYmF0aWsvdGV4dC90ZXh0U3R5bGVzLnN2ZyA9IElNQUdFCiAKIEJVR1dLNDI0MjggTElO
VVggV0lOIDogc3ZnL1czQy1TVkctMS4xL2ZpbHRlcnMtY29udi0wMS1mLnN2ZyA9IElNQUdFK1RF
WFQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110388</attachid>
            <date>2011-10-10 13:21:47 -0700</date>
            <delta_ts>2011-10-10 13:29:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69530-20111010162145.patch</filename>
            <type>text/plain</type>
            <size>36293</size>
            <attacher name="Mike Reed">reed</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MDc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMTAgIE1pa2UgUmVl
ZCAgPHJlZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRl
eHQgYmVoaW5kIGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVt
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6
OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJh
bnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFu
c3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpp
bml0aWFsaXplRm9yR0RJKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9u
dFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2Fy
ZUZvbnRQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUds
eXBoUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWlu
dGVyOjpUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlR2x5
cGhQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50
ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjplc3RpbWF0ZVRleHRCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJl
bmN5QXdhcmVHbHlwaFBhaW50ZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWlu
dGVyOjpoZGMpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVu
aXNjcmliZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjp+VHJhbnNwYXJlbmN5
QXdhcmVVbmlzY3JpYmVQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3
YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcjo6ZXN0aW1h
dGVUZXh0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHNXaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpk
cmF3Q29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Vu
aXNjcmliZUhlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXI6OmRy
YXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZv
bnRSZW5kZXJpbmdBbGxvd2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFGb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NDYW5IYW5kbGVEcmF3VGV4
dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6d2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91dFNo
YWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oOgor
CiAyMDExLTEwLTEwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT04oOTYwNzApIDI1JSBpbnRsMSBQTFQgcmVncmVzc2lvbiBmcm9tIHNj
cm9sbGJhciBpbnZhbGlkYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAkocmV2
aXNpb24gOTcwNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMzM1IEBA
CiAjaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKICNpbmNsdWRlICJVbmlzY3JpYmVIZWxwZXJUZXh0
UnVuLmgiCiAKKyNpZiAhRU5BQkxFKFNLSUFfVEVYVCkKKyNpbmNsdWRlICJUcmFuc3BhcmVuY3lX
aW4uaCIKKyNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0aWxzX3dpbi5oIgorI2VuZGlmCisKICNp
bmNsdWRlIDx3aW5kb3dzLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorI2lmICFFTkFCTEUoU0tJQV9URVhUKQorbmFtZXNwYWNlIHsKKworYm9vbCBj
YW52YXNIYXNNdWx0aXBsZUxheWVycyhjb25zdCBTa0NhbnZhcyogY2FudmFzKQoreworICAgIFNr
Q2FudmFzOjpMYXllckl0ZXIgaXRlcihjb25zdF9jYXN0PFNrQ2FudmFzKj4oY2FudmFzKSwgZmFs
c2UpOworICAgIGl0ZXIubmV4dCgpOyAvLyBUaGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIGxh
eWVyLgorICAgIHJldHVybiAhaXRlci5kb25lKCk7IC8vIFRoZXJlIGlzID4gMSBsYXllciBpZiB0
aGUgdGhlIGl0ZXJhdG9yIGNhbiBzdGlsIGFkdmFuY2UuCit9CisKK2NsYXNzIFRyYW5zcGFyZW5j
eUF3YXJlRm9udFBhaW50ZXIgeworcHVibGljOgorICAgIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIH5UcmFuc3Bh
cmVuY3lBd2FyZUZvbnRQYWludGVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBDYWxsZWQgYnkg
b3VyIHN1YmNsYXNzJyBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIEdESSBpZiBuZWNlc3Nhcnku
IFRoaXMKKyAgICAvLyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBjYWxsZWQg
YWZ0ZXIgdGhlIHN1YmNsYXNzIGZpbmlzaGVzCisgICAgLy8gY29uc3RydWN0aW9uIChpdCBjYWxs
cyB2aXJ0dWFsIGZ1bmN0aW9ucykuCisgICAgdm9pZCBpbml0KCk7CisKKyAgICB2aXJ0dWFsIElu
dFJlY3QgZXN0aW1hdGVUZXh0Qm91bmRzKCkgPSAwOworCisgICAgLy8gVXNlIHRoZSBjb250ZXh0
IGZyb20gdGhlIHRyYW5zcGFyZW5jeSBoZWxwZXIgd2hlbiBkcmF3aW5nIHdpdGggR0RJLiBJdAor
ICAgIC8vIG1heSBwb2ludCB0byBhIHRlbXBvcmFyeSBvbmUuCisgICAgR3JhcGhpY3NDb250ZXh0
KiBtX2dyYXBoaWNzQ29udGV4dDsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogbV9wbGF0
Zm9ybUNvbnRleHQ7CisKKyAgICBGbG9hdFBvaW50IG1fcG9pbnQ7CisKKyAgICAvLyBTZXQgd2hl
biBXaW5kb3dzIGNhbiBoYW5kbGUgdGhlIHR5cGUgb2YgZHJhd2luZyB3ZSdyZSBkb2luZy4KKyAg
ICBib29sIG1fdXNlR0RJOworCisgICAgLy8gVGhlc2UgbWVtYmVycyBhcmUgdmFsaWQgb25seSB3
aGVuIG1fdXNlR0RJIGlzIHNldC4KKyAgICBIREMgbV9oZGM7CisgICAgVHJhbnNwYXJlbmN5V2lu
IG1fdHJhbnNwYXJlbmN5OworCitwcml2YXRlOgorICAgIC8vIENhbGwgd2hlbiB3ZSdyZSB1c2lu
ZyBHREkgbW9kZSB0byBpbml0aWFsaXplIHRoZSBUcmFuc3BhcmVuY3lXaW4gdG8gaGVscAorICAg
IC8vIHVzIGRyYXcgR0RJIHRleHQuCisgICAgdm9pZCBpbml0aWFsaXplRm9yR0RJKCk7CisKKyAg
ICBib29sIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyOyAvLyBXZSBjcmVhdGVkIGEgbGF5ZXIg
dG8gZ2l2ZSB0aGUgZm9udCBzb21lIGFscGhhLgorfTsKKworVHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIDogbV9ncmFwaGljc0NvbnRl
eHQoY29udGV4dCkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpKQorICAgICwgbV9wb2ludChwb2ludCkKKyAgICAsIG1fdXNlR0RJKHdpbmRvd3NDYW5I
YW5kbGVUZXh0RHJhd2luZyhjb250ZXh0KSkKKyAgICAsIG1faGRjKDApCisgICAgLCBtX2NyZWF0
ZWRUcmFuc3BhcmVuY3lMYXllcihmYWxzZSkKK3sKK30KKwordm9pZCBUcmFuc3BhcmVuY3lBd2Fy
ZUZvbnRQYWludGVyOjppbml0KCkKK3sKKyAgICBpZiAobV91c2VHREkpCisgICAgICAgIGluaXRp
YWxpemVGb3JHREkoKTsKK30KKwordm9pZCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpp
bml0aWFsaXplRm9yR0RJKCkKK3sKKyAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAg
IFNrQ29sb3IgY29sb3IgPSBtX3BsYXRmb3JtQ29udGV4dC0+ZWZmZWN0aXZlRmlsbENvbG9yKCk7
CisgICAgLy8gVXNlZCBvbmx5IHdoZW4gbV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIgaXMgdHJ1
ZS4KKyAgICBmbG9hdCBsYXllckFscGhhID0gMC4wZjsKKyAgICBpZiAoU2tDb2xvckdldEEoY29s
b3IpICE9IDB4RkYpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgZm9udCBoYXMgc29tZSB0cmFuc3Bh
cmVuY3ksIGFwcGx5IGl0IGJ5IGNyZWF0aW5nIGEgbmV3CisgICAgICAgIC8vIHRyYW5zcGFyZW5j
eSBsYXllciB3aXRoIHRoYXQgb3BhY2l0eSBhcHBsaWVkLiBXZSdsbCBhY3R1YWxseSBjcmVhdGUK
KyAgICAgICAgLy8gYSBuZXcgdHJhbnNwYXJlbmN5IGxheWVyIGFmdGVyIHdlIGNhbGN1bGF0ZSB0
aGUgYm91bmRpbmcgYm94LgorICAgICAgICBtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllciA9IHRy
dWU7CisgICAgICAgIGxheWVyQWxwaGEgPSBTa0NvbG9yR2V0QShjb2xvcikgLyAyNTUuMGY7Cisg
ICAgICAgIC8vIFRoZSBjb2xvciBzaG91bGQgYmUgb3BhcXVlIG5vdy4KKyAgICAgICAgY29sb3Ig
PSBTa0NvbG9yU2V0UkdCKFNrQ29sb3JHZXRSKGNvbG9yKSwgU2tDb2xvckdldEcoY29sb3IpLCBT
a0NvbG9yR2V0Qihjb2xvcikpOworICAgIH0KKworICAgIFRyYW5zcGFyZW5jeVdpbjo6TGF5ZXJN
b2RlIGxheWVyTW9kZTsKKyAgICBJbnRSZWN0IGxheWVyUmVjdDsKKyAgICBpZiAobV9wbGF0Zm9y
bUNvbnRleHQtPmlzRHJhd2luZ1RvSW1hZ2VCdWZmZXIoKSkgeworICAgICAgICAvLyBBc3N1bWUg
aWYgd2UncmUgZHJhd2luZyB0byBhbiBpbWFnZSBidWZmZXIgdGhhdCB0aGUgYmFja2dyb3VuZAor
ICAgICAgICAvLyBpcyBub3Qgb3BhcXVlIGFuZCB3ZSBoYXZlIHRvIHVuZG8gQ2xlYXJUeXBlLiBX
ZSBtYXkgd2FudCB0bworICAgICAgICAvLyBlbmhhbmNlIHRoaXMgdG8gYWN0dWFsbHkgY2hlY2ss
IHNpbmNlIGl0IHdpbGwgb2Z0ZW4gYmUgb3BhcXVlCisgICAgICAgIC8vIGFuZCB3ZSBjb3VsZCBk
byBDbGVhclR5cGUgaW4gdGhhdCBjYXNlLgorICAgICAgICBsYXllck1vZGUgPSBUcmFuc3BhcmVu
Y3lXaW46OlRleHRDb21wb3NpdGU7CisgICAgICAgIGxheWVyUmVjdCA9IGVzdGltYXRlVGV4dEJv
dW5kcygpOworICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+Y2xpcChsYXllclJlY3QpOworICAg
ICAgICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCisgICAgICAgICAgICBtX2dyYXBo
aWNzQ29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihsYXllckFscGhhKTsKKworICAgICAg
ICAvLyBUaGUgdHJhbnNwYXJlbmN5IGhlbHBlciByZXF1aXJlcyB0aGF0IHdlIGRyYXcgdGV4dCBp
biBibGFjayBpbgorICAgICAgICAvLyB0aGlzIG1vZGUgYW5kIGl0IHdpbGwgYXBwbHkgdGhlIGNv
bG9yLgorICAgICAgICBtX3RyYW5zcGFyZW5jeS5zZXRUZXh0Q29tcG9zaXRlQ29sb3IoY29sb3Ip
OworICAgICAgICBjb2xvciA9IFNrQ29sb3JTZXRSR0IoMCwgMCwgMCk7CisgICAgfSBlbHNlIGlm
IChtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllciB8fCBjYW52YXNIYXNNdWx0aXBsZUxheWVycyht
X3BsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCkpKSB7CisgICAgICAgIC8vIFdoZW4gd2UncmUgZHJh
d2luZyBhIHdlYiBwYWdlLCB3ZSBrbm93IHRoZSBiYWNrZ3JvdW5kIGlzIG9wYXF1ZSwKKyAgICAg
ICAgLy8gYnV0IGlmIHdlJ3JlIGRyYXdpbmcgdG8gYSBsYXllciwgd2Ugc3RpbGwgbmVlZCBleHRy
YSB3b3JrLgorICAgICAgICBsYXllck1vZGUgPSBUcmFuc3BhcmVuY3lXaW46Ok9wYXF1ZUNvbXBv
c2l0ZUxheWVyOworICAgICAgICBsYXllclJlY3QgPSBlc3RpbWF0ZVRleHRCb3VuZHMoKTsKKyAg
ICAgICAgbV9ncmFwaGljc0NvbnRleHQtPmNsaXAobGF5ZXJSZWN0KTsKKyAgICAgICAgaWYgKG1f
Y3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyKQorICAgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHQt
PmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobGF5ZXJBbHBoYSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gQ29tbW9uIGNhc2Ugb2YgZHJhd2luZyBvbnRvIHRoZSBib3R0b20gbGF5ZXIgb2YgYSB3
ZWIgcGFnZTogd2UKKyAgICAgICAgLy8ga25vdyBldmVyeXRoaW5nIGlzIG9wYXF1ZSBzbyBkb24n
dCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgIGxheWVyTW9kZSA9IFRyYW5z
cGFyZW5jeVdpbjo6Tm9MYXllcjsKKyAgICB9CisKKyAgICAvLyBCdWcgMjYwODggLSBpbml0KCkg
bWlnaHQgZmFpbCBpZiBsYXllclJlY3QgaXMgaW52YWxpZC4gR2l2ZW4gdGhpcywgd2UKKyAgICAv
LyBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gY2hlY2sgZm9yIG51bGwgcG9pbnRlcnMgZXZlcnl3aGVy
ZSBhZnRlciB0aGlzIGNhbGwKKyAgICBtX3RyYW5zcGFyZW5jeS5pbml0KG1fZ3JhcGhpY3NDb250
ZXh0LCBsYXllck1vZGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNwYXJlbmN5V2lu
OjpLZWVwVHJhbnNmb3JtLCBsYXllclJlY3QpOworCisgICAgLy8gU2V0IHVwIHRoZSBEQywgdXNp
bmcgdGhlIG9uZSBmcm9tIHRoZSB0cmFuc3BhcmVuY3kgaGVscGVyLgorICAgIGlmIChtX3RyYW5z
cGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkgeworICAgICAgICBtX2hkYyA9IHNraWE6OkJlZ2lu
UGxhdGZvcm1QYWludChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkp
OworICAgICAgICBTZXRUZXh0Q29sb3IobV9oZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNv
bG9yKSk7CisgICAgICAgIFNldEJrTW9kZShtX2hkYywgVFJBTlNQQVJFTlQpOworICAgIH0KK30K
KworVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXIoKQoreworICAgIGlmICghbV91c2VHREkgfHwgIW1fZ3JhcGhpY3NDb250ZXh0IHx8ICFt
X3BsYXRmb3JtQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdHJhbnNwYXJlbmN5LmNv
bXBvc2l0ZSgpOworICAgIGlmIChtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllcikKKyAgICAgICAg
bV9ncmFwaGljc0NvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgbV9ncmFwaGlj
c0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICBpZiAobV90cmFuc3BhcmVuY3kucGxhdGZvcm1Db250
ZXh0KCkpCisgICAgICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQobV90cmFuc3BhcmVuY3kucGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpKTsKK30KKworLy8gU3BlY2lhbGl6YXRpb24gZm9yIHNp
bXBsZSBHbHlwaEJ1ZmZlciBwYWludGluZy4KK2NsYXNzIFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQ
YWludGVyIDogcHVibGljIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIgeworIHB1YmxpYzoK
KyAgICBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcihHcmFwaGljc0NvbnRleHQqLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYpOworICAg
IH5UcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcigpOworCisgICAgLy8gRHJhd3MgdGhlIHBh
cnRpYWwgc3RyaW5nIG9mIGdseXBocywgc3RhcnRpbmcgYXQgfHN0YXJ0QWR2YW5jZXwgdG8gdGhl
CisgICAgLy8gbGVmdCBvZiBtX3BvaW50LiBXZSBleHByZXNzIGl0IHRoaXMgd2F5IHNvIHRoYXQg
aWYgd2UncmUgdXNpbmcgdGhlIFNraWEKKyAgICAvLyBkcmF3aW5nIHBhdGggd2UgY2FuIHVzZSBm
bG9hdGluZy1wb2ludCBwb3NpdGlvbmluZywgZXZlbiB0aG91Z2ggd2UgaGF2ZQorICAgIC8vIHRv
IHVzZSBpbnRlZ2VyIHBvc2l0aW9uaW5nIGluIHRoZSBHREkgcGF0aC4KKyAgICBib29sIGRyYXdH
bHlwaHMoaW50IG51bUdseXBocywgY29uc3QgV09SRCogZ2x5cGhzLCBjb25zdCBpbnQqIGFkdmFu
Y2VzLCBmbG9hdCBzdGFydEFkdmFuY2UpIGNvbnN0OworCisgcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IEludFJlY3QgZXN0aW1hdGVUZXh0Qm91bmRzKCk7CisKKyAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogbV9mb250OworICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOworICAgIGlu
dCBtX2Zyb207CisgICAgaW50IG1fbnVtR2x5cGhzOworCisgICAgLy8gV2hlbiBtX3VzZUdkaSBp
cyBzZXQsIHRoaXMgc3RvcmVzIHRoZSBwcmV2aW91cyBIRk9OVCBzZWxlY3RlZCBpbnRvIHRoZQor
ICAgIC8vIG1faGRjIHNvIHdlIGNhbiByZXN0b3JlIGl0LgorICAgIEhHRElPQkogbV9vbGRGb250
OyAvLyBGb3IgcmVzdG9yaW5nIHRoZSBEQyB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCit9OworCitU
cmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50
ZXIoCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LAorICAgIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKKyAgICBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywKKyAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICA6
IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoY29udGV4dCwgcG9pbnQpCisgICAgLCBtX2Zv
bnQoZm9udCkKKyAgICAsIG1fZ2x5cGhCdWZmZXIoZ2x5cGhCdWZmZXIpCisgICAgLCBtX2Zyb20o
ZnJvbSkKKyAgICAsIG1fbnVtR2x5cGhzKG51bUdseXBocykKKyAgICAsIG1fb2xkRm9udCgwKQor
eworICAgIGluaXQoKTsKKworICAgIGlmIChtX2hkYykKKyAgICAgICAgbV9vbGRGb250ID0gOjpT
ZWxlY3RPYmplY3QobV9oZGMsIG1fZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSk7Cit9CisK
K1RyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBh
aW50ZXIoKQoreworICAgIGlmIChtX3VzZUdESSAmJiBtX2hkYykKKyAgICAgICAgOjpTZWxlY3RP
YmplY3QobV9oZGMsIG1fb2xkRm9udCk7Cit9CisKKworLy8gRXN0aW1hdGVzIHRoZSBib3VuZGlu
ZyBib3ggb2YgdGhlIGdpdmVuIHRleHQuIFRoaXMgaXMgY29waWVkIGZyb20KKy8vIEZvbnRDR1dp
bi5jcHAsIGl0IGlzIHBvc3NpYmxlLCBidXQgYSBsb3QgbW9yZSB3b3JrLCB0byBnZXQgdGhlIHBy
ZWNpZGUKKy8vIGJvdW5kcy4KK0ludFJlY3QgVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXI6
OmVzdGltYXRlVGV4dEJvdW5kcygpCit7CisgICAgaW50IHRvdGFsV2lkdGggPSAwOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9udW1HbHlwaHM7IGkrKykKKyAgICAgICAgdG90YWxXaWR0aCAr
PSBscm91bmRmKG1fZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KG1fZnJvbSArIGkpKTsKKworICAgIGNv
bnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IG1fZm9udC0+Zm9udE1ldHJpY3MoKTsKKyAg
ICByZXR1cm4gSW50UmVjdChtX3BvaW50LngoKSAtIChmb250TWV0cmljcy5hc2NlbnQoKSArIGZv
bnRNZXRyaWNzLmRlc2NlbnQoKSkgLyAyLAorICAgICAgICAgICAgICAgICAgIG1fcG9pbnQueSgp
IC0gZm9udE1ldHJpY3MuYXNjZW50KCkgLSBmb250TWV0cmljcy5saW5lR2FwKCksCisgICAgICAg
ICAgICAgICAgICAgdG90YWxXaWR0aCArIGZvbnRNZXRyaWNzLmFzY2VudCgpICsgZm9udE1ldHJp
Y3MuZGVzY2VudCgpLAorICAgICAgICAgICAgICAgICAgIGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5n
KCkpOyAKK30KKworYm9vbCBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZHJhd0dseXBo
cyhpbnQgbnVtR2x5cGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCogYWR2YW5jZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0QWR2YW5jZSkgY29uc3QK
K3sKKyAgICBpZiAoIW1fdXNlR0RJKSB7CisgICAgICAgIFNrUG9pbnQgb3JpZ2luID0gbV9wb2lu
dDsKKyAgICAgICAgb3JpZ2luLmZYICs9IFNrRmxvYXRUb1NjYWxhcihzdGFydEFkdmFuY2UpOwor
ICAgICAgICBwYWludFNraWFUZXh0KG1fZ3JhcGhpY3NDb250ZXh0LCBtX2ZvbnQtPnBsYXRmb3Jt
RGF0YSgpLmhmb250KCksCisgICAgICAgICAgICAgICAgICAgICAgbnVtR2x5cGhzLCBnbHlwaHMs
IGFkdmFuY2VzLCAwLCAmb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKCFtX2dyYXBoaWNzQ29udGV4dCB8fCAhbV9oZGMpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gV2luZG93cycgb3JpZ2luIGlzIHRoZSB0b3AtbGVmdCBvZiB0aGUgYm91bmRp
bmcgYm94LCBzbyB3ZSBoYXZlCisgICAgLy8gdG8gc3VidHJhY3Qgb2ZmIHRoZSBmb250IGFzY2Vu
dCB0byBnZXQgaXQuCisgICAgaW50IHggPSBscm91bmRmKG1fcG9pbnQueCgpICsgc3RhcnRBZHZh
bmNlKTsKKyAgICBpbnQgeSA9IGxyb3VuZGYobV9wb2ludC55KCkgLSBtX2ZvbnQtPmZvbnRNZXRy
aWNzKCkuYXNjZW50KCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgYSBub24tYmx1ciBzaGFkb3cg
YW5kIGJvdGggdGhlIGZpbGwgY29sb3IgYW5kIHNoYWRvdyBjb2xvciAKKyAgICAvLyBhcmUgb3Bh
cXVlLCBoYW5kbGUgd2l0aG91dCBza2lhLiAKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0Owor
ICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgQ29sb3JT
cGFjZSBzaGFkb3dDb2xvclNwYWNlOworICAgIGlmIChtX2dyYXBoaWNzQ29udGV4dC0+Z2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3Bh
Y2UpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc2hhZG93IGFuZCB0aGlzIGNvZGUgaXMg
cmVhY2hlZCwgd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KCkKKyAgICAgICAgLy8gd2ls
bCBoYXZlIGFscmVhZHkgcmV0dXJuZWQgdHJ1ZSBkdXJpbmcgdGhlIGN0b3IgaW5pdGlhdGl6YXRp
b24gb2YgbV91c2VHREkKKyAgICAgICAgQVNTRVJUKHNoYWRvd0NvbG9yLmFscGhhKCkgPT0gMjU1
KTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKS5hbHBoYSgp
ID09IDI1NSk7CisgICAgICAgIEFTU0VSVCghc2hhZG93Qmx1cik7CisgICAgICAgIENPTE9SUkVG
IHRleHRDb2xvciA9IHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKFNrQ29sb3JTZXRBUkdCKDI1NSwg
c2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUo
KSkpOworICAgICAgICBDT0xPUlJFRiBzYXZlZFRleHRDb2xvciA9IEdldFRleHRDb2xvcihtX2hk
Yyk7CisgICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgdGV4dENvbG9yKTsKKyAgICAgICAgRXh0
VGV4dE91dChtX2hkYywgeCArIHNoYWRvd09mZnNldC53aWR0aCgpLCB5ICsgc2hhZG93T2Zmc2V0
LmhlaWdodCgpLCBFVE9fR0xZUEhfSU5ERVgsIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgd2No
YXJfdCo+KCZnbHlwaHNbMF0pLCBudW1HbHlwaHMsICZhZHZhbmNlc1swXSk7CisgICAgICAgIFNl
dFRleHRDb2xvcihtX2hkYywgc2F2ZWRUZXh0Q29sb3IpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gISFFeHRUZXh0T3V0KG1faGRjLCB4LCB5LCBFVE9fR0xZUEhfSU5ERVgsIDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KCZnbHlwaHNbMF0pLCBudW1HbHlwaHMsICZhZHZhbmNl
c1swXSk7Cit9CisKK2NsYXNzIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlciA6IHB1
YmxpYyBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyIHsKKyBwdWJsaWM6CisgICAgVHJhbnNw
YXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyKEdyYXBoaWNzQ29udGV4dCosCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQqLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0UnVuJiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCB0bywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYpOworICAgIH5UcmFuc3BhcmVu
Y3lBd2FyZVVuaXNjcmliZVBhaW50ZXIoKTsKKworICAgIC8vIFVuaXNjaWJlIHdpbGwgZHJhdyBk
aXJlY3RseSBpbnRvIG91ciBidWZmZXIsIHNvIHdlIG5lZWQgdG8gZXhwb3NlIG91ciBEQy4KKyAg
ICBIREMgaGRjKCkgY29uc3QgeyByZXR1cm4gbV9oZGM7IH0KKworIHByaXZhdGU6CisgICAgdmly
dHVhbCBJbnRSZWN0IGVzdGltYXRlVGV4dEJvdW5kcygpOworCisgICAgY29uc3QgRm9udCogbV9m
b250OworICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOworICAgIGludCBtX2Zyb207CisgICAgaW50
IG1fdG87Cit9OworCitUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6OlRyYW5zcGFy
ZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
CisgICAgY29uc3QgRm9udCogZm9udCwKKyAgICBjb25zdCBUZXh0UnVuJiBydW4sCisgICAgaW50
IGZyb20sIGludCB0bywKKyAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKKyAgICA6IFRyYW5z
cGFyZW5jeUF3YXJlRm9udFBhaW50ZXIoY29udGV4dCwgcG9pbnQpCisgICAgLCBtX2ZvbnQoZm9u
dCkKKyAgICAsIG1fcnVuKHJ1bikKKyAgICAsIG1fZnJvbShmcm9tKQorICAgICwgbV90byh0bykK
K3sKKyAgICBpbml0KCk7Cit9CisKK1RyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcjo6
flRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcigpCit7Cit9CisKK0ludFJlY3QgVHJh
bnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjplc3RpbWF0ZVRleHRCb3VuZHMoKQorewor
ICAgIC8vIFRoaXMgY2FzZSByZWFsbHkgcmVhbGx5IHN1Y2tzLiBUaGVyZSBpcyBubyBjb252ZW5p
ZW50IHdheSB0byBlc3RpbWF0ZQorICAgIC8vIHRoZSBib3VuZGluZyBib3guIFNvIHdlIHJ1biBV
bmlzY3JpYmUgdHdpY2UuIElmIHdlIGZpbmQgdGhpcyBoYXBwZW5zIGEKKyAgICAvLyBsb3QsIHRo
ZSB3YXkgdG8gZml4IGl0IGlzIHRvIG1ha2UgdGhlIGV4dHJhIGxheWVyIGFmdGVyIHRoZQorICAg
IC8vIFVuaXNjcmliZUhlbHBlciBoYXMgbWVhc3VyZWQgdGhlIHRleHQuCisgICAgSW50UG9pbnQg
aW50UG9pbnQobHJvdW5kZihtX3BvaW50LngoKSksCisgICAgICAgICAgICAgICAgICAgICAgbHJv
dW5kZihtX3BvaW50LnkoKSkpOworCisgICAgVW5pc2NyaWJlSGVscGVyVGV4dFJ1biBzdGF0ZSht
X3J1biwgKm1fZm9udCk7CisgICAgaW50IGxlZnQgPSBscm91bmRmKG1fcG9pbnQueCgpKSArIHN0
YXRlLmNoYXJhY3RlclRvWChtX2Zyb20pOworICAgIGludCByaWdodCA9IGxyb3VuZGYobV9wb2lu
dC54KCkpICsgc3RhdGUuY2hhcmFjdGVyVG9YKG1fdG8pOworICAgIAorICAgIC8vIEFkanVzdCBm
b3IgUlRMIHNjcmlwdCBzaW5jZSB3ZSBqdXN0IHdhbnQgdG8ga25vdyB0aGUgdGV4dCBib3VuZHMu
CisgICAgaWYgKGxlZnQgPiByaWdodCkKKyAgICAgICAgc3RkOjpzd2FwKGxlZnQsIHJpZ2h0KTsK
KworICAgIC8vIFRoaXMgYWxnb3JpdGhtIGZvciBlc3RpbWF0aW5nIGhvdyBtdWNoIGV4dHJhIHNw
YWNlIHdlIG5lZWQgKHRoZSB0ZXh0IG1heQorICAgIC8vIGdvIG91dHNpZGUgdGhlIHNlbGVjdGlv
biByZWN0KSBpcyBiYXNlZCByb3VnaGx5IG9uCisgICAgLy8gVHJhbnNwYXJlbmN5QXdhcmVHbHlw
aFBhaW50ZXI6OmVzdGltYXRlVGV4dEJvdW5kcyBhYm92ZS4KKyAgICBjb25zdCBGb250TWV0cmlj
cyYgZm9udE1ldHJpY3MgPSBtX2ZvbnQtPmZvbnRNZXRyaWNzKCk7CisgICAgcmV0dXJuIEludFJl
Y3QobGVmdCAtIChmb250TWV0cmljcy5hc2NlbnQoKSArIGZvbnRNZXRyaWNzLmRlc2NlbnQoKSkg
LyAyLAorICAgICAgICAgICAgICAgICAgIG1fcG9pbnQueSgpIC0gZm9udE1ldHJpY3MuYXNjZW50
KCkgLSBmb250TWV0cmljcy5saW5lR2FwKCksCisgICAgICAgICAgICAgICAgICAgKHJpZ2h0IC0g
bGVmdCkgKyBmb250TWV0cmljcy5hc2NlbnQoKSArIGZvbnRNZXRyaWNzLmRlc2NlbnQoKSwKKyAg
ICAgICAgICAgICAgICAgICBmb250TWV0cmljcy5saW5lU3BhY2luZygpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UKKyNlbmRpZgorCiBib29sIEZvbnQ6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JD
b21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTUsNiArMzgwLDcgQEAgYm9v
bCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5DbwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorI2lmIEVOQUJMRShTS0lBX1RFWFQpCiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLApAQCAtMTEzLDYgKzQzOSwxMDYgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZwogICAgICAgICBwYWludFNraWFUZXh0KGdyYXBoaWNz
Q29udGV4dCwgaGZvbnQsIGN1ckxlbiwgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCAwLCAmb3Jp
Z2luKTsKICAgICB9CiB9CisjZWxzZQorc3RhdGljIHZvaWQgZHJhd0dseXBoc1dpbihHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSB7CisgICAgVHJhbnNw
YXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIgcGFpbnRlcihncmFwaGljc0NvbnRleHQsIGZvbnQsIGds
eXBoQnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsKKworICAgIC8vIFdlIGRyYXcgdGhl
IGdseXBocyBpbiBjaHVua3MgdG8gYXZvaWQgaGF2aW5nIHRvIGRvIGEgaGVhcCBhbGxvY2F0aW9u
IGZvcgorICAgIC8vIHRoZSBhcnJheXMgb2YgY2hhcmFjdGVycyBhbmQgYWR2YW5jZXMuIFNpbmNl
IEV4dFRleHRPdXQgaXMgdGhlCisgICAgLy8gbG93ZXN0LWxldmVsIHRleHQgb3V0cHV0IGZ1bmN0
aW9uIG9uIFdpbmRvd3MsIHRoZXJlIHNob3VsZCBiZSBsaXR0bGUKKyAgICAvLyBwZW5hbHR5IGZv
ciBzcGxpdHRpbmcgdXAgdGhlIHRleHQuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYnVmZmVyIGNh
bm5vdAorICAgIC8vIGJlIGJpZ2dlciB0aGFuIDQwOTQgb3IgdGhlIGZ1bmN0aW9uIHdpbGwgZmFp
bC4KKyAgICBjb25zdCBpbnQga01heEJ1ZmZlckxlbmd0aCA9IDI1NjsKKyAgICBWZWN0b3I8V09S
RCwga01heEJ1ZmZlckxlbmd0aD4gZ2x5cGhzOworICAgIFZlY3RvcjxpbnQsIGtNYXhCdWZmZXJM
ZW5ndGg+IGFkdmFuY2VzOworICAgIGludCBnbHlwaEluZGV4ID0gMDsgLy8gVGhlIHN0YXJ0aW5n
IGdseXBoIG9mIHRoZSBjdXJyZW50IGNodW5rLgorCisgICAgLy8gSW4gb3JkZXIgdG8gcm91bmQg
YWxsIG9mZnNldHMgdG8gdGhlIGNvcnJlY3QgcGl4ZWwgYm91bmRhcnksIHRoaXMgY29kZSBrZWVw
cyB0cmFjayBvZiB0aGUgYWJzb2x1dGUgcG9zaXRpb24KKyAgICAvLyBvZiBlYWNoIGdseXBoIGlu
IGZsb2F0aW5nIHBvaW50IHVuaXRzIGFuZCByb3VuZHMgdG8gaW50ZWdlciBhZHZhbmNlcyBhdCB0
aGUgbGFzdCBwb3NzaWJsZSBtb21lbnQuCisKKyAgICBmbG9hdCBob3Jpem9udGFsT2Zmc2V0ID0g
cG9pbnQueCgpOyAvLyBUaGUgZmxvYXRpbmcgcG9pbnQgb2Zmc2V0IG9mIHRoZSBsZWZ0IHNpZGUg
b2YgdGhlIGN1cnJlbnQgZ2x5cGguCisgICAgaW50IGxhc3RIb3Jpem9udGFsT2Zmc2V0Um91bmRl
ZCA9IGxyb3VuZGYoaG9yaXpvbnRhbE9mZnNldCk7IC8vIFRoZSByb3VuZGVkIG9mZnNldCBvZiB0
aGUgbGVmdCBzaWRlIG9mIHRoZSBsYXN0IGdseXBoIHJlbmRlcmVkLgorICAgIHdoaWxlIChnbHlw
aEluZGV4IDwgbnVtR2x5cGhzKSB7CisgICAgICAgIC8vIEhvdyBtYW55IGNoYXJzIHdpbGwgYmUg
aW4gdGhpcyBjaHVuaz8KKyAgICAgICAgaW50IGN1ckxlbiA9IG1pbihrTWF4QnVmZmVyTGVuZ3Ro
LCBudW1HbHlwaHMgLSBnbHlwaEluZGV4KTsKKyAgICAgICAgZ2x5cGhzLnJlc2l6ZShjdXJMZW4p
OworICAgICAgICBhZHZhbmNlcy5yZXNpemUoY3VyTGVuKTsKKworICAgICAgICBmbG9hdCBjdXJy
ZW50V2lkdGggPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN1ckxlbjsgKytpLCAr
K2dseXBoSW5kZXgpIHsKKyAgICAgICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBo
QXQoZnJvbSArIGdseXBoSW5kZXgpOworICAgICAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSBn
bHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGdseXBoSW5kZXgpOworICAgICAgICAgICAgYWR2
YW5jZXNbaV0gPSBscm91bmRmKGhvcml6b250YWxPZmZzZXQpIC0gbGFzdEhvcml6b250YWxPZmZz
ZXRSb3VuZGVkOworICAgICAgICAgICAgbGFzdEhvcml6b250YWxPZmZzZXRSb3VuZGVkICs9IGFk
dmFuY2VzW2ldOworICAgICAgICAgICAgY3VycmVudFdpZHRoICs9IGdseXBoQnVmZmVyLmFkdmFu
Y2VBdChmcm9tICsgZ2x5cGhJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEJ1
ZyAyNjA4OCAtIHZlcnkgbGFyZ2UgcG9zaXRpdmUgb3IgbmVnYXRpdmUgcnVucyBjYW4gZmFpbCB0
bworICAgICAgICAgICAgLy8gcmVuZGVyIHNvIHdlIGNsYW1wIHRoZSBzaXplIGhlcmUuIEluIHRo
ZSBzcGVjcywgbmVnYXRpdmUKKyAgICAgICAgICAgIC8vIGxldHRlci1zcGFjaW5nIGlzIGltcGxl
bWVudGF0aW9uLWRlZmluZWQsIHNvIHRoaXMgc2hvdWxkIGJlCisgICAgICAgICAgICAvLyBmaW5l
LCBhbmQgaXQgbWF0Y2hlcyBTYWZhcmkncyBpbXBsZW1lbnRhdGlvbi4gVGhlIGNhbGwgYWN0dWFs
bHkKKyAgICAgICAgICAgIC8vIHNlZW1zIHRvIGNyYXNoIGlmIGtNYXhOZWdhdGl2ZVJ1biBpcyBz
ZXQgdG8gc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgLy8gLTMyODMwLCBzbyB3ZSBnaXZl
IG91cnNlbHZlcyBhIGxpdHRsZSBicmVhdGhpbmcgcm9vbS4KKyAgICAgICAgICAgIGNvbnN0IGlu
dCBtYXhOZWdhdGl2ZVJ1biA9IC0zMjc2ODsKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhQb3Np
dGl2ZVJ1biA9ICAzMjc2ODsKKyAgICAgICAgICAgIGlmICgoY3VycmVudFdpZHRoICsgYWR2YW5j
ZXNbaV0gPCBtYXhOZWdhdGl2ZVJ1bikgfHwgKGN1cnJlbnRXaWR0aCArIGFkdmFuY2VzW2ldID4g
bWF4UG9zaXRpdmVSdW4pKSAKKyAgICAgICAgICAgICAgICBhZHZhbmNlc1tpXSA9IDA7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBBY3R1YWxseSBkcmF3IHRoZSBnbHlwaHMgKHdpdGggcmV0cnkg
b24gZmFpbHVyZSkuCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBmb3Ig
KGludCBleGVjdXRpb25zID0gMDsgZXhlY3V0aW9ucyA8IDI7ICsrZXhlY3V0aW9ucykgeworICAg
ICAgICAgICAgc3VjY2VzcyA9IHBhaW50ZXIuZHJhd0dseXBocyhjdXJMZW4sICZnbHlwaHNbMF0s
ICZhZHZhbmNlc1swXSwgaG9yaXpvbnRhbE9mZnNldCAtIHBvaW50LngoKSAtIGN1cnJlbnRXaWR0
aCk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgIWV4ZWN1dGlvbnMpIHsKKyAgICAgICAg
ICAgICAgICAvLyBBc2sgdGhlIGJyb3dzZXIgdG8gbG9hZCB0aGUgZm9udCBmb3IgdXMgYW5kIHJl
dHJ5LgorICAgICAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6ZW5zdXJlRm9udExvYWRlZChm
b250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZHJhdyB0aGUg
Z2x5cGhzIGFmdGVyIHNlY29uZCBhdHRlbXB0Iik7CisgICAgfQorfQorCit2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
IGludCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgIGludCBudW1HbHlwaHMsCisgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgU2tD
b2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmVmZmVjdGl2
ZUZpbGxDb2xvcigpOworICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBTa0NvbG9yR2V0QShjb2xv
cik7CisgICAgLy8gU2tpcCAxMDAlIHRyYW5zcGFyZW50IHRleHQ7IG5vIG5lZWQgdG8gZHJhdyBh
bnl0aGluZy4KKyAgICBpZiAoIWFscGhhICYmIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPmdldFN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UgJiYgIWdyYXBoaWNzQ29udGV4dC0+
aGFzU2hhZG93KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWFscGhhIHx8IHdpbmRvd3ND
YW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhncmFwaGljc0NvbnRleHQpIHx8ICF3aW5kb3dzQ2FuSGFu
ZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KGdyYXBoaWNzQ29udGV4dCkpIHsKKyAgICAgICAg
ZHJhd0dseXBoc1dpbihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBu
dW1HbHlwaHMsIHBvaW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBEcmF3IGlu
IHR3byBwYXNzZXM6IHNraWEgZm9yIHRoZSBzaGFkb3csIEdESSBmb3IgZm9yZWdyb3VuZCB0ZXh0
CisgICAgLy8gcGFzczE6IHNoYWRvdyAod2lsbCB1c2Ugc2tpYSkKKyAgICBncmFwaGljc0NvbnRl
eHQtPnNhdmUoKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJh
bnNwYXJlbnQsIGdyYXBoaWNzQ29udGV4dC0+ZmlsbENvbG9yU3BhY2UoKSk7CisgICAgZHJhd0ds
eXBoc1dpbihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlw
aHMsIHBvaW50KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAvLyBwYXNz
MjogZm9yZWdyb3VuZCB0ZXh0ICh3aWxsIHVzZSBHREkpCisgICAgRmxvYXRTaXplIHNoYWRvd09m
ZnNldDsKKyAgICBmbG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAg
IENvbG9yU3BhY2Ugc2hhZG93Q29sb3JTcGFjZTsKKyAgICBncmFwaGljc0NvbnRleHQtPmdldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNw
YWNlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d0JsdXIsIENvbG9yOjp0cmFuc3BhcmVudCwgc2hhZG93Q29sb3JTcGFjZSk7CisgICAgZHJhd0ds
eXBoc1dpbihncmFwaGljc0NvbnRleHQsIGZvbnQsIGdseXBoQnVmZmVyLCBmcm9tLCBudW1HbHlw
aHMsIHBvaW50KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKK30KKyNlbmRpZgog
CiBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsCkBAIC0xNDgsOSArNTc0LDQwIEBAIHZvaWQgRm9udDo6ZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICBpZiAoIWFscGhhICYmIGdyYXBoaWNzQ29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAg
ICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShTS0lBX1RFWFQpCisgICAgSERDIGhkYyA9IDA7
CisjZWxzZQorICAgIFRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlciBwYWludGVyKGdy
YXBoaWNzQ29udGV4dCwgdGhpcywgcnVuLCBmcm9tLCB0bywgcG9pbnQpOworCisgICAgSERDIGhk
YyA9IHBhaW50ZXIuaGRjKCk7CisgICAgaWYgKHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhn
cmFwaGljc0NvbnRleHQpICYmICFoZGMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRPRE8o
bWFydWVsKTogaHR0cDovL2IvNzAwNDY0IFNldFRleHRDb2xvciBkb2Vzbid0IHN1cHBvcnQgdHJh
bnNwYXJlbmN5LgorICAgIC8vIEVuZm9yY2Ugbm9uLXRyYW5zcGFyZW50IGNvbG9yLgorICAgIGNv
bG9yID0gU2tDb2xvclNldFJHQihTa0NvbG9yR2V0Uihjb2xvciksIFNrQ29sb3JHZXRHKGNvbG9y
KSwgU2tDb2xvckdldEIoY29sb3IpKTsKKyAgICBpZiAoaGRjKSB7CisgICAgICAgIFNldFRleHRD
b2xvcihoZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNvbG9yKSk7CisgICAgICAgIFNldEJr
TW9kZShoZGMsIFRSQU5TUEFSRU5UKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBpcyBhIG5v
bi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmlsbCBjb2xvciBhbmQgc2hhZG93IGNvbG9yIAor
ICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRob3V0IHNraWEuIAorICAgIEZsb2F0U2l6ZSBz
aGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xv
cjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7CisgICAgaWYgKGdyYXBoaWNzQ29u
dGV4dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNo
YWRvd0NvbG9yU3BhY2UpICYmIHdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhncmFwaGlj
c0NvbnRleHQpKSB7CisgICAgICAgIENPTE9SUkVGIHRleHRDb2xvciA9IHNraWE6OlNrQ29sb3JU
b0NPTE9SUkVGKFNrQ29sb3JTZXRBUkdCKDI1NSwgc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0Nv
bG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSkpOworICAgICAgICBDT0xPUlJFRiBzYXZl
ZFRleHRDb2xvciA9IEdldFRleHRDb2xvcihoZGMpOworICAgICAgICBTZXRUZXh0Q29sb3IoaGRj
LCB0ZXh0Q29sb3IpOworICAgICAgICBzdGF0ZS5kcmF3KGdyYXBoaWNzQ29udGV4dCwgaGRjLCBz
dGF0aWNfY2FzdDxpbnQ+KHBvaW50LngoKSkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHBvaW50LnkoKSAtIGZvbnRNZXRyaWNzKCku
YXNjZW50KCkpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpLCBmcm9tLCB0byk7CisgICAgICAgIFNl
dFRleHRDb2xvcihoZGMsIHNhdmVkVGV4dENvbG9yKTsgCisgICAgfQorI2VuZGlmCiAgICAgLy8g
VW5pc2NyaWJlIGNvdW50cyB0aGUgY29vcmRpbmF0ZXMgZnJvbSB0aGUgdXBwZXIgbGVmdCwgd2hp
bGUgV2ViS2l0IHVzZXMKICAgICAvLyB0aGUgYmFzZWxpbmUsIHNvIHdlIGhhdmUgdG8gc3VidHJh
Y3Qgb2ZmIHRoZSBhc2NlbnQuCi0gICAgSERDIGhkYyA9IDA7CiAgICAgc3RhdGUuZHJhdyhncmFw
aGljc0NvbnRleHQsIGhkYywgbHJvdW5kZihwb2ludC54KCkpLCBscm91bmRmKHBvaW50LnkoKSAt
IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpLCBmcm9tLCB0byk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5p
c2NyaWJlSGVscGVyLmNwcAkocmV2aXNpb24gOTcwNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDksNiArMzA5LDkgQEAgdm9pZCBVbmlzY3JpYmVIZWxwZXI6OmRyYXcoR3JhcGhpY3ND
b250ZQogICAgIEhHRElPQkogb2xkRm9udCA9IDA7CiAgICAgaW50IGN1clggPSB4OwogICAgIGJv
b2wgZmlyc3RSdW4gPSB0cnVlOworI2lmICFFTkFCTEUoU0tJQV9URVhUKQorICAgIGJvb2wgdXNl
V2luZG93c0RyYXdpbmcgPSB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmcoZ3JhcGhpY3NDb250
ZXh0KTsKKyNlbmRpZgogCiAgICAgZm9yIChzaXplX3Qgc2NyZWVuSW5kZXggPSAwOyBzY3JlZW5J
bmRleCA8IG1fcnVucy5zaXplKCk7IHNjcmVlbkluZGV4KyspIHsKICAgICAgICAgaW50IGl0ZW1J
bmRleCA9IG1fc2NyZWVuT3JkZXJbc2NyZWVuSW5kZXhdOwpAQCAtMzg3LDE0ICszOTAsMjYgQEAg
dm9pZCBVbmlzY3JpYmVIZWxwZXI6OmRyYXcoR3JhcGhpY3NDb250ZQogICAgICAgICAgICAgLy8g
UGFzcyAwIGluIHdoZW4gdGhlcmUgaXMgbm8ganVzdGlmaWNhdGlvbi4KICAgICAgICAgICAgIGNv
bnN0IGludCoganVzdGlmeSA9IHNoYXBpbmcubV9qdXN0aWZ5LnNpemUoKSA9PSAwID8gMCA6ICZz
aGFwaW5nLm1fanVzdGlmeVtmcm9tR2x5cGhdOwogCisjaWYgRU5BQkxFKFNLSUFfVEVYVCkKICAg
ICAgICAgICAgIGNvbnN0IGludCogYWR2YW5jZXMgPSBzaGFwaW5nLm1fanVzdGlmeS5zaXplKCkg
PwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2p1c3Rp
ZnlbZnJvbUdseXBoXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAmc2hh
cGluZy5tX2FkdmFuY2VbZnJvbUdseXBoXTsKKyNlbHNlCisgICAgICAgICAgICBpZiAodXNlV2lu
ZG93c0RyYXdpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RSdW4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgb2xkRm9udCA9IFNlbGVjdE9iamVjdChkYywgc2hhcGluZy5tX2hmb250KTsK
KyAgICAgICAgICAgICAgICAgICAgZmlyc3RSdW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBzaGFwaW5nLm1faGZv
bnQpOworICAgICAgICAgICAgfQorCisjZW5kaWYKICAgICAgICAgICAgIC8vIEZvbnRzIHdpdGgg
ZGlmZmVyZW50IGFzY2VudHMgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIGRpZmZlcmVudAogICAgICAg
ICAgICAgLy8gcnVucy4gICdBY3Jvc3MtcnVucycgeS1jb29yZGluYXRlIGNvcnJlY3Rpb24gbmVl
ZHMgdG8gYmUKICAgICAgICAgICAgIC8vIGFkanVzdGVkIGZvciBlYWNoIGZvbnQuCiAgICAgICAg
ICAgICBib29sIHRleHRPdXRPayA9IGZhbHNlOwogICAgICAgICAgICAgZm9yIChpbnQgZXhlY3V0
aW9ucyA9IDA7IGV4ZWN1dGlvbnMgPCAyOyArK2V4ZWN1dGlvbnMpIHsKKyNpZiBFTkFCTEUoU0tJ
QV9URVhUKQogICAgICAgICAgICAgICAgIFNrUG9pbnQgb3JpZ2luOwogICAgICAgICAgICAgICAg
IG9yaWdpbi5mWCA9IGN1clggKyArIGlubmVyT2Zmc2V0OwogICAgICAgICAgICAgICAgIG9yaWdp
bi5mWSA9IHkgKyBtX2FzY2VudDsKQEAgLTQwNiw2ICs0MjEsMzIgQEAgdm9pZCBVbmlzY3JpYmVI
ZWxwZXI6OmRyYXcoR3JhcGhpY3NDb250ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JnNoYXBpbmcubV9vZmZzZXRzW2Zyb21HbHlwaF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmb3JpZ2luKTsKICAgICAgICAgICAgICAgICB0ZXh0T3V0T2sgPSB0cnVlOworI2Vsc2UK
KyAgICAgICAgICAgICAgICBpZiAodXNlV2luZG93c0RyYXdpbmcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgSFJFU1VMVCBociA9IFNjcmlwdFRleHRPdXQoZGMsIHNoYXBpbmcubV9zY3JpcHRDYWNo
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyWCAr
IGlubmVyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB5IC0gc2hhcGluZy5tX2FzY2VudE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgJml0ZW0uYSwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcubV9nbHlwaHNbZnJv
bUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2x5cGhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnNoYXBpbmcubV9hZHZhbmNlW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fb2Zmc2V0c1tmcm9tR2x5cGhdKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dE91dE9rID0gKGhyID09IFNfT0spOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNrUG9pbnQgb3JpZ2luOworICAg
ICAgICAgICAgICAgICAgICBvcmlnaW4uZlggPSBjdXJYICsgKyBpbm5lck9mZnNldDsKKyAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luLmZZID0geSArIG1fYXNjZW50OworICAgICAgICAgICAgICAg
ICAgICBwYWludFNraWFUZXh0KGdyYXBoaWNzQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaGFwaW5nLm1faGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2x5cGhDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
c2hhcGluZy5tX2dseXBoc1tmcm9tR2x5cGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZzaGFwaW5nLm1fYWR2YW5jZVtmcm9tR2x5cGhdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fb2Zmc2V0c1tmcm9tR2x5cGhdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZvcmlnaW4pOworICAgICAgICAgICAgICAgICAgICB0
ZXh0T3V0T2sgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgICAg
ICAgICAgaWYgKCF0ZXh0T3V0T2sgJiYgMCA9PSBleGVjdXRpb25zKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIFRleHRPdXQgaXMgY2FsbGVkIGZyb20gdGhlIHJlbmRlcmVyIGl0IG1pZ2h0
IGZhaWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gOTcwNTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzksNiArNTc5LDE3IEBAIGNvbnN0IFNrQml0bWFw
KiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXQKICAgICByZXR1cm4gJm1fY2FudmFzLT5nZXREZXZp
Y2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAorYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lh
Ojppc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkKK3sKKyNpZiBFTkFCTEUoU0tJQV9URVhU
KQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBza2lhOjpTdXBwb3J0c1BsYXRmb3JtUGFp
bnQobV9jYW52YXMpOworI2VuZGlmCit9CisKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0
SW1hZ2VSZXNhbXBsaW5nSGludChJbnRTaXplKiBzcmNTaXplLCBGbG9hdFNpemUqIGRzdFNpemUp
IGNvbnN0CiB7CiAgICAgKnNyY1NpemUgPSBtX2ltYWdlUmVzYW1wbGluZ0hpbnRTcmNTaXplOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHJldmlzaW9uIDk3MDU1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsMTIgQEAgcHVibGljOgogICAgIGJvb2wgcHJpbnRpbmco
KSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgdm9pZCBzZXRQcmludGluZyhib29s
IHApIHsgbV9wcmludGluZyA9IHA7IH0KIAorICAgIC8vIFJldHVybnMgaWYgdGhlIGNvbnRleHQg
YWxsb3dzIHJlbmRlcmluZyBvZiBmb250cyB1c2luZyBuYXRpdmUgcGxhdGZvcm0KKyAgICAvLyBB
UElzLiBJZiBmYWxzZSBpcyByZXR1cm5lZCBmb250IHJlbmRlcmluZyBpcyBwZXJmb3JtZWQgdXNp
bmcgdGhlIHNraWEKKyAgICAvLyB0ZXh0IGRyYXdpbmcgQVBJcy4KKyAgICAvLyBpZiBTS0lBX1RF
WFQgaXMgZW5hYmxlZCwgdGhpcyBhbHdheXMgcmV0dXJucyBmYWxzZQorICAgIGJvb2wgaXNOYXRp
dmVGb250UmVuZGVyaW5nQWxsb3dlZCgpOworCiAgICAgdm9pZCBnZXRJbWFnZVJlc2FtcGxpbmdI
aW50KEludFNpemUqIHNyY1NpemUsIEZsb2F0U2l6ZSogZHN0U2l6ZSkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRJbWFnZVJlc2FtcGxpbmdIaW50KGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEZs
b2F0U2l6ZSYgZHN0U2l6ZSk7CiAgICAgdm9pZCBjbGVhckltYWdlUmVzYW1wbGluZ0hpbnQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
U2tpYUZvbnRXaW4uY3BwCShyZXZpc2lvbiA5NzA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw2MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhRU5BQkxFKFNLSUFfVEVY
VCkKK2Jvb2wgd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRv
d0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgQ29sb3JTcGFjZSBzaGFkb3dDb2xv
clNwYWNlOworCisgICAgYm9vbCBoYXNTaGFkb3cgPSBjb250ZXh0LT5nZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSk7CisgICAg
cmV0dXJuICFoYXNTaGFkb3cgfHwgKCFzaGFkb3dCbHVyICYmIChzaGFkb3dDb2xvci5hbHBoYSgp
ID09IDI1NSkgJiYgKGNvbnRleHQtPmZpbGxDb2xvcigpLmFscGhhKCkgPT0gMjU1KSk7Cit9CisK
K2Jvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBpZiAoIXdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZ1dpdGhvdXRTaGFkb3co
Y29udGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIGZvciBzaGFk
b3cgZWZmZWN0cy4KKyAgICBpZiAoIXdpbmRvd3NDYW5IYW5kbGVEcmF3VGV4dFNoYWRvdyhjb250
ZXh0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91dFNoYWRvdyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgLy8gQ2hlY2sgZm9yIG5vbi10cmFuc2xhdGlvbiB0cmFuc2Zv
cm1zLiBTb21ldGltZXMgem9vbXMgd2lsbCBsb29rIGJldHRlciBpbgorICAgIC8vIFNraWEsIGFu
ZCBzb21ldGltZXMgYmV0dGVyIGluIFdpbmRvd3MuIFRoZSBtYWluIHByb2JsZW0gaXMgdGhhdCB6
b29taW5nCisgICAgLy8gaW4gdXNpbmcgU2tpYSB3aWxsIHNob3cgeW91IHRoZSBoaW50ZWQgb3V0
bGluZXMgZm9yIHRoZSBzbWFsbGVyIHNpemUsCisgICAgLy8gd2hpY2ggbG9vayB3ZWlyZC4gQWxs
IGVsc2UgYmVpbmcgZXF1YWwsIGl0J3MgYmV0dGVyIHRvIHVzZSBXaW5kb3dzJyB0ZXh0CisgICAg
Ly8gZHJhd2luZywgc28gd2UgZG9uJ3QgY2hlY2sgZm9yIHpvb21zLgorICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgbWF0cml4ID0gY29udGV4dC0+Z2V0Q1RNKCk7CisgICAgaWYgKG1hdHJpeC5i
KCkgfHwgbWF0cml4LmMoKSkgLy8gQ2hlY2sgZm9yIHNrZXcuCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIENoZWNrIGZvciBzdHJva2UgZWZmZWN0cy4KKyAgICBpZiAoY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmdldFRleHREcmF3aW5nTW9kZSgpICE9IFRleHRNb2RlRmlsbCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIGdyYWRpZW50cy4KKyAg
ICBpZiAoY29udGV4dC0+ZmlsbEdyYWRpZW50KCkgfHwgY29udGV4dC0+c3Ryb2tlR3JhZGllbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIHBhdHRlcm5zLgor
ICAgIGlmIChjb250ZXh0LT5maWxsUGF0dGVybigpIHx8IGNvbnRleHQtPnN0cm9rZVBhdHRlcm4o
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBza2lh
RHJhd1RleHQoU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTa1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICBTa1BhaW50KiBwYWlu
dCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRX
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NraWFGb250V2luLmgJKHJldmlzaW9uIDk3MDU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSAr
MzQsNDAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8dXNwMTAuaD4KIAotY2xh
c3MgU2tQb2ludDsKK3N0cnVjdCBTa1BvaW50OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIFBsYXRmb3JtQ29udGV4dFNraWE7CisKKyNpZiAh
RU5BQkxFKFNLSUFfVEVYVCkKKy8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgZm9yIG1v
cmUgY29tcGxleCBmb250IGRyYXdpbmcgKGVmZmVjdHMgc3VjaCBhcworLy8gc3Ryb2tpbmcgYW5k
IG1vcmUgY29tcGxleCB0cmFuc2Zvcm1zKSB0aGFuIFdpbmRvd3Mgc3VwcG9ydHMgZGlyZWN0bHku
IFNpbmNlCisvLyBXaW5kb3dzIGRyYXdpbmcgaXMgZmFzdGVyIHlvdSBzaG91bGQgdXNlIHdpbmRv
d3NDYW5IYW5kbGVUZXh0RHJhd2luZyBmaXJzdCB0bworLy8gY2hlY2sgaWYgdXNpbmcgU2tpYSBp
cyByZXF1aXJlZCBhdCBhbGwuCisvLyBOb3RlIHRoYXQgdGhlIHRleHQgd2lsbCBsb29rIGRpZmZl
cmVudCAobm8gQ2xlYXJUeXBlKSBzbyB0aGlzIHNob3VsZCBvbmx5IGJlCisvLyB1c2VkIHdoZW4g
bmVjZXNzYXJ5LgorLy8KKy8vIFdoZW4geW91IGNhbGwgYSBTa2lhKiB0ZXh0IGRyYXdpbmcgZnVu
Y3Rpb24sIHZhcmlvdXMgZ2x5cGggb3V0bGluZXMgd2lsbCBiZQorLy8gY2FjaGVkLiBBcyBhIHJl
c3VsdCwgeW91IHNob3VsZCBjYWxsIFNraWFXaW5PdXRsaW5lQ2FjaGU6OnJlbW92ZVBhdGhzRm9y
Rm9udAorLy8gd2hlbiB0aGUgZm9udCBpcyBkZXN0cm95ZWQgc28gdGhhdCB0aGUgY2FjaGUgZG9l
cyBub3Qgb3V0bGl2ZSB0aGUgZm9udCAoc2luY2UKKy8vIHRoZSBIRk9OVHMgYXJlIHJlY3ljbGVk
KS4KKy8vCisvLyBSZW1lbWJlciB0aGF0IFNraWEncyB0ZXh0IGRyYXdpbmcgb3JpZ2luIGlzIHRo
ZSBiYXNlbGluZSwgbGlrZSBXZWJLaXQsIG5vdAorLy8gdGhlIHRvcCwgbGlrZSBXaW5kb3dzLgor
CisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZpbGxDb2xvciBhbmQgc2hhZG93Q29sb3IgYXJlIG9w
YXF1ZSBhbmQgdGhlIHRleHQtc2hhZG93CisvLyBpcyBub3QgYmx1cnJlZC4KK2Jvb2wgd2luZG93
c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KEdyYXBoaWNzQ29udGV4dCopOworCisvLyBSZXR1cm5z
IHRydWUgaWYgYWR2YW5jZWQgZm9udCByZW5kZXJpbmcgaXMgcmVjb21tZW5kZWQuCitib29sIHdp
bmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhHcmFwaGljc0NvbnRleHQqKTsKKworLy8gUmV0dXJu
cyB0cnVlIGlmIGFkdmFuY2VkIGZvbnQgcmVuZGVyaW5nIGlzIHJlY29tbWVuZGVkIGlmIHNoYWRv
d3MgYXJlCisvLyBkaXNyZWdhcmRlZC4KK2Jvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5n
V2l0aG91dFNoYWRvdyhHcmFwaGljc0NvbnRleHQqKTsKKyNlbmRpZgogCiAvLyBOb3RlIHRoYXQg
dGhlIG9mZnNldHMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiAgSWYgbm90IE5VTEwgaXQgcmVwcmVz
ZW50cyBhCiAvLyBwZXIgZ2x5cGggb2Zmc2V0IChzdWNoIGFzIHJldHVybmVkIGJ5IFNjcmlwdFBs
YWNlIFdpbmRvd3MgQVBJIGZ1bmN0aW9uKS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CShyZXZpc2lvbiA5NzA3OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTAtMTAgIE1pa2UgUmVlZCAgPHJl
ZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRleHQgYmVo
aW5kIGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMS0xMC0xMCAgRG9taW5pYyBNYXp6b25p
ICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIEdldCByaWQgb2Yg
V2ViQWNjZXNzaWJpbGl0eUNhY2hlLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0
dXJlcy5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMu
Z3lwaQkocmV2aXNpb24gOTcwNTUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVz
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAKICAgICAgICdFTkFCTEVfU0FO
REJPWD0xJywKICAgICAgICdFTkFCTEVfU0hBUkVEX1dPUktFUlM9MScsCiAgICAgICAnRU5BQkxF
X1NLSUFfR1BVPTwodXNlX3NraWFfZ3B1KScsCisgICAgICAnRU5BQkxFX1NLSUFfVEVYVD08KGVu
YWJsZV9za2lhX3RleHQpJywKICAgICAgICdFTkFCTEVfU01PT1RIX1NDUk9MTElORz0xJywKICAg
ICAgICdFTkFCTEVfU1FMX0RBVEFCQVNFPTEnLAogICAgICAgJ0VOQUJMRV9TVkc9PChlbmFibGVf
c3ZnKScsCkBAIC0xMDksNiArMTEwLDcgQEAKICAgICAndmFyaWFibGVzJzogewogICAgICAgJ3Vz
ZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyUnOiAxLAogICAgICAgJ3VzZV90aHJlYWRlZF9jb21w
b3NpdGluZyUnOiAwLAorICAgICAgJ2VuYWJsZV9za2lhX3RleHQlJzogMCwKICAgICAgICdlbmFi
bGVfc3ZnJSc6IDEsCiAgICAgICAnZW5hYmxlX3RvdWNoX2V2ZW50cyUnOiAxLAogICAgICAgJ3Vz
ZV9za2lhX2dwdSUnOiAwLApAQCAtMTE4LDYgKzEyMCw3IEBACiAgICAgfSwKICAgICAndXNlX2Fj
Y2VsZXJhdGVkX2NvbXBvc2l0aW5nJSc6ICc8KHVzZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZykn
LAogICAgICd1c2VfdGhyZWFkZWRfY29tcG9zaXRpbmclJzogJzwodXNlX3RocmVhZGVkX2NvbXBv
c2l0aW5nKScsCisgICAgJ2VuYWJsZV9za2lhX3RleHQlJzogJzwoZW5hYmxlX3NraWFfdGV4dCkn
LAogICAgICdlbmFibGVfc3ZnJSc6ICc8KGVuYWJsZV9zdmcpJywKICAgICAnZW5hYmxlX3RvdWNo
X2V2ZW50cyUnOiAnPChlbmFibGVfdG91Y2hfZXZlbnRzKScsCiAgICAgJ3VzZV9za2lhJSc6ICc8
KHVzZV9za2lhKScsCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NzA3OSkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDExLTEwLTEwICBNaWtl
IFJlZWQgIDxyZWVkQGdvb2dsZS5jb20+CisKKyAgICAgICAgcmUtYWRkIHN1cHBvcnQgZm9yIEdE
SSB0ZXh0IGJlaGluZCBhIGNvbXBpbGUgZmxhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dDoKKwogMjAxMS0xMC0xMCAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFN0eWxlIGZvciB1cGRhdGVkIGR1ZSB0byBpbmFiaWxpdHkgdG8gbG9jYXRl
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBl
Y3RhdGlvbnMudHh0CShyZXZpc2lvbiA5NzA1NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTM2NCw2ICsx
MzY0LDE0IEBAIEJVR0NSMTA0MzAgTElOVVggV0lOIDogc3ZnL1czQy1TVkctMS4xL3QKIC8vIFRo
aXMgdGVzdCBhbHNvIHN0YXJ0ZWQgZmFpbGluZyB3aXRoIHRoZSBtZXJnZSBvZiBNYXJjaCAyNXRo
IDIwMDkKIEJVR0NSMTA0NDEgTUFDIFdJTiA6IHRyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2
ZW50LXRyYW5zZm9ybS5odG1sID0gUEFTUyBURVhUCiAKKy8vIERpc2FibGUgdGhlc2Ugd2hpbGUg
d2UncmUgYmFjayB0byB1c2luZyBHREkgZm9yIHRleHQgZHJhd2luZy4gVGhlc2UgZ2l2ZSBzbGln
aHRseQorLy8gZGlmZmVyZW50IHJlc3VsdHMgdGhhbiB3aXRoIFNraWEuIFdoZW4gd2Ugc3dpdGNo
IGJhY2sgdG8gU2tpYSwgd2UgY2FuCisvLyByZWVuYWJsZSB0aGVzZS4KK0JVR0NSOTk1MDAgV0lO
IDogbWVkaWEvYXVkaW8tcmVwYWludC5odG1sID0gSU1BR0UKK0JVR0NSOTk1MDAgV0lOIDogc3Zn
L2FzLWJhY2tncm91bmQtaW1hZ2UvYW5pbWF0ZWQtc3ZnLWFzLWJhY2tncm91bmQuaHRtbCA9IElN
QUdFCitCVUdDUjk5NTAwIFdJTiA6IHN2Zy9iYXRpay90ZXh0L3RleHRTdHlsZXMuc3ZnID0gSU1B
R0UKK0JVR0NSOTk1MDAgV0lOIDogc3ZnL2N1c3RvbS9zaW1wbGUtdGV4dC1kb3VibGUtc2hhZG93
LnN2ZyA9IElNQUdFCisKIC8vIE1lcmdlIDQxNzY4OjQxODA3CiAvLyBQZXJoYXBzIGp1c3QgbmVl
ZHMgbmV3IGJhc2VsaW5lPwogLy8gVGhlc2UgdGVzdHMgd2VyZSByZWJhc2VsaW5lZCB3aXRoIGZh
aWx1cmUgbG9uZyBhZ28uIFdlIHNob3VsZG4ndCBkbyB0aGlzLCBhbmQKQEAgLTIwNTMsNyArMjA2
MSw2IEBAIEJVR1dLNjUyMDMgV0lOIDogc3ZnL3pvb20vdGV4dC96b29tLWhpeGkKIAogLy8gT24g
WFAsIHNvbWUgZ2x5cGhzIHNob3cgc3VicGl4ZWwgYW50aWFsaWFzaW5nIHdoZW4gdGhleSBzaG91
bGRuJ3QKIEJVR1dLNjUyMDMgWFAgOiBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9iaWRpLW1pcnJv
ci1oZS1hci5odG1sID0gSU1BR0UKLUJVR1dLNjUyMDMgWFAgOiBzdmcvYmF0aWsvdGV4dC90ZXh0
U3R5bGVzLnN2ZyA9IElNQUdFCiAKIEJVR1dLNDI0MjggTElOVVggV0lOIDogc3ZnL1czQy1TVkct
MS4xL2ZpbHRlcnMtY29udi0wMS1mLnN2ZyA9IElNQUdFK1RFWFQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110390</attachid>
            <date>2011-10-10 13:30:09 -0700</date>
            <delta_ts>2011-10-13 15:07:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69530-20111010163007.patch</filename>
            <type>text/plain</type>
            <size>36676</size>
            <attacher name="Mike Reed">reed</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MDc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMTAtMTAgIE1pa2UgUmVl
ZCAgPHJlZWRAZ29vZ2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRl
eHQgYmVoaW5kIGEgY29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJldmVydHMgYmFjayB0byB1c2luZyBHREkgZm9yIHRleHQgKHdoZW4g
cG9zc2libGUpCisgICAgICAgIGJ1dCBrZWVwcyBza2lhLXRleHQgdmVyc2lvbiBiZWhpbmQgYSBj
b21waWxlLWZsYWcuIElmL3doZW4gd2UgY2FuCisgICAgICAgIHJlc29sdmUgdGhlIG91dHN0YW5k
aW5nIHNvZnQtY2xpcCBhbmQgaW50bC1wZXJmb3JtYW5jZSBidWdzIHdpdGggdGhlCisgICAgICAg
IHNraWEgdmVyc2lvbiwgd2UgbWF5IGNoYW5nZSB0aGUgY29tcGlsZS1mbGFnIHRvIHJlZW5hYmxl
IHNraWEuCisgICAgICAgIAorICAgICAgICBQcmV2aW91cyBjaGFuZ2UgaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9jaGFuZ2VzZXQvOTQ1ODkgcmVtb3ZlZCB0aGUgR0RJIGNvZGUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdh
cmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZv
bnRQYWludGVyOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9u
dFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREkp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcjo6flRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJl
bmN5QXdhcmVHbHlwaFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5j
eUF3YXJlR2x5cGhQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5
QXdhcmVHbHlwaFBhaW50ZXI6OmVzdGltYXRlVGV4dEJvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFp
bnRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZv
bnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6OmhkYyk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lB
d2FyZVVuaXNjcmliZVBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3Bh
cmVuY3lBd2FyZVVuaXNjcmliZVBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2FyZVVuaXNjcmliZVBh
aW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6
VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjplc3RpbWF0ZVRleHRCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6ZHJhd0dseXBoc1dpbik6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUhlbHBlcjo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93
ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6d2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OndpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyk6CisgICAgICAgIChXZWJD
b3JlOjp3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmg6CisKIDIwMTEtMTAtMTAgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lP
Tig5NjA3MCkgMjUlIGludGwxIFBMVCByZWdyZXNzaW9uIGZyb20gc2Nyb2xsYmFyIGludmFsaWRh
dGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dENocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA5NzA1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwzMzUgQEAKICNpbmNsdWRlICJTa2lh
Rm9udFdpbi5oIgogI2luY2x1ZGUgIlVuaXNjcmliZUhlbHBlclRleHRSdW4uaCIKIAorI2lmICFF
TkFCTEUoU0tJQV9URVhUKQorI2luY2x1ZGUgIlRyYW5zcGFyZW5jeVdpbi5oIgorI2luY2x1ZGUg
InNraWEvZXh0L3NraWFfdXRpbHNfd2luLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYg
IUVOQUJMRShTS0lBX1RFWFQpCituYW1lc3BhY2UgeworCitib29sIGNhbnZhc0hhc011bHRpcGxl
TGF5ZXJzKGNvbnN0IFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgU2tDYW52YXM6OkxheWVySXRl
ciBpdGVyKGNvbnN0X2Nhc3Q8U2tDYW52YXMqPihjYW52YXMpLCBmYWxzZSk7CisgICAgaXRlci5u
ZXh0KCk7IC8vIFRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgbGF5ZXIuCisgICAgcmV0dXJu
ICFpdGVyLmRvbmUoKTsgLy8gVGhlcmUgaXMgPiAxIGxheWVyIGlmIHRoZSB0aGUgaXRlcmF0b3Ig
Y2FuIHN0aWwgYWR2YW5jZS4KK30KKworY2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
ciB7CitwdWJsaWM6CisgICAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgflRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXIoKTsKKworcHJvdGVjdGVkOgorICAgIC8vIENhbGxlZCBieSBvdXIgc3ViY2xhc3MnIGNv
bnN0cnVjdG9yIHRvIGluaXRpYWxpemUgR0RJIGlmIG5lY2Vzc2FyeS4gVGhpcworICAgIC8vIGlz
IGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGNhbGxlZCBhZnRlciB0aGUgc3ViY2xh
c3MgZmluaXNoZXMKKyAgICAvLyBjb25zdHJ1Y3Rpb24gKGl0IGNhbGxzIHZpcnR1YWwgZnVuY3Rp
b25zKS4KKyAgICB2b2lkIGluaXQoKTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0ZVRl
eHRCb3VuZHMoKSA9IDA7CisKKyAgICAvLyBVc2UgdGhlIGNvbnRleHQgZnJvbSB0aGUgdHJhbnNw
YXJlbmN5IGhlbHBlciB3aGVuIGRyYXdpbmcgd2l0aCBHREkuIEl0CisgICAgLy8gbWF5IHBvaW50
IHRvIGEgdGVtcG9yYXJ5IG9uZS4KKyAgICBHcmFwaGljc0NvbnRleHQqIG1fZ3JhcGhpY3NDb250
ZXh0OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBtX3BsYXRmb3JtQ29udGV4dDsKKwor
ICAgIEZsb2F0UG9pbnQgbV9wb2ludDsKKworICAgIC8vIFNldCB3aGVuIFdpbmRvd3MgY2FuIGhh
bmRsZSB0aGUgdHlwZSBvZiBkcmF3aW5nIHdlJ3JlIGRvaW5nLgorICAgIGJvb2wgbV91c2VHREk7
CisKKyAgICAvLyBUaGVzZSBtZW1iZXJzIGFyZSB2YWxpZCBvbmx5IHdoZW4gbV91c2VHREkgaXMg
c2V0LgorICAgIEhEQyBtX2hkYzsKKyAgICBUcmFuc3BhcmVuY3lXaW4gbV90cmFuc3BhcmVuY3k7
CisKK3ByaXZhdGU6CisgICAgLy8gQ2FsbCB3aGVuIHdlJ3JlIHVzaW5nIEdESSBtb2RlIHRvIGlu
aXRpYWxpemUgdGhlIFRyYW5zcGFyZW5jeVdpbiB0byBoZWxwCisgICAgLy8gdXMgZHJhdyBHREkg
dGV4dC4KKyAgICB2b2lkIGluaXRpYWxpemVGb3JHREkoKTsKKworICAgIGJvb2wgbV9jcmVhdGVk
VHJhbnNwYXJlbmN5TGF5ZXI7IC8vIFdlIGNyZWF0ZWQgYSBsYXllciB0byBnaXZlIHRoZSBmb250
IHNvbWUgYWxwaGEuCit9OworCitUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3Bh
cmVuY3lBd2FyZUZvbnRQYWludGVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCisgICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQorICAg
ICwgbV9wbGF0Zm9ybUNvbnRleHQoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCisgICAgLCBt
X3BvaW50KHBvaW50KQorICAgICwgbV91c2VHREkod2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5n
KGNvbnRleHQpKQorICAgICwgbV9oZGMoMCkKKyAgICAsIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxh
eWVyKGZhbHNlKQoreworfQorCit2b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6Omlu
aXQoKQoreworICAgIGlmIChtX3VzZUdESSkKKyAgICAgICAgaW5pdGlhbGl6ZUZvckdESSgpOwor
fQorCit2b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OmluaXRpYWxpemVGb3JHREko
KQoreworICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgU2tDb2xvciBjb2xvciA9
IG1fcGxhdGZvcm1Db250ZXh0LT5lZmZlY3RpdmVGaWxsQ29sb3IoKTsKKyAgICAvLyBVc2VkIG9u
bHkgd2hlbiBtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllciBpcyB0cnVlLgorICAgIGZsb2F0IGxh
eWVyQWxwaGEgPSAwLjBmOworICAgIGlmIChTa0NvbG9yR2V0QShjb2xvcikgIT0gMHhGRikgewor
ICAgICAgICAvLyBXaGVuIHRoZSBmb250IGhhcyBzb21lIHRyYW5zcGFyZW5jeSwgYXBwbHkgaXQg
YnkgY3JlYXRpbmcgYSBuZXcKKyAgICAgICAgLy8gdHJhbnNwYXJlbmN5IGxheWVyIHdpdGggdGhh
dCBvcGFjaXR5IGFwcGxpZWQuIFdlJ2xsIGFjdHVhbGx5IGNyZWF0ZQorICAgICAgICAvLyBhIG5l
dyB0cmFuc3BhcmVuY3kgbGF5ZXIgYWZ0ZXIgd2UgY2FsY3VsYXRlIHRoZSBib3VuZGluZyBib3gu
CisgICAgICAgIG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyID0gdHJ1ZTsKKyAgICAgICAgbGF5
ZXJBbHBoYSA9IFNrQ29sb3JHZXRBKGNvbG9yKSAvIDI1NS4wZjsKKyAgICAgICAgLy8gVGhlIGNv
bG9yIHNob3VsZCBiZSBvcGFxdWUgbm93LgorICAgICAgICBjb2xvciA9IFNrQ29sb3JTZXRSR0Io
U2tDb2xvckdldFIoY29sb3IpLCBTa0NvbG9yR2V0Ryhjb2xvciksIFNrQ29sb3JHZXRCKGNvbG9y
KSk7CisgICAgfQorCisgICAgVHJhbnNwYXJlbmN5V2luOjpMYXllck1vZGUgbGF5ZXJNb2RlOwor
ICAgIEludFJlY3QgbGF5ZXJSZWN0OworICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC0+aXNEcmF3
aW5nVG9JbWFnZUJ1ZmZlcigpKSB7CisgICAgICAgIC8vIEFzc3VtZSBpZiB3ZSdyZSBkcmF3aW5n
IHRvIGFuIGltYWdlIGJ1ZmZlciB0aGF0IHRoZSBiYWNrZ3JvdW5kCisgICAgICAgIC8vIGlzIG5v
dCBvcGFxdWUgYW5kIHdlIGhhdmUgdG8gdW5kbyBDbGVhclR5cGUuIFdlIG1heSB3YW50IHRvCisg
ICAgICAgIC8vIGVuaGFuY2UgdGhpcyB0byBhY3R1YWxseSBjaGVjaywgc2luY2UgaXQgd2lsbCBv
ZnRlbiBiZSBvcGFxdWUKKyAgICAgICAgLy8gYW5kIHdlIGNvdWxkIGRvIENsZWFyVHlwZSBpbiB0
aGF0IGNhc2UuCisgICAgICAgIGxheWVyTW9kZSA9IFRyYW5zcGFyZW5jeVdpbjo6VGV4dENvbXBv
c2l0ZTsKKyAgICAgICAgbGF5ZXJSZWN0ID0gZXN0aW1hdGVUZXh0Qm91bmRzKCk7CisgICAgICAg
IG1fZ3JhcGhpY3NDb250ZXh0LT5jbGlwKGxheWVyUmVjdCk7CisgICAgICAgIGlmIChtX2NyZWF0
ZWRUcmFuc3BhcmVuY3lMYXllcikKKyAgICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKGxheWVyQWxwaGEpOworCisgICAgICAgIC8vIFRoZSB0cmFuc3Bh
cmVuY3kgaGVscGVyIHJlcXVpcmVzIHRoYXQgd2UgZHJhdyB0ZXh0IGluIGJsYWNrIGluCisgICAg
ICAgIC8vIHRoaXMgbW9kZSBhbmQgaXQgd2lsbCBhcHBseSB0aGUgY29sb3IuCisgICAgICAgIG1f
dHJhbnNwYXJlbmN5LnNldFRleHRDb21wb3NpdGVDb2xvcihjb2xvcik7CisgICAgICAgIGNvbG9y
ID0gU2tDb2xvclNldFJHQigwLCAwLCAwKTsKKyAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5z
cGFyZW5jeUxheWVyIHx8IGNhbnZhc0hhc011bHRpcGxlTGF5ZXJzKG1fcGxhdGZvcm1Db250ZXh0
LT5jYW52YXMoKSkpIHsKKyAgICAgICAgLy8gV2hlbiB3ZSdyZSBkcmF3aW5nIGEgd2ViIHBhZ2Us
IHdlIGtub3cgdGhlIGJhY2tncm91bmQgaXMgb3BhcXVlLAorICAgICAgICAvLyBidXQgaWYgd2Un
cmUgZHJhd2luZyB0byBhIGxheWVyLCB3ZSBzdGlsbCBuZWVkIGV4dHJhIHdvcmsuCisgICAgICAg
IGxheWVyTW9kZSA9IFRyYW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXI7CisgICAg
ICAgIGxheWVyUmVjdCA9IGVzdGltYXRlVGV4dEJvdW5kcygpOworICAgICAgICBtX2dyYXBoaWNz
Q29udGV4dC0+Y2xpcChsYXllclJlY3QpOworICAgICAgICBpZiAobV9jcmVhdGVkVHJhbnNwYXJl
bmN5TGF5ZXIpCisgICAgICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihsYXllckFscGhhKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb21tb24gY2Fz
ZSBvZiBkcmF3aW5nIG9udG8gdGhlIGJvdHRvbSBsYXllciBvZiBhIHdlYiBwYWdlOiB3ZQorICAg
ICAgICAvLyBrbm93IGV2ZXJ5dGhpbmcgaXMgb3BhcXVlIHNvIGRvbid0IG5lZWQgdG8gZG8gYW55
dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgbGF5ZXJNb2RlID0gVHJhbnNwYXJlbmN5V2luOjpOb0xh
eWVyOworICAgIH0KKworICAgIC8vIEJ1ZyAyNjA4OCAtIGluaXQoKSBtaWdodCBmYWlsIGlmIGxh
eWVyUmVjdCBpcyBpbnZhbGlkLiBHaXZlbiB0aGlzLCB3ZQorICAgIC8vIG5lZWQgdG8gYmUgY2Fy
ZWZ1bCB0byBjaGVjayBmb3IgbnVsbCBwb2ludGVycyBldmVyeXdoZXJlIGFmdGVyIHRoaXMgY2Fs
bAorICAgIG1fdHJhbnNwYXJlbmN5LmluaXQobV9ncmFwaGljc0NvbnRleHQsIGxheWVyTW9kZSwg
CisgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVuY3lXaW46OktlZXBUcmFuc2Zvcm0s
IGxheWVyUmVjdCk7CisKKyAgICAvLyBTZXQgdXAgdGhlIERDLCB1c2luZyB0aGUgb25lIGZyb20g
dGhlIHRyYW5zcGFyZW5jeSBoZWxwZXIuCisgICAgaWYgKG1fdHJhbnNwYXJlbmN5LnBsYXRmb3Jt
Q29udGV4dCgpKSB7CisgICAgICAgIG1faGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KG1f
dHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSk7CisgICAgICAgIFNldFRl
eHRDb2xvcihtX2hkYywgc2tpYTo6U2tDb2xvclRvQ09MT1JSRUYoY29sb3IpKTsKKyAgICAgICAg
U2V0QmtNb2RlKG1faGRjLCBUUkFOU1BBUkVOVCk7CisgICAgfQorfQorCitUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcigpCit7CisgICAg
aWYgKCFtX3VzZUdESSB8fCAhbV9ncmFwaGljc0NvbnRleHQgfHwgIW1fcGxhdGZvcm1Db250ZXh0
KQorICAgICAgICByZXR1cm47CisgICAgbV90cmFuc3BhcmVuY3kuY29tcG9zaXRlKCk7CisgICAg
aWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyKQorICAgICAgICBtX2dyYXBoaWNzQ29udGV4
dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dC0+cmVzdG9y
ZSgpOworICAgIGlmIChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkKKyAgICAgICAg
c2tpYTo6RW5kUGxhdGZvcm1QYWludChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCkpOworfQorCisvLyBTcGVjaWFsaXphdGlvbiBmb3Igc2ltcGxlIEdseXBoQnVmZmVy
IHBhaW50aW5nLgorY2xhc3MgVHJhbnNwYXJlbmN5QXdhcmVHbHlwaFBhaW50ZXIgOiBwdWJsaWMg
VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlciB7CisgcHVibGljOgorICAgIFRyYW5zcGFyZW5j
eUF3YXJlR2x5cGhQYWludGVyKEdyYXBoaWNzQ29udGV4dCosCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoQnVmZmVyJiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgflRyYW5zcGFyZW5jeUF3
YXJlR2x5cGhQYWludGVyKCk7CisKKyAgICAvLyBEcmF3cyB0aGUgcGFydGlhbCBzdHJpbmcgb2Yg
Z2x5cGhzLCBzdGFydGluZyBhdCB8c3RhcnRBZHZhbmNlfCB0byB0aGUKKyAgICAvLyBsZWZ0IG9m
IG1fcG9pbnQuIFdlIGV4cHJlc3MgaXQgdGhpcyB3YXkgc28gdGhhdCBpZiB3ZSdyZSB1c2luZyB0
aGUgU2tpYQorICAgIC8vIGRyYXdpbmcgcGF0aCB3ZSBjYW4gdXNlIGZsb2F0aW5nLXBvaW50IHBv
c2l0aW9uaW5nLCBldmVuIHRob3VnaCB3ZSBoYXZlCisgICAgLy8gdG8gdXNlIGludGVnZXIgcG9z
aXRpb25pbmcgaW4gdGhlIEdESSBwYXRoLgorICAgIGJvb2wgZHJhd0dseXBocyhpbnQgbnVtR2x5
cGhzLCBjb25zdCBXT1JEKiBnbHlwaHMsIGNvbnN0IGludCogYWR2YW5jZXMsIGZsb2F0IHN0YXJ0
QWR2YW5jZSkgY29uc3Q7CisKKyBwcml2YXRlOgorICAgIHZpcnR1YWwgSW50UmVjdCBlc3RpbWF0
ZVRleHRCb3VuZHMoKTsKKworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnQ7CisgICAg
Y29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7CisgICAgaW50IG1fZnJvbTsKKyAgICBp
bnQgbV9udW1HbHlwaHM7CisKKyAgICAvLyBXaGVuIG1fdXNlR2RpIGlzIHNldCwgdGhpcyBzdG9y
ZXMgdGhlIHByZXZpb3VzIEhGT05UIHNlbGVjdGVkIGludG8gdGhlCisgICAgLy8gbV9oZGMgc28g
d2UgY2FuIHJlc3RvcmUgaXQuCisgICAgSEdESU9CSiBtX29sZEZvbnQ7IC8vIEZvciByZXN0b3Jp
bmcgdGhlIERDIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS4KK307CisKK1RyYW5zcGFyZW5jeUF3YXJl
R2x5cGhQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcigKKyAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsCisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCisgICAg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLAorICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIDogVHJhbnNwYXJlbmN5QXdh
cmVGb250UGFpbnRlcihjb250ZXh0LCBwb2ludCkKKyAgICAsIG1fZm9udChmb250KQorICAgICwg
bV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikKKyAgICAsIG1fZnJvbShmcm9tKQorICAgICwgbV9u
dW1HbHlwaHMobnVtR2x5cGhzKQorICAgICwgbV9vbGRGb250KDApCit7CisgICAgaW5pdCgpOwor
CisgICAgaWYgKG1faGRjKQorICAgICAgICBtX29sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChtX2hk
YywgbV9mb250LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKTsKK30KKworVHJhbnNwYXJlbmN5QXdh
cmVHbHlwaFBhaW50ZXI6On5UcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcigpCit7CisgICAg
aWYgKG1fdXNlR0RJICYmIG1faGRjKQorICAgICAgICA6OlNlbGVjdE9iamVjdChtX2hkYywgbV9v
bGRGb250KTsKK30KKworCisvLyBFc3RpbWF0ZXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgZ2l2
ZW4gdGV4dC4gVGhpcyBpcyBjb3BpZWQgZnJvbQorLy8gRm9udENHV2luLmNwcCwgaXQgaXMgcG9z
c2libGUsIGJ1dCBhIGxvdCBtb3JlIHdvcmssIHRvIGdldCB0aGUgcHJlY2lkZQorLy8gYm91bmRz
LgorSW50UmVjdCBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1hdGVUZXh0Qm91
bmRzKCkKK3sKKyAgICBpbnQgdG90YWxXaWR0aCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX251bUdseXBoczsgaSsrKQorICAgICAgICB0b3RhbFdpZHRoICs9IGxyb3VuZGYobV9nbHlw
aEJ1ZmZlci5hZHZhbmNlQXQobV9mcm9tICsgaSkpOworCisgICAgY29uc3QgRm9udE1ldHJpY3Mm
IGZvbnRNZXRyaWNzID0gbV9mb250LT5mb250TWV0cmljcygpOworICAgIHJldHVybiBJbnRSZWN0
KG1fcG9pbnQueCgpIC0gKGZvbnRNZXRyaWNzLmFzY2VudCgpICsgZm9udE1ldHJpY3MuZGVzY2Vu
dCgpKSAvIDIsCisgICAgICAgICAgICAgICAgICAgbV9wb2ludC55KCkgLSBmb250TWV0cmljcy5h
c2NlbnQoKSAtIGZvbnRNZXRyaWNzLmxpbmVHYXAoKSwKKyAgICAgICAgICAgICAgICAgICB0b3Rh
bFdpZHRoICsgZm9udE1ldHJpY3MuYXNjZW50KCkgKyBmb250TWV0cmljcy5kZXNjZW50KCksCisg
ICAgICAgICAgICAgICAgICAgZm9udE1ldHJpY3MubGluZVNwYWNpbmcoKSk7IAorfQorCitib29s
IFRyYW5zcGFyZW5jeUF3YXJlR2x5cGhQYWludGVyOjpkcmF3R2x5cGhzKGludCBudW1HbHlwaHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdP
UkQqIGdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgaW50KiBhZHZhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRBZHZhbmNlKSBjb25zdAoreworICAgIGlmICghbV91
c2VHREkpIHsKKyAgICAgICAgU2tQb2ludCBvcmlnaW4gPSBtX3BvaW50OworICAgICAgICBvcmln
aW4uZlggKz0gU2tGbG9hdFRvU2NhbGFyKHN0YXJ0QWR2YW5jZSk7CisgICAgICAgIHBhaW50U2tp
YVRleHQobV9ncmFwaGljc0NvbnRleHQsIG1fZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICBudW1HbHlwaHMsIGdseXBocywgYWR2YW5jZXMsIDAsICZv
cmlnaW4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZ3JhcGhp
Y3NDb250ZXh0IHx8ICFtX2hkYykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBXaW5k
b3dzJyBvcmlnaW4gaXMgdGhlIHRvcC1sZWZ0IG9mIHRoZSBib3VuZGluZyBib3gsIHNvIHdlIGhh
dmUKKyAgICAvLyB0byBzdWJ0cmFjdCBvZmYgdGhlIGZvbnQgYXNjZW50IHRvIGdldCBpdC4KKyAg
ICBpbnQgeCA9IGxyb3VuZGYobV9wb2ludC54KCkgKyBzdGFydEFkdmFuY2UpOworICAgIGludCB5
ID0gbHJvdW5kZihtX3BvaW50LnkoKSAtIG1fZm9udC0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7
CisKKyAgICAvLyBJZiB0aGVyZSBpcyBhIG5vbi1ibHVyIHNoYWRvdyBhbmQgYm90aCB0aGUgZmls
bCBjb2xvciBhbmQgc2hhZG93IGNvbG9yIAorICAgIC8vIGFyZSBvcGFxdWUsIGhhbmRsZSB3aXRo
b3V0IHNraWEuIAorICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93
Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9y
U3BhY2U7CisgICAgaWYgKG1fZ3JhcGhpY3NDb250ZXh0LT5nZXRTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSkpIHsKKyAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgYSBzaGFkb3cgYW5kIHRoaXMgY29kZSBpcyByZWFjaGVkLCB3aW5kb3dz
Q2FuSGFuZGxlRHJhd1RleHRTaGFkb3coKQorICAgICAgICAvLyB3aWxsIGhhdmUgYWxyZWFkeSBy
ZXR1cm5lZCB0cnVlIGR1cmluZyB0aGUgY3RvciBpbml0aWF0aXphdGlvbiBvZiBtX3VzZUdESQor
ICAgICAgICBBU1NFUlQoc2hhZG93Q29sb3IuYWxwaGEoKSA9PSAyNTUpOworICAgICAgICBBU1NF
UlQobV9ncmFwaGljc0NvbnRleHQtPmZpbGxDb2xvcigpLmFscGhhKCkgPT0gMjU1KTsKKyAgICAg
ICAgQVNTRVJUKCFzaGFkb3dCbHVyKTsKKyAgICAgICAgQ09MT1JSRUYgdGV4dENvbG9yID0gc2tp
YTo6U2tDb2xvclRvQ09MT1JSRUYoU2tDb2xvclNldEFSR0IoMjU1LCBzaGFkb3dDb2xvci5yZWQo
KSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpKSk7CisgICAgICAgIENP
TE9SUkVGIHNhdmVkVGV4dENvbG9yID0gR2V0VGV4dENvbG9yKG1faGRjKTsKKyAgICAgICAgU2V0
VGV4dENvbG9yKG1faGRjLCB0ZXh0Q29sb3IpOworICAgICAgICBFeHRUZXh0T3V0KG1faGRjLCB4
ICsgc2hhZG93T2Zmc2V0LndpZHRoKCksIHkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCksIEVUT19H
TFlQSF9JTkRFWCwgMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB3Y2hhcl90Kj4oJmdseXBoc1sw
XSksIG51bUdseXBocywgJmFkdmFuY2VzWzBdKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKG1faGRj
LCBzYXZlZFRleHRDb2xvcik7CisgICAgfQorICAgIAorICAgIHJldHVybiAhIUV4dFRleHRPdXQo
bV9oZGMsIHgsIHksIEVUT19HTFlQSF9JTkRFWCwgMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB3
Y2hhcl90Kj4oJmdseXBoc1swXSksIG51bUdseXBocywgJmFkdmFuY2VzWzBdKTsKK30KKworY2xh
c3MgVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyIDogcHVibGljIFRyYW5zcGFyZW5j
eUF3YXJlRm9udFBhaW50ZXIgeworIHB1YmxpYzoKKyAgICBUcmFuc3BhcmVuY3lBd2FyZVVuaXNj
cmliZVBhaW50ZXIoR3JhcGhpY3NDb250ZXh0KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRm9udCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRleHRSdW4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZnJvbSwgaW50IHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgflRyYW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJl
UGFpbnRlcigpOworCisgICAgLy8gVW5pc2NpYmUgd2lsbCBkcmF3IGRpcmVjdGx5IGludG8gb3Vy
IGJ1ZmZlciwgc28gd2UgbmVlZCB0byBleHBvc2Ugb3VyIERDLgorICAgIEhEQyBoZGMoKSBjb25z
dCB7IHJldHVybiBtX2hkYzsgfQorCisgcHJpdmF0ZToKKyAgICB2aXJ0dWFsIEludFJlY3QgZXN0
aW1hdGVUZXh0Qm91bmRzKCk7CisKKyAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3Qg
VGV4dFJ1biYgbV9ydW47CisgICAgaW50IG1fZnJvbTsKKyAgICBpbnQgbV90bzsKK307CisKK1Ry
YW5zcGFyZW5jeUF3YXJlVW5pc2NyaWJlUGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVVbmlzY3Jp
YmVQYWludGVyKAorICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBGb250
KiBmb250LAorICAgIGNvbnN0IFRleHRSdW4mIHJ1biwKKyAgICBpbnQgZnJvbSwgaW50IHRvLAor
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQorICAgIDogVHJhbnNwYXJlbmN5QXdhcmVGb250
UGFpbnRlcihjb250ZXh0LCBwb2ludCkKKyAgICAsIG1fZm9udChmb250KQorICAgICwgbV9ydW4o
cnVuKQorICAgICwgbV9mcm9tKGZyb20pCisgICAgLCBtX3RvKHRvKQoreworICAgIGluaXQoKTsK
K30KKworVHJhbnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdh
cmVVbmlzY3JpYmVQYWludGVyKCkKK3sKK30KKworSW50UmVjdCBUcmFuc3BhcmVuY3lBd2FyZVVu
aXNjcmliZVBhaW50ZXI6OmVzdGltYXRlVGV4dEJvdW5kcygpCit7CisgICAgLy8gVGhpcyBjYXNl
IHJlYWxseSByZWFsbHkgc3Vja3MuIFRoZXJlIGlzIG5vIGNvbnZlbmllbnQgd2F5IHRvIGVzdGlt
YXRlCisgICAgLy8gdGhlIGJvdW5kaW5nIGJveC4gU28gd2UgcnVuIFVuaXNjcmliZSB0d2ljZS4g
SWYgd2UgZmluZCB0aGlzIGhhcHBlbnMgYQorICAgIC8vIGxvdCwgdGhlIHdheSB0byBmaXggaXQg
aXMgdG8gbWFrZSB0aGUgZXh0cmEgbGF5ZXIgYWZ0ZXIgdGhlCisgICAgLy8gVW5pc2NyaWJlSGVs
cGVyIGhhcyBtZWFzdXJlZCB0aGUgdGV4dC4KKyAgICBJbnRQb2ludCBpbnRQb2ludChscm91bmRm
KG1fcG9pbnQueCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBscm91bmRmKG1fcG9pbnQueSgp
KSk7CisKKyAgICBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuIHN0YXRlKG1fcnVuLCAqbV9mb250KTsK
KyAgICBpbnQgbGVmdCA9IGxyb3VuZGYobV9wb2ludC54KCkpICsgc3RhdGUuY2hhcmFjdGVyVG9Y
KG1fZnJvbSk7CisgICAgaW50IHJpZ2h0ID0gbHJvdW5kZihtX3BvaW50LngoKSkgKyBzdGF0ZS5j
aGFyYWN0ZXJUb1gobV90byk7CisgICAgCisgICAgLy8gQWRqdXN0IGZvciBSVEwgc2NyaXB0IHNp
bmNlIHdlIGp1c3Qgd2FudCB0byBrbm93IHRoZSB0ZXh0IGJvdW5kcy4KKyAgICBpZiAobGVmdCA+
IHJpZ2h0KQorICAgICAgICBzdGQ6OnN3YXAobGVmdCwgcmlnaHQpOworCisgICAgLy8gVGhpcyBh
bGdvcml0aG0gZm9yIGVzdGltYXRpbmcgaG93IG11Y2ggZXh0cmEgc3BhY2Ugd2UgbmVlZCAodGhl
IHRleHQgbWF5CisgICAgLy8gZ28gb3V0c2lkZSB0aGUgc2VsZWN0aW9uIHJlY3QpIGlzIGJhc2Vk
IHJvdWdobHkgb24KKyAgICAvLyBUcmFuc3BhcmVuY3lBd2FyZUdseXBoUGFpbnRlcjo6ZXN0aW1h
dGVUZXh0Qm91bmRzIGFib3ZlLgorICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9
IG1fZm9udC0+Zm9udE1ldHJpY3MoKTsKKyAgICByZXR1cm4gSW50UmVjdChsZWZ0IC0gKGZvbnRN
ZXRyaWNzLmFzY2VudCgpICsgZm9udE1ldHJpY3MuZGVzY2VudCgpKSAvIDIsCisgICAgICAgICAg
ICAgICAgICAgbV9wb2ludC55KCkgLSBmb250TWV0cmljcy5hc2NlbnQoKSAtIGZvbnRNZXRyaWNz
LmxpbmVHYXAoKSwKKyAgICAgICAgICAgICAgICAgICAocmlnaHQgLSBsZWZ0KSArIGZvbnRNZXRy
aWNzLmFzY2VudCgpICsgZm9udE1ldHJpY3MuZGVzY2VudCgpLAorICAgICAgICAgICAgICAgICAg
IGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5nKCkpOworfQorCit9IC8vIG5hbWVzcGFjZQorI2VuZGlm
CisKIGJvb2wgRm9udDo6Y2FuUmV0dXJuRmFsbGJhY2tGb250c0ZvckNvbXBsZXhUZXh0KCkKIHsK
ICAgICByZXR1cm4gZmFsc2U7CkBAIC01NSw2ICszODAsNyBAQCBib29sIEZvbnQ6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmFwaHNJbkNvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxF
KFNLSUFfVEVYVCkKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZm
ZXIsCkBAIC0xMTMsNiArNDM5LDEwNiBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBnCiAgICAgICAgIHBhaW50U2tpYVRleHQoZ3JhcGhpY3NDb250ZXh0LCBoZm9udCwg
Y3VyTGVuLCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sIDAsICZvcmlnaW4pOwogICAgIH0KIH0K
KyNlbHNlCitzdGF0aWMgdm9pZCBkcmF3R2x5cGhzV2luKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIHsKKyAgICBUcmFuc3BhcmVuY3lBd2FyZUdseXBo
UGFpbnRlciBwYWludGVyKGdyYXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20s
IG51bUdseXBocywgcG9pbnQpOworCisgICAgLy8gV2UgZHJhdyB0aGUgZ2x5cGhzIGluIGNodW5r
cyB0byBhdm9pZCBoYXZpbmcgdG8gZG8gYSBoZWFwIGFsbG9jYXRpb24gZm9yCisgICAgLy8gdGhl
IGFycmF5cyBvZiBjaGFyYWN0ZXJzIGFuZCBhZHZhbmNlcy4gU2luY2UgRXh0VGV4dE91dCBpcyB0
aGUKKyAgICAvLyBsb3dlc3QtbGV2ZWwgdGV4dCBvdXRwdXQgZnVuY3Rpb24gb24gV2luZG93cywg
dGhlcmUgc2hvdWxkIGJlIGxpdHRsZQorICAgIC8vIHBlbmFsdHkgZm9yIHNwbGl0dGluZyB1cCB0
aGUgdGV4dC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBidWZmZXIgY2Fubm90CisgICAgLy8gYmUg
YmlnZ2VyIHRoYW4gNDA5NCBvciB0aGUgZnVuY3Rpb24gd2lsbCBmYWlsLgorICAgIGNvbnN0IGlu
dCBrTWF4QnVmZmVyTGVuZ3RoID0gMjU2OworICAgIFZlY3RvcjxXT1JELCBrTWF4QnVmZmVyTGVu
Z3RoPiBnbHlwaHM7CisgICAgVmVjdG9yPGludCwga01heEJ1ZmZlckxlbmd0aD4gYWR2YW5jZXM7
CisgICAgaW50IGdseXBoSW5kZXggPSAwOyAvLyBUaGUgc3RhcnRpbmcgZ2x5cGggb2YgdGhlIGN1
cnJlbnQgY2h1bmsuCisKKyAgICAvLyBJbiBvcmRlciB0byByb3VuZCBhbGwgb2Zmc2V0cyB0byB0
aGUgY29ycmVjdCBwaXhlbCBib3VuZGFyeSwgdGhpcyBjb2RlIGtlZXBzIHRyYWNrIG9mIHRoZSBh
YnNvbHV0ZSBwb3NpdGlvbgorICAgIC8vIG9mIGVhY2ggZ2x5cGggaW4gZmxvYXRpbmcgcG9pbnQg
dW5pdHMgYW5kIHJvdW5kcyB0byBpbnRlZ2VyIGFkdmFuY2VzIGF0IHRoZSBsYXN0IHBvc3NpYmxl
IG1vbWVudC4KKworICAgIGZsb2F0IGhvcml6b250YWxPZmZzZXQgPSBwb2ludC54KCk7IC8vIFRo
ZSBmbG9hdGluZyBwb2ludCBvZmZzZXQgb2YgdGhlIGxlZnQgc2lkZSBvZiB0aGUgY3VycmVudCBn
bHlwaC4KKyAgICBpbnQgbGFzdEhvcml6b250YWxPZmZzZXRSb3VuZGVkID0gbHJvdW5kZihob3Jp
em9udGFsT2Zmc2V0KTsgLy8gVGhlIHJvdW5kZWQgb2Zmc2V0IG9mIHRoZSBsZWZ0IHNpZGUgb2Yg
dGhlIGxhc3QgZ2x5cGggcmVuZGVyZWQuCisgICAgd2hpbGUgKGdseXBoSW5kZXggPCBudW1HbHlw
aHMpIHsKKyAgICAgICAgLy8gSG93IG1hbnkgY2hhcnMgd2lsbCBiZSBpbiB0aGlzIGNodW5rPwor
ICAgICAgICBpbnQgY3VyTGVuID0gbWluKGtNYXhCdWZmZXJMZW5ndGgsIG51bUdseXBocyAtIGds
eXBoSW5kZXgpOworICAgICAgICBnbHlwaHMucmVzaXplKGN1ckxlbik7CisgICAgICAgIGFkdmFu
Y2VzLnJlc2l6ZShjdXJMZW4pOworCisgICAgICAgIGZsb2F0IGN1cnJlbnRXaWR0aCA9IDA7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3VyTGVuOyArK2ksICsrZ2x5cGhJbmRleCkgewor
ICAgICAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChmcm9tICsgZ2x5cGhJ
bmRleCk7CisgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFu
Y2VBdChmcm9tICsgZ2x5cGhJbmRleCk7CisgICAgICAgICAgICBhZHZhbmNlc1tpXSA9IGxyb3Vu
ZGYoaG9yaXpvbnRhbE9mZnNldCkgLSBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQ7CisgICAg
ICAgICAgICBsYXN0SG9yaXpvbnRhbE9mZnNldFJvdW5kZWQgKz0gYWR2YW5jZXNbaV07CisgICAg
ICAgICAgICBjdXJyZW50V2lkdGggKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGZyb20gKyBnbHlw
aEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQnVnIDI2MDg4IC0gdmVyeSBs
YXJnZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBydW5zIGNhbiBmYWlsIHRvCisgICAgICAgICAgICAv
LyByZW5kZXIgc28gd2UgY2xhbXAgdGhlIHNpemUgaGVyZS4gSW4gdGhlIHNwZWNzLCBuZWdhdGl2
ZQorICAgICAgICAgICAgLy8gbGV0dGVyLXNwYWNpbmcgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5l
ZCwgc28gdGhpcyBzaG91bGQgYmUKKyAgICAgICAgICAgIC8vIGZpbmUsIGFuZCBpdCBtYXRjaGVz
IFNhZmFyaSdzIGltcGxlbWVudGF0aW9uLiBUaGUgY2FsbCBhY3R1YWxseQorICAgICAgICAgICAg
Ly8gc2VlbXMgdG8gY3Jhc2ggaWYga01heE5lZ2F0aXZlUnVuIGlzIHNldCB0byBzb21ld2hlcmUg
YXJvdW5kCisgICAgICAgICAgICAvLyAtMzI4MzAsIHNvIHdlIGdpdmUgb3Vyc2VsdmVzIGEgbGl0
dGxlIGJyZWF0aGluZyByb29tLgorICAgICAgICAgICAgY29uc3QgaW50IG1heE5lZ2F0aXZlUnVu
ID0gLTMyNzY4OworICAgICAgICAgICAgY29uc3QgaW50IG1heFBvc2l0aXZlUnVuID0gIDMyNzY4
OworICAgICAgICAgICAgaWYgKChjdXJyZW50V2lkdGggKyBhZHZhbmNlc1tpXSA8IG1heE5lZ2F0
aXZlUnVuKSB8fCAoY3VycmVudFdpZHRoICsgYWR2YW5jZXNbaV0gPiBtYXhQb3NpdGl2ZVJ1bikp
IAorICAgICAgICAgICAgICAgIGFkdmFuY2VzW2ldID0gMDsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEFjdHVhbGx5IGRyYXcgdGhlIGdseXBocyAod2l0aCByZXRyeSBvbiBmYWlsdXJlKS4KKyAg
ICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGV4ZWN1dGlvbnMg
PSAwOyBleGVjdXRpb25zIDwgMjsgKytleGVjdXRpb25zKSB7CisgICAgICAgICAgICBzdWNjZXNz
ID0gcGFpbnRlci5kcmF3R2x5cGhzKGN1ckxlbiwgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCBo
b3Jpem9udGFsT2Zmc2V0IC0gcG9pbnQueCgpIC0gY3VycmVudFdpZHRoKTsKKyAgICAgICAgICAg
IGlmICghc3VjY2VzcyAmJiAhZXhlY3V0aW9ucykgeworICAgICAgICAgICAgICAgIC8vIEFzayB0
aGUgYnJvd3NlciB0byBsb2FkIHRoZSBmb250IGZvciB1cyBhbmQgcmV0cnkuCisgICAgICAgICAg
ICAgICAgUGxhdGZvcm1TdXBwb3J0OjplbnN1cmVGb250TG9hZGVkKGZvbnQtPnBsYXRmb3JtRGF0
YSgpLmhmb250KCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBkcmF3IHRoZSBnbHlwaHMgYWZ0ZXIgc2Vj
b25kIGF0dGVtcHQiKTsKKyAgICB9Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sCisgICAg
ICAgICAgICAgICAgICAgICAgaW50IG51bUdseXBocywKKyAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBTa0NvbG9yIGNvbG9yID0gZ3Jh
cGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZWZmZWN0aXZlRmlsbENvbG9yKCk7Cisg
ICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IFNrQ29sb3JHZXRBKGNvbG9yKTsKKyAgICAvLyBTa2lw
IDEwMCUgdHJhbnNwYXJlbnQgdGV4dDsgbm8gbmVlZCB0byBkcmF3IGFueXRoaW5nLgorICAgIGlm
ICghYWxwaGEgJiYgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0U3Ryb2tl
U3R5bGUoKSA9PSBOb1N0cm9rZSAmJiAhZ3JhcGhpY3NDb250ZXh0LT5oYXNTaGFkb3coKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghYWxwaGEgfHwgd2luZG93c0NhbkhhbmRsZURyYXdUZXh0
U2hhZG93KGdyYXBoaWNzQ29udGV4dCkgfHwgIXdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZ1dp
dGhvdXRTaGFkb3coZ3JhcGhpY3NDb250ZXh0KSkgeworICAgICAgICBkcmF3R2x5cGhzV2luKGdy
YXBoaWNzQ29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIERyYXcgaW4gdHdvIHBhc3Nlczogc2tp
YSBmb3IgdGhlIHNoYWRvdywgR0RJIGZvciBmb3JlZ3JvdW5kIHRleHQKKyAgICAvLyBwYXNzMTog
c2hhZG93ICh3aWxsIHVzZSBza2lhKQorICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCwgZ3JhcGhp
Y3NDb250ZXh0LT5maWxsQ29sb3JTcGFjZSgpKTsKKyAgICBkcmF3R2x5cGhzV2luKGdyYXBoaWNz
Q29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAg
IGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOworICAgIC8vIHBhc3MyOiBmb3JlZ3JvdW5kIHRl
eHQgKHdpbGwgdXNlIEdESSkKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0
IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgQ29sb3JTcGFjZSBzaGFk
b3dDb2xvclNwYWNlOworICAgIGdyYXBoaWNzQ29udGV4dC0+Z2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpOworICAgIGdyYXBo
aWNzQ29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgQ29sb3I6OnRy
YW5zcGFyZW50LCBzaGFkb3dDb2xvclNwYWNlKTsKKyAgICBkcmF3R2x5cGhzV2luKGdyYXBoaWNz
Q29udGV4dCwgZm9udCwgZ2x5cGhCdWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQpOworICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hh
ZG93Q29sb3IsIHNoYWRvd0NvbG9yU3BhY2UpOworfQorI2VuZGlmCiAKIEZsb2F0UmVjdCBGb250
OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwKQEAgLTE0OCw5ICs1NzQsNDAgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZQogICAgIGlmICghYWxwaGEgJiYgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Z2V0U3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwog
CisjaWYgRU5BQkxFKFNLSUFfVEVYVCkKKyAgICBIREMgaGRjID0gMDsKKyNlbHNlCisgICAgVHJh
bnNwYXJlbmN5QXdhcmVVbmlzY3JpYmVQYWludGVyIHBhaW50ZXIoZ3JhcGhpY3NDb250ZXh0LCB0
aGlzLCBydW4sIGZyb20sIHRvLCBwb2ludCk7CisKKyAgICBIREMgaGRjID0gcGFpbnRlci5oZGMo
KTsKKyAgICBpZiAod2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nKGdyYXBoaWNzQ29udGV4dCkg
JiYgIWhkYykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVE9ETyhtYXJ1ZWwpOiBodHRwOi8v
Yi83MDA0NjQgU2V0VGV4dENvbG9yIGRvZXNuJ3Qgc3VwcG9ydCB0cmFuc3BhcmVuY3kuCisgICAg
Ly8gRW5mb3JjZSBub24tdHJhbnNwYXJlbnQgY29sb3IuCisgICAgY29sb3IgPSBTa0NvbG9yU2V0
UkdCKFNrQ29sb3JHZXRSKGNvbG9yKSwgU2tDb2xvckdldEcoY29sb3IpLCBTa0NvbG9yR2V0Qihj
b2xvcikpOworICAgIGlmIChoZGMpIHsKKyAgICAgICAgU2V0VGV4dENvbG9yKGhkYywgc2tpYTo6
U2tDb2xvclRvQ09MT1JSRUYoY29sb3IpKTsKKyAgICAgICAgU2V0QmtNb2RlKGhkYywgVFJBTlNQ
QVJFTlQpOworICAgIH0KKworICAgIC8vIElmIHRoZXJlIGlzIGEgbm9uLWJsdXIgc2hhZG93IGFu
ZCBib3RoIHRoZSBmaWxsIGNvbG9yIGFuZCBzaGFkb3cgY29sb3IgCisgICAgLy8gYXJlIG9wYXF1
ZSwgaGFuZGxlIHdpdGhvdXQgc2tpYS4gCisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAg
ICBmbG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9yOworICAgIENvbG9yU3Bh
Y2Ugc2hhZG93Q29sb3JTcGFjZTsKKyAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5nZXRTaGFkb3co
c2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvciwgc2hhZG93Q29sb3JTcGFjZSkg
JiYgd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KGdyYXBoaWNzQ29udGV4dCkpIHsKKyAg
ICAgICAgQ09MT1JSRUYgdGV4dENvbG9yID0gc2tpYTo6U2tDb2xvclRvQ09MT1JSRUYoU2tDb2xv
clNldEFSR0IoMjU1LCBzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3IuZ3JlZW4oKSwgc2hh
ZG93Q29sb3IuYmx1ZSgpKSk7CisgICAgICAgIENPTE9SUkVGIHNhdmVkVGV4dENvbG9yID0gR2V0
VGV4dENvbG9yKGhkYyk7CisgICAgICAgIFNldFRleHRDb2xvcihoZGMsIHRleHRDb2xvcik7Cisg
ICAgICAgIHN0YXRlLmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBoZGMsIHN0YXRpY19jYXN0PGludD4o
cG9pbnQueCgpKSArIHNoYWRvd09mZnNldC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludD4ocG9pbnQueSgpIC0gZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkgKyBzaGFk
b3dPZmZzZXQuaGVpZ2h0KCksIGZyb20sIHRvKTsKKyAgICAgICAgU2V0VGV4dENvbG9yKGhkYywg
c2F2ZWRUZXh0Q29sb3IpOyAKKyAgICB9CisjZW5kaWYKICAgICAvLyBVbmlzY3JpYmUgY291bnRz
IHRoZSBjb29yZGluYXRlcyBmcm9tIHRoZSB1cHBlciBsZWZ0LCB3aGlsZSBXZWJLaXQgdXNlcwog
ICAgIC8vIHRoZSBiYXNlbGluZSwgc28gd2UgaGF2ZSB0byBzdWJ0cmFjdCBvZmYgdGhlIGFzY2Vu
dC4KLSAgICBIREMgaGRjID0gMDsKICAgICBzdGF0ZS5kcmF3KGdyYXBoaWNzQ29udGV4dCwgaGRj
LCBscm91bmRmKHBvaW50LngoKSksIGxyb3VuZGYocG9pbnQueSgpIC0gZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSksIGZyb20sIHRvKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXIuY3Bw
CShyZXZpc2lvbiA5NzA1NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDks
OSBAQCB2b2lkIFVuaXNjcmliZUhlbHBlcjo6ZHJhdyhHcmFwaGljc0NvbnRlCiAgICAgSEdESU9C
SiBvbGRGb250ID0gMDsKICAgICBpbnQgY3VyWCA9IHg7CiAgICAgYm9vbCBmaXJzdFJ1biA9IHRy
dWU7CisjaWYgIUVOQUJMRShTS0lBX1RFWFQpCisgICAgYm9vbCB1c2VXaW5kb3dzRHJhd2luZyA9
IHdpbmRvd3NDYW5IYW5kbGVUZXh0RHJhd2luZyhncmFwaGljc0NvbnRleHQpOworI2VuZGlmCiAK
ICAgICBmb3IgKHNpemVfdCBzY3JlZW5JbmRleCA9IDA7IHNjcmVlbkluZGV4IDwgbV9ydW5zLnNp
emUoKTsgc2NyZWVuSW5kZXgrKykgewogICAgICAgICBpbnQgaXRlbUluZGV4ID0gbV9zY3JlZW5P
cmRlcltzY3JlZW5JbmRleF07CkBAIC0zODcsMTQgKzM5MCwyNiBAQCB2b2lkIFVuaXNjcmliZUhl
bHBlcjo6ZHJhdyhHcmFwaGljc0NvbnRlCiAgICAgICAgICAgICAvLyBQYXNzIDAgaW4gd2hlbiB0
aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uLgogICAgICAgICAgICAgY29uc3QgaW50KiBqdXN0aWZ5
ID0gc2hhcGluZy5tX2p1c3RpZnkuc2l6ZSgpID09IDAgPyAwIDogJnNoYXBpbmcubV9qdXN0aWZ5
W2Zyb21HbHlwaF07CiAKKyNpZiBFTkFCTEUoU0tJQV9URVhUKQogICAgICAgICAgICAgY29uc3Qg
aW50KiBhZHZhbmNlcyA9IHNoYXBpbmcubV9qdXN0aWZ5LnNpemUoKSA/CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fanVzdGlmeVtmcm9tR2x5cGhdCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICZzaGFwaW5nLm1fYWR2YW5jZVtm
cm9tR2x5cGhdOworI2Vsc2UKKyAgICAgICAgICAgIGlmICh1c2VXaW5kb3dzRHJhd2luZykgewor
ICAgICAgICAgICAgICAgIGlmIChmaXJzdFJ1bikgeworICAgICAgICAgICAgICAgICAgICBvbGRG
b250ID0gU2VsZWN0T2JqZWN0KGRjLCBzaGFwaW5nLm1faGZvbnQpOworICAgICAgICAgICAgICAg
ICAgICBmaXJzdFJ1biA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBTZWxlY3RPYmplY3QoZGMsIHNoYXBpbmcubV9oZm9udCk7CisgICAgICAgICAg
ICB9CisKKyNlbmRpZgogICAgICAgICAgICAgLy8gRm9udHMgd2l0aCBkaWZmZXJlbnQgYXNjZW50
cyBjYW4gYmUgdXNlZCB0byByZW5kZXIgZGlmZmVyZW50CiAgICAgICAgICAgICAvLyBydW5zLiAg
J0Fjcm9zcy1ydW5zJyB5LWNvb3JkaW5hdGUgY29ycmVjdGlvbiBuZWVkcyB0byBiZQogICAgICAg
ICAgICAgLy8gYWRqdXN0ZWQgZm9yIGVhY2ggZm9udC4KICAgICAgICAgICAgIGJvb2wgdGV4dE91
dE9rID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKGludCBleGVjdXRpb25zID0gMDsgZXhlY3V0
aW9ucyA8IDI7ICsrZXhlY3V0aW9ucykgeworI2lmIEVOQUJMRShTS0lBX1RFWFQpCiAgICAgICAg
ICAgICAgICAgU2tQb2ludCBvcmlnaW47CiAgICAgICAgICAgICAgICAgb3JpZ2luLmZYID0gY3Vy
WCArICsgaW5uZXJPZmZzZXQ7CiAgICAgICAgICAgICAgICAgb3JpZ2luLmZZID0geSArIG1fYXNj
ZW50OwpAQCAtNDA2LDYgKzQyMSwzMiBAQCB2b2lkIFVuaXNjcmliZUhlbHBlcjo6ZHJhdyhHcmFw
aGljc0NvbnRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX29mZnNl
dHNbZnJvbUdseXBoXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcmlnaW4pOwog
ICAgICAgICAgICAgICAgIHRleHRPdXRPayA9IHRydWU7CisjZWxzZQorICAgICAgICAgICAgICAg
IGlmICh1c2VXaW5kb3dzRHJhd2luZykgeworICAgICAgICAgICAgICAgICAgICBIUkVTVUxUIGhy
ID0gU2NyaXB0VGV4dE91dChkYywgc2hhcGluZy5tX3NjcmlwdENhY2hlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJYICsgaW5uZXJPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgLSBzaGFwaW5n
Lm1fYXNjZW50T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAmaXRlbS5hLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2dseXBoc1tmcm9tR2x5cGhdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaENvdW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcGluZy5tX2Fk
dmFuY2VbZnJvbUdseXBoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganVzdGlmeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnNoYXBpbmcubV9vZmZzZXRzW2Zyb21HbHlwaF0pOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0T3V0T2sgPSAoaHIgPT0gU19PSyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgU2tQb2ludCBvcmlnaW47CisgICAgICAgICAgICAgICAgICAg
IG9yaWdpbi5mWCA9IGN1clggKyArIGlubmVyT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBv
cmlnaW4uZlkgPSB5ICsgbV9hc2NlbnQ7CisgICAgICAgICAgICAgICAgICAgIHBhaW50U2tpYVRl
eHQoZ3JhcGhpY3NDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
YXBpbmcubV9oZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaENv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFwaW5nLm1fZ2x5cGhz
W2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXBpbmcu
bV9hZHZhbmNlW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JnNoYXBpbmcubV9vZmZzZXRzW2Zyb21HbHlwaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJm9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIHRleHRPdXRPayA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgICAgICAgICBpZiAoIXRleHRP
dXRPayAmJiAwID09IGV4ZWN1dGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgVGV4
dE91dCBpcyBjYWxsZWQgZnJvbSB0aGUgcmVuZGVyZXIgaXQgbWlnaHQgZmFpbApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA5NzA1NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3OSw2ICs1NzksMTcgQEAgY29uc3QgU2tCaXRtYXAqIFBsYXRmb3JtQ29udGV4
dFNraWE6OmJpdAogICAgIHJldHVybiAmbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRt
YXAoZmFsc2UpOwogfQogCitib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmlzTmF0aXZlRm9udFJl
bmRlcmluZ0FsbG93ZWQoKQoreworI2lmIEVOQUJMRShTS0lBX1RFWFQpCisgICAgcmV0dXJuIGZh
bHNlOworI2Vsc2UKKyAgICBpZiAoaXNBY2NlbGVyYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHNraWE6OlN1cHBvcnRzUGxhdGZvcm1QYWludChtX2NhbnZhcyk7Cisj
ZW5kaWYKK30KKwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRJbWFnZVJlc2FtcGxpbmdI
aW50KEludFNpemUqIHNyY1NpemUsIEZsb2F0U2l6ZSogZHN0U2l6ZSkgY29uc3QKIHsKICAgICAq
c3JjU2l6ZSA9IG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuaAkocmV2aXNpb24gOTcwNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3
LDYgKzE2NywxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmludGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJpbnRpbmc7IH0KICAgICB2b2lkIHNldFByaW50aW5nKGJvb2wgcCkgeyBtX3ByaW50aW5n
ID0gcDsgfQogCisgICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBhbGxvd3MgcmVuZGVyaW5n
IG9mIGZvbnRzIHVzaW5nIG5hdGl2ZSBwbGF0Zm9ybQorICAgIC8vIEFQSXMuIElmIGZhbHNlIGlz
IHJldHVybmVkIGZvbnQgcmVuZGVyaW5nIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUgc2tpYQorICAg
IC8vIHRleHQgZHJhd2luZyBBUElzLgorICAgIC8vIGlmIFNLSUFfVEVYVCBpcyBlbmFibGVkLCB0
aGlzIGFsd2F5cyByZXR1cm5zIGZhbHNlCisgICAgYm9vbCBpc05hdGl2ZUZvbnRSZW5kZXJpbmdB
bGxvd2VkKCk7CisKICAgICB2b2lkIGdldEltYWdlUmVzYW1wbGluZ0hpbnQoSW50U2l6ZSogc3Jj
U2l6ZSwgRmxvYXRTaXplKiBkc3RTaXplKSBjb25zdDsKICAgICB2b2lkIHNldEltYWdlUmVzYW1w
bGluZ0hpbnQoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBkc3RTaXpl
KTsKICAgICB2b2lkIGNsZWFySW1hZ2VSZXNhbXBsaW5nSGludCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAJ
KHJldmlzaW9uIDk3MDU1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9Ta2lhRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDYwIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFFTkFCTEUoU0tJQV9URVhUKQorYm9vbCB3aW5kb3dz
Q2FuSGFuZGxlRHJhd1RleHRTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAg
IEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xv
ciBzaGFkb3dDb2xvcjsKKyAgICBDb2xvclNwYWNlIHNoYWRvd0NvbG9yU3BhY2U7CisKKyAgICBi
b29sIGhhc1NoYWRvdyA9IGNvbnRleHQtPmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0Js
dXIsIHNoYWRvd0NvbG9yLCBzaGFkb3dDb2xvclNwYWNlKTsKKyAgICByZXR1cm4gIWhhc1NoYWRv
dyB8fCAoIXNoYWRvd0JsdXIgJiYgKHNoYWRvd0NvbG9yLmFscGhhKCkgPT0gMjU1KSAmJiAoY29u
dGV4dC0+ZmlsbENvbG9yKCkuYWxwaGEoKSA9PSAyNTUpKTsKK30KKworYm9vbCB3aW5kb3dzQ2Fu
SGFuZGxlVGV4dERyYXdpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGlmICgh
d2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0aG91dFNoYWRvdyhjb250ZXh0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sgZm9yIHNoYWRvdyBlZmZlY3RzLgorICAg
IGlmICghd2luZG93c0NhbkhhbmRsZURyYXdUZXh0U2hhZG93KGNvbnRleHQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCB3aW5kb3dzQ2FuSGFu
ZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICAvLyBDaGVjayBmb3Igbm9uLXRyYW5zbGF0aW9uIHRyYW5zZm9ybXMuIFNvbWV0aW1lcyB6
b29tcyB3aWxsIGxvb2sgYmV0dGVyIGluCisgICAgLy8gU2tpYSwgYW5kIHNvbWV0aW1lcyBiZXR0
ZXIgaW4gV2luZG93cy4gVGhlIG1haW4gcHJvYmxlbSBpcyB0aGF0IHpvb21pbmcKKyAgICAvLyBp
biB1c2luZyBTa2lhIHdpbGwgc2hvdyB5b3UgdGhlIGhpbnRlZCBvdXRsaW5lcyBmb3IgdGhlIHNt
YWxsZXIgc2l6ZSwKKyAgICAvLyB3aGljaCBsb29rIHdlaXJkLiBBbGwgZWxzZSBiZWluZyBlcXVh
bCwgaXQncyBiZXR0ZXIgdG8gdXNlIFdpbmRvd3MnIHRleHQKKyAgICAvLyBkcmF3aW5nLCBzbyB3
ZSBkb24ndCBjaGVjayBmb3Igem9vbXMuCisgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRy
aXggPSBjb250ZXh0LT5nZXRDVE0oKTsKKyAgICBpZiAobWF0cml4LmIoKSB8fCBtYXRyaXguYygp
KSAvLyBDaGVjayBmb3Igc2tldy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hl
Y2sgZm9yIHN0cm9rZSBlZmZlY3RzLgorICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Z2V0VGV4dERyYXdpbmdNb2RlKCkgIT0gVGV4dE1vZGVGaWxsKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3IgZ3JhZGllbnRzLgorICAgIGlmIChjb250ZXh0LT5m
aWxsR3JhZGllbnQoKSB8fCBjb250ZXh0LT5zdHJva2VHcmFkaWVudCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBDaGVjayBmb3IgcGF0dGVybnMuCisgICAgaWYgKGNvbnRleHQt
PmZpbGxQYXR0ZXJuKCkgfHwgY29udGV4dC0+c3Ryb2tlUGF0dGVybigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5pc05hdGl2
ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHNraWFEcmF3VGV4dChTa0NhbnZh
cyogY2FudmFzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQmIHBvaW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgIFNrUGFpbnQqIHBhaW50LApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uaAko
cmV2aXNpb24gOTcwNTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NraWFGb250V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCw0MCBAQAogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx1c3AxMC5oPgogCi1jbGFzcyBTa1BvaW50Oworc3Ry
dWN0IFNrUG9pbnQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tpYTsKKworI2lmICFFTkFCTEUoU0tJQV9URVhU
KQorLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgdXNlZCBmb3IgbW9yZSBjb21wbGV4IGZvbnQg
ZHJhd2luZyAoZWZmZWN0cyBzdWNoIGFzCisvLyBzdHJva2luZyBhbmQgbW9yZSBjb21wbGV4IHRy
YW5zZm9ybXMpIHRoYW4gV2luZG93cyBzdXBwb3J0cyBkaXJlY3RseS4gU2luY2UKKy8vIFdpbmRv
d3MgZHJhd2luZyBpcyBmYXN0ZXIgeW91IHNob3VsZCB1c2Ugd2luZG93c0NhbkhhbmRsZVRleHRE
cmF3aW5nIGZpcnN0IHRvCisvLyBjaGVjayBpZiB1c2luZyBTa2lhIGlzIHJlcXVpcmVkIGF0IGFs
bC4KKy8vIE5vdGUgdGhhdCB0aGUgdGV4dCB3aWxsIGxvb2sgZGlmZmVyZW50IChubyBDbGVhclR5
cGUpIHNvIHRoaXMgc2hvdWxkIG9ubHkgYmUKKy8vIHVzZWQgd2hlbiBuZWNlc3NhcnkuCisvLwor
Ly8gV2hlbiB5b3UgY2FsbCBhIFNraWEqIHRleHQgZHJhd2luZyBmdW5jdGlvbiwgdmFyaW91cyBn
bHlwaCBvdXRsaW5lcyB3aWxsIGJlCisvLyBjYWNoZWQuIEFzIGEgcmVzdWx0LCB5b3Ugc2hvdWxk
IGNhbGwgU2tpYVdpbk91dGxpbmVDYWNoZTo6cmVtb3ZlUGF0aHNGb3JGb250CisvLyB3aGVuIHRo
ZSBmb250IGlzIGRlc3Ryb3llZCBzbyB0aGF0IHRoZSBjYWNoZSBkb2VzIG5vdCBvdXRsaXZlIHRo
ZSBmb250IChzaW5jZQorLy8gdGhlIEhGT05UcyBhcmUgcmVjeWNsZWQpLgorLy8KKy8vIFJlbWVt
YmVyIHRoYXQgU2tpYSdzIHRleHQgZHJhd2luZyBvcmlnaW4gaXMgdGhlIGJhc2VsaW5lLCBsaWtl
IFdlYktpdCwgbm90CisvLyB0aGUgdG9wLCBsaWtlIFdpbmRvd3MuCisKKy8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZmlsbENvbG9yIGFuZCBzaGFkb3dDb2xvciBhcmUgb3BhcXVlIGFuZCB0aGUgdGV4
dC1zaGFkb3cKKy8vIGlzIG5vdCBibHVycmVkLgorYm9vbCB3aW5kb3dzQ2FuSGFuZGxlRHJhd1Rl
eHRTaGFkb3coR3JhcGhpY3NDb250ZXh0Kik7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBhZHZhbmNl
ZCBmb250IHJlbmRlcmluZyBpcyByZWNvbW1lbmRlZC4KK2Jvb2wgd2luZG93c0NhbkhhbmRsZVRl
eHREcmF3aW5nKEdyYXBoaWNzQ29udGV4dCopOworCisvLyBSZXR1cm5zIHRydWUgaWYgYWR2YW5j
ZWQgZm9udCByZW5kZXJpbmcgaXMgcmVjb21tZW5kZWQgaWYgc2hhZG93cyBhcmUKKy8vIGRpc3Jl
Z2FyZGVkLgorYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KEdy
YXBoaWNzQ29udGV4dCopOworI2VuZGlmCiAKIC8vIE5vdGUgdGhhdCB0aGUgb2Zmc2V0cyBwYXJh
bWV0ZXIgaXMgb3B0aW9uYWwuICBJZiBub3QgTlVMTCBpdCByZXByZXNlbnRzIGEKIC8vIHBlciBn
bHlwaCBvZmZzZXQgKHN1Y2ggYXMgcmV0dXJuZWQgYnkgU2NyaXB0UGxhY2UgV2luZG93cyBBUEkg
ZnVuY3Rpb24pLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MDc5
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMiBAQAorMjAxMS0xMC0xMCAgTWlrZSBSZWVkICA8cmVlZEBnb29nbGUuY29tPgor
CisgICAgICAgIHJlLWFkZCBzdXBwb3J0IGZvciBHREkgdGV4dCBiZWhpbmQgYSBjb21waWxlIGZs
YWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTMw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmZWF0
dXJlcy5neXBpOgorCiAyMDExLTEwLTEwICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29n
bGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gR2V0IHJpZCBvZiBXZWJBY2Nlc3NpYmlsaXR5
Q2FjaGUuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShyZXZpc2lvbiA5
NzA1NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQkod29ya2luZyBj
b3B5KQpAQCAtNzksNiArNzksNyBAQAogICAgICAgJ0VOQUJMRV9TQU5EQk9YPTEnLAogICAgICAg
J0VOQUJMRV9TSEFSRURfV09SS0VSUz0xJywKICAgICAgICdFTkFCTEVfU0tJQV9HUFU9PCh1c2Vf
c2tpYV9ncHUpJywKKyAgICAgICdFTkFCTEVfU0tJQV9URVhUPTwoZW5hYmxlX3NraWFfdGV4dCkn
LAogICAgICAgJ0VOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEnLAogICAgICAgJ0VOQUJMRV9TUUxf
REFUQUJBU0U9MScsCiAgICAgICAnRU5BQkxFX1NWRz08KGVuYWJsZV9zdmcpJywKQEAgLTEwOSw2
ICsxMTAsNyBAQAogICAgICd2YXJpYWJsZXMnOiB7CiAgICAgICAndXNlX2FjY2VsZXJhdGVkX2Nv
bXBvc2l0aW5nJSc6IDEsCiAgICAgICAndXNlX3RocmVhZGVkX2NvbXBvc2l0aW5nJSc6IDAsCisg
ICAgICAnZW5hYmxlX3NraWFfdGV4dCUnOiAwLAogICAgICAgJ2VuYWJsZV9zdmclJzogMSwKICAg
ICAgICdlbmFibGVfdG91Y2hfZXZlbnRzJSc6IDEsCiAgICAgICAndXNlX3NraWFfZ3B1JSc6IDAs
CkBAIC0xMTgsNiArMTIwLDcgQEAKICAgICB9LAogICAgICd1c2VfYWNjZWxlcmF0ZWRfY29tcG9z
aXRpbmclJzogJzwodXNlX2FjY2VsZXJhdGVkX2NvbXBvc2l0aW5nKScsCiAgICAgJ3VzZV90aHJl
YWRlZF9jb21wb3NpdGluZyUnOiAnPCh1c2VfdGhyZWFkZWRfY29tcG9zaXRpbmcpJywKKyAgICAn
ZW5hYmxlX3NraWFfdGV4dCUnOiAnPChlbmFibGVfc2tpYV90ZXh0KScsCiAgICAgJ2VuYWJsZV9z
dmclJzogJzwoZW5hYmxlX3N2ZyknLAogICAgICdlbmFibGVfdG91Y2hfZXZlbnRzJSc6ICc8KGVu
YWJsZV90b3VjaF9ldmVudHMpJywKICAgICAndXNlX3NraWElJzogJzwodXNlX3NraWEpJywKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDk3MDc5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTAtMTAgIE1pa2UgUmVlZCAgPHJlZWRAZ29v
Z2xlLmNvbT4KKworICAgICAgICByZS1hZGQgc3VwcG9ydCBmb3IgR0RJIHRleHQgYmVoaW5kIGEg
Y29tcGlsZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02OTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorCiAyMDExLTEw
LTEwICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3R5
bGUgZm9yIHVwZGF0ZWQgZHVlIHRvIGluYWJpbGl0eSB0byBsb2NhdGUKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHJl
dmlzaW9uIDk3MDU1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBl
Y3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzY0LDYgKzEzNjQsMTQgQEAgQlVHQ1Ix
MDQzMCBMSU5VWCBXSU4gOiBzdmcvVzNDLVNWRy0xLjEvdAogLy8gVGhpcyB0ZXN0IGFsc28gc3Rh
cnRlZCBmYWlsaW5nIHdpdGggdGhlIG1lcmdlIG9mIE1hcmNoIDI1dGggMjAwOQogQlVHQ1IxMDQ0
MSBNQUMgV0lOIDogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtdHJhbnNmb3JtLmh0
bWwgPSBQQVNTIFRFWFQKIAorLy8gRGlzYWJsZSB0aGVzZSB3aGlsZSB3ZSdyZSBiYWNrIHRvIHVz
aW5nIEdESSBmb3IgdGV4dCBkcmF3aW5nLiBUaGVzZSBnaXZlIHNsaWdodGx5CisvLyBkaWZmZXJl
bnQgcmVzdWx0cyB0aGFuIHdpdGggU2tpYS4gV2hlbiB3ZSBzd2l0Y2ggYmFjayB0byBTa2lhLCB3
ZSBjYW4KKy8vIHJlZW5hYmxlIHRoZXNlLgorQlVHQ1I5OTUwMCBXSU4gOiBtZWRpYS9hdWRpby1y
ZXBhaW50Lmh0bWwgPSBJTUFHRQorQlVHQ1I5OTUwMCBXSU4gOiBzdmcvYXMtYmFja2dyb3VuZC1p
bWFnZS9hbmltYXRlZC1zdmctYXMtYmFja2dyb3VuZC5odG1sID0gSU1BR0UKK0JVR0NSOTk1MDAg
V0lOIDogc3ZnL2JhdGlrL3RleHQvdGV4dFN0eWxlcy5zdmcgPSBJTUFHRQorQlVHQ1I5OTUwMCBX
SU4gOiBzdmcvY3VzdG9tL3NpbXBsZS10ZXh0LWRvdWJsZS1zaGFkb3cuc3ZnID0gSU1BR0UKKwog
Ly8gTWVyZ2UgNDE3Njg6NDE4MDcKIC8vIFBlcmhhcHMganVzdCBuZWVkcyBuZXcgYmFzZWxpbmU/
CiAvLyBUaGVzZSB0ZXN0cyB3ZXJlIHJlYmFzZWxpbmVkIHdpdGggZmFpbHVyZSBsb25nIGFnby4g
V2Ugc2hvdWxkbid0IGRvIHRoaXMsIGFuZApAQCAtMjA1Myw3ICsyMDYxLDYgQEAgQlVHV0s2NTIw
MyBXSU4gOiBzdmcvem9vbS90ZXh0L3pvb20taGl4aQogCiAvLyBPbiBYUCwgc29tZSBnbHlwaHMg
c2hvdyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcgd2hlbiB0aGV5IHNob3VsZG4ndAogQlVHV0s2NTIw
MyBYUCA6IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2JpZGktbWlycm9yLWhlLWFyLmh0bWwgPSBJ
TUFHRQotQlVHV0s2NTIwMyBYUCA6IHN2Zy9iYXRpay90ZXh0L3RleHRTdHlsZXMuc3ZnID0gSU1B
R0UKIAogQlVHV0s0MjQyOCBMSU5VWCBXSU4gOiBzdmcvVzNDLVNWRy0xLjEvZmlsdGVycy1jb252
LTAxLWYuc3ZnID0gSU1BR0UrVEVYVAogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>