<?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>23943</bug_id>
          
          <creation_ts>2009-02-12 22:25:45 -0800</creation_ts>
          <short_desc>Implement WebKitPoint and APIs to map points through transforms</short_desc>
          <delta_ts>2009-03-02 11:51:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23359</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dino</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>109621</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-12 22:25:45 -0800</bug_when>
    <thetext>We need to add a &apos;point&apos; object (WebKitPoint) and a way to map points through possibly-transformed elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110864</commentid>
    <comment_count>1</comment_count>
      <attachid>27944</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-02-24 17:26:55 -0800</bug_when>
    <thetext>Created attachment 27944
Patch with test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110867</commentid>
    <comment_count>2</comment_count>
      <attachid>27944</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-24 17:41:24 -0800</bug_when>
    <thetext>Comment on attachment 27944
Patch with test

&gt; Index: WebCore/WebCore.vcproj/WebCore.vcproj
&gt; ===================================================================

&gt;  			&lt;File
&gt; +				RelativePath=&quot;..\page\WebKitPoint.cpp&quot;
&gt; +				&gt;
&gt; +				&lt;FileConfiguration

Don&apos;t include the FileConfiguration hunks

&gt; Index: WebCore/WebCore.xcodeproj/project.pbxproj
&gt; ===================================================================

&gt; +		494BD51E0F53721D00747828 /* WebKitPoint.idl in Resources */ = {isa = PBXBuildFile; fileRef = 494BD51C0F53721C00747828 /* WebKitPoint.idl */; };

Please remove the idl from Resources.

&gt; Index: WebCore/bindings/js/JSWebKitPointConstructor.cpp
&gt; ===================================================================
&gt; --- WebCore/bindings/js/JSWebKitPointConstructor.cpp	(revision 0)
&gt; +++ WebCore/bindings/js/JSWebKitPointConstructor.cpp	(revision 0)
&gt; @@ -0,0 +1,61 @@
&gt; +/*
&gt; + * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
&gt; + *
&gt; + * This library is free software; you can redistribute it and/or
&gt; + * modify it under the terms of the GNU Library General Public
&gt; + * License as published by the Free Software Foundation; either
&gt; + * version 2 of the License, or (at your option) any later version.
&gt; + *
&gt; + * This library is distributed in the hope that it will be useful,
&gt; + * but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; + * Library General Public License for more details.
&gt; + *
&gt; + * You should have received a copy of the GNU Library General Public License
&gt; + * along with this library; see the file COPYING.LIB.  If not, write to
&gt; + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
&gt; + * Boston, MA 02110-1301, USA.
&gt; + */

Apple license, not LGPL please.

&gt; Index: WebCore/bindings/js/JSWebKitPointConstructor.h
&gt; ===================================================================
&gt; --- WebCore/bindings/js/JSWebKitPointConstructor.h	(revision 0)
&gt; +++ WebCore/bindings/js/JSWebKitPointConstructor.h	(revision 0)
&gt; @@ -0,0 +1,46 @@
&gt; +/*
&gt; + * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.

2009

&gt; Index: WebCore/page/DOMWindow.cpp
&gt; ===================================================================

&gt; +PassRefPtr&lt;WebKitPoint&gt; DOMWindow::webkitConvertPointFromNodeToPage(Node* node, const WebKitPoint* p) const
&gt; +{
&gt; +    if (!node || !p)
&gt; +        return 0;
&gt; +        
&gt; +    FloatPoint pp(p-&gt;x(), p-&gt;y());
&gt; +    pp = node-&gt;convertToPage(pp);
&gt; +    return WebKitPoint::create(pp.x(), pp.y());
&gt; +}

Use pagePoint, or absolutePoint, not pp, for readability.


&gt; +    FloatPoint pp(p-&gt;x(), p-&gt;y());
&gt; +    pp = node-&gt;convertFromPage(pp);
&gt; +    return WebKitPoint::create(pp.x(), pp.y());

localPoint, rather than pp.

&gt; Index: WebCore/page/WebKitPoint.h
&gt; ===================================================================
&gt; --- WebCore/page/WebKitPoint.h	(revision 0)
&gt; +++ WebCore/page/WebKitPoint.h	(revision 0)
&gt; @@ -0,0 +1,66 @@
&gt; +/*
&gt; + * Copyright (C) 2007 Apple Inc.  All rights reserved.

2009

&gt; +    private:
&gt; +        WebKitPoint(float x=0, float y=0)

&gt; +        : m_x(x)
&gt; +        , m_y(y)

Indent these two lines


&gt; Index: WebCore/page/WebKitPoint.idl
&gt; ===================================================================

&gt; + * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.

2009

&gt; +module window {
&gt; +
&gt; +    interface WebKitPoint {
&gt; +        attribute float x;
&gt; +        attribute float y;
&gt; +    };

r=me with those fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110987</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-02-25 11:06:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/6614343&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110988</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-02-25 11:10:24 -0800</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Adding         LayoutTests/fast/dom/Window/webkitConvertPoint-expected.txt
Adding         LayoutTests/fast/dom/Window/webkitConvertPoint.html
Sending        LayoutTests/fast/dom/Window/window-properties-expected.txt
Sending        LayoutTests/fast/js/global-constructors-expected.txt
Sending        WebCore/ChangeLog
Sending        WebCore/DerivedSources.make
Sending        WebCore/WebCore.pro
Sending        WebCore/WebCore.vcproj/WebCore.vcproj
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/WebCoreSources.bkl
Sending        WebCore/bindings/js/JSDOMWindowBase.cpp
Adding         WebCore/bindings/js/JSWebKitPointConstructor.cpp
Adding         WebCore/bindings/js/JSWebKitPointConstructor.h
Sending        WebCore/dom/Node.cpp
Sending        WebCore/dom/Node.h
Sending        WebCore/page/DOMWindow.cpp
Sending        WebCore/page/DOMWindow.h
Sending        WebCore/page/DOMWindow.idl
Adding         WebCore/page/WebKitPoint.h
Adding         WebCore/page/WebKitPoint.idl
Transmitting file data .....................
Committed revision 41218.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110998</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-02-25 11:56:39 -0800</bug_when>
    <thetext>Windows build is broken

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111030</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-02-25 14:00:04 -0800</bug_when>
    <thetext>Windows build fIxed by http://build.webkit.org/changes/1678</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27944</attachid>
            <date>2009-02-24 17:26:55 -0800</date>
            <delta_ts>2009-02-24 17:41:24 -0800</delta_ts>
            <desc>Patch with test</desc>
            <filename>23943.patch</filename>
            <type>text/plain</type>
            <size>42928</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTIwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDktMDItMjQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzk0MworCisgICAgICAgIEFk
ZGVkIHdlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlIGFuZCB3ZWJraXRDb252ZXJ0UG9p
bnRGcm9tUGFnZVRvTm9kZSBvbgorICAgICAgICB0aGUgd2luZG93IG9iamVjdC4gQWxzbyBhZGRl
ZCBXZWJLaXRQb2ludCBvYmplY3QsIHdoaWNoIGlzIHBhc3NlZCBpbiBhbmQgb3V0CisgICAgICAg
IG9mIHRoZXNlIGZ1bmN0aW9ucy4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9XaW5kb3cvd2Vi
a2l0Q29udmVydFBvaW50Lmh0bWwKKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwOgorICAgICAgICAoanNET01XaW5kb3dCYXNlV2ViS2l0UG9pbnQpOgorICAg
ICAgICAoc2V0SlNET01XaW5kb3dCYXNlV2ViS2l0UG9pbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvcjo6SlNXZWJL
aXRQb2ludENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFdlYktpdFBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvcjo6Z2V0Q29u
c3RydWN0RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJLaXRQb2ludENvbnN0cnVj
dG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRQb2ludENvbnN0cnVjdG9y
OjpjbGFzc0luZm8pOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmNvbnZlcnRUb1BhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y29udmVydEZy
b21QYWdlKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6d2Via2l0Q29udmVydFBvaW50RnJv
bU5vZGVUb1BhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojp3ZWJraXRDb252ZXJ0
UG9pbnRGcm9tUGFnZVRvTm9kZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaDoKKyAgICAg
ICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogcGFnZS9XZWJLaXRQb2ludC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYktpdFBvaW50OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0UG9pbnQ6OngpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0UG9pbnQ6
OnkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0UG9pbnQ6OnNldFgpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViS2l0UG9pbnQ6OnNldFkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0UG9pbnQ6
OldlYktpdFBvaW50KToKKyAgICAgICAgKiBwYWdlL1dlYktpdFBvaW50LmlkbDogQWRkZWQuCisK
IDIwMDktMDItMjMgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiA0MDk4
MikKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzU4
LDYgKzM1OCw3IEBAIERPTV9DTEFTU0VTID0gXAogICAgIFdlYktpdENTU0tleWZyYW1lc1J1bGUg
XAogICAgIFdlYktpdENTU01hdHJpeCBcCiAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUgXAor
ICAgIFdlYktpdFBvaW50IFwKICAgICBXZWJLaXRUcmFuc2l0aW9uRXZlbnQgXAogICAgIFdoZWVs
RXZlbnQgXAogICAgIFdvcmtlciBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQwOTgyKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMzg5LDYgKzM4OSw3IEBAIElETF9CSU5ESU5H
UyArPSBcCiAgICAgcGFnZS9OYXZpZ2F0b3IuaWRsIFwKICAgICBwYWdlL1Bvc2l0aW9uRXJyb3Iu
aWRsIFwKICAgICBwYWdlL1NjcmVlbi5pZGwgXAorICAgIHBhZ2UvV2ViS2l0UG9pbnQuaWRsIFwK
ICAgICBwYWdlL1dvcmtlck5hdmlnYXRvci5pZGwgXAogICAgIHBsdWdpbnMvUGx1Z2luLmlkbCBc
CiAgICAgcGx1Z2lucy9NaW1lVHlwZS5pZGwgXApAQCAtNDY1LDYgKzQ2Niw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGJpbmRpbmdzL2pzL0pTVGV4dEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pz
L0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTV2ViS2l0Q1NTTWF0
cml4Q29uc3RydWN0b3IuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU1dlYktpdFBvaW50Q29uc3Ry
dWN0b3IuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3Iu
Y3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcCBcCiAgICAg
YmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAgXApAQCAtODU3LDYg
Kzg1OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwIFwKICAg
ICBwYWdlL1NjcmVlbi5jcHAgXAogICAgIHBhZ2UvU2V0dGluZ3MuY3BwIFwKKyAgICBwYWdlL1dl
YktpdFBvaW50LmNwcCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgXAogICAgIHBsdWdp
bnMvUGx1Z2luRGF0YS5jcHAgXAogICAgIHBsdWdpbnMvUGx1Z2luQXJyYXkuY3BwIFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsCShyZXZpc2lvbiA0MDk4MikKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMu
YmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSBsaXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5j
cHAKICAgICAgICAgYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAogICAgICAgICBiaW5k
aW5ncy9qcy9KU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcAorICAgICAgICBiaW5kaW5n
cy9qcy9KU1dlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCiAgICAgPC9zZXQ+CiAKICAgICA8c2V0
IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNfQlJJREdFIj4KQEAgLTcxMyw2ICs3MTQs
NyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAgICAgIHBh
Z2UvU2NyZWVuLmNwcAogICAgICAgICBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAogICAgICAgICBw
YWdlL1NldHRpbmdzLmNwcAorICAgICAgICBwYWdlL1dlYktpdFBvaW50LmNwcAogICAgICAgICBw
YWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAogICAgIDwvc2V0PgogCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQwOTgyKQorKysgV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcyOCw2ICsxNzI4LDEw
IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2Vi
S2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNXZWJLaXRQ
b2ludC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIk
KFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNTYwLDYgKzI1
NjQsMjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGFnZVxXZWJLaXRQb2ludC5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgor
CQkJCQlOYW1lPSJSZWxlYXNlX1BHT3xXaW4zMiIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0i
dHJ1ZSIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcV2ViS2l0UG9pbnQuaCIKKwkJCQk+CisJ
CQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxXaW5kb3dGZWF0
dXJlcy5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpAQCAtMTQzMTMsNiArMTQz
MzMsMTQgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5jcHAiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xq
c1xKU1dlYktpdFBvaW50Q29uc3RydWN0b3IuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTV29ya2VyQ29uc3RydWN0
b3IuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQwOTgyKQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY0Niw2ICs2NDYs
MTIgQEAKIAkJNDZGOUQ1REQwQjBENjAxNzAwMjhFRTM2IC8qIGFsaWFzQ3Vyc29yLnBuZyBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZGOUQ1REEwQjBE
NjAxNzAwMjhFRTM2IC8qIGFsaWFzQ3Vyc29yLnBuZyAqLzsgfTsKIAkJNDZGOUQ1REUwQjBENjAx
NzAwMjhFRTM2IC8qIG5vRHJvcEN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2RjlENURCMEIwRDYwMTcwMDI4RUUzNiAvKiBub0Ryb3BD
dXJzb3IucG5nICovOyB9OwogCQk0NkY5RDVERjBCMEQ2MDE3MDAyOEVFMzYgLyogcHJvZ3Jlc3ND
dXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NkY5RDVEQzBCMEQ2MDE3MDAyOEVFMzYgLyogcHJvZ3Jlc3NDdXJzb3IucG5nICovOyB9Owor
CQk0OTRCRDUxOTBGNTM3MUZFMDA3NDc4MjggLyogSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEJENTE3
MEY1MzcxRkQwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwICovOyB9Owor
CQk0OTRCRDUxQTBGNTM3MUZFMDA3NDc4MjggLyogSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCRDUxODBG
NTM3MUZFMDA3NDc4MjggLyogSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yLmggKi87IH07CisJCTQ5
NEJENTFEMEY1MzcyMUMwMDc0NzgyOCAvKiBXZWJLaXRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0QkQ1MUIwRjUzNzIxQzAwNzQ3ODI4IC8q
IFdlYktpdFBvaW50LmggKi87IH07CisJCTQ5NEJENTFFMEY1MzcyMUQwMDc0NzgyOCAvKiBXZWJL
aXRQb2ludC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5NEJENTFDMEY1MzcyMUMwMDc0NzgyOCAvKiBXZWJLaXRQb2ludC5pZGwgKi87IH07CisJ
CTQ5NEJENTU1MEY1MzgwM0YwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEJENTUzMEY1MzgwM0YwMDc0
NzgyOCAvKiBKU1dlYktpdFBvaW50LmNwcCAqLzsgfTsKKwkJNDk0QkQ1NTYwRjUzODAzRjAwNzQ3
ODI4IC8qIEpTV2ViS2l0UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5NEJENTU0MEY1MzgwM0YwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50Lmgg
Ki87IH07CiAJCTQ5ODM5MTNGMEYxRTc2NzUwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJpeC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTEz
RDBGMUU3Njc1MDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXguY3BwICovOyB9OwogCQk0OTgz
OTE0MDBGMUU3Njc1MDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTNFMEYxRTc2NzUwMEMyMzc4
MiAvKiBKU1dlYktpdENTU01hdHJpeC5oICovOyB9OwogCQk0OTgzOTE1MDBGMUU3NkI0MDBDMjM3
ODIgLyogRE9NV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE0RDBGMUU3NkI0MDBDMjM3ODIgLyogRE9NV2ViS2l0Q1NT
TWF0cml4LmggKi87IH07CkBAIC01NTc0LDYgKzU1ODAsMTIgQEAKIAkJNDZGOUQ1REEwQjBENjAx
NzAwMjhFRTM2IC8qIGFsaWFzQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGFsaWFzQ3Vyc29yLnBuZzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOUQ1REIwQjBENjAxNzAwMjhFRTM2IC8q
IG5vRHJvcEN1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSBub0Ryb3BDdXJzb3IucG5nOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0NkY5RDVEQzBCMEQ2MDE3MDAyOEVFMzYgLyogcHJvZ3Jlc3ND
dXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gaW1hZ2UucG5nOyBwYXRoID0gcHJvZ3Jlc3NDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OTRCRDUxNzBGNTM3MUZEMDA3NDc4MjggLyogSlNXZWJLaXRQb2ludENv
bnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2Vi
S2l0UG9pbnRDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5
NEJENTE4MEY1MzcxRkUwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50Q29uc3RydWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEJENTFCMEY1MzcyMUMwMDc0NzgyOCAv
KiBXZWJLaXRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRQ
b2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCRDUxQzBGNTM3MjFDMDA3
NDc4MjggLyogV2ViS2l0UG9pbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdFBv
aW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0QkQ1NTMwRjUzODAzRjAw
NzQ3ODI4IC8qIEpTV2ViS2l0UG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJLaXRQb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5NEJENTU0MEY1MzgwM0YwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDk4MzkxM0QwRjFFNzY3NTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0Q1NTTWF0
cml4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk4MzkxM0UwRjFFNzY3NTAw
QzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTV2ViS2l0Q1NTTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5ODM5MTREMEYxRTc2QjQwMEMyMzc4MiAvKiBET01XZWJLaXRDU1NNYXRyaXguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2ViS2l0Q1NTTWF0cml4Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDI0MSw2ICsxMDI1Myw4IEBACiAJCQkJQkNEMEUwRjkw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oICovLAogCQkJCTE0QzlBNUU5
MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi8sCiAJCQkJRjU4Nzg2M0EwMkRFM0Ex
NDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi8sCisJCQkJNDk0QkQ1MUIwRjUzNzIxQzAwNzQ3ODI4
IC8qIFdlYktpdFBvaW50LmggKi8sCisJCQkJNDk0QkQ1MUMwRjUzNzIxQzAwNzQ3ODI4IC8qIFdl
YktpdFBvaW50LmlkbCAqLywKIAkJCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93
RmVhdHVyZXMuY3BwICovLAogCQkJCUJDODI0M0U3MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dG
ZWF0dXJlcy5oICovLAogCQkJCUUxMjcxQTEzMEVFRUM4MDQwMEY2MTIxMyAvKiBXb3JrZXJOYXZp
Z2F0b3IuY3BwICovLApAQCAtMTMzMjEsNiArMTMzMzUsOCBAQAogCQkJCUIyMTEyN0E1MEIzMTg2
NzcwMDA5QkU1MyAvKiBKU1NWR1BPRFR5cGVXcmFwcGVyLmggKi8sCiAJCQkJNDk4MzkxNjEwRjFF
OEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwICovLAogCQkJ
CTQ5ODM5MTYyMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9y
LmggKi8sCisJCQkJNDk0QkQ1MTcwRjUzNzFGRDAwNzQ3ODI4IC8qIEpTV2ViS2l0UG9pbnRDb25z
dHJ1Y3Rvci5jcHAgKi8sCisJCQkJNDk0QkQ1MTgwRjUzNzFGRTAwNzQ3ODI4IC8qIEpTV2ViS2l0
UG9pbnRDb25zdHJ1Y3Rvci5oICovLAogCQkJCUUxQ0E1Q0Q1MEU4Q0RFRTkwMEU4RUY5MCAvKiBK
U1dvcmtlckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlFMUNBNUNEMjBFOENERTgwMDBFOEVGOTAg
LyogSlNXb3JrZXJDb25zdHJ1Y3Rvci5oICovLAogCQkJCUUxQzM2RDMyMEVCMEEwOTQwMDc0MTBC
QyAvKiBKU1dvcmtlckNvbnRleHRCYXNlLmNwcCAqLywKQEAgLTEzNTcyLDYgKzEzNTg4LDggQEAK
IAkJCQlBOUQyNDdGNjBENzU3RTMzMDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuaCAqLywKIAkJCQlC
Q0VDMDFDMDBDMjc0REREMDA5RjRFQzkgLyogSlNTY3JlZW4uY3BwICovLAogCQkJCUJDRUMwMUMx
MEMyNzREREQwMDlGNEVDOSAvKiBKU1NjcmVlbi5oICovLAorCQkJCTQ5NEJENTUzMEY1MzgwM0Yw
MDc0NzgyOCAvKiBKU1dlYktpdFBvaW50LmNwcCAqLywKKwkJCQk0OTRCRDU1NDBGNTM4MDNGMDA3
NDc4MjggLyogSlNXZWJLaXRQb2ludC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBXaW5kb3c7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTY3NzMsNiArMTY3OTEsOSBAQAogCQkJCTFB
NTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMTdDODEyMzBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTRCRDUxQTBGNTM3MUZFMDA3NDc4MjggLyogSlNXZWJL
aXRQb2ludENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTRCRDUxRDBGNTM3MjFD
MDA3NDc4MjggLyogV2ViS2l0UG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5NEJENTU2MEY1
MzgwM0YwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE2ODkw
LDYgKzE2OTExLDcgQEAKIAkJCQk4NTEzNkNBODBBRUQ2NjU5MDBGOTBBM0QgLyogd2VzdFJlc2l6
ZUN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFBQjFBRTdBMEMwNTFGREUwMDEzOUY0
RiAvKiB6b29tSW5DdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QjBDMDUx
RkRFMDAxMzlGNEYgLyogem9vbU91dEN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5
NEJENTFFMEY1MzcyMUQwMDc0NzgyOCAvKiBXZWJLaXRQb2ludC5pZGwgaW4gUmVzb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtMTg3NjEsNiArMTg3ODMsOCBAQAogCQkJCTFBNTY5RDI0MEQ3RTJCODIwMDdDMzk4MyAv
KiBydW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUQwOTlFNjQ5MjAw
NTZFNTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3QzgxMjIw
RjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0OTRCRDUxOTBGNTM3MUZFMDA3NDc4MjggLyogSlNXZWJLaXRQb2ludENvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5NEJENTU1MEY1MzgwM0YwMDc0NzgyOCAvKiBKU1dl
YktpdFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gNDA5ODIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNp
bmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiSlNPcHRpb25Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTV2ViS2l0
UG9pbnRDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTV29ya2VyQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU1hTTFRQ
cm9jZXNzb3JDb25zdHJ1Y3Rvci5oIgpAQCAtOTEsNiArOTIsOCBAQCBzdGF0aWMgSlNWYWx1ZVB0
ciBqc0RPTVdpbmRvd0Jhc2VPcHRpb24oCiBzdGF0aWMgdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VP
cHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsKIHN0YXRpYyBKU1ZhbHVl
UHRyIGpzRE9NV2luZG93QmFzZVdlYktpdENTU01hdHJpeChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiBzdGF0aWMgdm9pZCBzZXRKU0RPTVdpbmRv
d0Jhc2VXZWJLaXRDU1NNYXRyaXgoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyKTsK
K3N0YXRpYyBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVdlYktpdFBvaW50KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3N0YXRpYyB2b2lkIHNl
dEpTRE9NV2luZG93QmFzZVdlYktpdFBvaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZVB0cik7CiBzdGF0aWMgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiBzdGF0
aWMgdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWVQdHIpOwogc3RhdGljIEpTVmFsdWVQdHIganNET01XaW5kb3dCYXNlWFNM
VFByb2Nlc3NvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7CkBAIC0xMjEsNiArMTI0LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpTRE9NV2luZG93QmFz
ZTo6c19pbmZvIAogICBNZXNzYWdlQ2hhbm5lbCAgICAgICAgICAgICAgICBqc0RPTVdpbmRvd0Jh
c2VNZXNzYWdlQ2hhbm5lbCAgICAgICAgICAgICAgIERvbnREZWxldGUKICAgT3B0aW9uICAgICAg
ICAgICAgICAgICAgICAgICAganNET01XaW5kb3dCYXNlT3B0aW9uICAgICAgICAgICAgICAgICAg
ICAgICBEb250RGVsZXRlCiAgIFdlYktpdENTU01hdHJpeCAgICAgICAgICAgICAgIGpzRE9NV2lu
ZG93QmFzZVdlYktpdENTU01hdHJpeCAgICAgICAgICAgICAgRG9udERlbGV0ZQorICBXZWJLaXRQ
b2ludCAgICAgICAgICAgICAgICAgICBqc0RPTVdpbmRvd0Jhc2VXZWJLaXRQb2ludCAgICAgICAg
ICAgICAgICAgIERvbnREZWxldGUKICAgV29ya2VyICAgICAgICAgICAgICAgICAgICAgICAganNE
T01XaW5kb3dCYXNlV29ya2VyICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCiAgIFhN
TEh0dHBSZXF1ZXN0ICAgICAgICAgICAgICAgIGpzRE9NV2luZG93QmFzZVhNTEh0dHBSZXF1ZXN0
ICAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBYU0xUUHJvY2Vzc29yICAgICAgICAgICAgICAg
ICBqc0RPTVdpbmRvd0Jhc2VYU0xUUHJvY2Vzc29yICAgICAgICAgICAgICAgIERvbnREZWxldGUK
QEAgLTQzNCw2ICs0MzgsMTMgQEAgSlNWYWx1ZVB0ciBqc0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVj
U3RhdAogI2VuZGlmCiB9CiAKK0pTVmFsdWVQdHIganNET01XaW5kb3dCYXNlV2ViS2l0UG9pbnQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4oYXNPYmplY3Qo
c2xvdC5zbG90QmFzZSgpKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1dlYktpdFBv
aW50Q29uc3RydWN0b3I+KGV4ZWMpOworfQorCiBKU1ZhbHVlUHRyIGpzRE9NV2luZG93QmFzZVdv
cmtlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAjaWYgRU5BQkxFKFdPUktFUlMpCkBAIC01MTYsNiArNTI3LDE0IEBAIHZv
aWQgc2V0SlNET01XaW5kb3dCYXNlV2ViS2l0Q1NTTWF0cml4KEUKICAgICBzdGF0aWNfY2FzdDxK
U0RPTVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywg
IldlYktpdENTU01hdHJpeCIpLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgc2V0SlNET01XaW5kb3dCYXNl
V2ViS2l0UG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1
ZVB0ciB2YWx1ZSkKK3sKKyAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHRo
aXNPYmplY3QpLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQorICAgICAgICByZXR1cm47CisgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICBzdGF0aWNfY2FzdDxKU0RP
TVdpbmRvd0Jhc2UqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIldl
YktpdFBvaW50IiksIHZhbHVlKTsKK30KKwogdm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VYTUxIdHRw
UmVxdWVzdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRy
IHZhbHVlKQogewogICAgIGlmICghc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhpc09i
amVjdCktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJXZWJLaXRQb2ludC5oIgorI2luY2x1ZGUgIkpTV2ViS2l0UG9pbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitjb25zdCBDbGFzc0lu
Zm8gSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJXZWJLaXRQb2ludENvbnN0
cnVjdG9yIiwgMCwgMCwgMCB9OworCitKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OkpTV2ViS2l0
UG9pbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgOiBET01PYmplY3QoSlNXZWJL
aXRQb2ludENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seXxEb250RGVsZXRl
fERvbnRFbnVtKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJLaXRQb2ludChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBm
bG9hdCB4ID0gMDsKKyAgICBmbG9hdCB5ID0gMDsKKyAgICBpZiAoYXJncy5zaXplKCkgPj0gMikg
eworICAgICAgICB4ID0gKGZsb2F0KWFyZ3MuYXQoZXhlYywgMCkudG9OdW1iZXIoZXhlYyk7Cisg
ICAgICAgIHkgPSAoZmxvYXQpYXJncy5hdChleGVjLCAxKS50b051bWJlcihleGVjKTsKKyAgICAg
ICAgaWYgKGlzbmFuKHgpKQorICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIGlmIChpc25hbih5
KSkKKyAgICAgICAgICAgIHkgPSAwOworICAgIH0KKyAgICByZXR1cm4gYXNPYmplY3QodG9KUyhl
eGVjLCBXZWJLaXRQb2ludDo6Y3JlYXRlKHgsIHkpKSk7Cit9CisKK0pTQzo6Q29uc3RydWN0VHlw
ZSBKU1dlYktpdFBvaW50Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY29uc3RydWN0V2ViS2l0UG9pbnQ7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0
OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYktpdFBvaW50Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1dlYktpdFBvaW50Q29u
c3RydWN0b3JfaAorI2RlZmluZSBKU1dlYktpdFBvaW50Q29uc3RydWN0b3JfaAorCisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01P
YmplY3QgeworcHVibGljOgorICAgIEpTV2ViS2l0UG9pbnRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSopOworICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6
OkNvbnN0cnVjdERhdGEmKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBK
U1dlYktpdFBvaW50Q29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDQwOTgyKQorKysgV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMDQsNiArMjAwNCwzNiBAQCB1
bnNpZ25lZCBzaG9ydCBOb2RlOjpjb21wYXJlRG9jdW1lbnRQb3NpCiAgICAgICAgICAgICAgICBE
T0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcgfCBET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUzsK
IH0KIAorRmxvYXRQb2ludCBOb2RlOjpjb252ZXJ0VG9QYWdlKGNvbnN0IEZsb2F0UG9pbnQmIHAp
IGNvbnN0Cit7CisgICAgLy8gSWYgdGhlcmUgaXMgYSByZW5kZXJlciwganVzdCBhc2sgaXQgdG8g
ZG8gdGhlIGNvbnZlcnNpb24KKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJl
bmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZShwLCBmYWxzZSwgdHJ1ZSk7CisgICAgCisgICAgLy8g
T3RoZXJ3aXNlIGdvIHVwIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgcmVuZGVyZXIKKyAgICBFbGVt
ZW50ICpwYXJlbnQgPSBhbmNlc3RvckVsZW1lbnQoKTsKKyAgICBpZiAocGFyZW50KQorICAgICAg
ICByZXR1cm4gcGFyZW50LT5jb252ZXJ0VG9QYWdlKHApOworCisgICAgLy8gTm8gcGFyZW50IC0g
bm8gY29udmVyc2lvbiBuZWVkZWQKKyAgICByZXR1cm4gcDsKK30KKworRmxvYXRQb2ludCBOb2Rl
Ojpjb252ZXJ0RnJvbVBhZ2UoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICAvLyBJ
ZiB0aGVyZSBpcyBhIHJlbmRlcmVyLCBqdXN0IGFzayBpdCB0byBkbyB0aGUgY29udmVyc2lvbgor
ICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIoKS0+YWJzb2x1dGVU
b0xvY2FsKHAsIGZhbHNlLCB0cnVlKTsKKworICAgIC8vIE90aGVyd2lzZSBnbyB1cCB0aGUgdHJl
ZSBsb29raW5nIGZvciBhIHJlbmRlcmVyCisgICAgRWxlbWVudCAqcGFyZW50ID0gYW5jZXN0b3JF
bGVtZW50KCk7CisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgcmV0dXJuIHBhcmVudC0+Y29udmVy
dEZyb21QYWdlKHApOworCisgICAgLy8gTm8gcGFyZW50IC0gbm8gY29udmVyc2lvbiBuZWVkZWQK
KyAgICByZXR1cm4gcDsKK30KKwogI2lmbmRlZiBOREVCVUcKIAogc3RhdGljIHZvaWQgYXBwZW5k
QXR0cmlidXRlRGVzYyhjb25zdCBOb2RlKiBub2RlLCBTdHJpbmcmIHN0cmluZywgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgY2hhciogYXR0ckRlc2MpCkluZGV4OiBXZWJDb3JlL2Rv
bS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA0MDk4
MikKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIktVUkxIYXNoLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJUcmVlU2hhcmVkLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgpAQCAtNDAzLDYgKzQwNCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gV2hl
dGhlciBvciBub3QgYSBzZWxlY3Rpb24gY2FuIGJlIHN0YXJ0ZWQgaW4gdGhpcyBvYmplY3QKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdDsKIAorICAgIC8vIEdldHRp
bmcgcG9pbnRzIGludG8gYW5kIG91dCBvZiBzY3JlZW4gc3BhY2UKKyAgICBGbG9hdFBvaW50IGNv
bnZlcnRUb1BhZ2UoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBj
b252ZXJ0RnJvbVBhZ2UoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3Q7CisKICAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEludGVncmF0aW9uIHdpdGggcmVuZGVyaW5nIHRyZWUK
IApJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDQwOTgyKQorKysgV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJT
Y3JlZW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCisjaW5jbHVkZSAiV2Via2l0UG9pbnQuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApAQCAtNzg2LDYgKzc4NywyNiBAQCBQYXNzUmVmUHRy
PENTU1J1bGVMaXN0PiBET01XaW5kb3c6OmdldE1hCiAgICAgcmV0dXJuIGRvYy0+c3R5bGVTZWxl
Y3RvcigpLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbHQsIGF1dGhvck9ubHkpOwogfQogCitQYXNz
UmVmUHRyPFdlYktpdFBvaW50PiBET01XaW5kb3c6OndlYmtpdENvbnZlcnRQb2ludEZyb21Ob2Rl
VG9QYWdlKE5vZGUqIG5vZGUsIGNvbnN0IFdlYktpdFBvaW50KiBwKSBjb25zdAoreworICAgIGlm
ICghbm9kZSB8fCAhcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIEZsb2F0UG9p
bnQgcHAocC0+eCgpLCBwLT55KCkpOworICAgIHBwID0gbm9kZS0+Y29udmVydFRvUGFnZShwcCk7
CisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVhdGUocHAueCgpLCBwcC55KCkpOworfQorCitQ
YXNzUmVmUHRyPFdlYktpdFBvaW50PiBET01XaW5kb3c6OndlYmtpdENvbnZlcnRQb2ludEZyb21Q
YWdlVG9Ob2RlKE5vZGUqIG5vZGUsIGNvbnN0IFdlYktpdFBvaW50KiBwKSBjb25zdAoreworICAg
IGlmICghbm9kZSB8fCAhcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIEZsb2F0
UG9pbnQgcHAocC0+eCgpLCBwLT55KCkpOworICAgIHBwID0gbm9kZS0+Y29udmVydEZyb21QYWdl
KHBwKTsKKyAgICByZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShwcC54KCksIHBwLnkoKSk7Cit9
CisKIGRvdWJsZSBET01XaW5kb3c6OmRldmljZVBpeGVsUmF0aW8oKSBjb25zdAogewogICAgIGlm
ICghbV9mcmFtZSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgJKHJldmlzaW9uIDQwOTgyKQorKysgV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBOYXZpZ2F0b3I7CiAgICAgY2xhc3MgUG9zdE1lc3NhZ2VU
aW1lcjsKICAgICBjbGFzcyBTY3JlZW47CisgICAgY2xhc3MgV2ViS2l0UG9pbnQ7CisgICAgY2xh
c3MgTm9kZTsKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICBjbGFzcyBTZXNzaW9uU3Rv
cmFnZTsKQEAgLTE2MCw2ICsxNjIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGdldE1hdGNoZWRDU1NSdWxlcyhFbGVtZW50KiwgY29uc3Qg
U3RyaW5nJiBwc2V1ZG9FbHQsIGJvb2wgYXV0aG9yT25seSA9IHRydWUpIGNvbnN0OwogICAgICAg
ICBkb3VibGUgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0OwogCisgICAgICAgIFBhc3NSZWZQdHI8
V2ViS2l0UG9pbnQ+IHdlYmtpdENvbnZlcnRQb2ludEZyb21QYWdlVG9Ob2RlKE5vZGUqIG5vZGUs
IGNvbnN0IFdlYktpdFBvaW50KiBwKSBjb25zdDsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJLaXRQ
b2ludD4gd2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2UoTm9kZSogbm9kZSwgY29uc3Qg
V2ViS2l0UG9pbnQqIHApIGNvbnN0OyAgICAgICAgCisKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAg
ICAgICAgIC8vIEhUTUwgNSBjbGllbnQtc2lkZSBkYXRhYmFzZQogICAgICAgICBQYXNzUmVmUHRy
PERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDQw
OTgyKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEz
Niw2ICsxMzYsOSBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIERPTVN0cmluZyBwc2V1ZG9FbGVtZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIGF1dGhvck9ubHkp
OwogICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBkb3VibGUgZGV2aWNlUGl4ZWxSYXRp
bzsKKyAgICAgICAgCisgICAgICAgIFdlYktpdFBvaW50IHdlYmtpdENvbnZlcnRQb2ludEZyb21Q
YWdlVG9Ob2RlKGluIE5vZGUgbm9kZSwgaW4gV2ViS2l0UG9pbnQgcCk7CisgICAgICAgIFdlYktp
dFBvaW50IHdlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlKGluIE5vZGUgbm9kZSwgaW4g
V2ViS2l0UG9pbnQgcCk7CiAKICNpZiBFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TCiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01BcHBsaWNhdGlvbkNhY2hlIGFwcGxpY2F0aW9u
Q2FjaGU7CkluZGV4OiBXZWJDb3JlL3BhZ2UvV2ViS2l0UG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BhZ2UvV2ViS2l0UG9pbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9X
ZWJLaXRQb2ludC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVm
IFdlYktpdFBvaW50X2gKKyNkZWZpbmUgV2ViS2l0UG9pbnRfaAorCisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgV2ViS2l0UG9p
bnQgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJLaXRQb2ludD4geworICAgIHB1YmxpYzoKKworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gY3JlYXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRQb2ludCgpKTsKKyAgICAgICAg
fQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gY3JlYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
S2l0UG9pbnQoeCwgeSkpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgeCgpIGNvbnN0IHsg
cmV0dXJuIG1feDsgfQorICAgICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHNldFgoZmxvYXQgeCkgeyBtX3ggPSB4OyB9CisgICAgICAg
IHZvaWQgc2V0WShmbG9hdCB5KSB7IG1feSA9IHk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IFdlYktpdFBvaW50KGZsb2F0IHg9MCwgZmxvYXQgeT0wKQorICAgICAgICA6IG1feCh4KQorICAg
ICAgICAsIG1feSh5KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBtX3gs
IG1feTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJL
aXRQb2ludF9oCkluZGV4OiBXZWJDb3JlL3BhZ2UvV2ViS2l0UG9pbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9XZWJLaXRQb2ludC5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BhZ2UvV2ViS2l0UG9pbnQuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgV2ViS2l0
UG9pbnQgeworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgeDsKKyAgICAgICAgYXR0cmlidXRlIGZs
b2F0IHk7CisgICAgfTsKKworfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDEyMDMpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0wMi0y
NCAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzOTQzCisKKyAgICAgICAgVGVzdCBmb3IgbmV3IEFQSSBhbmQgZml4ZWQg
cmVzdWx0cyBvZiB3aW5kb3ctcHJvcGVydGllcy5odG1sCisgICAgICAgIHRvIGluY2x1ZGUgbmV3
IEFQSSBhbmQgbmV3IFdlYktpdFBvaW50IG9iamVjdC4KKworICAgICAgICAqIGZhc3QvZG9tL1dp
bmRvdy93ZWJraXRDb252ZXJ0UG9pbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2RvbS9XaW5kb3cvd2Via2l0Q29udmVydFBvaW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6CisKIDIwMDkt
MDItMjQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2Via2l0
Q29udmVydFBvaW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvd2Via2l0Q29udmVydFBvaW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93ZWJraXRDb252ZXJ0UG9pbnQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NyBAQAorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDE5OiBUeXBlRXJyb3I6IFJlc3VsdCBvZiBleHByZXNzaW9uICdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29uc29sZSIpJyBbbnVsbF0gaXMgbm90IGFuIG9iamVjdC4KK1Rlc3QgMSAtIFRo
aXMgaXMgYSBIMSBoZWFkaW5nLgorCitUZXN0IDIgLSBUaGlzIGlzIGEgc2ltcGxlIHBhcmFncmFw
aC4KKworVGVzdCAzIC0gVGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIGEgbmVzdGVkIGVsZW1lbnQu
CisKK1Rlc3QgNCAtIFRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBhIG5lc3RlZCBlbGVtZW50IHRo
YXQgaGFzIGEgYm9yZGVyLgorCitUZXN0IDUgLSBUaGlzIGlzIGEgdHJhbnNmb3JtZWQgcGFyYWdy
YXBoIHdpdGggYSBuZXN0ZWQgZWxlbWVudCB0aGF0IGhhcyBhIGJvcmRlci4KKworVGVzdCA2IC0g
VGhpcyBpcyBhIHRyYW5zZm9ybWVkIHBhcmFncmFwaCB3aXRoIGEgbmVzdGVkIGVsZW1lbnQgdGhh
dCBoYXMgYSBib3JkZXIuCitBbmQgdGhlbiBhIHNlY29uZCBsaW5lLgorCitUZXN0IDcgLSBUaGlz
IGlzIGEgcGFyYWdyYXBoIGluc2lkZSBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY29t
cG9zaXRpbmcgbGF5ZXIuCisKK1Rlc3QgOCAtIFRoaXMgaXMgcmF3IHRleHQgaW5zaWRlIHNvbWV0
aGluZyB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wb3NpdGluZyBsYXllci4KK1Rlc3QgOSAtIFRo
aXMgaXMgcmF3IHRleHQgaW5zaWRlIHNvbWV0aGluZyB0aGF0IGhhcyBhIGNvbXBvc2l0aW5nIGxh
eWVyLgorVGVzdCAxMCAtIFRoaXMgaXMgcmF3IHRleHQgaW5zaWRlIHNvbWV0aGluZyB0aGF0IGRv
ZXMgbm90IGhhdmUgYSBjb21wb3NpdGluZyBsYXllci4KK1Rlc3QgMTEgLSBUaGlzIGlzIGEgcm90
YXRlZCBhbmQgc2NhbGVkIHBhcmFncmFwaAorCitUZXN0IDEyIC0gVGhpcyBpcyBhIHJvdGF0ZWQg
YW5kIHNjYWxlZCBwYXJhZ3JhcGggd2l0aCBhIG5lc3RlZCBlbGVtZW50IHRoYXQgaGFzIGEgYm9y
ZGVyLgorCitUZXN0IDEzIC0gVGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIGEgbmVzdGVkIGVsZW1l
bnQgdGhhdCBoYXMgYSBib3JkZXIuCisKK1RoaXMgdGVzdCBleGVyY2lzZXMgdGhlIHdlYmtpdENv
bnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlKCkgZnVuY3Rpb24KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCitUZXN0IHBhcmFtZXRlciBwYXNzaW5nIC0gc2hvdWxkIG5vdCBjcmFzaAorUEFT
UyBNaXNzaW5nIHBhcmFtZXRlciB0ZXN0CitUZXN0IGRpZCBub3QgY3Jhc2ggYW5kIHRoZXJlZm9y
ZSB3YXMgc3VjY2Vzc2Z1bAorCitQQVNTIG51bGwgcGFyYW1ldGVyIHRlc3QgYQorVGVzdCBkaWQg
bm90IGNyYXNoIGFuZCB0aGVyZWZvcmUgd2FzIHN1Y2Nlc3NmdWwKKworUEFTUyBudWxsIHBhcmFt
ZXRlciB0ZXN0IGIKK1Rlc3QgZGlkIG5vdCBjcmFzaCBhbmQgdGhlcmVmb3JlIHdhcyBzdWNjZXNz
ZnVsCisKK1Rlc3QgMQorUEFTUyB4IGlzIDgKK1BBU1MgeSBpcyAxMgorUm91bmQgVHJpcCBvZiAo
MCwwKQorUEFTUyB4IGlzIDAKK1BBU1MgeSBpcyAwCitQQVNTIHggaXMgMTMKK1BBU1MgeSBpcyA1
MgorUm91bmQgVHJpcCBvZiAoNSw0MCkKK1BBU1MgeCBpcyA1CitQQVNTIHkgaXMgNDAKKworVGVz
dCAyCitQQVNTIHggaXMgOAorUEFTUyB5IGlzIDUwCitSb3VuZCBUcmlwIG9mICgwLDApCitQQVNT
IHggaXMgMAorUEFTUyB5IGlzIDAKK1BBU1MgeCBpcyAxMworUEFTUyB5IGlzIDkwCitSb3VuZCBU
cmlwIG9mICg1LDQwKQorUEFTUyB4IGlzIDUKK1BBU1MgeSBpcyA0MAorCitUZXN0IDMKK1BBU1Mg
eCBpcyA4CitQQVNTIHkgaXMgODQKK1JvdW5kIFRyaXAgb2YgKDAsMCkKK1BBU1MgeCBpcyAwCitQ
QVNTIHkgaXMgMAorUEFTUyB4IGlzIDEzCitQQVNTIHkgaXMgMTI0CitSb3VuZCBUcmlwIG9mICg1
LDQwKQorUEFTUyB4IGlzIDUKK1BBU1MgeSBpcyA0MAorCitUZXN0IDQKK1BBU1MgeCBpcyA4CitQ
QVNTIHkgaXMgMTE4CitSb3VuZCBUcmlwIG9mICgwLDApCitQQVNTIHggaXMgMAorUEFTUyB5IGlz
IDAKK1BBU1MgeCBpcyAxMworUEFTUyB5IGlzIDE1OAorUm91bmQgVHJpcCBvZiAoNSw0MCkKK1BB
U1MgeCBpcyA1CitQQVNTIHkgaXMgNDAKKworVGVzdCA1CitQQVNTIHggaXMgMjgKK1BBU1MgeSBp
cyAxNTIKK1JvdW5kIFRyaXAgb2YgKDAsMCkKK1BBU1MgeCBpcyAwCitQQVNTIHkgaXMgMAorUEFT
UyB4IGlzIDMzCitQQVNTIHkgaXMgMTkyCitSb3VuZCBUcmlwIG9mICg1LDQwKQorUEFTUyB4IGlz
IDUKK1BBU1MgeSBpcyA0MAorCitUZXN0IDYKK1BBU1MgeCBpcyAyOAorUEFTUyB5IGlzIDE4Ngor
Um91bmQgVHJpcCBvZiAoMCwwKQorUEFTUyB4IGlzIDAKK1BBU1MgeSBpcyAwCitQQVNTIHggaXMg
MzMKK1BBU1MgeSBpcyAyMjYKK1JvdW5kIFRyaXAgb2YgKDUsNDApCitQQVNTIHggaXMgNQorUEFT
UyB5IGlzIDQwCisKK1Rlc3QgNworUEFTUyB4IGlzIDgKK1BBU1MgeSBpcyAyMzgKK1JvdW5kIFRy
aXAgb2YgKDAsMCkKK1BBU1MgeCBpcyAwCitQQVNTIHkgaXMgMAorUEFTUyB4IGlzIDEzCitQQVNT
IHkgaXMgMjc4CitSb3VuZCBUcmlwIG9mICg1LDQwKQorUEFTUyB4IGlzIDUKK1BBU1MgeSBpcyA0
MAorCitUZXN0IDgKK1BBU1MgeCBpcyA4CitQQVNTIHkgaXMgMjcyCitSb3VuZCBUcmlwIG9mICgw
LDApCitQQVNTIHggaXMgMAorUEFTUyB5IGlzIDAKK1BBU1MgeCBpcyAxMworUEFTUyB5IGlzIDMx
MgorUm91bmQgVHJpcCBvZiAoNSw0MCkKK1BBU1MgeCBpcyA1CitQQVNTIHkgaXMgNDAKKworVGVz
dCA5CitQQVNTIHggaXMgMjgKK1BBU1MgeSBpcyAyOTAKK1JvdW5kIFRyaXAgb2YgKDAsMCkKK1BB
U1MgeCBpcyAwCitQQVNTIHkgaXMgMAorUEFTUyB4IGlzIDMzCitQQVNTIHkgaXMgMzMwCitSb3Vu
ZCBUcmlwIG9mICg1LDQwKQorUEFTUyB4IGlzIDUKK1BBU1MgeSBpcyA0MAorCitUZXN0IDEwCitQ
QVNTIHggaXMgMjgKK1BBU1MgeSBpcyAzMDgKK1JvdW5kIFRyaXAgb2YgKDAsMCkKK1BBU1MgeCBp
cyAwCitQQVNTIHkgaXMgMAorUEFTUyB4IGlzIDMzCitQQVNTIHkgaXMgMzQ4CitSb3VuZCBUcmlw
IG9mICg1LDQwKQorUEFTUyB4IGlzIDUKK1BBU1MgeSBpcyA0MAorCitUZXN0IDExCitQQVNTIHgg
aXMgMTU4CitQQVNTIHkgaXMgMzU1CitSb3VuZCBUcmlwIG9mICgwLDApCitQQVNTIHggaXMgMAor
UEFTUyB5IGlzIDAKK1BBU1MgeCBpcyAxNzQKK1BBU1MgeSBpcyAzNzMKK1JvdW5kIFRyaXAgb2Yg
KDUsNDApCitQQVNTIHggaXMgNQorUEFTUyB5IGlzIDQwCisKK1Rlc3QgMTIKK1BBU1MgeCBpcyAx
NjgKK1BBU1MgeSBpcyA0MjgKK1JvdW5kIFRyaXAgb2YgKDAsMCkKK1BBU1MgeCBpcyAwCitQQVNT
IHkgaXMgMAorUEFTUyB4IGlzIDE4NAorUEFTUyB5IGlzIDQ0NgorUm91bmQgVHJpcCBvZiAoNSw0
MCkKK1BBU1MgeCBpcyA1CitQQVNTIHkgaXMgNDAKKworVGVzdCAxMworUEFTUyB4IGlzIDI4CitQ
QVNTIHkgaXMgNDg2CitSb3VuZCBUcmlwIG9mICgwLDApCitQQVNTIHggaXMgMAorUEFTUyB5IGlz
IDAKK1BBU1MgeCBpcyAzMworUEFTUyB5IGlzIDUyNgorUm91bmQgVHJpcCBvZiAoNSw0MCkKK1BB
U1MgeCBpcyA1CitQQVNTIHkgaXMgNDAKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2Via2l0Q29udmVydFBvaW50Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dlYmtpdENvbnZlcnRQb2ludC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dlYmtpdENvbnZlcnRQ
b2ludC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5MyBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcv
VFIvaHRtbDQvc3RyaWN0LmR0ZCI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1l
cXVpdj0iQ29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgor
ICAgIDx0aXRsZT5UZXN0IG9mIHdlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlIGZ1bmN0
aW9uPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgICBib2R5IHsKKyAgICAgICAgaGVpZ2h0OiAxMDAw
cHg7CisgICAgICB9CisgICAgICAKKyAgICAgIGgxIHsKKyAgICAgICAgICBmb250LXNpemU6IDE0
cHQ7CisgICAgICB9CisgICAgICAubGF5ZXIgeworICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgaGVpZ2h0OiA1MDBweDsKKyAgICAgICAg
LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgpOworICAgICAgfQorICAgICAgLmRvdCB7
CisgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9y
OiAjMGYwOworICAgICAgICAgd2lkdGg6IDEwcHg7CisgICAgICAgICBoZWlnaHQ6IDEwcHg7Cisg
ICAgICAgICBsZWZ0OiAwcHg7CisgICAgICAgICB0b3A6IDBweDsKKyAgICAgICAgIHZpc2liaWxp
dHk6IGhpZGRlbjsKKyAgICAgICB9CisgICAgICAgYi5ib3JkZXIgeworICAgICAgICAgYm9yZGVy
OiA1cHggc29saWQgYmx1ZTsKKyAgICAgICB9CisgICAgICAgCisgICAgICAgLmEgeworICAgICAg
ICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICAgbGVmdDogMTBweDsKKyAgICAgICAgIGJh
Y2tncm91bmQ6ICNjYmM7CisgICAgICAgICB3aWR0aDogODAwcHg7CisgICAgICAgICAtd2Via2l0
LXRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0OworICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06
IHRyYW5zbGF0ZSgxMzBweCwgMjBweCkgcm90YXRlKC0zNWRlZykgc2NhbGUoMC42KTsKKyAgICAg
ICAgIHBhZGRpbmc6IDVweDsKKyAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CisgICAgICAg
fQorICAgICAgIC5iIHsKKyAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgIGJh
Y2tncm91bmQ6ICNiY2M7CisgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDIw
cHgpOworICAgICAgIH0KKyAgICAgICAuYyB7CisgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7
CisgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDIwcHgpOworICAgICAgICAg
YmFja2dyb3VuZDogIzk5YzsKKyAgICAgICB9CisgICAgICAgLmQgeworICAgICAgICAgcG9zaXRp
b246IHJlbGF0aXZlOworICAgICAgICAgYmFja2dyb3VuZDogI2NjOTsKKyAgICAgICB9CisgICAg
ICAgCisgICAgPC9zdHlsZT4KKyAgICA8L2hlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVu
Y3Rpb24gcnVuVGVzdChuYW1lLCBpZCwgeDEsIHkxLCB4MiwgeTIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAgICAgIGRlYnVnKG5hbWUpOworICAgICAgICAgICAg
dmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBwID0g
d2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2Uobm9kZSwgbmV3IFdlYktpdFBvaW50KDAs
IDApKTsKKyAgICAgICAgICAgIHggPSBNYXRoLnJvdW5kKHAueCk7CisgICAgICAgICAgICB5ID0g
TWF0aC5yb3VuZChwLnkpOworICAgICAgICAgICAgc2hvdWxkQmUoJ3gnLCB4MSsiIik7CisgICAg
ICAgICAgICBzaG91bGRCZSgneScsIHkxKyIiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZGVidWcoIlJvdW5kIFRyaXAgb2YgKDAsMCkiKTsKKyAgICAgICAgICAgIHAyID0gd2Via2l0Q29u
dmVydFBvaW50RnJvbVBhZ2VUb05vZGUobm9kZSwgcCk7CisgICAgICAgICAgICB4ID0gTWF0aC5y
b3VuZChwMi54KTsKKyAgICAgICAgICAgIHkgPSBNYXRoLnJvdW5kKHAyLnkpOworICAgICAgICAg
ICAgaWYgKHggPT0gLTApCisgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICBpZiAo
eSA9PSAtMCkKKyAgICAgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgICAgIHNob3VsZEJlKCd4
JywgJzAnKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCd5JywgJzAnKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcCA9IHdlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlKG5vZGUsIG5l
dyBXZWJLaXRQb2ludCg1LCA0MCkpOworICAgICAgICAgICAgeCA9IE1hdGgucm91bmQocC54KTsK
KyAgICAgICAgICAgIHkgPSBNYXRoLnJvdW5kKHAueSk7CisgICAgICAgICAgICBpZiAoeCA9PSAt
MCkKKyAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgIGlmICh5ID09IC0wKQorICAg
ICAgICAgICAgICAgIHkgPSAwOworICAgICAgICAgICAgc2hvdWxkQmUoJ3gnLCB4MisiIik7Cisg
ICAgICAgICAgICBzaG91bGRCZSgneScsIHkyKyIiKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVidWcoIlJvdW5kIFRyaXAgb2YgKDUsNDApIik7CisgICAgICAgICAgICBwMiA9IHdlYmtp
dENvbnZlcnRQb2ludEZyb21QYWdlVG9Ob2RlKG5vZGUsIHApOworICAgICAgICAgICAgeCA9IE1h
dGgucm91bmQocDIueCk7CisgICAgICAgICAgICB5ID0gTWF0aC5yb3VuZChwMi55KTsKKyAgICAg
ICAgICAgIGlmICh4ID09IC0wKQorICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAg
aWYgKHkgPT0gLTApCisgICAgICAgICAgICAgICAgeSA9IDA7CisgICAgICAgICAgICBzaG91bGRC
ZSgneCcsICc1Jyk7CisgICAgICAgICAgICBzaG91bGRCZSgneScsICc0MCcpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBydW4oKSB7CisgICAgICAgICAgICBkZXNjcmlw
dGlvbigiVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgd2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVU
b1BhZ2UoKSBmdW5jdGlvbiIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWJ1ZygiVGVz
dCBwYXJhbWV0ZXIgcGFzc2luZyAtIHNob3VsZCBub3QgY3Jhc2giKTsKKyAgICAgICAgICAgIHZh
ciBwb2ludCA9IHdlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlKG5ldyBXZWJLaXRQb2lu
dCgwLCAwKSk7CisgICAgICAgICAgICBpZiAocG9pbnQgPT0gbnVsbCkKKyAgICAgICAgICAgICAg
ICB0ZXN0UGFzc2VkKCJNaXNzaW5nIHBhcmFtZXRlciB0ZXN0Iik7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiTWlzc2luZyBwYXJhbWV0ZXIgdGVzdCIpOwor
ICAgICAgICAgICAgZGVidWcoIlRlc3QgZGlkIG5vdCBjcmFzaCBhbmQgdGhlcmVmb3JlIHdhcyBz
dWNjZXNzZnVsIik7CisgICAgICAgICAgICBkZWJ1ZygiIik7CisgICAgICAgICAgICBwb2ludCA9
IHdlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlKG51bGwsIG5ldyBXZWJLaXRQb2ludCgw
LCAwKSk7CisgICAgICAgICAgICBpZiAocG9pbnQgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0
ZXN0UGFzc2VkKCJudWxsIHBhcmFtZXRlciB0ZXN0IGEiKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJudWxsIHBhcmFtZXRlciB0ZXN0IGEiKTsKKyAgICAg
ICAgICAgIGRlYnVnKCJUZXN0IGRpZCBub3QgY3Jhc2ggYW5kIHRoZXJlZm9yZSB3YXMgc3VjY2Vz
c2Z1bCIpOworICAgICAgICAgICAgZGVidWcoIiIpOworICAgICAgICAgICAgcG9pbnQgPSB3ZWJr
aXRDb252ZXJ0UG9pbnRGcm9tTm9kZVRvUGFnZShudWxsLCBudWxsKTsKKyAgICAgICAgICAgIGlm
IChwb2ludCA9PSBudWxsKQorICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIm51bGwgcGFyYW1l
dGVyIHRlc3QgYiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoIm51bGwgcGFyYW1ldGVyIHRlc3QgYiIpOworICAgICAgICAgICAgZGVidWcoIlRlc3QgZGlk
IG5vdCBjcmFzaCBhbmQgdGhlcmVmb3JlIHdhcyBzdWNjZXNzZnVsIik7CisKKyAgICAgICAgICAg
IHJ1blRlc3QoIlRlc3QgMSIsICAidGVzdDEiLCAgOCwgMTIsIDEzLCA1Mik7CisgICAgICAgICAg
ICBydW5UZXN0KCJUZXN0IDIiLCAgInRlc3QyIiwgIDgsIDUwLCAxMywgOTApOworICAgICAgICAg
ICAgcnVuVGVzdCgiVGVzdCAzIiwgICJ0ZXN0MyIsICA4LCA4NCwgMTMsIDEyNCk7CisgICAgICAg
ICAgICBydW5UZXN0KCJUZXN0IDQiLCAgInRlc3Q0IiwgIDgsIDExOCwgMTMsIDE1OCk7CisgICAg
ICAgICAgICBydW5UZXN0KCJUZXN0IDUiLCAgInRlc3Q1IiwgIDI4LCAxNTIsIDMzLCAxOTIpOwor
ICAgICAgICAgICAgcnVuVGVzdCgiVGVzdCA2IiwgICJ0ZXN0NiIsICAyOCwgMTg2LCAzMywgMjI2
KTsKKyAgICAgICAgICAgIHJ1blRlc3QoIlRlc3QgNyIsICAidGVzdDciLCAgOCwgMjM4LCAxMywg
Mjc4KTsKKyAgICAgICAgICAgIHJ1blRlc3QoIlRlc3QgOCIsICAidGVzdDgiLCAgOCwgMjcyLCAx
MywgMzEyKTsKKyAgICAgICAgICAgIHJ1blRlc3QoIlRlc3QgOSIsICAidGVzdDkiLCAgMjgsIDI5
MCwgMzMsIDMzMCk7CisgICAgICAgICAgICBydW5UZXN0KCJUZXN0IDEwIiwgInRlc3QxMCIsIDI4
LCAzMDgsIDMzLCAzNDgpOworICAgICAgICAgICAgcnVuVGVzdCgiVGVzdCAxMSIsICJ0ZXN0MTEi
LCAxNTgsIDM1NSwgMTc0LCAzNzMpOworICAgICAgICAgICAgcnVuVGVzdCgiVGVzdCAxMiIsICJ0
ZXN0MTIiLCAxNjgsIDQyOCwgMTg0LCA0NDYpOworICAgICAgICAgICAgcnVuVGVzdCgiVGVzdCAx
MyIsICJ0ZXN0MTMiLCAyOCwgNDg2LCAzMywgNTI2KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicp
OworCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSAgICAKKyAg
ICAgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgICAg
CisgICAgICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgICAgICBzZXRUaW1lb3V0KHJ1biwgMCk7CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICAg
IDxib2R5PgorICAgICAgICA8aDEgaWQ9InRlc3QxIj5UZXN0IDEgLSBUaGlzIGlzIGEgSDEgaGVh
ZGluZy48L2gxPgorICAgICAgICA8cCBpZD0idGVzdDIiPlRlc3QgMiAtIFRoaXMgaXMgYSBzaW1w
bGUgcGFyYWdyYXBoLjwvcD4KKyAgICAgICAgPHAgaWQ9InRlc3QzIj5UZXN0IDMgLSBUaGlzIGlz
IGEgcGFyYWdyYXBoIHdpdGggYSA8Yj5uZXN0ZWQ8L2I+IGVsZW1lbnQuPC9wPgorICAgICAgICA8
cCBpZD0idGVzdDQiPlRlc3QgNCAtIFRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBhIDxiIGNsYXNz
PSJib3JkZXIiPm5lc3RlZDwvYj4gZWxlbWVudCB0aGF0IGhhcyBhIGJvcmRlci48L3A+CisgICAg
ICAgIDxwIGlkPSJ0ZXN0NSIgY2xhc3M9ImMiPlRlc3QgNSAtIFRoaXMgaXMgYSB0cmFuc2Zvcm1l
ZCBwYXJhZ3JhcGggd2l0aCBhIDxiIGNsYXNzPSJib3JkZXIiPm5lc3RlZDwvYj4gZWxlbWVudCB0
aGF0IGhhcyBhIGJvcmRlci48L3A+CisgICAgICAgIDxwIGlkPSJ0ZXN0NiIgY2xhc3M9ImMiPlRl
c3QgNiAtIFRoaXMgaXMgYSB0cmFuc2Zvcm1lZCBwYXJhZ3JhcGggd2l0aCBhIDxiIGNsYXNzPSJi
b3JkZXIiPm5lc3RlZDwvYj4gZWxlbWVudCB0aGF0IGhhcyBhIGJvcmRlci48YnI+QW5kIHRoZW4g
YSBzZWNvbmQgbGluZS48L3A+CisgICAgICAgIDxkaXYgY2xhc3M9ImQiPgorICAgICAgICAgICAg
PHAgaWQ9InRlc3Q3Ij5UZXN0IDcgLSBUaGlzIGlzIGEgcGFyYWdyYXBoIGluc2lkZSBzb21ldGhp
bmcgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY29tcG9zaXRpbmcgbGF5ZXIuPC9wPgorICAgICAgICA8
L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0idGVzdDgiIGNsYXNzPSJkIj4KKyAgICAgICAgICAgIFRl
c3QgOCAtIFRoaXMgaXMgcmF3IHRleHQgaW5zaWRlIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IGhh
dmUgYSBjb21wb3NpdGluZyBsYXllci4KKyAgICAgICAgPC9kaXY+CisgICAgICAKKyAgICAgICAg
PGRpdiBpZD0idGVzdDkiIGNsYXNzPSJiIj4KKyAgICAgICAgICAgIFRlc3QgOSAtIFRoaXMgaXMg
cmF3IHRleHQgaW5zaWRlIHNvbWV0aGluZyB0aGF0IGhhcyBhIGNvbXBvc2l0aW5nIGxheWVyLgor
ICAgICAgICAgICAgPGRpdiBpZD0idGVzdDEwIiBjbGFzcz0iZCI+CisgICAgICAgICAgICAgICAg
VGVzdCAxMCAtIFRoaXMgaXMgcmF3IHRleHQgaW5zaWRlIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90
IGhhdmUgYSBjb21wb3NpdGluZyBsYXllci4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8
L2Rpdj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJhIj4KKyAgICAgICAgICAgIDxwIGlkPSJ0ZXN0
MTEiPlRlc3QgMTEgLSBUaGlzIGlzIGEgcm90YXRlZCBhbmQgc2NhbGVkIHBhcmFncmFwaDwvcD4K
KyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImEiPgorICAgICAgICAgICAgPGRp
diBjbGFzcz0iYiI+CisgICAgICAgICAgICAgICAgPHAgaWQ9InRlc3QxMiI+VGVzdCAxMiAtIFRo
aXMgaXMgYSByb3RhdGVkIGFuZCBzY2FsZWQgcGFyYWdyYXBoIHdpdGggYSA8YiBjbGFzcz0iYm9y
ZGVyIj5uZXN0ZWQ8L2I+IGVsZW1lbnQgdGhhdCBoYXMgYSBib3JkZXIuPC9wPgorICAgICAgICAg
ICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJiIj4KKyAgICAg
ICAgICAgIDxwIGlkPSJ0ZXN0MTMiPlRlc3QgMTMgLSBUaGlzIGlzIGEgcGFyYWdyYXBoIHdpdGgg
YSA8YiBjbGFzcz0iYm9yZGVyIj5uZXN0ZWQ8L2I+IGVsZW1lbnQgdGhhdCBoYXMgYSBib3JkZXIu
PC9wPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorICAgICAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQwOTgyKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3Nyw2ICsxMzc3LDcgQEAgd2luZG93LldlYktpdENTU1RyYW5zZm9ybVZh
bHVlLkNTU19UUkFOUwogd2luZG93LldlYktpdENTU1RyYW5zZm9ybVZhbHVlLkNTU19UUkFOU0xB
VEVZIFtudW1iZXJdCiB3aW5kb3cuV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuQ1NTX1RSQU5TTEFU
RVogW251bWJlcl0KIHdpbmRvdy5XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5wcm90b3R5cGUgW3By
aW50ZWQgYWJvdmUgYXMgd2luZG93LkNTU1ZhbHVlLnByb3RvdHlwZV0KK3dpbmRvdy5XZWJLaXRQ
b2ludCBbb2JqZWN0IFdlYktpdFBvaW50Q29uc3RydWN0b3JdCiB3aW5kb3cuV2ViS2l0VHJhbnNp
dGlvbkV2ZW50IFtvYmplY3QgV2ViS2l0VHJhbnNpdGlvbkV2ZW50Q29uc3RydWN0b3JdCiB3aW5k
b3cuV2ViS2l0VHJhbnNpdGlvbkV2ZW50LnByb3RvdHlwZSBbcHJpbnRlZCBhYm92ZSBhcyB3aW5k
b3cuRXZlbnQucHJvdG90eXBlXQogd2luZG93LldoZWVsRXZlbnQgW29iamVjdCBXaGVlbEV2ZW50
Q29uc3RydWN0b3JdCkBAIC0xNjUxLDYgKzE2NTIsOCBAQCB3aW5kb3cudG9wIFtwcmludGVkIGFi
b3ZlIGFzIHdpbmRvd10KIHdpbmRvdy50cnlFdmFsIFtmdW5jdGlvbl0KIHdpbmRvdy50eXBlT2ZO
dWxsQXdhcmUgW2Z1bmN0aW9uXQogd2luZG93LnR5cGVTdHJpbmdOdWxsQXdhcmUgW2Z1bmN0aW9u
XQord2luZG93LndlYmtpdENvbnZlcnRQb2ludEZyb21Ob2RlVG9QYWdlIFtmdW5jdGlvbl0KK3dp
bmRvdy53ZWJraXRDb252ZXJ0UG9pbnRGcm9tUGFnZVRvTm9kZSBbZnVuY3Rpb25dCiB3aW5kb3cu
d2luZG93IFtwcmludGVkIGFib3ZlIGFzIHdpbmRvd10KIHdpbmRvdy5nZXRTZWxlY3Rpb24oKSBb
b2JqZWN0IERPTVNlbGVjdGlvbl0KIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZSBbZnVu
Y3Rpb25dCg==
</data>
<flag name="review"
          id="13609"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>