<?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>90951</bug_id>
          
          <creation_ts>2012-07-11 01:23:08 -0700</creation_ts>
          <short_desc>[Chromium] Fix bugs in HarfBuzzShaper</short_desc>
          <delta_ts>2012-09-17 00:39:01 -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>Platform</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>
          
          <blocked>96902</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>behdad</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>666502</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-11 01:23:08 -0700</bug_when>
    <thetext>This is the leftover of https://bugs.webkit.org/show_bug.cgi?id=90362. The current implementation has some problems. Will post patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666513</commentid>
    <comment_count>1</comment_count>
      <attachid>151644</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-11 01:35:23 -0700</bug_when>
    <thetext>Created attachment 151644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666860</commentid>
    <comment_count>2</comment_count>
      <attachid>151644</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-11 10:41:37 -0700</bug_when>
    <thetext>Comment on attachment 151644
Patch

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

r- for lack of tests.

&gt; Source/WebCore/ChangeLog:14
&gt; +        - Cannot render RTL text if the TextRun is divided into more than two
&gt; +          HarfBuzzRun.
&gt; +        - Script handling in TextRun partitioning is incorrect.
&gt; +        - Inaccurate calculation of selection rect.
&gt; +        - Wrong rendering position when the first glyph of the TextRun have
&gt; +          non-zero offsets in terms of HarfBuzz.

Why are there no tests?  Doesn&apos;t this code already run on Chromium Mac?  We should have a test showing that each of these are fixed.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:230
&gt; +    return m_harfbuzzRuns.size() &gt; 0;

!m_harfbuzzRuns.isEmpty()

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:256
&gt; +            hb_buffer_destroy(harfbuzzBuffer);

Should we make a scoped pointer type that calls hb_buffer_destroy in the destructor?  Maybe for hb_font_t* too?

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:260
&gt; +        hb_shape(harfbuzzFont, harfbuzzBuffer, m_features.size() &gt; 0 ? m_features.data() : 0, m_features.size());

Nit: m_features.isEmpty()

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.h:111
&gt; +    float m_startOffsetX;
&gt; +    float m_startOffsetY;

Maybe use a FloatPoint here instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667401</commentid>
    <comment_count>3</comment_count>
      <attachid>151858</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-11 22:32:10 -0700</bug_when>
    <thetext>Created attachment 151858
Patch V2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667410</commentid>
    <comment_count>4</comment_count>
      <attachid>151644</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-11 22:38:58 -0700</bug_when>
    <thetext>Comment on attachment 151644
Patch

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

Thank you so much for review!

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +          non-zero offsets in terms of HarfBuzz.
&gt; 
&gt; Why are there no tests?  Doesn&apos;t this code already run on Chromium Mac?  We should have a test showing that each of these are fixed.

Added some tests. Chromium Mac only uses this shaper iff -webkit-font-feature-settings is specified and corresponding font is an opentype font. Tests looks weird because of this. Anyway, all fix of this change will be covered by existing tests once we switch to use harfbuzz-ng on Linux.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:230
&gt;&gt; +    return m_harfbuzzRuns.size() &gt; 0;
&gt; 
&gt; !m_harfbuzzRuns.isEmpty()

Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:256
&gt;&gt; +            hb_buffer_destroy(harfbuzzBuffer);
&gt; 
&gt; Should we make a scoped pointer type that calls hb_buffer_destroy in the destructor?  Maybe for hb_font_t* too?

Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:260
&gt;&gt; +        hb_shape(harfbuzzFont, harfbuzzBuffer, m_features.size() &gt; 0 ? m_features.data() : 0, m_features.size());
&gt; 
&gt; Nit: m_features.isEmpty()

Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.h:111
&gt;&gt; +    float m_startOffsetY;
&gt; 
&gt; Maybe use a FloatPoint here instead?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667938</commentid>
    <comment_count>5</comment_count>
      <attachid>151858</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-12 10:24:08 -0700</bug_when>
    <thetext>Comment on attachment 151858
Patch V2

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

&gt; LayoutTests/ChangeLog:13
&gt; +        * fast/text/harfbuzz-script-order.html: Added.
&gt; +        * fast/text/harfbuzz-selection.html: Added.

It&apos;s a little weird that the tests have the name harfbuzz in them since they might not always use harfbuzz.  Maybe we should use a different name like complex-text-script-order.html or shaping-script-order.html.  You might want to just make a subdirectory for these tests (fast/text/complex or fast/text/shaping or fast/text/font-feature-setting) and just skip the directory on other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668403</commentid>
    <comment_count>6</comment_count>
      <attachid>152098</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-12 16:52:58 -0700</bug_when>
    <thetext>Created attachment 152098
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668405</commentid>
    <comment_count>7</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-12 16:54:46 -0700</bug_when>
    <thetext>Thank you for review.

(In reply to comment #5)
&gt; It&apos;s a little weird that the tests have the name harfbuzz in them since they might not always use harfbuzz.  Maybe we should use a different name like complex-text-script-order.html or shaping-script-order.html.  You might want to just make a subdirectory for these tests (fast/text/complex or fast/text/shaping or fast/text/font-feature-setting) and just skip the directory on other platforms.

Created fast/text/shaping subdirectory and moved these tests into the subdirectory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668481</commentid>
    <comment_count>8</comment_count>
      <attachid>152098</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-12 18:28:39 -0700</bug_when>
    <thetext>Comment on attachment 152098
Patch for landing

Rejecting attachment 152098 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
 hunk FAILED -- saving rejects to file LayoutTests/platform/qt/TestExpectations.rej
patching file LayoutTests/platform/win/Skipped
Hunk #1 succeeded at 1944 (offset -1 lines).
patching file LayoutTests/platform/wincairo/Skipped
Hunk #1 succeeded at 2126 (offset -1 lines).
patching file LayoutTests/platform/wk2/Skipped
Hunk #1 succeeded at 1419 (offset -2 lines).

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/13206920</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668517</commentid>
    <comment_count>9</comment_count>
      <attachid>152132</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-07-12 19:20:28 -0700</bug_when>
    <thetext>Created attachment 152132
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668846</commentid>
    <comment_count>10</comment_count>
      <attachid>152132</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-13 04:17:03 -0700</bug_when>
    <thetext>Comment on attachment 152132
Patch for landing

Clearing flags on attachment: 152132

Committed r122562: &lt;http://trac.webkit.org/changeset/122562&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668848</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-13 04:17:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151644</attachid>
            <date>2012-07-11 01:35:23 -0700</date>
            <delta_ts>2012-07-11 22:38:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90951-20120711173521.patch</filename>
            <type>text/plain</type>
            <size>24761</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZkNjQ0NzdiMzAwMDk1
NjZiYzliZDY5NmIyNDkwNzgwMmZlYTQ4ZS4uNTg2MzJiMWM5MTE0NGYxNjcwYTAyZWMzOTc1OTI3
MGUwMzE2NDUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU0IEBACiAyMDEyLTA3LTExICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbQ2hyb21pdW1d
IEZpeCBidWdzIGluIEhhcmZCdXp6U2hhcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGhhcyBmb2xsb3dp
bmcgcHJvYmxlbXM6CisgICAgICAgIC0gQ2Fubm90IHJlbmRlciBSVEwgdGV4dCBpZiB0aGUgVGV4
dFJ1biBpcyBkaXZpZGVkIGludG8gbW9yZSB0aGFuIHR3bworICAgICAgICAgIEhhcmZCdXp6UnVu
LgorICAgICAgICAtIFNjcmlwdCBoYW5kbGluZyBpbiBUZXh0UnVuIHBhcnRpdGlvbmluZyBpcyBp
bmNvcnJlY3QuCisgICAgICAgIC0gSW5hY2N1cmF0ZSBjYWxjdWxhdGlvbiBvZiBzZWxlY3Rpb24g
cmVjdC4KKyAgICAgICAgLSBXcm9uZyByZW5kZXJpbmcgcG9zaXRpb24gd2hlbiB0aGUgZmlyc3Qg
Z2x5cGggb2YgdGhlIFRleHRSdW4gaGF2ZQorICAgICAgICAgIG5vbi16ZXJvIG9mZnNldHMgaW4g
dGVybXMgb2YgSGFyZkJ1enouCisKKyAgICAgICAgVG8gZml4IHRoZXNlIHByb2JsZW1zIEkgcmV3
cm90ZSBIYXJmQnV6elNoYXBlciBjbGFzcy4gSGVyZSBpcyB0aGUgc3VtbWFyeToKKyAgICAgICAg
LSBEaXZpZGUgdGhlIHdob2xlIHJhbmdlIG9mIFRleHRSdW4gZmlyc3QsIHRoZW4gc2hhcGUgdGhl
bSBpbiB2aXN1YWwKKyAgICAgICAgICBvcmRlci4KKyAgICAgICAgLSBEaXZpZGUgVGV4dFJ1biBp
biB0aGUgc2FtZSB3YXkgb2Ygb2xkLWhhcmZidXp6J3MKKyAgICAgICAgICBoYl91dGYxNl9zY3Jp
cHRfcnVuX25leHQoKS4KKyAgICAgICAgLSBQcmVmZXIgZmxvYXQgdGhhbiBpbnQgd2hlbiBjYWxj
dWxhdGluZyBzZWxlY3Rpb24uCisgICAgICAgIC0gQWRqdXN0IHRoZSBkcmF3aW5nIHBvaW50IGFm
dGVyIHNoYXBpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250
SGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KTog
QWRqdXN0cyBwb2ludCBhZnRlciBzaGFwaW5nLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZC
dXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFyZkJ1enpSdW4pOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFwcGx5U2hh
cGVSZXN1bHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJm
QnV6elJ1bjo6c2V0R2x5cGhBbmRBZHZhbmNlKTogT2Zmc2V0cyBhcmUgbm8gbG9uZ2VyIG5lZWRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6eFBvc2l0
aW9uRm9yT2Zmc2V0KTogQ2FsY3VsYXRlcyBjaGFyYWN0ZXIgb2Zmc2V0IGJhc2VkIG9uIGFkdmFu
Y2UuCisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVDaGFyYWN0ZXJzKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpTaGFwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNoYXBlcik6CisgICAgICAgIChXZWJD
b3JlOjpIYXJmQnV6elNoYXBlcjo6c2hhcGUpOiBEaXZpZGVzIFRleHRSdW4gZmlyc3QsIHRoZW4g
c2hhcGVzIHRoZW0uCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6YWRqdXN0U3Rh
cnRQb2ludCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmNvbGxl
Y3RIYXJmQnV6elJ1bnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVy
OjpzaGFwZUhhcmZCdXp6UnVucyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpT
aGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4pOiBGb2xsb3dlZCBvdGhlciBj
aGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3Qp
OiBVc2UgZmxvYXQgZm9yIGNhbGN1bGF0aW5nIHNlbGVjdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oOgorICAgICAgICAoSGFyZkJ1
enpTaGFwZXIpOiBIb2xkcyB0aGUgc3RhcnQgaW5kZXggb2YgY2hhcmFjdGVyLiBSZW1vdmVkIHVu
bmVjZXNzYXJ5IHZhcmlhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpI
YXJmQnV6elJ1bjo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChIYXJmQnV6elJ1bik6CisgICAg
ICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmZvbnREYXRhKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnN0YXJ0
SW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elJ1bjo6Z2x5cGhzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
SGFyZkJ1enpSdW46OmFkdmFuY2VzKTogRGl0dG8uCisKKzIwMTItMDctMTEgIEtlbmljaGkgSXNo
aWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkaW5n
IEhhcmZCdXp6LW5nIGZvciBMaW51eAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTAzNjIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKaW5kZXggY2M4ZWZlYjQz
NzU3ZGQ1Mjg4MjhhZDJkODVhOTFjMDczNTQyY2FmNy4uMTlhMGI5YTZkNWE3MTQyZDgyODE3MWMx
ODkzYjFlYjY0M2Q1Y2FhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCkBAIC0xODcsNyArMTg3LDgg
QEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3Qg
VGV4dFJ1biYgcnVuLAogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAg
IGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBk
cmF3R2x5cGhCdWZmZXIoZ2MsIHJ1biwgZ2x5cGhCdWZmZXIsIHBvaW50KTsKKyAgICBGbG9hdFBv
aW50IGFkanVzdGVkUG9pbnQgPSBzaGFwZXIuYWRqdXN0U3RhcnRQb2ludChwb2ludCk7CisgICAg
ZHJhd0dseXBoQnVmZmVyKGdjLCBydW4sIGdseXBoQnVmZmVyLCBhZGp1c3RlZFBvaW50KTsKICNl
bHNlCiAgICAgU2tDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCk7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuLCBwb2lu
dC54KCksIHBvaW50LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKaW5kZXggM2Vl
ZDg5N2JhNmExMWE3MGYwNjQ3MjliZDg5MjNjNWQ3OTI1NzczNi4uNzJiODQ0MWI4MDBiYzlhZjQ2
Y2E1M2YxYmY0ZTMyNWRlNTExMWVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkhhcmZCdXp6U2hhcGVyLmgiCiAKICNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiSGFyZkJ1enpGYWNlLmgiCiAjaW5jbHVkZSAiU3Vycm9nYXRl
UGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUg
ImhiLWljdS5oIgpAQCAtNDgsMTQgKzQ5LDE5IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgaGFyZmJ1
enpQb3NpdGlvblRvRmxvYXQoaGJfcG9zaXRpb25fdCB2YWx1ZSkKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHZhbHVlKSAvICgxIDw8IDE2KTsKIH0KIAotSGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjpIYXJmQnV6elJ1bih1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgaGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQotICAgIDogbV9udW1D
aGFyYWN0ZXJzKG51bUNoYXJhY3RlcnMpCitIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46Okhh
cmZCdXp6UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgc3RhcnRJ
bmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCisg
ICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQorICAgICwgbV9zdGFydEluZGV4KHN0YXJ0SW5kZXgp
CisgICAgLCBtX251bUNoYXJhY3RlcnMobnVtQ2hhcmFjdGVycykKICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKIHsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFw
cGx5U2hhcGVSZXN1bHQoaGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQorewogICAgIG1fbnVt
R2x5cGhzID0gaGJfYnVmZmVyX2dldF9sZW5ndGgoaGFyZmJ1enpCdWZmZXIpOwogICAgIG1fZ2x5
cGhzLnJlc2l6ZShtX251bUdseXBocyk7CiAgICAgbV9hZHZhbmNlcy5yZXNpemUobV9udW1HbHlw
aHMpOwotICAgIG1fb2Zmc2V0cy5yZXNpemUobV9udW1HbHlwaHMpOwogICAgIG1fZ2x5cGhUb0No
YXJhY3RlckluZGV4LnJlc2l6ZShtX251bUdseXBocyk7CiAgICAgbV9sb2dDbHVzdGVycy5yZXNp
emUobV9udW1DaGFyYWN0ZXJzKTsKIApAQCAtODIsMTAgKzg4LDkgQEAgSGFyZkJ1enpTaGFwZXI6
OkhhcmZCdXp6UnVuOjpIYXJmQnV6elJ1bih1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGly
ZWN0aW9uIGQKICAgICB9CiB9CiAKLXZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpz
ZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgYWR2YW5jZSkKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpzZXRHbHlwaEFuZEFkdmFuY2UodW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBo
SWQsIGZsb2F0IGFkdmFuY2UpCiB7CiAgICAgbV9nbHlwaHNbaW5kZXhdID0gZ2x5cGhJZDsKLSAg
ICBtX29mZnNldHNbaW5kZXhdLnNldCh4LCB5KTsKICAgICBtX2FkdmFuY2VzW2luZGV4XSA9IGFk
dmFuY2U7CiB9CiAKQEAgLTEwNiwzMSArMTExLDUxIEBAIGludCBIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKGludCB0YXJnZXRYKQogICAgIHJl
dHVybiBydGwoKSA/IDAgOiBtX251bUNoYXJhY3RlcnM7CiB9CiAKLWludCBIYXJmQnV6elNoYXBl
cjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCitmbG9h
dCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25l
ZCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKG9mZnNldCA8IG1fbnVtQ2hhcmFjdGVycyk7CiAgICAg
dW5zaWduZWQgZ2x5cGhJbmRleCA9IG1fbG9nQ2x1c3RlcnNbb2Zmc2V0XTsKLSAgICBBU1NFUlQo
Z2x5cGhJbmRleCA8IG1fbnVtR2x5cGhzKTsKLSAgICBmbG9hdCBwb3NpdGlvbiA9IG1fb2Zmc2V0
c1tnbHlwaEluZGV4XS54KCk7CisgICAgQVNTRVJUKGdseXBoSW5kZXggPD0gbV9udW1HbHlwaHMp
OworICAgIGZsb2F0IHBvc2l0aW9uID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Z2x5cGhJbmRleDsgKytpKQorICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2ldOwogICAg
IGlmIChydGwoKSkKICAgICAgICAgcG9zaXRpb24gKz0gbV9hZHZhbmNlc1tnbHlwaEluZGV4XTsK
LSAgICByZXR1cm4gcm91bmRmKHBvc2l0aW9uKTsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisK
K3N0YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIHNvdXJjZSwgVUNo
YXIqIGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoKQoreworICAgIGludCBwb3NpdGlvbiA9IDA7Cisg
ICAgYm9vbCBlcnJvciA9IGZhbHNlOworICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewor
ICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAgICAgICAgaW50IG5leHRQb3NpdGlvbiA9IHBv
c2l0aW9uOworICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwgbGVuZ3RoLCBj
aGFyYWN0ZXIpOworICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCisg
ICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7CisgICAgICAgIGVsc2UgaWYgKEZvbnQ6OnRyZWF0
QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjaGFyYWN0ZXIpKQorICAgICAgICAgICAg
Y2hhcmFjdGVyID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgIFUxNl9BUFBFTkQoZGVzdGluYXRp
b24sIHBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3RlciwgZXJyb3IpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKGVycm9yLCAhZXJyb3IpOworICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsK
KyAgICB9CiB9CiAKIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcihjb25zdCBGb250KiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4pCiAgICAgOiBIYXJmQnV6elNoYXBlckJhc2UoZm9udCwg
cnVuKQotICAgICwgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuKDApCi0gICAgLCBtX251bUNoYXJh
Y3RlcnNPZkN1cnJlbnRSdW4oMCkKLSAgICAsIG1faGFyZmJ1enpCdWZmZXIoMCkKKyAgICAsIG1f
c3RhcnRPZmZzZXRYKDApCisgICAgLCBtX3N0YXJ0T2Zmc2V0WSgwKQogewotICAgIHNldE5vcm1h
bGl6ZWRCdWZmZXIoKTsKKyAgICBtX25vcm1hbGl6ZWRCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5l
dyBVQ2hhclttX3J1bi5sZW5ndGgoKSArIDFdKTsKKyAgICBtX25vcm1hbGl6ZWRCdWZmZXJMZW5n
dGggPSBtX3J1bi5sZW5ndGgoKTsKKyAgICBub3JtYWxpemVDaGFyYWN0ZXJzKG1fcnVuLmNoYXJh
Y3RlcnMoKSwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5n
dGgpOworICAgIHNldFBhZGRpbmcobV9ydW4uZXhwYW5zaW9uKCkpOwogICAgIHNldEZvbnRGZWF0
dXJlcygpOwogfQogCiBIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hhcGVyKCkKIHsKLSAgICBp
ZiAobV9oYXJmYnV6ekJ1ZmZlcikKLSAgICAgICAgaGJfYnVmZmVyX2Rlc3Ryb3kobV9oYXJmYnV6
ekJ1ZmZlcik7CiB9CiAKIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJlcygpCkBA
IC0xNTIsMTAxICsxNzcsMTA1IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEZvbnRGZWF0dXJl
cygpCiAKIGJvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZl
cikKIHsKLSAgICBtX3RvdGFsV2lkdGggPSAwOwotICAgIHdoaWxlIChzZXR1cEhhcmZCdXp6UnVu
KCkpIHsKLSAgICAgICAgaWYgKCFzaGFwZUhhcmZCdXp6UnVuKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oZ2x5cGhC
dWZmZXIpOwotICAgIH0KLQotICAgIGlmICghbV9oYXJmYnV6elJ1bnMuc2l6ZSgpKQorICAgIGlm
ICghY29sbGVjdEhhcmZCdXp6UnVucygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBt
X3RvdGFsV2lkdGggPSAwOworICAgIGlmICghc2hhcGVIYXJmQnV6elJ1bnMoZ2x5cGhCdWZmZXIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV90b3RhbFdpZHRoID0gcm91bmRmKG1fdG90
YWxXaWR0aCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSGFyZkJ1enpTaGFwZXI6OnNl
dHVwSGFyZkJ1enpSdW4oKQorRmxvYXRQb2ludCBIYXJmQnV6elNoYXBlcjo6YWRqdXN0U3RhcnRQ
b2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBtX3N0YXJ0SW5kZXhPZkN1cnJl
bnRSdW4gKz0gbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuOworICAgIHJldHVybiBGbG9hdFBv
aW50KHBvaW50LngoKSArIG1fc3RhcnRPZmZzZXRYLCBwb2ludC55KCkgKyBtX3N0YXJ0T2Zmc2V0
WSk7Cit9CiAKLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHRleHQgdG8gdGFrZSB0aGUgbGFy
Z2VzdCByYW5nZSB0aGF0IHN0YXlzIHdpdGhpbgotICAgIC8vIGEgc2luZ2xlIGZvbnQuCi0gICAg
aW50IGVuZE9mUnVuSW5kZXggPSBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggLSBtX3N0YXJ0SW5k
ZXhPZkN1cnJlbnRSdW47Ci0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJh
dG9yKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biwg
MCwgZW5kT2ZSdW5JbmRleCwgZW5kT2ZSdW5JbmRleCk7Citib29sIEhhcmZCdXp6U2hhcGVyOjpj
b2xsZWN0SGFyZkJ1enpSdW5zKCkKK3sKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0
b3IgaXRlcmF0b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCAwLCBtX25vcm1hbGl6ZWRCdWZm
ZXJMZW5ndGgsIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7CiAgICAgVUNoYXIzMiBjaGFyYWN0
ZXI7CiAgICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgc3RhcnRJ
bmRleE9mQ3VycmVudFJ1biA9IDA7CiAgICAgaWYgKCFpdGVyYXRvci5jb25zdW1lKGNoYXJhY3Rl
ciwgY2x1c3Rlckxlbmd0aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY3VycmVu
dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxz
ZSkuZm9udERhdGE7CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0YSA9IG1f
Zm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOwog
ICAgIFVFcnJvckNvZGUgZXJyb3JDb2RlID0gVV9aRVJPX0VSUk9SOwotICAgIFVTY3JpcHRDb2Rl
IGN1cnJlbnRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChjaGFyYWN0ZXIsICZlcnJvckNvZGUp
OworICAgIFVTY3JpcHRDb2RlIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChjaGFyYWN0
ZXIsICZlcnJvckNvZGUpOwogICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JDb2RlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChjdXJyZW50U2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVE
KQotICAgICAgICBjdXJyZW50U2NyaXB0ID0gVVNDUklQVF9DT01NT047Ci0gICAgZm9yIChpdGVy
YXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5jb25zdW1lKGNoYXJhY3Rlciwg
Y2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCkpIHsKLSAgICAg
ICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOwotICAgICAgICBpZiAobmV4
dEZvbnREYXRhICE9IG1fY3VycmVudEZvbnREYXRhKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIFVTY3JpcHRDb2RlIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChjaGFyYWN0ZXIs
ICZlcnJvckNvZGUpOwotICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjdXJyZW50U2NyaXB0ID09IG5leHRTY3Jp
cHQgfHwgbmV4dFNjcmlwdCA9PSBVU0NSSVBUX0lOSEVSSVRFRCB8fCBuZXh0U2NyaXB0ID09IFVT
Q1JJUFRfQ09NTU9OKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjdXJyZW50
U2NyaXB0ID09IFVTQ1JJUFRfQ09NTU9OKQotICAgICAgICAgICAgY3VycmVudFNjcmlwdCA9IG5l
eHRTY3JpcHQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBt
X251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4gPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7
Ci0KLSAgICBpZiAoIW1faGFyZmJ1enpCdWZmZXIpIHsKLSAgICAgICAgbV9oYXJmYnV6ekJ1ZmZl
ciA9IGhiX2J1ZmZlcl9jcmVhdGUoKTsKLSAgICAgICAgaGJfYnVmZmVyX3NldF91bmljb2RlX2Z1
bmNzKG1faGFyZmJ1enpCdWZmZXIsIGhiX2ljdV9nZXRfdW5pY29kZV9mdW5jcygpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgaGJfYnVmZmVyX3Jlc2V0KG1faGFyZmJ1enpCdWZmZXIpOwotICAgIGhi
X2J1ZmZlcl9zZXRfc2NyaXB0KG1faGFyZmJ1enpCdWZmZXIsIGhiX2ljdV9zY3JpcHRfdG9fc2Ny
aXB0KGN1cnJlbnRTY3JpcHQpKTsKLQotICAgIC8vIFdlYktpdCBhbHdheXMgc2V0cyBkaXJlY3Rp
b24gdG8gTFRSIGR1cmluZyB3aWR0aCBjYWxjdWxhdGlvbi4KLSAgICAvLyBXZSBvbmx5IHNldCBk
aXJlY3Rpb24gd2hlbiBkaXJlY3Rpb24gaXMgZXhwbGljaXRseSBzZXQgdG8gUlRMIHNvIHRoYXQK
LSAgICAvLyBwcmV2ZW50bmcgd3Jvbmcgd2lkdGggY2FsY3VsYXRpb24uCi0gICAgaWYgKG1fcnVu
LnJ0bCgpKQotICAgICAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbihtX2hhcmZidXp6QnVmZmVy
LCBIQl9ESVJFQ1RJT05fUlRMKTsKLQotICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRoaXMgcnVu
IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBzbWFsbCBjYXBzLgotICAgIC8vIG5leHRTY3JpcHRS
dW4oKSB3aWxsIGFsd2F5cyBzZW5kIHVzIGEgcnVuIG9mIHRoZSBzYW1lIGNhc2UsIGJlY2F1c2Ug
YQotICAgIC8vIGNhc2UgY2hhbmdlIHdoaWxlIGluIHNtYWxsLWNhcHMgbW9kZSBhbHdheXMgcmVz
dWx0cyBpbiBkaWZmZXJlbnQKLSAgICAvLyBGb250RGF0YSwgc28gd2Ugb25seSBuZWVkIHRvIGNo
ZWNrIHRoZSBmaXJzdCBjaGFyYWN0ZXIncyBjYXNlLgotICAgIGlmIChtX2ZvbnQtPmlzU21hbGxD
YXBzKCkgJiYgdV9pc2xvd2VyKG1fbm9ybWFsaXplZEJ1ZmZlclttX3N0YXJ0SW5kZXhPZkN1cnJl
bnRSdW5dKSkgewotICAgICAgICBTdHJpbmcgdXBwZXJUZXh0ID0gU3RyaW5nKG1fbm9ybWFsaXpl
ZEJ1ZmZlci5nZXQoKSArIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biwgbV9udW1DaGFyYWN0ZXJz
T2ZDdXJyZW50UnVuKTsKLSAgICAgICAgdXBwZXJUZXh0Lm1ha2VVcHBlcigpOwotICAgICAgICBt
X2N1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHVwcGVyVGV4
dFswXSwgZmFsc2UsIFNtYWxsQ2Fwc1ZhcmlhbnQpLmZvbnREYXRhOwotICAgICAgICBoYl9idWZm
ZXJfYWRkX3V0ZjE2KG1faGFyZmJ1enpCdWZmZXIsIHVwcGVyVGV4dC5jaGFyYWN0ZXJzKCksIG1f
bnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biwgMCwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVu
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihtX2hhcmZidXp6QnVm
ZmVyLCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4s
IG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biwgMCwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50
UnVuKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIGRvIHsKKyAgICAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGN1cnJlbnRGb250RGF0YSA9IG5leHRGb250RGF0YTsKKyAgICAgICAgVVNjcmlw
dENvZGUgY3VycmVudFNjcmlwdCA9IG5leHRTY3JpcHQ7CisKKyAgICAgICAgZm9yIChpdGVyYXRv
ci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1
c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCkpIHsKKyAgICAgICAg
ICAgIG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rl
ciwgZmFsc2UpLmZvbnREYXRhOworICAgICAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBjdXJy
ZW50Rm9udERhdGEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBuZXh0U2Ny
aXB0ID0gdXNjcmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICAgICAg
ICAgIGlmIChVX0ZBSUxVUkUoZXJyb3JDb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoKGN1cnJlbnRTY3JpcHQgIT0gbmV4dFNjcmlwdCkgJiYgKGN1
cnJlbnRTY3JpcHQgIT0gVVNDUklQVF9JTkhFUklURUQpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4g
PSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkgLSBzdGFydEluZGV4T2ZDdXJyZW50UnVuOwor
ICAgICAgICBtX2hhcmZidXp6UnVucy5hcHBlbmQoSGFyZkJ1enpSdW46OmNyZWF0ZShjdXJyZW50
Rm9udERhdGEsIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4sIG51bUNoYXJhY3RlcnNPZkN1cnJlbnRS
dW4sIG1fcnVuLmRpcmVjdGlvbigpKSk7CisgICAgICAgIGN1cnJlbnRGb250RGF0YSA9IG5leHRG
b250RGF0YTsKKyAgICAgICAgc3RhcnRJbmRleE9mQ3VycmVudFJ1biA9IGl0ZXJhdG9yLmN1cnJl
bnRDaGFyYWN0ZXIoKTsKKyAgICB9IHdoaWxlIChpdGVyYXRvci5jb25zdW1lKGNoYXJhY3Rlciwg
Y2x1c3Rlckxlbmd0aCkpOworCisgICAgcmV0dXJuIG1faGFyZmJ1enpSdW5zLnNpemUoKSA+IDA7
CiB9CiAKLWJvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW4oKQorYm9vbCBIYXJm
QnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bnMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQog
ewotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YSo+KCZtX2N1cnJlbnRGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwotICAgIEhh
cmZCdXp6RmFjZSogZmFjZSA9IHBsYXRmb3JtRGF0YS0+aGFyZmJ1enpGYWNlKCk7Ci0gICAgaWYg
KCFmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaGJfZm9udF90KiBoYXJmYnV6ekZv
bnQgPSBmYWNlLT5jcmVhdGVGb250KCk7Ci0gICAgaGJfc2hhcGUoaGFyZmJ1enpGb250LCBtX2hh
cmZidXp6QnVmZmVyLCBtX2ZlYXR1cmVzLnNpemUoKSA+IDAgPyBtX2ZlYXR1cmVzLmRhdGEoKSA6
IDAsIG1fZmVhdHVyZXMuc2l6ZSgpKTsKLSAgICBoYl9mb250X2Rlc3Ryb3koaGFyZmJ1enpGb250
KTsKLSAgICBtX2hhcmZidXp6UnVucy5hcHBlbmQoSGFyZkJ1enpSdW46OmNyZWF0ZShtX251bUNo
YXJhY3RlcnNPZkN1cnJlbnRSdW4sIG1fcnVuLmRpcmVjdGlvbigpLCBtX2hhcmZidXp6QnVmZmVy
KSk7CisgICAgaGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyID0gaGJfYnVmZmVyX2NyZWF0ZSgp
OworICAgIGhiX2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyhoYXJmYnV6ekJ1ZmZlciwgaGJfaWN1
X2dldF91bmljb2RlX2Z1bmNzKCkpOworICAgIGlmIChtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRl
KCkpCisgICAgICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uKGhhcmZidXp6QnVmZmVyLCBtX3J1
bi5ydGwoKSA/IEhCX0RJUkVDVElPTl9SVEwgOiBIQl9ESVJFQ1RJT05fTFRSKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hhcmZidXp6UnVucy5zaXplKCk7ICsraSkgeworICAg
ICAgICB1bnNpZ25lZCBydW5JbmRleCA9IG1fcnVuLnJ0bCgpID8gbV9oYXJmYnV6elJ1bnMuc2l6
ZSgpIC0gaSAtIDEgOiBpOworICAgICAgICBIYXJmQnV6elJ1biogY3VycmVudFJ1biA9IG1faGFy
ZmJ1enpSdW5zW3J1bkluZGV4XS5nZXQoKTsKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEq
IGN1cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnREYXRhKCk7CisKKyAgICAgICAgaWYg
KG1fZm9udC0+aXNTbWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVyW2N1
cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKV0pKSB7CisgICAgICAgICAgICBTdHJpbmcgdXBwZXJUZXh0
ID0gU3RyaW5nKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIGN1cnJlbnRSdW4tPnN0YXJ0SW5k
ZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKTsKKyAgICAgICAgICAgIHVwcGVyVGV4
dC5tYWtlVXBwZXIoKTsKKyAgICAgICAgICAgIGN1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKHVwcGVyVGV4dFswXSwgZmFsc2UsIFNtYWxsQ2Fwc1ZhcmlhbnQp
LmZvbnREYXRhOworICAgICAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihoYXJmYnV6ekJ1ZmZl
ciwgdXBwZXJUZXh0LmNoYXJhY3RlcnMoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpLCAw
LCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGhiX2J1ZmZlcl9hZGRfdXRmMTYoaGFyZmJ1enpCdWZmZXIsIG1fbm9ybWFsaXplZEJ1ZmZl
ci5nZXQoKSArIGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSwgY3VycmVudFJ1bi0+bnVtQ2hhcmFj
dGVycygpLCAwLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpOworCisgICAgICAgIEZvbnRQ
bGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+
KCZjdXJyZW50Rm9udERhdGEtPnBsYXRmb3JtRGF0YSgpKTsKKyAgICAgICAgSGFyZkJ1enpGYWNl
KiBmYWNlID0gcGxhdGZvcm1EYXRhLT5oYXJmYnV6ekZhY2UoKTsKKyAgICAgICAgaWYgKCFmYWNl
KSB7CisgICAgICAgICAgICBoYl9idWZmZXJfZGVzdHJveShoYXJmYnV6ekJ1ZmZlcik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaGJfZm9udF90KiBoYXJm
YnV6ekZvbnQgPSBmYWNlLT5jcmVhdGVGb250KCk7CisgICAgICAgIGhiX3NoYXBlKGhhcmZidXp6
Rm9udCwgaGFyZmJ1enpCdWZmZXIsIG1fZmVhdHVyZXMuc2l6ZSgpID4gMCA/IG1fZmVhdHVyZXMu
ZGF0YSgpIDogMCwgbV9mZWF0dXJlcy5zaXplKCkpOworICAgICAgICBoYl9mb250X2Rlc3Ryb3ko
aGFyZmJ1enpGb250KTsKKworICAgICAgICBjdXJyZW50UnVuLT5hcHBseVNoYXBlUmVzdWx0KGhh
cmZidXp6QnVmZmVyKTsKKyAgICAgICAgc2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihj
dXJyZW50UnVuLCBpLCBoYXJmYnV6ekJ1ZmZlciwgZ2x5cGhCdWZmZXIpOworCisgICAgICAgIGhi
X2J1ZmZlcl9yZXNldChoYXJmYnV6ekJ1ZmZlcik7CisgICAgICAgIGlmIChtX3J1bi5kaXJlY3Rp
b25hbE92ZXJyaWRlKCkpCisgICAgICAgICAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbihoYXJm
YnV6ekJ1ZmZlciwgbV9ydW4ucnRsKCkgPyBIQl9ESVJFQ1RJT05fUlRMIDogSEJfRElSRUNUSU9O
X0xUUik7CisgICAgfQorICAgIGhiX2J1ZmZlcl9kZXN0cm95KGhhcmZidXp6QnVmZmVyKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlv
bnNGb3JIYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit2b2lkIEhhcmZCdXp6
U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEhhcmZCdXp6UnVuKiBjdXJy
ZW50UnVuLCB1bnNpZ25lZCBydW5JbmRleEluVmlzdWFsT3JkZXIsIGhiX2J1ZmZlcl90KiBoYXJm
YnV6ekJ1ZmZlciwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogewotICAgIGhiX2dseXBoX2lu
Zm9fdCogZ2x5cGhJbmZvcyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5mb3MobV9oYXJmYnV6ekJ1
ZmZlciwgMCk7Ci0gICAgaGJfZ2x5cGhfcG9zaXRpb25fdCogZ2x5cGhQb3NpdGlvbnMgPSBoYl9i
dWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhtX2hhcmZidXp6QnVmZmVyLCAwKTsKLSAgICBIYXJm
QnV6elJ1biogY3VycmVudFJ1biA9IG1faGFyZmJ1enpSdW5zLmxhc3QoKS5nZXQoKTsKKyAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogY3VycmVudEZvbnREYXRhID0gY3VycmVudFJ1bi0+Zm9udERh
dGEoKTsKKyAgICBoYl9nbHlwaF9pbmZvX3QqIGdseXBoSW5mb3MgPSBoYl9idWZmZXJfZ2V0X2ds
eXBoX2luZm9zKGhhcmZidXp6QnVmZmVyLCAwKTsKKyAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBn
bHlwaFBvc2l0aW9ucyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKGhhcmZidXp6QnVm
ZmVyLCAwKTsKIAogICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGN1cnJlbnRSdW4tPm51bUdseXBo
cygpOwogICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7CkBAIC0yNjIsMjYgKzI5MSwzMSBAQCB2
b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlcikKICAgICAgICAgbmV4dE9mZnNldFggPSBydW5FbmQgPyAwIDog
aGFyZmJ1enpQb3NpdGlvblRvRmxvYXQoZ2x5cGhQb3NpdGlvbnNbaSArIDFdLnhfb2Zmc2V0KTsK
ICAgICAgICAgbmV4dE9mZnNldFkgPSBydW5FbmQgPyAwIDogLWhhcmZidXp6UG9zaXRpb25Ub0Zs
b2F0KGdseXBoUG9zaXRpb25zW2kgKyAxXS55X29mZnNldCk7CiAKLSAgICAgICAgdW5zaWduZWQg
Y3VycmVudENoYXJhY3RlckluZGV4ID0gbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuICsgZ2x5cGhJ
bmZvc1tpXS5jbHVzdGVyOworICAgICAgICB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVySW5kZXgg
PSBjdXJyZW50UnVuLT5zdGFydEluZGV4KCkgKyBnbHlwaEluZm9zW2ldLmNsdXN0ZXI7CiAgICAg
ICAgIGJvb2wgaXNDbHVzdGVyRW5kID0gcnVuRW5kIHx8IGdseXBoSW5mb3NbaV0uY2x1c3RlciAh
PSBnbHlwaEluZm9zW2kgKyAxXS5jbHVzdGVyOwogICAgICAgICBmbG9hdCBzcGFjaW5nID0gaXND
bHVzdGVyRW5kID8gbV9sZXR0ZXJTcGFjaW5nIDogMDsKIAogICAgICAgICBpZiAoaXNDbHVzdGVy
RW5kICYmIGlzV29yZEVuZChjdXJyZW50Q2hhcmFjdGVySW5kZXgpKQogICAgICAgICAgICAgc3Bh
Y2luZyArPSBkZXRlcm1pbmVXb3JkQnJlYWtTcGFjaW5nKCk7CiAKLSAgICAgICAgaWYgKG1fY3Vy
cmVudEZvbnREYXRhLT5pc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgpKSB7Ci0gICAgICAgICAg
ICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgMCwgMCwgMCk7Cisg
ICAgICAgIGlmIChjdXJyZW50Rm9udERhdGEtPmlzWmVyb1dpZHRoU3BhY2VHbHlwaChnbHlwaCkp
IHsKKyAgICAgICAgICAgIGN1cnJlbnRSdW4tPnNldEdseXBoQW5kQWR2YW5jZShpLCBnbHlwaCwg
MCk7CiAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAgICAgICAgICAgICAgZ2x5cGhC
dWZmZXItPmFkZChnbHlwaCwgbV9jdXJyZW50Rm9udERhdGEsIGNyZWF0ZUdseXBoQnVmZmVyQWR2
YW5jZSgwLCAwKSk7CisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgY3Vy
cmVudEZvbnREYXRhLCBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoMCwgMCkpOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBhZHZhbmNlICs9IHNwYWNpbmc7Ci0g
ICAgICAgIGN1cnJlbnRSdW4tPnNldEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCB0b3RhbEFk
dmFuY2UgKyBvZmZzZXRYLCBvZmZzZXRZLCBhZHZhbmNlKTsKKworICAgICAgICBjdXJyZW50UnVu
LT5zZXRHbHlwaEFuZEFkdmFuY2UoaSwgZ2x5cGgsIGFkdmFuY2UpOwogICAgICAgICBpZiAoZ2x5
cGhCdWZmZXIpIHsKKyAgICAgICAgICAgIGlmICghaSAmJiAhcnVuSW5kZXhJblZpc3VhbE9yZGVy
KSB7CisgICAgICAgICAgICAgICAgbV9zdGFydE9mZnNldFggPSBvZmZzZXRYOworICAgICAgICAg
ICAgICAgIG1fc3RhcnRPZmZzZXRZID0gb2Zmc2V0WTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGZsb2F0IGdseXBoQWR2YW5jZVggPSBhZHZhbmNlICsgbmV4dE9mZnNldFggLSBvZmZzZXRY
OwogICAgICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlWSA9IG5leHRPZmZzZXRZIC0gb2Zmc2V0
WTsKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIG1fY3VycmVudEZvbnREYXRh
LCBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZhbmNlWSkp
OworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgY3VycmVudEZvbnREYXRhLCBj
cmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZhbmNlWSkpOwog
ICAgICAgICB9CiAKICAgICAgICAgdG90YWxBZHZhbmNlICs9IGFkdmFuY2U7CkBAIC0zMjQsMzcg
KzM1OCw0NiBAQCBpbnQgSGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRh
cmdldFgpCiAKIEZsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVjdChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykKIHsKLSAgICBp
bnQgZnJvbVggPSAtMSwgdG9YID0gLTE7Ci0gICAgaW50IGN1cnJlbnRYID0gMDsKLSAgICAvLyBJ
dGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwgb3JkZXIsIHNlYXJjaGlu
ZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGludGVyZXN0LgorICAgIGZs
b2F0IGN1cnJlbnRYID0gMDsKKyAgICBmbG9hdCBmcm9tWDsKKyAgICBmbG9hdCB0b1g7CisgICAg
Ym9vbCBmb3VuZEZyb21YID0gZmFsc2U7CisgICAgYm9vbCBmb3VuZFRvWCA9IGZhbHNlOworCisg
ICAgaWYgKG1fcnVuLnJ0bCgpKQorICAgICAgICBjdXJyZW50WCA9IG1fdG90YWxXaWR0aDsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKG1fcnVuLnJ0bCgpKQorICAgICAgICAgICAgY3VycmVudFggLT0gbV9oYXJm
YnV6elJ1bnNbaV0tPndpZHRoKCk7CiAgICAgICAgIGludCBudW1DaGFyYWN0ZXJzID0gbV9oYXJm
YnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKLSAgICAgICAgaWYgKGZyb21YID09IC0xICYm
IGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVycykKKyAgICAgICAgaWYgKCFmb3VuZEZy
b21YICYmIGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVycykgewogICAgICAgICAgICAg
ZnJvbVggPSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KGZyb20pICsgY3Vy
cmVudFg7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvdW5kRnJvbVggPSB0cnVlOworICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIGZyb20gLT0gbnVtQ2hhcmFjdGVyczsKIAotICAgICAg
ICBpZiAodG9YID09IC0xICYmIHRvID49IDAgJiYgdG8gPCBudW1DaGFyYWN0ZXJzKQorICAgICAg
ICBpZiAoIWZvdW5kVG9YICYmIHRvID49IDAgJiYgdG8gPCBudW1DaGFyYWN0ZXJzKSB7CiAgICAg
ICAgICAgICB0b1ggPSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KHRvKSAr
IGN1cnJlbnRYOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3VuZFRvWCA9IHRydWU7Cisg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdG8gLT0gbnVtQ2hhcmFjdGVyczsKIAotICAgICAg
ICBpZiAoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0xKQorICAgICAgICBpZiAoZm91bmRGcm9tWCAm
JiBmb3VuZFRvWCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjdXJyZW50WCArPSBtX2hh
cmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICAgICAgaWYgKCFtX3J1bi5ydGwoKSkKKyAgICAg
ICAgICAgIGN1cnJlbnRYICs9IG1faGFyZmJ1enpSdW5zW2ldLT53aWR0aCgpOwogICAgIH0KIAog
ICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBtaWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0
ZXh0LgotICAgIGlmIChmcm9tWCA9PSAtMSkKKyAgICBpZiAoIWZvdW5kRnJvbVgpCiAgICAgICAg
IGZyb21YID0gMDsKLSAgICBpZiAodG9YID09IC0xKQorICAgIGlmICghZm91bmRUb1gpCiAgICAg
ICAgIHRvWCA9IG1fcnVuLnJ0bCgpID8gMCA6IG1fdG90YWxXaWR0aDsKIAotICAgIEFTU0VSVChm
cm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpOwotCisgICAgLy8gVXNpbmcgZmxvb3JmKCkgYW5kIHJv
dW5kZigpIGFzIHRoZSBzYW1lIGFzIG1hYyBwb3J0LgogICAgIGlmIChmcm9tWCA8IHRvWCkKLSAg
ICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmcm9tWCwgcG9pbnQueSgpLCB0b1gg
LSBmcm9tWCwgaGVpZ2h0KTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIHRvWCwg
cG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dChmbG9vcmYocG9pbnQueCgpICsgZnJvbVgpLCBwb2ludC55KCksIHJvdW5kZih0b1ggLSBmcm9t
WCksIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgdG9Y
KSwgcG9pbnQueSgpLCByb3VuZGYoZnJvbVggLSB0b1gpLCBoZWlnaHQpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaAppbmRleCA3YmVmZjVkNzJj
ZGM1NGY4ODg4ZDZjMjBhY2ExZDZlZGIwMzMyMzFjLi5kM2I1MjE0OWQyZmZkZTZiZTM1MzgzYWFk
NDBiOWU4OGExNTY2Mzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmgKQEAgLTUyLDYgKzUy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CiAKICAgICBib29s
IHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOworICAgIEZsb2F0UG9pbnQgYWRqdXN0U3RhcnRQb2lu
dChjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgZmxvYXQgdG90YWxXaWR0aCgpIHsgcmV0dXJuIG1f
dG90YWxXaWR0aDsgfQogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsK
ICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdo
dCwgaW50IGZyb20sIGludCB0byk7CkBAIC01OSwzMSArNjAsMzcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBjbGFzcyBIYXJmQnV6elJ1biB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRlKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9idWZmZXJfdCogYnVmZmVyKQorICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRlKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
b250RGF0YSwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgSGFyZkJ1enpSdW4obnVtQ2hhcmFjdGVycywgZGlyZWN0aW9uLCBidWZmZXIpKTsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4oZm9udERhdGEsIHN0
YXJ0SW5kZXgsIG51bUNoYXJhY3RlcnMsIGRpcmVjdGlvbikpOwogICAgICAgICB9CiAKLSAgICAg
ICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5
cGhJZCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQpOworICAgICAgICB2b2lkIGFwcGx5U2hhcGVS
ZXN1bHQoaGJfYnVmZmVyX3QqKTsKKyAgICAgICAgdm9pZCBzZXRHbHlwaEFuZEFkdmFuY2UodW5z
aWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IGFkdmFuY2UpOwogICAgICAgICB2
b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQogCiAgICAgICAg
IGludCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihpbnQgdGFyZ2V0WCk7Ci0gICAgICAgIGlu
dCB4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KTsKKyAgICAgICAgZmxvYXQgeFBv
c2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CiAKKyAgICAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhKCkgeyByZXR1cm4gbV9mb250RGF0YTsgfQorICAgICAgICB1bnNp
Z25lZCBzdGFydEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydEluZGV4OyB9CiAgICAgICAg
IHVuc2lnbmVkIG51bUNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX251bUNoYXJhY3RlcnM7
IH0KICAgICAgICAgdW5zaWduZWQgbnVtR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9udW1HbHlw
aHM7IH0KKyAgICAgICAgdWludDE2X3QqIGdseXBocygpIHsgcmV0dXJuICZtX2dseXBoc1swXTsg
fQorICAgICAgICBmbG9hdCogYWR2YW5jZXMoKSB7IHJldHVybiAmbV9hZHZhbmNlc1swXTsgfQog
ICAgICAgICBmbG9hdCB3aWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rp
b24sIGhiX2J1ZmZlcl90Kik7CisgICAgICAgIEhhcmZCdXp6UnVuKGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERp
cmVjdGlvbik7CiAgICAgICAgIGJvb2wgcnRsKCkgeyByZXR1cm4gbV9kaXJlY3Rpb24gPT0gUlRM
OyB9CiAKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgICAg
IHVuc2lnbmVkIG1fc3RhcnRJbmRleDsKICAgICAgICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsK
ICAgICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7CiAgICAgICAgIFRleHREaXJlY3Rpb24gbV9k
aXJlY3Rpb247CiAgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoczsKICAgICAg
ICAgVmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFBv
aW50LCAyNTY+IG1fb2Zmc2V0czsKICAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAyNTY+IG1fbG9n
Q2x1c3RlcnM7CiAgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBoVG9DaGFyYWN0
ZXJJbmRleDsKICAgICAgICAgZmxvYXQgbV93aWR0aDsKQEAgLTkxLDE5ICs5OCwxOCBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBzZXRGb250RmVhdHVyZXMoKTsKIAotICAgIGJvb2wgc2V0dXBIYXJm
QnV6elJ1bigpOwotICAgIGJvb2wgc2hhcGVIYXJmQnV6elJ1bigpOwotICAgIHZvaWQgc2V0R2x5
cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciopOworICAgIGJvb2wgY29sbGVj
dEhhcmZCdXp6UnVucygpOworICAgIGJvb2wgc2hhcGVIYXJmQnV6elJ1bnMoR2x5cGhCdWZmZXIq
KTsKKyAgICB2b2lkIHNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oSGFyZkJ1enpSdW4q
LCB1bnNpZ25lZCBydW5JbmRleEluVmlzdWFsT3JkZXIsIGhiX2J1ZmZlcl90KiwgR2x5cGhCdWZm
ZXIqKTsKIAogICAgIEdseXBoQnVmZmVyQWR2YW5jZSBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2Uo
ZmxvYXQsIGZsb2F0KTsKIAogICAgIFZlY3RvcjxoYl9mZWF0dXJlX3QsIDQ+IG1fZmVhdHVyZXM7
Ci0gICAgdW5zaWduZWQgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuOwotICAgIHVuc2lnbmVkIG1f
bnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bjsKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9j
dXJyZW50Rm9udERhdGE7Ci0gICAgaGJfYnVmZmVyX3QqIG1faGFyZmJ1enpCdWZmZXI7CiAgICAg
VmVjdG9yPE93blB0cjxIYXJmQnV6elJ1bj4sIDE2PiBtX2hhcmZidXp6UnVuczsKIAorICAgIGZs
b2F0IG1fc3RhcnRPZmZzZXRYOworICAgIGZsb2F0IG1fc3RhcnRPZmZzZXRZOworCiAgICAgZmxv
YXQgbV90b3RhbFdpZHRoOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151858</attachid>
            <date>2012-07-11 22:32:10 -0700</date>
            <delta_ts>2012-07-12 16:52:52 -0700</delta_ts>
            <desc>Patch V2</desc>
            <filename>bug-90951-20120712143209.patch</filename>
            <type>text/plain</type>
            <size>33685</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg3MjE1N2FlMmNiMTI2
MGVjMDNmNGVmYzE2MTkxYzk0ZjM4YzRlYy4uZWUyYWQ3ZmMyOGNjOWZlMTRkNTk2MzI5MmJiZTg1
ZTY5MGM1OTZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA3LTExICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEZpeCBidWdzIGluIEhhcmZCdXp6U2hhcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGhhcyBmb2xsb3dp
bmcgcHJvYmxlbXM6CisgICAgICAgIC0gQ2Fubm90IHJlbmRlciBSVEwgdGV4dCBpZiB0aGUgVGV4
dFJ1biBpcyBkaXZpZGVkIGludG8gbW9yZSB0aGFuIHR3bworICAgICAgICAgIEhhcmZCdXp6UnVu
LgorICAgICAgICAtIFNjcmlwdCBoYW5kbGluZyBpbiBUZXh0UnVuIHBhcnRpdGlvbmluZyBpcyBp
bmNvcnJlY3QuCisgICAgICAgIC0gSW5hY2N1cmF0ZSBjYWxjdWxhdGlvbiBvZiBzZWxlY3Rpb24g
cmVjdC4KKyAgICAgICAgLSBXcm9uZyByZW5kZXJpbmcgcG9zaXRpb24gd2hlbiB0aGUgZmlyc3Qg
Z2x5cGggb2YgdGhlIFRleHRSdW4gaGF2ZQorICAgICAgICAgIG5vbi16ZXJvIG9mZnNldHMgaW4g
dGVybXMgb2YgSGFyZkJ1enouCisKKyAgICAgICAgVG8gZml4IHRoZXNlIHByb2JsZW1zIEkgcmV3
cm90ZSBIYXJmQnV6elNoYXBlciBjbGFzcy4gSGVyZSBpcyB0aGUgc3VtbWFyeToKKyAgICAgICAg
LSBEaXZpZGUgdGhlIHdob2xlIHJhbmdlIG9mIFRleHRSdW4gZmlyc3QsIHRoZW4gc2hhcGUgdGhl
bSBpbiB2aXN1YWwKKyAgICAgICAgICBvcmRlci4KKyAgICAgICAgLSBEaXZpZGUgVGV4dFJ1biBp
biB0aGUgc2FtZSB3YXkgb2Ygb2xkLWhhcmZidXp6J3MKKyAgICAgICAgICBoYl91dGYxNl9zY3Jp
cHRfcnVuX25leHQoKS4KKyAgICAgICAgLSBQcmVmZXIgZmxvYXQgdGhhbiBpbnQgd2hlbiBjYWxj
dWxhdGluZyBzZWxlY3Rpb24uCisgICAgICAgIC0gQWRqdXN0IHRoZSBkcmF3aW5nIHBvaW50IGFm
dGVyIHNoYXBpbmcuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgY292ZXJzIHRoZSBmaXggZXhjZXB0
IGZvciB0aGUgbGFzdCBwcm9ibGVtLiBUaGUgbGFzdCBwcm9ibGVtIHdpbGwgYmUgY292ZXJlZAor
ICAgICAgICBieSBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9jb21wbGV4LWpvaW5pbmctdXNpbmct
Z3Bvcy5odG1sIGFmdGVyIGNocm9taXVtIGxpbnV4IHBvcnQgc3dpdGNoZXMKKyAgICAgICAgdG8g
dXNlIEhhcmZCdXp6U2hhcGVyLgorCisgICAgICAgIFRlc3RzOiBmYXN0L3RleHQvaGFyZmJ1enot
c2NyaXB0LW9yZGVyLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvdGV4dC9oYXJmYnV6ei1zZWxl
Y3Rpb24uaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhh
cmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6IEFk
anVzdHMgcG9pbnQgYWZ0ZXIgc2hhcGluZy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6
elNoYXBlcjo6SGFyZkJ1enpSdW46OkhhcmZCdXp6UnVuKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphcHBseVNoYXBl
UmVzdWx0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1
enpSdW46OnNldEdseXBoQW5kQWR2YW5jZSk6IE9mZnNldHMgYXJlIG5vIGxvbmdlciBuZWVkZWQu
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlv
bkZvck9mZnNldCk6IENhbGN1bGF0ZXMgY2hhcmFjdGVyIG9mZnNldCBiYXNlZCBvbiBhZHZhbmNl
LgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplQ2hhcmFjdGVycyk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkhhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpTaGFwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlKTogRGl2aWRlcyBUZXh0UnVuIGZpcnN0LCB0aGVuIHNo
YXBlcyB0aGVtLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OmFkanVzdFN0YXJ0
UG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0
SGFyZkJ1enpSdW5zKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
c2hhcGVIYXJmQnV6elJ1bnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hh
cGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKTogRm9sbG93ZWQgb3RoZXIgY2hh
bmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KTog
VXNlIGZsb2F0IGZvciBjYWxjdWxhdGluZyBzZWxlY3Rpb24uCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaDoKKyAgICAgICAgKEhhcmZCdXp6
U2hhcGVyKTogSG9sZHMgdGhlIHN0YXJ0IGluZGV4IG9mIGNoYXJhY3Rlci4gUmVtb3ZlZCB1bm5l
Y2Vzc2FyeSB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoSGFyZkJ1enpSdW4pOgorICAgICAg
ICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpmb250RGF0YSk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzdGFydElu
ZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OmdseXBocyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjphZHZhbmNlcyk6IERpdHRvLgorCiAyMDEyLTA3LTExICBEYW5hIEphbnNlbnMg
IDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIGxheWVy
UmVjdCB0byBjb250ZW50UmVjdCBmb3IgcmVjdHMgdGhhdCBsaXZlIGluIGNvbnRlbnQgc3BhY2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0Zv
bnRIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9Gb250SGFyZkJ1enouY3BwCmluZGV4IGNjOGVmZWI0Mzc1N2RkNTI4ODI4YWQyZDg1YTkxYzA3
MzU0MmNhZjcuLjE5YTBiOWE2ZDVhNzE0MmQ4MjgxNzFjMTg5M2IxZWI2NDNkNWNhYTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJm
QnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
Rm9udEhhcmZCdXp6LmNwcApAQCAtMTg3LDcgKzE4Nyw4IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICBIYXJm
QnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoIXNoYXBlci5zaGFwZSgmZ2x5
cGhCdWZmZXIpKQogICAgICAgICByZXR1cm47Ci0gICAgZHJhd0dseXBoQnVmZmVyKGdjLCBydW4s
IGdseXBoQnVmZmVyLCBwb2ludCk7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvaW50ID0gc2hh
cGVyLmFkanVzdFN0YXJ0UG9pbnQocG9pbnQpOworICAgIGRyYXdHbHlwaEJ1ZmZlcihnYywgcnVu
LCBnbHlwaEJ1ZmZlciwgYWRqdXN0ZWRQb2ludCk7CiAjZWxzZQogICAgIFNrQ2FudmFzKiBjYW52
YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIENvbXBsZXhUZXh0Q29u
dHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgcG9pbnQueCgpLCBwb2ludC55KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpTaGFwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwCmluZGV4IDNlZWQ4OTdiYTZhMTFhNzBmMDY0NzI5YmQ4
OTIzYzVkNzkyNTc3MzYuLjY4ZDE5NmRmMWU2NjE3YzY5NDYxODBlOWY0NmIxZjYxMTQyNDkyNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6U2hhcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJIYXJmQnV6elNoYXBlci5oIgogCiAjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkhh
cmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJoYi1pY3UuaCIKQEAgLTQzLDE5ICs0
NCw0NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
bGFzcyBIYXJmQnV6elNjb3BlZFB0ciB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkICgqRGVz
dHJveUZ1bmN0aW9uKShUKik7CisKKyAgICBIYXJmQnV6elNjb3BlZFB0cihUKiBwdHIsIERlc3Ry
b3lGdW5jdGlvbiBkZXN0cm95KQorICAgICAgICA6IG1fcHRyKHB0cikKKyAgICAgICAgLCBtX2Rl
c3Ryb3koZGVzdHJveSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2Rlc3Ryb3kpOworICAgIH0K
KyAgICB+SGFyZkJ1enpTY29wZWRQdHIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fcHRyKQorICAg
ICAgICAgICAgKCptX2Rlc3Ryb3kpKG1fcHRyKTsKKyAgICB9CisKKyAgICBUKiBnZXQoKSB7IHJl
dHVybiBtX3B0cjsgfQorcHJpdmF0ZToKKyAgICBUKiBtX3B0cjsKKyAgICBEZXN0cm95RnVuY3Rp
b24gbV9kZXN0cm95OworfTsKKwogc3RhdGljIGlubGluZSBmbG9hdCBoYXJmYnV6elBvc2l0aW9u
VG9GbG9hdChoYl9wb3NpdGlvbl90IHZhbHVlKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUpIC8gKDEgPDwgMTYpOwogfQogCi1IYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OkhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGly
ZWN0aW9uLCBoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCi0gICAgOiBtX251bUNoYXJhY3Rl
cnMobnVtQ2hhcmFjdGVycykKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6SGFyZkJ1enpS
dW4oY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1
bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKKyAgICA6IG1f
Zm9udERhdGEoZm9udERhdGEpCisgICAgLCBtX3N0YXJ0SW5kZXgoc3RhcnRJbmRleCkKKyAgICAs
IG1fbnVtQ2hhcmFjdGVycyhudW1DaGFyYWN0ZXJzKQogICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0
aW9uKQogeworfQorCit2b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6YXBwbHlTaGFw
ZVJlc3VsdChoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCit7CiAgICAgbV9udW1HbHlwaHMg
PSBoYl9idWZmZXJfZ2V0X2xlbmd0aChoYXJmYnV6ekJ1ZmZlcik7CiAgICAgbV9nbHlwaHMucmVz
aXplKG1fbnVtR2x5cGhzKTsKICAgICBtX2FkdmFuY2VzLnJlc2l6ZShtX251bUdseXBocyk7Ci0g
ICAgbV9vZmZzZXRzLnJlc2l6ZShtX251bUdseXBocyk7CiAgICAgbV9nbHlwaFRvQ2hhcmFjdGVy
SW5kZXgucmVzaXplKG1fbnVtR2x5cGhzKTsKICAgICBtX2xvZ0NsdXN0ZXJzLnJlc2l6ZShtX251
bUNoYXJhY3RlcnMpOwogCkBAIC04MiwxMCArMTExLDkgQEAgSGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpIYXJmQnV6elJ1bih1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9u
IGQKICAgICB9CiB9CiAKLXZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlw
aEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgeCwg
ZmxvYXQgeSwgZmxvYXQgYWR2YW5jZSkKK3ZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVu
OjpzZXRHbHlwaEFuZEFkdmFuY2UodW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZs
b2F0IGFkdmFuY2UpCiB7CiAgICAgbV9nbHlwaHNbaW5kZXhdID0gZ2x5cGhJZDsKLSAgICBtX29m
ZnNldHNbaW5kZXhdLnNldCh4LCB5KTsKICAgICBtX2FkdmFuY2VzW2luZGV4XSA9IGFkdmFuY2U7
CiB9CiAKQEAgLTEwNiwzMSArMTM0LDQ5IEBAIGludCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKGludCB0YXJnZXRYKQogICAgIHJldHVybiBy
dGwoKSA/IDAgOiBtX251bUNoYXJhY3RlcnM7CiB9CiAKLWludCBIYXJmQnV6elNoYXBlcjo6SGFy
ZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCitmbG9hdCBIYXJm
QnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZz
ZXQpCiB7CiAgICAgQVNTRVJUKG9mZnNldCA8IG1fbnVtQ2hhcmFjdGVycyk7CiAgICAgdW5zaWdu
ZWQgZ2x5cGhJbmRleCA9IG1fbG9nQ2x1c3RlcnNbb2Zmc2V0XTsKLSAgICBBU1NFUlQoZ2x5cGhJ
bmRleCA8IG1fbnVtR2x5cGhzKTsKLSAgICBmbG9hdCBwb3NpdGlvbiA9IG1fb2Zmc2V0c1tnbHlw
aEluZGV4XS54KCk7CisgICAgQVNTRVJUKGdseXBoSW5kZXggPD0gbV9udW1HbHlwaHMpOworICAg
IGZsb2F0IHBvc2l0aW9uID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2x5cGhJ
bmRleDsgKytpKQorICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2VzW2ldOwogICAgIGlmIChy
dGwoKSkKICAgICAgICAgcG9zaXRpb24gKz0gbV9hZHZhbmNlc1tnbHlwaEluZGV4XTsKLSAgICBy
ZXR1cm4gcm91bmRmKHBvc2l0aW9uKTsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0YXRp
YyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIHNvdXJjZSwgVUNoYXIqIGRl
c3RpbmF0aW9uLCBpbnQgbGVuZ3RoKQoreworICAgIGludCBwb3NpdGlvbiA9IDA7CisgICAgYm9v
bCBlcnJvciA9IGZhbHNlOworICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgeworICAgICAg
ICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAgICAgICAgaW50IG5leHRQb3NpdGlvbiA9IHBvc2l0aW9u
OworICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0
ZXIpOworICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpCisgICAgICAg
ICAgICBjaGFyYWN0ZXIgPSAnICc7CisgICAgICAgIGVsc2UgaWYgKEZvbnQ6OnRyZWF0QXNaZXJv
V2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjaGFyYWN0ZXIpKQorICAgICAgICAgICAgY2hhcmFj
dGVyID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgIFUxNl9BUFBFTkQoZGVzdGluYXRpb24sIHBv
c2l0aW9uLCBsZW5ndGgsIGNoYXJhY3RlciwgZXJyb3IpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KGVycm9yLCAhZXJyb3IpOworICAgICAgICBwb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKKyAgICB9
CiB9CiAKIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcihjb25zdCBGb250KiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4pCiAgICAgOiBIYXJmQnV6elNoYXBlckJhc2UoZm9udCwgcnVuKQot
ICAgICwgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuKDApCi0gICAgLCBtX251bUNoYXJhY3RlcnNP
ZkN1cnJlbnRSdW4oMCkKLSAgICAsIG1faGFyZmJ1enpCdWZmZXIoMCkKIHsKLSAgICBzZXROb3Jt
YWxpemVkQnVmZmVyKCk7CisgICAgbV9ub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihu
ZXcgVUNoYXJbbV9ydW4ubGVuZ3RoKCkgKyAxXSk7CisgICAgbV9ub3JtYWxpemVkQnVmZmVyTGVu
Z3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtX3J1bi5jaGFy
YWN0ZXJzKCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyTGVu
Z3RoKTsKKyAgICBzZXRQYWRkaW5nKG1fcnVuLmV4cGFuc2lvbigpKTsKICAgICBzZXRGb250RmVh
dHVyZXMoKTsKIH0KIAogSGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNoYXBlcigpCiB7Ci0gICAg
aWYgKG1faGFyZmJ1enpCdWZmZXIpCi0gICAgICAgIGhiX2J1ZmZlcl9kZXN0cm95KG1faGFyZmJ1
enpCdWZmZXIpOwogfQogCiB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVyZXMoKQpA
QCAtMTUyLDEwMSArMTk4LDEwMSBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRGb250RmVhdHVy
ZXMoKQogCiBib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZShHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIpCiB7Ci0gICAgbV90b3RhbFdpZHRoID0gMDsKLSAgICB3aGlsZSAoc2V0dXBIYXJmQnV6elJ1
bigpKSB7Ci0gICAgICAgIGlmICghc2hhcGVIYXJmQnV6elJ1bigpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKGdseXBo
QnVmZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1faGFyZmJ1enpSdW5zLnNpemUoKSkKKyAgICBp
ZiAoIWNvbGxlY3RIYXJmQnV6elJ1bnMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
bV90b3RhbFdpZHRoID0gMDsKKyAgICBpZiAoIXNoYXBlSGFyZkJ1enpSdW5zKGdseXBoQnVmZmVy
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdG90YWxXaWR0aCA9IHJvdW5kZihtX3Rv
dGFsV2lkdGgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhhcmZCdXp6U2hhcGVyOjpz
ZXR1cEhhcmZCdXp6UnVuKCkKK0Zsb2F0UG9pbnQgSGFyZkJ1enpTaGFwZXI6OmFkanVzdFN0YXJ0
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgbV9zdGFydEluZGV4T2ZDdXJy
ZW50UnVuICs9IG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bjsKKyAgICByZXR1cm4gcG9pbnQg
KyBtX3N0YXJ0T2Zmc2V0OworfQogCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSB0ZXh0IHRv
IHRha2UgdGhlIGxhcmdlc3QgcmFuZ2UgdGhhdCBzdGF5cyB3aXRoaW4KLSAgICAvLyBhIHNpbmds
ZSBmb250LgotICAgIGludCBlbmRPZlJ1bkluZGV4ID0gbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3Ro
IC0gbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuOwotICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvciBpdGVyYXRvcihtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhP
ZkN1cnJlbnRSdW4sIDAsIGVuZE9mUnVuSW5kZXgsIGVuZE9mUnVuSW5kZXgpOworYm9vbCBIYXJm
QnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucygpCit7CisgICAgU3Vycm9nYXRlUGFpckF3
YXJlVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgMCwgbV9u
b3JtYWxpemVkQnVmZmVyTGVuZ3RoLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgpOwogICAgIFVD
aGFyMzIgY2hhcmFjdGVyOwogICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAwOworICAgIHVu
c2lnbmVkIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4gPSAwOwogICAgIGlmICghaXRlcmF0b3IuY29u
c3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBtX2N1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0
Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNl
KS5mb250RGF0YTsKICAgICBVRXJyb3JDb2RlIGVycm9yQ29kZSA9IFVfWkVST19FUlJPUjsKLSAg
ICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gdXNjcmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVy
LCAmZXJyb3JDb2RlKTsKKyAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlwdF9nZXRT
Y3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKICAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY3VycmVudFNjcmlwdCA9PSBVU0NS
SVBUX0lOSEVSSVRFRCkKLSAgICAgICAgY3VycmVudFNjcmlwdCA9IFVTQ1JJUFRfQ09NTU9OOwot
ICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuY29uc3Vt
ZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5n
dGgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBtX2Zv
bnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKLSAg
ICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0YSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0gdXNjcmlwdF9nZXRTY3Jp
cHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKLSAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvckNv
ZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY3VycmVudFNjcmlw
dCA9PSBuZXh0U2NyaXB0IHx8IG5leHRTY3JpcHQgPT0gVVNDUklQVF9JTkhFUklURUQgfHwgbmV4
dFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoY3VycmVudFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKLSAgICAgICAgICAgIGN1cnJl
bnRTY3JpcHQgPSBuZXh0U2NyaXB0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuID0gaXRlcmF0b3IuY3VycmVu
dENoYXJhY3RlcigpOwotCi0gICAgaWYgKCFtX2hhcmZidXp6QnVmZmVyKSB7Ci0gICAgICAgIG1f
aGFyZmJ1enpCdWZmZXIgPSBoYl9idWZmZXJfY3JlYXRlKCk7Ci0gICAgICAgIGhiX2J1ZmZlcl9z
ZXRfdW5pY29kZV9mdW5jcyhtX2hhcmZidXp6QnVmZmVyLCBoYl9pY3VfZ2V0X3VuaWNvZGVfZnVu
Y3MoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGhiX2J1ZmZlcl9yZXNldChtX2hhcmZidXp6QnVm
ZmVyKTsKLSAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChtX2hhcmZidXp6QnVmZmVyLCBoYl9pY3Vf
c2NyaXB0X3RvX3NjcmlwdChjdXJyZW50U2NyaXB0KSk7Ci0KLSAgICAvLyBXZWJLaXQgYWx3YXlz
IHNldHMgZGlyZWN0aW9uIHRvIExUUiBkdXJpbmcgd2lkdGggY2FsY3VsYXRpb24uCi0gICAgLy8g
V2Ugb25seSBzZXQgZGlyZWN0aW9uIHdoZW4gZGlyZWN0aW9uIGlzIGV4cGxpY2l0bHkgc2V0IHRv
IFJUTCBzbyB0aGF0Ci0gICAgLy8gcHJldmVudG5nIHdyb25nIHdpZHRoIGNhbGN1bGF0aW9uLgot
ICAgIGlmIChtX3J1bi5ydGwoKSkKLSAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJlY3Rpb24obV9o
YXJmYnV6ekJ1ZmZlciwgSEJfRElSRUNUSU9OX1JUTCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgd2hl
dGhlciB0aGlzIHJ1biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21hbGwgY2Fwcy4KLSAgICAv
LyBuZXh0U2NyaXB0UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1biBvZiB0aGUgc2FtZSBj
YXNlLCBiZWNhdXNlIGEKLSAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBpbiBzbWFsbC1jYXBzIG1v
ZGUgYWx3YXlzIHJlc3VsdHMgaW4gZGlmZmVyZW50Ci0gICAgLy8gRm9udERhdGEsIHNvIHdlIG9u
bHkgbmVlZCB0byBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2FzZS4KLSAgICBpZiAobV9m
b250LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNsb3dlcihtX25vcm1hbGl6ZWRCdWZmZXJbbV9zdGFy
dEluZGV4T2ZDdXJyZW50UnVuXSkpIHsKLSAgICAgICAgU3RyaW5nIHVwcGVyVGV4dCA9IFN0cmlu
ZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4sIG1f
bnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7Ci0gICAgICAgIHVwcGVyVGV4dC5tYWtlVXBwZXIo
KTsKLSAgICAgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJh
Y3Rlcih1cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50KS5mb250RGF0YTsKLSAg
ICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihtX2hhcmZidXp6QnVmZmVyLCB1cHBlclRleHQuY2hh
cmFjdGVycygpLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1fbnVtQ2hhcmFjdGVy
c09mQ3VycmVudFJ1bik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGhiX2J1ZmZlcl9hZGRfdXRmMTYo
bV9oYXJmYnV6ekJ1ZmZlciwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFydEluZGV4
T2ZDdXJyZW50UnVuLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAsIG1fbnVtQ2hhcmFj
dGVyc09mQ3VycmVudFJ1bik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBkbyB7CisgICAgICAg
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7Cisg
ICAgICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2NyaXB0OworCisgICAgICAg
IGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuY29uc3VtZShj
aGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgp
KSB7CisgICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJh
Y3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICAgICAgICAgIGlmIChuZXh0Rm9u
dERhdGEgIT0gY3VycmVudEZvbnREYXRhKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNoYXJhY3RlciwgJmVycm9yQ29k
ZSk7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29kZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKChjdXJyZW50U2NyaXB0ICE9IG5leHRT
Y3JpcHQpICYmIChjdXJyZW50U2NyaXB0ICE9IFVTQ1JJUFRfSU5IRVJJVEVEKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJz
T2ZDdXJyZW50UnVuID0gaXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpIC0gc3RhcnRJbmRleE9m
Q3VycmVudFJ1bjsKKyAgICAgICAgbV9oYXJmYnV6elJ1bnMuYXBwZW5kKEhhcmZCdXp6UnVuOjpj
cmVhdGUoY3VycmVudEZvbnREYXRhLCBzdGFydEluZGV4T2ZDdXJyZW50UnVuLCBudW1DaGFyYWN0
ZXJzT2ZDdXJyZW50UnVuLCBtX3J1bi5kaXJlY3Rpb24oKSkpOworICAgICAgICBjdXJyZW50Rm9u
dERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4gPSBp
dGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgfSB3aGlsZSAoaXRlcmF0b3IuY29uc3Vt
ZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKTsKKworICAgIHJldHVybiAhbV9oYXJmYnV6elJ1
bnMuaXNFbXB0eSgpOwogfQogCi1ib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVu
KCkKK2Jvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5zKEdseXBoQnVmZmVyKiBn
bHlwaEJ1ZmZlcikKIHsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBjb25z
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmbV9jdXJyZW50Rm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpKTsKLSAgICBIYXJmQnV6ekZhY2UqIGZhY2UgPSBwbGF0Zm9ybURhdGEtPmhhcmZidXp6RmFj
ZSgpOwotICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGhiX2ZvbnRf
dCogaGFyZmJ1enpGb250ID0gZmFjZS0+Y3JlYXRlRm9udCgpOwotICAgIGhiX3NoYXBlKGhhcmZi
dXp6Rm9udCwgbV9oYXJmYnV6ekJ1ZmZlciwgbV9mZWF0dXJlcy5zaXplKCkgPiAwID8gbV9mZWF0
dXJlcy5kYXRhKCkgOiAwLCBtX2ZlYXR1cmVzLnNpemUoKSk7Ci0gICAgaGJfZm9udF9kZXN0cm95
KGhhcmZidXp6Rm9udCk7Ci0gICAgbV9oYXJmYnV6elJ1bnMuYXBwZW5kKEhhcmZCdXp6UnVuOjpj
cmVhdGUobV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCBtX3J1bi5kaXJlY3Rpb24oKSwgbV9o
YXJmYnV6ekJ1ZmZlcikpOworICAgIEhhcmZCdXp6U2NvcGVkUHRyPGhiX2J1ZmZlcl90PiBoYXJm
YnV6ekJ1ZmZlcihoYl9idWZmZXJfY3JlYXRlKCksIGhiX2J1ZmZlcl9kZXN0cm95KTsKKyAgICBo
Yl9idWZmZXJfc2V0X3VuaWNvZGVfZnVuY3MoaGFyZmJ1enpCdWZmZXIuZ2V0KCksIGhiX2ljdV9n
ZXRfdW5pY29kZV9mdW5jcygpKTsKKyAgICBpZiAobV9ydW4uZGlyZWN0aW9uYWxPdmVycmlkZSgp
KQorICAgICAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbihoYXJmYnV6ekJ1ZmZlci5nZXQoKSwg
bV9ydW4ucnRsKCkgPyBIQl9ESVJFQ1RJT05fUlRMIDogSEJfRElSRUNUSU9OX0xUUik7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgdW5zaWduZWQgcnVuSW5kZXggPSBtX3J1bi5ydGwoKSA/IG1faGFyZmJ1enpSdW5z
LnNpemUoKSAtIGkgLSAxIDogaTsKKyAgICAgICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBt
X2hhcmZidXp6UnVuc1tydW5JbmRleF0uZ2V0KCk7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0YSgpOworCisgICAgICAg
IGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9pc2xvd2VyKG1fbm9ybWFsaXplZEJ1ZmZl
cltjdXJyZW50UnVuLT5zdGFydEluZGV4KCldKSkgeworICAgICAgICAgICAgU3RyaW5nIHVwcGVy
VGV4dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5zdGFy
dEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSk7CisgICAgICAgICAgICB1cHBl
clRleHQubWFrZVVwcGVyKCk7CisgICAgICAgICAgICBjdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQt
PmdseXBoRGF0YUZvckNoYXJhY3Rlcih1cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJp
YW50KS5mb250RGF0YTsKKyAgICAgICAgICAgIGhiX2J1ZmZlcl9hZGRfdXRmMTYoaGFyZmJ1enpC
dWZmZXIuZ2V0KCksIHVwcGVyVGV4dC5jaGFyYWN0ZXJzKCksIGN1cnJlbnRSdW4tPm51bUNoYXJh
Y3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZidXp6QnVmZmVyLmdldCgpLCBt
X25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5zdGFydEluZGV4KCksIGN1cnJl
bnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKTsK
KworICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBjb25zdF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGEqPigmY3VycmVudEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAg
ICAgIEhhcmZCdXp6RmFjZSogZmFjZSA9IHBsYXRmb3JtRGF0YS0+aGFyZmJ1enpGYWNlKCk7Cisg
ICAgICAgIGlmICghZmFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgSGFy
ZkJ1enpTY29wZWRQdHI8aGJfZm9udF90PiBoYXJmYnV6ekZvbnQoZmFjZS0+Y3JlYXRlRm9udCgp
LCBoYl9mb250X2Rlc3Ryb3kpOworICAgICAgICBoYl9zaGFwZShoYXJmYnV6ekZvbnQuZ2V0KCks
IGhhcmZidXp6QnVmZmVyLmdldCgpLCBtX2ZlYXR1cmVzLmlzRW1wdHkoKSA/IDAgOiBtX2ZlYXR1
cmVzLmRhdGEoKSwgbV9mZWF0dXJlcy5zaXplKCkpOworCisgICAgICAgIGN1cnJlbnRSdW4tPmFw
cGx5U2hhcGVSZXN1bHQoaGFyZmJ1enpCdWZmZXIuZ2V0KCkpOworICAgICAgICBzZXRHbHlwaFBv
c2l0aW9uc0ZvckhhcmZCdXp6UnVuKGN1cnJlbnRSdW4sIGksIGhhcmZidXp6QnVmZmVyLmdldCgp
LCBnbHlwaEJ1ZmZlcik7CisKKyAgICAgICAgaGJfYnVmZmVyX3Jlc2V0KGhhcmZidXp6QnVmZmVy
LmdldCgpKTsKKyAgICAgICAgaWYgKG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkKKyAgICAg
ICAgICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uKGhhcmZidXp6QnVmZmVyLmdldCgpLCBtX3J1
bi5ydGwoKSA/IEhCX0RJUkVDVElPTl9SVEwgOiBIQl9ESVJFQ1RJT05fTFRSKTsKKyAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRp
b25zRm9ySGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQordm9pZCBIYXJmQnV6
elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3Vy
cmVudFJ1biwgdW5zaWduZWQgcnVuSW5kZXhJblZpc3VhbE9yZGVyLCBoYl9idWZmZXJfdCogaGFy
ZmJ1enpCdWZmZXIsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIHsKLSAgICBoYl9nbHlwaF9p
bmZvX3QqIGdseXBoSW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zKG1faGFyZmJ1enpC
dWZmZXIsIDApOwotICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QqIGdseXBoUG9zaXRpb25zID0gaGJf
YnVmZmVyX2dldF9nbHlwaF9wb3NpdGlvbnMobV9oYXJmYnV6ekJ1ZmZlciwgMCk7Ci0gICAgSGFy
ZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZidXp6UnVucy5sYXN0KCkuZ2V0KCk7CisgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGN1cnJlbnRGb250RGF0YSA9IGN1cnJlbnRSdW4tPmZvbnRE
YXRhKCk7CisgICAgaGJfZ2x5cGhfaW5mb190KiBnbHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9n
bHlwaF9pbmZvcyhoYXJmYnV6ekJ1ZmZlciwgMCk7CisgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCog
Z2x5cGhQb3NpdGlvbnMgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhoYXJmYnV6ekJ1
ZmZlciwgMCk7CiAKICAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBjdXJyZW50UnVuLT5udW1HbHlw
aHMoKTsKICAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOwpAQCAtMjYyLDI2ICszMDgsMjkgQEAg
dm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihHbHlw
aEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiAgICAgICAgIG5leHRPZmZzZXRYID0gcnVuRW5kID8gMCA6
IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2kgKyAxXS54X29mZnNldCk7
CiAgICAgICAgIG5leHRPZmZzZXRZID0gcnVuRW5kID8gMCA6IC1oYXJmYnV6elBvc2l0aW9uVG9G
bG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueV9vZmZzZXQpOwogCi0gICAgICAgIHVuc2lnbmVk
IGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biArIGdseXBo
SW5mb3NbaV0uY2x1c3RlcjsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudENoYXJhY3RlckluZGV4
ID0gY3VycmVudFJ1bi0+c3RhcnRJbmRleCgpICsgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyOwogICAg
ICAgICBib29sIGlzQ2x1c3RlckVuZCA9IHJ1bkVuZCB8fCBnbHlwaEluZm9zW2ldLmNsdXN0ZXIg
IT0gZ2x5cGhJbmZvc1tpICsgMV0uY2x1c3RlcjsKICAgICAgICAgZmxvYXQgc3BhY2luZyA9IGlz
Q2x1c3RlckVuZCA/IG1fbGV0dGVyU3BhY2luZyA6IDA7CiAKICAgICAgICAgaWYgKGlzQ2x1c3Rl
ckVuZCAmJiBpc1dvcmRFbmQoY3VycmVudENoYXJhY3RlckluZGV4KSkKICAgICAgICAgICAgIHNw
YWNpbmcgKz0gZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZygpOwogCi0gICAgICAgIGlmIChtX2N1
cnJlbnRGb250RGF0YS0+aXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBoKSkgewotICAgICAgICAg
ICAgY3VycmVudFJ1bi0+c2V0R2x5cGhBbmRQb3NpdGlvbnMoaSwgZ2x5cGgsIDAsIDAsIDApOwor
ICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhLT5pc1plcm9XaWR0aFNwYWNlR2x5cGgoZ2x5cGgp
KSB7CisgICAgICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZEFkdmFuY2UoaSwgZ2x5cGgs
IDApOwogICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVyKQotICAgICAgICAgICAgICAgIGdseXBo
QnVmZmVyLT5hZGQoZ2x5cGgsIG1fY3VycmVudEZvbnREYXRhLCBjcmVhdGVHbHlwaEJ1ZmZlckFk
dmFuY2UoMCwgMCkpOworICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGN1
cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKDAsIDApKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgYWR2YW5jZSArPSBzcGFjaW5nOwot
ICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhpLCBnbHlwaCwgdG90YWxB
ZHZhbmNlICsgb2Zmc2V0WCwgb2Zmc2V0WSwgYWR2YW5jZSk7CisKKyAgICAgICAgY3VycmVudFJ1
bi0+c2V0R2x5cGhBbmRBZHZhbmNlKGksIGdseXBoLCBhZHZhbmNlKTsKICAgICAgICAgaWYgKGds
eXBoQnVmZmVyKSB7CisgICAgICAgICAgICBpZiAoIWkgJiYgIXJ1bkluZGV4SW5WaXN1YWxPcmRl
cikKKyAgICAgICAgICAgICAgICBtX3N0YXJ0T2Zmc2V0LnNldChvZmZzZXRYLCBvZmZzZXRZKTsK
ICAgICAgICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZVggPSBhZHZhbmNlICsgbmV4dE9mZnNldFgg
LSBvZmZzZXRYOwogICAgICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlWSA9IG5leHRPZmZzZXRZ
IC0gb2Zmc2V0WTsKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIG1fY3VycmVu
dEZvbnREYXRhLCBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhB
ZHZhbmNlWSkpOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgY3VycmVudEZv
bnREYXRhLCBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZ2x5cGhBZHZhbmNlWCwgZ2x5cGhBZHZh
bmNlWSkpOwogICAgICAgICB9CiAKICAgICAgICAgdG90YWxBZHZhbmNlICs9IGFkdmFuY2U7CkBA
IC0zMjQsMzcgKzM3Myw0NiBAQCBpbnQgSGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0aW9u
KGZsb2F0IHRhcmdldFgpCiAKIEZsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVj
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykK
IHsKLSAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7Ci0gICAgaW50IGN1cnJlbnRYID0gMDsK
LSAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwgb3JkZXIs
IHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGludGVyZXN0
LgorICAgIGZsb2F0IGN1cnJlbnRYID0gMDsKKyAgICBmbG9hdCBmcm9tWDsKKyAgICBmbG9hdCB0
b1g7CisgICAgYm9vbCBmb3VuZEZyb21YID0gZmFsc2U7CisgICAgYm9vbCBmb3VuZFRvWCA9IGZh
bHNlOworCisgICAgaWYgKG1fcnVuLnJ0bCgpKQorICAgICAgICBjdXJyZW50WCA9IG1fdG90YWxX
aWR0aDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fcnVuLnJ0bCgpKQorICAgICAgICAgICAgY3VycmVudFgg
LT0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CiAgICAgICAgIGludCBudW1DaGFyYWN0ZXJz
ID0gbV9oYXJmYnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKLSAgICAgICAgaWYgKGZyb21Y
ID09IC0xICYmIGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVycykKKyAgICAgICAgaWYg
KCFmb3VuZEZyb21YICYmIGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVycykgewogICAg
ICAgICAgICAgZnJvbVggPSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KGZy
b20pICsgY3VycmVudFg7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvdW5kRnJvbVggPSB0
cnVlOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGZyb20gLT0gbnVtQ2hhcmFjdGVyczsK
IAotICAgICAgICBpZiAodG9YID09IC0xICYmIHRvID49IDAgJiYgdG8gPCBudW1DaGFyYWN0ZXJz
KQorICAgICAgICBpZiAoIWZvdW5kVG9YICYmIHRvID49IDAgJiYgdG8gPCBudW1DaGFyYWN0ZXJz
KSB7CiAgICAgICAgICAgICB0b1ggPSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zm
c2V0KHRvKSArIGN1cnJlbnRYOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3VuZFRvWCA9
IHRydWU7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdG8gLT0gbnVtQ2hhcmFjdGVyczsK
IAotICAgICAgICBpZiAoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0xKQorICAgICAgICBpZiAoZm91
bmRGcm9tWCAmJiBmb3VuZFRvWCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjdXJyZW50
WCArPSBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICAgICAgaWYgKCFtX3J1bi5ydGwo
KSkKKyAgICAgICAgICAgIGN1cnJlbnRYICs9IG1faGFyZmJ1enpSdW5zW2ldLT53aWR0aCgpOwog
ICAgIH0KIAogICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBtaWdodCBiZSBqdXN0IGFm
dGVyIHRoZSB0ZXh0LgotICAgIGlmIChmcm9tWCA9PSAtMSkKKyAgICBpZiAoIWZvdW5kRnJvbVgp
CiAgICAgICAgIGZyb21YID0gMDsKLSAgICBpZiAodG9YID09IC0xKQorICAgIGlmICghZm91bmRU
b1gpCiAgICAgICAgIHRvWCA9IG1fcnVuLnJ0bCgpID8gMCA6IG1fdG90YWxXaWR0aDsKIAotICAg
IEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpOwotCisgICAgLy8gVXNpbmcgZmxvb3Jm
KCkgYW5kIHJvdW5kZigpIGFzIHRoZSBzYW1lIGFzIG1hYyBwb3J0LgogICAgIGlmIChmcm9tWCA8
IHRvWCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmcm9tWCwgcG9pbnQu
eSgpLCB0b1ggLSBmcm9tWCwgaGVpZ2h0KTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50Lngo
KSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgZnJvbVgpLCBwb2ludC55KCksIHJvdW5kZih0
b1ggLSBmcm9tWCksIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQu
eCgpICsgdG9YKSwgcG9pbnQueSgpLCByb3VuZGYoZnJvbVggLSB0b1gpLCBoZWlnaHQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaAppbmRleCA3
YmVmZjVkNzJjZGM1NGY4ODg4ZDZjMjBhY2ExZDZlZGIwMzMyMzFjLi5lYjM5MzVkYjE0NzMxNWE4
M2E1YzlhZjY4NGZhZWEwYmQ4YjlkYzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmgKQEAg
LTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkhhcmZCdXp6U2hhcGVyKCk7CiAK
ICAgICBib29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOworICAgIEZsb2F0UG9pbnQgYWRqdXN0
U3RhcnRQb2ludChjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgZmxvYXQgdG90YWxXaWR0aCgpIHsg
cmV0dXJuIG1fdG90YWxXaWR0aDsgfQogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB0
YXJnZXRYKTsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50Jiwg
aW50IGhlaWdodCwgaW50IGZyb20sIGludCB0byk7CkBAIC01OSwzMSArNjAsMzcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBjbGFzcyBIYXJmQnV6elJ1biB7CiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRlKHVuc2lnbmVkIG51bUNoYXJh
Y3RlcnMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9idWZmZXJfdCogYnVmZmVyKQorICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRlKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hhcmFj
dGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4obnVtQ2hhcmFjdGVycywgZGlyZWN0aW9uLCBi
dWZmZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4oZm9u
dERhdGEsIHN0YXJ0SW5kZXgsIG51bUNoYXJhY3RlcnMsIGRpcmVjdGlvbikpOwogICAgICAgICB9
CiAKLSAgICAgICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWlu
dDE2X3QgZ2x5cGhJZCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQpOworICAgICAgICB2b2lkIGFw
cGx5U2hhcGVSZXN1bHQoaGJfYnVmZmVyX3QqKTsKKyAgICAgICAgdm9pZCBzZXRHbHlwaEFuZEFk
dmFuY2UodW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IGFkdmFuY2UpOwog
ICAgICAgICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQog
CiAgICAgICAgIGludCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihpbnQgdGFyZ2V0WCk7Ci0g
ICAgICAgIGludCB4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KTsKKyAgICAgICAg
ZmxvYXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CiAKKyAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgeyByZXR1cm4gbV9mb250RGF0YTsgfQorICAg
ICAgICB1bnNpZ25lZCBzdGFydEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydEluZGV4OyB9
CiAgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX251bUNo
YXJhY3RlcnM7IH0KICAgICAgICAgdW5zaWduZWQgbnVtR2x5cGhzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1HbHlwaHM7IH0KKyAgICAgICAgdWludDE2X3QqIGdseXBocygpIHsgcmV0dXJuICZtX2ds
eXBoc1swXTsgfQorICAgICAgICBmbG9hdCogYWR2YW5jZXMoKSB7IHJldHVybiAmbV9hZHZhbmNl
c1swXTsgfQogICAgICAgICBmbG9hdCB3aWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIEhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRl
eHREaXJlY3Rpb24sIGhiX2J1ZmZlcl90Kik7CisgICAgICAgIEhhcmZCdXp6UnVuKGNvbnN0IFNp
bXBsZUZvbnREYXRhKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVy
cywgVGV4dERpcmVjdGlvbik7CiAgICAgICAgIGJvb2wgcnRsKCkgeyByZXR1cm4gbV9kaXJlY3Rp
b24gPT0gUlRMOyB9CiAKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7
CisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRJbmRleDsKICAgICAgICAgc2l6ZV90IG1fbnVtQ2hh
cmFjdGVyczsKICAgICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7CiAgICAgICAgIFRleHREaXJl
Y3Rpb24gbV9kaXJlY3Rpb247CiAgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBo
czsKICAgICAgICAgVmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7Ci0gICAgICAgIFZlY3Rv
cjxGbG9hdFBvaW50LCAyNTY+IG1fb2Zmc2V0czsKICAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAy
NTY+IG1fbG9nQ2x1c3RlcnM7CiAgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMjU2PiBtX2dseXBo
VG9DaGFyYWN0ZXJJbmRleDsKICAgICAgICAgZmxvYXQgbV93aWR0aDsKQEAgLTkxLDE5ICs5OCwx
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRGb250RmVhdHVyZXMoKTsKIAotICAgIGJvb2wg
c2V0dXBIYXJmQnV6elJ1bigpOwotICAgIGJvb2wgc2hhcGVIYXJmQnV6elJ1bigpOwotICAgIHZv
aWQgc2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihHbHlwaEJ1ZmZlciopOworICAgIGJv
b2wgY29sbGVjdEhhcmZCdXp6UnVucygpOworICAgIGJvb2wgc2hhcGVIYXJmQnV6elJ1bnMoR2x5
cGhCdWZmZXIqKTsKKyAgICB2b2lkIHNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oSGFy
ZkJ1enpSdW4qLCB1bnNpZ25lZCBydW5JbmRleEluVmlzdWFsT3JkZXIsIGhiX2J1ZmZlcl90Kiwg
R2x5cGhCdWZmZXIqKTsKIAogICAgIEdseXBoQnVmZmVyQWR2YW5jZSBjcmVhdGVHbHlwaEJ1ZmZl
ckFkdmFuY2UoZmxvYXQsIGZsb2F0KTsKIAogICAgIFZlY3RvcjxoYl9mZWF0dXJlX3QsIDQ+IG1f
ZmVhdHVyZXM7Ci0gICAgdW5zaWduZWQgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuOwotICAgIHVu
c2lnbmVkIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bjsKLSAgICBjb25zdCBTaW1wbGVGb250
RGF0YSogbV9jdXJyZW50Rm9udERhdGE7Ci0gICAgaGJfYnVmZmVyX3QqIG1faGFyZmJ1enpCdWZm
ZXI7CiAgICAgVmVjdG9yPE93blB0cjxIYXJmQnV6elJ1bj4sIDE2PiBtX2hhcmZidXp6UnVuczsK
IAorICAgIEZsb2F0UG9pbnQgbV9zdGFydE9mZnNldDsKKwogICAgIGZsb2F0IG1fdG90YWxXaWR0
aDsKIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCBhMjdhNDFmNmQyNDdkNjk0MTcxNWM5YjcyNDlkMDgzMWIwNWI1MGU2
Li4wZWIxMzBiMzQ5NTRkNjIxZmQxMzdjYTU3MWIwOGQwZmI3MGIxODZjIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMTItMDctMTEgIEtlbmljaGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gRml4IGJ1Z3MgaW4gSGFyZkJ1enpTaGFwZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwOTUxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3RzIGZv
ciBoYXJmYnV6ei1uZyBzaGFwZXIuIEkgdHJpZWQgdG8gdXNlIC1leHBlY3RlZC5odG1sIHN0eWxl
IGV4cGVjdGF0aW9ucywKKyAgICAgICAgYnV0IGl0IGRpZG4ndCB3b3JrIGJlY2F1c2UgdGhlcmUg
YXJlIHZlcnkgc2xpZ2h0IGRpZmZlcmVuY2UgYmV0d2VlbiBDb3JlVGV4dCBhbmQgSGFyZkJ1enog
aW4KKyAgICAgICAgcmVuZGVyaW5nIHJlc3VsdC4KKworICAgICAgICAqIGZhc3QvdGV4dC9oYXJm
YnV6ei1zY3JpcHQtb3JkZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L2hhcmZi
dXp6LXNlbGVjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9U
ZXN0RXhwZWN0YXRpb25zOiBOZWVkIHJlYmFzZWxpbmUuCisgICAgICAgICogcGxhdGZvcm0vZWZs
L1Rlc3RFeHBlY3RhdGlvbnM6IFNraXAgYWRkZWQgdGVzdHMgYmVjYXVzZSB0aGUgcG9ydCBkb2Vz
bid0IHVzZSBoYXJmYnV6ei4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9u
czogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnM6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Rlc3RFeHBlY3RhdGlvbnM6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW5j
YWlyby9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93azIvU2tpcHBlZDogRGl0
dG8uCisKIDIwMTItMDctMTEgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBTaW1wbGlmeSBjc3MzL2ZsZXhib3gvcmVwYWludC1ydGwtY29sdW1uLmh0bWwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9oYXJmYnV6ei1zY3JpcHQtb3JkZXIuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvdGV4dC9oYXJmYnV6ei1zY3JpcHQtb3JkZXIuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iZWYwZjA3NjZjYTgwNzkzNmM0ODk2NTk0OTYwNjM0NWE4ZGMyZThlCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhcmZidXp6LXNjcmlwdC1vcmRlci5odG1s
CkBAIC0wLDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgLmxybyB7Cisg
ICAgICAgIGZvbnQtZmFtaWx5OiAidGltZXMgbmV3IHJvbWFuIjsgLyogbm9uIEFBVCBmb250IG9u
IG1hYyAqLworICAgICAgICBkaXJlY3Rpb246bHRyOworICAgICAgICB1bmljb2RlLWJpZGk6Ymlk
aS1vdmVycmlkZTsKKyAgICB9OworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorVGhlIGZvbGxv
d2luZyB0d28gbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lOgorPHAgY2xhc3M9ImxybyI+YWJjJiN4
MDVkMjsmI3gwNWQxOyYjeDA1ZDA7JiN4MDY2MTsmI3gwNjYyOyYjeDA2NjM7PC9wPgorPHAgY2xh
c3M9ImxybyIgc3R5bGU9Ii13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAna2Vybic7Ij5h
YmMmI3gwNWQyOyYjeDA1ZDE7JiN4MDVkMDsmI3gwNjYxOyYjeDA2NjI7JiN4MDY2Mzs8L3A+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFyZmJ1
enotc2VsZWN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFyZmJ1enotc2VsZWN0
aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWEwMmQyYzRiZGMyZDEzYjM0ZWJkNDc1YWI1OWIzYWZiMzA4
ZTI2MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9oYXJmYnV6ei1z
ZWxlY3Rpb24uaHRtbApAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgor
ICAgICN0YXJnZXQgeworICAgICAgICBmb250LWZhbWlseTogInRpbWVzIG5ldyByb21hbiI7IC8q
IG5vbiBBQVQgZm9udCBvbiBtYWMgKi8KKyAgICAgICAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0
dGluZ3M6ICdrZXJuJzsKKyAgICB9OworPC9zdHlsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0
KCkKK3sKKyAgICB2YXIgdGFyZ2V0VGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJn
ZXQiKS5maXJzdENoaWxkOworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0
ZW50KHRhcmdldCwgMCwgdGFyZ2V0LCA5KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkg
b25sb2FkPSJ0ZXN0KCkiPgorPHA+VGhlIHNlbGVjdGlvbiBzaG91bGQgY292ZXIgdGhlIGFsbCBv
ZiB0aGUgYmVsb3cgdGV4dC4gVGhlcmUgc2hvdWxkIGJlIG5vIGJsYW5rIGJldHdlZW4gQyBhbmQg
Ri4KKzxkaXYgaWQ9InRhcmdldCI+CitBQkM8c3BhbiBzdHlsZT0iZGlyZWN0aW9uOiBydGw7IHVu
aWNvZGUtYmlkaTogYmlkaS1vdmVycmlkZTsiPkRFRjwvc3Bhbj5HSEkKKzwvZGl2PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggODJiOGQ2OTJlZGFjY2UxNTIyZmM2NTY4YzJlNDg4NDY1MjQxNTg1Yy4uYzA2
NzFmYmYxMTFkMDEzMjRjMWEyZGQyNzYxY2IzMjc1ZDQwNWNhYiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0zNzQzLDMgKzM3NDMsNyBA
QCBCVUdXSzkwOTAwIE1BQyA6IHRhYmxlcy9tb3ppbGxhX2V4cGVjdGVkX2ZhaWx1cmVzL290aGVy
L2VtcHR5X2NlbGxzLmh0bWwgPSBQQVNTCiAKIEJVR1dLOTA5ODAgTElOVVggTUFDIERFQlVHIDog
ZmFzdC9mb3Jtcy90ZXh0YXJlYS90ZXh0YXJlYS1zdGF0ZS1yZXN0b3JlLmh0bWwgPSBQQVNTIFRJ
TUVPVVQKIEJVR1dLOTA5ODAgV0lOIDogZmFzdC9mb3Jtcy90ZXh0YXJlYS90ZXh0YXJlYS1zdGF0
ZS1yZXN0b3JlLmh0bWwgPSBQQVNTIFRJTUVPVVQKKworLy8gTmVlZCByZWJhc2VsaW5lCitCVUdX
SzkwOTUxIDogZmFzdC90ZXh0L2hhcmZidXp6LXNlbGVjdGlvbi5odG1sID0gTUlTU0lORworQlVH
V0s5MDk1MSA6IGZhc3QvdGV4dC9oYXJmYnV6ei1zY3JpcHQtb3JkZXIuaHRtbCA9IE1JU1NJTkcK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNDdhNTM3MjYz
OWVlOWEwYjMzOTA4NzU1NWI4N2NiNmU3NmRlM2YyNC4uMTllZDk3OWY2ZGRhMjMyYTkzOTdhMWJj
Yjg4ZjgyN2MzZjBlNmExNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTczNiwzICs3MzYsNyBAQCBCVUdXSzg4MTcxIDogY3NzMS9mb3JtYXR0aW5nX21v
ZGVsL2Zsb2F0aW5nX2VsZW1lbnRzLmh0bWwgPSBURVhUCiAKIC8vIExvb2tzIGxpa2UgbWlzc2lu
ZyBtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIHN1cHBvcnQgaW4gbGlic291cC4gRmFpbGluZyBv
biBib3RoIEdUSyBhbmQgRUZMLgogQlVHV0s2ODk3OSA6IGh0dHAvdGVzdHMvbXVsdGlwYXJ0L211
bHRpcGFydC1yZXBsYWNlLW5vbi1odG1sLWNvbnRlbnQucGhwID0gVEVYVAorCisvLyBlZmwgcG9y
dCBkb2Vzbid0IHVzZSBoYXJmYnV6egorQlVHV0s5MDk1MSBTS0lQIDogZmFzdC90ZXh0L2hhcmZi
dXp6LXNlbGVjdGlvbi5odG1sID0gUEFTUworQlVHV0s5MDk1MSBTS0lQIDogZmFzdC90ZXh0L2hh
cmZidXp6LXNjcmlwdC1vcmRlci5odG1sID0gUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA4NWFiM2IwOTZiNTU2ZmI4NTM1YzFmN2ZjZTA0NWMzZDZk
OWU2NzQ4Li43OTNjNTQ4YmVlNjQ5MmQyYTEzMjM2MTgwMGVhNzAwZDA4ZDk0Y2MzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTI1Miw2ICsxMjUyLDEw
IEBAIEJVR1dLODkyMzEgOiBmYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMuaHRtbCA9IFRFWFQK
IAogQlVHV0s5MTAwOSBERUJVRyA6IGZhc3QveHNsL3hzbHQtbWlzc2luZy1uYW1lc3BhY2UtaW4t
eHNsLnhtbCA9IFRFWFQKIAorLy8gZ3RrIHBvcnQgZG9lc24ndCB1c2UgaGFyZmJ1enoKK0JVR1dL
OTA5NTEgU0tJUCA6IGZhc3QvdGV4dC9oYXJmYnV6ei1zZWxlY3Rpb24uaHRtbCA9IFBBU1MKK0JV
R1dLOTA5NTEgU0tJUCA6IGZhc3QvdGV4dC9oYXJmYnV6ei1zY3JpcHQtb3JkZXIuaHRtbCA9IFBB
U1MKKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyBFbmQgb2YgVGVzdHMg
ZmFpbGluZwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGE0ZWNmZTlmYjMzZjg5NjRhMDE0NGJj
OGZiMTZhZTczMGZhMjk0MmIuLjZiZmIyMDhmMzU2YjQ5OGE3MTk5ZGUzYWRjY2IyNTg4MzBkYjlk
ZTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCkBAIC0yODks
MyArMjg5LDcgQEAgQlVHV0s4ODE3MSA6IGNzczEvZm9ybWF0dGluZ19tb2RlbC9mbG9hdGluZ19l
bGVtZW50cy5odG1sID0gVEVYVAogCiAvLyBUZXh0IEF1dG9zaXppbmcgaXMgbm90IGVuYWJsZWQu
CiBCVUdXSzg0MTg2IFNLSVAgOiBmYXN0L3RleHQtYXV0b3NpemluZyA9IFBBU1MKKworLy8gbWFj
IHBvcnQgZG9lc24ndCB1c2UgaGFyZmJ1enoKK0JVR1dLOTA5NTEgU0tJUCA6IGZhc3QvdGV4dC9o
YXJmYnV6ei1zZWxlY3Rpb24uaHRtbCA9IFBBU1MKK0JVR1dLOTA5NTEgU0tJUCA6IGZhc3QvdGV4
dC9oYXJmYnV6ei1zY3JpcHQtb3JkZXIuaHRtbCA9IFBBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL3F0L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGRmYTU5MDIzYjJhMmM4Yzk4Njg4OTcwY2M0M2FhNGUx
MGQyNDhkMzIuLjYxMjZmOGU5NzllZGZhOWIyNDEyODY0M2QwZjIwZTg5YjA2ODUyMTQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTEwLDMgKzExMCw3IEBA
IEJVR1dLODgxNzEgOiBjc3MxL2Zvcm1hdHRpbmdfbW9kZWwvZmxvYXRpbmdfZWxlbWVudHMuaHRt
bCA9IFRFWFQKIAogLy8gVGV4dCBBdXRvc2l6aW5nIGlzIG5vdCBlbmFibGVkLgogQlVHV0s4NDE4
NiBTS0lQIDogZmFzdC90ZXh0LWF1dG9zaXppbmcgPSBQQVNTCisKKy8vIHF0IHBvcnQgZG9lc24n
dCB1c2UgaGFyZmJ1enoKK0JVR1dLOTA5NTEgU0tJUCA6IGZhc3QvdGV4dC9oYXJmYnV6ei1zZWxl
Y3Rpb24uaHRtbCA9IFBBU1MKK0JVR1dLOTA5NTEgU0tJUCA6IGZhc3QvdGV4dC9oYXJmYnV6ei1z
Y3JpcHQtb3JkZXIuaHRtbCA9IFBBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5kZXggM2Mz
ZWIxNGYzZjQwNWJlMjVjMWE2OGVjYzAwYjlhNzQ1NGM5MjIxNi4uODJlYTI4NjcwODI3NTlhN2Q3
YzMzNDNhZWMxZGNiNDAzYjVhZDQ2OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTE5
NDUsMyArMTk0NSw3IEBAIHN2Zy9XM0MtU1ZHLTEuMS1TRS90ZXh0LWludHJvLTA1LXQuc3ZnCiAj
IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IDEuMSAoRU5BQkxFX0NTUF9ORVhUKSBpcyBub3QgZW5h
YmxlZAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU1NTgKIGh0
dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5LzEuMQorCisjIHdpbiBwb3J0
IGRvZXNuJ3QgdXNlIGhhcmZidXp6CitmYXN0L3RleHQvaGFyZmJ1enotc2VsZWN0aW9uLmh0bWwK
K2Zhc3QvdGV4dC9oYXJmYnV6ei1zY3JpcHQtb3JkZXIuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1NraXBwZWQKaW5kZXggZDBmOTFhZmI3ZGI2MmIyNmRjMWI3MmVlYmY0ZDhjODYxZDFl
OWI5ZC4uMmUzNTA4ZjI0YTZjYjEwMTIzNTdiZThlNzNkMWRmOGVjODlhZjBjYiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCkBAIC0yMTI3LDMgKzIxMjcsNyBAQCBodHRwL3Rl
c3RzL3NlY3VyaXR5L3JlZmVycmVyLXBvbGljeS1yZWRpcmVjdC1saW5rLmh0bWwKICMgQ29udGVu
dCBTZWN1cml0eSBQb2xpY3kgMS4xIChFTkFCTEVfQ1NQX05FWFQpIGlzIG5vdCBlbmFibGVkCiAj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTU1OAogaHR0cC90ZXN0
cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvMS4xCisKKyMgd2luIGNhaXJvIHBvcnQg
ZG9lc24ndCB1c2UgaGFyZmJ1enoKK2Zhc3QvdGV4dC9oYXJmYnV6ei1zZWxlY3Rpb24uaHRtbAor
ZmFzdC90ZXh0L2hhcmZidXp6LXNjcmlwdC1vcmRlci5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lw
cGVkCmluZGV4IGJiYWM1NGYxOTgwZmYyZjliNzI3M2Y3MjY1ZjM5NzZkNTAxMTRhY2UuLjI3OGZm
YWY0ZTEyZjc1Zjk5MWNmZTZlYTI4OGNhYWQwOTJlZWU4NGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9T
a2lwcGVkCkBAIC0xNDIxLDYgKzE0MjEsMTAgQEAgZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNl
ci1xdWlya3MuaHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTAxNzcKIGZhc3QvZXZlbnRzL2RyYWctZGlzcGxheS1ub25lLWVsZW1lbnQuaHRtbAogCisjIHdr
MiBkb2Vzbid0IHVzZSBoYXJmYnV6egorZmFzdC90ZXh0L2hhcmZidXp6LXNlbGVjdGlvbi5odG1s
CitmYXN0L3RleHQvaGFyZmJ1enotc2NyaXB0LW9yZGVyLmh0bWwKKwogIyMjIEVORCBPRiAoNCkg
RmVhdHVyZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBpbiBXZWJLaXQyIGFuZCBsaWtlbHkgbmV2
ZXIgd2lsbCBiZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152098</attachid>
            <date>2012-07-12 16:52:58 -0700</date>
            <delta_ts>2012-07-12 19:20:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-90951-20120713085256.patch</filename>
            <type>text/plain</type>
            <size>33325</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTg3MjE1N2FlMmNiMTI2
MGVjMDNmNGVmYzE2MTkxYzk0ZjM4YzRlYy4uNjExNmJjMjI1YmNmMzMxYzZlYWJlNGZmMzQyODM4
N2U3MDU0MmI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA3LTExICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEZpeCBidWdzIGluIEhhcmZCdXp6U2hhcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hh
bmcuCisKKyAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaGFzIGZvbGxvd2luZyBw
cm9ibGVtczoKKyAgICAgICAgLSBDYW5ub3QgcmVuZGVyIFJUTCB0ZXh0IGlmIHRoZSBUZXh0UnVu
IGlzIGRpdmlkZWQgaW50byBtb3JlIHRoYW4gdHdvCisgICAgICAgICAgSGFyZkJ1enpSdW4uCisg
ICAgICAgIC0gU2NyaXB0IGhhbmRsaW5nIGluIFRleHRSdW4gcGFydGl0aW9uaW5nIGlzIGluY29y
cmVjdC4KKyAgICAgICAgLSBJbmFjY3VyYXRlIGNhbGN1bGF0aW9uIG9mIHNlbGVjdGlvbiByZWN0
LgorICAgICAgICAtIFdyb25nIHJlbmRlcmluZyBwb3NpdGlvbiB3aGVuIHRoZSBmaXJzdCBnbHlw
aCBvZiB0aGUgVGV4dFJ1biBoYXZlCisgICAgICAgICAgbm9uLXplcm8gb2Zmc2V0cyBpbiB0ZXJt
cyBvZiBIYXJmQnV6ei4KKworICAgICAgICBUbyBmaXggdGhlc2UgcHJvYmxlbXMgSSByZXdyb3Rl
IEhhcmZCdXp6U2hhcGVyIGNsYXNzLiBIZXJlIGlzIHRoZSBzdW1tYXJ5OgorICAgICAgICAtIERp
dmlkZSB0aGUgd2hvbGUgcmFuZ2Ugb2YgVGV4dFJ1biBmaXJzdCwgdGhlbiBzaGFwZSB0aGVtIGlu
IHZpc3VhbAorICAgICAgICAgIG9yZGVyLgorICAgICAgICAtIERpdmlkZSBUZXh0UnVuIGluIHRo
ZSBzYW1lIHdheSBvZiBvbGQtaGFyZmJ1enoncworICAgICAgICAgIGhiX3V0ZjE2X3NjcmlwdF9y
dW5fbmV4dCgpLgorICAgICAgICAtIFByZWZlciBmbG9hdCB0aGFuIGludCB3aGVuIGNhbGN1bGF0
aW5nIHNlbGVjdGlvbi4KKyAgICAgICAgLSBBZGp1c3QgdGhlIGRyYXdpbmcgcG9pbnQgYWZ0ZXIg
c2hhcGluZy4KKworICAgICAgICBBZGRlZCB0ZXN0cyBjb3ZlcnMgdGhlIGZpeCBleGNlcHQgZm9y
IHRoZSBsYXN0IHByb2JsZW0uIFRoZSBsYXN0IHByb2JsZW0gd2lsbCBiZSBjb3ZlcmVkCisgICAg
ICAgIGJ5IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2NvbXBsZXgtam9pbmluZy11c2luZy1ncG9z
Lmh0bWwgYWZ0ZXIgY2hyb21pdW0gbGludXggcG9ydCBzd2l0Y2hlcworICAgICAgICB0byB1c2Ug
SGFyZkJ1enpTaGFwZXIuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvdGV4dC9zaGFwaW5nL3NoYXBp
bmctc2NyaXB0LW9yZGVyLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvdGV4dC9zaGFwaW5nL3No
YXBpbmctc2VsZWN0aW9uLXJlY3QuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdD
b21wbGV4VGV4dCk6IEFkanVzdHMgcG9pbnQgYWZ0ZXIgc2hhcGluZy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OkhhcmZCdXp6UnVuKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
UnVuOjphcHBseVNoYXBlUmVzdWx0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6
elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kQWR2YW5jZSk6IE9mZnNldHMgYXJlIG5v
IGxvbmdlciBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1
enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCk6IENhbGN1bGF0ZXMgY2hhcmFjdGVyIG9mZnNldCBi
YXNlZCBvbiBhZHZhbmNlLgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplQ2hhcmFjdGVycyk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpTaGFwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlKTogRGl2aWRlcyBUZXh0UnVu
IGZpcnN0LCB0aGVuIHNoYXBlcyB0aGVtLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFw
ZXI6OmFkanVzdFN0YXJ0UG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6
U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpI
YXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKTogRm9s
bG93ZWQgb3RoZXIgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpz
ZWxlY3Rpb25SZWN0KTogVXNlIGZsb2F0IGZvciBjYWxjdWxhdGluZyBzZWxlY3Rpb24uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaDoKKyAg
ICAgICAgKEhhcmZCdXp6U2hhcGVyKTogSG9sZHMgdGhlIHN0YXJ0IGluZGV4IG9mIGNoYXJhY3Rl
ci4gUmVtb3ZlZCB1bm5lY2Vzc2FyeSB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpIYXJm
QnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoSGFyZkJ1
enpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpm
b250RGF0YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpzdGFydEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OmdseXBocyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGFy
ZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphZHZhbmNlcyk6IERpdHRvLgorCiAyMDEyLTA3LTEx
ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gUmVuYW1lIGxheWVyUmVjdCB0byBjb250ZW50UmVjdCBmb3IgcmVjdHMgdGhhdCBsaXZlIGlu
IGNvbnRlbnQgc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCmluZGV4IGNjOGVmZWI0Mzc1N2RkNTI4
ODI4YWQyZDg1YTkxYzA3MzU0MmNhZjcuLjE5YTBiOWE2ZDVhNzE0MmQ4MjgxNzFjMTg5M2IxZWI2
NDNkNWNhYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcApAQCAtMTg3LDcgKzE4Nyw4IEBAIHZvaWQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRSdW4m
IHJ1biwKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoIXNo
YXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKQogICAgICAgICByZXR1cm47Ci0gICAgZHJhd0dseXBo
QnVmZmVyKGdjLCBydW4sIGdseXBoQnVmZmVyLCBwb2ludCk7CisgICAgRmxvYXRQb2ludCBhZGp1
c3RlZFBvaW50ID0gc2hhcGVyLmFkanVzdFN0YXJ0UG9pbnQocG9pbnQpOworICAgIGRyYXdHbHlw
aEJ1ZmZlcihnYywgcnVuLCBnbHlwaEJ1ZmZlciwgYWRqdXN0ZWRQb2ludCk7CiAjZWxzZQogICAg
IFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAg
IENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1biwgcG9pbnQueCgpLCBw
b2ludC55KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwCmluZGV4IDNlZWQ4OTdiYTZh
MTFhNzBmMDY0NzI5YmQ4OTIzYzVkNzkyNTc3MzYuLjY4ZDE5NmRmMWU2NjE3YzY5NDYxODBlOWY0
NmIxZjYxMTQyNDkyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJIYXJmQnV6elNoYXBlci5oIgogCiAjaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkhhcmZCdXp6RmFjZS5oIgogI2luY2x1ZGUgIlN1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJoYi1pY3Uu
aCIKQEAgLTQzLDE5ICs0NCw0NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitjbGFzcyBIYXJmQnV6elNjb3BlZFB0ciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiB2b2lkICgqRGVzdHJveUZ1bmN0aW9uKShUKik7CisKKyAgICBIYXJmQnV6elNjb3BlZFB0
cihUKiBwdHIsIERlc3Ryb3lGdW5jdGlvbiBkZXN0cm95KQorICAgICAgICA6IG1fcHRyKHB0cikK
KyAgICAgICAgLCBtX2Rlc3Ryb3koZGVzdHJveSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2Rl
c3Ryb3kpOworICAgIH0KKyAgICB+SGFyZkJ1enpTY29wZWRQdHIoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fcHRyKQorICAgICAgICAgICAgKCptX2Rlc3Ryb3kpKG1fcHRyKTsKKyAgICB9CisKKyAg
ICBUKiBnZXQoKSB7IHJldHVybiBtX3B0cjsgfQorcHJpdmF0ZToKKyAgICBUKiBtX3B0cjsKKyAg
ICBEZXN0cm95RnVuY3Rpb24gbV9kZXN0cm95OworfTsKKwogc3RhdGljIGlubGluZSBmbG9hdCBo
YXJmYnV6elBvc2l0aW9uVG9GbG9hdChoYl9wb3NpdGlvbl90IHZhbHVlKQogewogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpIC8gKDEgPDwgMTYpOwogfQogCi1IYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OkhhcmZCdXp6UnVuKHVuc2lnbmVkIG51bUNoYXJhY3RlcnMsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCi0gICAg
OiBtX251bUNoYXJhY3RlcnMobnVtQ2hhcmFjdGVycykKK0hhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elJ1bjo6SGFyZkJ1enpSdW4oY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25l
ZCBzdGFydEluZGV4LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbikKKyAgICA6IG1fZm9udERhdGEoZm9udERhdGEpCisgICAgLCBtX3N0YXJ0SW5kZXgoc3Rh
cnRJbmRleCkKKyAgICAsIG1fbnVtQ2hhcmFjdGVycyhudW1DaGFyYWN0ZXJzKQogICAgICwgbV9k
aXJlY3Rpb24oZGlyZWN0aW9uKQogeworfQorCit2b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elJ1bjo6YXBwbHlTaGFwZVJlc3VsdChoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCit7CiAg
ICAgbV9udW1HbHlwaHMgPSBoYl9idWZmZXJfZ2V0X2xlbmd0aChoYXJmYnV6ekJ1ZmZlcik7CiAg
ICAgbV9nbHlwaHMucmVzaXplKG1fbnVtR2x5cGhzKTsKICAgICBtX2FkdmFuY2VzLnJlc2l6ZSht
X251bUdseXBocyk7Ci0gICAgbV9vZmZzZXRzLnJlc2l6ZShtX251bUdseXBocyk7CiAgICAgbV9n
bHlwaFRvQ2hhcmFjdGVySW5kZXgucmVzaXplKG1fbnVtR2x5cGhzKTsKICAgICBtX2xvZ0NsdXN0
ZXJzLnJlc2l6ZShtX251bUNoYXJhY3RlcnMpOwogCkBAIC04MiwxMCArMTExLDkgQEAgSGFyZkJ1
enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpIYXJmQnV6elJ1bih1bnNpZ25lZCBudW1DaGFyYWN0ZXJz
LCBUZXh0RGlyZWN0aW9uIGQKICAgICB9CiB9CiAKLXZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5
cGhJZCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgYWR2YW5jZSkKK3ZvaWQgSGFyZkJ1enpTaGFw
ZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlwaEFuZEFkdmFuY2UodW5zaWduZWQgaW5kZXgsIHVpbnQx
Nl90IGdseXBoSWQsIGZsb2F0IGFkdmFuY2UpCiB7CiAgICAgbV9nbHlwaHNbaW5kZXhdID0gZ2x5
cGhJZDsKLSAgICBtX29mZnNldHNbaW5kZXhdLnNldCh4LCB5KTsKICAgICBtX2FkdmFuY2VzW2lu
ZGV4XSA9IGFkdmFuY2U7CiB9CiAKQEAgLTEwNiwzMSArMTM0LDQ5IEBAIGludCBIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OmNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKGludCB0YXJnZXRY
KQogICAgIHJldHVybiBydGwoKSA/IDAgOiBtX251bUNoYXJhY3RlcnM7CiB9CiAKLWludCBIYXJm
QnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZz
ZXQpCitmbG9hdCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnhQb3NpdGlvbkZvck9mZnNl
dCh1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKG9mZnNldCA8IG1fbnVtQ2hhcmFjdGVy
cyk7CiAgICAgdW5zaWduZWQgZ2x5cGhJbmRleCA9IG1fbG9nQ2x1c3RlcnNbb2Zmc2V0XTsKLSAg
ICBBU1NFUlQoZ2x5cGhJbmRleCA8IG1fbnVtR2x5cGhzKTsKLSAgICBmbG9hdCBwb3NpdGlvbiA9
IG1fb2Zmc2V0c1tnbHlwaEluZGV4XS54KCk7CisgICAgQVNTRVJUKGdseXBoSW5kZXggPD0gbV9u
dW1HbHlwaHMpOworICAgIGZsb2F0IHBvc2l0aW9uID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZ2x5cGhJbmRleDsgKytpKQorICAgICAgICBwb3NpdGlvbiArPSBtX2FkdmFuY2Vz
W2ldOwogICAgIGlmIChydGwoKSkKICAgICAgICAgcG9zaXRpb24gKz0gbV9hZHZhbmNlc1tnbHlw
aEluZGV4XTsKLSAgICByZXR1cm4gcm91bmRmKHBvc2l0aW9uKTsKKyAgICByZXR1cm4gcG9zaXRp
b247Cit9CisKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIHNv
dXJjZSwgVUNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoKQoreworICAgIGludCBwb3NpdGlv
biA9IDA7CisgICAgYm9vbCBlcnJvciA9IGZhbHNlOworICAgIHdoaWxlIChwb3NpdGlvbiA8IGxl
bmd0aCkgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAgICAgICAgaW50IG5leHRQb3Np
dGlvbiA9IHBvc2l0aW9uOworICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwg
bGVuZ3RoLCBjaGFyYWN0ZXIpOworICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKGNoYXJh
Y3RlcikpCisgICAgICAgICAgICBjaGFyYWN0ZXIgPSAnICc7CisgICAgICAgIGVsc2UgaWYgKEZv
bnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChjaGFyYWN0ZXIpKQorICAg
ICAgICAgICAgY2hhcmFjdGVyID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgIFUxNl9BUFBFTkQo
ZGVzdGluYXRpb24sIHBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3RlciwgZXJyb3IpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJyb3IpOworICAgICAgICBwb3NpdGlvbiA9IG5leHRQ
b3NpdGlvbjsKKyAgICB9CiB9CiAKIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcihjb25z
dCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4pCiAgICAgOiBIYXJmQnV6elNoYXBlckJh
c2UoZm9udCwgcnVuKQotICAgICwgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuKDApCi0gICAgLCBt
X251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4oMCkKLSAgICAsIG1faGFyZmJ1enpCdWZmZXIoMCkK
IHsKLSAgICBzZXROb3JtYWxpemVkQnVmZmVyKCk7CisgICAgbV9ub3JtYWxpemVkQnVmZmVyID0g
YWRvcHRBcnJheVB0cihuZXcgVUNoYXJbbV9ydW4ubGVuZ3RoKCkgKyAxXSk7CisgICAgbV9ub3Jt
YWxpemVkQnVmZmVyTGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgbm9ybWFsaXplQ2hhcmFj
dGVycyhtX3J1bi5jaGFyYWN0ZXJzKCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3Jt
YWxpemVkQnVmZmVyTGVuZ3RoKTsKKyAgICBzZXRQYWRkaW5nKG1fcnVuLmV4cGFuc2lvbigpKTsK
ICAgICBzZXRGb250RmVhdHVyZXMoKTsKIH0KIAogSGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNo
YXBlcigpCiB7Ci0gICAgaWYgKG1faGFyZmJ1enpCdWZmZXIpCi0gICAgICAgIGhiX2J1ZmZlcl9k
ZXN0cm95KG1faGFyZmJ1enpCdWZmZXIpOwogfQogCiB2b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRG
b250RmVhdHVyZXMoKQpAQCAtMTUyLDEwMSArMTk4LDEwMSBAQCB2b2lkIEhhcmZCdXp6U2hhcGVy
OjpzZXRGb250RmVhdHVyZXMoKQogCiBib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZShHbHlwaEJ1
ZmZlciogZ2x5cGhCdWZmZXIpCiB7Ci0gICAgbV90b3RhbFdpZHRoID0gMDsKLSAgICB3aGlsZSAo
c2V0dXBIYXJmQnV6elJ1bigpKSB7Ci0gICAgICAgIGlmICghc2hhcGVIYXJmQnV6elJ1bigpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzZXRHbHlwaFBvc2l0aW9uc0Zvckhh
cmZCdXp6UnVuKGdseXBoQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1faGFyZmJ1enpSdW5z
LnNpemUoKSkKKyAgICBpZiAoIWNvbGxlY3RIYXJmQnV6elJ1bnMoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCisgICAgbV90b3RhbFdpZHRoID0gMDsKKyAgICBpZiAoIXNoYXBlSGFyZkJ1enpS
dW5zKGdseXBoQnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdG90YWxXaWR0
aCA9IHJvdW5kZihtX3RvdGFsV2lkdGgpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhh
cmZCdXp6U2hhcGVyOjpzZXR1cEhhcmZCdXp6UnVuKCkKK0Zsb2F0UG9pbnQgSGFyZkJ1enpTaGFw
ZXI6OmFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgbV9z
dGFydEluZGV4T2ZDdXJyZW50UnVuICs9IG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bjsKKyAg
ICByZXR1cm4gcG9pbnQgKyBtX3N0YXJ0T2Zmc2V0OworfQogCi0gICAgLy8gSXRlcmF0ZSB0aHJv
dWdoIHRoZSB0ZXh0IHRvIHRha2UgdGhlIGxhcmdlc3QgcmFuZ2UgdGhhdCBzdGF5cyB3aXRoaW4K
LSAgICAvLyBhIHNpbmdsZSBmb250LgotICAgIGludCBlbmRPZlJ1bkluZGV4ID0gbV9ub3JtYWxp
emVkQnVmZmVyTGVuZ3RoIC0gbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuOwotICAgIFN1cnJvZ2F0
ZVBhaXJBd2FyZVRleHRJdGVyYXRvciBpdGVyYXRvcihtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkg
KyBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4sIDAsIGVuZE9mUnVuSW5kZXgsIGVuZE9mUnVuSW5k
ZXgpOworYm9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucygpCit7CisgICAg
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKG1fbm9ybWFsaXplZEJ1ZmZl
ci5nZXQoKSwgMCwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoLCBtX25vcm1hbGl6ZWRCdWZmZXJM
ZW5ndGgpOwogICAgIFVDaGFyMzIgY2hhcmFjdGVyOwogICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5n
dGggPSAwOworICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4gPSAwOwogICAgIGlm
ICghaXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBtX2N1cnJlbnRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOworICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
aGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKICAgICBVRXJyb3JDb2RlIGVycm9yQ29kZSA9IFVf
WkVST19FUlJPUjsKLSAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gdXNjcmlwdF9nZXRT
Y3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKKyAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0
ID0gdXNjcmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKICAgICBpZiAoVV9G
QUlMVVJFKGVycm9yQ29kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY3VycmVu
dFNjcmlwdCA9PSBVU0NSSVBUX0lOSEVSSVRFRCkKLSAgICAgICAgY3VycmVudFNjcmlwdCA9IFVT
Q1JJUFRfQ09NTU9OOwotICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsg
aXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZh
bmNlKGNsdXN0ZXJMZW5ndGgpKSB7Ci0gICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBuZXh0
Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNl
KS5mb250RGF0YTsKLSAgICAgICAgaWYgKG5leHRGb250RGF0YSAhPSBtX2N1cnJlbnRGb250RGF0
YSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBVU2NyaXB0Q29kZSBuZXh0U2NyaXB0ID0g
dXNjcmlwdF9nZXRTY3JpcHQoY2hhcmFjdGVyLCAmZXJyb3JDb2RlKTsKLSAgICAgICAgaWYgKFVf
RkFJTFVSRShlcnJvckNvZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoY3VycmVudFNjcmlwdCA9PSBuZXh0U2NyaXB0IHx8IG5leHRTY3JpcHQgPT0gVVNDUklQVF9J
TkhFUklURUQgfHwgbmV4dFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAoY3VycmVudFNjcmlwdCA9PSBVU0NSSVBUX0NPTU1PTikKLSAg
ICAgICAgICAgIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2NyaXB0OwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuID0g
aXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOwotCi0gICAgaWYgKCFtX2hhcmZidXp6QnVmZmVy
KSB7Ci0gICAgICAgIG1faGFyZmJ1enpCdWZmZXIgPSBoYl9idWZmZXJfY3JlYXRlKCk7Ci0gICAg
ICAgIGhiX2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyhtX2hhcmZidXp6QnVmZmVyLCBoYl9pY3Vf
Z2V0X3VuaWNvZGVfZnVuY3MoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGhiX2J1ZmZlcl9yZXNl
dChtX2hhcmZidXp6QnVmZmVyKTsKLSAgICBoYl9idWZmZXJfc2V0X3NjcmlwdChtX2hhcmZidXp6
QnVmZmVyLCBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdChjdXJyZW50U2NyaXB0KSk7Ci0KLSAgICAv
LyBXZWJLaXQgYWx3YXlzIHNldHMgZGlyZWN0aW9uIHRvIExUUiBkdXJpbmcgd2lkdGggY2FsY3Vs
YXRpb24uCi0gICAgLy8gV2Ugb25seSBzZXQgZGlyZWN0aW9uIHdoZW4gZGlyZWN0aW9uIGlzIGV4
cGxpY2l0bHkgc2V0IHRvIFJUTCBzbyB0aGF0Ci0gICAgLy8gcHJldmVudG5nIHdyb25nIHdpZHRo
IGNhbGN1bGF0aW9uLgotICAgIGlmIChtX3J1bi5ydGwoKSkKLSAgICAgICAgaGJfYnVmZmVyX3Nl
dF9kaXJlY3Rpb24obV9oYXJmYnV6ekJ1ZmZlciwgSEJfRElSRUNUSU9OX1JUTCk7Ci0KLSAgICAv
LyBEZXRlcm1pbmUgd2hldGhlciB0aGlzIHJ1biBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gc21h
bGwgY2Fwcy4KLSAgICAvLyBuZXh0U2NyaXB0UnVuKCkgd2lsbCBhbHdheXMgc2VuZCB1cyBhIHJ1
biBvZiB0aGUgc2FtZSBjYXNlLCBiZWNhdXNlIGEKLSAgICAvLyBjYXNlIGNoYW5nZSB3aGlsZSBp
biBzbWFsbC1jYXBzIG1vZGUgYWx3YXlzIHJlc3VsdHMgaW4gZGlmZmVyZW50Ci0gICAgLy8gRm9u
dERhdGEsIHNvIHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgZmlyc3QgY2hhcmFjdGVyJ3MgY2Fz
ZS4KLSAgICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNsb3dlcihtX25vcm1hbGl6
ZWRCdWZmZXJbbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuXSkpIHsKLSAgICAgICAgU3RyaW5nIHVw
cGVyVGV4dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBtX3N0YXJ0SW5kZXhP
ZkN1cnJlbnRSdW4sIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7Ci0gICAgICAgIHVwcGVy
VGV4dC5tYWtlVXBwZXIoKTsKLSAgICAgICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmds
eXBoRGF0YUZvckNoYXJhY3Rlcih1cHBlclRleHRbMF0sIGZhbHNlLCBTbWFsbENhcHNWYXJpYW50
KS5mb250RGF0YTsKLSAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihtX2hhcmZidXp6QnVmZmVy
LCB1cHBlclRleHQuY2hhcmFjdGVycygpLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIDAs
IG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGhiX2J1
ZmZlcl9hZGRfdXRmMTYobV9oYXJmYnV6ekJ1ZmZlciwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgp
ICsgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4s
IDAsIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkbyB7CisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBu
ZXh0Rm9udERhdGE7CisgICAgICAgIFVTY3JpcHRDb2RlIGN1cnJlbnRTY3JpcHQgPSBuZXh0U2Ny
aXB0OworCisgICAgICAgIGZvciAoaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKTsgaXRl
cmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5hZHZhbmNl
KGNsdXN0ZXJMZW5ndGgpKSB7CisgICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICAgICAg
ICAgIGlmIChuZXh0Rm9udERhdGEgIT0gY3VycmVudEZvbnREYXRhKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgbmV4dFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNoYXJh
Y3RlciwgJmVycm9yQ29kZSk7CisgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yQ29kZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKChjdXJyZW50
U2NyaXB0ICE9IG5leHRTY3JpcHQpICYmIChjdXJyZW50U2NyaXB0ICE9IFVTQ1JJUFRfSU5IRVJJ
VEVEKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25l
ZCBudW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuID0gaXRlcmF0b3IuY3VycmVudENoYXJhY3Rlcigp
IC0gc3RhcnRJbmRleE9mQ3VycmVudFJ1bjsKKyAgICAgICAgbV9oYXJmYnV6elJ1bnMuYXBwZW5k
KEhhcmZCdXp6UnVuOjpjcmVhdGUoY3VycmVudEZvbnREYXRhLCBzdGFydEluZGV4T2ZDdXJyZW50
UnVuLCBudW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCBtX3J1bi5kaXJlY3Rpb24oKSkpOworICAg
ICAgICBjdXJyZW50Rm9udERhdGEgPSBuZXh0Rm9udERhdGE7CisgICAgICAgIHN0YXJ0SW5kZXhP
ZkN1cnJlbnRSdW4gPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgfSB3aGlsZSAo
aXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKTsKKworICAgIHJldHVy
biAhbV9oYXJmYnV6elJ1bnMuaXNFbXB0eSgpOwogfQogCi1ib29sIEhhcmZCdXp6U2hhcGVyOjpz
aGFwZUhhcmZCdXp6UnVuKCkKK2Jvb2wgSGFyZkJ1enpTaGFwZXI6OnNoYXBlSGFyZkJ1enpSdW5z
KEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIHsKLSAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0
Zm9ybURhdGEgPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmbV9jdXJyZW50Rm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpKTsKLSAgICBIYXJmQnV6ekZhY2UqIGZhY2UgPSBwbGF0Zm9ybURh
dGEtPmhhcmZidXp6RmFjZSgpOwotICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGhiX2ZvbnRfdCogaGFyZmJ1enpGb250ID0gZmFjZS0+Y3JlYXRlRm9udCgpOwotICAg
IGhiX3NoYXBlKGhhcmZidXp6Rm9udCwgbV9oYXJmYnV6ekJ1ZmZlciwgbV9mZWF0dXJlcy5zaXpl
KCkgPiAwID8gbV9mZWF0dXJlcy5kYXRhKCkgOiAwLCBtX2ZlYXR1cmVzLnNpemUoKSk7Ci0gICAg
aGJfZm9udF9kZXN0cm95KGhhcmZidXp6Rm9udCk7Ci0gICAgbV9oYXJmYnV6elJ1bnMuYXBwZW5k
KEhhcmZCdXp6UnVuOjpjcmVhdGUobV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCBtX3J1bi5k
aXJlY3Rpb24oKSwgbV9oYXJmYnV6ekJ1ZmZlcikpOworICAgIEhhcmZCdXp6U2NvcGVkUHRyPGhi
X2J1ZmZlcl90PiBoYXJmYnV6ekJ1ZmZlcihoYl9idWZmZXJfY3JlYXRlKCksIGhiX2J1ZmZlcl9k
ZXN0cm95KTsKKyAgICBoYl9idWZmZXJfc2V0X3VuaWNvZGVfZnVuY3MoaGFyZmJ1enpCdWZmZXIu
Z2V0KCksIGhiX2ljdV9nZXRfdW5pY29kZV9mdW5jcygpKTsKKyAgICBpZiAobV9ydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKQorICAgICAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbihoYXJmYnV6
ekJ1ZmZlci5nZXQoKSwgbV9ydW4ucnRsKCkgPyBIQl9ESVJFQ1RJT05fUlRMIDogSEJfRElSRUNU
SU9OX0xUUik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmYnV6elJ1bnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgcnVuSW5kZXggPSBtX3J1bi5ydGwoKSA/
IG1faGFyZmJ1enpSdW5zLnNpemUoKSAtIGkgLSAxIDogaTsKKyAgICAgICAgSGFyZkJ1enpSdW4q
IGN1cnJlbnRSdW4gPSBtX2hhcmZidXp6UnVuc1tydW5JbmRleF0uZ2V0KCk7CisgICAgICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVuLT5mb250RGF0
YSgpOworCisgICAgICAgIGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9pc2xvd2VyKG1f
bm9ybWFsaXplZEJ1ZmZlcltjdXJyZW50UnVuLT5zdGFydEluZGV4KCldKSkgeworICAgICAgICAg
ICAgU3RyaW5nIHVwcGVyVGV4dCA9IFN0cmluZyhtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBj
dXJyZW50UnVuLT5zdGFydEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSk7Cisg
ICAgICAgICAgICB1cHBlclRleHQubWFrZVVwcGVyKCk7CisgICAgICAgICAgICBjdXJyZW50Rm9u
dERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcih1cHBlclRleHRbMF0sIGZhbHNl
LCBTbWFsbENhcHNWYXJpYW50KS5mb250RGF0YTsKKyAgICAgICAgICAgIGhiX2J1ZmZlcl9hZGRf
dXRmMTYoaGFyZmJ1enpCdWZmZXIuZ2V0KCksIHVwcGVyVGV4dC5jaGFyYWN0ZXJzKCksIGN1cnJl
bnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVtQ2hhcmFjdGVycygpKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhhcmZidXp6
QnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCkgKyBjdXJyZW50UnVuLT5zdGFy
dEluZGV4KCksIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSwgMCwgY3VycmVudFJ1bi0+bnVt
Q2hhcmFjdGVycygpKTsKKworICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEg
PSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmY3VycmVudEZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKSk7CisgICAgICAgIEhhcmZCdXp6RmFjZSogZmFjZSA9IHBsYXRmb3JtRGF0YS0+aGFy
ZmJ1enpGYWNlKCk7CisgICAgICAgIGlmICghZmFjZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgSGFyZkJ1enpTY29wZWRQdHI8aGJfZm9udF90PiBoYXJmYnV6ekZvbnQoZmFj
ZS0+Y3JlYXRlRm9udCgpLCBoYl9mb250X2Rlc3Ryb3kpOworICAgICAgICBoYl9zaGFwZShoYXJm
YnV6ekZvbnQuZ2V0KCksIGhhcmZidXp6QnVmZmVyLmdldCgpLCBtX2ZlYXR1cmVzLmlzRW1wdHko
KSA/IDAgOiBtX2ZlYXR1cmVzLmRhdGEoKSwgbV9mZWF0dXJlcy5zaXplKCkpOworCisgICAgICAg
IGN1cnJlbnRSdW4tPmFwcGx5U2hhcGVSZXN1bHQoaGFyZmJ1enpCdWZmZXIuZ2V0KCkpOworICAg
ICAgICBzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKGN1cnJlbnRSdW4sIGksIGhhcmZi
dXp6QnVmZmVyLmdldCgpLCBnbHlwaEJ1ZmZlcik7CisKKyAgICAgICAgaGJfYnVmZmVyX3Jlc2V0
KGhhcmZidXp6QnVmZmVyLmdldCgpKTsKKyAgICAgICAgaWYgKG1fcnVuLmRpcmVjdGlvbmFsT3Zl
cnJpZGUoKSkKKyAgICAgICAgICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uKGhhcmZidXp6QnVm
ZmVyLmdldCgpLCBtX3J1bi5ydGwoKSA/IEhCX0RJUkVDVElPTl9SVEwgOiBIQl9ESVJFQ1RJT05f
TFRSKTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSGFyZkJ1enpTaGFwZXI6
OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVy
KQordm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihI
YXJmQnV6elJ1biogY3VycmVudFJ1biwgdW5zaWduZWQgcnVuSW5kZXhJblZpc3VhbE9yZGVyLCBo
Yl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIHsK
LSAgICBoYl9nbHlwaF9pbmZvX3QqIGdseXBoSW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX2lu
Zm9zKG1faGFyZmJ1enpCdWZmZXIsIDApOwotICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QqIGdseXBo
UG9zaXRpb25zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9wb3NpdGlvbnMobV9oYXJmYnV6ekJ1ZmZl
ciwgMCk7Ci0gICAgSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4gPSBtX2hhcmZidXp6UnVucy5sYXN0
KCkuZ2V0KCk7CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGN1cnJlbnRGb250RGF0YSA9IGN1
cnJlbnRSdW4tPmZvbnREYXRhKCk7CisgICAgaGJfZ2x5cGhfaW5mb190KiBnbHlwaEluZm9zID0g
aGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmYnV6ekJ1ZmZlciwgMCk7CisgICAgaGJfZ2x5
cGhfcG9zaXRpb25fdCogZ2x5cGhQb3NpdGlvbnMgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0
aW9ucyhoYXJmYnV6ekJ1ZmZlciwgMCk7CiAKICAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBjdXJy
ZW50UnVuLT5udW1HbHlwaHMoKTsKICAgICBmbG9hdCB0b3RhbEFkdmFuY2UgPSAwOwpAQCAtMjYy
LDI2ICszMDgsMjkgQEAgdm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JI
YXJmQnV6elJ1bihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiAgICAgICAgIG5leHRPZmZzZXRY
ID0gcnVuRW5kID8gMCA6IGhhcmZidXp6UG9zaXRpb25Ub0Zsb2F0KGdseXBoUG9zaXRpb25zW2kg
KyAxXS54X29mZnNldCk7CiAgICAgICAgIG5leHRPZmZzZXRZID0gcnVuRW5kID8gMCA6IC1oYXJm
YnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueV9vZmZzZXQpOwogCi0g
ICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IG1fc3RhcnRJbmRleE9mQ3Vy
cmVudFJ1biArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKKyAgICAgICAgdW5zaWduZWQgY3VycmVu
dENoYXJhY3RlckluZGV4ID0gY3VycmVudFJ1bi0+c3RhcnRJbmRleCgpICsgZ2x5cGhJbmZvc1tp
XS5jbHVzdGVyOwogICAgICAgICBib29sIGlzQ2x1c3RlckVuZCA9IHJ1bkVuZCB8fCBnbHlwaElu
Zm9zW2ldLmNsdXN0ZXIgIT0gZ2x5cGhJbmZvc1tpICsgMV0uY2x1c3RlcjsKICAgICAgICAgZmxv
YXQgc3BhY2luZyA9IGlzQ2x1c3RlckVuZCA/IG1fbGV0dGVyU3BhY2luZyA6IDA7CiAKICAgICAg
ICAgaWYgKGlzQ2x1c3RlckVuZCAmJiBpc1dvcmRFbmQoY3VycmVudENoYXJhY3RlckluZGV4KSkK
ICAgICAgICAgICAgIHNwYWNpbmcgKz0gZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZygpOwogCi0g
ICAgICAgIGlmIChtX2N1cnJlbnRGb250RGF0YS0+aXNaZXJvV2lkdGhTcGFjZUdseXBoKGdseXBo
KSkgewotICAgICAgICAgICAgY3VycmVudFJ1bi0+c2V0R2x5cGhBbmRQb3NpdGlvbnMoaSwgZ2x5
cGgsIDAsIDAsIDApOworICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhLT5pc1plcm9XaWR0aFNw
YWNlR2x5cGgoZ2x5cGgpKSB7CisgICAgICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZEFk
dmFuY2UoaSwgZ2x5cGgsIDApOwogICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVyKQotICAgICAg
ICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIG1fY3VycmVudEZvbnREYXRhLCBjcmVh
dGVHbHlwaEJ1ZmZlckFkdmFuY2UoMCwgMCkpOworICAgICAgICAgICAgICAgIGdseXBoQnVmZmVy
LT5hZGQoZ2x5cGgsIGN1cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKDAs
IDApKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgYWR2YW5j
ZSArPSBzcGFjaW5nOwotICAgICAgICBjdXJyZW50UnVuLT5zZXRHbHlwaEFuZFBvc2l0aW9ucyhp
LCBnbHlwaCwgdG90YWxBZHZhbmNlICsgb2Zmc2V0WCwgb2Zmc2V0WSwgYWR2YW5jZSk7CisKKyAg
ICAgICAgY3VycmVudFJ1bi0+c2V0R2x5cGhBbmRBZHZhbmNlKGksIGdseXBoLCBhZHZhbmNlKTsK
ICAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7CisgICAgICAgICAgICBpZiAoIWkgJiYgIXJ1bklu
ZGV4SW5WaXN1YWxPcmRlcikKKyAgICAgICAgICAgICAgICBtX3N0YXJ0T2Zmc2V0LnNldChvZmZz
ZXRYLCBvZmZzZXRZKTsKICAgICAgICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZVggPSBhZHZhbmNl
ICsgbmV4dE9mZnNldFggLSBvZmZzZXRYOwogICAgICAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNl
WSA9IG5leHRPZmZzZXRZIC0gb2Zmc2V0WTsKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQo
Z2x5cGgsIG1fY3VycmVudEZvbnREYXRhLCBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZ2x5cGhB
ZHZhbmNlWCwgZ2x5cGhBZHZhbmNlWSkpOworICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChn
bHlwaCwgY3VycmVudEZvbnREYXRhLCBjcmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZ2x5cGhBZHZh
bmNlWCwgZ2x5cGhBZHZhbmNlWSkpOwogICAgICAgICB9CiAKICAgICAgICAgdG90YWxBZHZhbmNl
ICs9IGFkdmFuY2U7CkBAIC0zMjQsMzcgKzM3Myw0NiBAQCBpbnQgSGFyZkJ1enpTaGFwZXI6Om9m
ZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdldFgpCiAKIEZsb2F0UmVjdCBIYXJmQnV6elNoYXBl
cjo6c2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50
IGZyb20sIGludCB0bykKIHsKLSAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7Ci0gICAgaW50
IGN1cnJlbnRYID0gMDsKLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGlu
IGxvZ2ljYWwgb3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRp
b25zIG9mIGludGVyZXN0LgorICAgIGZsb2F0IGN1cnJlbnRYID0gMDsKKyAgICBmbG9hdCBmcm9t
WDsKKyAgICBmbG9hdCB0b1g7CisgICAgYm9vbCBmb3VuZEZyb21YID0gZmFsc2U7CisgICAgYm9v
bCBmb3VuZFRvWCA9IGZhbHNlOworCisgICAgaWYgKG1fcnVuLnJ0bCgpKQorICAgICAgICBjdXJy
ZW50WCA9IG1fdG90YWxXaWR0aDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJm
YnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcnVuLnJ0bCgpKQorICAgICAg
ICAgICAgY3VycmVudFggLT0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CiAgICAgICAgIGlu
dCBudW1DaGFyYWN0ZXJzID0gbV9oYXJmYnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKLSAg
ICAgICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVy
cykKKyAgICAgICAgaWYgKCFmb3VuZEZyb21YICYmIGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hh
cmFjdGVycykgewogICAgICAgICAgICAgZnJvbVggPSBtX2hhcmZidXp6UnVuc1tpXS0+eFBvc2l0
aW9uRm9yT2Zmc2V0KGZyb20pICsgY3VycmVudFg7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGZvdW5kRnJvbVggPSB0cnVlOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGZyb20gLT0g
bnVtQ2hhcmFjdGVyczsKIAotICAgICAgICBpZiAodG9YID09IC0xICYmIHRvID49IDAgJiYgdG8g
PCBudW1DaGFyYWN0ZXJzKQorICAgICAgICBpZiAoIWZvdW5kVG9YICYmIHRvID49IDAgJiYgdG8g
PCBudW1DaGFyYWN0ZXJzKSB7CiAgICAgICAgICAgICB0b1ggPSBtX2hhcmZidXp6UnVuc1tpXS0+
eFBvc2l0aW9uRm9yT2Zmc2V0KHRvKSArIGN1cnJlbnRYOwotICAgICAgICBlbHNlCisgICAgICAg
ICAgICBmb3VuZFRvWCA9IHRydWU7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdG8gLT0g
bnVtQ2hhcmFjdGVyczsKIAotICAgICAgICBpZiAoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0xKQor
ICAgICAgICBpZiAoZm91bmRGcm9tWCAmJiBmb3VuZFRvWCkKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjdXJyZW50WCArPSBtX2hhcmZidXp6UnVuc1tpXS0+d2lkdGgoKTsKKyAgICAgICAg
aWYgKCFtX3J1bi5ydGwoKSkKKyAgICAgICAgICAgIGN1cnJlbnRYICs9IG1faGFyZmJ1enpSdW5z
W2ldLT53aWR0aCgpOwogICAgIH0KIAogICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBt
aWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgotICAgIGlmIChmcm9tWCA9PSAtMSkKKyAgICBp
ZiAoIWZvdW5kRnJvbVgpCiAgICAgICAgIGZyb21YID0gMDsKLSAgICBpZiAodG9YID09IC0xKQor
ICAgIGlmICghZm91bmRUb1gpCiAgICAgICAgIHRvWCA9IG1fcnVuLnJ0bCgpID8gMCA6IG1fdG90
YWxXaWR0aDsKIAotICAgIEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpOwotCisgICAg
Ly8gVXNpbmcgZmxvb3JmKCkgYW5kIHJvdW5kZigpIGFzIHRoZSBzYW1lIGFzIG1hYyBwb3J0Lgog
ICAgIGlmIChmcm9tWCA8IHRvWCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkg
KyBmcm9tWCwgcG9pbnQueSgpLCB0b1ggLSBmcm9tWCwgaGVpZ2h0KTsKLSAgICByZXR1cm4gRmxv
YXRSZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsK
KyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChmbG9vcmYocG9pbnQueCgpICsgZnJvbVgpLCBwb2lu
dC55KCksIHJvdW5kZih0b1ggLSBmcm9tWCksIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVj
dChmbG9vcmYocG9pbnQueCgpICsgdG9YKSwgcG9pbnQueSgpLCByb3VuZGYoZnJvbVggLSB0b1gp
LCBoZWlnaHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpT
aGFwZXIuaAppbmRleCA3YmVmZjVkNzJjZGM1NGY4ODg4ZDZjMjBhY2ExZDZlZGIwMzMyMzFjLi5l
YjM5MzVkYjE0NzMxNWE4M2E1YzlhZjY4NGZhZWEwYmQ4YjlkYzEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6U2hhcGVyLmgKQEAgLTUyLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkhhcmZC
dXp6U2hhcGVyKCk7CiAKICAgICBib29sIHNoYXBlKEdseXBoQnVmZmVyKiA9IDApOworICAgIEZs
b2F0UG9pbnQgYWRqdXN0U3RhcnRQb2ludChjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgZmxvYXQg
dG90YWxXaWR0aCgpIHsgcmV0dXJuIG1fdG90YWxXaWR0aDsgfQogICAgIGludCBvZmZzZXRGb3JQ
b3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25z
dCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0byk7CkBAIC01OSwzMSAr
NjAsMzcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBjbGFzcyBIYXJmQnV6elJ1biB7CiAgICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRlKHVu
c2lnbmVkIG51bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBoYl9idWZmZXJf
dCogYnVmZmVyKQorICAgICAgICBzdGF0aWMgUGFzc093blB0cjxIYXJmQnV6elJ1bj4gY3JlYXRl
KGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5z
aWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSGFyZkJ1enpSdW4obnVtQ2hhcmFjdGVy
cywgZGlyZWN0aW9uLCBidWZmZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
SGFyZkJ1enpSdW4oZm9udERhdGEsIHN0YXJ0SW5kZXgsIG51bUNoYXJhY3RlcnMsIGRpcmVjdGlv
bikpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNp
Z25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQpOwor
ICAgICAgICB2b2lkIGFwcGx5U2hhcGVSZXN1bHQoaGJfYnVmZmVyX3QqKTsKKyAgICAgICAgdm9p
ZCBzZXRHbHlwaEFuZEFkdmFuY2UodW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZs
b2F0IGFkdmFuY2UpOwogICAgICAgICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fd2lk
dGggPSB3aWR0aDsgfQogCiAgICAgICAgIGludCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihp
bnQgdGFyZ2V0WCk7Ci0gICAgICAgIGludCB4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zm
c2V0KTsKKyAgICAgICAgZmxvYXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7
CiAKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhKCkgeyByZXR1cm4gbV9m
b250RGF0YTsgfQorICAgICAgICB1bnNpZ25lZCBzdGFydEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydEluZGV4OyB9CiAgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMoKSBjb25zdCB7
IHJldHVybiBtX251bUNoYXJhY3RlcnM7IH0KICAgICAgICAgdW5zaWduZWQgbnVtR2x5cGhzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1HbHlwaHM7IH0KKyAgICAgICAgdWludDE2X3QqIGdseXBocygp
IHsgcmV0dXJuICZtX2dseXBoc1swXTsgfQorICAgICAgICBmbG9hdCogYWR2YW5jZXMoKSB7IHJl
dHVybiAmbV9hZHZhbmNlc1swXTsgfQogICAgICAgICBmbG9hdCB3aWR0aCgpIHsgcmV0dXJuIG1f
d2lkdGg7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEhhcmZCdXp6UnVuKHVuc2lnbmVkIG51
bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24sIGhiX2J1ZmZlcl90Kik7CisgICAgICAgIEhhcmZC
dXp6UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbik7CiAgICAgICAgIGJvb2wgcnRsKCkgeyBy
ZXR1cm4gbV9kaXJlY3Rpb24gPT0gUlRMOyB9CiAKKyAgICAgICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIG1fZm9udERhdGE7CisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRJbmRleDsKICAgICAgICAg
c2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKICAgICAgICAgdW5zaWduZWQgbV9udW1HbHlwaHM7CiAg
ICAgICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAgICAgIFZlY3Rvcjx1aW50MTZf
dCwgMjU2PiBtX2dseXBoczsKICAgICAgICAgVmVjdG9yPGZsb2F0LCAyNTY+IG1fYWR2YW5jZXM7
Ci0gICAgICAgIFZlY3RvcjxGbG9hdFBvaW50LCAyNTY+IG1fb2Zmc2V0czsKICAgICAgICAgVmVj
dG9yPHVpbnQxNl90LCAyNTY+IG1fbG9nQ2x1c3RlcnM7CiAgICAgICAgIFZlY3Rvcjx1aW50MTZf
dCwgMjU2PiBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleDsKICAgICAgICAgZmxvYXQgbV93aWR0aDsK
QEAgLTkxLDE5ICs5OCwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRGb250RmVhdHVyZXMo
KTsKIAotICAgIGJvb2wgc2V0dXBIYXJmQnV6elJ1bigpOwotICAgIGJvb2wgc2hhcGVIYXJmQnV6
elJ1bigpOwotICAgIHZvaWQgc2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihHbHlwaEJ1
ZmZlciopOworICAgIGJvb2wgY29sbGVjdEhhcmZCdXp6UnVucygpOworICAgIGJvb2wgc2hhcGVI
YXJmQnV6elJ1bnMoR2x5cGhCdWZmZXIqKTsKKyAgICB2b2lkIHNldEdseXBoUG9zaXRpb25zRm9y
SGFyZkJ1enpSdW4oSGFyZkJ1enpSdW4qLCB1bnNpZ25lZCBydW5JbmRleEluVmlzdWFsT3JkZXIs
IGhiX2J1ZmZlcl90KiwgR2x5cGhCdWZmZXIqKTsKIAogICAgIEdseXBoQnVmZmVyQWR2YW5jZSBj
cmVhdGVHbHlwaEJ1ZmZlckFkdmFuY2UoZmxvYXQsIGZsb2F0KTsKIAogICAgIFZlY3RvcjxoYl9m
ZWF0dXJlX3QsIDQ+IG1fZmVhdHVyZXM7Ci0gICAgdW5zaWduZWQgbV9zdGFydEluZGV4T2ZDdXJy
ZW50UnVuOwotICAgIHVuc2lnbmVkIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1bjsKLSAgICBj
b25zdCBTaW1wbGVGb250RGF0YSogbV9jdXJyZW50Rm9udERhdGE7Ci0gICAgaGJfYnVmZmVyX3Qq
IG1faGFyZmJ1enpCdWZmZXI7CiAgICAgVmVjdG9yPE93blB0cjxIYXJmQnV6elJ1bj4sIDE2PiBt
X2hhcmZidXp6UnVuczsKIAorICAgIEZsb2F0UG9pbnQgbV9zdGFydE9mZnNldDsKKwogICAgIGZs
b2F0IG1fdG90YWxXaWR0aDsKIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhMjdhNDFmNmQyNDdkNjk0MTcxNWM5Yjcy
NDlkMDgzMWIwNWI1MGU2Li5hOTEyYmVlOGMwZmQwYTQ0Zjc1ZWYwNGJkNzA5Njk1N2YzYTQyNGM5
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTItMDctMTEgIEtlbmljaGkgSXNoaWJhc2hpICA8
YmFzaGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gRml4IGJ1Z3MgaW4gSGFy
ZkJ1enpTaGFwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkwOTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBB
ZGQgdGVzdHMgZm9yIGhhcmZidXp6LW5nIHNoYXBlci4gSSB0cmllZCB0byB1c2UgLWV4cGVjdGVk
Lmh0bWwgc3R5bGUgZXhwZWN0YXRpb25zLAorICAgICAgICBidXQgaXQgZGlkbid0IHdvcmsgYmVj
YXVzZSB0aGVyZSBhcmUgdmVyeSBzbGlnaHQgZGlmZmVyZW5jZSBiZXR3ZWVuIENvcmVUZXh0IGFu
ZCBIYXJmQnV6eiBpbgorICAgICAgICByZW5kZXJpbmcgcmVzdWx0LgorCisgICAgICAgICogZmFz
dC90ZXh0L3NoYXBpbmcvc2hhcGluZy1zY3JpcHQtb3JkZXIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC90ZXh0L3NoYXBpbmcvc2hhcGluZy1zZWxlY3Rpb24tcmVjdC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOiBOZWVkIHJlYmFz
ZWxpbmUuCisgICAgICAgICogcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnM6IFNraXAgYWRk
ZWQgdGVzdHMgYmVjYXVzZSB0aGUgcG9ydCBkb2Vzbid0IHVzZSBoYXJmYnV6ei4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnM6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Rl
c3RFeHBlY3RhdGlvbnM6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVkOiBE
aXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS93azIvU2tpcHBlZDogRGl0dG8uCisKIDIwMTItMDctMTEgIE9qYW4gVmFm
YWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTaW1wbGlmeSBjc3MzL2ZsZXhib3gv
cmVwYWludC1ydGwtY29sdW1uLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4
dC9zaGFwaW5nL3NoYXBpbmctc2NyaXB0LW9yZGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Rl
eHQvc2hhcGluZy9zaGFwaW5nLXNjcmlwdC1vcmRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlZjBmMDc2
NmNhODA3OTM2YzQ4OTY1OTQ5NjA2MzQ1YThkYzJlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3RleHQvc2hhcGluZy9zaGFwaW5nLXNjcmlwdC1vcmRlci5odG1sCkBAIC0w
LDAgKzEsMTYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgLmxybyB7CisgICAgICAg
IGZvbnQtZmFtaWx5OiAidGltZXMgbmV3IHJvbWFuIjsgLyogbm9uIEFBVCBmb250IG9uIG1hYyAq
LworICAgICAgICBkaXJlY3Rpb246bHRyOworICAgICAgICB1bmljb2RlLWJpZGk6YmlkaS1vdmVy
cmlkZTsKKyAgICB9OworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorVGhlIGZvbGxvd2luZyB0
d28gbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lOgorPHAgY2xhc3M9ImxybyI+YWJjJiN4MDVkMjsm
I3gwNWQxOyYjeDA1ZDA7JiN4MDY2MTsmI3gwNjYyOyYjeDA2NjM7PC9wPgorPHAgY2xhc3M9Imxy
byIgc3R5bGU9Ii13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAna2Vybic7Ij5hYmMmI3gw
NWQyOyYjeDA1ZDE7JiN4MDVkMDsmI3gwNjYxOyYjeDA2NjI7JiN4MDY2Mzs8L3A+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvc2hhcGluZy9zaGFw
aW5nLXNlbGVjdGlvbi1yZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvc2hhcGluZy9z
aGFwaW5nLXNlbGVjdGlvbi1yZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWEwMmQyYzRiZGMyZDEzYjM0
ZWJkNDc1YWI1OWIzYWZiMzA4ZTI2MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvdGV4dC9zaGFwaW5nL3NoYXBpbmctc2VsZWN0aW9uLXJlY3QuaHRtbApAQCAtMCwwICsxLDIz
IEBACis8aHRtbD4KKzxoZWFkPgorPHN0eWxlPgorICAgICN0YXJnZXQgeworICAgICAgICBmb250
LWZhbWlseTogInRpbWVzIG5ldyByb21hbiI7IC8qIG5vbiBBQVQgZm9udCBvbiBtYWMgKi8KKyAg
ICAgICAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdrZXJuJzsKKyAgICB9OworPC9z
dHlsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2YXIgdGFyZ2V0VGV4dCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5maXJzdENoaWxkOworICAgIHdpbmRv
dy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHRhcmdldCwgMCwgdGFyZ2V0LCA5KTsK
K30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+VGhlIHNl
bGVjdGlvbiBzaG91bGQgY292ZXIgdGhlIGFsbCBvZiB0aGUgYmVsb3cgdGV4dC4gVGhlcmUgc2hv
dWxkIGJlIG5vIGJsYW5rIGJldHdlZW4gQyBhbmQgRi4KKzxkaXYgaWQ9InRhcmdldCI+CitBQkM8
c3BhbiBzdHlsZT0iZGlyZWN0aW9uOiBydGw7IHVuaWNvZGUtYmlkaTogYmlkaS1vdmVycmlkZTsi
PkRFRjwvc3Bhbj5HSEkKKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggODJiOGQ2OTJlZGFjY2Ux
NTIyZmM2NTY4YzJlNDg4NDY1MjQxNTg1Yy4uMDA3ODQ0ZWQyNTdjMzEzMzQ3NDFjZmE4ODNhMWJi
YmJhNGM5ODFlZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVz
dEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhw
ZWN0YXRpb25zCkBAIC0zNzQzLDMgKzM3NDMsNyBAQCBCVUdXSzkwOTAwIE1BQyA6IHRhYmxlcy9t
b3ppbGxhX2V4cGVjdGVkX2ZhaWx1cmVzL290aGVyL2VtcHR5X2NlbGxzLmh0bWwgPSBQQVNTCiAK
IEJVR1dLOTA5ODAgTElOVVggTUFDIERFQlVHIDogZmFzdC9mb3Jtcy90ZXh0YXJlYS90ZXh0YXJl
YS1zdGF0ZS1yZXN0b3JlLmh0bWwgPSBQQVNTIFRJTUVPVVQKIEJVR1dLOTA5ODAgV0lOIDogZmFz
dC9mb3Jtcy90ZXh0YXJlYS90ZXh0YXJlYS1zdGF0ZS1yZXN0b3JlLmh0bWwgPSBQQVNTIFRJTUVP
VVQKKworLy8gTmVlZCByZWJhc2VsaW5lCitCVUdXSzkwOTUxIDogZmFzdC90ZXh0L3NoYXBpbmcv
c2hhcGluZy1zZWxlY3Rpb24tcmVjdC5odG1sID0gTUlTU0lORworQlVHV0s5MDk1MSA6IGZhc3Qv
dGV4dC9zaGFwaW5nL3NoYXBpbmctc2NyaXB0LW9yZGVyLmh0bWwgPSBNSVNTSU5HCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDQ3YTUzNzI2MzllZTlhMGIz
MzkwODc1NTViODdjYjZlNzZkZTNmMjQuLjc4YjBlOGZmZDdkZTBkMzlkZDRhYzE3OTIzNGUwMTE0
NTVjMDZmZWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0
YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zCkBA
IC03MzYsMyArNzM2LDYgQEAgQlVHV0s4ODE3MSA6IGNzczEvZm9ybWF0dGluZ19tb2RlbC9mbG9h
dGluZ19lbGVtZW50cy5odG1sID0gVEVYVAogCiAvLyBMb29rcyBsaWtlIG1pc3NpbmcgbXVsdGlw
YXJ0L3gtbWl4ZWQtcmVwbGFjZSBzdXBwb3J0IGluIGxpYnNvdXAuIEZhaWxpbmcgb24gYm90aCBH
VEsgYW5kIEVGTC4KIEJVR1dLNjg5NzkgOiBodHRwL3Rlc3RzL211bHRpcGFydC9tdWx0aXBhcnQt
cmVwbGFjZS1ub24taHRtbC1jb250ZW50LnBocCA9IFRFWFQKKworLy8gU2tpcCB0ZXN0cyBpbiBm
YXN0L3RleHQvc2hhcGluZworQlVHV0s5MDk1MSBTS0lQIDogZmFzdC90ZXh0L3NoYXBpbmcgPSBQ
QVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9u
cyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDg1YWIz
YjA5NmI1NTZmYjg1MzVjMWY3ZmNlMDQ1YzNkNmQ5ZTY3NDguLjVhMDY4MTZjOTRiNTkyOGRkNTMx
ZWFiZDRjNmEyNjkwNTc1ZmNhZDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zCkBAIC0xMjUyLDYgKzEyNTIsOSBAQCBCVUdXSzg5MjMxIDogZmFzdC9qcy9nbG9i
YWwtY29uc3RydWN0b3JzLmh0bWwgPSBURVhUCiAKIEJVR1dLOTEwMDkgREVCVUcgOiBmYXN0L3hz
bC94c2x0LW1pc3NpbmctbmFtZXNwYWNlLWluLXhzbC54bWwgPSBURVhUCiAKKy8vIFNraXAgdGVz
dHMgaW4gZmFzdC90ZXh0L3NoYXBpbmcKK0JVR1dLOTA5NTEgU0tJUCA6IGZhc3QvdGV4dC9zaGFw
aW5nID0gUEFTUworCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIEVuZCBv
ZiBUZXN0cyBmYWlsaW5nCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYTRlY2ZlOWZiMzNmODk2
NGEwMTQ0YmM4ZmIxNmFlNzMwZmEyOTQyYi4uMGNhYzlmYTNiNDZkMjg3ODhmN2M1ZGI0YzZjZWJh
ZmY3YTFkZTBkZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTI4OSwzICsyODksNiBAQCBCVUdXSzg4MTcxIDogY3NzMS9mb3JtYXR0aW5nX21vZGVsL2Zs
b2F0aW5nX2VsZW1lbnRzLmh0bWwgPSBURVhUCiAKIC8vIFRleHQgQXV0b3NpemluZyBpcyBub3Qg
ZW5hYmxlZC4KIEJVR1dLODQxODYgU0tJUCA6IGZhc3QvdGV4dC1hdXRvc2l6aW5nID0gUEFTUwor
CisvLyBTa2lwIHRlc3RzIGluIGZhc3QvdGV4dC9zaGFwaW5nCitCVUdXSzkwOTUxIFNLSVAgOiBm
YXN0L3RleHQvc2hhcGluZyA9IFBBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9UZXN0RXhwZWN0
YXRpb25zCmluZGV4IGRmYTU5MDIzYjJhMmM4Yzk4Njg4OTcwY2M0M2FhNGUxMGQyNDhkMzIuLmQ1
YjEwNjRlMDU1Nzk1ZDA1MTlmN2RiMGI1NmE2ZmEyNjAwMjNlNDYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3F0L1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTEwLDMgKzExMCw2IEBAIEJVR1dLODgxNzEg
OiBjc3MxL2Zvcm1hdHRpbmdfbW9kZWwvZmxvYXRpbmdfZWxlbWVudHMuaHRtbCA9IFRFWFQKIAog
Ly8gVGV4dCBBdXRvc2l6aW5nIGlzIG5vdCBlbmFibGVkLgogQlVHV0s4NDE4NiBTS0lQIDogZmFz
dC90ZXh0LWF1dG9zaXppbmcgPSBQQVNTCisKKy8vIFNraXAgdGVzdHMgaW4gZmFzdC90ZXh0L3No
YXBpbmcKK0JVR1dLOTA5NTEgU0tJUCA6IGZhc3QvdGV4dC9zaGFwaW5nID0gUEFTUwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vU2tpcHBlZAppbmRleCAzYzNlYjE0ZjNmNDA1YmUyNWMxYTY4ZWNjMDBiOWE3NDU0
YzkyMjE2Li41ZjZhMjdkNWViYjZlMjAwMjI1ZTczYjI5M2Y4MDkxMDhiMjE5M2JhIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTk0NSwzICsxOTQ1LDYgQEAgc3ZnL1czQy1TVkctMS4x
LVNFL3RleHQtaW50cm8tMDUtdC5zdmcKICMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgMS4xIChF
TkFCTEVfQ1NQX05FWFQpIGlzIG5vdCBlbmFibGVkCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NTU1OAogaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJp
dHlQb2xpY3kvMS4xCisKKyMgU2tpcCB0ZXN0cyBpbiBmYXN0L3RleHQvc2hhcGluZworZmFzdC90
ZXh0L3NoYXBpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCmluZGV4IGQwZjkx
YWZiN2RiNjJiMjZkYzFiNzJlZWJmNGQ4Yzg2MWQxZTliOWQuLjg3NGY3OWQ2MzEyM2JjZmIzMDA5
NjM5ODU0ZTBhZjkwYmQ2NGY0ZDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBl
ZApAQCAtMjEyNywzICsyMTI3LDYgQEAgaHR0cC90ZXN0cy9zZWN1cml0eS9yZWZlcnJlci1wb2xp
Y3ktcmVkaXJlY3QtbGluay5odG1sCiAjIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IDEuMSAoRU5B
QkxFX0NTUF9ORVhUKSBpcyBub3QgZW5hYmxlZAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODU1NTgKIGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5
UG9saWN5LzEuMQorCisjIFNraXAgdGVzdHMgaW4gZmFzdC90ZXh0L3NoYXBpbmcKK2Zhc3QvdGV4
dC9zaGFwaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkCmluZGV4IGJiYWM1NGYxOTgwZmYyZjli
NzI3M2Y3MjY1ZjM5NzZkNTAxMTRhY2UuLmRjYmEzMmRjMWE2NTMwZmJhZGZlNzJmNzFmMGM0YWVl
N2ZhZmRjZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkCkBAIC0xNDIxLDYgKzE0MjEsOSBA
QCBmYXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCiAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDE3NwogZmFzdC9ldmVudHMvZHJhZy1kaXNw
bGF5LW5vbmUtZWxlbWVudC5odG1sCiAKKyMgU2tpcCB0ZXN0cyBpbiBmYXN0L3RleHQvc2hhcGlu
ZworZmFzdC90ZXh0L3NoYXBpbmcKKwogIyMjIEVORCBPRiAoNCkgRmVhdHVyZXMgdGhhdCBhcmUg
bm90IHN1cHBvcnRlZCBpbiBXZWJLaXQyIGFuZCBsaWtlbHkgbmV2ZXIgd2lsbCBiZQogIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152132</attachid>
            <date>2012-07-12 19:20:28 -0700</date>
            <delta_ts>2012-07-13 04:17:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-90951-20120713112027.patch</filename>
            <type>text/plain</type>
            <size>33242</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM3OTkwNDQ1NzNjMDEx
NjI2NjJiZTMxZDI5NGQxODc2MTE3NjIyMS4uYzhmM2U1NzlkOThkMWJkMGU3ZTA1NWUzZWQ1MTFi
ZWEzMzVkNjBmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA3LTExICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEZpeCBidWdzIGluIEhhcmZCdXp6U2hhcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDk1MQorCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hh
bmcuCisKKyAgICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaGFzIGZvbGxvd2luZyBw
cm9ibGVtczoKKyAgICAgICAgLSBDYW5ub3QgcmVuZGVyIFJUTCB0ZXh0IGlmIHRoZSBUZXh0UnVu
IGlzIGRpdmlkZWQgaW50byBtb3JlIHRoYW4gdHdvCisgICAgICAgICAgSGFyZkJ1enpSdW4uCisg
ICAgICAgIC0gU2NyaXB0IGhhbmRsaW5nIGluIFRleHRSdW4gcGFydGl0aW9uaW5nIGlzIGluY29y
cmVjdC4KKyAgICAgICAgLSBJbmFjY3VyYXRlIGNhbGN1bGF0aW9uIG9mIHNlbGVjdGlvbiByZWN0
LgorICAgICAgICAtIFdyb25nIHJlbmRlcmluZyBwb3NpdGlvbiB3aGVuIHRoZSBmaXJzdCBnbHlw
aCBvZiB0aGUgVGV4dFJ1biBoYXZlCisgICAgICAgICAgbm9uLXplcm8gb2Zmc2V0cyBpbiB0ZXJt
cyBvZiBIYXJmQnV6ei4KKworICAgICAgICBUbyBmaXggdGhlc2UgcHJvYmxlbXMgSSByZXdyb3Rl
IEhhcmZCdXp6U2hhcGVyIGNsYXNzLiBIZXJlIGlzIHRoZSBzdW1tYXJ5OgorICAgICAgICAtIERp
dmlkZSB0aGUgd2hvbGUgcmFuZ2Ugb2YgVGV4dFJ1biBmaXJzdCwgdGhlbiBzaGFwZSB0aGVtIGlu
IHZpc3VhbAorICAgICAgICAgIG9yZGVyLgorICAgICAgICAtIERpdmlkZSBUZXh0UnVuIGluIHRo
ZSBzYW1lIHdheSBvZiBvbGQtaGFyZmJ1enoncworICAgICAgICAgIGhiX3V0ZjE2X3NjcmlwdF9y
dW5fbmV4dCgpLgorICAgICAgICAtIFByZWZlciBmbG9hdCB0aGFuIGludCB3aGVuIGNhbGN1bGF0
aW5nIHNlbGVjdGlvbi4KKyAgICAgICAgLSBBZGp1c3QgdGhlIGRyYXdpbmcgcG9pbnQgYWZ0ZXIg
c2hhcGluZy4KKworICAgICAgICBBZGRlZCB0ZXN0cyBjb3ZlcnMgdGhlIGZpeCBleGNlcHQgZm9y
IHRoZSBsYXN0IHByb2JsZW0uIFRoZSBsYXN0IHByb2JsZW0gd2lsbCBiZSBjb3ZlcmVkCisgICAg
ICAgIGJ5IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2NvbXBsZXgtam9pbmluZy11c2luZy1ncG9z
Lmh0bWwgYWZ0ZXIgY2hyb21pdW0gbGludXggcG9ydCBzd2l0Y2hlcworICAgICAgICB0byB1c2Ug
SGFyZkJ1enpTaGFwZXIuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvdGV4dC9zaGFwaW5nL3NoYXBp
bmctc2NyaXB0LW9yZGVyLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvdGV4dC9zaGFwaW5nL3No
YXBpbmctc2VsZWN0aW9uLXJlY3QuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdD
b21wbGV4VGV4dCk6IEFkanVzdHMgcG9pbnQgYWZ0ZXIgc2hhcGluZy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OkhhcmZCdXp6UnVuKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6
UnVuOjphcHBseVNoYXBlUmVzdWx0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6
elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kQWR2YW5jZSk6IE9mZnNldHMgYXJlIG5v
IGxvbmdlciBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6SGFyZkJ1
enpSdW46OnhQb3NpdGlvbkZvck9mZnNldCk6IENhbGN1bGF0ZXMgY2hhcmFjdGVyIG9mZnNldCBi
YXNlZCBvbiBhZHZhbmNlLgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplQ2hhcmFjdGVycyk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6U2hhcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpTaGFwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNoYXBlKTogRGl2aWRlcyBUZXh0UnVu
IGZpcnN0LCB0aGVuIHNoYXBlcyB0aGVtLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFw
ZXI6OmFkanVzdFN0YXJ0UG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6
U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpI
YXJmQnV6elNoYXBlcjo6c2hhcGVIYXJmQnV6elJ1bnMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKTogRm9s
bG93ZWQgb3RoZXIgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpz
ZWxlY3Rpb25SZWN0KTogVXNlIGZsb2F0IGZvciBjYWxjdWxhdGluZyBzZWxlY3Rpb24uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaDoKKyAg
ICAgICAgKEhhcmZCdXp6U2hhcGVyKTogSG9sZHMgdGhlIHN0YXJ0IGluZGV4IG9mIGNoYXJhY3Rl
ci4gUmVtb3ZlZCB1bm5lY2Vzc2FyeSB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpIYXJm
QnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoSGFyZkJ1
enpSdW4pOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpm
b250RGF0YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjpzdGFydEluZGV4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6SGFyZkJ1enpSdW46OmdseXBocyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGFy
ZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjphZHZhbmNlcyk6IERpdHRvLgorCiAyMDEyLTA3LTEy
ICBFcmlrIEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBTaW1w
bGlmeSBDb2RlR2VuZXJhdG9yVjggc2luY2UgVjhPblByb3RvIGlzIG9ubHkgdHJ1ZSBmb3IgRE9N
V2luZG93CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9Gb250SGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAppbmRleCBjYzhlZmViNDM3NTdkZDUyODgyOGFkMmQ4
NWE5MWMwNzM1NDJjYWY3Li4xOWEwYjlhNmQ1YTcxNDJkODI4MTcxYzE4OTNiMWViNjQzZDVjYWE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9G
b250SGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKQEAgLTE4Nyw3ICsxODcsOCBAQCB2b2lkIEZvbnQ6OmRy
YXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBUZXh0UnVuJiBydW4sCiAg
ICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYgKCFzaGFwZXIuc2hh
cGUoJmdseXBoQnVmZmVyKSkKICAgICAgICAgcmV0dXJuOwotICAgIGRyYXdHbHlwaEJ1ZmZlcihn
YywgcnVuLCBnbHlwaEJ1ZmZlciwgcG9pbnQpOworICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb2lu
dCA9IHNoYXBlci5hZGp1c3RTdGFydFBvaW50KHBvaW50KTsKKyAgICBkcmF3R2x5cGhCdWZmZXIo
Z2MsIHJ1biwgZ2x5cGhCdWZmZXIsIGFkanVzdGVkUG9pbnQpOwogI2Vsc2UKICAgICBTa0NhbnZh
cyogY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKICAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIHBvaW50LngoKSwgcG9pbnQueSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcAppbmRleCAzZWVkODk3YmE2YTExYTcwZjA2
NDcyOWJkODkyM2M1ZDc5MjU3NzM2Li42OGQxOTZkZjFlNjYxN2M2OTQ2MTgwZTlmNDZiMWY2MTE0
MjQ5MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiSGFyZkJ1enpTaGFwZXIuaCIKIAogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJIYXJmQnV6ekZhY2UuaCIKICNpbmNsdWRlICJTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiaGItaWN1LmgiCkBAIC00
MywxOSArNDQsNDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorY2xhc3MgSGFyZkJ1enpTY29wZWRQdHIgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9p
ZCAoKkRlc3Ryb3lGdW5jdGlvbikoVCopOworCisgICAgSGFyZkJ1enpTY29wZWRQdHIoVCogcHRy
LCBEZXN0cm95RnVuY3Rpb24gZGVzdHJveSkKKyAgICAgICAgOiBtX3B0cihwdHIpCisgICAgICAg
ICwgbV9kZXN0cm95KGRlc3Ryb3kpCisgICAgeworICAgICAgICBBU1NFUlQobV9kZXN0cm95KTsK
KyAgICB9CisgICAgfkhhcmZCdXp6U2NvcGVkUHRyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3B0
cikKKyAgICAgICAgICAgICgqbV9kZXN0cm95KShtX3B0cik7CisgICAgfQorCisgICAgVCogZ2V0
KCkgeyByZXR1cm4gbV9wdHI7IH0KK3ByaXZhdGU6CisgICAgVCogbV9wdHI7CisgICAgRGVzdHJv
eUZ1bmN0aW9uIG1fZGVzdHJveTsKK307CisKIHN0YXRpYyBpbmxpbmUgZmxvYXQgaGFyZmJ1enpQ
b3NpdGlvblRvRmxvYXQoaGJfcG9zaXRpb25fdCB2YWx1ZSkKIHsKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHZhbHVlKSAvICgxIDw8IDE2KTsKIH0KIAotSGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjpIYXJmQnV6elJ1bih1bnNpZ25lZCBudW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgaGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQotICAgIDogbV9udW1D
aGFyYWN0ZXJzKG51bUNoYXJhY3RlcnMpCitIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46Okhh
cmZCdXp6UnVuKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgc3RhcnRJ
bmRleCwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCisg
ICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQorICAgICwgbV9zdGFydEluZGV4KHN0YXJ0SW5kZXgp
CisgICAgLCBtX251bUNoYXJhY3RlcnMobnVtQ2hhcmFjdGVycykKICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKIHsKK30KKwordm9pZCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFw
cGx5U2hhcGVSZXN1bHQoaGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQorewogICAgIG1fbnVt
R2x5cGhzID0gaGJfYnVmZmVyX2dldF9sZW5ndGgoaGFyZmJ1enpCdWZmZXIpOwogICAgIG1fZ2x5
cGhzLnJlc2l6ZShtX251bUdseXBocyk7CiAgICAgbV9hZHZhbmNlcy5yZXNpemUobV9udW1HbHlw
aHMpOwotICAgIG1fb2Zmc2V0cy5yZXNpemUobV9udW1HbHlwaHMpOwogICAgIG1fZ2x5cGhUb0No
YXJhY3RlckluZGV4LnJlc2l6ZShtX251bUdseXBocyk7CiAgICAgbV9sb2dDbHVzdGVycy5yZXNp
emUobV9udW1DaGFyYWN0ZXJzKTsKIApAQCAtODIsMTAgKzExMSw5IEBAIEhhcmZCdXp6U2hhcGVy
OjpIYXJmQnV6elJ1bjo6SGFyZkJ1enpSdW4odW5zaWduZWQgbnVtQ2hhcmFjdGVycywgVGV4dERp
cmVjdGlvbiBkCiAgICAgfQogfQogCi12b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6
c2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IGFkdmFuY2UpCit2b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJm
QnV6elJ1bjo6c2V0R2x5cGhBbmRBZHZhbmNlKHVuc2lnbmVkIGluZGV4LCB1aW50MTZfdCBnbHlw
aElkLCBmbG9hdCBhZHZhbmNlKQogewogICAgIG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoSWQ7Ci0g
ICAgbV9vZmZzZXRzW2luZGV4XS5zZXQoeCwgeSk7CiAgICAgbV9hZHZhbmNlc1tpbmRleF0gPSBh
ZHZhbmNlOwogfQogCkBAIC0xMDYsMzEgKzEzNCw0OSBAQCBpbnQgSGFyZkJ1enpTaGFwZXI6Okhh
cmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihpbnQgdGFyZ2V0WCkKICAgICBy
ZXR1cm4gcnRsKCkgPyAwIDogbV9udW1DaGFyYWN0ZXJzOwogfQogCi1pbnQgSGFyZkJ1enpTaGFw
ZXI6OkhhcmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQorZmxv
YXQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0KQogewogICAgIEFTU0VSVChvZmZzZXQgPCBtX251bUNoYXJhY3RlcnMpOwogICAg
IHVuc2lnbmVkIGdseXBoSW5kZXggPSBtX2xvZ0NsdXN0ZXJzW29mZnNldF07Ci0gICAgQVNTRVJU
KGdseXBoSW5kZXggPCBtX251bUdseXBocyk7Ci0gICAgZmxvYXQgcG9zaXRpb24gPSBtX29mZnNl
dHNbZ2x5cGhJbmRleF0ueCgpOworICAgIEFTU0VSVChnbHlwaEluZGV4IDw9IG1fbnVtR2x5cGhz
KTsKKyAgICBmbG9hdCBwb3NpdGlvbiA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGdseXBoSW5kZXg7ICsraSkKKyAgICAgICAgcG9zaXRpb24gKz0gbV9hZHZhbmNlc1tpXTsKICAg
ICBpZiAocnRsKCkpCiAgICAgICAgIHBvc2l0aW9uICs9IG1fYWR2YW5jZXNbZ2x5cGhJbmRleF07
Ci0gICAgcmV0dXJuIHJvdW5kZihwb3NpdGlvbik7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQor
CitzdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIFVD
aGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCkKK3sKKyAgICBpbnQgcG9zaXRpb24gPSAwOwor
ICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsK
KyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICAgICAgVTE2X05FWFQoc291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwg
Y2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKQor
ICAgICAgICAgICAgY2hhcmFjdGVyID0gJyAnOworICAgICAgICBlbHNlIGlmIChGb250Ojp0cmVh
dEFzWmVyb1dpZHRoU3BhY2VJbkNvbXBsZXhTY3JpcHQoY2hhcmFjdGVyKSkKKyAgICAgICAgICAg
IGNoYXJhY3RlciA9IHplcm9XaWR0aFNwYWNlOworICAgICAgICBVMTZfQVBQRU5EKGRlc3RpbmF0
aW9uLCBwb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIsIGVycm9yKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChlcnJvciwgIWVycm9yKTsKKyAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRpb247
CisgICAgfQogfQogCiBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpTaGFwZXIoY29uc3QgRm9udCog
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKQogICAgIDogSGFyZkJ1enpTaGFwZXJCYXNlKGZvbnQs
IHJ1bikKLSAgICAsIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1bigwKQotICAgICwgbV9udW1DaGFy
YWN0ZXJzT2ZDdXJyZW50UnVuKDApCi0gICAgLCBtX2hhcmZidXp6QnVmZmVyKDApCiB7Ci0gICAg
c2V0Tm9ybWFsaXplZEJ1ZmZlcigpOworICAgIG1fbm9ybWFsaXplZEJ1ZmZlciA9IGFkb3B0QXJy
YXlQdHIobmV3IFVDaGFyW21fcnVuLmxlbmd0aCgpICsgMV0pOworICAgIG1fbm9ybWFsaXplZEJ1
ZmZlckxlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOworICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobV9y
dW4uY2hhcmFjdGVycygpLCBtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCksIG1fbm9ybWFsaXplZEJ1
ZmZlckxlbmd0aCk7CisgICAgc2V0UGFkZGluZyhtX3J1bi5leHBhbnNpb24oKSk7CiAgICAgc2V0
Rm9udEZlYXR1cmVzKCk7CiB9CiAKIEhhcmZCdXp6U2hhcGVyOjp+SGFyZkJ1enpTaGFwZXIoKQog
ewotICAgIGlmIChtX2hhcmZidXp6QnVmZmVyKQotICAgICAgICBoYl9idWZmZXJfZGVzdHJveSht
X2hhcmZidXp6QnVmZmVyKTsKIH0KIAogdm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0Rm9udEZlYXR1
cmVzKCkKQEAgLTE1MiwxMDEgKzE5OCwxMDEgQEAgdm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0Rm9u
dEZlYXR1cmVzKCkKIAogYm9vbCBIYXJmQnV6elNoYXBlcjo6c2hhcGUoR2x5cGhCdWZmZXIqIGds
eXBoQnVmZmVyKQogewotICAgIG1fdG90YWxXaWR0aCA9IDA7Ci0gICAgd2hpbGUgKHNldHVwSGFy
ZkJ1enpSdW4oKSkgewotICAgICAgICBpZiAoIXNoYXBlSGFyZkJ1enpSdW4oKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgc2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1
bihnbHlwaEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgaWYgKCFtX2hhcmZidXp6UnVucy5zaXplKCkp
CisgICAgaWYgKCFjb2xsZWN0SGFyZkJ1enpSdW5zKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIG1fdG90YWxXaWR0aCA9IDA7CisgICAgaWYgKCFzaGFwZUhhcmZCdXp6UnVucyhnbHlw
aEJ1ZmZlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3RvdGFsV2lkdGggPSByb3Vu
ZGYobV90b3RhbFdpZHRoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBIYXJmQnV6elNo
YXBlcjo6c2V0dXBIYXJmQnV6elJ1bigpCitGbG9hdFBvaW50IEhhcmZCdXp6U2hhcGVyOjphZGp1
c3RTdGFydFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIG1fc3RhcnRJbmRl
eE9mQ3VycmVudFJ1biArPSBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW47CisgICAgcmV0dXJu
IHBvaW50ICsgbV9zdGFydE9mZnNldDsKK30KIAotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUg
dGV4dCB0byB0YWtlIHRoZSBsYXJnZXN0IHJhbmdlIHRoYXQgc3RheXMgd2l0aGluCi0gICAgLy8g
YSBzaW5nbGUgZm9udC4KLSAgICBpbnQgZW5kT2ZSdW5JbmRleCA9IG1fbm9ybWFsaXplZEJ1ZmZl
ckxlbmd0aCAtIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1bjsKLSAgICBTdXJyb2dhdGVQYWlyQXdh
cmVUZXh0SXRlcmF0b3IgaXRlcmF0b3IobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFy
dEluZGV4T2ZDdXJyZW50UnVuLCAwLCBlbmRPZlJ1bkluZGV4LCBlbmRPZlJ1bkluZGV4KTsKK2Jv
b2wgSGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMoKQoreworICAgIFN1cnJvZ2F0
ZVBhaXJBd2FyZVRleHRJdGVyYXRvciBpdGVyYXRvcihtX25vcm1hbGl6ZWRCdWZmZXIuZ2V0KCks
IDAsIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsK
ICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKICAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsK
KyAgICB1bnNpZ25lZCBzdGFydEluZGV4T2ZDdXJyZW50UnVuID0gMDsKICAgICBpZiAoIWl0ZXJh
dG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgbV9jdXJyZW50Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJh
Y3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
LCBmYWxzZSkuZm9udERhdGE7CiAgICAgVUVycm9yQ29kZSBlcnJvckNvZGUgPSBVX1pFUk9fRVJS
T1I7Ci0gICAgVVNjcmlwdENvZGUgY3VycmVudFNjcmlwdCA9IHVzY3JpcHRfZ2V0U2NyaXB0KGNo
YXJhY3RlciwgJmVycm9yQ29kZSk7CisgICAgVVNjcmlwdENvZGUgbmV4dFNjcmlwdCA9IHVzY3Jp
cHRfZ2V0U2NyaXB0KGNoYXJhY3RlciwgJmVycm9yQ29kZSk7CiAgICAgaWYgKFVfRkFJTFVSRShl
cnJvckNvZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGN1cnJlbnRTY3JpcHQg
PT0gVVNDUklQVF9JTkhFUklURUQpCi0gICAgICAgIGN1cnJlbnRTY3JpcHQgPSBVU0NSSVBUX0NP
TU1PTjsKLSAgICBmb3IgKGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9y
LmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuYWR2YW5jZShjbHVz
dGVyTGVuZ3RoKSkgewotICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbmV4dEZvbnREYXRh
ID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERh
dGE7Ci0gICAgICAgIGlmIChuZXh0Rm9udERhdGEgIT0gbV9jdXJyZW50Rm9udERhdGEpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgVVNjcmlwdENvZGUgbmV4dFNjcmlwdCA9IHVzY3JpcHRf
Z2V0U2NyaXB0KGNoYXJhY3RlciwgJmVycm9yQ29kZSk7Ci0gICAgICAgIGlmIChVX0ZBSUxVUkUo
ZXJyb3JDb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGN1cnJl
bnRTY3JpcHQgPT0gbmV4dFNjcmlwdCB8fCBuZXh0U2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVE
IHx8IG5leHRTY3JpcHQgPT0gVVNDUklQVF9DT01NT04pCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKGN1cnJlbnRTY3JpcHQgPT0gVVNDUklQVF9DT01NT04pCi0gICAgICAgICAg
ICBjdXJyZW50U2NyaXB0ID0gbmV4dFNjcmlwdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biA9IGl0ZXJhdG9y
LmN1cnJlbnRDaGFyYWN0ZXIoKTsKLQotICAgIGlmICghbV9oYXJmYnV6ekJ1ZmZlcikgewotICAg
ICAgICBtX2hhcmZidXp6QnVmZmVyID0gaGJfYnVmZmVyX2NyZWF0ZSgpOwotICAgICAgICBoYl9i
dWZmZXJfc2V0X3VuaWNvZGVfZnVuY3MobV9oYXJmYnV6ekJ1ZmZlciwgaGJfaWN1X2dldF91bmlj
b2RlX2Z1bmNzKCkpOwotICAgIH0gZWxzZQotICAgICAgICBoYl9idWZmZXJfcmVzZXQobV9oYXJm
YnV6ekJ1ZmZlcik7Ci0gICAgaGJfYnVmZmVyX3NldF9zY3JpcHQobV9oYXJmYnV6ekJ1ZmZlciwg
aGJfaWN1X3NjcmlwdF90b19zY3JpcHQoY3VycmVudFNjcmlwdCkpOwotCi0gICAgLy8gV2ViS2l0
IGFsd2F5cyBzZXRzIGRpcmVjdGlvbiB0byBMVFIgZHVyaW5nIHdpZHRoIGNhbGN1bGF0aW9uLgot
ICAgIC8vIFdlIG9ubHkgc2V0IGRpcmVjdGlvbiB3aGVuIGRpcmVjdGlvbiBpcyBleHBsaWNpdGx5
IHNldCB0byBSVEwgc28gdGhhdAotICAgIC8vIHByZXZlbnRuZyB3cm9uZyB3aWR0aCBjYWxjdWxh
dGlvbi4KLSAgICBpZiAobV9ydW4ucnRsKCkpCi0gICAgICAgIGhiX2J1ZmZlcl9zZXRfZGlyZWN0
aW9uKG1faGFyZmJ1enpCdWZmZXIsIEhCX0RJUkVDVElPTl9SVEwpOwotCi0gICAgLy8gRGV0ZXJt
aW5lIHdoZXRoZXIgdGhpcyBydW4gbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHNtYWxsIGNhcHMu
Ci0gICAgLy8gbmV4dFNjcmlwdFJ1bigpIHdpbGwgYWx3YXlzIHNlbmQgdXMgYSBydW4gb2YgdGhl
IHNhbWUgY2FzZSwgYmVjYXVzZSBhCi0gICAgLy8gY2FzZSBjaGFuZ2Ugd2hpbGUgaW4gc21hbGwt
Y2FwcyBtb2RlIGFsd2F5cyByZXN1bHRzIGluIGRpZmZlcmVudAotICAgIC8vIEZvbnREYXRhLCBz
byB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IGNoYXJhY3RlcidzIGNhc2UuCi0gICAg
aWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAmJiB1X2lzbG93ZXIobV9ub3JtYWxpemVkQnVmZmVy
W21fc3RhcnRJbmRleE9mQ3VycmVudFJ1bl0pKSB7Ci0gICAgICAgIFN0cmluZyB1cHBlclRleHQg
PSBTdHJpbmcobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9zdGFydEluZGV4T2ZDdXJyZW50
UnVuLCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4pOwotICAgICAgICB1cHBlclRleHQubWFr
ZVVwcGVyKCk7Ci0gICAgICAgIG1fY3VycmVudEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIodXBwZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFyaWFudCkuZm9udERh
dGE7Ci0gICAgICAgIGhiX2J1ZmZlcl9hZGRfdXRmMTYobV9oYXJmYnV6ekJ1ZmZlciwgdXBwZXJU
ZXh0LmNoYXJhY3RlcnMoKSwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCAwLCBtX251bUNo
YXJhY3RlcnNPZkN1cnJlbnRSdW4pOwotICAgIH0gZWxzZQotICAgICAgICBoYl9idWZmZXJfYWRk
X3V0ZjE2KG1faGFyZmJ1enpCdWZmZXIsIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fc3Rh
cnRJbmRleE9mQ3VycmVudFJ1biwgbV9udW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCAwLCBtX251
bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4pOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgZG8gewor
ICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogY3VycmVudEZvbnREYXRhID0gbmV4dEZvbnRE
YXRhOworICAgICAgICBVU2NyaXB0Q29kZSBjdXJyZW50U2NyaXB0ID0gbmV4dFNjcmlwdDsKKwor
ICAgICAgICBmb3IgKGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmNv
bnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVy
TGVuZ3RoKSkgeworICAgICAgICAgICAgbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7CisgICAgICAgICAgICBpZiAo
bmV4dEZvbnREYXRhICE9IGN1cnJlbnRGb250RGF0YSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIG5leHRTY3JpcHQgPSB1c2NyaXB0X2dldFNjcmlwdChjaGFyYWN0ZXIsICZl
cnJvckNvZGUpOworICAgICAgICAgICAgaWYgKFVfRkFJTFVSRShlcnJvckNvZGUpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICgoY3VycmVudFNjcmlwdCAh
PSBuZXh0U2NyaXB0KSAmJiAoY3VycmVudFNjcmlwdCAhPSBVU0NSSVBUX0lOSEVSSVRFRCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgbnVtQ2hh
cmFjdGVyc09mQ3VycmVudFJ1biA9IGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKSAtIHN0YXJ0
SW5kZXhPZkN1cnJlbnRSdW47CisgICAgICAgIG1faGFyZmJ1enpSdW5zLmFwcGVuZChIYXJmQnV6
elJ1bjo6Y3JlYXRlKGN1cnJlbnRGb250RGF0YSwgc3RhcnRJbmRleE9mQ3VycmVudFJ1biwgbnVt
Q2hhcmFjdGVyc09mQ3VycmVudFJ1biwgbV9ydW4uZGlyZWN0aW9uKCkpKTsKKyAgICAgICAgY3Vy
cmVudEZvbnREYXRhID0gbmV4dEZvbnREYXRhOworICAgICAgICBzdGFydEluZGV4T2ZDdXJyZW50
UnVuID0gaXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOworICAgIH0gd2hpbGUgKGl0ZXJhdG9y
LmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSk7CisKKyAgICByZXR1cm4gIW1faGFy
ZmJ1enpSdW5zLmlzRW1wdHkoKTsKIH0KIAotYm9vbCBIYXJmQnV6elNoYXBlcjo6c2hhcGVIYXJm
QnV6elJ1bigpCitib29sIEhhcmZCdXp6U2hhcGVyOjpzaGFwZUhhcmZCdXp6UnVucyhHbHlwaEJ1
ZmZlciogZ2x5cGhCdWZmZXIpCiB7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRh
ID0gY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJm1fY3VycmVudEZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKSk7Ci0gICAgSGFyZkJ1enpGYWNlKiBmYWNlID0gcGxhdGZvcm1EYXRhLT5oYXJm
YnV6ekZhY2UoKTsKLSAgICBpZiAoIWZhY2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBo
Yl9mb250X3QqIGhhcmZidXp6Rm9udCA9IGZhY2UtPmNyZWF0ZUZvbnQoKTsKLSAgICBoYl9zaGFw
ZShoYXJmYnV6ekZvbnQsIG1faGFyZmJ1enpCdWZmZXIsIG1fZmVhdHVyZXMuc2l6ZSgpID4gMCA/
IG1fZmVhdHVyZXMuZGF0YSgpIDogMCwgbV9mZWF0dXJlcy5zaXplKCkpOwotICAgIGhiX2ZvbnRf
ZGVzdHJveShoYXJmYnV6ekZvbnQpOwotICAgIG1faGFyZmJ1enpSdW5zLmFwcGVuZChIYXJmQnV6
elJ1bjo6Y3JlYXRlKG1fbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biwgbV9ydW4uZGlyZWN0aW9u
KCksIG1faGFyZmJ1enpCdWZmZXIpKTsKKyAgICBIYXJmQnV6elNjb3BlZFB0cjxoYl9idWZmZXJf
dD4gaGFyZmJ1enpCdWZmZXIoaGJfYnVmZmVyX2NyZWF0ZSgpLCBoYl9idWZmZXJfZGVzdHJveSk7
CisgICAgaGJfYnVmZmVyX3NldF91bmljb2RlX2Z1bmNzKGhhcmZidXp6QnVmZmVyLmdldCgpLCBo
Yl9pY3VfZ2V0X3VuaWNvZGVfZnVuY3MoKSk7CisgICAgaWYgKG1fcnVuLmRpcmVjdGlvbmFsT3Zl
cnJpZGUoKSkKKyAgICAgICAgaGJfYnVmZmVyX3NldF9kaXJlY3Rpb24oaGFyZmJ1enpCdWZmZXIu
Z2V0KCksIG1fcnVuLnJ0bCgpID8gSEJfRElSRUNUSU9OX1JUTCA6IEhCX0RJUkVDVElPTl9MVFIp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZmJ1enpSdW5zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIHVuc2lnbmVkIHJ1bkluZGV4ID0gbV9ydW4ucnRsKCkgPyBtX2hhcmZi
dXp6UnVucy5zaXplKCkgLSBpIC0gMSA6IGk7CisgICAgICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50
UnVuID0gbV9oYXJmYnV6elJ1bnNbcnVuSW5kZXhdLmdldCgpOworICAgICAgICBjb25zdCBTaW1w
bGVGb250RGF0YSogY3VycmVudEZvbnREYXRhID0gY3VycmVudFJ1bi0+Zm9udERhdGEoKTsKKwor
ICAgICAgICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYmIHVfaXNsb3dlcihtX25vcm1hbGl6
ZWRCdWZmZXJbY3VycmVudFJ1bi0+c3RhcnRJbmRleCgpXSkpIHsKKyAgICAgICAgICAgIFN0cmlu
ZyB1cHBlclRleHQgPSBTdHJpbmcobV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgY3VycmVudFJ1
bi0+c3RhcnRJbmRleCgpLCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCkpOworICAgICAgICAg
ICAgdXBwZXJUZXh0Lm1ha2VVcHBlcigpOworICAgICAgICAgICAgY3VycmVudEZvbnREYXRhID0g
bV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodXBwZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxD
YXBzVmFyaWFudCkuZm9udERhdGE7CisgICAgICAgICAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KGhh
cmZidXp6QnVmZmVyLmdldCgpLCB1cHBlclRleHQuY2hhcmFjdGVycygpLCBjdXJyZW50UnVuLT5u
dW1DaGFyYWN0ZXJzKCksIDAsIGN1cnJlbnRSdW4tPm51bUNoYXJhY3RlcnMoKSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgaGJfYnVmZmVyX2FkZF91dGYxNihoYXJmYnV6ekJ1ZmZlci5n
ZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgY3VycmVudFJ1bi0+c3RhcnRJbmRleCgp
LCBjdXJyZW50UnVuLT5udW1DaGFyYWN0ZXJzKCksIDAsIGN1cnJlbnRSdW4tPm51bUNoYXJhY3Rl
cnMoKSk7CisKKyAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gY29uc3Rf
Y2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJmN1cnJlbnRGb250RGF0YS0+cGxhdGZvcm1EYXRhKCkp
OworICAgICAgICBIYXJmQnV6ekZhY2UqIGZhY2UgPSBwbGF0Zm9ybURhdGEtPmhhcmZidXp6RmFj
ZSgpOworICAgICAgICBpZiAoIWZhY2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIEhhcmZCdXp6U2NvcGVkUHRyPGhiX2ZvbnRfdD4gaGFyZmJ1enpGb250KGZhY2UtPmNyZWF0
ZUZvbnQoKSwgaGJfZm9udF9kZXN0cm95KTsKKyAgICAgICAgaGJfc2hhcGUoaGFyZmJ1enpGb250
LmdldCgpLCBoYXJmYnV6ekJ1ZmZlci5nZXQoKSwgbV9mZWF0dXJlcy5pc0VtcHR5KCkgPyAwIDog
bV9mZWF0dXJlcy5kYXRhKCksIG1fZmVhdHVyZXMuc2l6ZSgpKTsKKworICAgICAgICBjdXJyZW50
UnVuLT5hcHBseVNoYXBlUmVzdWx0KGhhcmZidXp6QnVmZmVyLmdldCgpKTsKKyAgICAgICAgc2V0
R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihjdXJyZW50UnVuLCBpLCBoYXJmYnV6ekJ1ZmZl
ci5nZXQoKSwgZ2x5cGhCdWZmZXIpOworCisgICAgICAgIGhiX2J1ZmZlcl9yZXNldChoYXJmYnV6
ekJ1ZmZlci5nZXQoKSk7CisgICAgICAgIGlmIChtX3J1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCkp
CisgICAgICAgICAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbihoYXJmYnV6ekJ1ZmZlci5nZXQo
KSwgbV9ydW4ucnRsKCkgPyBIQl9ESVJFQ1RJT05fUlRMIDogSEJfRElSRUNUSU9OX0xUUik7Cisg
ICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEhhcmZCdXp6U2hhcGVyOjpzZXRHbHlw
aFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3ZvaWQg
SGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oSGFyZkJ1enpS
dW4qIGN1cnJlbnRSdW4sIHVuc2lnbmVkIHJ1bkluZGV4SW5WaXN1YWxPcmRlciwgaGJfYnVmZmVy
X3QqIGhhcmZidXp6QnVmZmVyLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiB7Ci0gICAgaGJf
Z2x5cGhfaW5mb190KiBnbHlwaEluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhtX2hh
cmZidXp6QnVmZmVyLCAwKTsKLSAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0aW9u
cyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKG1faGFyZmJ1enpCdWZmZXIsIDApOwot
ICAgIEhhcmZCdXp6UnVuKiBjdXJyZW50UnVuID0gbV9oYXJmYnV6elJ1bnMubGFzdCgpLmdldCgp
OworICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBjdXJyZW50Rm9udERhdGEgPSBjdXJyZW50UnVu
LT5mb250RGF0YSgpOworICAgIGhiX2dseXBoX2luZm9fdCogZ2x5cGhJbmZvcyA9IGhiX2J1ZmZl
cl9nZXRfZ2x5cGhfaW5mb3MoaGFyZmJ1enpCdWZmZXIsIDApOworICAgIGhiX2dseXBoX3Bvc2l0
aW9uX3QqIGdseXBoUG9zaXRpb25zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9wb3NpdGlvbnMoaGFy
ZmJ1enpCdWZmZXIsIDApOwogCiAgICAgdW5zaWduZWQgbnVtR2x5cGhzID0gY3VycmVudFJ1bi0+
bnVtR2x5cGhzKCk7CiAgICAgZmxvYXQgdG90YWxBZHZhbmNlID0gMDsKQEAgLTI2MiwyNiArMzA4
LDI5IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpS
dW4oR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogICAgICAgICBuZXh0T2Zmc2V0WCA9IHJ1bkVu
ZCA/IDAgOiBoYXJmYnV6elBvc2l0aW9uVG9GbG9hdChnbHlwaFBvc2l0aW9uc1tpICsgMV0ueF9v
ZmZzZXQpOwogICAgICAgICBuZXh0T2Zmc2V0WSA9IHJ1bkVuZCA/IDAgOiAtaGFyZmJ1enpQb3Np
dGlvblRvRmxvYXQoZ2x5cGhQb3NpdGlvbnNbaSArIDFdLnlfb2Zmc2V0KTsKIAotICAgICAgICB1
bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVySW5kZXggPSBtX3N0YXJ0SW5kZXhPZkN1cnJlbnRSdW4g
KyBnbHlwaEluZm9zW2ldLmNsdXN0ZXI7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0
ZXJJbmRleCA9IGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSArIGdseXBoSW5mb3NbaV0uY2x1c3Rl
cjsKICAgICAgICAgYm9vbCBpc0NsdXN0ZXJFbmQgPSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5j
bHVzdGVyICE9IGdseXBoSW5mb3NbaSArIDFdLmNsdXN0ZXI7CiAgICAgICAgIGZsb2F0IHNwYWNp
bmcgPSBpc0NsdXN0ZXJFbmQgPyBtX2xldHRlclNwYWNpbmcgOiAwOwogCiAgICAgICAgIGlmIChp
c0NsdXN0ZXJFbmQgJiYgaXNXb3JkRW5kKGN1cnJlbnRDaGFyYWN0ZXJJbmRleCkpCiAgICAgICAg
ICAgICBzcGFjaW5nICs9IGRldGVybWluZVdvcmRCcmVha1NwYWNpbmcoKTsKIAotICAgICAgICBp
ZiAobV9jdXJyZW50Rm9udERhdGEtPmlzWmVyb1dpZHRoU3BhY2VHbHlwaChnbHlwaCkpIHsKLSAg
ICAgICAgICAgIGN1cnJlbnRSdW4tPnNldEdseXBoQW5kUG9zaXRpb25zKGksIGdseXBoLCAwLCAw
LCAwKTsKKyAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+aXNaZXJvV2lkdGhTcGFjZUdseXBo
KGdseXBoKSkgeworICAgICAgICAgICAgY3VycmVudFJ1bi0+c2V0R2x5cGhBbmRBZHZhbmNlKGks
IGdseXBoLCAwKTsKICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlcikKLSAgICAgICAgICAgICAg
ICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBtX2N1cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhC
dWZmZXJBZHZhbmNlKDAsIDApKTsKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGds
eXBoLCBjdXJyZW50Rm9udERhdGEsIGNyZWF0ZUdseXBoQnVmZmVyQWR2YW5jZSgwLCAwKSk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGFkdmFuY2UgKz0gc3Bh
Y2luZzsKLSAgICAgICAgY3VycmVudFJ1bi0+c2V0R2x5cGhBbmRQb3NpdGlvbnMoaSwgZ2x5cGgs
IHRvdGFsQWR2YW5jZSArIG9mZnNldFgsIG9mZnNldFksIGFkdmFuY2UpOworCisgICAgICAgIGN1
cnJlbnRSdW4tPnNldEdseXBoQW5kQWR2YW5jZShpLCBnbHlwaCwgYWR2YW5jZSk7CiAgICAgICAg
IGlmIChnbHlwaEJ1ZmZlcikgeworICAgICAgICAgICAgaWYgKCFpICYmICFydW5JbmRleEluVmlz
dWFsT3JkZXIpCisgICAgICAgICAgICAgICAgbV9zdGFydE9mZnNldC5zZXQob2Zmc2V0WCwgb2Zm
c2V0WSk7CiAgICAgICAgICAgICBmbG9hdCBnbHlwaEFkdmFuY2VYID0gYWR2YW5jZSArIG5leHRP
ZmZzZXRYIC0gb2Zmc2V0WDsKICAgICAgICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZVkgPSBuZXh0
T2Zmc2V0WSAtIG9mZnNldFk7Ci0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBt
X2N1cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGdseXBoQWR2YW5jZVgs
IGdseXBoQWR2YW5jZVkpKTsKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGN1
cnJlbnRGb250RGF0YSwgY3JlYXRlR2x5cGhCdWZmZXJBZHZhbmNlKGdseXBoQWR2YW5jZVgsIGds
eXBoQWR2YW5jZVkpKTsKICAgICAgICAgfQogCiAgICAgICAgIHRvdGFsQWR2YW5jZSArPSBhZHZh
bmNlOwpAQCAtMzI0LDM3ICszNzMsNDYgQEAgaW50IEhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQ
b3NpdGlvbihmbG9hdCB0YXJnZXRYKQogCiBGbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVj
dGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBp
bnQgdG8pCiB7Ci0gICAgaW50IGZyb21YID0gLTEsIHRvWCA9IC0xOwotICAgIGludCBjdXJyZW50
WCA9IDA7Ci0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzY3JpcHQgcnVucyBpbiBsb2dpY2Fs
IG9yZGVyLCBzZWFyY2hpbmcgZm9yIHRoZSBydW4gY292ZXJpbmcgdGhlIHBvc2l0aW9ucyBvZiBp
bnRlcmVzdC4KKyAgICBmbG9hdCBjdXJyZW50WCA9IDA7CisgICAgZmxvYXQgZnJvbVg7CisgICAg
ZmxvYXQgdG9YOworICAgIGJvb2wgZm91bmRGcm9tWCA9IGZhbHNlOworICAgIGJvb2wgZm91bmRU
b1ggPSBmYWxzZTsKKworICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgY3VycmVudFggPSBt
X3RvdGFsV2lkdGg7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGFyZmJ1enpSdW5z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3J1bi5ydGwoKSkKKyAgICAgICAgICAgIGN1
cnJlbnRYIC09IG1faGFyZmJ1enpSdW5zW2ldLT53aWR0aCgpOwogICAgICAgICBpbnQgbnVtQ2hh
cmFjdGVycyA9IG1faGFyZmJ1enpSdW5zW2ldLT5udW1DaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGlm
IChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAgJiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpCisgICAg
ICAgIGlmICghZm91bmRGcm9tWCAmJiBmcm9tID49IDAgJiYgZnJvbSA8IG51bUNoYXJhY3RlcnMp
IHsKICAgICAgICAgICAgIGZyb21YID0gbV9oYXJmYnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9m
ZnNldChmcm9tKSArIGN1cnJlbnRYOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3VuZEZy
b21YID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBmcm9tIC09IG51bUNoYXJh
Y3RlcnM7CiAKLSAgICAgICAgaWYgKHRvWCA9PSAtMSAmJiB0byA+PSAwICYmIHRvIDwgbnVtQ2hh
cmFjdGVycykKKyAgICAgICAgaWYgKCFmb3VuZFRvWCAmJiB0byA+PSAwICYmIHRvIDwgbnVtQ2hh
cmFjdGVycykgewogICAgICAgICAgICAgdG9YID0gbV9oYXJmYnV6elJ1bnNbaV0tPnhQb3NpdGlv
bkZvck9mZnNldCh0bykgKyBjdXJyZW50WDsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgZm91
bmRUb1ggPSB0cnVlOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRvIC09IG51bUNoYXJh
Y3RlcnM7CiAKLSAgICAgICAgaWYgKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSkKKyAgICAgICAg
aWYgKGZvdW5kRnJvbVggJiYgZm91bmRUb1gpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y3VycmVudFggKz0gbV9oYXJmYnV6elJ1bnNbaV0tPndpZHRoKCk7CisgICAgICAgIGlmICghbV9y
dW4ucnRsKCkpCisgICAgICAgICAgICBjdXJyZW50WCArPSBtX2hhcmZidXp6UnVuc1tpXS0+d2lk
dGgoKTsKICAgICB9CiAKICAgICAvLyBUaGUgcG9zaXRpb24gaW4gcXVlc3Rpb24gbWlnaHQgYmUg
anVzdCBhZnRlciB0aGUgdGV4dC4KLSAgICBpZiAoZnJvbVggPT0gLTEpCisgICAgaWYgKCFmb3Vu
ZEZyb21YKQogICAgICAgICBmcm9tWCA9IDA7Ci0gICAgaWYgKHRvWCA9PSAtMSkKKyAgICBpZiAo
IWZvdW5kVG9YKQogICAgICAgICB0b1ggPSBtX3J1bi5ydGwoKSA/IDAgOiBtX3RvdGFsV2lkdGg7
CiAKLSAgICBBU1NFUlQoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0xKTsKLQorICAgIC8vIFVzaW5n
IGZsb29yZigpIGFuZCByb3VuZGYoKSBhcyB0aGUgc2FtZSBhcyBtYWMgcG9ydC4KICAgICBpZiAo
ZnJvbVggPCB0b1gpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJvbVgs
IHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChw
b2ludC54KCkgKyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7CisgICAgICAg
IHJldHVybiBGbG9hdFJlY3QoZmxvb3JmKHBvaW50LngoKSArIGZyb21YKSwgcG9pbnQueSgpLCBy
b3VuZGYodG9YIC0gZnJvbVgpLCBoZWlnaHQpOworICAgIHJldHVybiBGbG9hdFJlY3QoZmxvb3Jm
KHBvaW50LngoKSArIHRvWCksIHBvaW50LnkoKSwgcm91bmRmKGZyb21YIC0gdG9YKSwgaGVpZ2h0
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmgK
aW5kZXggN2JlZmY1ZDcyY2RjNTRmODg4OGQ2YzIwYWNhMWQ2ZWRiMDMzMjMxYy4uZWIzOTM1ZGIx
NDczMTVhODNhNWM5YWY2ODRmYWVhMGJkOGI5ZGMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBl
ci5oCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IYXJmQnV6elNoYXBl
cigpOwogCiAgICAgYm9vbCBzaGFwZShHbHlwaEJ1ZmZlciogPSAwKTsKKyAgICBGbG9hdFBvaW50
IGFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYpOwogICAgIGZsb2F0IHRvdGFsV2lk
dGgoKSB7IHJldHVybiBtX3RvdGFsV2lkdGg7IH0KICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24o
ZmxvYXQgdGFyZ2V0WCk7CiAgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQ
b2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pOwpAQCAtNTksMzEgKzYwLDM3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgSGFyZkJ1enpSdW4gewogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SGFyZkJ1enpSdW4+IGNyZWF0ZSh1bnNpZ25lZCBu
dW1DaGFyYWN0ZXJzLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgaGJfYnVmZmVyX3QqIGJ1ZmZl
cikKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8SGFyZkJ1enpSdW4+IGNyZWF0ZShjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51
bUNoYXJhY3RlcnMsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhhcmZCdXp6UnVuKG51bUNoYXJhY3RlcnMsIGRpcmVj
dGlvbiwgYnVmZmVyKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEhhcmZCdXp6
UnVuKGZvbnREYXRhLCBzdGFydEluZGV4LCBudW1DaGFyYWN0ZXJzLCBkaXJlY3Rpb24pKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHZvaWQgc2V0R2x5cGhBbmRQb3NpdGlvbnModW5zaWduZWQgaW5k
ZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0KTsKKyAgICAgICAg
dm9pZCBhcHBseVNoYXBlUmVzdWx0KGhiX2J1ZmZlcl90Kik7CisgICAgICAgIHZvaWQgc2V0R2x5
cGhBbmRBZHZhbmNlKHVuc2lnbmVkIGluZGV4LCB1aW50MTZfdCBnbHlwaElkLCBmbG9hdCBhZHZh
bmNlKTsKICAgICAgICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lk
dGg7IH0KIAogICAgICAgICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdl
dFgpOwotICAgICAgICBpbnQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7Cisg
ICAgICAgIGZsb2F0IHhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpOwogCisgICAg
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERhdGE7
IH0KKyAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRJ
bmRleDsgfQogICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4g
bV9udW1DaGFyYWN0ZXJzOyB9CiAgICAgICAgIHVuc2lnbmVkIG51bUdseXBocygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtR2x5cGhzOyB9CisgICAgICAgIHVpbnQxNl90KiBnbHlwaHMoKSB7IHJldHVy
biAmbV9nbHlwaHNbMF07IH0KKyAgICAgICAgZmxvYXQqIGFkdmFuY2VzKCkgeyByZXR1cm4gJm1f
YWR2YW5jZXNbMF07IH0KICAgICAgICAgZmxvYXQgd2lkdGgoKSB7IHJldHVybiBtX3dpZHRoOyB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICBIYXJmQnV6elJ1bih1bnNpZ25lZCBudW1DaGFyYWN0
ZXJzLCBUZXh0RGlyZWN0aW9uLCBoYl9idWZmZXJfdCopOworICAgICAgICBIYXJmQnV6elJ1bihj
b25zdCBTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIG51bUNo
YXJhY3RlcnMsIFRleHREaXJlY3Rpb24pOwogICAgICAgICBib29sIHJ0bCgpIHsgcmV0dXJuIG1f
ZGlyZWN0aW9uID09IFJUTDsgfQogCisgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2Zv
bnREYXRhOworICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0SW5kZXg7CiAgICAgICAgIHNpemVfdCBt
X251bUNoYXJhY3RlcnM7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzOwogICAgICAgICBU
ZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogICAgICAgICBWZWN0b3I8dWludDE2X3QsIDI1Nj4g
bV9nbHlwaHM7CiAgICAgICAgIFZlY3RvcjxmbG9hdCwgMjU2PiBtX2FkdmFuY2VzOwotICAgICAg
ICBWZWN0b3I8RmxvYXRQb2ludCwgMjU2PiBtX29mZnNldHM7CiAgICAgICAgIFZlY3Rvcjx1aW50
MTZfdCwgMjU2PiBtX2xvZ0NsdXN0ZXJzOwogICAgICAgICBWZWN0b3I8dWludDE2X3QsIDI1Nj4g
bV9nbHlwaFRvQ2hhcmFjdGVySW5kZXg7CiAgICAgICAgIGZsb2F0IG1fd2lkdGg7CkBAIC05MSwx
OSArOTgsMTcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0Rm9udEZlYXR1cmVzKCk7CiAKLSAg
ICBib29sIHNldHVwSGFyZkJ1enpSdW4oKTsKLSAgICBib29sIHNoYXBlSGFyZkJ1enpSdW4oKTsK
LSAgICB2b2lkIHNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oR2x5cGhCdWZmZXIqKTsK
KyAgICBib29sIGNvbGxlY3RIYXJmQnV6elJ1bnMoKTsKKyAgICBib29sIHNoYXBlSGFyZkJ1enpS
dW5zKEdseXBoQnVmZmVyKik7CisgICAgdm9pZCBzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6
UnVuKEhhcmZCdXp6UnVuKiwgdW5zaWduZWQgcnVuSW5kZXhJblZpc3VhbE9yZGVyLCBoYl9idWZm
ZXJfdCosIEdseXBoQnVmZmVyKik7CiAKICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgY3JlYXRlR2x5
cGhCdWZmZXJBZHZhbmNlKGZsb2F0LCBmbG9hdCk7CiAKICAgICBWZWN0b3I8aGJfZmVhdHVyZV90
LCA0PiBtX2ZlYXR1cmVzOwotICAgIHVuc2lnbmVkIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1bjsK
LSAgICB1bnNpZ25lZCBtX251bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW47Ci0gICAgY29uc3QgU2lt
cGxlRm9udERhdGEqIG1fY3VycmVudEZvbnREYXRhOwotICAgIGhiX2J1ZmZlcl90KiBtX2hhcmZi
dXp6QnVmZmVyOwogICAgIFZlY3RvcjxPd25QdHI8SGFyZkJ1enpSdW4+LCAxNj4gbV9oYXJmYnV6
elJ1bnM7CiAKKyAgICBGbG9hdFBvaW50IG1fc3RhcnRPZmZzZXQ7CisKICAgICBmbG9hdCBtX3Rv
dGFsV2lkdGg7CiB9OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDFjNjkyZjdmZTlhZjVjMjk5YWE0YTAwM2UwOGQ2YTk1
MTUyNDgxNS4uMzZiMjJmOGE0OTRmNzhjYjY3MTA1ODQwOGU3Mjk5N2NlOWY3Njk2ZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDEyLTA3LTExICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIEZpeCBidWdzIGluIEhhcmZCdXp6U2hh
cGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDk1
MQorCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgQWRkIHRlc3Rz
IGZvciBoYXJmYnV6ei1uZyBzaGFwZXIuIEkgdHJpZWQgdG8gdXNlIC1leHBlY3RlZC5odG1sIHN0
eWxlIGV4cGVjdGF0aW9ucywKKyAgICAgICAgYnV0IGl0IGRpZG4ndCB3b3JrIGJlY2F1c2UgdGhl
cmUgYXJlIHZlcnkgc2xpZ2h0IGRpZmZlcmVuY2UgYmV0d2VlbiBDb3JlVGV4dCBhbmQgSGFyZkJ1
enogaW4KKyAgICAgICAgcmVuZGVyaW5nIHJlc3VsdC4KKworICAgICAgICAqIGZhc3QvdGV4dC9z
aGFwaW5nL3NoYXBpbmctc2NyaXB0LW9yZGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
dGV4dC9zaGFwaW5nL3NoYXBpbmctc2VsZWN0aW9uLXJlY3QuaHRtbDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9uczogTmVlZCByZWJhc2VsaW5lLgor
ICAgICAgICAqIHBsYXRmb3JtL2VmbC9UZXN0RXhwZWN0YXRpb25zOiBTa2lwIGFkZGVkIHRlc3Rz
IGJlY2F1c2UgdGhlIHBvcnQgZG9lc24ndCB1c2UgaGFyZmJ1enouCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnM6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9UZXN0RXhwZWN0
YXRpb25zOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZDogRGl0dG8uCisgICAgICAgICogcGxh
dGZvcm0vd2syL1NraXBwZWQ6IERpdHRvLgorCiAyMDEyLTA3LTEyICBLb25yYWQgUGlhc2NpayAg
PGtwaWFzY2lrQHJpbS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogR2VvbG9jYXRpb24g
b3ZlcnJpZGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9zaGFwaW5nL3NoYXBp
bmctc2NyaXB0LW9yZGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvc2hhcGluZy9zaGFw
aW5nLXNjcmlwdC1vcmRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlZjBmMDc2NmNhODA3OTM2YzQ4OTY1
OTQ5NjA2MzQ1YThkYzJlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Rl
eHQvc2hhcGluZy9zaGFwaW5nLXNjcmlwdC1vcmRlci5odG1sCkBAIC0wLDAgKzEsMTYgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgLmxybyB7CisgICAgICAgIGZvbnQtZmFtaWx5OiAi
dGltZXMgbmV3IHJvbWFuIjsgLyogbm9uIEFBVCBmb250IG9uIG1hYyAqLworICAgICAgICBkaXJl
Y3Rpb246bHRyOworICAgICAgICB1bmljb2RlLWJpZGk6YmlkaS1vdmVycmlkZTsKKyAgICB9Owor
PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorVGhlIGZvbGxvd2luZyB0d28gbGluZXMgc2hvdWxk
IGJlIHRoZSBzYW1lOgorPHAgY2xhc3M9ImxybyI+YWJjJiN4MDVkMjsmI3gwNWQxOyYjeDA1ZDA7
JiN4MDY2MTsmI3gwNjYyOyYjeDA2NjM7PC9wPgorPHAgY2xhc3M9ImxybyIgc3R5bGU9Ii13ZWJr
aXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAna2Vybic7Ij5hYmMmI3gwNWQyOyYjeDA1ZDE7JiN4
MDVkMDsmI3gwNjYxOyYjeDA2NjI7JiN4MDY2Mzs8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvc2hhcGluZy9zaGFwaW5nLXNlbGVjdGlvbi1y
ZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvc2hhcGluZy9zaGFwaW5nLXNlbGVjdGlv
bi1yZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWEwMmQyYzRiZGMyZDEzYjM0ZWJkNDc1YWI1OWIzYWZi
MzA4ZTI2MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9zaGFwaW5n
L3NoYXBpbmctc2VsZWN0aW9uLXJlY3QuaHRtbApAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxo
ZWFkPgorPHN0eWxlPgorICAgICN0YXJnZXQgeworICAgICAgICBmb250LWZhbWlseTogInRpbWVz
IG5ldyByb21hbiI7IC8qIG5vbiBBQVQgZm9udCBvbiBtYWMgKi8KKyAgICAgICAgLXdlYmtpdC1m
b250LWZlYXR1cmUtc2V0dGluZ3M6ICdrZXJuJzsKKyAgICB9OworPC9zdHlsZT4KKzxzY3JpcHQ+
CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2YXIgdGFyZ2V0VGV4dCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0YXJnZXQiKS5maXJzdENoaWxkOworICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24o
KS5zZXRCYXNlQW5kRXh0ZW50KHRhcmdldCwgMCwgdGFyZ2V0LCA5KTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+VGhlIHNlbGVjdGlvbiBzaG91bGQg
Y292ZXIgdGhlIGFsbCBvZiB0aGUgYmVsb3cgdGV4dC4gVGhlcmUgc2hvdWxkIGJlIG5vIGJsYW5r
IGJldHdlZW4gQyBhbmQgRi4KKzxkaXYgaWQ9InRhcmdldCI+CitBQkM8c3BhbiBzdHlsZT0iZGly
ZWN0aW9uOiBydGw7IHVuaWNvZGUtYmlkaTogYmlkaS1vdmVycmlkZTsiPkRFRjwvc3Bhbj5HSEkK
KzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNTVjMzQ5NDdhZDQ1MTM5ZGFiY2RmMDNiNGYwN2Mz
ZDViNGEzMDk2MS4uZmZjZDEwZmEyODEyNDRhMWMzN2MzMmMzMDlkODdhZTM0YjdhNzc2ZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCkBAIC0z
NzQ2LDMgKzM3NDYsNyBAQCBCVUdXSzkwOTgwIFdJTiA6IGZhc3QvZm9ybXMvdGV4dGFyZWEvdGV4
dGFyZWEtc3RhdGUtcmVzdG9yZS5odG1sID0gUEFTUyBUSU1FT1VUCiAKIC8vIFN0YXJ0ZWQgY3Jh
c2hpbmcgYWZ0ZXIgMTIyMjg2CiBCVUdXSzkxMTMzIFdJTiA6IHN0b3JhZ2UvaW5kZXhlZGRiL2Nv
bnN0YW50cy5odG1sID0gUEFTUyBDUkFTSAorCisvLyBOZWVkIHJlYmFzZWxpbmUKK0JVR1dLOTA5
NTEgOiBmYXN0L3RleHQvc2hhcGluZy9zaGFwaW5nLXNlbGVjdGlvbi1yZWN0Lmh0bWwgPSBNSVNT
SU5HCitCVUdXSzkwOTUxIDogZmFzdC90ZXh0L3NoYXBpbmcvc2hhcGluZy1zY3JpcHQtb3JkZXIu
aHRtbCA9IE1JU1NJTkcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9UZXN0
RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMK
aW5kZXggNDBmOTQyMzQ4MWJkZDY1YWVmYjJkNDY5MTk0YjI2ZGM2MzY4MGFkMi4uMjYxNjI0ZmZl
NjVhZDlmMzJkMTZkMzM1NmJiZmQwOTU4M2FhODI5MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZWZsL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
ZWZsL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTczOCwzICs3MzgsNiBAQCBCVUdXSzg4MTcxIDogY3Nz
MS9mb3JtYXR0aW5nX21vZGVsL2Zsb2F0aW5nX2VsZW1lbnRzLmh0bWwgPSBURVhUCiAKIC8vIExv
b2tzIGxpa2UgbWlzc2luZyBtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIHN1cHBvcnQgaW4gbGli
c291cC4gRmFpbGluZyBvbiBib3RoIEdUSyBhbmQgRUZMLgogQlVHV0s2ODk3OSA6IGh0dHAvdGVz
dHMvbXVsdGlwYXJ0L211bHRpcGFydC1yZXBsYWNlLW5vbi1odG1sLWNvbnRlbnQucGhwID0gVEVY
VAorCisvLyBTa2lwIHRlc3RzIGluIGZhc3QvdGV4dC9zaGFwaW5nCitCVUdXSzkwOTUxIFNLSVAg
OiBmYXN0L3RleHQvc2hhcGluZyA9IFBBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RF
eHBlY3RhdGlvbnMKaW5kZXggZWE1OTdjYjkyOGZkNzYwYzJmMDk4YTE2NjI0MzIzNzVmODFmNjdk
NS4uNWExMTE2YzFkZGNmODQzZDIzNjFmMmEwOGVmMmY2NWMzOGE4NjZlMiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEyNTQsNiArMTI1NCw5IEBAIEJV
R1dLODkyMzEgOiBmYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMuaHRtbCA9IFRFWFQKIAogQlVH
V0s5MTAwOSBERUJVRyA6IGZhc3QveHNsL3hzbHQtbWlzc2luZy1uYW1lc3BhY2UtaW4teHNsdC54
bWwgPSBURVhUCiAKKy8vIFNraXAgdGVzdHMgaW4gZmFzdC90ZXh0L3NoYXBpbmcKK0JVR1dLOTA5
NTEgU0tJUCA6IGZhc3QvdGV4dC9zaGFwaW5nID0gUEFTUworCiAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KIC8vIEVuZCBvZiBUZXN0cyBmYWlsaW5nCiAvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9U
ZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlv
bnMKaW5kZXggOTI0YzA4MmNiMWRjYmRkMzFjYTNiMDczZTczYTZhNjlkNzIyZTEyMy4uYzliYTg3
YTE0YmZhODYzNmRlMDQ3Y2E3NzRlOGIyMTdiYWRlYjNiMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTI5NSwzICsyOTUsNiBAQCBCVUdXSzg0NjM1IFNL
SVAgOiBmYXN0L2RvbS9IVE1MRGlhbG9nRWxlbWVudCA9IFRFWFQKIAogLy8gSU5QVVRfVFlQRV9E
QVRFIGlzIG5vdCBlbmFibGVkIG9uIHRoZSBNYWMKIEJVR1dLOTA5ODcgOiBmYXN0L2Zvcm1zL2lu
cHV0LWluLXRhYmxlLWNlbGwtbm8tdmFsdWUuaHRtbCA9IElNQUdFCisKKy8vIFNraXAgdGVzdHMg
aW4gZmFzdC90ZXh0L3NoYXBpbmcKK0JVR1dLOTA5NTEgU0tJUCA6IGZhc3QvdGV4dC9zaGFwaW5n
ID0gUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggODVh
OTAzZGIwOTRkZjI3NjVkMDRmYWUwMmFiMGE0MjgwNGE4MmY2Yy4uNTk1OGEyN2IxYWNjNzIzNTNm
YzYzZjk4Y2YzYTI3ZDQ2MzcwZDlkMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9UZXN0RXhw
ZWN0YXRpb25zCkBAIC0xMTMsMyArMTEzLDYgQEAgQlVHV0s4NDE4NiBTS0lQIDogZmFzdC90ZXh0
LWF1dG9zaXppbmcgPSBQQVNTCiAKIC8vIERpYWxvZyBlbGVtZW50IGlzIG5vdCB5ZXQgZW5hYmxl
ZC4KIEJVR1dLODQ2MzUgU0tJUCA6IGZhc3QvZG9tL0hUTUxEaWFsb2dFbGVtZW50ID0gVEVYVAor
CisvLyBTa2lwIHRlc3RzIGluIGZhc3QvdGV4dC9zaGFwaW5nCitCVUdXSzkwOTUxIFNLSVAgOiBm
YXN0L3RleHQvc2hhcGluZyA9IFBBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5kZXggYjI4
NTk3NzczMTExMTE3Mzc0MDFmNzE1NzY2ZDQxYWRmNDMyNmZkMC4uYjhlZTJjNmU2YzE2N2UwYTNk
NzVjZmZhNzRlMzIxN2NlNTk0Yzk3NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTE5
NDQsMyArMTk0NCw2IEBAIHN2Zy9XM0MtU1ZHLTEuMS1TRS90ZXh0LWludHJvLTA1LXQuc3ZnCiAj
IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IDEuMSAoRU5BQkxFX0NTUF9ORVhUKSBpcyBub3QgZW5h
YmxlZAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODU1NTgKIGh0
dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5LzEuMQorCisjIFNraXAgdGVz
dHMgaW4gZmFzdC90ZXh0L3NoYXBpbmcKK2Zhc3QvdGV4dC9zaGFwaW5nCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luY2Fpcm8vU2tpcHBlZAppbmRleCAwZmNlNDc3MDM5MjEzODMxODdlN2U0YzNlZmY5MTAx
ZGVmMmNkY2JjLi4yY2Y2YWMzMDFkN2IyYTg2M2JmOTQxMzZkNjA0NDdmYWZkN2Q2YjkzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKQEAgLTIxMjYsMyArMjEyNiw2IEBAIGh0
dHAvdGVzdHMvc2VjdXJpdHkvcmVmZXJyZXItcG9saWN5LXJlZGlyZWN0LWxpbmsuaHRtbAogIyBD
b250ZW50IFNlY3VyaXR5IFBvbGljeSAxLjEgKEVOQUJMRV9DU1BfTkVYVCkgaXMgbm90IGVuYWJs
ZWQKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTU4CiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS8xLjEKKworIyBTa2lwIHRlc3Rz
IGluIGZhc3QvdGV4dC9zaGFwaW5nCitmYXN0L3RleHQvc2hhcGluZwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIv
U2tpcHBlZAppbmRleCAwZjIwMzJmYjk4MTU2OTM2MGVmN2VkZjQ1MjRkOWZlMjhkYWI1NDBlLi41
MmRkZTRjYzc5M2FjMmYyODZlNzhmNWQxMjRlOTAxMDcwMGI3ZmFhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93
azIvU2tpcHBlZApAQCAtMTQxOSw2ICsxNDE5LDkgQEAgZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBh
cnNlci1xdWlya3MuaHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTAxNzcKIGZhc3QvZXZlbnRzL2RyYWctZGlzcGxheS1ub25lLWVsZW1lbnQuaHRtbAogCisj
IFNraXAgdGVzdHMgaW4gZmFzdC90ZXh0L3NoYXBpbmcKK2Zhc3QvdGV4dC9zaGFwaW5nCisKICMj
IyBFTkQgT0YgKDQpIEZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gV2ViS2l0MiBh
bmQgbGlrZWx5IG5ldmVyIHdpbGwgYmUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>