<?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>42232</bug_id>
          
          <creation_ts>2010-07-13 22:05:44 -0700</creation_ts>
          <short_desc>Make changing Cursors work in WebKit2.</short_desc>
          <delta_ts>2010-07-14 13:09:23 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>42236</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>250951</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-13 22:05:44 -0700</bug_when>
    <thetext>Cursors should work in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250952</commentid>
    <comment_count>1</comment_count>
      <attachid>61468</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-13 22:08:00 -0700</bug_when>
    <thetext>Created attachment 61468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250956</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 22:12:41 -0700</bug_when>
    <thetext>Attachment 61468 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Shared/WebCoreArgumentCoders.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/Cursor.cpp:52:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/platform/Cursor.cpp:147:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/platform/win/CursorWin.cpp:143:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 4 in 54 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250957</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-07-13 22:14:57 -0700</bug_when>
    <thetext>Attachment 61468 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3448282</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250964</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 22:25:23 -0700</bug_when>
    <thetext>Attachment 61468 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3546035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250973</commentid>
    <comment_count>5</comment_count>
      <attachid>61468</attachid>
    <who name="">mitz</who>
    <bug_when>2010-07-13 22:37:01 -0700</bug_when>
    <thetext>Comment on attachment 61468
Patch

&gt; +        - Rework Windows cursor code to use less global variables.

fewer?

&gt; Index: WebCore/page/Chrome.h
&gt; ===================================================================
&gt; --- WebCore/page/Chrome.h	(revision 63102)
&gt; +++ WebCore/page/Chrome.h	(working copy)
&gt; @@ -69,6 +69,7 @@ namespace WebCore {
&gt;          virtual IntRect windowToScreen(const IntRect&amp;) const;
&gt;          virtual PlatformPageClient platformPageClient() const;
&gt;          virtual void scrollbarsModeDidChange() const;
&gt; +        virtual void setCursor(const Cursor&amp;);

Does this method need to be virtual?

&gt; +        PlatformCursor impl() const { return m_platformCursor; }

I’d rename this method to platformCursor() as well.

&gt; +    const char* nameForCursorType(Cursor::Type);

How is this going to be used? Should it return 0 instead of the constant string &quot;ERROR&quot;?

&gt; -    return [[NSCursor alloc] initWithImage:img hotSpot:determineHotSpot(image, hotSpot)];
&gt; +    return [[NSCursor alloc] initWithImage:img hotSpot:hotSpot];

You should explain in the change log how hotSpot changed from being an out parameter in this function (and its caller) to being an in parameter.

&gt; +Cursor::Cursor(Image* image, const IntPoint&amp; hotSpot)

&gt; +Cursor::Cursor(Type type)

&gt; +Cursor::Cursor(const Cursor&amp; other)

&gt; +Cursor&amp; Cursor::operator=(const Cursor&amp; other)

&gt; +PlatformCursor Cursor::platformCursor() const

These methods have identical implementations in CursorMac.mm and CursorWin.cpp. Can they be shared in Cursor.cpp inside #if USE(LAZY_NATIVE_CURSOR)?

&gt;  void Widget::setCursor(const Cursor&amp; cursor)

I think this method has identical implementations in WidgetMac.mm and WidgetWin.cpp. Can they be shared in Widget.cpp inside #if USE(LAZY_NATIVE_CURSOR)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250974</commentid>
    <comment_count>6</comment_count>
      <attachid>61471</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-13 22:38:05 -0700</bug_when>
    <thetext>Created attachment 61471
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250977</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 22:41:04 -0700</bug_when>
    <thetext>Attachment 61471 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/wx/CursorWx.cpp:45:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/platform/Cursor.cpp:52:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/platform/Cursor.cpp:147:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/platform/win/CursorWin.cpp:143:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 4 in 61 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250978</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-13 22:41:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 61468 [details])
&gt; &gt; +        - Rework Windows cursor code to use less global variables.
&gt; 
&gt; fewer?

Will change.

&gt; 
&gt; &gt; Index: WebCore/page/Chrome.h
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/page/Chrome.h	(revision 63102)
&gt; &gt; +++ WebCore/page/Chrome.h	(working copy)
&gt; &gt; @@ -69,6 +69,7 @@ namespace WebCore {
&gt; &gt;          virtual IntRect windowToScreen(const IntRect&amp;) const;
&gt; &gt;          virtual PlatformPageClient platformPageClient() const;
&gt; &gt;          virtual void scrollbarsModeDidChange() const;
&gt; &gt; +        virtual void setCursor(const Cursor&amp;);
&gt; 
&gt; Does this method need to be virtual?

Yes, since it is from HostWindow.

&gt; 
&gt; &gt; +        PlatformCursor impl() const { return m_platformCursor; }
&gt; 
&gt; I’d rename this method to platformCursor() as well.

I would, but that would require changing a lot of places.  I can do it in a follow up though.

&gt; &gt; +    const char* nameForCursorType(Cursor::Type);
&gt; 
&gt; How is this going to be used? Should it return 0 instead of the constant string &quot;ERROR&quot;?

I used it for debugging.  Perhaps I should remove it.

&gt; &gt; -    return [[NSCursor alloc] initWithImage:img hotSpot:determineHotSpot(image, hotSpot)];
&gt; &gt; +    return [[NSCursor alloc] initWithImage:img hotSpot:hotSpot];
&gt; 
&gt; You should explain in the change log how hotSpot changed from being an out parameter in this function (and its caller) to being an in parameter.

Ok.

&gt; 
&gt; &gt; +Cursor::Cursor(Image* image, const IntPoint&amp; hotSpot)
&gt; 
&gt; &gt; +Cursor::Cursor(Type type)
&gt; 
&gt; &gt; +Cursor::Cursor(const Cursor&amp; other)
&gt; 
&gt; &gt; +Cursor&amp; Cursor::operator=(const Cursor&amp; other)
&gt; 
&gt; &gt; +PlatformCursor Cursor::platformCursor() const
&gt; 
&gt; These methods have identical implementations in CursorMac.mm and CursorWin.cpp. Can they be shared in Cursor.cpp inside #if USE(LAZY_NATIVE_CURSOR)?

Yes!

&gt; 
&gt; &gt;  void Widget::setCursor(const Cursor&amp; cursor)
&gt; 
&gt; I think this method has identical implementations in WidgetMac.mm and WidgetWin.cpp. Can they be shared in Widget.cpp inside #if USE(LAZY_NATIVE_CURSOR)?

They don&apos;t unfortunately, the windows one has bit extra.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250985</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-13 23:03:14 -0700</bug_when>
    <thetext>Attachment 61471 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3447273</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251261</commentid>
    <comment_count>10</comment_count>
      <attachid>61533</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-14 10:17:41 -0700</bug_when>
    <thetext>Created attachment 61533
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251262</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-14 10:18:56 -0700</bug_when>
    <thetext>Attachment 61533 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/wx/CursorWx.cpp:45:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/platform/Cursor.cpp:52:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/platform/Cursor.cpp:147:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
WebCore/platform/win/CursorWin.cpp:146:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 4 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251291</commentid>
    <comment_count>12</comment_count>
      <attachid>61533</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-14 11:01:49 -0700</bug_when>
    <thetext>Comment on attachment 61533
Patch 3

&gt; +    switch (type) {
&gt; +        case Cursor::Pointer:
&gt; +            return pointerCursor();

Wrong indentation style.

&gt; +const char* nameForCursorType(Cursor::Type type)
&gt; +{
&gt; +    switch (type) {
&gt; +        case Cursor::Pointer:
&gt; +            return &quot;Pointer&quot;;

Same.

&gt; +const Cursor&amp; pointerCursor()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(Cursor, c, (Cursor::Pointer));
&gt; +    return c;
&gt; +}

How about using the word &quot;cursor&quot; or &quot;staticLocalCursor&quot; instead of &quot;c&quot;?

&gt; +    switch (m_type) {
&gt; +        case Cursor::Pointer:
&gt; +            m_platformCursor = HardRetain([NSCursor arrowCursor]);
&gt; +            break;

Switch style again.

&gt; +            m_platformCursor = HardRetain(leakNamedCursor(&quot;crossHairCursor&quot;, 11, 11));

Given the word leak in the name of this function, it seems wrong or unnecessary to do another HardRetain.

&gt; +    switch (m_type) {
&gt; +        case Cursor::Pointer:

Another switch statement.

&gt; +    LRESULT onSetCursor(HWND hWnd, UINT message, WPARAM, LPARAM, bool&amp; handled);

Why does the HWND argument need names in all of these?

Otherwise looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251341</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-14 11:58:36 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/63339.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251379</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-14 13:09:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/63339 might have broken Chromium Mac Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/63339
http://trac.webkit.org/changeset/63340
http://trac.webkit.org/changeset/63341
http://trac.webkit.org/changeset/63342</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61468</attachid>
            <date>2010-07-13 22:08:00 -0700</date>
            <delta_ts>2010-07-14 10:17:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>cursor.diff</filename>
            <type>text/plain</type>
            <size>84935</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzQgQEAKKzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAg
IE1ha2UgY2hhbmdpbmcgQ3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgLSBDb252
ZXJ0ZWQgTWFjIGFuZCBXaW5kb3dzIEN1cnNvciBpbXBsZW1lbnRhdGlvbnMgdG8gbGF6aWx5Cisg
ICAgICAgICAgY3JlYXRlIHRoZSBwbGF0Zm9ybSBjdXJzb3IuCisgICAgICAgIC0gQWRkIEhvc3RX
aW5kb3cgZnVuY3Rpb24gdG8gc2V0IHRoZSBjdXJzb3IgYW5kIHVzZSBpdCBmcm9tIFdpZGdldDo6
c2V0Q3Vyc29yLgorICAgICAgICAtIFJld29yayBXaW5kb3dzIGN1cnNvciBjb2RlIHRvIHVzZSBs
ZXNzIGdsb2JhbCB2YXJpYWJsZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogVXBkYXRl
ZAorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5Q2hyb21lQ2xpZW50OjpzZXRDdXJzb3IpOiAKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hy
b21lQ2xpZW50OjpzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKToKKyAgICAgICAgQWRk
ZWQgZW1wdHkgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzZXRDdXJzb3IpOgorICAgICAgICAqIHBhZ2UvQ2hy
b21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgQ2hhbmdlIGV4
aXN0aW5nIHNldEN1cnNvcigpIGZ1bmN0aW9uIHRvIHRha2UgYSBDdXJzb3IgaW5zdGVhZCBvZiBh
CisgICAgICAgIFBsYXRmb3JtQ3Vyc29ySGFuZGxlLiBBZGRlZCBzZXRMYXN0U2V0Q3Vyc29yVG9D
dXJyZW50Q3Vyc29yLgorCisgICAgICAgICogcGxhdGZvcm0vQ3Vyc29yLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9DdXJzb3IuaDoKKyAgICAgICAgQWRkZWQgQ3Vyc29yIFR5cGUgYW5kIHRoZSBv
cHRpb24gb2YgbGF6aWx5IGNyZWF0aW5nIHRoZSBuYXRpdmUgY3Vyc29yCisgICAgICAgICh1c2Vk
IG9uIE1hYyBhbmQgV2luZG93cyBmb3Igbm93KS4KKworICAgICAgICAqIHBsYXRmb3JtL0hvc3RX
aW5kb3cuaDoKKyAgICAgICAgQWRkIHNldEN1cnNvci4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9DdXJzb3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDdXN0b21DdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUGxhdGZvcm1DdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3Vyc29yOjpDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjp+Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cnNvcjo6cGxhdGZvcm1DdXJzb3IpOgorICAgICAgICBDb252ZXJ0IHRvIGxhemlseSBjcmVh
dGluZyB0aGUgbmF0aXZlIGN1cnNvciBvbiB0aGUgZmlyc3QgcmVxdWVzdCBhbmQKKyAgICAgICAg
c3RvcmluZyB0aGUgdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9XaWRnZXRNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEN1cnNvcik6CisgICAgICAgIFVzZSBIb3N0
V2luZG93OjpzZXRDdXJzb3IgdG8gc2V0IHRoZSBjdXJzb3IuIFRoaXMgaW4gdHVybiB3aWxsIGNh
bGwgdGhlCisgICAgICAgIENocm9tZUNsaWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9D
dXJzb3JXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2hhcmVkQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmxvYWRTaGFyZWRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bG9h
ZEN1cnNvckJ5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQbGF0Zm9ybUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDdXJzb3I6On5TaGFyZWRDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3Vyc29yOjpDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjp+
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cnNvcjo6cGxhdGZvcm1DdXJzb3IpOgorICAgICAgICBDb252ZXJ0IHRvIGxh
emlseSBjcmVhdGluZyB0aGUgbmF0aXZlIGN1cnNvciBvbiB0aGUgZmlyc3QgcmVxdWVzdCBhbmQK
KyAgICAgICAgc3RvcmluZyB0aGUgdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9XaWRn
ZXRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRDdXJzb3IpOgorICAgICAg
ICBVc2UgSG9zdFdpbmRvdzo6c2V0Q3Vyc29yIHRvIHNldCB0aGUgY3Vyc29yLiBUaGlzIGluIHR1
cm4gd2lsbCBjYWxsIHRoZQorICAgICAgICBDaHJvbWVDbGllbnQuCisKKyAgICAgICAgKiBwbHVn
aW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICBVc2UgdGhlIG5ldyBzZXRMYXN0U2V0Q3Vyc29y
VG9DdXJyZW50Q3Vyc29yIGNsaWVudCBmdW5jdGlvbiB0byBlbnN1cmUKKyAgICAgICAgdGhlIGN1
cnNvciBpcyBwcm9wZXJseSB1cGRhdGVkIHdoZW4gb3ZlciBhIHBsdWdpbi4KKwogMjAxMC0wNy0x
MyAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA2MzEwMikKKysrIFdl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2ICszOTMsNyBAQCBf
X1pON1dlYkNvcmUxN0RPTUltcGxlbWVudGF0aW9uMTRpc1RleHRNCiBfX1pON1dlYkNvcmUxN0ds
eXBoUGFnZVRyZWVOb2RlMTh0cmVlR2x5cGhQYWdlQ291bnRFdgogX19aTjdXZWJDb3JlMTdIVE1M
UGx1Z0luRWxlbWVudDExZ2V0TlBPYmplY3RFdgogX19aTjdXZWJDb3JlMTdIaXN0b3J5Q29udHJv
bGxlcjI2c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGVFdgorX19aTjdXZWJDb3JlMTduYW1lRm9y
Q3Vyc29yVHlwZUVOU182Q3Vyc29yNFR5cGVFCiBfX1pON1dlYkNvcmUxOGRlcHJlY2F0ZWRQYXJz
ZVVSTEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOGlzU3RhcnRPZlBhcmFncmFwaEVSS05T
XzE1VmlzaWJsZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTZy
ZXN1bWVBbmltYXRpb25zRVBOU184RG9jdW1lbnRFCkBAIC01MzcsNiArNTM4LDkgQEAgX19aTjdX
ZWJDb3JlNVJhbmdlNnNldEVuZEVOM1dURjEwUGFzc1JlZgogX19aTjdXZWJDb3JlNVJhbmdlOHNl
dFN0YXJ0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaVJpCiBfX1pON1dlYkNvcmU1UmFu
Z2VEMUV2CiBfX1pON1dlYkNvcmU1Y2FjaGVFdgorX19aTjdXZWJDb3JlNkN1cnNvcjhmcm9tVHlw
ZUVOUzBfNFR5cGVFCitfX1pON1dlYkNvcmU2Q3Vyc29yRDFFdgorX19aTjdXZWJDb3JlNkN1cnNv
cmFTRVJLUzBfCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBhcHBseVN0eWxlRVBOU18xOUNTU1N0eWxl
RGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjEwaW5zZXJ0
VGV4dEVSS05TXzZTdHJpbmdFUE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM2NhbkRI
VE1MUGFzdGVFdgpAQCAtOTI4LDYgKzkzMiw3IEBAIF9fWk5LN1dlYkNvcmU1UmFuZ2UxOWJvdW5k
YXJ5UG9pbnRzVmFsaWQKIF9fWk5LN1dlYkNvcmU1UmFuZ2U5ZW5kT2Zmc2V0RVJpCiBfX1pOSzdX
ZWJDb3JlNVJhbmdlOWZpcnN0Tm9kZUV2CiBfX1pOSzdXZWJDb3JlNkNocm9tZTEyY3JlYXRlV2lu
ZG93RVBOU181RnJhbWVFUktOU18xNkZyYW1lTG9hZFJlcXVlc3RFUktOU18xNFdpbmRvd0ZlYXR1
cmVzRQorX19aTks3V2ViQ29yZTZDdXJzb3IxNHBsYXRmb3JtQ3Vyc29yRXYKIF9fWk5LN1dlYkNv
cmU2RWRpdG9yMTNjYW5FZGl0UmljaGx5RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTZjb21wb3Np
dGlvblJhbmdlRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTZmb250Rm9yU2VsZWN0aW9uRVJiCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL2xvYWRl
ci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgUGFzc093blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBjcmVhdGVIVE1M
UGFyc2VyUXVpcmtzKCkgeyByZXR1cm4gMDsgfQogCi0gICAgdmlydHVhbCBib29sIHNldEN1cnNv
cihQbGF0Zm9ybUN1cnNvckhhbmRsZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9s
bFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9
CiAKQEAgLTE2Niw2ICsxNjYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllclN5bmMoKSB7fTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCkgeyB9Cisj
ZW5kaWYKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91
Y2hFdmVudHMoYm9vbCkgeyB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA2MzEwMikK
KysrIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsOSArNDI2
LDkgQEAgdm9pZCBDaHJvbWU6OmNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZQogICAgIG1fY2xp
ZW50LT5jaG9vc2VJY29uRm9yRmlsZXMoZmlsZW5hbWVzLCBmaWxlQ2hvb3Nlcik7CiB9CiAKLWJv
b2wgQ2hyb21lOjpzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUgY3Vyc29yKQordm9pZCBD
aHJvbWU6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICByZXR1cm4gbV9j
bGllbnQtPnNldEN1cnNvcihjdXJzb3IpOworICAgIG1fY2xpZW50LT5zZXRDdXJzb3IoY3Vyc29y
KTsKIH0KIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQpJbmRleDogV2ViQ29yZS9wYWdlL0No
cm9tZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2aXNpb24gNjMx
MDIpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93
VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFBsYXRmb3Jt
UGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2
b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJik7CiAKICAgICAgICAgdm9pZCBzY3JvbGxSZWN0SW50
b1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogCkBAIC0xMzUsOCArMTM2LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQ
dHI8RmlsZUNob29zZXI+KTsKICAgICAgICAgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hvb3NlciopOwogCi0gICAgICAgIGJvb2wgc2V0Q3Vyc29y
KFBsYXRmb3JtQ3Vyc29ySGFuZGxlKTsKLQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdm9p
ZCBmb2N1c05TVmlldyhOU1ZpZXcqKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2
aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNSwxMSArMTM1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCBJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0ID0gMDsK
ICAgICAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKSBj
b25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFn
ZUNsaWVudCgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNo
YW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3
KikgY29uc3QgPSAwOyAvLyBDdXJyZW50bHkgb25seSBNYWMgaGFzIGEgbm9uIGVtcHR5IGltcGxl
bWVudGF0aW9uLgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2Uo
KSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
JikgPSAwOwogICAgICAgICAvLyBFbmQgbWV0aG9kcyB1c2VkIGJ5IEhvc3RXaW5kb3cuCiAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSosIGNvbnN0IElu
dFNpemUmKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1Zp
ZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCA9IDA7IC8vIEN1cnJl
bnRseSBvbmx5IE1hYyBoYXMgYSBub24gZW1wdHkgaW1wbGVtZW50YXRpb24uCisgICAgICAgCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIG1pc3NpbmdQbHVn
aW5CdXR0b25DbGlja2VkKEVsZW1lbnQqKSBjb25zdCB7IH0KICAgICAgICAgdmlydHVhbCB2b2lk
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBt
b2RpZmllckZsYWdzKSA9IDA7CkBAIC0xOTQsOCArMTk2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAvLyBBc3luY2hyb25vdXMgcmVxdWVzdCB0byBsb2FkIGFuIGljb24gZm9yIHNw
ZWNpZmllZCBmaWxlbmFtZXMuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmls
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hvb3NlciopID0gMDsKIAotICAgICAgICB2
aXJ0dWFsIGJvb2wgc2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlKSA9IDA7Ci0KICAgICAg
ICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCBoYXMgY2hhbmdl
ZC4gVGhpcyBmdW5jdGlvbgogICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5LCBz
byBoYW5kbGluZyBzaG91bGQgYmUgdmVyeSBmYXN0LgogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9y
bVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKSA9IDA7CkBAIC0yMzYsNiArMjM2LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQb3BVcE1lbnUoTlNN
ZW51ICopIHsgfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCkgPSAwOworI2VuZGlmCisKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgICAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZl
bnRzKGJvb2wpID0gMDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmNwcAkocmV2aXNpb24gNjMx
MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDQgKzQ2LDQ1NyBAQCBJbnRQb2ludCBkZXRlcm1pbmVIb3RTcG90KEltYWdlKiBpbWFnZSwgCiAg
ICAgcmV0dXJuIEludFBvaW50KCk7CiB9CiAKK2NvbnN0IEN1cnNvciYgQ3Vyc29yOjpmcm9tVHlw
ZShDdXJzb3I6OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6OlBvaW50ZXI6CisgICAgICAgICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6Q3Jvc3M6CisgICAgICAgICAgICByZXR1cm4gY3Jvc3NDdXJz
b3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkhhbmQ6CisgICAgICAgICAgICByZXR1cm4gaGFu
ZEN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6SUJlYW06CisgICAgICAgICAgICByZXR1
cm4gaUJlYW1DdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OldhaXQ6CisgICAgICAgICAg
ICByZXR1cm4gd2FpdEN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6SGVscDoKKyAgICAg
ICAgICAgIHJldHVybiBoZWxwQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0UmVz
aXplOgorICAgICAgICAgICAgcmV0dXJuIGVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6Ok5vcnRoUmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoUmVzaXplQ3Vy
c29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RSZXNpemU6CisgICAgICAgICAg
ICByZXR1cm4gbm9ydGhFYXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpO
b3J0aFdlc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gbm9ydGhXZXN0UmVzaXplQ3Vyc29y
KCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVy
biBzb3V0aFJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UmVz
aXplOgorICAgICAgICAgICAgcmV0dXJuIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpOworICAgICAg
ICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIHNvdXRo
V2VzdFJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6V2VzdFJlc2l6ZToKKyAg
ICAgICAgICAgIHJldHVybiB3ZXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpOb3J0aFNvdXRoUmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoU291dGhSZXNpemVD
dXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkVhc3RXZXN0UmVzaXplOgorICAgICAgICAg
ICAgcmV0dXJuIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpO
b3J0aEVhc3RTb3V0aFdlc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gbm9ydGhFYXN0U291
dGhXZXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RTb3V0
aEVhc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gbm9ydGhXZXN0U291dGhFYXN0UmVzaXpl
Q3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDb2x1bW5SZXNpemU6CisgICAgICAgICAg
ICByZXR1cm4gY29sdW1uUmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpSb3dS
ZXNpemU6CisgICAgICAgICAgICByZXR1cm4gcm93UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNh
c2UgQ3Vyc29yOjpNaWRkbGVQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIG1pZGRsZVBhbm5p
bmdDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkVhc3RQYW5uaW5nOgorICAgICAgICAg
ICAgcmV0dXJuIGVhc3RQYW5uaW5nQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0
aFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gbm9ydGhQYW5uaW5nQ3Vyc29yKCk7CisgICAg
ICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIG5v
cnRoRWFzdFBhbm5pbmdDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFBh
bm5pbmc6CisgICAgICAgICAgICByZXR1cm4gbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpOworICAg
ICAgICBjYXNlIEN1cnNvcjo6U291dGhQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIHNvdXRo
UGFubmluZ0N1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UGFubmluZzoK
KyAgICAgICAgICAgIHJldHVybiBzb3V0aEVhc3RQYW5uaW5nQ3Vyc29yKCk7CisgICAgICAgIGNh
c2UgQ3Vyc29yOjpTb3V0aFdlc3RQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIHNvdXRoV2Vz
dFBhbm5pbmdDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Oldlc3RQYW5uaW5nOgorICAg
ICAgICAgICAgcmV0dXJuIHdlc3RQYW5uaW5nQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpNb3ZlOgorICAgICAgICAgICAgcmV0dXJuIG1vdmVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBD
dXJzb3I6OlZlcnRpY2FsVGV4dDoKKyAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbFRleHRDdXJz
b3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNlbGw6CisgICAgICAgICAgICByZXR1cm4gY2Vs
bEN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Q29udGV4dE1lbnU6CisgICAgICAgICAg
ICByZXR1cm4gY29udGV4dE1lbnVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkFsaWFz
OgorICAgICAgICAgICAgcmV0dXJuIGFsaWFzQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpQcm9ncmVzczoKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmVzc0N1cnNvcigpOworICAgICAg
ICBjYXNlIEN1cnNvcjo6Tm9Ecm9wOgorICAgICAgICAgICAgcmV0dXJuIG5vRHJvcEN1cnNvcigp
OworICAgICAgICBjYXNlIEN1cnNvcjo6Q29weToKKyAgICAgICAgICAgIHJldHVybiBjb3B5Q3Vy
c29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb25lOgorICAgICAgICAgICAgcmV0dXJuIG5v
bmVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vdEFsbG93ZWQ6CisgICAgICAgICAg
ICByZXR1cm4gbm90QWxsb3dlZEN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Wm9vbUlu
OgorICAgICAgICAgICAgcmV0dXJuIHpvb21JbkN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNv
cjo6Wm9vbU91dDoKKyAgICAgICAgICAgIHJldHVybiB6b29tT3V0Q3Vyc29yKCk7CisgICAgICAg
IGNhc2UgQ3Vyc29yOjpHcmFiOgorICAgICAgICAgICAgcmV0dXJuIGdyYWJDdXJzb3IoKTsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6OkdyYWJiaW5nOgorICAgICAgICAgICAgcmV0dXJuIGdyYWJiaW5n
Q3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDdXN0b206CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKIH0K
KworY29uc3QgY2hhciogbmFtZUZvckN1cnNvclR5cGUoQ3Vyc29yOjpUeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpQb2ludGVyOgorICAgICAg
ICAgICAgcmV0dXJuICJQb2ludGVyIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNyb3NzOgorICAg
ICAgICAgICAgcmV0dXJuICJDcm9zcyI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpIYW5kOgorICAg
ICAgICAgICAgcmV0dXJuICJIYW5kIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OklCZWFtOgorICAg
ICAgICAgICAgcmV0dXJuICJJQmVhbSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpXYWl0OgorICAg
ICAgICAgICAgcmV0dXJuICJXYWl0IjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkhlbHA6CisgICAg
ICAgICAgICByZXR1cm4gIkhlbHAiOworICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFJlc2l6ZToK
KyAgICAgICAgICAgIHJldHVybiAiRWFzdFJlc2l6ZSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpO
b3J0aFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiTm9ydGhSZXNpemUiOworICAgICAgICBj
YXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuICJOb3J0aEVh
c3RSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0UmVzaXplOgorICAgICAg
ICAgICAgcmV0dXJuICJOb3J0aFdlc3RSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6U291
dGhSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gIlNvdXRoUmVzaXplIjsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6OlNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiU291dGhFYXN0
UmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFJlc2l6ZToKKyAgICAgICAg
ICAgIHJldHVybiAiU291dGhXZXN0UmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6Oldlc3RS
ZXNpemU6CisgICAgICAgICAgICByZXR1cm4gIldlc3RSZXNpemUiOworICAgICAgICBjYXNlIEN1
cnNvcjo6Tm9ydGhTb3V0aFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiTm9ydGhTb3V0aFJl
c2l6ZSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0V2VzdFJlc2l6ZToKKyAgICAgICAgICAg
IHJldHVybiAiRWFzdFdlc3RSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0
U291dGhXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuICJOb3J0aEVhc3RTb3V0aFdlc3RS
ZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplOgor
ICAgICAgICAgICAgcmV0dXJuICJOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemUiOworICAgICAgICBj
YXNlIEN1cnNvcjo6Q29sdW1uUmVzaXplOgorICAgICAgICAgICAgcmV0dXJuICJDb2x1bW5SZXNp
emUiOworICAgICAgICBjYXNlIEN1cnNvcjo6Um93UmVzaXplOgorICAgICAgICAgICAgcmV0dXJu
ICJSb3dSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6TWlkZGxlUGFubmluZzoKKyAgICAg
ICAgICAgIHJldHVybiAiTWlkZGxlUGFubmluZyI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0
UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiAiRWFzdFBhbm5pbmciOworICAgICAgICBjYXNl
IEN1cnNvcjo6Tm9ydGhQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuICJOb3J0aFBhbm5pbmci
OworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKKyAgICAgICAgICAgIHJl
dHVybiAiTm9ydGhFYXN0UGFubmluZyI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RQ
YW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuICJOb3J0aFdlc3RQYW5uaW5nIjsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6OlNvdXRoUGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiAiU291dGhQYW5u
aW5nIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFBhbm5pbmc6CisgICAgICAgICAg
ICByZXR1cm4gIlNvdXRoRWFzdFBhbm5pbmciOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhX
ZXN0UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiAiU291dGhXZXN0UGFubmluZyI7CisgICAg
ICAgIGNhc2UgQ3Vyc29yOjpXZXN0UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiAiV2VzdFBh
bm5pbmciOworICAgICAgICBjYXNlIEN1cnNvcjo6TW92ZToKKyAgICAgICAgICAgIHJldHVybiAi
TW92ZSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpWZXJ0aWNhbFRleHQ6CisgICAgICAgICAgICBy
ZXR1cm4gIlZlcnRpY2FsVGV4dCI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDZWxsOgorICAgICAg
ICAgICAgcmV0dXJuICJDZWxsIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNvbnRleHRNZW51Ogor
ICAgICAgICAgICAgcmV0dXJuICJDb250ZXh0TWVudSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpB
bGlhczoKKyAgICAgICAgICAgIHJldHVybiAiQWxpYXMiOworICAgICAgICBjYXNlIEN1cnNvcjo6
UHJvZ3Jlc3M6CisgICAgICAgICAgICByZXR1cm4gIlByb2dyZXNzIjsKKyAgICAgICAgY2FzZSBD
dXJzb3I6Ok5vRHJvcDoKKyAgICAgICAgICAgIHJldHVybiAiTm9Ecm9wIjsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6OkNvcHk6CisgICAgICAgICAgICByZXR1cm4gIkNvcHkiOworICAgICAgICBjYXNl
IEN1cnNvcjo6Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAiTm9uZSI7CisgICAgICAgIGNhc2Ug
Q3Vyc29yOjpOb3RBbGxvd2VkOgorICAgICAgICAgICAgcmV0dXJuICJOb3RBbGxvd2VkIjsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6Olpvb21JbjoKKyAgICAgICAgICAgIHJldHVybiAiWm9vbUluIjsK
KyAgICAgICAgY2FzZSBDdXJzb3I6Olpvb21PdXQ6CisgICAgICAgICAgICByZXR1cm4gIlpvb21P
dXQiOworICAgICAgICBjYXNlIEN1cnNvcjo6R3JhYjoKKyAgICAgICAgICAgIHJldHVybiAiR3Jh
YiI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpHcmFiYmluZzoKKyAgICAgICAgICAgIHJldHVybiAi
R3JhYmJpbmciOworICAgICAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgorICAgICAgICAgICAgcmV0
dXJuICJDdXN0b20iOworICAgIH0KKworICAgIHJldHVybiAiRVJST1IiOworfQorCisjaWYgVVNF
KExBWllfTkFUSVZFX0NVUlNPUikKKworY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6UG9pbnRlcikpOwor
ICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGNyb3NzQ3Vyc29yKCkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Q3Jvc3MpKTsKKyAgICByZXR1
cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6SGFuZCkpOworICAgIHJldHVybiBjOworfQor
Citjb25zdCBDdXJzb3ImIG1vdmVDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Q3Vyc29yLCBjLCAoQ3Vyc29yOjpNb3ZlKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1
cnNvciYgdmVydGljYWxUZXh0Q3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1
cnNvciwgYywgKEN1cnNvcjo6VmVydGljYWxUZXh0KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2Nv
bnN0IEN1cnNvciYgY2VsbEN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJz
b3IsIGMsIChDdXJzb3I6OkNlbGwpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29y
JiBjb250ZXh0TWVudUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3Is
IGMsIChDdXJzb3I6OkNvbnRleHRNZW51KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1
cnNvciYgYWxpYXNDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBj
LCAoQ3Vyc29yOjpBbGlhcykpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHpv
b21JbkN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJz
b3I6Olpvb21JbikpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHpvb21PdXRD
dXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpa
b29tT3V0KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY29weUN1cnNvcigp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OkNvcHkpKTsK
KyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Tm9uZSkpOworICAgIHJldHVy
biBjOworfQorCitjb25zdCBDdXJzb3ImIHByb2dyZXNzQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6UHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4g
YzsKK30KKworY29uc3QgQ3Vyc29yJiBub0Ryb3BDdXJzb3IoKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpOb0Ryb3ApKTsKKyAgICByZXR1cm4gYzsKK30K
KworY29uc3QgQ3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Tm90QWxsb3dlZCkpOworICAgIHJldHVybiBjOwor
fQorCitjb25zdCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKEN1cnNvcjo6SUJlYW0pKTsKKyAgICByZXR1cm4gYzsKK30KKworY29u
c3QgQ3Vyc29yJiB3YWl0Q3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNv
ciwgYywgKEN1cnNvcjo6V2FpdCkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3Im
IGhlbHBDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vy
c29yOjpIZWxwKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFJlc2l6
ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6
OkVhc3RSZXNpemUpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFJl
c2l6ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJz
b3I6Ok5vcnRoUmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9y
dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwg
YywgKEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0
IEN1cnNvciYgbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Tm9ydGhXZXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpTb3V0aFJlc2l6ZSkpOworICAgIHJldHVy
biBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OlNvdXRoRWFzdFJlc2l6ZSkp
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNv
cigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OlNvdXRo
V2VzdFJlc2l6ZSkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHdlc3RSZXNp
emVDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29y
OjpXZXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhT
b3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMs
IChDdXJzb3I6Ok5vcnRoU291dGhSZXNpemUpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3Qg
Q3Vyc29yJiBlYXN0V2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChDdXJzb3IsIGMsIChDdXJzb3I6OkVhc3RXZXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9
CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Tm9ydGhFYXN0U291dGhX
ZXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0
U291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNv
ciwgYywgKEN1cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7
Cit9CisKK2NvbnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Q29sdW1uUmVzaXplKSk7CisgICAgcmV0
dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Um93UmVzaXplKSk7CisgICAgcmV0
dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbWlkZGxlUGFubmluZ0N1cnNvcigpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Ok1pZGRsZVBhbm5pbmcpKTsK
KyAgICByZXR1cm4gYzsKK30KKyAgICAKK2NvbnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3Io
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpFYXN0UGFu
bmluZykpOworICAgIHJldHVybiBjOworfQorICAgIAorY29uc3QgQ3Vyc29yJiBub3J0aFBhbm5p
bmdDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29y
OjpOb3J0aFBhbm5pbmcpKTsKKyAgICByZXR1cm4gYzsKK30KKyAgICAKK2NvbnN0IEN1cnNvciYg
bm9ydGhFYXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJz
b3IsIGMsIChDdXJzb3I6Ok5vcnRoRWFzdFBhbm5pbmcpKTsKKyAgICByZXR1cm4gYzsKK30KKyAg
ICAKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Ok5vcnRoV2VzdFBhbm5pbmcpKTsKKyAg
ICByZXR1cm4gYzsKK30KKyAgICAKK2NvbnN0IEN1cnNvciYgc291dGhQYW5uaW5nQ3Vyc29yKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6U291dGhQYW5u
aW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisgICAgCitjb25zdCBDdXJzb3ImIHNvdXRoRWFzdFBh
bm5pbmdDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vy
c29yOjpTb3V0aEVhc3RQYW5uaW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisgICAgCitjb25zdCBD
dXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpTb3V0aFdlc3RQYW5uaW5nKSk7CisgICAgcmV0dXJuIGM7
Cit9CisgICAgCitjb25zdCBDdXJzb3ImIHdlc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6V2VzdFBhbm5pbmcpKTsKKyAgICBy
ZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6R3JhYikpOworICAgIHJldHVybiBjOwor
fQorCitjb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6R3JhYmJpbmcpKTsKKyAgICByZXR1cm4gYzsKK30K
KworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vQ3Vyc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAkocmV2
aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxMiArMjYsMTUgQEAKICNpZm5kZWYgQ3Vyc29yX2gKICNkZWZpbmUgQ3Vyc29yX2gK
IAorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCBISUNPTl9f
KiBISUNPTjsKIHR5cGVkZWYgSElDT04gSENVUlNPUjsKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogI2VsaWYgUExBVEZPUk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0dka0N1cnNvciBHZGtDdXJz
b3I7CiAjZWxpZiBQTEFURk9STShRVCkKQEAgLTU5LDEwICs2MiwxMyBAQCB0eXBlZGVmIHN0cnVj
dCBISUNPTl9fICpISUNPTjsKIHR5cGVkZWYgSElDT04gSENVUlNPUjsKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShNQUMpCisjZGVmaW5lIFdURl9VU0VfTEFaWV9OQVRJ
VkVfQ1VSU09SIDEKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBJ
bWFnZTsKLSAgICBjbGFzcyBJbnRQb2ludDsKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBjbGFz
cyBTaGFyZWRDdXJzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRDdXJzb3I+IHsKQEAgLTc1
LDU1ICs4MSwxMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIQ1VSU09SIG1fbmF0
aXZlQ3Vyc29yOwogICAgIH07CiAgICAgdHlwZWRlZiBSZWZQdHI8U2hhcmVkQ3Vyc29yPiBQbGF0
Zm9ybUN1cnNvcjsKLSAgICB0eXBlZGVmIEhDVVJTT1IgUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAj
ZWxpZiBQTEFURk9STShNQUMpCiAgICAgdHlwZWRlZiBOU0N1cnNvciogUGxhdGZvcm1DdXJzb3I7
Ci0gICAgdHlwZWRlZiBOU0N1cnNvciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFU
Rk9STShHVEspCiAgICAgdHlwZWRlZiBHZGtDdXJzb3IqIFBsYXRmb3JtQ3Vyc29yOwotICAgIHR5
cGVkZWYgR2RrQ3Vyc29yKiBQbGF0Zm9ybUN1cnNvckhhbmRsZTsKICNlbGlmIFBMQVRGT1JNKEVG
TCkKICAgICB0eXBlZGVmIGNvbnN0IGNoYXIqIFBsYXRmb3JtQ3Vyc29yOwotICAgIHR5cGVkZWYg
Y29uc3QgY2hhciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkgJiYg
IWRlZmluZWQoUVRfTk9fQ1VSU09SKQogICAgIHR5cGVkZWYgUUN1cnNvciBQbGF0Zm9ybUN1cnNv
cjsKLSAgICB0eXBlZGVmIFFDdXJzb3IqIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOwogI2VsaWYgUExB
VEZPUk0oV1gpCiAgICAgdHlwZWRlZiB3eEN1cnNvciogUGxhdGZvcm1DdXJzb3I7Ci0gICAgdHlw
ZWRlZiB3eEN1cnNvciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFURk9STShDSFJP
TUlVTSkKICAgICAvLyBTZWUgUGxhdGZvcm1DdXJzb3IuaAotICAgIHR5cGVkZWYgdm9pZCogUGxh
dGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFURk9STShIQUlLVSkKICAgICB0eXBlZGVmIEJD
dXJzb3IqIFBsYXRmb3JtQ3Vyc29yOwotICAgIHR5cGVkZWYgQkN1cnNvciogUGxhdGZvcm1DdXJz
b3JIYW5kbGU7CiAjZWxzZQogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1DdXJzb3I7Ci0gICAg
dHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUN1cnNvckhhbmRsZTsKICNlbmRpZgogCiAgICAgY2xhc3Mg
Q3Vyc29yIHsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gVHlwZSB7CisgICAgICAgICAgICBQ
b2ludGVyLAorICAgICAgICAgICAgQ3Jvc3MsCisgICAgICAgICAgICBIYW5kLAorICAgICAgICAg
ICAgSUJlYW0sCisgICAgICAgICAgICBXYWl0LAorICAgICAgICAgICAgSGVscCwKKyAgICAgICAg
ICAgIEVhc3RSZXNpemUsCisgICAgICAgICAgICBOb3J0aFJlc2l6ZSwKKyAgICAgICAgICAgIE5v
cnRoRWFzdFJlc2l6ZSwKKyAgICAgICAgICAgIE5vcnRoV2VzdFJlc2l6ZSwKKyAgICAgICAgICAg
IFNvdXRoUmVzaXplLAorICAgICAgICAgICAgU291dGhFYXN0UmVzaXplLAorICAgICAgICAgICAg
U291dGhXZXN0UmVzaXplLAorICAgICAgICAgICAgV2VzdFJlc2l6ZSwKKyAgICAgICAgICAgIE5v
cnRoU291dGhSZXNpemUsCisgICAgICAgICAgICBFYXN0V2VzdFJlc2l6ZSwKKyAgICAgICAgICAg
IE5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZSwKKyAgICAgICAgICAgIE5vcnRoV2VzdFNvdXRoRWFz
dFJlc2l6ZSwKKyAgICAgICAgICAgIENvbHVtblJlc2l6ZSwKKyAgICAgICAgICAgIFJvd1Jlc2l6
ZSwKKyAgICAgICAgICAgIE1pZGRsZVBhbm5pbmcsCisgICAgICAgICAgICBFYXN0UGFubmluZywK
KyAgICAgICAgICAgIE5vcnRoUGFubmluZywKKyAgICAgICAgICAgIE5vcnRoRWFzdFBhbm5pbmcs
CisgICAgICAgICAgICBOb3J0aFdlc3RQYW5uaW5nLAorICAgICAgICAgICAgU291dGhQYW5uaW5n
LAorICAgICAgICAgICAgU291dGhFYXN0UGFubmluZywKKyAgICAgICAgICAgIFNvdXRoV2VzdFBh
bm5pbmcsCisgICAgICAgICAgICBXZXN0UGFubmluZywKKyAgICAgICAgICAgIE1vdmUsCisgICAg
ICAgICAgICBWZXJ0aWNhbFRleHQsCisgICAgICAgICAgICBDZWxsLAorICAgICAgICAgICAgQ29u
dGV4dE1lbnUsCisgICAgICAgICAgICBBbGlhcywKKyAgICAgICAgICAgIFByb2dyZXNzLAorICAg
ICAgICAgICAgTm9Ecm9wLAorICAgICAgICAgICAgQ29weSwKKyAgICAgICAgICAgIE5vbmUsCisg
ICAgICAgICAgICBOb3RBbGxvd2VkLAorICAgICAgICAgICAgWm9vbUluLAorICAgICAgICAgICAg
Wm9vbU91dCwKKyAgICAgICAgICAgIEdyYWIsCisgICAgICAgICAgICBHcmFiYmluZywKKyAgICAg
ICAgICAgIEN1c3RvbQorICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBjb25zdCBDdXJzb3Im
IGZyb21UeXBlKEN1cnNvcjo6VHlwZSk7CisKICAgICAgICAgQ3Vyc29yKCkKICNpZiAhUExBVEZP
Uk0oUVQpICYmICFQTEFURk9STShFRkwpCi0gICAgICAgIDogbV9pbXBsKDApCisgICAgICAgICAg
ICA6IG1fcGxhdGZvcm1DdXJzb3IoMCkKICNlbmRpZgotICAgICAgICB7IH0KKyAgICAgICAgewor
ICAgICAgICB9CiAKICAgICAgICAgQ3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQmIGhvdFNw
b3QpOwogICAgICAgICBDdXJzb3IoY29uc3QgQ3Vyc29yJik7CiAgICAgICAgIH5DdXJzb3IoKTsK
ICAgICAgICAgQ3Vyc29yJiBvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJik7CiAKKyNpZiBVU0UoTEFa
WV9OQVRJVkVfQ1VSU09SKQorICAgICAgICBDdXJzb3IoVHlwZSk7CisgICAgICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0IEludFBvaW50JiBob3RT
cG90KCkgY29uc3QgeyByZXR1cm4gbV9ob3RTcG90OyB9CisgICAgICAgIFBsYXRmb3JtQ3Vyc29y
IHBsYXRmb3JtQ3Vyc29yKCkgY29uc3Q7CisjZWxzZQogICAgICAgICBDdXJzb3IoUGxhdGZvcm1D
dXJzb3IpOwotICAgICAgICBQbGF0Zm9ybUN1cnNvciBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsOyB9CisgICAgICAgIFBsYXRmb3JtQ3Vyc29yIGltcGwoKSBjb25zdCB7IHJldHVybiBtX3Bs
YXRmb3JtQ3Vyc29yOyB9CisjZW5kaWYKIAogICAgICBwcml2YXRlOgotICAgICAgICBQbGF0Zm9y
bUN1cnNvciBtX2ltcGw7CisjaWYgVVNFKExBWllfTkFUSVZFX0NVUlNPUikKKyAgICAgICAgVHlw
ZSBtX3R5cGU7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICAgICAgSW50UG9p
bnQgbV9ob3RTcG90OworI2VuZGlmCisKKyAgICAgICAgbXV0YWJsZSBQbGF0Zm9ybUN1cnNvciBt
X3BsYXRmb3JtQ3Vyc29yOwogICAgIH07CiAKICAgICBJbnRQb2ludCBkZXRlcm1pbmVIb3RTcG90
KEltYWdlKiwgY29uc3QgSW50UG9pbnQmIHNwZWNpZmllZEhvdFNwb3QpOwotCisgICAgY29uc3Qg
Y2hhciogbmFtZUZvckN1cnNvclR5cGUoQ3Vyc29yOjpUeXBlKTsKKyAgICAKICAgICBjb25zdCBD
dXJzb3ImIHBvaW50ZXJDdXJzb3IoKTsKICAgICBjb25zdCBDdXJzb3ImIGNyb3NzQ3Vyc29yKCk7
CiAgICAgY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L0hvc3RXaW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cu
aAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEN1cnNvcjsKKwogY2xhc3MgSG9zdFdpbmRvdyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+SG9zdFdpbmRvdygpIHsgfQpAQCAtNTYsNiArNTgsOSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgLy8gVG8gbm90aWZ5IFdlYktpdCBvZiBzY3JvbGxiYXIgbW9kZSBj
aGFuZ2VzLgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0
ID0gMDsKKworICAgIC8vIFJlcXVlc3QgdGhhdCB0aGUgY3Vyc29yIGNoYW5nZS4KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9DdXJzb3JNYWMubW0JKHJldmlzaW9uIDYz
MTAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ3Vyc29yTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9y
dCAiRm91bmRhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCAiSW1hZ2UuaCIKLSNpbXBvcnQgIkludFBv
aW50LmgiCiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIEBpbnRlcmZhY2UgV2ViQ29y
ZUN1cnNvckJ1bmRsZSA6IE5TT2JqZWN0IHsgfQpAQCAtNTAsNyArNDgsNyBAQCBzdGF0aWMgTlND
dXJzb3IqIGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFnCiAgICAgaWYgKCFpbWcpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW1tO
U0N1cnNvciBhbGxvY10gaW5pdFdpdGhJbWFnZTppbWcgaG90U3BvdDpkZXRlcm1pbmVIb3RTcG90
KGltYWdlLCBob3RTcG90KV07CisgICAgcmV0dXJuIFtbTlNDdXJzb3IgYWxsb2NdIGluaXRXaXRo
SW1hZ2U6aW1nIGhvdFNwb3Q6aG90U3BvdF07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKICAgICByZXR1cm4gMDsKIH0KQEAgLTc2LDI4MSArNzQsMTM3IEBAIHN0YXRpYyBOU0N1cnNv
ciogbGVha05hbWVkQ3Vyc29yKGNvbnN0IGMKICAgICByZXR1cm4gbmlsOwogfQogCi1DdXJzb3I6
OkN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQotICAgIDogbV9p
bXBsKEhhcmRSZXRhaW5XaXRoTlNSZWxlYXNlKGNyZWF0ZUN1c3RvbUN1cnNvcihpbWFnZSwgaG90
U3BvdCkpKQotewotfQotCi1DdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQotICAg
IDogbV9pbXBsKEhhcmRSZXRhaW4ob3RoZXIubV9pbXBsKSkKLXsKLX0KLQotQ3Vyc29yOjp+Q3Vy
c29yKCkKLXsKLSAgICBIYXJkUmVsZWFzZShtX2ltcGwpOwotfQotCi1DdXJzb3ImIEN1cnNvcjo6
b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCi17Ci0gICAgSGFyZFJldGFpbihvdGhlci5t
X2ltcGwpOwotICAgIEhhcmRSZWxlYXNlKG1faW1wbCk7Ci0gICAgbV9pbXBsID0gb3RoZXIubV9p
bXBsOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotQ3Vyc29yOjpDdXJzb3IoTlNDdXJzb3IqIGMp
Ci0gICAgOiBtX2ltcGwoSGFyZFJldGFpbihjKSkKLXsKLX0KLQotY29uc3QgQ3Vyc29yJiBwb2lu
dGVyQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKFtOU0N1
cnNvciBhcnJvd0N1cnNvcl0pKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBj
cm9zc0N1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFr
TmFtZWRDdXJzb3IoImNyb3NzSGFpckN1cnNvciIsIDExLCAxMSkpKTsKLSAgICByZXR1cm4gYzsK
LX0KLQotY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigibGlua0N1cnNvciIsIDYsIDEpKSk7Ci0g
ICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbW92ZUN1cnNvcigpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoIm1vdmVDdXJzb3Ii
LCA3LCA3KSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4
dEN1cnNvcigpCitzdGF0aWMgTlNDdXJzb3IgKmNyZWF0ZVBsYXRmb3JtQ3Vyc29yKEN1cnNvcjo6
VHlwZSB0eXBlLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJ2ZXJ0aWNh
bFRleHRDdXJzb3IiLCA3LCA3KSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3Im
IGNlbGxDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVh
a05hbWVkQ3Vyc29yKCJjZWxsQ3Vyc29yIiwgNywgNykpKTsKLSAgICByZXR1cm4gYzsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBjb250ZXh0TWVudUN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoImNvbnRleHRNZW51Q3Vyc29yIiwgMywg
MikpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigpCi17
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoImFs
aWFzQ3Vyc29yIiwgMTEsIDMpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
em9vbUluQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxl
YWtOYW1lZEN1cnNvcigiem9vbUluQ3Vyc29yIiwgNywgNykpKTsKLSAgICByZXR1cm4gYzsKLX0K
LQotY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigiem9vbU91dEN1cnNvciIsIDcsIDcpKSk7
Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY29weUN1cnNvcigpCi17Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoImNvcHlDdXJz
b3IiLCAzLCAyKSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vbmVDdXJz
b3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vy
c29yKCJub25lQ3Vyc29yIiwgNywgNykpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBwcm9ncmVzc0N1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3Is
IGMsIChsZWFrTmFtZWRDdXJzb3IoInByb2dyZXNzQ3Vyc29yIiwgMywgMikpKTsKLSAgICByZXR1
cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub0Ryb3BDdXJzb3IoKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJub0Ryb3BDdXJzb3IiLCAz
LCAxKSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRDdXJz
b3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vy
c29yKCJub3RBbGxvd2VkQ3Vyc29yIiwgMTEsIDExKSkpOwotICAgIHJldHVybiBjOwotfQotCi1j
b25zdCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1
cnNvciwgYywgKFtOU0N1cnNvciBJQmVhbUN1cnNvcl0pKTsKLSAgICByZXR1cm4gYzsKLX0KLQot
Y29uc3QgQ3Vyc29yJiB3YWl0Q3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1
cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigid2FpdEN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoImhlbHBDdXJzb3IiLCA4LCA4
KSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3Io
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29y
KCJlYXN0UmVzaXplQ3Vyc29yIiwgMTQsIDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Q3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJub3J0aFJlc2l6ZUN1cnNvciIsIDcsIDEpKSk7
Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVzaXplQ3Vyc29y
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNv
cigibm9ydGhFYXN0UmVzaXplQ3Vyc29yIiwgMTQsIDEpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigibm9ydGhXZXN0UmVzaXplQ3Vy
c29yIiwgMCwgMCkpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBzb3V0aFJl
c2l6ZUN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFr
TmFtZWRDdXJzb3IoInNvdXRoUmVzaXplQ3Vyc29yIiwgNywgMTQpKSk7Ci0gICAgcmV0dXJuIGM7
Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigic291dGhFYXN0UmVz
aXplQ3Vyc29yIiwgMTQsIDE0KSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3Im
IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJz
b3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoInNvdXRoV2VzdFJlc2l6ZUN1cnNvciIsIDEsIDE0KSkp
OwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHdlc3RSZXNpemVDdXJzb3IoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJ3
ZXN0UmVzaXplQ3Vyc29yIiwgMSwgNykpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBub3J0aFNvdXRoUmVzaXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigibm9ydGhTb3V0aFJlc2l6ZUN1cnNvciIsIDcs
IDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVD
dXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVk
Q3Vyc29yKCJlYXN0V2VzdFJlc2l6ZUN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpQb2ludGVyOgorICAg
ICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4oW05TQ3Vyc29yIGFycm93Q3Vyc29yXSk7CisgICAg
ICAgIGNhc2UgQ3Vyc29yOjpDcm9zczoKKyAgICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKGxl
YWtOYW1lZEN1cnNvcigiY3Jvc3NIYWlyQ3Vyc29yIiwgMTEsIDExKSk7CisgICAgICAgIGNhc2Ug
Q3Vyc29yOjpIYW5kOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vy
c29yKCJsaW5rQ3Vyc29yIiwgNiwgMSkpOworICAgICAgICBjYXNlIEN1cnNvcjo6SUJlYW06Cisg
ICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihbTlNDdXJzb3IgSUJlYW1DdXJzb3JdKTsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6OldhaXQ6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihs
ZWFrTmFtZWRDdXJzb3IoIndhaXRDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpIZWxwOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJo
ZWxwQ3Vyc29yIiwgOCwgOCkpOworICAgICAgICBjYXNlIEN1cnNvcjo6TW92ZToKKyAgICAgICAg
Y2FzZSBDdXJzb3I6Ok1pZGRsZVBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFp
bihsZWFrTmFtZWRDdXJzb3IoIm1vdmVDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIGNhc2UgQ3Vy
c29yOjpFYXN0UmVzaXplOgorICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFBhbm5pbmc6CisgICAg
ICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoImVhc3RSZXNpemVDdXJz
b3IiLCAxNCwgNykpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhSZXNpemU6CisgICAgICAg
IGNhc2UgQ3Vyc29yOjpOb3J0aFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFp
bihsZWFrTmFtZWRDdXJzb3IoIm5vcnRoUmVzaXplQ3Vyc29yIiwgNywgMSkpOworICAgICAgICBj
YXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgorICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhF
YXN0UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNv
cigibm9ydGhFYXN0UmVzaXplQ3Vyc29yIiwgMTQsIDEpKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6
Ok5vcnRoV2VzdFJlc2l6ZToKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFBhbm5pbmc6
CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vcnRoV2Vz
dFJlc2l6ZUN1cnNvciIsIDAsIDApKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXpl
OgorICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJu
IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJzb3V0aFJlc2l6ZUN1cnNvciIsIDcsIDE0KSk7
CisgICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RSZXNpemU6CisgICAgICAgIGNhc2UgQ3Vy
c29yOjpTb3V0aEVhc3RQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVh
a05hbWVkQ3Vyc29yKCJzb3V0aEVhc3RSZXNpemVDdXJzb3IiLCAxNCwgMTQpKTsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6OlNvdXRoV2VzdFJlc2l6ZToKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRo
V2VzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJz
b3IoInNvdXRoV2VzdFJlc2l6ZUN1cnNvciIsIDEsIDE0KSk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vy
c29yKCJ3ZXN0UmVzaXplQ3Vyc29yIiwgMSwgNykpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9y
dGhTb3V0aFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1
cnNvcigibm9ydGhTb3V0aFJlc2l6ZUN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgY2FzZSBDdXJz
b3I6OkVhc3RXZXN0UmVzaXplOgorICAgICAgICBjYXNlIEN1cnNvcjo6V2VzdFBhbm5pbmc6Cisg
ICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoImVhc3RXZXN0UmVz
aXplQ3Vyc29yIiwgNywgNykpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0U291dGhX
ZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29y
KCJub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIGNhc2Ug
Q3Vyc29yOjpOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gSGFy
ZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvciIs
IDcsIDcpKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNvbHVtblJlc2l6ZToKKyAgICAgICAgICAg
IHJldHVybiBbTlNDdXJzb3IgcmVzaXplTGVmdFJpZ2h0Q3Vyc29yXTsKKyAgICAgICAgY2FzZSBD
dXJzb3I6OlJvd1Jlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBbTlNDdXJzb3IgcmVzaXplVXBE
b3duQ3Vyc29yXTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlZlcnRpY2FsVGV4dDoKKyAgICAgICAg
ICAgIHJldHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigidmVydGljYWxUZXh0Q3Vyc29y
IiwgNywgNykpOworICAgICAgICBjYXNlIEN1cnNvcjo6Q2VsbDoKKyAgICAgICAgICAgIHJldHVy
biBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigiY2VsbEN1cnNvciIsIDcsIDcpKTsKKyAgICAg
ICAgY2FzZSBDdXJzb3I6OkNvbnRleHRNZW51OgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRh
aW4obGVha05hbWVkQ3Vyc29yKCJjb250ZXh0TWVudUN1cnNvciIsIDMsIDIpKTsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6OkFsaWFzOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05h
bWVkQ3Vyc29yKCJhbGlhc0N1cnNvciIsIDExLCAzKSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpQ
cm9ncmVzczoKKyAgICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigi
cHJvZ3Jlc3NDdXJzb3IiLCAzLCAyKSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb0Ryb3A6Cisg
ICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vRHJvcEN1cnNv
ciIsIDMsIDEpKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNvcHk6CisgICAgICAgICAgICByZXR1
cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoImNvcHlDdXJzb3IiLCAzLCAyKSk7CisgICAg
ICAgIGNhc2UgQ3Vyc29yOjpOb25lOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVh
a05hbWVkQ3Vyc29yKCJub25lQ3Vyc29yIiwgNywgNykpOworICAgICAgICBjYXNlIEN1cnNvcjo6
Tm90QWxsb3dlZDoKKyAgICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNv
cigibm90QWxsb3dlZEN1cnNvciIsIDExLCAxMSkpOworICAgICAgICBjYXNlIEN1cnNvcjo6Wm9v
bUluOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJ6b29t
SW5DdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpab29tT3V0OgorICAgICAg
ICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJ6b29tT3V0Q3Vyc29yIiwg
NywgNykpOworICAgICAgICBjYXNlIEN1cnNvcjo6R3JhYjoKKyAgICAgICAgICAgIHJldHVybiBI
YXJkUmV0YWluKFtOU0N1cnNvciBvcGVuSGFuZEN1cnNvcl0pOworICAgICAgICBjYXNlIEN1cnNv
cjo6R3JhYmJpbmc6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihbTlNDdXJzb3IgY2xv
c2VkSGFuZEN1cnNvcl0pOworICAgICAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgorICAgICAgICAg
ICAgcmV0dXJuIEhhcmRSZXRhaW5XaXRoTlNSZWxlYXNlKGNyZWF0ZUN1c3RvbUN1cnNvcihpbWFn
ZSwgaG90U3BvdCkpOworICAgIH0KIAotY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RTb3V0aFdlc3RS
ZXNpemVDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVh
a05hbWVkQ3Vyc29yKCJub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IiLCA3LCA3KSkpOwot
ICAgIHJldHVybiBjOworICAgIHJldHVybiAwOwogfQogCi1jb25zdCBDdXJzb3ImIG5vcnRoV2Vz
dFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCitDdXJzb3I6OkN1cnNvcihJbWFnZSogaW1hZ2UsIGNv
bnN0IEludFBvaW50JiBob3RTcG90KQorICAgIDogbV90eXBlKEN1c3RvbSkKKyAgICAsIG1faW1h
Z2UoaW1hZ2UpCisgICAgLCBtX2hvdFNwb3QoZGV0ZXJtaW5lSG90U3BvdChpbWFnZSwgaG90U3Bv
dCkpCisgICAgLCBtX3BsYXRmb3JtQ3Vyc29yKDApCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoIm5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1
cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0dXJuIGM7CiB9CiAKLWNvbnN0IEN1cnNvciYgY29sdW1u
UmVzaXplQ3Vyc29yKCkKK0N1cnNvcjo6Q3Vyc29yKFR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0
eXBlKQorICAgICwgbV9wbGF0Zm9ybUN1cnNvcigwKQogewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29yIHJlc2l6ZUxlZnRSaWdodEN1cnNvcl0pKTsKLSAgICBy
ZXR1cm4gYzsKIH0KIAotY29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJzb3IoKQorQ3Vyc29yOjpD
dXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKKyAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCisg
ICAgLCBtX2ltYWdlKG90aGVyLm1faW1hZ2UpCisgICAgLCBtX2hvdFNwb3Qob3RoZXIubV9ob3RT
cG90KQorICAgICwgbV9wbGF0Zm9ybUN1cnNvcihIYXJkUmV0YWluKG90aGVyLm1fcGxhdGZvcm1D
dXJzb3IpKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29y
IHJlc2l6ZVVwRG93bkN1cnNvcl0pKTsKLSAgICByZXR1cm4gYzsKIH0KIAotY29uc3QgQ3Vyc29y
JiBtaWRkbGVQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gbW92ZUN1cnNvcigpOwotfQot
ICAgIAotY29uc3QgQ3Vyc29yJiBlYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIGVh
c3RSZXNpemVDdXJzb3IoKTsKLX0KLSAgICAKLWNvbnN0IEN1cnNvciYgbm9ydGhQYW5uaW5nQ3Vy
c29yKCkKLXsKLSAgICByZXR1cm4gbm9ydGhSZXNpemVDdXJzb3IoKTsKLX0KLSAgICAKLWNvbnN0
IEN1cnNvciYgbm9ydGhFYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIG5vcnRoRWFz
dFJlc2l6ZUN1cnNvcigpOwotfQotICAgIAotY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RQYW5uaW5n
Q3Vyc29yKCkKLXsKLSAgICByZXR1cm4gbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCk7Ci19Ci0gICAg
Ci1jb25zdCBDdXJzb3ImIHNvdXRoUGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRo
UmVzaXplQ3Vyc29yKCk7Ci19Ci0gICAgCi1jb25zdCBDdXJzb3ImIHNvdXRoRWFzdFBhbm5pbmdD
dXJzb3IoKQotewotICAgIHJldHVybiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKLX0KLSAgICAK
LWNvbnN0IEN1cnNvciYgc291dGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNv
dXRoV2VzdFJlc2l6ZUN1cnNvcigpOwotfQotICAgIAotY29uc3QgQ3Vyc29yJiB3ZXN0UGFubmlu
Z0N1cnNvcigpCitDdXJzb3I6On5DdXJzb3IoKQogewotICAgIHJldHVybiB3ZXN0UmVzaXplQ3Vy
c29yKCk7CisgICAgSGFyZFJlbGVhc2UobV9wbGF0Zm9ybUN1cnNvcik7CiB9CiAKLWNvbnN0IEN1
cnNvciYgZ3JhYkN1cnNvcigpCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNv
ciYgb3RoZXIpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChbTlNDdXJz
b3Igb3BlbkhhbmRDdXJzb3JdKSk7Ci0gICAgcmV0dXJuIGM7CisgICAgbV90eXBlID0gb3RoZXIu
bV90eXBlOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOworICAgIG1faG90U3BvdCA9IG90
aGVyLm1faG90U3BvdDsKKworICAgIEhhcmRSZXRhaW4ob3RoZXIubV9wbGF0Zm9ybUN1cnNvcik7
CisgICAgSGFyZFJlbGVhc2UobV9wbGF0Zm9ybUN1cnNvcik7CisgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7CisgICAgcmV0dXJuICp0aGlzOwogfQogCi1jb25z
dCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKK1BsYXRmb3JtQ3Vyc29yIEN1cnNvcjo6cGxhdGZv
cm1DdXJzb3IoKSBjb25zdAogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAo
W05TQ3Vyc29yIGNsb3NlZEhhbmRDdXJzb3JdKSk7Ci0gICAgcmV0dXJuIGM7CisgICAgaWYgKCFt
X3BsYXRmb3JtQ3Vyc29yKQorICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlUGxhdGZv
cm1DdXJzb3IobV90eXBlLCBtX2ltYWdlLmdldCgpLCBtX2hvdFNwb3QpOworICAgIHJldHVybiBt
X3BsYXRmb3JtQ3Vyc29yOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL1dpZGdldE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTIzLDExICsxMjMsMTIg
QEAgdm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wgZm9jdXNlZCkKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogfQogCi0gdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3Im
IGN1cnNvcikKLSB7Ci0gICAgaWYgKFtOU0N1cnNvciBjdXJyZW50Q3Vyc29yXSA9PSBjdXJzb3Iu
aW1wbCgpKQordm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sK
KyAgICBTY3JvbGxWaWV3KiB2aWV3ID0gcm9vdCgpOworICAgIGlmICghdmlldykKICAgICAgICAg
cmV0dXJuOwotICAgIFtjdXJzb3IuaW1wbCgpIHNldF07CisgICAgdmlldy0+aG9zdFdpbmRvdygp
LT5zZXRDdXJzb3IoY3Vyc29yKTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNob3coKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd2luL0N1cnNvcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBv
dGhlcikKLSAgICA6IG1faW1wbChvdGhlci5tX2ltcGwpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzdXBwb3J0c0FscGhhQ3Vyc29ycygpIAogewogICAgIE9TVkVSU0lPTklORk8gb3NpbmZv
ID0gezB9OwpAQCAtNTIsOCArNDcsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHN1cHBvcnRzQWxw
aGFDdXJzb3JzKAogICAgIHJldHVybiBvc2luZm8uZHdNYWpvclZlcnNpb24gPiA1IHx8IChvc2lu
Zm8uZHdNYWpvclZlcnNpb24gPT0gNSAmJiBvc2luZm8uZHdNaW5vclZlcnNpb24gPiAwKTsKIH0K
IAotQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqIGltZywgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpCitz
dGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGNyZWF0ZVNoYXJlZEN1cnNvcihJbWFnZSog
aW1nLCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCkKIHsKKyAgICBSZWZQdHI8U2hhcmVkQ3Vyc29y
PiBpbXBsOworCiAgICAgSW50UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVybWluZUhvdFNw
b3QoaW1nLCBob3RTcG90KTsKICAgICBzdGF0aWMgYm9vbCBkb0FscGhhID0gc3VwcG9ydHNBbHBo
YUN1cnNvcnMoKTsKICAgICBCaXRtYXBJbmZvIGN1cnNvckltYWdlID0gQml0bWFwSW5mbzo6Y3Jl
YXRlKEludFNpemUoaW1nLT53aWR0aCgpLCBpbWctPmhlaWdodCgpKSk7CkBAIC04MCw3ICs3Nyw3
IEBAIEN1cnNvcjo6Q3Vyc29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW4KICAgICAgICAgaWku
aGJtTWFzayA9IGhNYXNrLmdldCgpOwogICAgICAgICBpaS5oYm1Db2xvciA9IGhDdXJzb3IuZ2V0
KCk7CiAKLSAgICAgICAgbV9pbXBsID0gU2hhcmVkQ3Vyc29yOjpjcmVhdGUoQ3JlYXRlSWNvbklu
ZGlyZWN0KCZpaSkpOworICAgICAgICBpbXBsID0gU2hhcmVkQ3Vyc29yOjpjcmVhdGUoQ3JlYXRl
SWNvbkluZGlyZWN0KCZpaSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFBsYXRmb3JtIGRv
ZXNuJ3Qgc3VwcG9ydCBhbHBoYSBibGVuZGVkIGN1cnNvcnMsIHNvIHdlIG5lZWQKICAgICAgICAg
Ly8gdG8gY3JlYXRlIHRoZSBtYXNrIG1hbnVhbGx5CkBAIC0xMTUsMzAzICsxMTIsMTY2IEBAIEN1
cnNvcjo6Q3Vyc29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW4KICAgICAgICAgaWNvbi55SG90
c3BvdCA9IGVmZmVjdGl2ZUhvdFNwb3QueSgpOwogICAgICAgICBpY29uLmhibU1hc2sgPSBhbmRN
YXNrLmdldCgpOwogICAgICAgICBpY29uLmhibUNvbG9yID0geG9yTWFzay5nZXQoKTsKLSAgICAg
ICAgbV9pbXBsID0gU2hhcmVkQ3Vyc29yOjpjcmVhdGUoQ3JlYXRlSWNvbkluZGlyZWN0KCZpY29u
KSk7CisgICAgICAgIGltcGwgPSBTaGFyZWRDdXJzb3I6OmNyZWF0ZShDcmVhdGVJY29uSW5kaXJl
Y3QoJmljb24pKTsKIAogICAgICAgICBEZWxldGVEQyh4b3JNYXNrREMpOwogICAgICAgICBEZWxl
dGVEQyhhbmRNYXNrREMpOwogICAgIH0KICAgICBEZWxldGVEQyh3b3JraW5nREMpOwogICAgIFJl
bGVhc2VEQygwLCBkYyk7Ci19Ci0KLUN1cnNvcjo6fkN1cnNvcigpCi17Ci19CiAKLUN1cnNvciYg
Q3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKLXsKLSAgICBtX2ltcGwgPSBv
dGhlci5tX2ltcGw7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIHJldHVybiBpbXBsLnJlbGVhc2Uo
KTsKIH0KIAotQ3Vyc29yOjpDdXJzb3IoUGxhdGZvcm1DdXJzb3IgYykKLSAgICA6IG1faW1wbChj
KQorc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQ3Vyc29yPiBsb2FkU2hhcmVkQ3Vyc29yKEhJTlNU
QU5DRSBoSW5zdGFuY2UsIExQQ1RTVFIgbHBDdXJzb3JOYW1lKQogeworICAgIHJldHVybiBTaGFy
ZWRDdXJzb3I6OmNyZWF0ZSg6OkxvYWRDdXJzb3IoaEluc3RhbmNlLCBscEN1cnNvck5hbWUpKTsK
IH0KIAotc3RhdGljIEN1cnNvciBsb2FkQ3Vyc29yQnlOYW1lKGNoYXIqIG5hbWUsIGludCB4LCBp
bnQgeSkgCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGxvYWRDdXJzb3JCeU5hbWUo
Y2hhciogbmFtZSwgaW50IHgsIGludCB5KQogewogICAgIEludFBvaW50IGhvdFNwb3QoeCwgeSk7
Ci0gICAgQ3Vyc29yIGM7CiAgICAgUmVmUHRyPEltYWdlPiBjdXJzb3JJbWFnZShJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UobmFtZSkpOwotICAgIGlmIChjdXJzb3JJbWFnZSAmJiAhY3Vyc29y
SW1hZ2UtPmlzTnVsbCgpKSAKLSAgICAgICAgYyA9IEN1cnNvcihjdXJzb3JJbWFnZS5nZXQoKSwg
aG90U3BvdCk7Ci0gICAgZWxzZQotICAgICAgICBjID0gcG9pbnRlckN1cnNvcigpOwotICAgIHJl
dHVybiBjOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGxvYWRTaGFyZWRD
dXJzb3IoSElOU1RBTkNFIGhJbnN0YW5jZSwgTFBDVFNUUiBscEN1cnNvck5hbWUpCi17Ci0gICAg
cmV0dXJuIFNoYXJlZEN1cnNvcjo6Y3JlYXRlKExvYWRDdXJzb3IoaEluc3RhbmNlLCBscEN1cnNv
ck5hbWUpKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKLXsKLSAgICBzdGF0
aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19BUlJPVyk7Ci0gICAgcmV0dXJu
IGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJz
b3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0NST1NTKTsKLSAgICByZXR1cm4gYzsKLX0K
LQotY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBs
b2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19IQU5EKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3Qg
Q3Vyc29yJiBpQmVhbUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJl
ZEN1cnNvcigwLCBJRENfSUJFQU0pOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3Im
IHdhaXRDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3Io
MCwgSURDX1dBSVQpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGhlbHBDdXJz
b3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0hF
TFApOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3Io
KQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVX
RSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3Io
KQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVO
Uyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVzaXplQ3Vy
c29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19T
SVpFTkVTVyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVz
aXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAs
IElEQ19TSVpFTldTRSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhS
ZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3Io
MCwgSURDX1NJWkVOUyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhF
YXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vy
c29yKDAsIElEQ19TSVpFTldTRSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
c291dGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hh
cmVkQ3Vyc29yKDAsIElEQ19TSVpFTkVTVyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgd2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNo
YXJlZEN1cnNvcigwLCBJRENfU0laRVdFKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBub3J0aFNvdXRoUmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBs
b2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTlMpOwotICAgIHJldHVybiBjOwotfQotCi1jb25z
dCBDdXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMg
PSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFV0UpOwotICAgIHJldHVybiBjOwotfQotCi1j
b25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3Rh
dGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRU5FU1cpOwotICAgIHJl
dHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNv
cigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0la
RU5XU0UpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1
cnNvcigpCi17Ci0gICAgLy8gRklYTUU6IFdpbmRvd3MgZG9lcyBub3QgaGF2ZSBhIHN0YW5kYXJk
IGNvbHVtbiByZXNpemUgY3Vyc29yIDxyZGFyOi8vcHJvYmxlbS81MDE4NTkxPgotICAgIHN0YXRp
YyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVXRSk7Ci0gICAgcmV0dXJu
IGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKLXsKLSAgICAvLyBGSVhN
RTogV2luZG93cyBkb2VzIG5vdCBoYXZlIGEgc3RhbmRhcmQgcm93IHJlc2l6ZSBjdXJzb3IgPHJk
YXI6Ly9wcm9ibGVtLzUwMTg1OTE+Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1
cnNvcigwLCBJRENfU0laRU5TKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBt
aWRkbGVQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ3Vyc29yIGMgPSBsb2Fk
Q3Vyc29yQnlOYW1lKCJwYW5JY29uIiwgOCwgOCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3Ig
YyA9IGxvYWRDdXJzb3JCeU5hbWUoInBhbkVhc3RDdXJzb3IiLCA3LCA3KTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFBhbm5pbmdDdXJzb3IoKQotewotICAgIHN0YXRp
YyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInBhbk5vcnRoQ3Vyc29yIiwgNywg
Nyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0UGFubmluZ0N1
cnNvcigpCi17Ci0gICAgc3RhdGljIGNvbnN0IEN1cnNvciBjID0gbG9hZEN1cnNvckJ5TmFtZSgi
cGFuTm9ydGhFYXN0Q3Vyc29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgc3RhdGljIGNvbnN0IEN1cnNv
ciBjID0gbG9hZEN1cnNvckJ5TmFtZSgicGFuTm9ydGhXZXN0Q3Vyc29yIiwgNywgNyk7Ci0gICAg
cmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhQYW5uaW5nQ3Vyc29yKCkKLXsKLSAg
ICBzdGF0aWMgY29uc3QgQ3Vyc29yIGMgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5Tb3V0aEN1cnNv
ciIsIDcsIDcpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoRWFzdFBh
bm5pbmdDdXJzb3IoKQotewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JC
eU5hbWUoInBhblNvdXRoRWFzdEN1cnNvciIsIDcsIDcpOwotICAgIHJldHVybiBjOwotfQotCi1j
b25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIHN0YXRpYyBjb25z
dCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInBhblNvdXRoV2VzdEN1cnNvciIsIDcsIDcp
OwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHdlc3RQYW5uaW5nQ3Vyc29yKCkK
LXsKLSAgICBzdGF0aWMgY29uc3QgQ3Vyc29yIGMgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5XZXN0
Q3Vyc29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbW92ZUN1
cnNvcigpIAotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURD
X1NJWkVBTEwpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4
dEN1cnNvcigpCi17Ci0gICAgc3RhdGljIGNvbnN0IEN1cnNvciBjID0gbG9hZEN1cnNvckJ5TmFt
ZSgidmVydGljYWxUZXh0Q3Vyc29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgY2VsbEN1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0K
LQotY29uc3QgQ3Vyc29yJiBjb250ZXh0TWVudUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50
ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigpCi17Ci0gICAgcmV0
dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBwcm9ncmVzc0N1cnNvcigp
Ci17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfQVBQU1RB
UlRJTkcpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vRHJvcEN1cnNvcigp
Ci17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfTk8pOwot
ICAgIHJldHVybiBjOwotfQorICAgIGlmIChjdXJzb3JJbWFnZSAmJiAhY3Vyc29ySW1hZ2UtPmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gY3JlYXRlU2hhcmVkQ3Vyc29yKGN1cnNvckltYWdlLmdl
dCgpLCBob3RTcG90KTsKKyAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfQVJST1cp
OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGNyZWF0ZVBsYXRmb3JtQ3Vy
c29yKEN1cnNvcjo6VHlwZSB0eXBlLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RT
cG90KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEN1cnNvcjo6UG9pbnRl
cjoKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNlbGw6CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDb250
ZXh0TWVudToKKyAgICAgICAgY2FzZSBDdXJzb3I6OkFsaWFzOgorICAgICAgICBjYXNlIEN1cnNv
cjo6Q29weToKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vbmU6CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpHcmFiOgorICAgICAgICBjYXNlIEN1cnNvcjo6R3JhYmJpbmc6CisgICAgICAgICAgICByZXR1
cm4gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfQVJST1cpOworICAgICAgICBjYXNlIEN1cnNvcjo6
Q3Jvc3M6CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfQ1JPU1Mp
OworICAgICAgICBjYXNlIEN1cnNvcjo6SGFuZDoKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hh
cmVkQ3Vyc29yKDAsIElEQ19IQU5EKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OklCZWFtOgorICAg
ICAgICAgICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0lCRUFNKTsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6OldhaXQ6CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigw
LCBJRENfV0FJVCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpIZWxwOgorICAgICAgICAgICAgcmV0
dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0hFTFApOworICAgICAgICBjYXNlIEN1cnNvcjo6
TW92ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFQUxM
KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok1pZGRsZVBhbm5pbmc6CisgICAgICAgICAgICByZXR1
cm4gbG9hZEN1cnNvckJ5TmFtZSgicGFuSWNvbiIsIDgsIDgpOworICAgICAgICBjYXNlIEN1cnNv
cjo6RWFzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAsIElE
Q19TSVpFV0UpOworICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFBhbm5pbmc6CisgICAgICAgICAg
ICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgicGFuRWFzdEN1cnNvciIsIDcsIDcpOworICAgICAg
ICBjYXNlIEN1cnNvcjo6Tm9ydGhSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJl
ZEN1cnNvcigwLCBJRENfU0laRU5TKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoUGFubmlu
ZzoKKyAgICAgICAgICAgIHJldHVybiBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5Ob3J0aEN1cnNvciIs
IDcsIDcpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgorICAgICAgICAg
ICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVORVNXKTsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6Ok5vcnRoRWFzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNv
ckJ5TmFtZSgicGFuTm9ydGhFYXN0Q3Vyc29yIiwgNywgNyk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpOb3J0aFdlc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigw
LCBJRENfU0laRU5XU0UpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0UGFubmluZzoK
KyAgICAgICAgICAgIHJldHVybiBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5Ob3J0aFdlc3RDdXJzb3Ii
LCA3LCA3KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXplOgorICAgICAgICAgICAg
cmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVOUyk7CisgICAgICAgIGNhc2UgQ3Vy
c29yOjpTb3V0aFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgi
cGFuU291dGhDdXJzb3IiLCA3LCA3KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFJl
c2l6ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTldT
RSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RQYW5uaW5nOgorICAgICAgICAgICAg
cmV0dXJuIGxvYWRDdXJzb3JCeU5hbWUoInBhblNvdXRoRWFzdEN1cnNvciIsIDcsIDcpOworICAg
ICAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIGxv
YWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVORVNXKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNv
dXRoV2VzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgicGFu
U291dGhXZXN0Q3Vyc29yIiwgNywgNyk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpXZXN0UmVzaXpl
OgorICAgICAgICAgICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVXRSk7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFNvdXRoUmVzaXplOgorICAgICAgICAgICAgcmV0dXJu
IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVOUyk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpF
YXN0V2VzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAsIElE
Q19TSVpFV0UpOworICAgICAgICBjYXNlIEN1cnNvcjo6V2VzdFBhbm5pbmc6CisgICAgICAgICAg
ICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgicGFuV2VzdEN1cnNvciIsIDcsIDcpOworICAgICAg
ICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0U291dGhXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0
dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVORVNXKTsKKyAgICAgICAgY2FzZSBDdXJz
b3I6Ok5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hh
cmVkQ3Vyc29yKDAsIElEQ19TSVpFTldTRSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDb2x1bW5S
ZXNpemU6CisgICAgICAgICAgICAvLyBGSVhNRTogV2luZG93cyBkb2VzIG5vdCBoYXZlIGEgc3Rh
bmRhcmQgY29sdW1uIHJlc2l6ZSBjdXJzb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMTg1OTE+CisgICAg
ICAgICAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRVdFKTsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6OlJvd1Jlc2l6ZToKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXaW5kb3dzIGRv
ZXMgbm90IGhhdmUgYSBzdGFuZGFyZCByb3cgcmVzaXplIGN1cnNvciA8cmRhcjovL3Byb2JsZW0v
NTAxODU5MT4KKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpF
TlMpOworICAgICAgICBjYXNlIEN1cnNvcjo6VmVydGljYWxUZXh0OgorICAgICAgICAgICAgcmV0
dXJuIGxvYWRDdXJzb3JCeU5hbWUoInZlcnRpY2FsVGV4dEN1cnNvciIsIDcsIDcpOworICAgICAg
ICBjYXNlIEN1cnNvcjo6UHJvZ3Jlc3M6CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJlZEN1
cnNvcigwLCBJRENfQVBQU1RBUlRJTkcpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9Ecm9wOgor
ICAgICAgICBjYXNlIEN1cnNvcjo6Tm90QWxsb3dlZDoKKyAgICAgICAgICAgIHJldHVybiBsb2Fk
U2hhcmVkQ3Vyc29yKDAsIElEQ19OTyk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpab29tSW46Cisg
ICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgiem9vbUluQ3Vyc29yIiwgNywgNyk7
CisgICAgICAgIGNhc2UgQ3Vyc29yOjpab29tT3V0OgorICAgICAgICAgICAgcmV0dXJuIGxvYWRD
dXJzb3JCeU5hbWUoInpvb21PdXRDdXJzb3IiLCA3LCA3KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6
OkN1c3RvbToKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTaGFyZWRDdXJzb3IoaW1hZ2UsIGhv
dFNwb3QpOworICAgIH0KIAotY29uc3QgQ3Vyc29yJiBjb3B5Q3Vyc29yKCkKLXsKLSAgICByZXR1
cm4gcG9pbnRlckN1cnNvcigpOworICAgIHJldHVybiAwOwogfQogCi1jb25zdCBDdXJzb3ImIG5v
bmVDdXJzb3IoKQorU2hhcmVkQ3Vyc29yOjp+U2hhcmVkQ3Vyc29yKCkKIHsKLSAgICByZXR1cm4g
cG9pbnRlckN1cnNvcigpOworICAgIERlc3Ryb3lJY29uKG1fbmF0aXZlQ3Vyc29yKTsKIH0KIAot
Y29uc3QgQ3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKK0N1cnNvcjo6Q3Vyc29yKEltYWdlKiBp
bWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpCisgICAgOiBtX3R5cGUoQ3VzdG9tKQorICAg
ICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1faG90U3BvdChkZXRlcm1pbmVIb3RTcG90KGltYWdl
LCBob3RTcG90KSkKKyAgICAsIG1fcGxhdGZvcm1DdXJzb3IoMCkKIHsKLSAgICBzdGF0aWMgQ3Vy
c29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19OTyk7Ci0gICAgcmV0dXJuIGM7CiB9CiAK
LWNvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKK0N1cnNvcjo6Q3Vyc29yKFR5cGUgdHlwZSkK
KyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9wbGF0Zm9ybUN1cnNvcigwKQogewotICAgIHN0
YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInpvb21JbkN1cnNvciIsIDcs
IDcpOwotICAgIHJldHVybiBjOwogfQogCi1jb25zdCBDdXJzb3ImIHpvb21PdXRDdXJzb3IoKQor
Q3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKKyAgICA6IG1fdHlwZShvdGhlci5t
X3R5cGUpCisgICAgLCBtX2ltYWdlKG90aGVyLm1faW1hZ2UpCisgICAgLCBtX2hvdFNwb3Qob3Ro
ZXIubV9ob3RTcG90KQorICAgICwgbV9wbGF0Zm9ybUN1cnNvcihvdGhlci5tX3BsYXRmb3JtQ3Vy
c29yKQogewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInpv
b21PdXRDdXJzb3IiLCA3LCA3KTsKLSAgICByZXR1cm4gYzsKIH0KIAotY29uc3QgQ3Vyc29yJiBn
cmFiQ3Vyc29yKCkKK0N1cnNvcjo6fkN1cnNvcigpCiB7Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJz
b3IoKTsKIH0KIAotY29uc3QgQ3Vyc29yJiBncmFiYmluZ0N1cnNvcigpCitDdXJzb3ImIEN1cnNv
cjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCiB7Ci0gICAgcmV0dXJuIHBvaW50ZXJD
dXJzb3IoKTsKKyAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7CisgICAgbV9pbWFnZSA9IG90aGVy
Lm1faW1hZ2U7CisgICAgbV9ob3RTcG90ID0gb3RoZXIubV9ob3RTcG90OworICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vyc29yOworICAgIHJldHVybiAqdGhpczsKIH0K
IAotU2hhcmVkQ3Vyc29yOjp+U2hhcmVkQ3Vyc29yKCkKK1BsYXRmb3JtQ3Vyc29yIEN1cnNvcjo6
cGxhdGZvcm1DdXJzb3IoKSBjb25zdAogewotICAgIERlc3Ryb3lJY29uKG1fbmF0aXZlQ3Vyc29y
KTsKKyAgICBpZiAoIW1fcGxhdGZvcm1DdXJzb3IpCisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBjcmVhdGVQbGF0Zm9ybUN1cnNvcihtX3R5cGUsIG1faW1hZ2UuZ2V0KCksIG1faG90U3BvdCk7
CisgICAgcmV0dXJuIG1fcGxhdGZvcm1DdXJzb3I7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vd2luL1dpZGdldFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
aW4vV2lkZ2V0V2luLmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9XaWRnZXRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHZvaWQgV2lk
Z2V0OjpoaWRlKCkKIHsKIH0KIAotSENVUlNPUiBsYXN0U2V0Q3Vyc29yID0gMDsKIGJvb2wgaWdu
b3JlTmV4dFNldEN1cnNvciA9IGZhbHNlOwogCiB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYgY3Vyc29yKQpAQCAtNzEsMzAgKzcwLDEwIEBAIHZvaWQgV2lkZ2V0OjpzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJiBjdXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgh
Y3Vyc29yLmltcGwoKS0+bmF0aXZlQ3Vyc29yKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxh
c3RTZXRDdXJzb3IgPSBjdXJzb3IuaW1wbCgpLT5uYXRpdmVDdXJzb3IoKTsKLQogICAgIFNjcm9s
bFZpZXcqIHZpZXcgPSByb290KCk7Ci0gICAgaWYgKCF2aWV3IHx8ICF2aWV3LT5pc0ZyYW1lVmll
dygpKSB7Ci0gICAgICAgIFNldEN1cnNvcihsYXN0U2V0Q3Vyc29yKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHZp
ZXcpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgU2V0Q3Vyc29yKGxhc3RT
ZXRDdXJzb3IpOworICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkgewotICAgICAgICBT
ZXRDdXJzb3IobGFzdFNldEN1cnNvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBw
YWdlLT5jaHJvbWUoKS0+c2V0Q3Vyc29yKGxhc3RTZXRDdXJzb3IpOworICAgIHZpZXctPmhvc3RX
aW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7CiB9CiAKIHZvaWQgV2lkZ2V0OjpwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4v
UGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5WaWV3V2luLmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkJyaWRnZS5oIgorI2luY2x1ZGUgIkNocm9t
ZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC02NTYs
NyArNjU4LDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleQogfQog
CiAjaWYgIU9TKFdJTkNFKQotZXh0ZXJuIEhDVVJTT1IgbGFzdFNldEN1cnNvcjsKIGV4dGVybiBi
b29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CiAjZW5kaWYKIApAQCAtNzI3LDcgKzcyOCw4IEBAIHZv
aWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUUKICAgICAvLyBDdXJyZW50bHks
IFdpZGdldDo6c2V0Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBp
biBFdmVudEhhbmRsZXIuY3BwCiAgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3
ZSBzZXQgaWdub3JlTmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0Lgog
ICAgIGlnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOwotICAgIGxhc3RTZXRDdXJzb3IgPSA6Okdl
dEN1cnNvcigpOworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQor
ICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnNldExhc3RTZXRDdXJzb3JUb0N1cnJl
bnRDdXJzb3IoKTsgICAgCiAjZW5kaWYKIH0KIApJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMjcyKQorKysgV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxMC0wNy0xMyAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAgICAgICAgTWFrZSBjaGFuZ2luZyBDdXJzb3JzIHdvcmsg
aW4gV2ViS2l0Mi4KKworICAgICAgICAqIFNoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJv
eHlNZXNzYWdlS2luZHMuaDoKKyAgICAgICAgQWRkIFNldEN1cnNvciBtZXNzYWdlLgorCisgICAg
ICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICBBZGQgZW5jb2Rp
bmcvZGVjb2Rpbmcgb2YgQ3Vyc29ycy4gRm9yIG5vdyB3ZSBkb24ndCBzdXBwb3J0IEN1c3RvbQor
ICAgICAgICBjdXJzb3JzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldEN1cnNvcik6CisgICAgICAgICog
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgQWRkIHBhc3MgdGhyb3VnaCBmdW5jdGlv
bnMgdG8gZ2V0IHRoZSBjdXJzb3IgZnJvbSB0aGUgV2ViUGFnZVByb3h5CisgICAgICAgIHRvIHRo
ZSBXS1ZpZXcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAg
ICAgICgtW1dLVmlldyBfc2V0Q3Vyc29yOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlld0ludGVybmFsLmg6CisgICAgICAgIEltcGxlbWVudCBjaGFuZ2luZyB0aGUgY3Vyc29y
LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnNldEN1cnNvcik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICBEZWNvZGUgdGhlIGN1cnNvci4KKworICAgICAgICAqIFVJUHJvY2Vzcy93
aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnduZFByb2MpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6b25TZXRDdXJzb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRDdXJzb3IpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICBJbXBsZW1lbnQgY2hh
bmdpbmcgdGhlIGN1cnNvci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojpz
ZXRDdXJzb3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnNldExhc3RTZXRD
dXJzb3JUb0N1cnJlbnRDdXJzb3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIEVuY29kZSB0aGUgY3Vyc29yIHdoZW4gc2V0
Q3Vyc29yIGlzIGNhbGxlZC4KKwogMjAxMC0wNy0xMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBX
ZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gNjMxMDIpCisrKyBX
ZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKQEAg
LTExMCw2ICsxMTEsMjggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OgogICAgIH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
Q3Vyc29yPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCisgICAgeworICAgICAgICBlbmNvZGVy
LT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGN1cnNvci50eXBlKCkpKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2Vi
Q29yZTo6Q3Vyc29yJiBjdXJzb3IpCisgICAgeworICAgICAgICB1aW50MzJfdCB0eXBlSW50Owor
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0eXBlSW50KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBjdXN0b20gY3Vyc29ycy4KKyAg
ICAgICAgV2ViQ29yZTo6Q3Vyc29yOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpD
dXJzb3I6OlR5cGU+KHR5cGVJbnQpOworICAgICAgICBpZiAodHlwZSA9PSBXZWJDb3JlOjpDdXJz
b3I6OkN1c3RvbSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBjdXJzb3Ig
PSBXZWJDb3JlOjpDdXJzb3I6OmZyb21UeXBlKHR5cGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9OworCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAvLyBXZWJDb3Jl
QXJndW1lbnRDb2RlcnNfaApJbmRleDogV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2Vi
UGFnZVByb3h5TWVzc2FnZUtpbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgJKHJldmlzaW9uIDYzMTAyKQor
KysgV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgZW51bSBLaW5kIHsKICAgICBEaWRT
dGFydFByb2dyZXNzLAogICAgIERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUsCiAgICAg
RGlkVXBkYXRlSGlzdG9yeVRpdGxlLAorICAgIFNldEN1cnNvciwKICAgICBTZXRUb29sVGlwLAog
ICAgIFRha2VGb2N1cywKICAgICAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9u
IDYzMTAyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTdHJp
bmc7CisgICAgY2xhc3MgQ3Vyc29yOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQxLDYg
KzQyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhib29sIGRpcmVj
dGlvbikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpID0gMDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lv
biA2MzEwMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzMSw2ICs1MzEsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVN
ZXNzYWdlKENvcgogICAgICAgICAgICAgc2V0VG9vbFRpcCh0b29sVGlwKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVzc2FnZTo6U2V0
Q3Vyc29yOiB7CisgICAgICAgICAgICBDdXJzb3IgY3Vyc29yOworICAgICAgICAgICAgaWYgKCFh
cmd1bWVudHMuZGVjb2RlKGN1cnNvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgc2V0Q3Vyc29yKGN1cnNvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlNob3dQYWdlOiB7CiAgICAgICAgICAg
ICBzaG93UGFnZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04NDMsNiArODUwLDExIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzZXRUb29sVGlwKGNvbnN0IFN0cmkKICAgICBtX3BhZ2VDbGllbnQt
PnRvb2xUaXBDaGFuZ2VkKG9sZFRvb2xUaXAsIG1fdG9vbFRpcCk7CiB9CiAKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7CisgICAg
bV9wYWdlQ2xpZW50LT5zZXRDdXJzb3IoY3Vyc29yKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6
OmRpZFJlY2VpdmVFdmVudChXZWJFdmVudDo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDYzMTAyKQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDcgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgSW50U2l6ZTsKKyAgICBjbGFzcyBDdXJzb3I7CiB9CiAKIHN0cnVjdCBXS0NvbnRleHRT
dGF0aXN0aWNzOwpAQCAtMTkwLDExICsxOTEsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdGFr
ZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsKICAgICB2b2lkIHNldFRvb2xUaXAoY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJik7CisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7
CiAKICAgICB2b2lkIGRpZFJlY2VpdmVFdmVudChXZWJFdmVudDo6VHlwZSk7CiAgICAgdm9pZCBk
aWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgdWludDY0
X3QpOwogICAgIHZvaWQgZGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiwgdWludDY0X3QpOwogCisKICNpZiBQTEFURk9STShXSU4pCiAg
ICAgUGFnZUNsaWVudCogbV9wYWdlQ2xpZW50OwogI2Vsc2UKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRSZXZpdmUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsKICAgICB2aXJ0
dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBvbGRUb29sVGlw
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1Rvb2xUaXApOwotICAgIAorICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisKICAgICBXS1ZpZXcqIG1f
d2tWaWV3OwogfTsKIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50
SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbXBv
cnQgIldLQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgogI2ltcG9ydCAiV0tWaWV3
SW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZvdW5kYXRpb25FeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4K
IApAQCAtNjksNCArNzAsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjp0b29sVGlwQ2hhbmdlZChj
b25zCiAgICAgW21fd2tWaWV3IF90b29sVGlwQ2hhbmdlZEZyb206bnNTdHJpbmdGcm9tV2ViQ29y
ZVN0cmluZyhvbGRUb29sVGlwKSB0bzpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKG5ld1Rvb2xU
aXApXTsKIH0KIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYgY3Vyc29yKQoreworICAgIFttX3drVmlldyBfc2V0Q3Vyc29yOmN1cnNvci5wbGF0
Zm9ybUN1cnNvcigpXTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYgKzMxOSwxMiBA
QCAtICh2b2lkKV90YWtlRm9jdXM6KEJPT0wpZm9yd2FyZAogICAgICAgICBbW3NlbGYgd2luZG93
XSBzZWxlY3RLZXlWaWV3UHJlY2VkaW5nVmlldzpzZWxmXTsKIH0KIAorLSAodm9pZClfc2V0Q3Vy
c29yOihOU0N1cnNvciAqKWN1cnNvcgoreworICAgIGlmIChbTlNDdXJzb3IgY3VycmVudEN1cnNv
cl0gPT0gY3Vyc29yKQorICAgICAgICByZXR1cm47CisgICAgW2N1cnNvciBzZXRdOworfQogCiAv
LyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNvbWV0aGluZyByZWNvZ25p
emFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KICNkZWZpbmUgVFJBQ0tJTkdfUkVD
VF9UQUcgMHhCQURGQUNFCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0lu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJ
bnRlcm5hbC5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBAaW50ZXJm
YWNlIFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV9wcm9jZXNzRGlkUmV2aXZlOwogLSAodm9p
ZClfdGFrZUZvY3VzOihCT09MKWRpcmVjdGlvbjsKIC0gKHZvaWQpX3Rvb2xUaXBDaGFuZ2VkRnJv
bTooTlNTdHJpbmcgKilvbGRUb29sVGlwIHRvOihOU1N0cmluZyAqKW5ld1Rvb2xUaXA7CistICh2
b2lkKV9zZXRDdXJzb3I6KE5TQ3Vyc29yICopY3Vyc29yOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogLSAodm9pZClfc3RhcnRBY2NlbGVyYXRlZENvbXBvc2l0aW5nOihDQUxh
eWVyICopcm9vdExheWVyOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNp
b24gNjMxMDIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOSw2ICsxMjksOSBAQCBMUkVTVUxUIFdlYlZpZXc6OnduZFByb2MoSFdORCBo
V25kLCBVSU5UCiAgICAgICAgIGNhc2UgV01fU0hPV1dJTkRPVzoKICAgICAgICAgICAgIGxSZXN1
bHQgPSBvblNob3dXaW5kb3dFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFu
ZGxlZCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTV9TRVRDVVJTT1I6Cisg
ICAgICAgICAgICBsUmVzdWx0ID0gb25TZXRDdXJzb3IoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBs
UGFyYW0sIGhhbmRsZWQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3MCw2
ICsxNzMsNyBAQCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgV2ViUGFnZU5hbWVzCiAgICAg
LCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fdG9wTGV2ZWxQYXJlbnRXaW5kb3co
MCkKICAgICAsIG1fdG9vbFRpcFdpbmRvdygwKQorICAgICwgbV9sYXN0Q3Vyc29yU2V0KDApCiAg
ICAgLCBtX3RyYWNraW5nTW91c2VMZWF2ZShmYWxzZSkKICAgICAsIG1faXNCZWluZ0Rlc3Ryb3ll
ZChmYWxzZSkKIHsKQEAgLTQwOCw2ICs0MTIsMTIgQEAgTFJFU1VMVCBXZWJWaWV3OjpvblNob3dX
aW5kb3dFdmVudChIV05EIAogICAgIHJldHVybiAwOwogfQogCitMUkVTVUxUIFdlYlZpZXc6Om9u
U2V0Q3Vyc29yKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtLCBib29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSA6OlNldEN1cnNvcihtX2xh
c3RDdXJzb3JTZXQpOworICAgIHJldHVybiAwOworfQorCiBib29sIFdlYlZpZXc6OmlzQWN0aXZl
KCkKIHsKICAgICBIV05EIGFjdGl2ZVdpbmRvdyA9IDo6R2V0QWN0aXZlV2luZG93KCk7CkBAIC01
MzMsNiArNTQzLDE2IEBAIHZvaWQgV2ViVmlldzo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW4K
ICAgICA6OlNlbmRNZXNzYWdlKG1fdG9vbFRpcFdpbmRvdywgVFRNX0FDVElWQVRFLCAhbmV3VG9v
bFRpcC5pc0VtcHR5KCksIDApOwogfQogCit2b2lkIFdlYlZpZXc6OnNldEN1cnNvcihjb25zdCBX
ZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBIQ1VSU09SIHBsYXRmb3JtQ3Vyc29yID0g
Y3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCktPm5hdGl2ZUN1cnNvcigpOworICAgIGlmICghcGxhdGZv
cm1DdXJzb3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEN1cnNvclNldCA9IHBsYXRm
b3JtQ3Vyc29yOworICAgIDo6U2V0Q3Vyc29yKHBsYXRmb3JtQ3Vyc29yKTsKK30KKwogLy8gV2Vi
Q29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCiAKIHZvaWQgV2ViVmlldzo6d2luZG93UmVjZWl2
ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNKQpJbmRl
eDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAgcHJp
dmF0ZToKICAgICBMUkVTVUxUIG9uS2lsbEZvY3VzRXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKICAgICBMUkVTVUxUIG9uVGltZXJF
dmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJvb2wmIGhhbmRs
ZWQpOwogICAgIExSRVNVTFQgb25TaG93V2luZG93RXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxUIG9uU2V0Q3Vy
c29yKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxl
ZCk7CiAKICAgICBib29sIGlzQWN0aXZlKCk7CiAgICAgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZSgp
OwpAQCAtOTMsNiArOTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlk
UmV2aXZlKCk7CiAgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhib29sIGRpcmVjdGlvbik7CiAg
ICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3Qg
V2ViQ29yZTo6Q3Vyc29yJik7CiAKICAgICAvLyBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVu
ZXIKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNLCBMUEFSQU0pOwpAQCAtMTAzLDYgKzEwNSw4IEBAIHByaXZhdGU6CiAgICAg
SFdORCBtX3RvcExldmVsUGFyZW50V2luZG93OwogICAgIEhXTkQgbV90b29sVGlwV2luZG93Owog
CisgICAgSENVUlNPUiBtX2xhc3RDdXJzb3JTZXQ7CisKICAgICBib29sIG1fdHJhY2tpbmdNb3Vz
ZUxlYXZlOwogICAgIGJvb2wgbV9pc0JlaW5nRGVzdHJveWVkOwogCkluZGV4OiBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAko
cmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE2LDEwICs0MTYsOSBAQCB2b2lk
IFdlYkNocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihQbGF0Zm9ybUN1cnNvckhh
bmRsZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJz
b3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94eU1lc3NhZ2U6
OlNldEN1cnNvciwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oY3Vyc29yKSk7CiB9CiAK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopCkBA
IC00NzcsNCArNDc2LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpuZWVkVG91Y2hFdmVudHMo
Ym8KIH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKQoreworfQorI2VuZGlmCisKKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJ1bk9w
ZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpTdHJpbmc+JiwgV2ViQ29yZTo6RmlsZUNob29zZXIqKTsKIAotICAgIHZpcnR1YWwgYm9v
bCBzZXRDdXJzb3IoV2ViQ29yZTo6UGxhdGZvcm1DdXJzb3JIYW5kbGUpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAgICAgCiAgICAgLy8gTm90
aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCBoYXMgY2hhbmdlZC4gVGhpcyBm
dW5jdGlvbgogICAgIC8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGhhbmRsaW5nIHNo
b3VsZCBiZSB2ZXJ5IGZhc3QuCkBAIC0xNzUsNyArMTc1LDExIEBAIHByaXZhdGU6CiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZlbnRzKGJvb2wp
OwogI2VuZGlmCi0gICAgCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgdmlydHVhbCB2b2lkIHNl
dExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKTsKKyNlbmRpZgorCiAgICAgV2ViQ29yZTo6
U3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKICAgICBXZWJQYWdlKiBtX3BhZ2U7CiB9OwpJbmRleDog
V2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lv
biA2MzI3MikKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NSBAQAorMjAxMC0wNy0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAgICAgICAgTWFrZSBjaGFu
Z2luZyBDdXJzb3JzIHdvcmsgaW4gV2ViS2l0Mi4KKworICAgICAgICAqIGVmbC9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50
RWZsOjpzZXRDdXJzb3IpOgorICAgICAgICAqIGVmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRFZmwuaDoKKyAgICAgICAgQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaCBuZXcgb25lLgorCiAy
MDEwLTA3LTEzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDYzMjcyKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEzIEBACisyMDEwLTA3LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGF0Y2ggZm9y
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjIzMgorICAgICAgICBN
YWtlIGNoYW5naW5nIEN1cnNvcnMgd29yayBpbiBXZWJLaXQyLgorCisgICAgICAgICogc3JjL0No
cm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6c2V0
Q3Vyc29yKTogQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaCBuZXcgb25lLgorCiAyMDEwLTA3LTEz
ICBDaHJpcyBHdWlsbG9yeSAgPGNocmlzLmd1aWxsb3J5QGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNs
aWVudEltcGwuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZy
YW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKICAgICB2aXJ0dWFs
IHZvaWQgcnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4pOwogICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mLCBXZWJDb3JlOjpGaWxlQ2hvb3NlciopOwotICAgIHZp
cnR1YWwgYm9vbCBzZXRDdXJzb3IoV2ViQ29yZTo6UGxhdGZvcm1DdXJzb3JIYW5kbGUpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpD
dXJzb3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IFdl
YkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6SFRNTFBhcnNl
clF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIHsgcmV0dXJuIDA7IH0KICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQpJbmRleDogV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50RWZsLmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNywxMCArNDM3
LDkgQEAgdm9pZCBDaHJvbWVDbGllbnRFZmw6OmZvcm1TdGF0ZURpZENoYW5nZQogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgQ2hyb21lQ2xpZW50RWZsOjpzZXRDdXJzb3IoUGxhdGZv
cm1DdXJzb3JIYW5kbGUpCit2b2lkIENocm9tZUNsaWVudEVmbDo6c2V0Q3Vyc29yKGNvbnN0IEN1
cnNvciYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IHZvaWQgQ2hyb21lQ2xpZW50RWZsOjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJh
bWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopCkluZGV4OiBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50RWZsLmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0L2VmbC9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzEx
OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc093blB0cjxIVE1MUGFyc2VyUXVpcmtz
PiBjcmVhdGVIVE1MUGFyc2VyUXVpcmtzKCkgeyByZXR1cm4gMDsgfQogCi0gICAgdmlydHVhbCBi
b29sIHNldEN1cnNvcihQbGF0Zm9ybUN1cnNvckhhbmRsZSk7CisgICAgdmlydHVhbCB2b2lkIHNl
dEN1cnNvcihjb25zdCBDdXJzb3ImKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50
b1ZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCB7fQogCkluZGV4
OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjMyNzIpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA3LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGF0
Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjIzMgorICAg
ICAgICBNYWtlIGNoYW5naW5nIEN1cnNvcnMgd29yayBpbiBXZWJLaXQyLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hy
b21lQ2xpZW50OjpzZXRDdXJzb3IpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5oOgorICAgICAgICBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIG5ldyBvbmUuCisK
IDIwMTAtMDctMTIgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YS4KSW5kZXg6IFdlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDYzMTAy
KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OTEsMTAgKzU5MSw5IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpjaG9vc2VJ
Y29uRm9yRmlsZXMoY28KICAgICBjaG9vc2VyLT5pY29uTG9hZGVkKEljb246OmNyZWF0ZUljb25G
b3JGaWxlcyhmaWxlbmFtZXMpKTsKIH0KIAotYm9vbCBDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihQ
bGF0Zm9ybUN1cnNvckhhbmRsZSkKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKIH0K
IAogdm9pZCBDaHJvbWVDbGllbnQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFt
ZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKSW5kZXg6IFdlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAkocmV2aXNpb24gNjMxMDIpCisr
KyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmly
dHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkhUTUxQYXJzZXJRdWlya3M+IGNyZWF0ZUhUTUxQYXJz
ZXJRdWlya3MoKSB7IHJldHVybiAwOyB9CiAKLSAgICAgICAgdmlydHVhbCBib29sIHNldEN1cnNv
cihXZWJDb3JlOjpQbGF0Zm9ybUN1cnNvckhhbmRsZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6U2Nyb2xsVmlldyopIGNvbnN0IHt9CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHZW9s
b2NhdGlvbiopOwpJbmRleDogV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzI3MikKKysrIFdlYktpdC9oYWlrdS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNy0xMyAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAgICAgICAgTWFrZSBjaGFuZ2luZyBDdXJzb3JzIHdvcmsgaW4g
V2ViS2l0Mi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudEhhaWt1OjpzZXRDdXJzb3IpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1Lmg6CisgICAgICAgIENoYW5n
ZSBwcm90b3R5cGUgdG8gbWF0Y2ggbmV3IG9uZS4KKwogMjAxMC0wNi0xNCAgSWx5YSBUaWtob25v
dnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwg
RmVsZG1hbi4KSW5kZXg6IFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRI
YWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEhhaWt1LmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvaGFpa3UvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsMTAg
KzM2Miw5IEBAIHZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmNob29zZUljb25Gb3JGaWwKICAgICBj
aG9vc2VyLT5pY29uTG9hZGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsK
IH0KIAotYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFu
ZGxlKQordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIE5vdGlm
aWNhdGlvbiB0aGF0IHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgaGFzIGNoYW5nZWQuIFRoaXMgZnVu
Y3Rpb24KSW5kZXg6IFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlr
dS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRIYWlrdS5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRIYWlrdS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBh
c3NSZWZQdHI8RmlsZUNob29zZXI+KTsKICAgICAgICAgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hvb3NlciopOwogCi0gICAgICAgIGJvb2wgc2V0
Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlKTsKKyAgICAgICAgdm9pZCBzZXRDdXJzb3IoY29u
c3QgQ3Vyc29yJik7CiAKICAgICAgICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZv
cm0gZWxlbWVudCBoYXMgY2hhbmdlZC4gVGhpcyBmdW5jdGlvbgogICAgICAgICAvLyB3aWxsIGJl
IGNhbGxlZCBmcmVxdWVudGx5LCBzbyBoYW5kbGluZyBzaG91bGQgYmUgdmVyeSBmYXN0LgpJbmRl
eDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDYzMjcyKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wNy0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBh
dGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAg
ICAgICAgTWFrZSBjaGFuZ2luZyBDdXJzb3JzIHdvcmsgaW4gV2ViS2l0Mi4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c2V0Q3Vy
c29yKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgIEltcGxlbWVudCBj
dXJzb3IgY2hhbmdpbmcgYXQgdGhlIFdlYktpdCBsZXZlbCBmb3IgdGhlIHNha2Ugb2YgV2ViS2l0
Mi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIG1vdmVkIGZyb20gV2lkZ2V0
TWFjLm1tLgorICAgICAgICAoK1tXZWJWaWV3IF9wb2ludGluZ0hhbmRDdXJzb3JdKToKKyAgICAg
ICAgVXBkYXRlIHRvIHVzZSBwbGF0Zm9ybUN1cnNvcigpIGluc3RlYWQgb2YgaW1wbCgpLgorCiAy
MDEwLTA3LTEzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeCBUaWdlciBidWlsZC4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwoV2ViQ29yZTo6RnJhbWUq
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPik7CiAgICAgdmlydHVhbCB2b2lkIGNo
b29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiYsIFdlYkNvcmU6
OkZpbGVDaG9vc2VyKik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2V0Q3Vyc29yKFdlYkNvcmU6OlBs
YXRmb3JtQ3Vyc29ySGFuZGxlKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6
OkZsb2F0UmVjdCBjdXN0b21IaWdobGlnaHRSZWN0KFdlYkNvcmU6Ok5vZGUqLCBjb25zdCBXZWJD
b3JlOjpBdG9taWNTdHJpbmcmIHR5cGUsCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgbGluZVJlY3QpOwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQubW0JKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4
Y2VwdGlvbnMuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29uc29sZS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9DdXJzb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GaWxlQ2hvb3Nlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KQEAgLTY1OSw2
ICs2NjAsMTQgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmNob29zZUljb25Gb3JGaWxlcwogICAg
IGNob29zZXItPmljb25Mb2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykp
OwogfQogCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1
cnNvciYgY3Vyc29yKQoreworICAgIE5TQ3Vyc29yICpwbGF0Zm9ybUN1cnNvciA9IGN1cnNvci5w
bGF0Zm9ybUN1cnNvcigpOworICAgIGlmIChbTlNDdXJzb3IgY3VycmVudEN1cnNvcl0gPT0gcGxh
dGZvcm1DdXJzb3IpCisgICAgICAgIHJldHVybjsKKyAgICBbcGxhdGZvcm1DdXJzb3Igc2V0XTsK
K30KKwogS2V5Ym9hcmRVSU1vZGUgV2ViQ2hyb21lQ2xpZW50OjprZXlib2FyZFVJTW9kZSgpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpJbmRleDogV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0JKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTIyMTksNyArMjIxOSw3IEBAIC0gKHZvaWQpX3NldEphdmFTY3JpcHRV
UkxzQXJlQWxsb3dlZDooQk8KIAogKyAoTlNDdXJzb3IgKilfcG9pbnRpbmdIYW5kQ3Vyc29yCiB7
Ci0gICAgcmV0dXJuIGhhbmRDdXJzb3IoKS5pbXBsKCk7CisgICAgcmV0dXJuIGhhbmRDdXJzb3Io
KS5wbGF0Zm9ybUN1cnNvcigpOwogfQogCiAtIChCT09MKV9wb3N0c0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdOb3RpZmljYXRpb25zCkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMjcyKQorKysgV2ViS2l0L3F0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA3LTEzICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MjIzMgorICAgICAgICBNYWtlIGNoYW5naW5nIEN1cnNvcnMgd29yayBpbiBX
ZWJLaXQyLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnNldEN1cnNvcik6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAgICAgICAgQ2hhbmdlIHByb3RvdHlw
ZSB0byBtYXRjaCBuZXcgb25lLgorCiAyMDEwLTA3LTA3ICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9y
LmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAko
cmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjksMTAgKzUyOSw5IEBAIHZvaWQgQ2hyb21lQ2xp
ZW50UXQ6OmNob29zZUljb25Gb3JGaWxlcygKICAgICBjaG9vc2VyLT5pY29uTG9hZGVkKEljb246
OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsKIH0KIAotYm9vbCBDaHJvbWVDbGllbnRR
dDo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlKQordm9pZCBDaHJvbWVDbGllbnRRdDo6
c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlv
blBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlv
bikKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZp
c2lvbiA2MzEwMikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBjcmVhdGVIVE1M
UGFyc2VyUXVpcmtzKCkgeyByZXR1cm4gMDsgfQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXRD
dXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50
b1ZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCB7fQogCkluZGV4
OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjMyNzIpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI1IEBACisyMDEwLTA3LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGF0
Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjIzMgorICAg
ICAgICBNYWtlIGNoYW5naW5nIEN1cnNvcnMgd29yayBpbiBXZWJLaXQyLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNocm9tZUNs
aWVudDo6c2V0Q3Vyc29yKToKKyAgICAgICAgV2Ugbm93IG5lZWQgdG8gZ3JhYiB0aGUgbmF0aXZl
IGN1cnNvciBvdXQgb2YgdGhlIFdlYkNvcmUgY3Vyc29yLgorCisgICAgICAgIChXZWJDaHJvbWVD
bGllbnQ6OnNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IpOgorICAgICAgICBTZXRzIHRo
ZSBXZWJWaWV3J3MgImxhc3Qgc2V0IGN1cnNvciIgdG8gYmUgdGhlIGN1cnJlbnQgY3Vyc29yIHNv
IHRoYXQKKyAgICAgICAgdGhlIGN1cnNvciBpcyBzZXQgY29ycmVjdGx5IGZvciBwbHVnaW5zLgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJWaWV3
OjpXZWJWaWV3V25kUHJvYyk6CisgICAgICAgICogV2ViVmlldy5oOgorICAgICAgICAoV2ViVmll
dzo6c2V0TGFzdEN1cnNvcik6CisgICAgICAgIENoYW5nZSB0aGUgImxhc3Qgc2V0IGN1cnNvciIg
dG8gYmUgc3RvcmVkIGFzIGEgbWVtYmVyIGluc3RlYWQgb2YgYSBnbG9iYWwuCisKIDIwMTAtMDct
MTMgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5k
b3dzIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQsNiArMzQ0LDcgQEAgV2ViVmlldzo6
V2ViVmlldygpCiAgICAgLCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhmYWxzZSkKICNlbmRp
ZgogICAgICwgbV9uZXh0RGlzcGxheUlzU3luY2hyb25vdXMoZmFsc2UpCisgICAgLCBtX2xhc3RT
ZXRDdXJzb3IoMCkKIHsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICBXVEY6
OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CkBAIC0xOTcyLDEwICsxOTczLDYgQEAgYm9vbCBXZWJW
aWV3OjpyZWdpc3RlcldlYlZpZXdXaW5kb3dDbGFzcwogICAgIHJldHVybiAhIVJlZ2lzdGVyQ2xh
c3NFeCgmd2NleCk7CiB9CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBleHRlcm4gSENVUlNP
UiBsYXN0U2V0Q3Vyc29yOwotfQotCiBzdGF0aWMgSFdORCBmaW5kVG9wTGV2ZWxQYXJlbnQoSFdO
RCB3aW5kb3cpCiB7CiAgICAgaWYgKCF3aW5kb3cpCkBAIC0yMjUwLDEwICsyMjQ3LDggQEAgTFJF
U1VMVCBDQUxMQkFDSyBXZWJWaWV3OjpXZWJWaWV3V25kUHJvYwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV01fU0VUQ1VSU09SOgotICAgICAgICAgICAg
aWYgKGhhbmRsZWQgPSB3ZWJWaWV3LT5wYWdlKCktPmNocm9tZSgpLT5zZXRDdXJzb3IobGFzdFNl
dEN1cnNvcikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIF9fZmFsbHRo
cm91Z2g7CisgICAgICAgICAgICBoYW5kbGVkID0gOjpTZXRDdXJzb3Iod2ViVmlldy0+bV9sYXN0
U2V0Q3Vyc29yKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdNX1ZTQ1JPTEw6
CiAgICAgICAgICAgICBoYW5kbGVkID0gd2ViVmlldy0+dmVydGljYWxTY3JvbGwod1BhcmFtLCBs
UGFyYW0pOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gNjMxMDIpCisrKyBX
ZWJLaXQvd2luL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTAzLDYgKzkwMyw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGVudGVyRnVsbHNjcmVlbkZvck5vZGUoV2ViQ29yZTo6Tm9kZSopOwog
ICAgIHZvaWQgZXhpdEZ1bGxzY3JlZW4oKTsKIAorICAgIHZvaWQgc2V0TGFzdEN1cnNvcihIQ1VS
U09SIGN1cnNvcikgeyBtX2xhc3RTZXRDdXJzb3IgPSBjdXJzb3I7IH0KKwogcHJpdmF0ZToKICAg
ICB2b2lkIHNldFpvb21NdWx0aXBsaWVyKGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgaXNUZXh0T25s
eSk7CiAgICAgZmxvYXQgem9vbU11bHRpcGxpZXIoYm9vbCBpc1RleHRPbmx5KTsKQEAgLTEwNDIs
NiArMTA0NCw4IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiAgICAgYm9vbCBtX25leHREaXNwbGF5
SXNTeW5jaHJvbm91czsKKworICAgIEhDVVJTT1IgbV9sYXN0U2V0Q3Vyc29yOwogfTsKIAogI2Vu
ZGlmCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgyLDIxICs3ODIsMjggQEAgdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OmNob29zZUljb25Gb3JGaWxlcwogICAgIGNob29zZXItPmljb25Mb2Fk
ZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCi1ib29sIFdlYkNo
cm9tZUNsaWVudDo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlIGN1cnNvcikKK3ZvaWQg
V2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiB7Ci0gICAg
aWYgKCFjdXJzb3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBIQ1VSU09SIHBsYXRmb3Jt
Q3Vyc29yID0gY3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCktPm5hdGl2ZUN1cnNvcigpOworICAgIGlm
ICghcGxhdGZvcm1DdXJzb3IpCisgICAgICAgIHJldHVybjsKIAogICAgIGlmIChDT01QdHI8SVdl
YlVJRGVsZWdhdGU+IGRlbGVnYXRlID0gdWlEZWxlZ2F0ZSgpKSB7CiAgICAgICAgIENPTVB0cjxJ
V2ViVUlEZWxlZ2F0ZVByaXZhdGU+IGRlbGVnYXRlUHJpdmF0ZShRdWVyeSwgZGVsZWdhdGUpOwog
ICAgICAgICBpZiAoZGVsZWdhdGVQcml2YXRlKSB7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVE
KGRlbGVnYXRlUHJpdmF0ZS0+d2ViVmlld1NldEN1cnNvcihtX3dlYlZpZXcsIHJlaW50ZXJwcmV0
X2Nhc3Q8T0xFX0hBTkRMRT4oY3Vyc29yKSkpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChkZWxlZ2F0ZVByaXZhdGUtPndlYlZpZXdTZXRD
dXJzb3IobV93ZWJWaWV3LCByZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KHBsYXRmb3JtQ3Vy
c29yKSkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAg
IDo6U2V0Q3Vyc29yKGN1cnNvcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV93ZWJWaWV3LT5z
ZXRMYXN0Q3Vyc29yKHBsYXRmb3JtQ3Vyc29yKTsKKyAgICA6OlNldEN1cnNvcihwbGF0Zm9ybUN1
cnNvcik7CisgICAgcmV0dXJuOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TGFzdFNl
dEN1cnNvclRvQ3VycmVudEN1cnNvcigpCit7CisgICAgbV93ZWJWaWV3LT5zZXRMYXN0Q3Vyc29y
KDo6R2V0Q3Vyc29yKCkpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVxdWVzdEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uKQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8
V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZp
bGVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiwgV2ViQ29yZTo6RmlsZUNob29zZXIq
KTsKIAotICAgIHZpcnR1YWwgYm9vbCBzZXRDdXJzb3IoV2ViQ29yZTo6UGxhdGZvcm1DdXJzb3JI
YW5kbGUgY3Vyc29yKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vy
c29yKCk7CiAKICAgICBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3
OyB9CiAKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4
L0NoYW5nZUxvZwkocmV2aXNpb24gNjMyNzIpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQy
MjMyCisgICAgICAgIE1ha2UgY2hhbmdpbmcgQ3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAg
ICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFd4OjpzZXRDdXJzb3IpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQv
Q2hyb21lQ2xpZW50V3guaDoKKyAgICAgICAgQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaCBuZXcg
b25lLgorCiAyMDEwLTA3LTA3ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMu
Y29tPgogCiAgICAgICAgIFt3eF0gQnVpbGQgZml4IGFmdGVyIGNoYW5nZSBpbiBQYWdlIGNvbnN0
cnVjdG9yLgpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNw
cAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGll
bnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NywxMCArNDQ3LDkgQEAgdm9pZCBDaHJvbWVD
bGllbnRXeDo6Y2hvb3NlSWNvbkZvckZpbGVzKAogICAgIGNob29zZXItPmljb25Mb2FkZWQoSWNv
bjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCi1ib29sIENocm9tZUNsaWVu
dFd4OjpzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUpCit2b2lkIENocm9tZUNsaWVudFd4
OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRXeDo6cmVxdWVzdEdlb2xvY2F0
aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKQpJbmRleDogV2ViS2l0
L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzNCw3ICsxMzQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8SFRNTFBh
cnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIHsgcmV0dXJuIDA7IH0KIAotICAg
IHZpcnR1YWwgYm9vbCBzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3Qg
e30KIAo=
</data>
<flag name="review"
          id="49506"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61471</attachid>
            <date>2010-07-13 22:38:05 -0700</date>
            <delta_ts>2010-07-14 10:17:41 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>cursor2.diff</filename>
            <type>text/plain</type>
            <size>92896</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAg
IE1ha2UgY2hhbmdpbmcgQ3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgLSBDb252
ZXJ0ZWQgTWFjIGFuZCBXaW5kb3dzIEN1cnNvciBpbXBsZW1lbnRhdGlvbnMgdG8gbGF6aWx5Cisg
ICAgICAgICAgY3JlYXRlIHRoZSBwbGF0Zm9ybSBjdXJzb3IuCisgICAgICAgIC0gQWRkIEhvc3RX
aW5kb3cgZnVuY3Rpb24gdG8gc2V0IHRoZSBjdXJzb3IgYW5kIHVzZSBpdCBmcm9tIFdpZGdldDo6
c2V0Q3Vyc29yLgorICAgICAgICAtIFJld29yayBXaW5kb3dzIGN1cnNvciBjb2RlIHRvIHVzZSBs
ZXNzIGdsb2JhbCB2YXJpYWJsZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogVXBkYXRl
ZAorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVt
cHR5Q2hyb21lQ2xpZW50OjpzZXRDdXJzb3IpOiAKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5Q2hy
b21lQ2xpZW50OjpzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKToKKyAgICAgICAgQWRk
ZWQgZW1wdHkgaW1wbGVtZW50YXRpb25zLgorCisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzZXRDdXJzb3IpOgorICAgICAgICAqIHBhZ2UvQ2hy
b21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgQ2hhbmdlIGV4
aXN0aW5nIHNldEN1cnNvcigpIGZ1bmN0aW9uIHRvIHRha2UgYSBDdXJzb3IgaW5zdGVhZCBvZiBh
CisgICAgICAgIFBsYXRmb3JtQ3Vyc29ySGFuZGxlLiBBZGRlZCBzZXRMYXN0U2V0Q3Vyc29yVG9D
dXJyZW50Q3Vyc29yLgorCisgICAgICAgICogcGxhdGZvcm0vQ3Vyc29yLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9DdXJzb3IuaDoKKyAgICAgICAgQWRkZWQgQ3Vyc29yIFR5cGUgYW5kIHRoZSBv
cHRpb24gb2YgbGF6aWx5IGNyZWF0aW5nIHRoZSBuYXRpdmUgY3Vyc29yCisgICAgICAgICh1c2Vk
IG9uIE1hYyBhbmQgV2luZG93cyBmb3Igbm93KS4KKworICAgICAgICAqIHBsYXRmb3JtL0hvc3RX
aW5kb3cuaDoKKyAgICAgICAgQWRkIHNldEN1cnNvci4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9DdXJzb3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDdXN0b21DdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUGxhdGZvcm1DdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3Vyc29yOjpDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjp+Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cnNvcjo6cGxhdGZvcm1DdXJzb3IpOgorICAgICAgICBDb252ZXJ0IHRvIGxhemlseSBjcmVh
dGluZyB0aGUgbmF0aXZlIGN1cnNvciBvbiB0aGUgZmlyc3QgcmVxdWVzdCBhbmQKKyAgICAgICAg
c3RvcmluZyB0aGUgdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9XaWRnZXRNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEN1cnNvcik6CisgICAgICAgIFVzZSBIb3N0
V2luZG93OjpzZXRDdXJzb3IgdG8gc2V0IHRoZSBjdXJzb3IuIFRoaXMgaW4gdHVybiB3aWxsIGNh
bGwgdGhlCisgICAgICAgIENocm9tZUNsaWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9D
dXJzb3JXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2hhcmVkQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmxvYWRTaGFyZWRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bG9h
ZEN1cnNvckJ5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQbGF0Zm9ybUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDdXJzb3I6On5TaGFyZWRDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3Vyc29yOjpDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjp+
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cnNvcjo6cGxhdGZvcm1DdXJzb3IpOgorICAgICAgICBDb252ZXJ0IHRvIGxh
emlseSBjcmVhdGluZyB0aGUgbmF0aXZlIGN1cnNvciBvbiB0aGUgZmlyc3QgcmVxdWVzdCBhbmQK
KyAgICAgICAgc3RvcmluZyB0aGUgdHlwZS4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9XaWRn
ZXRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRDdXJzb3IpOgorICAgICAg
ICBVc2UgSG9zdFdpbmRvdzo6c2V0Q3Vyc29yIHRvIHNldCB0aGUgY3Vyc29yLiBUaGlzIGluIHR1
cm4gd2lsbCBjYWxsIHRoZQorICAgICAgICBDaHJvbWVDbGllbnQuCisKKyAgICAgICAgKiBwbHVn
aW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICBVc2UgdGhlIG5ldyBzZXRMYXN0U2V0Q3Vyc29y
VG9DdXJyZW50Q3Vyc29yIGNsaWVudCBmdW5jdGlvbiB0byBlbnN1cmUKKyAgICAgICAgdGhlIGN1
cnNvciBpcyBwcm9wZXJseSB1cGRhdGVkIHdoZW4gb3ZlciBhIHBsdWdpbi4KKworICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL0N1cnNvckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9lZmwvQ3Vyc29yRWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vd2luY2UvQ3Vyc29yV2luY2UuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3d4L0N1
cnNvcld4LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHA6CisgICAgICAg
IENoYW5nZSBtX2ltcGwgLT4gbV9wbGF0Zm9ybUN1cnNvci4KKwogMjAxMC0wNy0xMyAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM5Myw2ICszOTMsNyBAQCBfX1pON1dlYkNv
cmUxN0RPTUltcGxlbWVudGF0aW9uMTRpc1RleHRNCiBfX1pON1dlYkNvcmUxN0dseXBoUGFnZVRy
ZWVOb2RlMTh0cmVlR2x5cGhQYWdlQ291bnRFdgogX19aTjdXZWJDb3JlMTdIVE1MUGx1Z0luRWxl
bWVudDExZ2V0TlBPYmplY3RFdgogX19aTjdXZWJDb3JlMTdIaXN0b3J5Q29udHJvbGxlcjI2c2F2
ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGVFdgorX19aTjdXZWJDb3JlMTduYW1lRm9yQ3Vyc29yVHlw
ZUVOU182Q3Vyc29yNFR5cGVFCiBfX1pON1dlYkNvcmUxOGRlcHJlY2F0ZWRQYXJzZVVSTEVSS05T
XzZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOGlzU3RhcnRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJs
ZVBvc2l0aW9uRQogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9sbGVyMTZyZXN1bWVBbmlt
YXRpb25zRVBOU184RG9jdW1lbnRFCkBAIC01MzcsNiArNTM4LDkgQEAgX19aTjdXZWJDb3JlNVJh
bmdlNnNldEVuZEVOM1dURjEwUGFzc1JlZgogX19aTjdXZWJDb3JlNVJhbmdlOHNldFN0YXJ0RU4z
V1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaVJpCiBfX1pON1dlYkNvcmU1UmFuZ2VEMUV2CiBf
X1pON1dlYkNvcmU1Y2FjaGVFdgorX19aTjdXZWJDb3JlNkN1cnNvcjhmcm9tVHlwZUVOUzBfNFR5
cGVFCitfX1pON1dlYkNvcmU2Q3Vyc29yRDFFdgorX19aTjdXZWJDb3JlNkN1cnNvcmFTRVJLUzBf
CiBfX1pON1dlYkNvcmU2RWRpdG9yMTBhcHBseVN0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRp
b25FTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjEwaW5zZXJ0VGV4dEVSS05T
XzZTdHJpbmdFUE5TXzVFdmVudEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM2NhbkRIVE1MUGFzdGVF
dgpAQCAtOTI4LDYgKzkzMiw3IEBAIF9fWk5LN1dlYkNvcmU1UmFuZ2UxOWJvdW5kYXJ5UG9pbnRz
VmFsaWQKIF9fWk5LN1dlYkNvcmU1UmFuZ2U5ZW5kT2Zmc2V0RVJpCiBfX1pOSzdXZWJDb3JlNVJh
bmdlOWZpcnN0Tm9kZUV2CiBfX1pOSzdXZWJDb3JlNkNocm9tZTEyY3JlYXRlV2luZG93RVBOU181
RnJhbWVFUktOU18xNkZyYW1lTG9hZFJlcXVlc3RFUktOU18xNFdpbmRvd0ZlYXR1cmVzRQorX19a
Tks3V2ViQ29yZTZDdXJzb3IxNHBsYXRmb3JtQ3Vyc29yRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9y
MTNjYW5FZGl0UmljaGx5RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTZjb21wb3NpdGlvblJhbmdl
RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTZmb250Rm9yU2VsZWN0aW9uRVJiCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgUGFzc093blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBjcmVhdGVIVE1MUGFyc2VyUXVp
cmtzKCkgeyByZXR1cm4gMDsgfQogCi0gICAgdmlydHVhbCBib29sIHNldEN1cnNvcihQbGF0Zm9y
bUN1cnNvckhhbmRsZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRv
Vmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAKQEAgLTE2
Niw2ICsxNjYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllclN5bmMoKSB7fTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZpcnR1
YWwgdm9pZCBzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCkgeyB9CisjZW5kaWYKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hFdmVudHMo
Ym9vbCkgeyB9CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjYsOSArNDI2LDkgQEAgdm9p
ZCBDaHJvbWU6OmNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZQogICAgIG1fY2xpZW50LT5jaG9v
c2VJY29uRm9yRmlsZXMoZmlsZW5hbWVzLCBmaWxlQ2hvb3Nlcik7CiB9CiAKLWJvb2wgQ2hyb21l
OjpzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUgY3Vyc29yKQordm9pZCBDaHJvbWU6OnNl
dEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICByZXR1cm4gbV9jbGllbnQtPnNl
dEN1cnNvcihjdXJzb3IpOworICAgIG1fY2xpZW50LT5zZXRDdXJzb3IoY3Vyc29yKTsKIH0KIAog
I2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2aXNpb24gNjMxMDIpCisrKyBX
ZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93VG9TY3JlZW4o
Y29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNsaWVu
dCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9s
bGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJik7CiAKICAgICAgICAgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29u
c3QgSW50UmVjdCYpIGNvbnN0OwogCkBAIC0xMzUsOCArMTM2LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNo
b29zZXI+KTsKICAgICAgICAgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBGaWxlQ2hvb3NlciopOwogCi0gICAgICAgIGJvb2wgc2V0Q3Vyc29yKFBsYXRmb3Jt
Q3Vyc29ySGFuZGxlKTsKLQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgdm9pZCBmb2N1c05T
VmlldyhOU1ZpZXcqKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNjMx
MDIpCisrKyBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
NSwxMSArMTM1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBJbnRQ
b2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0ID0gMDsKICAgICAgICAg
dmlydHVhbCBJbnRSZWN0IHdpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7
CiAgICAgICAgIHZpcnR1YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNsaWVudCgp
IGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJh
bWUqLCBjb25zdCBJbnRTaXplJikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3Qg
PSAwOyAvLyBDdXJyZW50bHkgb25seSBNYWMgaGFzIGEgbm9uIGVtcHR5IGltcGxlbWVudGF0aW9u
LgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyc01vZGVEaWRDaGFuZ2UoKSBjb25zdCA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgPSAwOwog
ICAgICAgICAvLyBFbmQgbWV0aG9kcyB1c2VkIGJ5IEhvc3RXaW5kb3cuCiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QgPSAwOworICAgICAgICB2
aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSosIGNvbnN0IEludFNpemUmKSBj
b25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3Qg
SW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCA9IDA7IC8vIEN1cnJlbnRseSBvbmx5
IE1hYyBoYXMgYSBub24gZW1wdHkgaW1wbGVtZW50YXRpb24uCisgICAgICAgCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRNaXNzaW5nUGx1Z2luTWVzc2FnZUJlQnV0dG9uKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIG1pc3NpbmdQbHVnaW5CdXR0b25D
bGlja2VkKEVsZW1lbnQqKSBjb25zdCB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIG1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZs
YWdzKSA9IDA7CkBAIC0xOTQsOCArMTk2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAvLyBBc3luY2hyb25vdXMgcmVxdWVzdCB0byBsb2FkIGFuIGljb24gZm9yIHNwZWNpZmllZCBm
aWxlbmFtZXMuCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBGaWxlQ2hvb3NlciopID0gMDsKIAotICAgICAgICB2aXJ0dWFsIGJv
b2wgc2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlKSA9IDA7Ci0KICAgICAgICAgLy8gTm90
aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCBoYXMgY2hhbmdlZC4gVGhpcyBm
dW5jdGlvbgogICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBoYW5kbGlu
ZyBzaG91bGQgYmUgdmVyeSBmYXN0LgogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlk
Q2hhbmdlKGNvbnN0IE5vZGUqKSA9IDA7CkBAIC0yMzYsNiArMjM2LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQb3BVcE1lbnUoTlNNZW51ICopIHsg
fQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCkgPSAwOworI2VuZGlmCisKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQogICAgICAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZlbnRzKGJvb2wp
ID0gMDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDQgKzQ2LDQ1
NyBAQCBJbnRQb2ludCBkZXRlcm1pbmVIb3RTcG90KEltYWdlKiBpbWFnZSwgCiAgICAgcmV0dXJu
IEludFBvaW50KCk7CiB9CiAKK2NvbnN0IEN1cnNvciYgQ3Vyc29yOjpmcm9tVHlwZShDdXJzb3I6
OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBDdXJzb3I6
OlBvaW50ZXI6CisgICAgICAgICAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworICAgICAgICBj
YXNlIEN1cnNvcjo6Q3Jvc3M6CisgICAgICAgICAgICByZXR1cm4gY3Jvc3NDdXJzb3IoKTsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6OkhhbmQ6CisgICAgICAgICAgICByZXR1cm4gaGFuZEN1cnNvcigp
OworICAgICAgICBjYXNlIEN1cnNvcjo6SUJlYW06CisgICAgICAgICAgICByZXR1cm4gaUJlYW1D
dXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OldhaXQ6CisgICAgICAgICAgICByZXR1cm4g
d2FpdEN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6SGVscDoKKyAgICAgICAgICAgIHJl
dHVybiBoZWxwQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0UmVzaXplOgorICAg
ICAgICAgICAgcmV0dXJuIGVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6
Ok5vcnRoUmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoUmVzaXplQ3Vyc29yKCk7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4g
bm9ydGhFYXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RS
ZXNpemU6CisgICAgICAgICAgICByZXR1cm4gbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCk7CisgICAg
ICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBzb3V0aFJl
c2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UmVzaXplOgorICAg
ICAgICAgICAgcmV0dXJuIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1
cnNvcjo6U291dGhXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIHNvdXRoV2VzdFJlc2l6
ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6V2VzdFJlc2l6ZToKKyAgICAgICAgICAg
IHJldHVybiB3ZXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFNv
dXRoUmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKTsK
KyAgICAgICAgY2FzZSBDdXJzb3I6OkVhc3RXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJu
IGVhc3RXZXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RT
b3V0aFdlc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gbm9ydGhFYXN0U291dGhXZXN0UmVz
aXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RTb3V0aEVhc3RSZXNp
emU6CisgICAgICAgICAgICByZXR1cm4gbm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKCk7
CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDb2x1bW5SZXNpemU6CisgICAgICAgICAgICByZXR1cm4g
Y29sdW1uUmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpSb3dSZXNpemU6Cisg
ICAgICAgICAgICByZXR1cm4gcm93UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpNaWRkbGVQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIG1pZGRsZVBhbm5pbmdDdXJzb3Io
KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkVhc3RQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJu
IGVhc3RQYW5uaW5nQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFBhbm5pbmc6
CisgICAgICAgICAgICByZXR1cm4gbm9ydGhQYW5uaW5nQ3Vyc29yKCk7CisgICAgICAgIGNhc2Ug
Q3Vyc29yOjpOb3J0aEVhc3RQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoRWFzdFBh
bm5pbmdDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFBhbm5pbmc6Cisg
ICAgICAgICAgICByZXR1cm4gbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpOworICAgICAgICBjYXNl
IEN1cnNvcjo6U291dGhQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIHNvdXRoUGFubmluZ0N1
cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhFYXN0UGFubmluZzoKKyAgICAgICAg
ICAgIHJldHVybiBzb3V0aEVhc3RQYW5uaW5nQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpTb3V0aFdlc3RQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIHNvdXRoV2VzdFBhbm5pbmdD
dXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Oldlc3RQYW5uaW5nOgorICAgICAgICAgICAg
cmV0dXJuIHdlc3RQYW5uaW5nQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpNb3ZlOgor
ICAgICAgICAgICAgcmV0dXJuIG1vdmVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlZl
cnRpY2FsVGV4dDoKKyAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbFRleHRDdXJzb3IoKTsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6OkNlbGw6CisgICAgICAgICAgICByZXR1cm4gY2VsbEN1cnNvcigp
OworICAgICAgICBjYXNlIEN1cnNvcjo6Q29udGV4dE1lbnU6CisgICAgICAgICAgICByZXR1cm4g
Y29udGV4dE1lbnVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkFsaWFzOgorICAgICAg
ICAgICAgcmV0dXJuIGFsaWFzQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpQcm9ncmVz
czoKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmVzc0N1cnNvcigpOworICAgICAgICBjYXNlIEN1
cnNvcjo6Tm9Ecm9wOgorICAgICAgICAgICAgcmV0dXJuIG5vRHJvcEN1cnNvcigpOworICAgICAg
ICBjYXNlIEN1cnNvcjo6Q29weToKKyAgICAgICAgICAgIHJldHVybiBjb3B5Q3Vyc29yKCk7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpOb25lOgorICAgICAgICAgICAgcmV0dXJuIG5vbmVDdXJzb3Io
KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vdEFsbG93ZWQ6CisgICAgICAgICAgICByZXR1cm4g
bm90QWxsb3dlZEN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Wm9vbUluOgorICAgICAg
ICAgICAgcmV0dXJuIHpvb21JbkN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Wm9vbU91
dDoKKyAgICAgICAgICAgIHJldHVybiB6b29tT3V0Q3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vy
c29yOjpHcmFiOgorICAgICAgICAgICAgcmV0dXJuIGdyYWJDdXJzb3IoKTsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6OkdyYWJiaW5nOgorICAgICAgICAgICAgcmV0dXJuIGdyYWJiaW5nQ3Vyc29yKCk7
CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDdXN0b206CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKIH0KKworY29uc3Qg
Y2hhciogbmFtZUZvckN1cnNvclR5cGUoQ3Vyc29yOjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpQb2ludGVyOgorICAgICAgICAgICAgcmV0
dXJuICJQb2ludGVyIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNyb3NzOgorICAgICAgICAgICAg
cmV0dXJuICJDcm9zcyI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpIYW5kOgorICAgICAgICAgICAg
cmV0dXJuICJIYW5kIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OklCZWFtOgorICAgICAgICAgICAg
cmV0dXJuICJJQmVhbSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpXYWl0OgorICAgICAgICAgICAg
cmV0dXJuICJXYWl0IjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkhlbHA6CisgICAgICAgICAgICBy
ZXR1cm4gIkhlbHAiOworICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFJlc2l6ZToKKyAgICAgICAg
ICAgIHJldHVybiAiRWFzdFJlc2l6ZSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFJlc2l6
ZToKKyAgICAgICAgICAgIHJldHVybiAiTm9ydGhSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNv
cjo6Tm9ydGhFYXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuICJOb3J0aEVhc3RSZXNpemUi
OworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0
dXJuICJOb3J0aFdlc3RSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhSZXNpemU6
CisgICAgICAgICAgICByZXR1cm4gIlNvdXRoUmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6
OlNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiU291dGhFYXN0UmVzaXplIjsK
KyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVy
biAiU291dGhXZXN0UmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6Oldlc3RSZXNpemU6Cisg
ICAgICAgICAgICByZXR1cm4gIldlc3RSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9y
dGhTb3V0aFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiTm9ydGhTb3V0aFJlc2l6ZSI7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0V2VzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAi
RWFzdFdlc3RSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0U291dGhXZXN0
UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuICJOb3J0aEVhc3RTb3V0aFdlc3RSZXNpemUiOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplOgorICAgICAgICAg
ICAgcmV0dXJuICJOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNv
cjo6Q29sdW1uUmVzaXplOgorICAgICAgICAgICAgcmV0dXJuICJDb2x1bW5SZXNpemUiOworICAg
ICAgICBjYXNlIEN1cnNvcjo6Um93UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuICJSb3dSZXNp
emUiOworICAgICAgICBjYXNlIEN1cnNvcjo6TWlkZGxlUGFubmluZzoKKyAgICAgICAgICAgIHJl
dHVybiAiTWlkZGxlUGFubmluZyI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0UGFubmluZzoK
KyAgICAgICAgICAgIHJldHVybiAiRWFzdFBhbm5pbmciOworICAgICAgICBjYXNlIEN1cnNvcjo6
Tm9ydGhQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuICJOb3J0aFBhbm5pbmciOworICAgICAg
ICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiAiTm9y
dGhFYXN0UGFubmluZyI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RQYW5uaW5nOgor
ICAgICAgICAgICAgcmV0dXJuICJOb3J0aFdlc3RQYW5uaW5nIjsKKyAgICAgICAgY2FzZSBDdXJz
b3I6OlNvdXRoUGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiAiU291dGhQYW5uaW5nIjsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4g
IlNvdXRoRWFzdFBhbm5pbmciOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UGFubmlu
ZzoKKyAgICAgICAgICAgIHJldHVybiAiU291dGhXZXN0UGFubmluZyI7CisgICAgICAgIGNhc2Ug
Q3Vyc29yOjpXZXN0UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiAiV2VzdFBhbm5pbmciOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6TW92ZToKKyAgICAgICAgICAgIHJldHVybiAiTW92ZSI7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpWZXJ0aWNhbFRleHQ6CisgICAgICAgICAgICByZXR1cm4gIlZl
cnRpY2FsVGV4dCI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDZWxsOgorICAgICAgICAgICAgcmV0
dXJuICJDZWxsIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNvbnRleHRNZW51OgorICAgICAgICAg
ICAgcmV0dXJuICJDb250ZXh0TWVudSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpBbGlhczoKKyAg
ICAgICAgICAgIHJldHVybiAiQWxpYXMiOworICAgICAgICBjYXNlIEN1cnNvcjo6UHJvZ3Jlc3M6
CisgICAgICAgICAgICByZXR1cm4gIlByb2dyZXNzIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5v
RHJvcDoKKyAgICAgICAgICAgIHJldHVybiAiTm9Ecm9wIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6
OkNvcHk6CisgICAgICAgICAgICByZXR1cm4gIkNvcHkiOworICAgICAgICBjYXNlIEN1cnNvcjo6
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAiTm9uZSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpO
b3RBbGxvd2VkOgorICAgICAgICAgICAgcmV0dXJuICJOb3RBbGxvd2VkIjsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6Olpvb21JbjoKKyAgICAgICAgICAgIHJldHVybiAiWm9vbUluIjsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6Olpvb21PdXQ6CisgICAgICAgICAgICByZXR1cm4gIlpvb21PdXQiOworICAg
ICAgICBjYXNlIEN1cnNvcjo6R3JhYjoKKyAgICAgICAgICAgIHJldHVybiAiR3JhYiI7CisgICAg
ICAgIGNhc2UgQ3Vyc29yOjpHcmFiYmluZzoKKyAgICAgICAgICAgIHJldHVybiAiR3JhYmJpbmci
OworICAgICAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgorICAgICAgICAgICAgcmV0dXJuICJDdXN0
b20iOworICAgIH0KKworICAgIHJldHVybiAiRVJST1IiOworfQorCisjaWYgVVNFKExBWllfTkFU
SVZFX0NVUlNPUikKKworY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6UG9pbnRlcikpOworICAgIHJldHVy
biBjOworfQorCitjb25zdCBDdXJzb3ImIGNyb3NzQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Q3Jvc3MpKTsKKyAgICByZXR1cm4gYzsKK30K
KworY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEN1cnNvciwgYywgKEN1cnNvcjo6SGFuZCkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBD
dXJzb3ImIG1vdmVDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBj
LCAoQ3Vyc29yOjpNb3ZlKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgdmVy
dGljYWxUZXh0Q3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywg
KEN1cnNvcjo6VmVydGljYWxUZXh0KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNv
ciYgY2VsbEN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChD
dXJzb3I6OkNlbGwpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBjb250ZXh0
TWVudUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJz
b3I6OkNvbnRleHRNZW51KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgYWxp
YXNDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29y
OjpBbGlhcykpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHpvb21JbkN1cnNv
cigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Olpvb21J
bikpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHpvb21PdXRDdXJzb3IoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpab29tT3V0KSk7
CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY29weUN1cnNvcigpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OkNvcHkpKTsKKyAgICByZXR1
cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Tm9uZSkpOworICAgIHJldHVybiBjOworfQor
Citjb25zdCBDdXJzb3ImIHByb2dyZXNzQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKEN1cnNvcjo6UHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gYzsKK30KKwor
Y29uc3QgQ3Vyc29yJiBub0Ryb3BDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Q3Vyc29yLCBjLCAoQ3Vyc29yOjpOb0Ryb3ApKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3Qg
Q3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1
cnNvciwgYywgKEN1cnNvcjo6Tm90QWxsb3dlZCkpOworICAgIHJldHVybiBjOworfQorCitjb25z
dCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNv
ciwgYywgKEN1cnNvcjo6SUJlYW0pKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29y
JiB3YWl0Q3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1
cnNvcjo6V2FpdCkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGhlbHBDdXJz
b3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpIZWxw
KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFJlc2l6ZUN1cnNvcigp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OkVhc3RSZXNp
emUpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFJlc2l6ZUN1cnNv
cigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Ok5vcnRo
UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVz
aXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNv
cjo6Tm9ydGhFYXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYg
bm9ydGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNv
ciwgYywgKEN1cnNvcjo6Tm9ydGhXZXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2Nv
bnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpTb3V0aFJlc2l6ZSkpOworICAgIHJldHVybiBjOworfQor
Citjb25zdCBDdXJzb3ImIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OlNvdXRoRWFzdFJlc2l6ZSkpOworICAgIHJl
dHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OlNvdXRoV2VzdFJlc2l6
ZSkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHdlc3RSZXNpemVDdXJzb3Io
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpXZXN0UmVz
aXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhTb3V0aFJlc2l6
ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6
Ok5vcnRoU291dGhSZXNpemUpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBl
YXN0V2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3Is
IGMsIChDdXJzb3I6OkVhc3RXZXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0
IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Tm9ydGhFYXN0U291dGhXZXN0UmVzaXpl
KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhFYXN0
UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1
cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2Nv
bnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Q29sdW1uUmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9
CisKK2NvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Um93UmVzaXplKSk7CisgICAgcmV0dXJuIGM7Cit9
CisKK2NvbnN0IEN1cnNvciYgbWlkZGxlUGFubmluZ0N1cnNvcigpCit7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Ok1pZGRsZVBhbm5pbmcpKTsKKyAgICByZXR1
cm4gYzsKK30KKyAgICAKK2NvbnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpFYXN0UGFubmluZykpOwor
ICAgIHJldHVybiBjOworfQorICAgIAorY29uc3QgQ3Vyc29yJiBub3J0aFBhbm5pbmdDdXJzb3Io
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpOb3J0aFBh
bm5pbmcpKTsKKyAgICByZXR1cm4gYzsKK30KKyAgICAKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0
UGFubmluZ0N1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChD
dXJzb3I6Ok5vcnRoRWFzdFBhbm5pbmcpKTsKKyAgICByZXR1cm4gYzsKK30KKyAgICAKK2NvbnN0
IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Ok5vcnRoV2VzdFBhbm5pbmcpKTsKKyAgICByZXR1cm4g
YzsKK30KKyAgICAKK2NvbnN0IEN1cnNvciYgc291dGhQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6U291dGhQYW5uaW5nKSk7Cisg
ICAgcmV0dXJuIGM7Cit9CisgICAgCitjb25zdCBDdXJzb3ImIHNvdXRoRWFzdFBhbm5pbmdDdXJz
b3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpTb3V0
aEVhc3RQYW5uaW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisgICAgCitjb25zdCBDdXJzb3ImIHNv
dXRoV2VzdFBhbm5pbmdDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29y
LCBjLCAoQ3Vyc29yOjpTb3V0aFdlc3RQYW5uaW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisgICAg
Citjb25zdCBDdXJzb3ImIHdlc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6V2VzdFBhbm5pbmcpKTsKKyAgICByZXR1cm4gYzsK
K30KKworY29uc3QgQ3Vyc29yJiBncmFiQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKEN1cnNvcjo6R3JhYikpOworICAgIHJldHVybiBjOworfQorCitjb25z
dCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1
cnNvciwgYywgKEN1cnNvcjo6R3JhYmJpbmcpKTsKKyAgICByZXR1cm4gYzsKK30KKworI2VuZGlm
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ3Vyc29y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAkocmV2aXNpb24gNjMx
MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MiArMjYsMTUgQEAKICNpZm5kZWYgQ3Vyc29yX2gKICNkZWZpbmUgQ3Vyc29yX2gKIAorI2luY2x1
ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCBISUNPTl9fKiBISUNPTjsK
IHR5cGVkZWYgSElDT04gSENVUlNPUjsKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2VsaWYg
UExBVEZPUk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0dka0N1cnNvciBHZGtDdXJzb3I7CiAjZWxp
ZiBQTEFURk9STShRVCkKQEAgLTU5LDEwICs2MiwxMyBAQCB0eXBlZGVmIHN0cnVjdCBISUNPTl9f
ICpISUNPTjsKIHR5cGVkZWYgSElDT04gSENVUlNPUjsKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
V0lOKSB8fCBQTEFURk9STShNQUMpCisjZGVmaW5lIFdURl9VU0VfTEFaWV9OQVRJVkVfQ1VSU09S
IDEKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBJbWFnZTsKLSAg
ICBjbGFzcyBJbnRQb2ludDsKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBjbGFzcyBTaGFyZWRD
dXJzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWRDdXJzb3I+IHsKQEAgLTc1LDU1ICs4MSwx
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIQ1VSU09SIG1fbmF0aXZlQ3Vyc29y
OwogICAgIH07CiAgICAgdHlwZWRlZiBSZWZQdHI8U2hhcmVkQ3Vyc29yPiBQbGF0Zm9ybUN1cnNv
cjsKLSAgICB0eXBlZGVmIEhDVVJTT1IgUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFU
Rk9STShNQUMpCiAgICAgdHlwZWRlZiBOU0N1cnNvciogUGxhdGZvcm1DdXJzb3I7Ci0gICAgdHlw
ZWRlZiBOU0N1cnNvciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFURk9STShHVEsp
CiAgICAgdHlwZWRlZiBHZGtDdXJzb3IqIFBsYXRmb3JtQ3Vyc29yOwotICAgIHR5cGVkZWYgR2Rr
Q3Vyc29yKiBQbGF0Zm9ybUN1cnNvckhhbmRsZTsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICB0
eXBlZGVmIGNvbnN0IGNoYXIqIFBsYXRmb3JtQ3Vyc29yOwotICAgIHR5cGVkZWYgY29uc3QgY2hh
ciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkgJiYgIWRlZmluZWQo
UVRfTk9fQ1VSU09SKQogICAgIHR5cGVkZWYgUUN1cnNvciBQbGF0Zm9ybUN1cnNvcjsKLSAgICB0
eXBlZGVmIFFDdXJzb3IqIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOwogI2VsaWYgUExBVEZPUk0oV1gp
CiAgICAgdHlwZWRlZiB3eEN1cnNvciogUGxhdGZvcm1DdXJzb3I7Ci0gICAgdHlwZWRlZiB3eEN1
cnNvciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFURk9STShDSFJPTUlVTSkKICAg
ICAvLyBTZWUgUGxhdGZvcm1DdXJzb3IuaAotICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1DdXJz
b3JIYW5kbGU7CiAjZWxpZiBQTEFURk9STShIQUlLVSkKICAgICB0eXBlZGVmIEJDdXJzb3IqIFBs
YXRmb3JtQ3Vyc29yOwotICAgIHR5cGVkZWYgQkN1cnNvciogUGxhdGZvcm1DdXJzb3JIYW5kbGU7
CiAjZWxzZQogICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1DdXJzb3I7Ci0gICAgdHlwZWRlZiB2
b2lkKiBQbGF0Zm9ybUN1cnNvckhhbmRsZTsKICNlbmRpZgogCiAgICAgY2xhc3MgQ3Vyc29yIHsK
ICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gVHlwZSB7CisgICAgICAgICAgICBQb2ludGVyLAor
ICAgICAgICAgICAgQ3Jvc3MsCisgICAgICAgICAgICBIYW5kLAorICAgICAgICAgICAgSUJlYW0s
CisgICAgICAgICAgICBXYWl0LAorICAgICAgICAgICAgSGVscCwKKyAgICAgICAgICAgIEVhc3RS
ZXNpemUsCisgICAgICAgICAgICBOb3J0aFJlc2l6ZSwKKyAgICAgICAgICAgIE5vcnRoRWFzdFJl
c2l6ZSwKKyAgICAgICAgICAgIE5vcnRoV2VzdFJlc2l6ZSwKKyAgICAgICAgICAgIFNvdXRoUmVz
aXplLAorICAgICAgICAgICAgU291dGhFYXN0UmVzaXplLAorICAgICAgICAgICAgU291dGhXZXN0
UmVzaXplLAorICAgICAgICAgICAgV2VzdFJlc2l6ZSwKKyAgICAgICAgICAgIE5vcnRoU291dGhS
ZXNpemUsCisgICAgICAgICAgICBFYXN0V2VzdFJlc2l6ZSwKKyAgICAgICAgICAgIE5vcnRoRWFz
dFNvdXRoV2VzdFJlc2l6ZSwKKyAgICAgICAgICAgIE5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZSwK
KyAgICAgICAgICAgIENvbHVtblJlc2l6ZSwKKyAgICAgICAgICAgIFJvd1Jlc2l6ZSwKKyAgICAg
ICAgICAgIE1pZGRsZVBhbm5pbmcsCisgICAgICAgICAgICBFYXN0UGFubmluZywKKyAgICAgICAg
ICAgIE5vcnRoUGFubmluZywKKyAgICAgICAgICAgIE5vcnRoRWFzdFBhbm5pbmcsCisgICAgICAg
ICAgICBOb3J0aFdlc3RQYW5uaW5nLAorICAgICAgICAgICAgU291dGhQYW5uaW5nLAorICAgICAg
ICAgICAgU291dGhFYXN0UGFubmluZywKKyAgICAgICAgICAgIFNvdXRoV2VzdFBhbm5pbmcsCisg
ICAgICAgICAgICBXZXN0UGFubmluZywKKyAgICAgICAgICAgIE1vdmUsCisgICAgICAgICAgICBW
ZXJ0aWNhbFRleHQsCisgICAgICAgICAgICBDZWxsLAorICAgICAgICAgICAgQ29udGV4dE1lbnUs
CisgICAgICAgICAgICBBbGlhcywKKyAgICAgICAgICAgIFByb2dyZXNzLAorICAgICAgICAgICAg
Tm9Ecm9wLAorICAgICAgICAgICAgQ29weSwKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAg
ICBOb3RBbGxvd2VkLAorICAgICAgICAgICAgWm9vbUluLAorICAgICAgICAgICAgWm9vbU91dCwK
KyAgICAgICAgICAgIEdyYWIsCisgICAgICAgICAgICBHcmFiYmluZywKKyAgICAgICAgICAgIEN1
c3RvbQorICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyBjb25zdCBDdXJzb3ImIGZyb21UeXBl
KEN1cnNvcjo6VHlwZSk7CisKICAgICAgICAgQ3Vyc29yKCkKICNpZiAhUExBVEZPUk0oUVQpICYm
ICFQTEFURk9STShFRkwpCi0gICAgICAgIDogbV9pbXBsKDApCisgICAgICAgICAgICA6IG1fcGxh
dGZvcm1DdXJzb3IoMCkKICNlbmRpZgotICAgICAgICB7IH0KKyAgICAgICAgeworICAgICAgICB9
CiAKICAgICAgICAgQ3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpOwogICAg
ICAgICBDdXJzb3IoY29uc3QgQ3Vyc29yJik7CiAgICAgICAgIH5DdXJzb3IoKTsKICAgICAgICAg
Q3Vyc29yJiBvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJik7CiAKKyNpZiBVU0UoTEFaWV9OQVRJVkVf
Q1VSU09SKQorICAgICAgICBDdXJzb3IoVHlwZSk7CisgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgICAgICBJbWFnZSogaW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0IEludFBvaW50JiBob3RTcG90KCkgY29u
c3QgeyByZXR1cm4gbV9ob3RTcG90OyB9CisgICAgICAgIFBsYXRmb3JtQ3Vyc29yIHBsYXRmb3Jt
Q3Vyc29yKCkgY29uc3Q7CisjZWxzZQogICAgICAgICBDdXJzb3IoUGxhdGZvcm1DdXJzb3IpOwot
ICAgICAgICBQbGF0Zm9ybUN1cnNvciBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9Cisg
ICAgICAgIFBsYXRmb3JtQ3Vyc29yIGltcGwoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtQ3Vy
c29yOyB9CisjZW5kaWYKIAogICAgICBwcml2YXRlOgotICAgICAgICBQbGF0Zm9ybUN1cnNvciBt
X2ltcGw7CisjaWYgVVNFKExBWllfTkFUSVZFX0NVUlNPUikKKyAgICAgICAgVHlwZSBtX3R5cGU7
CisgICAgICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICAgICAgSW50UG9pbnQgbV9ob3RT
cG90OworI2VuZGlmCisKKyAgICAgICAgbXV0YWJsZSBQbGF0Zm9ybUN1cnNvciBtX3BsYXRmb3Jt
Q3Vyc29yOwogICAgIH07CiAKICAgICBJbnRQb2ludCBkZXRlcm1pbmVIb3RTcG90KEltYWdlKiwg
Y29uc3QgSW50UG9pbnQmIHNwZWNpZmllZEhvdFNwb3QpOwotCisgICAgY29uc3QgY2hhciogbmFt
ZUZvckN1cnNvclR5cGUoQ3Vyc29yOjpUeXBlKTsKKyAgICAKICAgICBjb25zdCBDdXJzb3ImIHBv
aW50ZXJDdXJzb3IoKTsKICAgICBjb25zdCBDdXJzb3ImIGNyb3NzQ3Vyc29yKCk7CiAgICAgY29u
c3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5k
b3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAkocmV2aXNp
b24gNjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEN1cnNv
cjsKKwogY2xhc3MgSG9zdFdpbmRvdyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+SG9zdFdpbmRvdygpIHsgfQpAQCAtNTYsNiArNTgsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgLy8gVG8gbm90aWZ5IFdlYktpdCBvZiBzY3JvbGxiYXIgbW9kZSBjaGFuZ2VzLgog
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0ID0gMDsKKwor
ICAgIC8vIFJlcXVlc3QgdGhhdCB0aGUgY3Vyc29yIGNoYW5nZS4KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ3Vyc29yQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ3Vyc29yQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ3Vyc29yQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTIgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKLSAgICA6IG1f
aW1wbChvdGhlci5tX2ltcGwpCisgICAgOiBtX3BsYXRmb3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZv
cm1DdXJzb3IpCiB7CiB9CiAKIEN1cnNvcjo6Q3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50
UG9pbnQmIGhvdFNwb3QpCi0gICAgOiBtX2ltcGwoaW1hZ2UsIGhvdFNwb3QpCisgICAgOiBtX3Bs
YXRmb3JtQ3Vyc29yKGltYWdlLCBob3RTcG90KQogewogfQogCkBAIC00OSwxMiArNDksMTIgQEAg
Q3Vyc29yOjp+Q3Vyc29yKCkKIAogQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBDdXJz
b3ImIG90aGVyKQogewotICAgIG1faW1wbCA9IG90aGVyLm1faW1wbDsKKyAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
IEN1cnNvcjo6Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIGMpCi0gICAgOiBtX2ltcGwoYykKKyAgICA6
IG1fcGxhdGZvcm1DdXJzb3IoYykKIHsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
Q3Vyc29yRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2VmbC9DdXJzb3JF
ZmwuY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0N1cnNvckVm
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDMzICs0NSwzMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEN1cnNvcjo6Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIHApCiB7Ci0gICAgbV9pbXBsID0g
ZWluYV9zdHJpbmdzaGFyZV9hZGQocCk7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGVpbmFfc3Ry
aW5nc2hhcmVfYWRkKHApOwogfQogCiBDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVy
KQogewotICAgIG1faW1wbCA9IGVpbmFfc3RyaW5nc2hhcmVfcmVmKG90aGVyLm1faW1wbCk7Cisg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGVpbmFfc3RyaW5nc2hhcmVfcmVmKG90aGVyLm1fcGxhdGZv
cm1DdXJzb3IpOwogfQogCiBDdXJzb3I6On5DdXJzb3IoKQogewotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwobV9pbXBsKTsKLSAgICAgICAgbV9pbXBsID0g
MDsKKyAgICBpZiAobV9wbGF0Zm9ybUN1cnNvcikgeworICAgICAgICBlaW5hX3N0cmluZ3NoYXJl
X2RlbChtX3BsYXRmb3JtQ3Vyc29yKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IDA7CiAg
ICAgfQogfQogCiBDdXJzb3I6OkN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBo
b3RzcG90KQotICAgIDogbV9pbXBsKDApCisgICAgOiBtX3BsYXRmb3JtQ3Vyc29yKDApCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25z
dCBDdXJzb3ImIG90aGVyKQogewotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKG90aGVyLm1faW1w
bCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwobV9pbXBsKTsKLSAgICBtX2ltcGwgPSBvdGhl
ci5tX2ltcGw7CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYob3RoZXIubV9wbGF0Zm9ybUN1cnNv
cik7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwobV9wbGF0Zm9ybUN1cnNvcik7CisgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9DdXJzb3JHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5jcHAJKHJldmlzaW9uIDYzMTAy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ3Vyc29yR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsMzggKzU3LDM4IEBAIHN0YXRpYyBHZGtDdXJzb3IqIGN1c3RvbUN1cnNvck5ldyhDdXN0
b20KIAogCiBDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQotICAgIDogbV9pbXBs
KG90aGVyLm1faW1wbCkKKyAgICA6IG1fcGxhdGZvcm1DdXJzb3Iob3RoZXIubV9wbGF0Zm9ybUN1
cnNvcikKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBnZGtfY3Vyc29yX3JlZihtX2ltcGwp
OworICAgIGlmIChtX3BsYXRmb3JtQ3Vyc29yKQorICAgICAgICBnZGtfY3Vyc29yX3JlZihtX3Bs
YXRmb3JtQ3Vyc29yKTsKIH0KIAogQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRQb2ludCYgaG90U3BvdCkKIHsKICAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0
ZXJtaW5lSG90U3BvdChpbWFnZSwgaG90U3BvdCk7CiAgICAgR2RrUGl4YnVmKiBwaXhidWYgPSBp
bWFnZS0+Z2V0R2RrUGl4YnVmKCk7Ci0gICAgbV9pbXBsID0gZ2RrX2N1cnNvcl9uZXdfZnJvbV9w
aXhidWYoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSwgcGl4YnVmLCBlZmZlY3RpdmVIb3RTcG90
LngoKSwgZWZmZWN0aXZlSG90U3BvdC55KCkpOworICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBnZGtf
Y3Vyc29yX25ld19mcm9tX3BpeGJ1ZihnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpLCBwaXhidWYs
IGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90LnkoKSk7CiAgICAgZ19vYmpl
Y3RfdW5yZWYocGl4YnVmKTsKIH0KIAogQ3Vyc29yOjp+Q3Vyc29yKCkKIHsKLSAgICBpZiAobV9p
bXBsKQotICAgICAgICBnZGtfY3Vyc29yX3VucmVmKG1faW1wbCk7CisgICAgaWYgKG1fcGxhdGZv
cm1DdXJzb3IpCisgICAgICAgIGdka19jdXJzb3JfdW5yZWYobV9wbGF0Zm9ybUN1cnNvcik7CiB9
CiAKIEN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKIHsKLSAg
ICBnZGtfY3Vyc29yX3JlZihvdGhlci5tX2ltcGwpOwotICAgIGdka19jdXJzb3JfdW5yZWYobV9p
bXBsKTsKLSAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7CisgICAgZ2RrX2N1cnNvcl9yZWYob3Ro
ZXIubV9wbGF0Zm9ybUN1cnNvcik7CisgICAgZ2RrX2N1cnNvcl91bnJlZihtX3BsYXRmb3JtQ3Vy
c29yKTsKKyAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsKICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKIEN1cnNvcjo6Q3Vyc29yKEdka0N1cnNvciogYykKLSAgICA6
IG1faW1wbChjKQorICAgIDogbV9wbGF0Zm9ybUN1cnNvcihjKQogewotICAgIG1faW1wbCA9IGM7
CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGM7CiAKICAgICAvLyBUaGUgR2RrQ3Vyc29yIG1heSBi
ZSBOVUxMIC0gdGhlIGRlZmF1bHQgY3Vyc29yIGZvciB0aGUgd2luZG93LgogICAgIGlmIChjKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAJKHJldmlzaW9uIDYzMTAy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9DdXJzb3JIYWlrdS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDMxICszNCwzMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDdXJzb3I6OkN1
cnNvcihQbGF0Zm9ybUN1cnNvciBjdXJzb3IpCi0gICAgOiBtX2ltcGwoY3Vyc29yKQorICAgIDog
bV9wbGF0Zm9ybUN1cnNvcihjdXJzb3IpCiB7CiB9CiAKIEN1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1
cnNvciYgb3RoZXIpCi0gICAgOiBtX2ltcGwoMCkKKyAgICA6IG1fcGxhdGZvcm1DdXJzb3IoMCkK
IHsKICAgICAqdGhpcyA9IG90aGVyOwogfQogCiBDdXJzb3I6On5DdXJzb3IoKQogewotICAgIGRl
bGV0ZSBtX2ltcGw7CisgICAgZGVsZXRlIG1fcGxhdGZvcm1DdXJzb3I7CiB9CiAKIEN1cnNvcjo6
Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQmKQotICAgIDogbV9pbXBsKDApCisgICAgOiBt
X3BsYXRmb3JtQ3Vyc29yKDApCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogQ3Vyc29y
JiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBDdXJzb3ImIG90aGVyKQogewotICAgIGRlbGV0ZSBt
X2ltcGw7Ci0gICAgbV9pbXBsID0gb3RoZXIubV9pbXBsID8gbmV3IEJDdXJzb3IoKm90aGVyLm1f
aW1wbCkgOiAwOworICAgIGRlbGV0ZSBtX3BsYXRmb3JtQ3Vyc29yOworICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vyc29yID8gbmV3IEJDdXJzb3IoKm90aGVyLm1fcGxh
dGZvcm1DdXJzb3IpIDogMDsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9DdXJzb3JNYWMubW0JKHJldmlzaW9uIDYzMTAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvQ3Vyc29yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbXBv
cnQgIkJsb2NrRXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgotI2lt
cG9ydCAiSW1hZ2UuaCIKLSNpbXBvcnQgIkludFBvaW50LmgiCiAjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKIEBpbnRlcmZhY2UgV2ViQ29yZUN1cnNvckJ1bmRsZSA6IE5TT2JqZWN0IHsg
fQpAQCAtNTAsNyArNDgsNyBAQCBzdGF0aWMgTlNDdXJzb3IqIGNyZWF0ZUN1c3RvbUN1cnNvcihJ
bWFnCiAgICAgaWYgKCFpbWcpCiAgICAgICAgIHJldHVybiAwOwogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW1tOU0N1cnNvciBhbGxvY10gaW5pdFdpdGhJbWFn
ZTppbWcgaG90U3BvdDpkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90KV07CisgICAgcmV0
dXJuIFtbTlNDdXJzb3IgYWxsb2NdIGluaXRXaXRoSW1hZ2U6aW1nIGhvdFNwb3Q6aG90U3BvdF07
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4gMDsKIH0KQEAgLTc2
LDI4MSArNzQsMTM3IEBAIHN0YXRpYyBOU0N1cnNvciogbGVha05hbWVkQ3Vyc29yKGNvbnN0IGMK
ICAgICByZXR1cm4gbmlsOwogfQogCi1DdXJzb3I6OkN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0
IEludFBvaW50JiBob3RTcG90KQotICAgIDogbV9pbXBsKEhhcmRSZXRhaW5XaXRoTlNSZWxlYXNl
KGNyZWF0ZUN1c3RvbUN1cnNvcihpbWFnZSwgaG90U3BvdCkpKQotewotfQotCi1DdXJzb3I6OkN1
cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQotICAgIDogbV9pbXBsKEhhcmRSZXRhaW4ob3RoZXIu
bV9pbXBsKSkKLXsKLX0KLQotQ3Vyc29yOjp+Q3Vyc29yKCkKLXsKLSAgICBIYXJkUmVsZWFzZSht
X2ltcGwpOwotfQotCi1DdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3Ro
ZXIpCi17Ci0gICAgSGFyZFJldGFpbihvdGhlci5tX2ltcGwpOwotICAgIEhhcmRSZWxlYXNlKG1f
aW1wbCk7Ci0gICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOwotICAgIHJldHVybiAqdGhpczsKLX0K
LQotQ3Vyc29yOjpDdXJzb3IoTlNDdXJzb3IqIGMpCi0gICAgOiBtX2ltcGwoSGFyZFJldGFpbihj
KSkKLXsKLX0KLQotY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKFtOU0N1cnNvciBhcnJvd0N1cnNvcl0pKTsKLSAgICBy
ZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoImNyb3NzSGFpckN1cnNv
ciIsIDExLCAxMSkpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBoYW5kQ3Vy
c29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1
cnNvcigibGlua0N1cnNvciIsIDYsIDEpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgbW92ZUN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMs
IChsZWFrTmFtZWRDdXJzb3IoIm1vdmVDdXJzb3IiLCA3LCA3KSkpOwotICAgIHJldHVybiBjOwot
fQotCi1jb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigpCitzdGF0aWMgTlNDdXJzb3Ig
KmNyZWF0ZVBsYXRmb3JtQ3Vyc29yKEN1cnNvcjo6VHlwZSB0eXBlLCBJbWFnZSogaW1hZ2UsIGNv
bnN0IEludFBvaW50JiBob3RTcG90KQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29y
LCBjLCAobGVha05hbWVkQ3Vyc29yKCJ2ZXJ0aWNhbFRleHRDdXJzb3IiLCA3LCA3KSkpOwotICAg
IHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGNlbGxDdXJzb3IoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJjZWxsQ3Vyc29yIiwg
NywgNykpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBjb250ZXh0TWVudUN1
cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRD
dXJzb3IoImNvbnRleHRNZW51Q3Vyc29yIiwgMywgMikpKTsKLSAgICByZXR1cm4gYzsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChD
dXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoImFsaWFzQ3Vyc29yIiwgMTEsIDMpKSk7Ci0gICAg
cmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigiem9vbUluQ3Vyc29y
IiwgNywgNykpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vy
c29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1
cnNvcigiem9vbU91dEN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgY29weUN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3Is
IGMsIChsZWFrTmFtZWRDdXJzb3IoImNvcHlDdXJzb3IiLCAzLCAyKSkpOwotICAgIHJldHVybiBj
OwotfQotCi1jb25zdCBDdXJzb3ImIG5vbmVDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJub25lQ3Vyc29yIiwgNywgNykpKTsK
LSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBwcm9ncmVzc0N1cnNvcigpCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoInByb2dy
ZXNzQ3Vyc29yIiwgMywgMikpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBu
b0Ryb3BDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVh
a05hbWVkQ3Vyc29yKCJub0Ryb3BDdXJzb3IiLCAzLCAxKSkpOwotICAgIHJldHVybiBjOwotfQot
Ci1jb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJub3RBbGxvd2VkQ3Vyc29yIiwgMTEs
IDExKSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkK
LXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKFtOU0N1cnNvciBJQmVhbUN1
cnNvcl0pKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiB3YWl0Q3Vyc29yKCkK
LXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigi
d2FpdEN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
aGVscEN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFr
TmFtZWRDdXJzb3IoImhlbHBDdXJzb3IiLCA4LCA4KSkpOwotICAgIHJldHVybiBjOwotfQotCi1j
b25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJlYXN0UmVzaXplQ3Vyc29yIiwgMTQsIDcp
KSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3Io
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29y
KCJub3J0aFJlc2l6ZUN1cnNvciIsIDcsIDEpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgbm9ydGhFYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigibm9ydGhFYXN0UmVzaXplQ3Vyc29yIiwg
MTQsIDEpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVz
aXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtO
YW1lZEN1cnNvcigibm9ydGhXZXN0UmVzaXplQ3Vyc29yIiwgMCwgMCkpKTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoInNvdXRoUmVzaXplQ3Vy
c29yIiwgNywgMTQpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhF
YXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywg
KGxlYWtOYW1lZEN1cnNvcigic291dGhFYXN0UmVzaXplQ3Vyc29yIiwgMTQsIDE0KSkpOwotICAg
IHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCi17
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoInNv
dXRoV2VzdFJlc2l6ZUN1cnNvciIsIDEsIDE0KSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25z
dCBDdXJzb3ImIHdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Q3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJ3ZXN0UmVzaXplQ3Vyc29yIiwgMSwgNykpKTsK
LSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFNvdXRoUmVzaXplQ3Vyc29y
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNv
cigibm9ydGhTb3V0aFJlc2l6ZUN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJlYXN0V2VzdFJlc2l6ZUN1cnNv
ciIsIDcsIDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgQ3Vyc29yOjpQb2ludGVyOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4o
W05TQ3Vyc29yIGFycm93Q3Vyc29yXSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDcm9zczoKKyAg
ICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigiY3Jvc3NIYWlyQ3Vy
c29yIiwgMTEsIDExKSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpIYW5kOgorICAgICAgICAgICAg
cmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJsaW5rQ3Vyc29yIiwgNiwgMSkpOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6SUJlYW06CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFp
bihbTlNDdXJzb3IgSUJlYW1DdXJzb3JdKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OldhaXQ6Cisg
ICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIndhaXRDdXJzb3Ii
LCA3LCA3KSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpIZWxwOgorICAgICAgICAgICAgcmV0dXJu
IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJoZWxwQ3Vyc29yIiwgOCwgOCkpOworICAgICAg
ICBjYXNlIEN1cnNvcjo6TW92ZToKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok1pZGRsZVBhbm5pbmc6
CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm1vdmVDdXJz
b3IiLCA3LCA3KSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0UmVzaXplOgorICAgICAgICBj
YXNlIEN1cnNvcjo6RWFzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihs
ZWFrTmFtZWRDdXJzb3IoImVhc3RSZXNpemVDdXJzb3IiLCAxNCwgNykpOworICAgICAgICBjYXNl
IEN1cnNvcjo6Tm9ydGhSZXNpemU6CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFBhbm5pbmc6
CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vcnRoUmVz
aXplQ3Vyc29yIiwgNywgMSkpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXpl
OgorICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKKyAgICAgICAgICAgIHJl
dHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm9ydGhFYXN0UmVzaXplQ3Vyc29yIiwg
MTQsIDEpKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFJlc2l6ZToKKyAgICAgICAg
Y2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJl
dGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vcnRoV2VzdFJlc2l6ZUN1cnNvciIsIDAsIDApKTsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXplOgorICAgICAgICBjYXNlIEN1cnNvcjo6U291
dGhQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29y
KCJzb3V0aFJlc2l6ZUN1cnNvciIsIDcsIDE0KSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0
aEVhc3RSZXNpemU6CisgICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RQYW5uaW5nOgorICAg
ICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJzb3V0aEVhc3RSZXNp
emVDdXJzb3IiLCAxNCwgMTQpKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFJlc2l6
ZToKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFBhbm5pbmc6CisgICAgICAgICAgICBy
ZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoInNvdXRoV2VzdFJlc2l6ZUN1cnNvciIs
IDEsIDE0KSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpXZXN0UmVzaXplOgorICAgICAgICAgICAg
cmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJ3ZXN0UmVzaXplQ3Vyc29yIiwgMSwg
NykpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhTb3V0aFJlc2l6ZToKKyAgICAgICAgICAg
IHJldHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm9ydGhTb3V0aFJlc2l6ZUN1cnNv
ciIsIDcsIDcpKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkVhc3RXZXN0UmVzaXplOgorICAgICAg
ICBjYXNlIEN1cnNvcjo6V2VzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFp
bihsZWFrTmFtZWRDdXJzb3IoImVhc3RXZXN0UmVzaXplQ3Vyc29yIiwgNywgNykpOworICAgICAg
ICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0U291dGhXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0
dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVD
dXJzb3IiLCA3LCA3KSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RTb3V0aEVhc3RS
ZXNpemU6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5v
cnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgY2FzZSBDdXJz
b3I6OkNvbHVtblJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBbTlNDdXJzb3IgcmVzaXplTGVm
dFJpZ2h0Q3Vyc29yXTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlJvd1Jlc2l6ZToKKyAgICAgICAg
ICAgIHJldHVybiBbTlNDdXJzb3IgcmVzaXplVXBEb3duQ3Vyc29yXTsKKyAgICAgICAgY2FzZSBD
dXJzb3I6OlZlcnRpY2FsVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKGxlYWtO
YW1lZEN1cnNvcigidmVydGljYWxUZXh0Q3Vyc29yIiwgNywgNykpOworICAgICAgICBjYXNlIEN1
cnNvcjo6Q2VsbDoKKyAgICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNv
cigiY2VsbEN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNvbnRleHRNZW51
OgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJjb250ZXh0
TWVudUN1cnNvciIsIDMsIDIpKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkFsaWFzOgorICAgICAg
ICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJhbGlhc0N1cnNvciIsIDEx
LCAzKSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpQcm9ncmVzczoKKyAgICAgICAgICAgIHJldHVy
biBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigicHJvZ3Jlc3NDdXJzb3IiLCAzLCAyKSk7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpOb0Ryb3A6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFp
bihsZWFrTmFtZWRDdXJzb3IoIm5vRHJvcEN1cnNvciIsIDMsIDEpKTsKKyAgICAgICAgY2FzZSBD
dXJzb3I6OkNvcHk6CisgICAgICAgICAgICByZXR1cm4gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJz
b3IoImNvcHlDdXJzb3IiLCAzLCAyKSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb25lOgorICAg
ICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJub25lQ3Vyc29yIiwg
NywgNykpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm90QWxsb3dlZDoKKyAgICAgICAgICAgIHJl
dHVybiBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm90QWxsb3dlZEN1cnNvciIsIDExLCAx
MSkpOworICAgICAgICBjYXNlIEN1cnNvcjo6Wm9vbUluOgorICAgICAgICAgICAgcmV0dXJuIEhh
cmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJ6b29tSW5DdXJzb3IiLCA3LCA3KSk7CisgICAgICAg
IGNhc2UgQ3Vyc29yOjpab29tT3V0OgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW4obGVh
a05hbWVkQ3Vyc29yKCJ6b29tT3V0Q3Vyc29yIiwgNywgNykpOworICAgICAgICBjYXNlIEN1cnNv
cjo6R3JhYjoKKyAgICAgICAgICAgIHJldHVybiBIYXJkUmV0YWluKFtOU0N1cnNvciBvcGVuSGFu
ZEN1cnNvcl0pOworICAgICAgICBjYXNlIEN1cnNvcjo6R3JhYmJpbmc6CisgICAgICAgICAgICBy
ZXR1cm4gSGFyZFJldGFpbihbTlNDdXJzb3IgY2xvc2VkSGFuZEN1cnNvcl0pOworICAgICAgICBj
YXNlIEN1cnNvcjo6Q3VzdG9tOgorICAgICAgICAgICAgcmV0dXJuIEhhcmRSZXRhaW5XaXRoTlNS
ZWxlYXNlKGNyZWF0ZUN1c3RvbUN1cnNvcihpbWFnZSwgaG90U3BvdCkpOworICAgIH0KIAotY29u
c3QgQ3Vyc29yJiBub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJub3J0aEVhc3RTb3V0
aFdlc3RSZXNpemVDdXJzb3IiLCA3LCA3KSkpOwotICAgIHJldHVybiBjOworICAgIHJldHVybiAw
OwogfQogCi1jb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCitD
dXJzb3I6OkN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQorICAg
IDogbV90eXBlKEN1c3RvbSkKKyAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgLCBtX2hvdFNwb3Qo
ZGV0ZXJtaW5lSG90U3BvdChpbWFnZSwgaG90U3BvdCkpCisgICAgLCBtX3BsYXRmb3JtQ3Vyc29y
KDApCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJz
b3IoIm5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0dXJu
IGM7CiB9CiAKLWNvbnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK0N1cnNvcjo6Q3Vy
c29yKFR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9wbGF0Zm9ybUN1cnNv
cigwKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29yIHJl
c2l6ZUxlZnRSaWdodEN1cnNvcl0pKTsKLSAgICByZXR1cm4gYzsKIH0KIAotY29uc3QgQ3Vyc29y
JiByb3dSZXNpemVDdXJzb3IoKQorQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikK
KyAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCisgICAgLCBtX2ltYWdlKG90aGVyLm1faW1hZ2Up
CisgICAgLCBtX2hvdFNwb3Qob3RoZXIubV9ob3RTcG90KQorICAgICwgbV9wbGF0Zm9ybUN1cnNv
cihIYXJkUmV0YWluKG90aGVyLm1fcGxhdGZvcm1DdXJzb3IpKQogewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29yIHJlc2l6ZVVwRG93bkN1cnNvcl0pKTsKLSAg
ICByZXR1cm4gYzsKIH0KIAotY29uc3QgQ3Vyc29yJiBtaWRkbGVQYW5uaW5nQ3Vyc29yKCkKLXsK
LSAgICByZXR1cm4gbW92ZUN1cnNvcigpOwotfQotICAgIAotY29uc3QgQ3Vyc29yJiBlYXN0UGFu
bmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIGVhc3RSZXNpemVDdXJzb3IoKTsKLX0KLSAgICAK
LWNvbnN0IEN1cnNvciYgbm9ydGhQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gbm9ydGhS
ZXNpemVDdXJzb3IoKTsKLX0KLSAgICAKLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0UGFubmluZ0N1
cnNvcigpCi17Ci0gICAgcmV0dXJuIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpOwotfQotICAgIAot
Y29uc3QgQ3Vyc29yJiBub3J0aFdlc3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gbm9y
dGhXZXN0UmVzaXplQ3Vyc29yKCk7Ci19Ci0gICAgCi1jb25zdCBDdXJzb3ImIHNvdXRoUGFubmlu
Z0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRoUmVzaXplQ3Vyc29yKCk7Ci19Ci0gICAgCi1j
b25zdCBDdXJzb3ImIHNvdXRoRWFzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIHJldHVybiBzb3V0
aEVhc3RSZXNpemVDdXJzb3IoKTsKLX0KLSAgICAKLWNvbnN0IEN1cnNvciYgc291dGhXZXN0UGFu
bmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpOwotfQot
ICAgIAotY29uc3QgQ3Vyc29yJiB3ZXN0UGFubmluZ0N1cnNvcigpCitDdXJzb3I6On5DdXJzb3Io
KQogewotICAgIHJldHVybiB3ZXN0UmVzaXplQ3Vyc29yKCk7CisgICAgSGFyZFJlbGVhc2UobV9w
bGF0Zm9ybUN1cnNvcik7CiB9CiAKLWNvbnN0IEN1cnNvciYgZ3JhYkN1cnNvcigpCitDdXJzb3Im
IEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDdXJzb3IsIGMsIChbTlNDdXJzb3Igb3BlbkhhbmRDdXJzb3JdKSk7Ci0gICAg
cmV0dXJuIGM7CisgICAgbV90eXBlID0gb3RoZXIubV90eXBlOworICAgIG1faW1hZ2UgPSBvdGhl
ci5tX2ltYWdlOworICAgIG1faG90U3BvdCA9IG90aGVyLm1faG90U3BvdDsKKworICAgIEhhcmRS
ZXRhaW4ob3RoZXIubV9wbGF0Zm9ybUN1cnNvcik7CisgICAgSGFyZFJlbGVhc2UobV9wbGF0Zm9y
bUN1cnNvcik7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7
CisgICAgcmV0dXJuICp0aGlzOwogfQogCi1jb25zdCBDdXJzb3ImIGdyYWJiaW5nQ3Vyc29yKCkK
K1BsYXRmb3JtQ3Vyc29yIEN1cnNvcjo6cGxhdGZvcm1DdXJzb3IoKSBjb25zdAogewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29yIGNsb3NlZEhhbmRDdXJzb3Jd
KSk7Ci0gICAgcmV0dXJuIGM7CisgICAgaWYgKCFtX3BsYXRmb3JtQ3Vyc29yKQorICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gY3JlYXRlUGxhdGZvcm1DdXJzb3IobV90eXBlLCBtX2ltYWdlLmdl
dCgpLCBtX2hvdFNwb3QpOworICAgIHJldHVybiBtX3BsYXRmb3JtQ3Vyc29yOwogfQogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShy
ZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTIzLDExICsxMjMsMTIgQEAgdm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJv
b2wgZm9jdXNlZCkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi0gdm9pZCBX
aWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKLSB7Ci0gICAgaWYgKFtOU0N1
cnNvciBjdXJyZW50Q3Vyc29yXSA9PSBjdXJzb3IuaW1wbCgpKQordm9pZCBXaWRnZXQ6OnNldEN1
cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBTY3JvbGxWaWV3KiB2aWV3ID0gcm9v
dCgpOworICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwotICAgIFtjdXJzb3IuaW1wbCgp
IHNldF07CisgICAgdmlldy0+aG9zdFdpbmRvdygpLT5zZXRDdXJzb3IoY3Vyc29yKTsKIH0KIAog
dm9pZCBXaWRnZXQ6OnNob3coKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9DdXJzb3JRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAJKHJldmlz
aW9uIDYzMTAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDEyICs0NCwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDdXJzb3I6
OkN1cnNvcihQbGF0Zm9ybUN1cnNvciBwKQotICAgIDogbV9pbXBsKHApCisgICAgOiBtX3BsYXRm
b3JtQ3Vyc29yKHApCiB7CiB9CiAKIEN1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIp
Ci0gICAgOiBtX2ltcGwob3RoZXIubV9pbXBsKQorICAgIDogbV9wbGF0Zm9ybUN1cnNvcihvdGhl
ci5tX3BsYXRmb3JtQ3Vyc29yKQogewogfQogCkBAIC02MSwxMyArNjEsMTMgQEAgQ3Vyc29yOjpD
dXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQbwogewogI2lmbmRlZiBRVF9OT19DVVJTT1IK
ICAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0ZXJtaW5lSG90U3BvdChpbWFnZSwg
aG90U3BvdCk7Ci0gICAgbV9pbXBsID0gUUN1cnNvcigqKGltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2ZUhvdFNwb3QueSgp
KTsKKyAgICBtX3BsYXRmb3JtQ3Vyc29yID0gUUN1cnNvcigqKGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpKSwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVjdGl2ZUhvdFNwb3Qu
eSgpKTsKICNlbmRpZgogfQogCiBDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNv
ciYgb3RoZXIpCiB7Ci0gICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vyc29yOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEx
ICszOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3Vyc29yOjpDdXJzb3IoY29uc3Qg
Q3Vyc29yJiBvdGhlcikKLSAgICA6IG1faW1wbChvdGhlci5tX2ltcGwpCi17Ci19Ci0KIHN0YXRp
YyBpbmxpbmUgYm9vbCBzdXBwb3J0c0FscGhhQ3Vyc29ycygpIAogewogICAgIE9TVkVSU0lPTklO
Rk8gb3NpbmZvID0gezB9OwpAQCAtNTIsOCArNDcsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHN1
cHBvcnRzQWxwaGFDdXJzb3JzKAogICAgIHJldHVybiBvc2luZm8uZHdNYWpvclZlcnNpb24gPiA1
IHx8IChvc2luZm8uZHdNYWpvclZlcnNpb24gPT0gNSAmJiBvc2luZm8uZHdNaW5vclZlcnNpb24g
PiAwKTsKIH0KIAotQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqIGltZywgY29uc3QgSW50UG9pbnQmIGhv
dFNwb3QpCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGNyZWF0ZVNoYXJlZEN1cnNv
cihJbWFnZSogaW1nLCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCkKIHsKKyAgICBSZWZQdHI8U2hh
cmVkQ3Vyc29yPiBpbXBsOworCiAgICAgSW50UG9pbnQgZWZmZWN0aXZlSG90U3BvdCA9IGRldGVy
bWluZUhvdFNwb3QoaW1nLCBob3RTcG90KTsKICAgICBzdGF0aWMgYm9vbCBkb0FscGhhID0gc3Vw
cG9ydHNBbHBoYUN1cnNvcnMoKTsKICAgICBCaXRtYXBJbmZvIGN1cnNvckltYWdlID0gQml0bWFw
SW5mbzo6Y3JlYXRlKEludFNpemUoaW1nLT53aWR0aCgpLCBpbWctPmhlaWdodCgpKSk7CkBAIC04
MCw3ICs3Nyw3IEBAIEN1cnNvcjo6Q3Vyc29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW4KICAg
ICAgICAgaWkuaGJtTWFzayA9IGhNYXNrLmdldCgpOwogICAgICAgICBpaS5oYm1Db2xvciA9IGhD
dXJzb3IuZ2V0KCk7CiAKLSAgICAgICAgbV9pbXBsID0gU2hhcmVkQ3Vyc29yOjpjcmVhdGUoQ3Jl
YXRlSWNvbkluZGlyZWN0KCZpaSkpOworICAgICAgICBpbXBsID0gU2hhcmVkQ3Vyc29yOjpjcmVh
dGUoQ3JlYXRlSWNvbkluZGlyZWN0KCZpaSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFBs
YXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBibGVuZGVkIGN1cnNvcnMsIHNvIHdlIG5lZWQK
ICAgICAgICAgLy8gdG8gY3JlYXRlIHRoZSBtYXNrIG1hbnVhbGx5CkBAIC0xMTUsMzAzICsxMTIs
MTY2IEBAIEN1cnNvcjo6Q3Vyc29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW4KICAgICAgICAg
aWNvbi55SG90c3BvdCA9IGVmZmVjdGl2ZUhvdFNwb3QueSgpOwogICAgICAgICBpY29uLmhibU1h
c2sgPSBhbmRNYXNrLmdldCgpOwogICAgICAgICBpY29uLmhibUNvbG9yID0geG9yTWFzay5nZXQo
KTsKLSAgICAgICAgbV9pbXBsID0gU2hhcmVkQ3Vyc29yOjpjcmVhdGUoQ3JlYXRlSWNvbkluZGly
ZWN0KCZpY29uKSk7CisgICAgICAgIGltcGwgPSBTaGFyZWRDdXJzb3I6OmNyZWF0ZShDcmVhdGVJ
Y29uSW5kaXJlY3QoJmljb24pKTsKIAogICAgICAgICBEZWxldGVEQyh4b3JNYXNrREMpOwogICAg
ICAgICBEZWxldGVEQyhhbmRNYXNrREMpOwogICAgIH0KICAgICBEZWxldGVEQyh3b3JraW5nREMp
OwogICAgIFJlbGVhc2VEQygwLCBkYyk7Ci19Ci0KLUN1cnNvcjo6fkN1cnNvcigpCi17Ci19CiAK
LUN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKLXsKLSAgICBt
X2ltcGwgPSBvdGhlci5tX2ltcGw7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIHJldHVybiBpbXBs
LnJlbGVhc2UoKTsKIH0KIAotQ3Vyc29yOjpDdXJzb3IoUGxhdGZvcm1DdXJzb3IgYykKLSAgICA6
IG1faW1wbChjKQorc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQ3Vyc29yPiBsb2FkU2hhcmVkQ3Vy
c29yKEhJTlNUQU5DRSBoSW5zdGFuY2UsIExQQ1RTVFIgbHBDdXJzb3JOYW1lKQogeworICAgIHJl
dHVybiBTaGFyZWRDdXJzb3I6OmNyZWF0ZSg6OkxvYWRDdXJzb3IoaEluc3RhbmNlLCBscEN1cnNv
ck5hbWUpKTsKIH0KIAotc3RhdGljIEN1cnNvciBsb2FkQ3Vyc29yQnlOYW1lKGNoYXIqIG5hbWUs
IGludCB4LCBpbnQgeSkgCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGxvYWRDdXJz
b3JCeU5hbWUoY2hhciogbmFtZSwgaW50IHgsIGludCB5KQogewogICAgIEludFBvaW50IGhvdFNw
b3QoeCwgeSk7Ci0gICAgQ3Vyc29yIGM7CiAgICAgUmVmUHRyPEltYWdlPiBjdXJzb3JJbWFnZShJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UobmFtZSkpOwotICAgIGlmIChjdXJzb3JJbWFnZSAm
JiAhY3Vyc29ySW1hZ2UtPmlzTnVsbCgpKSAKLSAgICAgICAgYyA9IEN1cnNvcihjdXJzb3JJbWFn
ZS5nZXQoKSwgaG90U3BvdCk7Ci0gICAgZWxzZQotICAgICAgICBjID0gcG9pbnRlckN1cnNvcigp
OwotICAgIHJldHVybiBjOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGxv
YWRTaGFyZWRDdXJzb3IoSElOU1RBTkNFIGhJbnN0YW5jZSwgTFBDVFNUUiBscEN1cnNvck5hbWUp
Ci17Ci0gICAgcmV0dXJuIFNoYXJlZEN1cnNvcjo6Y3JlYXRlKExvYWRDdXJzb3IoaEluc3RhbmNl
LCBscEN1cnNvck5hbWUpKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKLXsK
LSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19BUlJPVyk7Ci0g
ICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQotewotICAgIHN0
YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0NST1NTKTsKLSAgICByZXR1
cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vy
c29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19IQU5EKTsKLSAgICByZXR1cm4gYzsKLX0K
LQotY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0g
bG9hZFNoYXJlZEN1cnNvcigwLCBJRENfSUJFQU0pOwotICAgIHJldHVybiBjOwotfQotCi1jb25z
dCBDdXJzb3ImIHdhaXRDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFy
ZWRDdXJzb3IoMCwgSURDX1dBSVQpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3Im
IGhlbHBDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3Io
MCwgSURDX0hFTFApOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RSZXNp
emVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwg
SURDX1NJWkVXRSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhSZXNp
emVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwg
SURDX1NJWkVOUyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0
UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29y
KDAsIElEQ19TSVpFTkVTVyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9y
dGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVk
Q3Vyc29yKDAsIElEQ19TSVpFTldTRSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgc291dGhSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFy
ZWRDdXJzb3IoMCwgSURDX1NJWkVOUyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2Fk
U2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTldTRSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgc291dGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMg
PSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTkVTVyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgd2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBj
ID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRVdFKTsKLSAgICByZXR1cm4gYzsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBub3J0aFNvdXRoUmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vy
c29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTlMpOwotICAgIHJldHVybiBjOwot
fQotCi1jb25zdCBDdXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMg
Q3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFV0UpOwotICAgIHJldHVybiBj
OwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCi17
Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRU5FU1cp
OwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJl
c2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigw
LCBJRENfU0laRU5XU0UpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGNvbHVt
blJlc2l6ZUN1cnNvcigpCi17Ci0gICAgLy8gRklYTUU6IFdpbmRvd3MgZG9lcyBub3QgaGF2ZSBh
IHN0YW5kYXJkIGNvbHVtbiByZXNpemUgY3Vyc29yIDxyZGFyOi8vcHJvYmxlbS81MDE4NTkxPgot
ICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVXRSk7Ci0g
ICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKLXsKLSAg
ICAvLyBGSVhNRTogV2luZG93cyBkb2VzIG5vdCBoYXZlIGEgc3RhbmRhcmQgcm93IHJlc2l6ZSBj
dXJzb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMTg1OTE+Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9h
ZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRU5TKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3Qg
Q3Vyc29yJiBtaWRkbGVQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ3Vyc29y
IGMgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5JY29uIiwgOCwgOCk7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIHN0YXRpYyBjb25z
dCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInBhbkVhc3RDdXJzb3IiLCA3LCA3KTsKLSAg
ICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFBhbm5pbmdDdXJzb3IoKQotewot
ICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInBhbk5vcnRoQ3Vy
c29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0
UGFubmluZ0N1cnNvcigpCi17Ci0gICAgc3RhdGljIGNvbnN0IEN1cnNvciBjID0gbG9hZEN1cnNv
ckJ5TmFtZSgicGFuTm9ydGhFYXN0Q3Vyc29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgc3RhdGljIGNv
bnN0IEN1cnNvciBjID0gbG9hZEN1cnNvckJ5TmFtZSgicGFuTm9ydGhXZXN0Q3Vyc29yIiwgNywg
Nyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhQYW5uaW5nQ3Vyc29y
KCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ3Vyc29yIGMgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5T
b3V0aEN1cnNvciIsIDcsIDcpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHNv
dXRoRWFzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxv
YWRDdXJzb3JCeU5hbWUoInBhblNvdXRoRWFzdEN1cnNvciIsIDcsIDcpOwotICAgIHJldHVybiBj
OwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoV2VzdFBhbm5pbmdDdXJzb3IoKQotewotICAgIHN0
YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInBhblNvdXRoV2VzdEN1cnNv
ciIsIDcsIDcpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHdlc3RQYW5uaW5n
Q3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ3Vyc29yIGMgPSBsb2FkQ3Vyc29yQnlOYW1l
KCJwYW5XZXN0Q3Vyc29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgbW92ZUN1cnNvcigpIAotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJz
b3IoMCwgSURDX1NJWkVBTEwpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHZl
cnRpY2FsVGV4dEN1cnNvcigpCi17Ci0gICAgc3RhdGljIGNvbnN0IEN1cnNvciBjID0gbG9hZEN1
cnNvckJ5TmFtZSgidmVydGljYWxUZXh0Q3Vyc29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgY2VsbEN1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJz
b3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBjb250ZXh0TWVudUN1cnNvcigpCi17Ci0gICAgcmV0
dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigpCi17
Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBwcm9ncmVz
c0N1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJ
RENfQVBQU1RBUlRJTkcpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vRHJv
cEN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJ
RENfTk8pOwotICAgIHJldHVybiBjOwotfQorICAgIGlmIChjdXJzb3JJbWFnZSAmJiAhY3Vyc29y
SW1hZ2UtPmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gY3JlYXRlU2hhcmVkQ3Vyc29yKGN1cnNv
ckltYWdlLmdldCgpLCBob3RTcG90KTsKKyAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigwLCBJ
RENfQVJST1cpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGNyZWF0ZVBs
YXRmb3JtQ3Vyc29yKEN1cnNvcjo6VHlwZSB0eXBlLCBJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBv
aW50JiBob3RTcG90KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEN1cnNv
cjo6UG9pbnRlcjoKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNlbGw6CisgICAgICAgIGNhc2UgQ3Vy
c29yOjpDb250ZXh0TWVudToKKyAgICAgICAgY2FzZSBDdXJzb3I6OkFsaWFzOgorICAgICAgICBj
YXNlIEN1cnNvcjo6Q29weToKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vbmU6CisgICAgICAgIGNh
c2UgQ3Vyc29yOjpHcmFiOgorICAgICAgICBjYXNlIEN1cnNvcjo6R3JhYmJpbmc6CisgICAgICAg
ICAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfQVJST1cpOworICAgICAgICBjYXNl
IEN1cnNvcjo6Q3Jvc3M6CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigwLCBJ
RENfQ1JPU1MpOworICAgICAgICBjYXNlIEN1cnNvcjo6SGFuZDoKKyAgICAgICAgICAgIHJldHVy
biBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19IQU5EKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OklC
ZWFtOgorICAgICAgICAgICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0lCRUFNKTsK
KyAgICAgICAgY2FzZSBDdXJzb3I6OldhaXQ6CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJl
ZEN1cnNvcigwLCBJRENfV0FJVCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpIZWxwOgorICAgICAg
ICAgICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0hFTFApOworICAgICAgICBjYXNl
IEN1cnNvcjo6TW92ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAsIElE
Q19TSVpFQUxMKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok1pZGRsZVBhbm5pbmc6CisgICAgICAg
ICAgICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgicGFuSWNvbiIsIDgsIDgpOworICAgICAgICBj
YXNlIEN1cnNvcjo6RWFzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vy
c29yKDAsIElEQ19TSVpFV0UpOworICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFBhbm5pbmc6Cisg
ICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgicGFuRWFzdEN1cnNvciIsIDcsIDcp
OworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhSZXNpemU6CisgICAgICAgICAgICByZXR1cm4g
bG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRU5TKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5v
cnRoUGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5Ob3J0
aEN1cnNvciIsIDcsIDcpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgor
ICAgICAgICAgICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVORVNXKTsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4g
bG9hZEN1cnNvckJ5TmFtZSgicGFuTm9ydGhFYXN0Q3Vyc29yIiwgNywgNyk7CisgICAgICAgIGNh
c2UgQ3Vyc29yOjpOb3J0aFdlc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJl
ZEN1cnNvcigwLCBJRENfU0laRU5XU0UpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0
UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5Ob3J0aFdl
c3RDdXJzb3IiLCA3LCA3KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXplOgorICAg
ICAgICAgICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVOUyk7CisgICAgICAg
IGNhc2UgQ3Vyc29yOjpTb3V0aFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNv
ckJ5TmFtZSgicGFuU291dGhDdXJzb3IiLCA3LCA3KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNv
dXRoRWFzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAsIElE
Q19TSVpFTldTRSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RQYW5uaW5nOgorICAg
ICAgICAgICAgcmV0dXJuIGxvYWRDdXJzb3JCeU5hbWUoInBhblNvdXRoRWFzdEN1cnNvciIsIDcs
IDcpOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UmVzaXplOgorICAgICAgICAgICAg
cmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVORVNXKTsKKyAgICAgICAgY2FzZSBD
dXJzb3I6OlNvdXRoV2VzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNvckJ5
TmFtZSgicGFuU291dGhXZXN0Q3Vyc29yIiwgNywgNyk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpX
ZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJ
WkVXRSk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFNvdXRoUmVzaXplOgorICAgICAgICAg
ICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVOUyk7CisgICAgICAgIGNhc2Ug
Q3Vyc29yOjpFYXN0V2VzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vy
c29yKDAsIElEQ19TSVpFV0UpOworICAgICAgICBjYXNlIEN1cnNvcjo6V2VzdFBhbm5pbmc6Cisg
ICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgicGFuV2VzdEN1cnNvciIsIDcsIDcp
OworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0U291dGhXZXN0UmVzaXplOgorICAgICAg
ICAgICAgcmV0dXJuIGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVORVNXKTsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVy
biBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTldTRSk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpDb2x1bW5SZXNpemU6CisgICAgICAgICAgICAvLyBGSVhNRTogV2luZG93cyBkb2VzIG5vdCBo
YXZlIGEgc3RhbmRhcmQgY29sdW1uIHJlc2l6ZSBjdXJzb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMTg1
OTE+CisgICAgICAgICAgICByZXR1cm4gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRVdFKTsK
KyAgICAgICAgY2FzZSBDdXJzb3I6OlJvd1Jlc2l6ZToKKyAgICAgICAgICAgIC8vIEZJWE1FOiBX
aW5kb3dzIGRvZXMgbm90IGhhdmUgYSBzdGFuZGFyZCByb3cgcmVzaXplIGN1cnNvciA8cmRhcjov
L3Byb2JsZW0vNTAxODU5MT4KKyAgICAgICAgICAgIHJldHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAs
IElEQ19TSVpFTlMpOworICAgICAgICBjYXNlIEN1cnNvcjo6VmVydGljYWxUZXh0OgorICAgICAg
ICAgICAgcmV0dXJuIGxvYWRDdXJzb3JCeU5hbWUoInZlcnRpY2FsVGV4dEN1cnNvciIsIDcsIDcp
OworICAgICAgICBjYXNlIEN1cnNvcjo6UHJvZ3Jlc3M6CisgICAgICAgICAgICByZXR1cm4gbG9h
ZFNoYXJlZEN1cnNvcigwLCBJRENfQVBQU1RBUlRJTkcpOworICAgICAgICBjYXNlIEN1cnNvcjo6
Tm9Ecm9wOgorICAgICAgICBjYXNlIEN1cnNvcjo6Tm90QWxsb3dlZDoKKyAgICAgICAgICAgIHJl
dHVybiBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19OTyk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpa
b29tSW46CisgICAgICAgICAgICByZXR1cm4gbG9hZEN1cnNvckJ5TmFtZSgiem9vbUluQ3Vyc29y
IiwgNywgNyk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpab29tT3V0OgorICAgICAgICAgICAgcmV0
dXJuIGxvYWRDdXJzb3JCeU5hbWUoInpvb21PdXRDdXJzb3IiLCA3LCA3KTsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6OkN1c3RvbToKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTaGFyZWRDdXJzb3Io
aW1hZ2UsIGhvdFNwb3QpOworICAgIH0KIAotY29uc3QgQ3Vyc29yJiBjb3B5Q3Vyc29yKCkKLXsK
LSAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworICAgIHJldHVybiAwOwogfQogCi1jb25zdCBD
dXJzb3ImIG5vbmVDdXJzb3IoKQorU2hhcmVkQ3Vyc29yOjp+U2hhcmVkQ3Vyc29yKCkKIHsKLSAg
ICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworICAgIERlc3Ryb3lJY29uKG1fbmF0aXZlQ3Vyc29y
KTsKIH0KIAotY29uc3QgQ3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKK0N1cnNvcjo6Q3Vyc29y
KEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpCisgICAgOiBtX3R5cGUoQ3Vz
dG9tKQorICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICAsIG1faG90U3BvdChkZXRlcm1pbmVIb3RT
cG90KGltYWdlLCBob3RTcG90KSkKKyAgICAsIG1fcGxhdGZvcm1DdXJzb3IoMCkKIHsKLSAgICBz
dGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19OTyk7Ci0gICAgcmV0dXJu
IGM7CiB9CiAKLWNvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKK0N1cnNvcjo6Q3Vyc29yKFR5
cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQorICAgICwgbV9wbGF0Zm9ybUN1cnNvcigwKQog
ewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInpvb21JbkN1
cnNvciIsIDcsIDcpOwotICAgIHJldHVybiBjOwogfQogCi1jb25zdCBDdXJzb3ImIHpvb21PdXRD
dXJzb3IoKQorQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKKyAgICA6IG1fdHlw
ZShvdGhlci5tX3R5cGUpCisgICAgLCBtX2ltYWdlKG90aGVyLm1faW1hZ2UpCisgICAgLCBtX2hv
dFNwb3Qob3RoZXIubV9ob3RTcG90KQorICAgICwgbV9wbGF0Zm9ybUN1cnNvcihvdGhlci5tX3Bs
YXRmb3JtQ3Vyc29yKQogewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JC
eU5hbWUoInpvb21PdXRDdXJzb3IiLCA3LCA3KTsKLSAgICByZXR1cm4gYzsKIH0KIAotY29uc3Qg
Q3Vyc29yJiBncmFiQ3Vyc29yKCkKK0N1cnNvcjo6fkN1cnNvcigpCiB7Ci0gICAgcmV0dXJuIHBv
aW50ZXJDdXJzb3IoKTsKIH0KIAotY29uc3QgQ3Vyc29yJiBncmFiYmluZ0N1cnNvcigpCitDdXJz
b3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCiB7Ci0gICAgcmV0dXJu
IHBvaW50ZXJDdXJzb3IoKTsKKyAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7CisgICAgbV9pbWFn
ZSA9IG90aGVyLm1faW1hZ2U7CisgICAgbV9ob3RTcG90ID0gb3RoZXIubV9ob3RTcG90OworICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vyc29yOworICAgIHJldHVybiAq
dGhpczsKIH0KIAotU2hhcmVkQ3Vyc29yOjp+U2hhcmVkQ3Vyc29yKCkKK1BsYXRmb3JtQ3Vyc29y
IEN1cnNvcjo6cGxhdGZvcm1DdXJzb3IoKSBjb25zdAogewotICAgIERlc3Ryb3lJY29uKG1fbmF0
aXZlQ3Vyc29yKTsKKyAgICBpZiAoIW1fcGxhdGZvcm1DdXJzb3IpCisgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBjcmVhdGVQbGF0Zm9ybUN1cnNvcihtX3R5cGUsIG1faW1hZ2UuZ2V0KCksIG1f
aG90U3BvdCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1DdXJzb3I7CiB9CiAKIH0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBA
IHZvaWQgV2lkZ2V0OjpoaWRlKCkKIHsKIH0KIAotSENVUlNPUiBsYXN0U2V0Q3Vyc29yID0gMDsK
IGJvb2wgaWdub3JlTmV4dFNldEN1cnNvciA9IGZhbHNlOwogCiB2b2lkIFdpZGdldDo6c2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtNzEsMzAgKzcwLDEwIEBAIHZvaWQgV2lkZ2V0
OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmICghY3Vyc29yLmltcGwoKS0+bmF0aXZlQ3Vyc29yKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGxhc3RTZXRDdXJzb3IgPSBjdXJzb3IuaW1wbCgpLT5uYXRpdmVDdXJzb3IoKTsKLQog
ICAgIFNjcm9sbFZpZXcqIHZpZXcgPSByb290KCk7Ci0gICAgaWYgKCF2aWV3IHx8ICF2aWV3LT5p
c0ZyYW1lVmlldygpKSB7Ci0gICAgICAgIFNldEN1cnNvcihsYXN0U2V0Q3Vyc29yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1l
Vmlldyo+KHZpZXcpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgU2V0Q3Vy
c29yKGxhc3RTZXRDdXJzb3IpOworICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkgewot
ICAgICAgICBTZXRDdXJzb3IobGFzdFNldEN1cnNvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+c2V0Q3Vyc29yKGxhc3RTZXRDdXJzb3IpOworICAgIHZp
ZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7CiB9CiAKIHZvaWQgV2lkZ2V0Ojpw
YWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vd2luY2UvQ3Vyc29yV2luY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vd2luY2UvQ3Vyc29yV2luY2UuY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd2luY2UvQ3Vyc29yV2luY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMiArMzgs
MTIgQEAgc3RhdGljIGNvbnN0IEN1cnNvciYgZ2V0Q3Vyc29yKEN1cnNvclR5cAogfQogCiBDdXJz
b3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQotOiBtX2ltcGwob3RoZXIubV9pbXBsKQor
OiBtX3BsYXRmb3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZvcm1DdXJzb3IpCiB7CiB9CiAKIEN1cnNv
cjo6Q3Vyc29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW50JiBob3RzcG90KQotOiBtX2ltcGwo
Q3Vyc29yTm9uZSkKKzogbV9wbGF0Zm9ybUN1cnNvcihDdXJzb3JOb25lKQogewogfQogCkBAIC01
MywxMiArNTMsMTIgQEAgQ3Vyc29yOjp+Q3Vyc29yKCkKIAogQ3Vyc29yJiBDdXJzb3I6Om9wZXJh
dG9yPShjb25zdCBDdXJzb3ImIG90aGVyKQogewotICAgIG1faW1wbCA9IG90aGVyLm1faW1wbDsK
KyAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKIEN1cnNvcjo6Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIGMpCi06IG1faW1w
bChjKQorOiBtX3BsYXRmb3JtQ3Vyc29yKGMpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vd3gvQ3Vyc29yV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvQ3Vy
c29yV3guY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvQ3Vyc29y
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNSArMzQsMTUgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKLSAgICA6IG1faW1w
bChvdGhlci5tX2ltcGwpCisgICAgOiBtX3BsYXRmb3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZvcm1D
dXJzb3IpCiB7CiB9CiAKIEN1cnNvcjo6Q3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9p
bnQmKSAKIHsKLSAgICBtX2ltcGwgPSAwOworICAgIG1fcGxhdGZvcm1DdXJzb3IgPSAwOwogICAg
IC8vIEZJWE1FOiBmaWd1cmUgb3V0IHdoeSB0aGUgYmVsb3cgY29kZSBjYXVzZXMgYSBjcmFzaCAg
Ci0gICAgLy9tX2ltcGwgPSBuZXcgd3hDdXJzb3IoIGltYWdlLT5nZXRXeEJpdG1hcCgpLT5Db252
ZXJ0VG9JbWFnZSgpICk7CisgICAgLy9tX3BsYXRmb3JtQ3Vyc29yID0gbmV3IHd4Q3Vyc29yKCBp
bWFnZS0+Z2V0V3hCaXRtYXAoKS0+Q29udmVydFRvSW1hZ2UoKSApOwogfQogCiBDdXJzb3I6On5D
dXJzb3IoKQpAQCAtNTEsMTIgKzUxLDEyIEBAIEN1cnNvcjo6fkN1cnNvcigpCiAKIEN1cnNvciYg
Q3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKIHsKLSAgICBtX2ltcGwgPSBv
dGhlci5tX2ltcGw7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJz
b3I7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCiBDdXJzb3I6OkN1cnNvcih3eEN1cnNvciogYykK
LSAgICA6IG1faW1wbChjKQorICAgIDogbV9wbGF0Zm9ybUN1cnNvcihjKQogewogfQogCkluZGV4
OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDYzMTAyKQorKysg
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJCcmlk
Z2UuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgpAQCAtNjU2LDcgKzY1OCw2IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
S2V5Ym9hcmRFdmVudChLZXkKIH0KIAogI2lmICFPUyhXSU5DRSkKLWV4dGVybiBIQ1VSU09SIGxh
c3RTZXRDdXJzb3I7CiBleHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOwogI2VuZGlmCiAK
QEAgLTcyNyw3ICs3MjgsOCBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFCiAgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVk
IGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNwcAogICAgIC8vIGFuZCBzaW5j
ZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBo
ZXJlIHRvIHByZXZlbnQgdGhhdC4KICAgICBpZ25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsKLSAg
ICBsYXN0U2V0Q3Vyc29yID0gOjpHZXRDdXJzb3IoKTsKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1f
cGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5z
ZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKCk7ICAgIAogI2VuZGlmCiB9CiAKSW5kZXg6
IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MzI3MikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNDkgQEAKKzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAgIE1ha2Ug
Y2hhbmdpbmcgQ3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgKiBTaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmg6CisgICAgICAgIEFkZCBTZXRD
dXJzb3IgbWVzc2FnZS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aDoKKyAgICAgICAgQWRkIGVuY29kaW5nL2RlY29kaW5nIG9mIEN1cnNvcnMuIEZvciBub3cgd2Ug
ZG9uJ3Qgc3VwcG9ydCBDdXN0b20KKyAgICAgICAgY3Vyc29ycy4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpz
ZXRDdXJzb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgIEFk
ZCBwYXNzIHRocm91Z2ggZnVuY3Rpb25zIHRvIGdldCB0aGUgY3Vyc29yIGZyb20gdGhlIFdlYlBh
Z2VQcm94eQorICAgICAgICB0byB0aGUgV0tWaWV3LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAoLVtXS1ZpZXcgX3NldEN1cnNvcjpdKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oOgorICAgICAgICBJbXBsZW1l
bnQgY2hhbmdpbmcgdGhlIGN1cnNvci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRDdXJzb3IpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgRGVjb2RlIHRoZSBjdXJzb3IuCisK
KyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojp3bmRQcm9jKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uU2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6c2V0Q3Vyc29yKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoK
KyAgICAgICAgSW1wbGVtZW50IGNoYW5naW5nIHRoZSBjdXJzb3IuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hy
b21lQ2xpZW50OjpzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vyc29yKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICBFbmNv
ZGUgdGhlIGN1cnNvciB3aGVuIHNldEN1cnNvciBpcyBjYWxsZWQuCisKIDIwMTAtMDctMTMgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJ
KHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBcmd1bWVudERl
Y29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVu
dHMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybVN0cmluZy5oPgpAQCAtMTEwLDYgKzExMSwzMCBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiAgICAgfQogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDdXJzb3I+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGN1c3RvbSBjdXJzb3JzLgorICAgICAg
ICBpZiAoY3Vyc29yLnR5cGUoKSA9PSBXZWJDb3JlOjpDdXJzb3I6OkN1c3RvbSkKKyAgICAgICAg
ICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50MzJfdD4oV2ViQ29yZTo6Q3Vyc29y
OjpQb2ludGVyKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShz
dGF0aWNfY2FzdDx1aW50MzJfdD4oY3Vyc29yLnR5cGUoKSkpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJDb3JlOjpDdXJz
b3ImIGN1cnNvcikKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHR5cGVJbnQ7CisgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKHR5cGVJbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIFdlYkNvcmU6OkN1cnNvcjo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Q3Vyc29yOjpUeXBlPih0eXBlSW50KTsKKyAgICAgICAgQVNTRVJUKHR5cGUgIT0gV2ViQ29y
ZTo6Q3Vyc29yOjpDdXN0b20pOworCisgICAgICAgIGN1cnNvciA9IFdlYkNvcmU6OkN1cnNvcjo6
ZnJvbVR5cGUodHlwZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKIH0gLy8g
bmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFdlYkNvcmVBcmd1bWVudENvZGVyc19oCklu
ZGV4OiBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2lu
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdl
UHJveHlNZXNzYWdlS2luZHMuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQyL1NoYXJlZC9D
b3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNiArNjMsNyBAQCBlbnVtIEtpbmQgewogICAgIERpZFN0YXJ0UHJvZ3Jlc3MsCiAgICAg
RGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSwKICAgICBEaWRVcGRhdGVIaXN0b3J5VGl0
bGUsCisgICAgU2V0Q3Vyc29yLAogICAgIFNldFRvb2xUaXAsCiAgICAgVGFrZUZvY3VzLAogICAg
IApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBDdXJz
b3I7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDEsNiArNDIsOCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3Qg
V2ViQ29yZTo6Q3Vyc29yJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMxLDYgKzUz
MSwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yCiAgICAgICAg
ICAgICBzZXRUb29sVGlwKHRvb2xUaXApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
KyAgICAgICAgY2FzZSBXZWJQYWdlUHJveHlNZXNzYWdlOjpTZXRDdXJzb3I6IHsKKyAgICAgICAg
ICAgIEN1cnNvciBjdXJzb3I7CisgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5kZWNvZGUoY3Vy
c29yKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzZXRDdXJzb3IoY3Vy
c29yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViUGFn
ZVByb3h5TWVzc2FnZTo6U2hvd1BhZ2U6IHsKICAgICAgICAgICAgIHNob3dQYWdlKCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTg0Myw2ICs4NTAsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNl
dFRvb2xUaXAoY29uc3QgU3RyaQogICAgIG1fcGFnZUNsaWVudC0+dG9vbFRpcENoYW5nZWQob2xk
VG9vbFRpcCwgbV90b29sVGlwKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnNldEN1cnNvcihj
b25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBtX3BhZ2VDbGllbnQtPnNldEN1
cnNvcihjdXJzb3IpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KFdl
YkV2ZW50OjpUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBuYW1lc3BhY2Ug
Q29yZUlQQyB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbnRTaXplOworICAg
IGNsYXNzIEN1cnNvcjsKIH0KIAogc3RydWN0IFdLQ29udGV4dFN0YXRpc3RpY3M7CkBAIC0xOTAs
MTEgKzE5MSwxMyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rp
b24pOwogICAgIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXZWJDb3JlOjpTdHJpbmcmKTsKKyAgICB2
b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKIAogICAgIHZvaWQgZGlkUmVj
ZWl2ZUV2ZW50KFdlYkV2ZW50OjpUeXBlKTsKICAgICB2b2lkIGRpZFJ1bkphdmFTY3JpcHRJbk1h
aW5GcmFtZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmLCB1aW50NjRfdCk7CiAgICAgdm9pZCBkaWRH
ZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihjb25zdCBXZWJDb3JlOjpTdHJpbmcm
LCB1aW50NjRfdCk7CiAKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICBQYWdlQ2xpZW50KiBtX3Bh
Z2VDbGllbnQ7CiAjZWxzZQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDggQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZFJldml2ZSgpOwogICAgIHZpcnR1YWwgdm9p
ZCB0YWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG9sZFRvb2xUaXAsIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgbmV3VG9vbFRpcCk7Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25z
dCBXZWJDb3JlOjpDdXJzb3ImKTsKKwogICAgIFdLVmlldyogbV93a1ZpZXc7CiB9OwogCkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9u
IDYzMTAyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCAiV0tBUElDYXN0LmgiCiAj
aW1wb3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm91bmRhdGlvbkV4dHJhcy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVN0cmluZy5oPgogCkBAIC02OSw0ICs3MCw5IEBA
IHZvaWQgUGFnZUNsaWVudEltcGw6OnRvb2xUaXBDaGFuZ2VkKGNvbnMKICAgICBbbV93a1ZpZXcg
X3Rvb2xUaXBDaGFuZ2VkRnJvbTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKG9sZFRvb2xUaXAp
IHRvOm5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcobmV3VG9vbFRpcCldOwogfQogCit2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7
CisgICAgW21fd2tWaWV3IF9zZXRDdXJzb3I6Y3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCldOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
Lm1tCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNiArMzE5LDEyIEBAIC0gKHZvaWQpX3Rha2VGb2N1
czooQk9PTClmb3J3YXJkCiAgICAgICAgIFtbc2VsZiB3aW5kb3ddIHNlbGVjdEtleVZpZXdQcmVj
ZWRpbmdWaWV3OnNlbGZdOwogfQogCistICh2b2lkKV9zZXRDdXJzb3I6KE5TQ3Vyc29yICopY3Vy
c29yCit7CisgICAgaWYgKFtOU0N1cnNvciBjdXJyZW50Q3Vyc29yXSA9PSBjdXJzb3IpCisgICAg
ICAgIHJldHVybjsKKyAgICBbY3Vyc29yIHNldF07Cit9CiAKIC8vIEFueSBub24temVybyB2YWx1
ZSB3aWxsIGRvLCBidXQgdXNpbmcgc29tZXRoaW5nIHJlY29nbml6YWJsZSBtaWdodCBoZWxwIHVz
IGRlYnVnIHNvbWUgZGF5LgogI2RlZmluZSBUUkFDS0lOR19SRUNUX1RBRyAweEJBREZBQ0UKSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9u
IDYzMTAyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJbnRlcm5h
bCkKIC0gKHZvaWQpX3Byb2Nlc3NEaWRSZXZpdmU7CiAtICh2b2lkKV90YWtlRm9jdXM6KEJPT0wp
ZGlyZWN0aW9uOwogLSAodm9pZClfdG9vbFRpcENoYW5nZWRGcm9tOihOU1N0cmluZyAqKW9sZFRv
b2xUaXAgdG86KE5TU3RyaW5nICopbmV3VG9vbFRpcDsKKy0gKHZvaWQpX3NldEN1cnNvcjooTlND
dXJzb3IgKiljdXJzb3I7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAtICh2
b2lkKV9zdGFydEFjY2VsZXJhdGVkQ29tcG9zaXRpbmc6KENBTGF5ZXIgKilyb290TGF5ZXI7Cklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEy
OSw5IEBAIExSRVNVTFQgV2ViVmlldzo6d25kUHJvYyhIV05EIGhXbmQsIFVJTlQKICAgICAgICAg
Y2FzZSBXTV9TSE9XV0lORE9XOgogICAgICAgICAgICAgbFJlc3VsdCA9IG9uU2hvd1dpbmRvd0V2
ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdNX1NFVENVUlNPUjoKKyAgICAgICAgICAgIGxSZXN1bHQg
PSBvblNldEN1cnNvcihoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGhhbmRsZWQg
PSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTcwLDYgKzE3Myw3IEBAIFdlYlZpZXc6
OldlYlZpZXcoUkVDVCByZWN0LCBXZWJQYWdlTmFtZXMKICAgICAsIG1faG9zdFdpbmRvdyhob3N0
V2luZG93KQogICAgICwgbV90b3BMZXZlbFBhcmVudFdpbmRvdygwKQogICAgICwgbV90b29sVGlw
V2luZG93KDApCisgICAgLCBtX2xhc3RDdXJzb3JTZXQoMCkKICAgICAsIG1fdHJhY2tpbmdNb3Vz
ZUxlYXZlKGZhbHNlKQogICAgICwgbV9pc0JlaW5nRGVzdHJveWVkKGZhbHNlKQogewpAQCAtNDA4
LDYgKzQxMiwxMiBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uU2hvd1dpbmRvd0V2ZW50KEhXTkQgCiAg
ICAgcmV0dXJuIDA7CiB9CiAKK0xSRVNVTFQgV2ViVmlldzo6b25TZXRDdXJzb3IoSFdORCBoV25k
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRs
ZWQpCit7CisgICAgaGFuZGxlZCA9IDo6U2V0Q3Vyc29yKG1fbGFzdEN1cnNvclNldCk7CisgICAg
cmV0dXJuIDA7Cit9CisKIGJvb2wgV2ViVmlldzo6aXNBY3RpdmUoKQogewogICAgIEhXTkQgYWN0
aXZlV2luZG93ID0gOjpHZXRBY3RpdmVXaW5kb3coKTsKQEAgLTUzMyw2ICs1NDMsMTYgQEAgdm9p
ZCBXZWJWaWV3Ojp0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbgogICAgIDo6U2VuZE1lc3NhZ2Uo
bV90b29sVGlwV2luZG93LCBUVE1fQUNUSVZBVEUsICFuZXdUb29sVGlwLmlzRW1wdHkoKSwgMCk7
CiB9CiAKK3ZvaWQgV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vy
c29yKQoreworICAgIEhDVVJTT1IgcGxhdGZvcm1DdXJzb3IgPSBjdXJzb3IucGxhdGZvcm1DdXJz
b3IoKS0+bmF0aXZlQ3Vyc29yKCk7CisgICAgaWYgKCFwbGF0Zm9ybUN1cnNvcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9sYXN0Q3Vyc29yU2V0ID0gcGxhdGZvcm1DdXJzb3I7CisgICAgOjpT
ZXRDdXJzb3IocGxhdGZvcm1DdXJzb3IpOworfQorCiAvLyBXZWJDb3JlOjpXaW5kb3dNZXNzYWdl
TGlzdGVuZXIKIAogdm9pZCBXZWJWaWV3Ojp3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0pCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vz
cy93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBwcml2YXRlOgogICAgIExSRVNVTFQg
b25LaWxsRm9jdXNFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0s
IGJvb2wmIGhhbmRsZWQpOwogICAgIExSRVNVTFQgb25UaW1lckV2ZW50KEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9vbCYgaGFuZGxlZCk7CiAgICAgTFJFU1VMVCBv
blNob3dXaW5kb3dFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0s
IGJvb2wmIGhhbmRsZWQpOworICAgIExSRVNVTFQgb25TZXRDdXJzb3IoSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKIAogICAgIGJvb2wgaXNB
Y3RpdmUoKTsKICAgICB2b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKCk7CkBAIC05Myw2ICs5NCw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRSZXZpdmUoKTsKICAgICB2aXJ0
dWFsIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdG9v
bFRpcENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6U3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsK
IAogICAgIC8vIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgogICAgIHZpcnR1YWwgdm9p
ZCB3aW5kb3dSZWNlaXZlZE1lc3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJB
TSk7CkBAIC0xMDMsNiArMTA1LDggQEAgcHJpdmF0ZToKICAgICBIV05EIG1fdG9wTGV2ZWxQYXJl
bnRXaW5kb3c7CiAgICAgSFdORCBtX3Rvb2xUaXBXaW5kb3c7CiAKKyAgICBIQ1VSU09SIG1fbGFz
dEN1cnNvclNldDsKKwogICAgIGJvb2wgbV90cmFja2luZ01vdXNlTGVhdmU7CiAgICAgYm9vbCBt
X2lzQmVpbmdEZXN0cm95ZWQ7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiA2MzEwMikKKysr
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MTYsMTAgKzQxNiw5IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpj
aG9vc2VJY29uRm9yRmlsZXMKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIFdlYkNo
cm9tZUNsaWVudDo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlKQordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmQoV2ViUGFnZVByb3h5TWVzc2FnZTo6U2V0Q3Vyc29yLCBtX3BhZ2Ut
PnBhZ2VJRCgpLCBDb3JlSVBDOjpJbihjdXJzb3IpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBOb2RlKikKQEAgLTQ3Nyw0ICs0NzYsMTEgQEAg
dm9pZCBXZWJDaHJvbWVDbGllbnQ6Om5lZWRUb3VjaEV2ZW50cyhibwogfQogI2VuZGlmCiAKKyNp
ZiBQTEFURk9STShXSU4pCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0TGFzdFNldEN1cnNvclRv
Q3VycmVudEN1cnNvcigpCit7Cit9CisjZW5kaWYKKworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUx
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdlYkNvcmU6OkZy
YW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOwogICAgIHZpcnR1YWwgdm9p
ZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mLCBXZWJD
b3JlOjpGaWxlQ2hvb3NlciopOwogCi0gICAgdmlydHVhbCBib29sIHNldEN1cnNvcihXZWJDb3Jl
OjpQbGF0Zm9ybUN1cnNvckhhbmRsZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25z
dCBXZWJDb3JlOjpDdXJzb3ImKTsKICAgICAKICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCB0aGUg
Z2l2ZW4gZm9ybSBlbGVtZW50IGhhcyBjaGFuZ2VkLiBUaGlzIGZ1bmN0aW9uCiAgICAgLy8gd2ls
bCBiZSBjYWxsZWQgZnJlcXVlbnRseSwgc28gaGFuZGxpbmcgc2hvdWxkIGJlIHZlcnkgZmFzdC4K
QEAgLTE3NSw3ICsxNzUsMTEgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIHZpcnR1YWwgdm9pZCBuZWVkVG91Y2hFdmVudHMoYm9vbCk7CiAjZW5kaWYKLSAgICAKKwor
I2lmIFBMQVRGT1JNKFdJTikKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFNldEN1cnNvclRvQ3Vy
cmVudEN1cnNvcigpOworI2VuZGlmCisKICAgICBXZWJDb3JlOjpTdHJpbmcgbV9jYWNoZWRUb29s
VGlwOwogICAgIFdlYlBhZ2UqIG1fcGFnZTsKIH07CkluZGV4OiBXZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMjcyKQorKysgV2ViS2l0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA3LTEzICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MjIzMgorICAgICAgICBNYWtlIGNoYW5naW5nIEN1cnNvcnMgd29yayBp
biBXZWJLaXQyLgorCisgICAgICAgICogZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVm
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRFZmw6OnNldEN1cnNvcik6Cisg
ICAgICAgICogZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5oOgorICAgICAgICBD
aGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIG5ldyBvbmUuCisKIDIwMTAtMDctMTMgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFu
IEJlcm5zdGVpbi4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjMyNzIpCisrKyBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAt
MDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAgIE1ha2UgY2hhbmdpbmcgQ3Vyc29y
cyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5oOgor
ICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpzZXRDdXJzb3IpOiBDaGFuZ2UgcHJv
dG90eXBlIHRvIG1hdGNoIG5ldyBvbmUuCisKIDIwMTAtMDctMTMgIENocmlzIEd1aWxsb3J5ICA8
Y2hyaXMuZ3VpbGxvcnlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBM
ZXZpbi4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCShyZXZpc2lv
biA2MzEwMikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUq
LCBXZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwo
V2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPik7CiAgICAg
dmlydHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U3Ry
aW5nPiYsIFdlYkNvcmU6OkZpbGVDaG9vc2VyKik7Ci0gICAgdmlydHVhbCBib29sIHNldEN1cnNv
cihXZWJDb3JlOjpQbGF0Zm9ybUN1cnNvckhhbmRsZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Tm9kZSopOwogICAg
IHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpIVE1MUGFyc2VyUXVpcmtzPiBjcmVhdGVIVE1M
UGFyc2VyUXVpcmtzKCkgeyByZXR1cm4gMDsgfQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCklu
ZGV4OiBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwCShy
ZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDEwICs0MzcsOSBAQCB2b2lkIENocm9tZUNs
aWVudEVmbDo6Zm9ybVN0YXRlRGlkQ2hhbmdlCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
Ym9vbCBDaHJvbWVDbGllbnRFZmw6OnNldEN1cnNvcihQbGF0Zm9ybUN1cnNvckhhbmRsZSkKK3Zv
aWQgQ2hyb21lQ2xpZW50RWZsOjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRF
Zmw6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0
aW9uKikKSW5kZXg6IFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwu
aAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzT3duUHRyPEhUTUxQYXJzZXJRdWlya3M+IGNyZWF0ZUhUTUxQYXJzZXJR
dWlya3MoKSB7IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2V0Q3Vyc29yKFBsYXRm
b3JtQ3Vyc29ySGFuZGxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNv
ciYpOwogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0
JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAKSW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzI3MikK
KysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAgIE1ha2UgY2hhbmdpbmcg
Q3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnNldEN1cnNv
cik6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmg6CisgICAgICAg
IENoYW5nZSBwcm90b3R5cGUgdG8gbWF0Y2ggbmV3IG9uZS4KKwogMjAxMC0wNy0xMiAgTWFydGlu
IFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
R3VzdGF2byBOb3JvbmhhIFNpbHZhLgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MSwx
MCArNTkxLDkgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNob29zZUljb25Gb3JGaWxlcyhjbwogICAg
IGNob29zZXItPmljb25Mb2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykp
OwogfQogCi1ib29sIENocm9tZUNsaWVudDo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxl
KQordm9pZCBDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIENocm9tZUNsaWVu
dDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2Vv
bG9jYXRpb24qIGdlb2xvY2F0aW9uKQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2Vi
Q29yZTo6SFRNTFBhcnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIHsgcmV0dXJu
IDA7IH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0Q3Vyc29yKFdlYkNvcmU6OlBsYXRmb3Jt
Q3Vyc29ySGFuZGxlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJD
b3JlOjpDdXJzb3ImKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTY3JvbGxWaWV3KikgY29u
c3Qge30KICAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25G
b3JGcmFtZShXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CkluZGV4OiBX
ZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlrdS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDYzMjcyKQorKysgV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA3LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjIzMgor
ICAgICAgICBNYWtlIGNoYW5naW5nIEN1cnNvcnMgd29yayBpbiBXZWJLaXQyLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50SGFpa3U6OnNldEN1cnNvcik6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50SGFpa3UuaDoKKyAgICAgICAgQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRj
aCBuZXcgb25lLgorCiAyMDEwLTA2LTE0ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2Vi
S2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCShy
ZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MiwxMCArMzYyLDkgQEAgdm9pZCBDaHJv
bWVDbGllbnRIYWlrdTo6Y2hvb3NlSWNvbkZvckZpbAogICAgIGNob29zZXItPmljb25Mb2FkZWQo
SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCi1ib29sIENocm9tZUNs
aWVudEhhaWt1OjpzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUpCit2b2lkIENocm9tZUNs
aWVudEhhaWt1OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdp
dmVuIGZvcm0gZWxlbWVudCBoYXMgY2hhbmdlZC4gVGhpcyBmdW5jdGlvbgpJbmRleDogV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmgJKHJldmlzaW9u
IDYzMTAyKQorKysgV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nl
cj4pOwogICAgICAgICB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIEZpbGVDaG9vc2VyKik7CiAKLSAgICAgICAgYm9vbCBzZXRDdXJzb3IoUGxhdGZvcm1DdXJz
b3JIYW5kbGUpOworICAgICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKTsKIAogICAg
ICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCB0aGUgZ2l2ZW4gZm9ybSBlbGVtZW50IGhhcyBjaGFu
Z2VkLiBUaGlzIGZ1bmN0aW9uCiAgICAgICAgIC8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHks
IHNvIGhhbmRsaW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjMyNzIp
CisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEwLTA3LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjIzMgorICAgICAgICBNYWtlIGNoYW5naW5n
IEN1cnNvcnMgd29yayBpbiBXZWJLaXQyLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IpOgorICAgICAgICAqIFdl
YlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgSW1wbGVtZW50IGN1cnNvciBjaGFuZ2luZyBhdCB0
aGUgV2ViS2l0IGxldmVsIGZvciB0aGUgc2FrZSBvZiBXZWJLaXQyLgorICAgICAgICBUaGlzIGZ1
bmN0aW9uYWxpdHkgaXMgYmVpbmcgbW92ZWQgZnJvbSBXaWRnZXRNYWMubW0uCisgICAgICAgICgr
W1dlYlZpZXcgX3BvaW50aW5nSGFuZEN1cnNvcl0pOgorICAgICAgICBVcGRhdGUgdG8gdXNlIHBs
YXRmb3JtQ3Vyc29yKCkgaW5zdGVhZCBvZiBpbXBsKCkuCisKIDIwMTAtMDctMTMgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IFRpZ2VyIGJ1aWxk
LgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShy
ZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6RmlsZUNob29zZXI+KTsKICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiwgV2ViQ29yZTo6RmlsZUNob29zZXIqKTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBzZXRDdXJzb3IoV2ViQ29yZTo6UGxhdGZvcm1DdXJzb3JIYW5kbGUp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJD
b3JlOjpDdXJzb3ImKTsKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGN1c3RvbUhp
Z2hsaWdodFJlY3QoV2ViQ29yZTo6Tm9kZSosIGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyYg
dHlwZSwKICAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBsaW5lUmVjdCk7CkluZGV4
OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNp
b24gNjMxMDIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0aW9ucy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Db25zb2xlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgpAQCAtNjU5LDYgKzY2MCwxNCBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzCiAgICAgY2hvb3Nlci0+aWNvbkxvYWRl
ZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAKK3ZvaWQgV2ViQ2hy
b21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7Cisg
ICAgTlNDdXJzb3IgKnBsYXRmb3JtQ3Vyc29yID0gY3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCk7Cisg
ICAgaWYgKFtOU0N1cnNvciBjdXJyZW50Q3Vyc29yXSA9PSBwbGF0Zm9ybUN1cnNvcikKKyAgICAg
ICAgcmV0dXJuOworICAgIFtwbGF0Zm9ybUN1cnNvciBzZXRdOworfQorCiBLZXlib2FyZFVJTW9k
ZSBXZWJDaHJvbWVDbGllbnQ6OmtleWJvYXJkVUlNb2RlKCkKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNjMxMDIp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjIx
OSw3ICsyMjE5LDcgQEAgLSAodm9pZClfc2V0SmF2YVNjcmlwdFVSTHNBcmVBbGxvd2VkOihCTwog
CiArIChOU0N1cnNvciAqKV9wb2ludGluZ0hhbmRDdXJzb3IKIHsKLSAgICByZXR1cm4gaGFuZEN1
cnNvcigpLmltcGwoKTsKKyAgICByZXR1cm4gaGFuZEN1cnNvcigpLnBsYXRmb3JtQ3Vyc29yKCk7
CiB9CiAKIC0gKEJPT0wpX3Bvc3RzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ05vdGlmaWNhdGlvbnMK
SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNjMyNzIpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisg
ICAgICAgIE1ha2UgY2hhbmdpbmcgQ3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnRRdDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRRdC5oOgorICAgICAgICBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIG5ldyBvbmUu
CisKIDIwMTAtMDctMDcgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2MzEwMikKKysr
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyOSwxMCArNTI5LDkgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6Y2hvb3NlSWNvbkZv
ckZpbGVzKAogICAgIGNob29zZXItPmljb25Mb2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVz
KGZpbGVuYW1lcykpOwogfQogCi1ib29sIENocm9tZUNsaWVudFF0OjpzZXRDdXJzb3IoUGxhdGZv
cm1DdXJzb3JIYW5kbGUpCit2b2lkIENocm9tZUNsaWVudFF0OjpzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAog
dm9pZCBDaHJvbWVDbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1l
KEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQpJbmRleDogV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2MSw3ICsxNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBQ
YXNzT3duUHRyPEhUTUxQYXJzZXJRdWlya3M+IGNyZWF0ZUhUTUxQYXJzZXJRdWlya3MoKSB7IHJl
dHVybiAwOyB9CiAKLSAgICAgICAgdmlydHVhbCBib29sIHNldEN1cnNvcihQbGF0Zm9ybUN1cnNv
ckhhbmRsZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJik7
CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0
JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzI3MikK
KysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAgIE1ha2UgY2hhbmdpbmcg
Q3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IpOgor
ICAgICAgICBXZSBub3cgbmVlZCB0byBncmFiIHRoZSBuYXRpdmUgY3Vyc29yIG91dCBvZiB0aGUg
V2ViQ29yZSBjdXJzb3IuCisKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6c2V0TGFzdFNldEN1
cnNvclRvQ3VycmVudEN1cnNvcik6CisgICAgICAgIFNldHMgdGhlIFdlYlZpZXcncyAibGFzdCBz
ZXQgY3Vyc29yIiB0byBiZSB0aGUgY3VycmVudCBjdXJzb3Igc28gdGhhdAorICAgICAgICB0aGUg
Y3Vyc29yIGlzIHNldCBjb3JyZWN0bHkgZm9yIHBsdWdpbnMuCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAg
IChXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYlZpZXc6OldlYlZpZXdXbmRQcm9jKToK
KyAgICAgICAgKiBXZWJWaWV3Lmg6CisgICAgICAgIChXZWJWaWV3OjpzZXRMYXN0Q3Vyc29yKToK
KyAgICAgICAgQ2hhbmdlIHRoZSAibGFzdCBzZXQgY3Vyc29yIiB0byBiZSBzdG9yZWQgYXMgYSBt
ZW1iZXIgaW5zdGVhZCBvZiBhIGdsb2JhbC4KKwogMjAxMC0wNy0xMyAgU3RldmUgRmFsa2VuYnVy
ZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQgZml4LgpJbmRl
eDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZp
ZXcuY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0NCw2ICszNDQsNyBAQCBXZWJWaWV3OjpXZWJWaWV3KCkKICAgICAsIG1f
aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX25leHREaXNw
bGF5SXNTeW5jaHJvbm91cyhmYWxzZSkKKyAgICAsIG1fbGFzdFNldEN1cnNvcigwKQogewogICAg
IEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJl
YWQoKTsKQEAgLTE5NzIsMTAgKzE5NzMsNiBAQCBib29sIFdlYlZpZXc6OnJlZ2lzdGVyV2ViVmll
d1dpbmRvd0NsYXNzCiAgICAgcmV0dXJuICEhUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKIH0KIAot
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGV4dGVybiBIQ1VSU09SIGxhc3RTZXRDdXJzb3I7Ci19
Ci0KIHN0YXRpYyBIV05EIGZpbmRUb3BMZXZlbFBhcmVudChIV05EIHdpbmRvdykKIHsKICAgICBp
ZiAoIXdpbmRvdykKQEAgLTIyNTAsMTAgKzIyNDcsOCBAQCBMUkVTVUxUIENBTExCQUNLIFdlYlZp
ZXc6OldlYlZpZXdXbmRQcm9jCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBXTV9TRVRDVVJTT1I6Ci0gICAgICAgICAgICBpZiAoaGFuZGxlZCA9IHdlYlZp
ZXctPnBhZ2UoKS0+Y2hyb21lKCktPnNldEN1cnNvcihsYXN0U2V0Q3Vyc29yKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAg
IGhhbmRsZWQgPSA6OlNldEN1cnNvcih3ZWJWaWV3LT5tX2xhc3RTZXRDdXJzb3IpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV01fVlNDUk9MTDoKICAgICAgICAgICAgIGhhbmRs
ZWQgPSB3ZWJWaWV3LT52ZXJ0aWNhbFNjcm9sbCh3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93aW4vV2ViVmlldy5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC93aW4vV2ViVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MDMsNiArOTAzLDggQEAgcHVibGljOgogICAgIHZvaWQgZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZShXZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCBleGl0RnVsbHNj
cmVlbigpOwogCisgICAgdm9pZCBzZXRMYXN0Q3Vyc29yKEhDVVJTT1IgY3Vyc29yKSB7IG1fbGFz
dFNldEN1cnNvciA9IGN1cnNvcjsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgc2V0Wm9vbU11bHRp
cGxpZXIoZmxvYXQgbXVsdGlwbGllciwgYm9vbCBpc1RleHRPbmx5KTsKICAgICBmbG9hdCB6b29t
TXVsdGlwbGllcihib29sIGlzVGV4dE9ubHkpOwpAQCAtMTA0Miw2ICsxMDQ0LDggQEAgcHJvdGVj
dGVkOgogI2VuZGlmCiAKICAgICBib29sIG1fbmV4dERpc3BsYXlJc1N5bmNocm9ub3VzOworCisg
ICAgSENVUlNPUiBtX2xhc3RTZXRDdXJzb3I7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFdlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDYzMTAy
KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03ODIsMjEgKzc4MiwyOCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hv
b3NlSWNvbkZvckZpbGVzCiAgICAgY2hvb3Nlci0+aWNvbkxvYWRlZChJY29uOjpjcmVhdGVJY29u
Rm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAKLWJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJz
b3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUgY3Vyc29yKQordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNl
dEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKIHsKLSAgICBpZiAoIWN1cnNvcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIEhDVVJTT1IgcGxhdGZvcm1DdXJzb3IgPSBjdXJzb3IucGxh
dGZvcm1DdXJzb3IoKS0+bmF0aXZlQ3Vyc29yKCk7CisgICAgaWYgKCFwbGF0Zm9ybUN1cnNvcikK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gZGVsZWdh
dGUgPSB1aURlbGVnYXRlKCkpIHsKICAgICAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRlUHJpdmF0
ZT4gZGVsZWdhdGVQcml2YXRlKFF1ZXJ5LCBkZWxlZ2F0ZSk7CiAgICAgICAgIGlmIChkZWxlZ2F0
ZVByaXZhdGUpIHsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQoZGVsZWdhdGVQcml2YXRlLT53
ZWJWaWV3U2V0Q3Vyc29yKG1fd2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihj
dXJzb3IpKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAo
U1VDQ0VFREVEKGRlbGVnYXRlUHJpdmF0ZS0+d2ViVmlld1NldEN1cnNvcihtX3dlYlZpZXcsIHJl
aW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4ocGxhdGZvcm1DdXJzb3IpKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgOjpTZXRDdXJzb3IoY3Vyc29y
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBtX3dlYlZpZXctPnNldExhc3RDdXJzb3IocGxhdGZv
cm1DdXJzb3IpOworICAgIDo6U2V0Q3Vyc29yKHBsYXRmb3JtQ3Vyc29yKTsKKyAgICByZXR1cm47
Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRMYXN0U2V0Q3Vyc29yVG9DdXJyZW50Q3Vy
c29yKCkKK3sKKyAgICBtX3dlYlZpZXctPnNldExhc3RDdXJzb3IoOjpHZXRDdXJzb3IoKSk7CiB9
CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9y
RnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCkluZGV4OiBXZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDYzMTAy
KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcnVu
T3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nl
cj4pOwogICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OlN0cmluZz4mLCBXZWJDb3JlOjpGaWxlQ2hvb3NlciopOwogCi0gICAgdmlydHVhbCBi
b29sIHNldEN1cnNvcihXZWJDb3JlOjpQbGF0Zm9ybUN1cnNvckhhbmRsZSBjdXJzb3IpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisgICAgdmly
dHVhbCB2b2lkIHNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKTsKIAogICAgIFdlYlZp
ZXcqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KIApJbmRleDogV2ViS2l0
L3d4L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lv
biA2MzI3MikKKysrIFdlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxMC0wNy0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAgICAgICAgTWFrZSBj
aGFuZ2luZyBDdXJzb3JzIHdvcmsgaW4gV2ViS2l0Mi4KKworICAgICAgICAqIFdlYktpdFN1cHBv
cnQvQ2hyb21lQ2xpZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50V3g6
OnNldEN1cnNvcik6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5oOgor
ICAgICAgICBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIG5ldyBvbmUuCisKIDIwMTAtMDctMDcg
IEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4
XSBCdWlsZCBmaXggYWZ0ZXIgY2hhbmdlIGluIFBhZ2UgY29uc3RydWN0b3IuCkluZGV4OiBXZWJL
aXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCShyZXZpc2lvbiA2MzEwMikK
KysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQ3LDEwICs0NDcsOSBAQCB2b2lkIENocm9tZUNsaWVudFd4OjpjaG9vc2VJY29u
Rm9yRmlsZXMoCiAgICAgY2hvb3Nlci0+aWNvbkxvYWRlZChJY29uOjpjcmVhdGVJY29uRm9yRmls
ZXMoZmlsZW5hbWVzKSk7CiB9CiAKLWJvb2wgQ2hyb21lQ2xpZW50V3g6OnNldEN1cnNvcihQbGF0
Zm9ybUN1cnNvckhhbmRsZSkKK3ZvaWQgQ2hyb21lQ2xpZW50V3g6OnNldEN1cnNvcihjb25zdCBD
dXJzb3ImKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQog
CiB2b2lkIENocm9tZUNsaWVudFd4OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJh
bWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopCkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9D
aHJvbWVDbGllbnRXeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0No
cm9tZUNsaWVudFd4LmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBv
cnQvQ2hyb21lQ2xpZW50V3guaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc093blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBjcmVhdGVI
VE1MUGFyc2VyUXVpcmtzKCkgeyByZXR1cm4gMDsgfQogCi0gICAgdmlydHVhbCBib29sIHNldEN1
cnNvcihQbGF0Zm9ybUN1cnNvckhhbmRsZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihj
b25zdCBDdXJzb3ImKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29u
c3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCB7fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61533</attachid>
            <date>2010-07-14 10:17:41 -0700</date>
            <delta_ts>2010-07-14 11:01:49 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>cursor3.diff</filename>
            <type>text/plain</type>
            <size>95850</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAg
IE1ha2UgY2hhbmdpbmcgQ3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgLSBDb252
ZXJ0ZWQgTWFjIGFuZCBXaW5kb3dzIEN1cnNvciBpbXBsZW1lbnRhdGlvbnMgdG8gbGF6aWx5Cisg
ICAgICAgICAgY3JlYXRlIHRoZSBwbGF0Zm9ybSBjdXJzb3IuCisgICAgICAgIC0gQWRkIEhvc3RX
aW5kb3cgZnVuY3Rpb24gdG8gc2V0IHRoZSBjdXJzb3IgYW5kIHVzZSBpdCBmcm9tIFdpZGdldDo6
c2V0Q3Vyc29yLgorICAgICAgICAtIFJld29yayBXaW5kb3dzIGN1cnNvciBjb2RlIHRvIHVzZSBm
ZXdlciBnbG9iYWwgdmFyaWFibGVzLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0
ZWQKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpF
bXB0eUNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKTogCisgICAgICAgIChXZWJDb3JlOjpFbXB0eUNo
cm9tZUNsaWVudDo6c2V0TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNvcik6CisgICAgICAgIEFk
ZGVkIGVtcHR5IGltcGxlbWVudGF0aW9ucy4KKworICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2V0Q3Vyc29yKToKKyAgICAgICAgKiBwYWdlL0No
cm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIENoYW5nZSBl
eGlzdGluZyBzZXRDdXJzb3IoKSBmdW5jdGlvbiB0byB0YWtlIGEgQ3Vyc29yIGluc3RlYWQgb2Yg
YQorICAgICAgICBQbGF0Zm9ybUN1cnNvckhhbmRsZS4gQWRkZWQgc2V0TGFzdFNldEN1cnNvclRv
Q3VycmVudEN1cnNvci4KKworICAgICAgICAqIHBsYXRmb3JtL0N1cnNvci5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vQ3Vyc29yLmg6CisgICAgICAgIEFkZGVkIEN1cnNvciBUeXBlIGFuZCB0aGUg
b3B0aW9uIG9mIGxhemlseSBjcmVhdGluZyB0aGUgbmF0aXZlIGN1cnNvcgorICAgICAgICAodXNl
ZCBvbiBNYWMgYW5kIFdpbmRvd3MgZm9yIG5vdykuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0
V2luZG93Lmg6CisgICAgICAgIEFkZCBzZXRDdXJzb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvQ3Vyc29yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3VzdG9tQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBsYXRmb3JtQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6fkN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJzb3I6OnBsYXRmb3JtQ3Vyc29yKToKKyAgICAgICAgQ29udmVydCB0byBsYXppbHkgY3Jl
YXRpbmcgdGhlIG5hdGl2ZSBjdXJzb3Igb24gdGhlIGZpcnN0IHJlcXVlc3QgYW5kCisgICAgICAg
IHN0b3JpbmcgdGhlIHR5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRDdXJzb3IpOgorICAgICAgICBVc2UgSG9z
dFdpbmRvdzo6c2V0Q3Vyc29yIHRvIHNldCB0aGUgY3Vyc29yLiBUaGlzIGluIHR1cm4gd2lsbCBj
YWxsIHRoZQorICAgICAgICBDaHJvbWVDbGllbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
Q3Vyc29yV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNoYXJlZEN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpsb2FkU2hhcmVkQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Omxv
YWRDdXJzb3JCeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUGxhdGZvcm1DdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ3Vyc29yOjp+U2hhcmVkQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6
fkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJzb3I6OnBsYXRmb3JtQ3Vyc29yKToKKyAgICAgICAgQ29udmVydCB0byBs
YXppbHkgY3JlYXRpbmcgdGhlIG5hdGl2ZSBjdXJzb3Igb24gdGhlIGZpcnN0IHJlcXVlc3QgYW5k
CisgICAgICAgIHN0b3JpbmcgdGhlIHR5cGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV2lk
Z2V0V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKToKKyAgICAg
ICAgVXNlIEhvc3RXaW5kb3c6OnNldEN1cnNvciB0byBzZXQgdGhlIGN1cnNvci4gVGhpcyBpbiB0
dXJuIHdpbGwgY2FsbCB0aGUKKyAgICAgICAgQ2hyb21lQ2xpZW50LgorCisgICAgICAgICogcGx1
Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgVXNlIHRoZSBuZXcgc2V0TGFzdFNldEN1cnNv
clRvQ3VycmVudEN1cnNvciBjbGllbnQgZnVuY3Rpb24gdG8gZW5zdXJlCisgICAgICAgIHRoZSBj
dXJzb3IgaXMgcHJvcGVybHkgdXBkYXRlZCB3aGVuIG92ZXIgYSBwbHVnaW4uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DdXJzb3JDaHJvbWl1bS5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZWZsL0N1cnNvckVmbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0N1cnNvckd0ay5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ3Vyc29ySGFpa3UuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3dpbmNlL0N1cnNvcldpbmNlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9D
dXJzb3JXeC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ3Vyc29yUXQuY3BwOgorICAgICAg
ICBDaGFuZ2UgbV9pbXBsIC0+IG1fcGxhdGZvcm1DdXJzb3IuCisKIDIwMTAtMDctMTMgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL1dl
YkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNiArMzkzLDcgQEAgX19aTjdXZWJD
b3JlMTdET01JbXBsZW1lbnRhdGlvbjE0aXNUZXh0TQogX19aTjdXZWJDb3JlMTdHbHlwaFBhZ2VU
cmVlTm9kZTE4dHJlZUdseXBoUGFnZUNvdW50RXYKIF9fWk43V2ViQ29yZTE3SFRNTFBsdWdJbkVs
ZW1lbnQxMWdldE5QT2JqZWN0RXYKIF9fWk43V2ViQ29yZTE3SGlzdG9yeUNvbnRyb2xsZXIyNnNh
dmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlRXYKK19fWk43V2ViQ29yZTE3bmFtZUZvckN1cnNvclR5
cGVFTlNfNkN1cnNvcjRUeXBlRQogX19aTjdXZWJDb3JlMThkZXByZWNhdGVkUGFyc2VVUkxFUktO
U182U3RyaW5nRQogX19aTjdXZWJDb3JlMThpc1N0YXJ0T2ZQYXJhZ3JhcGhFUktOU18xNVZpc2li
bGVQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJvbGxlcjE2cmVzdW1lQW5p
bWF0aW9uc0VQTlNfOERvY3VtZW50RQpAQCAtNTM3LDYgKzUzOCw5IEBAIF9fWk43V2ViQ29yZTVS
YW5nZTZzZXRFbmRFTjNXVEYxMFBhc3NSZWYKIF9fWk43V2ViQ29yZTVSYW5nZThzZXRTdGFydEVO
M1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlSaQogX19aTjdXZWJDb3JlNVJhbmdlRDFFdgog
X19aTjdXZWJDb3JlNWNhY2hlRXYKK19fWk43V2ViQ29yZTZDdXJzb3I4ZnJvbVR5cGVFTlMwXzRU
eXBlRQorX19aTjdXZWJDb3JlNkN1cnNvckQxRXYKK19fWk43V2ViQ29yZTZDdXJzb3JhU0VSS1Mw
XwogX19aTjdXZWJDb3JlNkVkaXRvcjEwYXBwbHlTdHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0
aW9uRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTZFZGl0b3IxMGluc2VydFRleHRFUktO
U182U3RyaW5nRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmU2RWRpdG9yMTNjYW5ESFRNTFBhc3Rl
RXYKQEAgLTkyOCw2ICs5MzIsNyBAQCBfX1pOSzdXZWJDb3JlNVJhbmdlMTlib3VuZGFyeVBvaW50
c1ZhbGlkCiBfX1pOSzdXZWJDb3JlNVJhbmdlOWVuZE9mZnNldEVSaQogX19aTks3V2ViQ29yZTVS
YW5nZTlmaXJzdE5vZGVFdgogX19aTks3V2ViQ29yZTZDaHJvbWUxMmNyZWF0ZVdpbmRvd0VQTlNf
NUZyYW1lRVJLTlNfMTZGcmFtZUxvYWRSZXF1ZXN0RVJLTlNfMTRXaW5kb3dGZWF0dXJlc0UKK19f
Wk5LN1dlYkNvcmU2Q3Vyc29yMTRwbGF0Zm9ybUN1cnNvckV2CiBfX1pOSzdXZWJDb3JlNkVkaXRv
cjEzY2FuRWRpdFJpY2hseUV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjE2Y29tcG9zaXRpb25SYW5n
ZUV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjE2Zm9udEZvclNlbGVjdGlvbkVSYgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
RW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlD
bGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8SFRNTFBhcnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1
aXJrcygpIHsgcmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBzZXRDdXJzb3IoUGxhdGZv
cm1DdXJzb3JIYW5kbGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEN1
cnNvcihjb25zdCBDdXJzb3ImKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50
b1ZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCB7fQogCkBAIC0x
NjYsNiArMTY2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
aW5nTGF5ZXJTeW5jKCkge307CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNvcigpIHsgfQorI2VuZGlmCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZlbnRz
KGJvb2wpIHsgfQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJD
b3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI2LDkgKzQyNiw5IEBAIHZv
aWQgQ2hyb21lOjpjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmUKICAgICBtX2NsaWVudC0+Y2hv
b3NlSWNvbkZvckZpbGVzKGZpbGVuYW1lcywgZmlsZUNob29zZXIpOwogfQogCi1ib29sIENocm9t
ZTo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlIGN1cnNvcikKK3ZvaWQgQ2hyb21lOjpz
ZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiB7Ci0gICAgcmV0dXJuIG1fY2xpZW50LT5z
ZXRDdXJzb3IoY3Vyc29yKTsKKyAgICBtX2NsaWVudC0+c2V0Q3Vyc29yKGN1cnNvcik7CiB9CiAK
ICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lLmgJKHJldmlzaW9uIDYzMTAyKQorKysg
V2ViQ29yZS9wYWdlL0Nocm9tZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd1RvU2NyZWVu
KGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGll
bnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYpOwogCiAgICAgICAgIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNv
bnN0IEludFJlY3QmKSBjb25zdDsKIApAQCAtMTM1LDggKzEzNiw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVD
aG9vc2VyPik7CiAgICAgICAgIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgRmlsZUNob29zZXIqKTsKIAotICAgICAgICBib29sIHNldEN1cnNvcihQbGF0Zm9y
bUN1cnNvckhhbmRsZSk7Ci0KICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIHZvaWQgZm9jdXNO
U1ZpZXcoTlNWaWV3Kik7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDYz
MTAyKQorKysgV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzUsMTEgKzEzNSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgSW50
UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAg
IHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAw
OwogICAgICAgICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQo
KSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKEZy
YW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNj
cm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0
ID0gMDsgLy8gQ3VycmVudGx5IG9ubHkgTWFjIGhhcyBhIG5vbiBlbXB0eSBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpID0gMDsK
ICAgICAgICAgLy8gRW5kIG1ldGhvZHMgdXNlZCBieSBIb3N0V2luZG93LgogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0ID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoRnJhbWUqLCBjb25zdCBJbnRTaXplJikg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0
IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QgPSAwOyAvLyBDdXJyZW50bHkgb25s
eSBNYWMgaGFzIGEgbm9uIGVtcHR5IGltcGxlbWVudGF0aW9uLgorICAgICAgIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkTWlzc2luZ1BsdWdpbk1lc3NhZ2VCZUJ1dHRvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtaXNzaW5nUGx1Z2luQnV0dG9u
Q2xpY2tlZChFbGVtZW50KikgY29uc3QgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtb3VzZURp
ZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiwgdW5zaWduZWQgbW9kaWZpZXJG
bGFncykgPSAwOwpAQCAtMTk0LDggKzE5Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gQXN5bmNocm9ub3VzIHJlcXVlc3QgdG8gbG9hZCBhbiBpY29uIGZvciBzcGVjaWZpZWQg
ZmlsZW5hbWVzLgogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNob29zZXIqKSA9IDA7CiAKLSAgICAgICAgdmlydHVhbCBi
b29sIHNldEN1cnNvcihQbGF0Zm9ybUN1cnNvckhhbmRsZSkgPSAwOwotCiAgICAgICAgIC8vIE5v
dGlmaWNhdGlvbiB0aGF0IHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgaGFzIGNoYW5nZWQuIFRoaXMg
ZnVuY3Rpb24KICAgICAgICAgLy8gd2lsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSwgc28gaGFuZGxp
bmcgc2hvdWxkIGJlIHZlcnkgZmFzdC4KICAgICAgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURp
ZENoYW5nZShjb25zdCBOb2RlKikgPSAwOwpAQCAtMjM2LDYgKzIzNiwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUG9wVXBNZW51KE5TTWVudSAqKSB7
IH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNvcigpID0gMDsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKICAgICAgICAgdmlydHVhbCB2b2lkIG5lZWRUb3VjaEV2ZW50cyhib29s
KSA9IDA7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5jcHAJKHJldmlzaW9uIDYzMTAyKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw0ICs0Niw0
NzcgQEAgSW50UG9pbnQgZGV0ZXJtaW5lSG90U3BvdChJbWFnZSogaW1hZ2UsIAogICAgIHJldHVy
biBJbnRQb2ludCgpOwogfQogCitjb25zdCBDdXJzb3ImIEN1cnNvcjo6ZnJvbVR5cGUoQ3Vyc29y
OjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpQb2ludGVyOgorICAgICAgICAgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6OkNyb3NzOgorICAgICAgICAgICAgcmV0dXJuIGNyb3NzQ3Vyc29yKCk7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpIYW5kOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3Io
KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OklCZWFtOgorICAgICAgICAgICAgcmV0dXJuIGlCZWFt
Q3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpXYWl0OgorICAgICAgICAgICAgcmV0dXJu
IHdhaXRDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkhlbHA6CisgICAgICAgICAgICBy
ZXR1cm4gaGVscEN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFJlc2l6ZToKKyAg
ICAgICAgICAgIHJldHVybiBlYXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpOb3J0aFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBub3J0aFJlc2l6ZUN1cnNvcigpOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJu
IG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0
UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpOworICAg
ICAgICBjYXNlIEN1cnNvcjo6U291dGhSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gc291dGhS
ZXNpemVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFJlc2l6ZToKKyAg
ICAgICAgICAgIHJldHVybiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBD
dXJzb3I6OlNvdXRoV2VzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBzb3V0aFdlc3RSZXNp
emVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Oldlc3RSZXNpemU6CisgICAgICAgICAg
ICByZXR1cm4gd2VzdFJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhT
b3V0aFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBub3J0aFNvdXRoUmVzaXplQ3Vyc29yKCk7
CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0V2VzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVy
biBlYXN0V2VzdFJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0
U291dGhXZXN0UmVzaXplOgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoRWFzdFNvdXRoV2VzdFJl
c2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVz
aXplOgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigp
OworICAgICAgICBjYXNlIEN1cnNvcjo6Q29sdW1uUmVzaXplOgorICAgICAgICAgICAgcmV0dXJu
IGNvbHVtblJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Um93UmVzaXplOgor
ICAgICAgICAgICAgcmV0dXJuIHJvd1Jlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNv
cjo6TWlkZGxlUGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiBtaWRkbGVQYW5uaW5nQ3Vyc29y
KCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0UGFubmluZzoKKyAgICAgICAgICAgIHJldHVy
biBlYXN0UGFubmluZ0N1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhQYW5uaW5n
OgorICAgICAgICAgICAgcmV0dXJuIG5vcnRoUGFubmluZ0N1cnNvcigpOworICAgICAgICBjYXNl
IEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiBub3J0aEVhc3RQ
YW5uaW5nQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RQYW5uaW5nOgor
ICAgICAgICAgICAgcmV0dXJuIG5vcnRoV2VzdFBhbm5pbmdDdXJzb3IoKTsKKyAgICAgICAgY2Fz
ZSBDdXJzb3I6OlNvdXRoUGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiBzb3V0aFBhbm5pbmdD
dXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFBhbm5pbmc6CisgICAgICAg
ICAgICByZXR1cm4gc291dGhFYXN0UGFubmluZ0N1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNv
cjo6U291dGhXZXN0UGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiBzb3V0aFdlc3RQYW5uaW5n
Q3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpXZXN0UGFubmluZzoKKyAgICAgICAgICAg
IHJldHVybiB3ZXN0UGFubmluZ0N1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6TW92ZToK
KyAgICAgICAgICAgIHJldHVybiBtb3ZlQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpW
ZXJ0aWNhbFRleHQ6CisgICAgICAgICAgICByZXR1cm4gdmVydGljYWxUZXh0Q3Vyc29yKCk7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpDZWxsOgorICAgICAgICAgICAgcmV0dXJuIGNlbGxDdXJzb3Io
KTsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNvbnRleHRNZW51OgorICAgICAgICAgICAgcmV0dXJu
IGNvbnRleHRNZW51Q3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpBbGlhczoKKyAgICAg
ICAgICAgIHJldHVybiBhbGlhc0N1cnNvcigpOworICAgICAgICBjYXNlIEN1cnNvcjo6UHJvZ3Jl
c3M6CisgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3NDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBD
dXJzb3I6Ok5vRHJvcDoKKyAgICAgICAgICAgIHJldHVybiBub0Ryb3BDdXJzb3IoKTsKKyAgICAg
ICAgY2FzZSBDdXJzb3I6OkNvcHk6CisgICAgICAgICAgICByZXR1cm4gY29weUN1cnNvcigpOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6Tm9uZToKKyAgICAgICAgICAgIHJldHVybiBub25lQ3Vyc29y
KCk7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3RBbGxvd2VkOgorICAgICAgICAgICAgcmV0dXJu
IG5vdEFsbG93ZWRDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Olpvb21JbjoKKyAgICAg
ICAgICAgIHJldHVybiB6b29tSW5DdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDdXJzb3I6Olpvb21P
dXQ6CisgICAgICAgICAgICByZXR1cm4gem9vbU91dEN1cnNvcigpOworICAgICAgICBjYXNlIEN1
cnNvcjo6R3JhYjoKKyAgICAgICAgICAgIHJldHVybiBncmFiQ3Vyc29yKCk7CisgICAgICAgIGNh
c2UgQ3Vyc29yOjpHcmFiYmluZzoKKyAgICAgICAgICAgIHJldHVybiBncmFiYmluZ0N1cnNvcigp
OworICAgICAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7CiB9CisKK2NvbnN0
IGNoYXIqIG5hbWVGb3JDdXJzb3JUeXBlKEN1cnNvcjo6VHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEN1cnNvcjo6UG9pbnRlcjoKKyAgICAgICAgICAgIHJl
dHVybiAiUG9pbnRlciI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDcm9zczoKKyAgICAgICAgICAg
IHJldHVybiAiQ3Jvc3MiOworICAgICAgICBjYXNlIEN1cnNvcjo6SGFuZDoKKyAgICAgICAgICAg
IHJldHVybiAiSGFuZCI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpJQmVhbToKKyAgICAgICAgICAg
IHJldHVybiAiSUJlYW0iOworICAgICAgICBjYXNlIEN1cnNvcjo6V2FpdDoKKyAgICAgICAgICAg
IHJldHVybiAiV2FpdCI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpIZWxwOgorICAgICAgICAgICAg
cmV0dXJuICJIZWxwIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkVhc3RSZXNpemU6CisgICAgICAg
ICAgICByZXR1cm4gIkVhc3RSZXNpemUiOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhSZXNp
emU6CisgICAgICAgICAgICByZXR1cm4gIk5vcnRoUmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJz
b3I6Ok5vcnRoRWFzdFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiTm9ydGhFYXN0UmVzaXpl
IjsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFJlc2l6ZToKKyAgICAgICAgICAgIHJl
dHVybiAiTm9ydGhXZXN0UmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXpl
OgorICAgICAgICAgICAgcmV0dXJuICJTb3V0aFJlc2l6ZSI7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpTb3V0aEVhc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gIlNvdXRoRWFzdFJlc2l6ZSI7
CisgICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFdlc3RSZXNpemU6CisgICAgICAgICAgICByZXR1
cm4gIlNvdXRoV2VzdFJlc2l6ZSI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpXZXN0UmVzaXplOgor
ICAgICAgICAgICAgcmV0dXJuICJXZXN0UmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5v
cnRoU291dGhSZXNpemU6CisgICAgICAgICAgICByZXR1cm4gIk5vcnRoU291dGhSZXNpemUiOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFdlc3RSZXNpemU6CisgICAgICAgICAgICByZXR1cm4g
IkVhc3RXZXN0UmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFNvdXRoV2Vz
dFJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiTm9ydGhFYXN0U291dGhXZXN0UmVzaXplIjsK
KyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAg
ICAgIHJldHVybiAiTm9ydGhXZXN0U291dGhFYXN0UmVzaXplIjsKKyAgICAgICAgY2FzZSBDdXJz
b3I6OkNvbHVtblJlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiQ29sdW1uUmVzaXplIjsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6OlJvd1Jlc2l6ZToKKyAgICAgICAgICAgIHJldHVybiAiUm93UmVz
aXplIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok1pZGRsZVBhbm5pbmc6CisgICAgICAgICAgICBy
ZXR1cm4gIk1pZGRsZVBhbm5pbmciOworICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFBhbm5pbmc6
CisgICAgICAgICAgICByZXR1cm4gIkVhc3RQYW5uaW5nIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6
Ok5vcnRoUGFubmluZzoKKyAgICAgICAgICAgIHJldHVybiAiTm9ydGhQYW5uaW5nIjsKKyAgICAg
ICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gIk5v
cnRoRWFzdFBhbm5pbmciOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0UGFubmluZzoK
KyAgICAgICAgICAgIHJldHVybiAiTm9ydGhXZXN0UGFubmluZyI7CisgICAgICAgIGNhc2UgQ3Vy
c29yOjpTb3V0aFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gIlNvdXRoUGFubmluZyI7Cisg
ICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RQYW5uaW5nOgorICAgICAgICAgICAgcmV0dXJu
ICJTb3V0aEVhc3RQYW5uaW5nIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFBhbm5p
bmc6CisgICAgICAgICAgICByZXR1cm4gIlNvdXRoV2VzdFBhbm5pbmciOworICAgICAgICBjYXNl
IEN1cnNvcjo6V2VzdFBhbm5pbmc6CisgICAgICAgICAgICByZXR1cm4gIldlc3RQYW5uaW5nIjsK
KyAgICAgICAgY2FzZSBDdXJzb3I6Ok1vdmU6CisgICAgICAgICAgICByZXR1cm4gIk1vdmUiOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6VmVydGljYWxUZXh0OgorICAgICAgICAgICAgcmV0dXJuICJW
ZXJ0aWNhbFRleHQiOworICAgICAgICBjYXNlIEN1cnNvcjo6Q2VsbDoKKyAgICAgICAgICAgIHJl
dHVybiAiQ2VsbCI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDb250ZXh0TWVudToKKyAgICAgICAg
ICAgIHJldHVybiAiQ29udGV4dE1lbnUiOworICAgICAgICBjYXNlIEN1cnNvcjo6QWxpYXM6Cisg
ICAgICAgICAgICByZXR1cm4gIkFsaWFzIjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlByb2dyZXNz
OgorICAgICAgICAgICAgcmV0dXJuICJQcm9ncmVzcyI7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpO
b0Ryb3A6CisgICAgICAgICAgICByZXR1cm4gIk5vRHJvcCI7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpDb3B5OgorICAgICAgICAgICAgcmV0dXJuICJDb3B5IjsKKyAgICAgICAgY2FzZSBDdXJzb3I6
Ok5vbmU6CisgICAgICAgICAgICByZXR1cm4gIk5vbmUiOworICAgICAgICBjYXNlIEN1cnNvcjo6
Tm90QWxsb3dlZDoKKyAgICAgICAgICAgIHJldHVybiAiTm90QWxsb3dlZCI7CisgICAgICAgIGNh
c2UgQ3Vyc29yOjpab29tSW46CisgICAgICAgICAgICByZXR1cm4gIlpvb21JbiI7CisgICAgICAg
IGNhc2UgQ3Vyc29yOjpab29tT3V0OgorICAgICAgICAgICAgcmV0dXJuICJab29tT3V0IjsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6OkdyYWI6CisgICAgICAgICAgICByZXR1cm4gIkdyYWIiOworICAg
ICAgICBjYXNlIEN1cnNvcjo6R3JhYmJpbmc6CisgICAgICAgICAgICByZXR1cm4gIkdyYWJiaW5n
IjsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkN1c3RvbToKKyAgICAgICAgICAgIHJldHVybiAiQ3Vz
dG9tIjsKKyAgICB9CisKKyAgICByZXR1cm4gIkVSUk9SIjsKK30KKworI2lmIFVTRShMQVpZX05B
VElWRV9DVVJTT1IpCisKK0N1cnNvcjo6Q3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9p
bnQmIGhvdFNwb3QpCisgICAgOiBtX3R5cGUoQ3VzdG9tKQorICAgICwgbV9pbWFnZShpbWFnZSkK
KyAgICAsIG1faG90U3BvdChkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90KSkKKyAgICAs
IG1fcGxhdGZvcm1DdXJzb3IoMCkKK3sKK30KKworQ3Vyc29yOjpDdXJzb3IoVHlwZSB0eXBlKQor
ICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBtX3BsYXRmb3JtQ3Vyc29yKDApCit7Cit9CisKK1Bs
YXRmb3JtQ3Vyc29yIEN1cnNvcjo6cGxhdGZvcm1DdXJzb3IoKSBjb25zdAoreworICAgIGVuc3Vy
ZVBsYXRmb3JtQ3Vyc29yKCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1DdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChD
dXJzb3IsIGMsIChDdXJzb3I6OlBvaW50ZXIpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3Qg
Q3Vyc29yJiBjcm9zc0N1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3Is
IGMsIChDdXJzb3I6OkNyb3NzKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYg
aGFuZEN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJz
b3I6OkhhbmQpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29y
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6TW92ZSkp
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHZlcnRpY2FsVGV4dEN1cnNvcigp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OlZlcnRpY2Fs
VGV4dCkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGNlbGxDdXJzb3IoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpDZWxsKSk7Cisg
ICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJzb3IoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpDb250ZXh0TWVudSkp
OworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6QWxpYXMpKTsKKyAgICBy
ZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiB6b29tSW5DdXJzb3IoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpab29tSW4pKTsKKyAgICByZXR1cm4g
YzsKK30KKworY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Wm9vbU91dCkpOworICAgIHJldHVybiBjOwor
fQorCitjb25zdCBDdXJzb3ImIGNvcHlDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpDb3B5KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0
IEN1cnNvciYgbm9uZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3Is
IGMsIChDdXJzb3I6Ok5vbmUpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBw
cm9ncmVzc0N1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChD
dXJzb3I6OlByb2dyZXNzKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9E
cm9wQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNv
cjo6Tm9Ecm9wKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm90QWxsb3dl
ZEN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6
Ok5vdEFsbG93ZWQpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBpQmVhbUN1
cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OklC
ZWFtKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OldhaXQpKTsKKyAg
ICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6SGVscCkpOworICAgIHJldHVybiBj
OworfQorCitjb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpFYXN0UmVzaXplKSk7CisgICAgcmV0dXJu
IGM7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpOb3J0aFJlc2l6ZSkpOworICAgIHJl
dHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Ok5vcnRoRWFzdFJlc2l6
ZSkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1
cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Ok5v
cnRoV2VzdFJlc2l6ZSkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRo
UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1
cnNvcjo6U291dGhSZXNpemUpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBz
b3V0aEVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29y
LCBjLCAoQ3Vyc29yOjpTb3V0aEVhc3RSZXNpemUpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29u
c3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpTb3V0aFdlc3RSZXNpemUpKTsKKyAgICByZXR1cm4g
YzsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6V2VzdFJlc2l6ZSkpOworICAgIHJldHVy
biBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpOb3J0aFNvdXRoUmVzaXpl
KSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJz
b3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpFYXN0
V2VzdFJlc2l6ZSkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFz
dFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJz
b3IsIGMsIChDdXJzb3I6Ok5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZSkpOworICAgIHJldHVybiBj
OworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6Ok5vcnRoV2VzdFNv
dXRoRWFzdFJlc2l6ZSkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGNvbHVt
blJlc2l6ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChD
dXJzb3I6OkNvbHVtblJlc2l6ZSkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3Im
IHJvd1Jlc2l6ZUN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMs
IChDdXJzb3I6OlJvd1Jlc2l6ZSkpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3Im
IG1pZGRsZVBhbm5pbmdDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29y
LCBjLCAoQ3Vyc29yOjpNaWRkbGVQYW5uaW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisgICAgCitj
b25zdCBDdXJzb3ImIGVhc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEN1cnNvciwgYywgKEN1cnNvcjo6RWFzdFBhbm5pbmcpKTsKKyAgICByZXR1cm4gYzsKK30K
KyAgICAKK2NvbnN0IEN1cnNvciYgbm9ydGhQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6Tm9ydGhQYW5uaW5nKSk7CisgICAgcmV0
dXJuIGM7Cit9CisgICAgCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFBhbm5pbmdDdXJzb3IoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoQ3Vyc29yOjpOb3J0aEVhc3RQ
YW5uaW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisgICAgCitjb25zdCBDdXJzb3ImIG5vcnRoV2Vz
dFBhbm5pbmdDdXJzb3IoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAo
Q3Vyc29yOjpOb3J0aFdlc3RQYW5uaW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisgICAgCitjb25z
dCBDdXJzb3ImIHNvdXRoUGFubmluZ0N1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChDdXJzb3IsIGMsIChDdXJzb3I6OlNvdXRoUGFubmluZykpOworICAgIHJldHVybiBjOworfQor
ICAgIAorY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RQYW5uaW5nQ3Vyc29yKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6U291dGhFYXN0UGFubmluZykpOwor
ICAgIHJldHVybiBjOworfQorICAgIAorY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RQYW5uaW5nQ3Vy
c29yKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKEN1cnNvcjo6U291
dGhXZXN0UGFubmluZykpOworICAgIHJldHVybiBjOworfQorICAgIAorY29uc3QgQ3Vyc29yJiB3
ZXN0UGFubmluZ0N1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMs
IChDdXJzb3I6Oldlc3RQYW5uaW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNv
ciYgZ3JhYkN1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChD
dXJzb3I6OkdyYWIpKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBncmFiYmlu
Z0N1cnNvcigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6
OkdyYWJiaW5nKSk7CisgICAgcmV0dXJuIGM7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9DdXJzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDE1IEBACiAjaWZu
ZGVmIEN1cnNvcl9oCiAjZGVmaW5lIEN1cnNvcl9oCiAKKyNpbmNsdWRlICJJbWFnZS5oIgorI2lu
Y2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCiAjaWYgUExBVEZP
Uk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgSElDT05fXyogSElDT047CiB0eXBlZGVmIEhJQ09OIEhD
VVJTT1I7CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykKIHR5
cGVkZWYgc3RydWN0IF9HZGtDdXJzb3IgR2RrQ3Vyc29yOwogI2VsaWYgUExBVEZPUk0oUVQpCkBA
IC01OSwxMCArNjIsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgSElDT05fXyAqSElDT047CiB0eXBlZGVm
IEhJQ09OIEhDVVJTT1I7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0o
TUFDKQorI2RlZmluZSBXVEZfVVNFX0xBWllfTkFUSVZFX0NVUlNPUiAxCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSW50UG9pbnQ7
CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgY2xhc3MgU2hhcmVkQ3Vyc29yIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2hhcmVkQ3Vyc29yPiB7CkBAIC03NSw1NSArODEsMTEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgSENVUlNPUiBtX25hdGl2ZUN1cnNvcjsKICAgICB9OwogICAgIHR5
cGVkZWYgUmVmUHRyPFNoYXJlZEN1cnNvcj4gUGxhdGZvcm1DdXJzb3I7Ci0gICAgdHlwZWRlZiBI
Q1VSU09SIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOwogI2VsaWYgUExBVEZPUk0oTUFDKQogICAgIHR5
cGVkZWYgTlNDdXJzb3IqIFBsYXRmb3JtQ3Vyc29yOwotICAgIHR5cGVkZWYgTlNDdXJzb3IqIFBs
YXRmb3JtQ3Vyc29ySGFuZGxlOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIHR5cGVkZWYgR2Rr
Q3Vyc29yKiBQbGF0Zm9ybUN1cnNvcjsKLSAgICB0eXBlZGVmIEdka0N1cnNvciogUGxhdGZvcm1D
dXJzb3JIYW5kbGU7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgdHlwZWRlZiBjb25zdCBjaGFy
KiBQbGF0Zm9ybUN1cnNvcjsKLSAgICB0eXBlZGVmIGNvbnN0IGNoYXIqIFBsYXRmb3JtQ3Vyc29y
SGFuZGxlOwogI2VsaWYgUExBVEZPUk0oUVQpICYmICFkZWZpbmVkKFFUX05PX0NVUlNPUikKICAg
ICB0eXBlZGVmIFFDdXJzb3IgUGxhdGZvcm1DdXJzb3I7Ci0gICAgdHlwZWRlZiBRQ3Vyc29yKiBQ
bGF0Zm9ybUN1cnNvckhhbmRsZTsKICNlbGlmIFBMQVRGT1JNKFdYKQogICAgIHR5cGVkZWYgd3hD
dXJzb3IqIFBsYXRmb3JtQ3Vyc29yOwotICAgIHR5cGVkZWYgd3hDdXJzb3IqIFBsYXRmb3JtQ3Vy
c29ySGFuZGxlOwogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgLy8gU2VlIFBsYXRmb3Jt
Q3Vyc29yLmgKLSAgICB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOwogI2VsaWYg
UExBVEZPUk0oSEFJS1UpCiAgICAgdHlwZWRlZiBCQ3Vyc29yKiBQbGF0Zm9ybUN1cnNvcjsKLSAg
ICB0eXBlZGVmIEJDdXJzb3IqIFBsYXRmb3JtQ3Vyc29ySGFuZGxlOwogI2Vsc2UKICAgICB0eXBl
ZGVmIHZvaWQqIFBsYXRmb3JtQ3Vyc29yOwotICAgIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1DdXJz
b3JIYW5kbGU7CiAjZW5kaWYKIAogICAgIGNsYXNzIEN1cnNvciB7CiAgICAgcHVibGljOgorICAg
ICAgICBlbnVtIFR5cGUgeworICAgICAgICAgICAgUG9pbnRlciwKKyAgICAgICAgICAgIENyb3Nz
LAorICAgICAgICAgICAgSGFuZCwKKyAgICAgICAgICAgIElCZWFtLAorICAgICAgICAgICAgV2Fp
dCwKKyAgICAgICAgICAgIEhlbHAsCisgICAgICAgICAgICBFYXN0UmVzaXplLAorICAgICAgICAg
ICAgTm9ydGhSZXNpemUsCisgICAgICAgICAgICBOb3J0aEVhc3RSZXNpemUsCisgICAgICAgICAg
ICBOb3J0aFdlc3RSZXNpemUsCisgICAgICAgICAgICBTb3V0aFJlc2l6ZSwKKyAgICAgICAgICAg
IFNvdXRoRWFzdFJlc2l6ZSwKKyAgICAgICAgICAgIFNvdXRoV2VzdFJlc2l6ZSwKKyAgICAgICAg
ICAgIFdlc3RSZXNpemUsCisgICAgICAgICAgICBOb3J0aFNvdXRoUmVzaXplLAorICAgICAgICAg
ICAgRWFzdFdlc3RSZXNpemUsCisgICAgICAgICAgICBOb3J0aEVhc3RTb3V0aFdlc3RSZXNpemUs
CisgICAgICAgICAgICBOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemUsCisgICAgICAgICAgICBDb2x1
bW5SZXNpemUsCisgICAgICAgICAgICBSb3dSZXNpemUsCisgICAgICAgICAgICBNaWRkbGVQYW5u
aW5nLAorICAgICAgICAgICAgRWFzdFBhbm5pbmcsCisgICAgICAgICAgICBOb3J0aFBhbm5pbmcs
CisgICAgICAgICAgICBOb3J0aEVhc3RQYW5uaW5nLAorICAgICAgICAgICAgTm9ydGhXZXN0UGFu
bmluZywKKyAgICAgICAgICAgIFNvdXRoUGFubmluZywKKyAgICAgICAgICAgIFNvdXRoRWFzdFBh
bm5pbmcsCisgICAgICAgICAgICBTb3V0aFdlc3RQYW5uaW5nLAorICAgICAgICAgICAgV2VzdFBh
bm5pbmcsCisgICAgICAgICAgICBNb3ZlLAorICAgICAgICAgICAgVmVydGljYWxUZXh0LAorICAg
ICAgICAgICAgQ2VsbCwKKyAgICAgICAgICAgIENvbnRleHRNZW51LAorICAgICAgICAgICAgQWxp
YXMsCisgICAgICAgICAgICBQcm9ncmVzcywKKyAgICAgICAgICAgIE5vRHJvcCwKKyAgICAgICAg
ICAgIENvcHksCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm90QWxsb3dlZCwKKyAg
ICAgICAgICAgIFpvb21JbiwKKyAgICAgICAgICAgIFpvb21PdXQsCisgICAgICAgICAgICBHcmFi
LAorICAgICAgICAgICAgR3JhYmJpbmcsCisgICAgICAgICAgICBDdXN0b20KKyAgICAgICAgfTsK
KworICAgICAgICBzdGF0aWMgY29uc3QgQ3Vyc29yJiBmcm9tVHlwZShDdXJzb3I6OlR5cGUpOwor
CiAgICAgICAgIEN1cnNvcigpCiAjaWYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oRUZMKQot
ICAgICAgICA6IG1faW1wbCgwKQorICAgICAgICAgICAgOiBtX3BsYXRmb3JtQ3Vyc29yKDApCiAj
ZW5kaWYKLSAgICAgICAgeyB9CisgICAgICAgIHsKKyAgICAgICAgfQogCiAgICAgICAgIEN1cnNv
cihJbWFnZSosIGNvbnN0IEludFBvaW50JiBob3RTcG90KTsKICAgICAgICAgQ3Vyc29yKGNvbnN0
IEN1cnNvciYpOwogICAgICAgICB+Q3Vyc29yKCk7CiAgICAgICAgIEN1cnNvciYgb3BlcmF0b3I9
KGNvbnN0IEN1cnNvciYpOwogCisjaWYgVVNFKExBWllfTkFUSVZFX0NVUlNPUikKKyAgICAgICAg
Q3Vyc29yKFR5cGUpOworICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KKyAgICAgICAgSW1hZ2UqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsg
fQorICAgICAgICBjb25zdCBJbnRQb2ludCYgaG90U3BvdCgpIGNvbnN0IHsgcmV0dXJuIG1faG90
U3BvdDsgfQorICAgICAgICBQbGF0Zm9ybUN1cnNvciBwbGF0Zm9ybUN1cnNvcigpIGNvbnN0Owor
I2Vsc2UKICAgICAgICAgQ3Vyc29yKFBsYXRmb3JtQ3Vyc29yKTsKLSAgICAgICAgUGxhdGZvcm1D
dXJzb3IgaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbDsgfQorICAgICAgICBQbGF0Zm9ybUN1
cnNvciBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUN1cnNvcjsgfQorI2VuZGlmCiAK
ICAgICAgcHJpdmF0ZToKLSAgICAgICAgUGxhdGZvcm1DdXJzb3IgbV9pbXBsOworI2lmIFVTRShM
QVpZX05BVElWRV9DVVJTT1IpCisgICAgICAgIHZvaWQgZW5zdXJlUGxhdGZvcm1DdXJzb3IoKSBj
b25zdDsKKworICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBtX2lt
YWdlOworICAgICAgICBJbnRQb2ludCBtX2hvdFNwb3Q7CisjZW5kaWYKKworICAgICAgICBtdXRh
YmxlIFBsYXRmb3JtQ3Vyc29yIG1fcGxhdGZvcm1DdXJzb3I7CiAgICAgfTsKIAogICAgIEludFBv
aW50IGRldGVybWluZUhvdFNwb3QoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYgc3BlY2lmaWVkSG90
U3BvdCk7Ci0KKyAgICBjb25zdCBjaGFyKiBuYW1lRm9yQ3Vyc29yVHlwZShDdXJzb3I6OlR5cGUp
OworICAgIAogICAgIGNvbnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpOwogICAgIGNvbnN0IEN1
cnNvciYgY3Jvc3NDdXJzb3IoKTsKICAgICBjb25zdCBDdXJzb3ImIGhhbmRDdXJzb3IoKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vSG9zdFdpbmRvdy5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vSG9zdFdpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3Vyc29yOworCiBjbGFzcyBIb3N0V2luZG93IDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Ib3N0V2luZG93KCkgeyB9
CkBAIC01Niw2ICs1OCw5IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBUbyBub3RpZnkgV2ViS2l0
IG9mIHNjcm9sbGJhciBtb2RlIGNoYW5nZXMuCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhcnNN
b2RlRGlkQ2hhbmdlKCkgY29uc3QgPSAwOworCisgICAgLy8gUmVxdWVzdCB0aGF0IHRoZSBjdXJz
b3IgY2hhbmdlLgorICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgPSAw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DdXJzb3JDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DdXJzb3JDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DdXJzb3JDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDEyICszNCwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDdXJzb3I6OkN1cnNvcihj
b25zdCBDdXJzb3ImIG90aGVyKQotICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKKyAgICA6IG1f
cGxhdGZvcm1DdXJzb3Iob3RoZXIubV9wbGF0Zm9ybUN1cnNvcikKIHsKIH0KIAogQ3Vyc29yOjpD
dXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCkKLSAgICA6IG1faW1w
bChpbWFnZSwgaG90U3BvdCkKKyAgICA6IG1fcGxhdGZvcm1DdXJzb3IoaW1hZ2UsIGhvdFNwb3Qp
CiB7CiB9CiAKQEAgLTQ5LDEyICs0OSwxMiBAQCBDdXJzb3I6On5DdXJzb3IoKQogCiBDdXJzb3Im
IEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCiB7Ci0gICAgbV9pbXBsID0g
b3RoZXIubV9pbXBsOworICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vy
c29yOwogICAgIHJldHVybiAqdGhpczsKIH0KIAogQ3Vyc29yOjpDdXJzb3IoUGxhdGZvcm1DdXJz
b3IgYykKLSAgICA6IG1faW1wbChjKQorICAgIDogbV9wbGF0Zm9ybUN1cnNvcihjKQogewogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9DdXJzb3JFZmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0N1cnNvckVmbC5jcHAJKHJldmlzaW9uIDYzMTAyKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ3Vyc29yRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
MzMgKzQ1LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ3Vyc29yOjpDdXJzb3IoUGxhdGZv
cm1DdXJzb3IgcCkKIHsKLSAgICBtX2ltcGwgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChwKTsKKyAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocCk7CiB9CiAKIEN1cnNv
cjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCiB7Ci0gICAgbV9pbXBsID0gZWluYV9zdHJp
bmdzaGFyZV9yZWYob3RoZXIubV9pbXBsKTsKKyAgICBtX3BsYXRmb3JtQ3Vyc29yID0gZWluYV9z
dHJpbmdzaGFyZV9yZWYob3RoZXIubV9wbGF0Zm9ybUN1cnNvcik7CiB9CiAKIEN1cnNvcjo6fkN1
cnNvcigpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChtX2ltcGwpOwotICAgICAgICBtX2ltcGwgPSAwOworICAgIGlmIChtX3BsYXRmb3JtQ3Vyc29y
KSB7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKG1fcGxhdGZvcm1DdXJzb3IpOworICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gMDsKICAgICB9CiB9CiAKIEN1cnNvcjo6Q3Vyc29yKElt
YWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdHNwb3QpCi0gICAgOiBtX2ltcGwoMCkKKyAg
ICA6IG1fcGxhdGZvcm1DdXJzb3IoMCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBD
dXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCiB7Ci0gICAgZWlu
YV9zdHJpbmdzaGFyZV9yZWYob3RoZXIubV9pbXBsKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChtX2ltcGwpOwotICAgIG1faW1wbCA9IG90aGVyLm1faW1wbDsKKyAgICBlaW5hX3N0cmluZ3No
YXJlX3JlZihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChtX3BsYXRmb3JtQ3Vyc29yKTsKKyAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0
Zm9ybUN1cnNvcjsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0N1cnNvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q3Vyc29yR3RrLmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9D
dXJzb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywzOCArNTcsMzggQEAgc3RhdGljIEdk
a0N1cnNvciogY3VzdG9tQ3Vyc29yTmV3KEN1c3RvbQogCiAKIEN1cnNvcjo6Q3Vyc29yKGNvbnN0
IEN1cnNvciYgb3RoZXIpCi0gICAgOiBtX2ltcGwob3RoZXIubV9pbXBsKQorICAgIDogbV9wbGF0
Zm9ybUN1cnNvcihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKQogewotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIGdka19jdXJzb3JfcmVmKG1faW1wbCk7CisgICAgaWYgKG1fcGxhdGZvcm1DdXJzb3Ip
CisgICAgICAgIGdka19jdXJzb3JfcmVmKG1fcGxhdGZvcm1DdXJzb3IpOwogfQogCiBDdXJzb3I6
OkN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewogICAgIElu
dFBvaW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RTcG90KGltYWdlLCBob3RTcG90
KTsKICAgICBHZGtQaXhidWYqIHBpeGJ1ZiA9IGltYWdlLT5nZXRHZGtQaXhidWYoKTsKLSAgICBt
X2ltcGwgPSBnZGtfY3Vyc29yX25ld19mcm9tX3BpeGJ1ZihnZGtfZGlzcGxheV9nZXRfZGVmYXVs
dCgpLCBwaXhidWYsIGVmZmVjdGl2ZUhvdFNwb3QueCgpLCBlZmZlY3RpdmVIb3RTcG90LnkoKSk7
CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGdka19jdXJzb3JfbmV3X2Zyb21fcGl4YnVmKGdka19k
aXNwbGF5X2dldF9kZWZhdWx0KCksIHBpeGJ1ZiwgZWZmZWN0aXZlSG90U3BvdC54KCksIGVmZmVj
dGl2ZUhvdFNwb3QueSgpKTsKICAgICBnX29iamVjdF91bnJlZihwaXhidWYpOwogfQogCiBDdXJz
b3I6On5DdXJzb3IoKQogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIGdka19jdXJzb3JfdW5y
ZWYobV9pbXBsKTsKKyAgICBpZiAobV9wbGF0Zm9ybUN1cnNvcikKKyAgICAgICAgZ2RrX2N1cnNv
cl91bnJlZihtX3BsYXRmb3JtQ3Vyc29yKTsKIH0KIAogQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9y
PShjb25zdCBDdXJzb3ImIG90aGVyKQogewotICAgIGdka19jdXJzb3JfcmVmKG90aGVyLm1faW1w
bCk7Ci0gICAgZ2RrX2N1cnNvcl91bnJlZihtX2ltcGwpOwotICAgIG1faW1wbCA9IG90aGVyLm1f
aW1wbDsKKyAgICBnZGtfY3Vyc29yX3JlZihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKTsKKyAgICBn
ZGtfY3Vyc29yX3VucmVmKG1fcGxhdGZvcm1DdXJzb3IpOworICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBvdGhlci5tX3BsYXRmb3JtQ3Vyc29yOwogICAgIHJldHVybiAqdGhpczsKIH0KIAogQ3Vyc29y
OjpDdXJzb3IoR2RrQ3Vyc29yKiBjKQotICAgIDogbV9pbXBsKGMpCisgICAgOiBtX3BsYXRmb3Jt
Q3Vyc29yKGMpCiB7Ci0gICAgbV9pbXBsID0gYzsKKyAgICBtX3BsYXRmb3JtQ3Vyc29yID0gYzsK
IAogICAgIC8vIFRoZSBHZGtDdXJzb3IgbWF5IGJlIE5VTEwgLSB0aGUgZGVmYXVsdCBjdXJzb3Ig
Zm9yIHRoZSB3aW5kb3cuCiAgICAgaWYgKGMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0N1cnNvckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0N1
cnNvckhhaWt1LmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1
L0N1cnNvckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzEgKzM0LDMxIEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEN1cnNvcjo6Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIGN1cnNvcikK
LSAgICA6IG1faW1wbChjdXJzb3IpCisgICAgOiBtX3BsYXRmb3JtQ3Vyc29yKGN1cnNvcikKIHsK
IH0KIAogQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKLSAgICA6IG1faW1wbCgw
KQorICAgIDogbV9wbGF0Zm9ybUN1cnNvcigwKQogewogICAgICp0aGlzID0gb3RoZXI7CiB9CiAK
IEN1cnNvcjo6fkN1cnNvcigpCiB7Ci0gICAgZGVsZXRlIG1faW1wbDsKKyAgICBkZWxldGUgbV9w
bGF0Zm9ybUN1cnNvcjsKIH0KIAogQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqLCBjb25zdCBJbnRQb2lu
dCYpCi0gICAgOiBtX2ltcGwoMCkKKyAgICA6IG1fcGxhdGZvcm1DdXJzb3IoMCkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCiBDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1
cnNvciYgb3RoZXIpCiB7Ci0gICAgZGVsZXRlIG1faW1wbDsKLSAgICBtX2ltcGwgPSBvdGhlci5t
X2ltcGwgPyBuZXcgQkN1cnNvcigqb3RoZXIubV9pbXBsKSA6IDA7CisgICAgZGVsZXRlIG1fcGxh
dGZvcm1DdXJzb3I7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJz
b3IgPyBuZXcgQkN1cnNvcigqb3RoZXIubV9wbGF0Zm9ybUN1cnNvcikgOiAwOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ3Vyc29yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbQkocmV2aXNpb24g
NjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9DdXJzb3JNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDggKzI4LDYgQEAKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAjaW1w
b3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCi0jaW1wb3J0ICJJbWFnZS5oIgotI2ltcG9ydCAiSW50
UG9pbnQuaCIKICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogQGludGVyZmFjZSBXZWJD
b3JlQ3Vyc29yQnVuZGxlIDogTlNPYmplY3QgeyB9CkBAIC01MCw3ICs0OCw3IEBAIHN0YXRpYyBO
U0N1cnNvciogY3JlYXRlQ3VzdG9tQ3Vyc29yKEltYWcKICAgICBpZiAoIWltZykKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBb
W05TQ3Vyc29yIGFsbG9jXSBpbml0V2l0aEltYWdlOmltZyBob3RTcG90OmRldGVybWluZUhvdFNw
b3QoaW1hZ2UsIGhvdFNwb3QpXTsKKyAgICByZXR1cm4gW1tOU0N1cnNvciBhbGxvY10gaW5pdFdp
dGhJbWFnZTppbWcgaG90U3BvdDpob3RTcG90XTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogICAgIHJldHVybiAwOwogfQpAQCAtNzYsMjgxICs3NCwxNTIgQEAgc3RhdGljIE5TQ3Vy
c29yKiBsZWFrTmFtZWRDdXJzb3IoY29uc3QgYwogICAgIHJldHVybiBuaWw7CiB9CiAKLUN1cnNv
cjo6Q3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpCi0gICAgOiBt
X2ltcGwoSGFyZFJldGFpbldpdGhOU1JlbGVhc2UoY3JlYXRlQ3VzdG9tQ3Vyc29yKGltYWdlLCBo
b3RTcG90KSkpCit2b2lkIEN1cnNvcjo6ZW5zdXJlUGxhdGZvcm1DdXJzb3IoKSBjb25zdAogewot
fQorICAgIGlmIChtX3BsYXRmb3JtQ3Vyc29yKQorICAgICAgICByZXR1cm47CiAKLUN1cnNvcjo6
Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCi0gICAgOiBtX2ltcGwoSGFyZFJldGFpbihvdGhl
ci5tX2ltcGwpKQoteworICAgIHN3aXRjaCAobV90eXBlKSB7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpQb2ludGVyOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4oW05T
Q3Vyc29yIGFycm93Q3Vyc29yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
dXJzb3I6OkNyb3NzOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4o
bGVha05hbWVkQ3Vyc29yKCJjcm9zc0hhaXJDdXJzb3IiLCAxMSwgMTEpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6SGFuZDoKKyAgICAgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibGlua0N1cnNvciIsIDYsIDEp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6SUJlYW06CisgICAg
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihbTlNDdXJzb3IgSUJlYW1DdXJz
b3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6V2FpdDoKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigi
d2FpdEN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1
cnNvcjo6SGVscDoKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxl
YWtOYW1lZEN1cnNvcigiaGVscEN1cnNvciIsIDgsIDgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6TW92ZToKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok1pZGRsZVBh
bm5pbmc6CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFt
ZWRDdXJzb3IoIm1vdmVDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDdXJzb3I6OkVhc3RSZXNpemU6CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0UGFu
bmluZzoKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1l
ZEN1cnNvcigiZWFzdFJlc2l6ZUN1cnNvciIsIDE0LCA3KSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoUmVzaXplOgorICAgICAgICBjYXNlIEN1cnNvcjo6
Tm9ydGhQYW5uaW5nOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4o
bGVha05hbWVkQ3Vyc29yKCJub3J0aFJlc2l6ZUN1cnNvciIsIDcsIDEpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgorICAgICAgICBj
YXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm9ydGhFYXN0UmVzaXplQ3Vyc29yIiwg
MTQsIDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhX
ZXN0UmVzaXplOgorICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0UGFubmluZzoKKyAgICAg
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm9y
dGhXZXN0UmVzaXplQ3Vyc29yIiwgMCwgMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ3Vyc29yOjpTb3V0aFJlc2l6ZToKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoUGFu
bmluZzoKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1l
ZEN1cnNvcigic291dGhSZXNpemVDdXJzb3IiLCA3LCAxNCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RSZXNpemU6CisgICAgICAgIGNhc2UgQ3Vy
c29yOjpTb3V0aEVhc3RQYW5uaW5nOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhh
cmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJzb3V0aEVhc3RSZXNpemVDdXJzb3IiLCAxNCwgMTQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UmVz
aXplOgorICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UGFubmluZzoKKyAgICAgICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigic291dGhXZXN0
UmVzaXplQ3Vyc29yIiwgMSwgMTQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEN1cnNvcjo6V2VzdFJlc2l6ZToKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJk
UmV0YWluKGxlYWtOYW1lZEN1cnNvcigid2VzdFJlc2l6ZUN1cnNvciIsIDEsIDcpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhTb3V0aFJlc2l6ZToKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigi
bm9ydGhTb3V0aFJlc2l6ZUN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEN1cnNvcjo6RWFzdFdlc3RSZXNpemU6CisgICAgICAgIGNhc2UgQ3Vyc29yOjpX
ZXN0UGFubmluZzoKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxl
YWtOYW1lZEN1cnNvcigiZWFzdFdlc3RSZXNpemVDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZToK
KyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNv
cigibm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yIiwgNywgNykpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemU6Cisg
ICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3Io
Im5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6Q29sdW1uUmVzaXplOgorICAgICAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IFtOU0N1cnNvciByZXNpemVMZWZ0UmlnaHRDdXJzb3JdOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpSb3dSZXNpemU6CisgICAgICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gW05TQ3Vyc29yIHJlc2l6ZVVwRG93bkN1cnNvcl07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlZlcnRpY2FsVGV4dDoKKyAgICAg
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigidmVy
dGljYWxUZXh0Q3Vyc29yIiwgNywgNykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ3Vyc29yOjpDZWxsOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRh
aW4obGVha05hbWVkQ3Vyc29yKCJjZWxsQ3Vyc29yIiwgNywgNykpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDb250ZXh0TWVudToKKyAgICAgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigiY29udGV4dE1lbnVDdXJz
b3IiLCAzLCAyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkFs
aWFzOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVk
Q3Vyc29yKCJhbGlhc0N1cnNvciIsIDExLCAzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDdXJzb3I6OlByb2dyZXNzOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJwcm9ncmVzc0N1cnNvciIsIDMsIDIpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9Ecm9wOgorICAgICAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJub0Ryb3BD
dXJzb3IiLCAzLCAxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6
OkNvcHk6CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFt
ZWRDdXJzb3IoImNvcHlDdXJzb3IiLCAzLCAyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDdXJzb3I6Ok5vbmU6CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFy
ZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vbmVDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vdEFsbG93ZWQ6CisgICAgICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vdEFsbG93ZWRD
dXJzb3IiLCAxMSwgMTEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNv
cjo6Wm9vbUluOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVh
a05hbWVkQ3Vyc29yKCJ6b29tSW5DdXJzb3IiLCA3LCA3KSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDdXJzb3I6Olpvb21PdXQ6CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoInpvb21PdXRDdXJzb3IiLCA3LCA3KSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkdyYWI6CisgICAgICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihbTlNDdXJzb3Igb3BlbkhhbmRDdXJz
b3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6R3JhYmJpbmc6
CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihbTlNDdXJzb3IgY2xv
c2VkSGFuZEN1cnNvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpDdXN0b206CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbldpdGhO
U1JlbGVhc2UoY3JlYXRlQ3VzdG9tQ3Vyc29yKG1faW1hZ2UuZ2V0KCksIG1faG90U3BvdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQogfQogCi1DdXJzb3I6On5DdXJzb3IoKQorQ3Vyc29y
OjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhlcikKKyAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUp
CisgICAgLCBtX2ltYWdlKG90aGVyLm1faW1hZ2UpCisgICAgLCBtX2hvdFNwb3Qob3RoZXIubV9o
b3RTcG90KQorICAgICwgbV9wbGF0Zm9ybUN1cnNvcihIYXJkUmV0YWluKG90aGVyLm1fcGxhdGZv
cm1DdXJzb3IpKQogewotICAgIEhhcmRSZWxlYXNlKG1faW1wbCk7CiB9CiAKIEN1cnNvciYgQ3Vy
c29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKIHsKLSAgICBIYXJkUmV0YWluKG90
aGVyLm1faW1wbCk7Ci0gICAgSGFyZFJlbGVhc2UobV9pbXBsKTsKLSAgICBtX2ltcGwgPSBvdGhl
ci5tX2ltcGw7CisgICAgbV90eXBlID0gb3RoZXIubV90eXBlOworICAgIG1faW1hZ2UgPSBvdGhl
ci5tX2ltYWdlOworICAgIG1faG90U3BvdCA9IG90aGVyLm1faG90U3BvdDsKKworICAgIEhhcmRS
ZXRhaW4ob3RoZXIubV9wbGF0Zm9ybUN1cnNvcik7CisgICAgSGFyZFJlbGVhc2UobV9wbGF0Zm9y
bUN1cnNvcik7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1DdXJzb3I6OkN1cnNvcihOU0N1cnNvciogYykKLSAg
ICA6IG1faW1wbChIYXJkUmV0YWluKGMpKQotewotfQotCi1jb25zdCBDdXJzb3ImIHBvaW50ZXJD
dXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29y
IGFycm93Q3Vyc29yXSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGNyb3Nz
Q3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1l
ZEN1cnNvcigiY3Jvc3NIYWlyQ3Vyc29yIiwgMTEsIDExKSkpOwotICAgIHJldHVybiBjOwotfQot
Ci1jb25zdCBDdXJzb3ImIGhhbmRDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Q3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJsaW5rQ3Vyc29yIiwgNiwgMSkpKTsKLSAgICBy
ZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigibW92ZUN1cnNvciIsIDcs
IDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgdmVydGljYWxUZXh0Q3Vy
c29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1
cnNvcigidmVydGljYWxUZXh0Q3Vyc29yIiwgNywgNykpKTsKLSAgICByZXR1cm4gYzsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBjZWxsQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1
cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigiY2VsbEN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJzb3IoKQotewotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJjb250ZXh0TWVu
dUN1cnNvciIsIDMsIDIpKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgYWxp
YXNDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05h
bWVkQ3Vyc29yKCJhbGlhc0N1cnNvciIsIDExLCAzKSkpOwotICAgIHJldHVybiBjOwotfQotCi1j
b25zdCBDdXJzb3ImIHpvb21JbkN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChD
dXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoInpvb21JbkN1cnNvciIsIDcsIDcpKSk7Ci0gICAg
cmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgem9vbU91dEN1cnNvcigpCi17Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoInpvb21PdXRDdXJz
b3IiLCA3LCA3KSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGNvcHlDdXJz
b3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vy
c29yKCJjb3B5Q3Vyc29yIiwgMywgMikpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBub25lQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywg
KGxlYWtOYW1lZEN1cnNvcigibm9uZUN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJwcm9ncmVzc0N1cnNvciIsIDMsIDIp
KSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9Ecm9wQ3Vyc29yKCkKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigibm9E
cm9wQ3Vyc29yIiwgMywgMSkpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBu
b3RBbGxvd2VkQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywg
KGxlYWtOYW1lZEN1cnNvcigibm90QWxsb3dlZEN1cnNvciIsIDExLCAxMSkpKTsKLSAgICByZXR1
cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDdXJzb3IsIGMsIChbTlNDdXJzb3IgSUJlYW1DdXJzb3JdKSk7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoIndhaXRDdXJzb3IiLCA3LCA3
KSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGhlbHBDdXJzb3IoKQotewot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJoZWxw
Q3Vyc29yIiwgOCwgOCkpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBlYXN0
UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxl
YWtOYW1lZEN1cnNvcigiZWFzdFJlc2l6ZUN1cnNvciIsIDE0LCA3KSkpOwotICAgIHJldHVybiBj
OwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoUmVzaXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNvcigibm9ydGhSZXNpemVDdXJz
b3IiLCA3LCAxKSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoRWFz
dFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChs
ZWFrTmFtZWRDdXJzb3IoIm5vcnRoRWFzdFJlc2l6ZUN1cnNvciIsIDE0LCAxKSkpOwotICAgIHJl
dHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoIm5vcnRo
V2VzdFJlc2l6ZUN1cnNvciIsIDAsIDApKSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vy
c29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJzb3V0aFJlc2l6ZUN1cnNvciIsIDcsIDE0KSkpOwot
ICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3Io
InNvdXRoRWFzdFJlc2l6ZUN1cnNvciIsIDE0LCAxNCkpKTsKLSAgICByZXR1cm4gYzsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQ3Vyc29yLCBjLCAobGVha05hbWVkQ3Vyc29yKCJzb3V0aFdlc3RSZXNpemVDdXJz
b3IiLCAxLCAxNCkpKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiB3ZXN0UmVz
aXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtO
YW1lZEN1cnNvcigid2VzdFJlc2l6ZUN1cnNvciIsIDEsIDcpKSk7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhTb3V0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRDdXJzb3IoIm5vcnRoU291dGhSZXNp
emVDdXJzb3IiLCA3LCA3KSkpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGVh
c3RXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwg
YywgKGxlYWtOYW1lZEN1cnNvcigiZWFzdFdlc3RSZXNpemVDdXJzb3IiLCA3LCA3KSkpOwotICAg
IHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1
cnNvcigpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChDdXJzb3IsIGMsIChsZWFrTmFtZWRD
dXJzb3IoIm5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNvciIsIDcsIDcpKSk7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29y
KCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKGxlYWtOYW1lZEN1cnNv
cigibm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yIiwgNywgNykpKTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBjb2x1bW5SZXNpemVDdXJzb3IoKQotewotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29yIHJlc2l6ZUxlZnRSaWdodEN1cnNv
cl0pKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJzb3Io
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29yIHJlc2l6
ZVVwRG93bkN1cnNvcl0pKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBtaWRk
bGVQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gbW92ZUN1cnNvcigpOwotfQotICAgIAot
Y29uc3QgQ3Vyc29yJiBlYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIGVhc3RSZXNp
emVDdXJzb3IoKTsKLX0KLSAgICAKLWNvbnN0IEN1cnNvciYgbm9ydGhQYW5uaW5nQ3Vyc29yKCkK
LXsKLSAgICByZXR1cm4gbm9ydGhSZXNpemVDdXJzb3IoKTsKLX0KLSAgICAKLWNvbnN0IEN1cnNv
ciYgbm9ydGhFYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIG5vcnRoRWFzdFJlc2l6
ZUN1cnNvcigpOwotfQotICAgIAotY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RQYW5uaW5nQ3Vyc29y
KCkKLXsKLSAgICByZXR1cm4gbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCk7Ci19Ci0gICAgCi1jb25z
dCBDdXJzb3ImIHNvdXRoUGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRoUmVzaXpl
Q3Vyc29yKCk7Ci19Ci0gICAgCi1jb25zdCBDdXJzb3ImIHNvdXRoRWFzdFBhbm5pbmdDdXJzb3Io
KQotewotICAgIHJldHVybiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKLX0KLSAgICAKLWNvbnN0
IEN1cnNvciYgc291dGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHNvdXRoV2Vz
dFJlc2l6ZUN1cnNvcigpOwotfQotICAgIAotY29uc3QgQ3Vyc29yJiB3ZXN0UGFubmluZ0N1cnNv
cigpCi17Ci0gICAgcmV0dXJuIHdlc3RSZXNpemVDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29y
JiBncmFiQ3Vyc29yKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEN1cnNvciwgYywgKFtO
U0N1cnNvciBvcGVuSGFuZEN1cnNvcl0pKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBncmFiYmluZ0N1cnNvcigpCitDdXJzb3I6On5DdXJzb3IoKQogewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQ3Vyc29yLCBjLCAoW05TQ3Vyc29yIGNsb3NlZEhhbmRDdXJzb3JdKSk7Ci0g
ICAgcmV0dXJuIGM7CisgICAgSGFyZFJlbGVhc2UobV9wbGF0Zm9ybUN1cnNvcik7CiB9CiAKLX0K
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdl
dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0J
KHJldmlzaW9uIDYzMTAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjMsMTEgKzEyMywxMiBAQCB2b2lkIFdpZGdldDo6c2V0Rm9jdXMo
Ym9vbCBmb2N1c2VkKQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLSB2b2lk
IFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQotIHsKLSAgICBpZiAoW05T
Q3Vyc29yIGN1cnJlbnRDdXJzb3JdID09IGN1cnNvci5pbXBsKCkpCit2b2lkIFdpZGdldDo6c2V0
Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQoreworICAgIFNjcm9sbFZpZXcqIHZpZXcgPSBy
b290KCk7CisgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47Ci0gICAgW2N1cnNvci5pbXBs
KCkgc2V0XTsKKyAgICB2aWV3LT5ob3N0V2luZG93KCktPnNldEN1cnNvcihjdXJzb3IpOwogfQog
CiB2b2lkIFdpZGdldDo6c2hvdygpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcAkocmV2
aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEN1cnNv
cjo6Q3Vyc29yKFBsYXRmb3JtQ3Vyc29yIHApCi0gICAgOiBtX2ltcGwocCkKKyAgICA6IG1fcGxh
dGZvcm1DdXJzb3IocCkKIHsKIH0KIAogQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhl
cikKLSAgICA6IG1faW1wbChvdGhlci5tX2ltcGwpCisgICAgOiBtX3BsYXRmb3JtQ3Vyc29yKG90
aGVyLm1fcGxhdGZvcm1DdXJzb3IpCiB7CiB9CiAKQEAgLTYxLDEzICs2MSwxMyBAQCBDdXJzb3I6
OkN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvCiB7CiAjaWZuZGVmIFFUX05PX0NVUlNP
UgogICAgIEludFBvaW50IGVmZmVjdGl2ZUhvdFNwb3QgPSBkZXRlcm1pbmVIb3RTcG90KGltYWdl
LCBob3RTcG90KTsKLSAgICBtX2ltcGwgPSBRQ3Vyc29yKCooaW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCkpLCBlZmZlY3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90U3BvdC55
KCkpOworICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBRQ3Vyc29yKCooaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkpLCBlZmZlY3RpdmVIb3RTcG90LngoKSwgZWZmZWN0aXZlSG90U3Bv
dC55KCkpOwogI2VuZGlmCiB9CiAKIEN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vy
c29yJiBvdGhlcikKIHsKLSAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7CisgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vd2luL0N1cnNvcldpbi5jcHAJKHJldmlzaW9uIDYzMTAyKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ3Vyc29yV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
MTEgKzM5LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DdXJzb3I6OkN1cnNvcihjb25z
dCBDdXJzb3ImIG90aGVyKQotICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKLXsKLX0KLQogc3Rh
dGljIGlubGluZSBib29sIHN1cHBvcnRzQWxwaGFDdXJzb3JzKCkgCiB7CiAgICAgT1NWRVJTSU9O
SU5GTyBvc2luZm8gPSB7MH07CkBAIC01Miw4ICs0NywxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c3VwcG9ydHNBbHBoYUN1cnNvcnMoCiAgICAgcmV0dXJuIG9zaW5mby5kd01ham9yVmVyc2lvbiA+
IDUgfHwgKG9zaW5mby5kd01ham9yVmVyc2lvbiA9PSA1ICYmIG9zaW5mby5kd01pbm9yVmVyc2lv
biA+IDApOwogfQogCi1DdXJzb3I6OkN1cnNvcihJbWFnZSogaW1nLCBjb25zdCBJbnRQb2ludCYg
aG90U3BvdCkKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gY3JlYXRlU2hhcmVkQ3Vy
c29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogeworICAgIFJlZlB0cjxT
aGFyZWRDdXJzb3I+IGltcGw7CisKICAgICBJbnRQb2ludCBlZmZlY3RpdmVIb3RTcG90ID0gZGV0
ZXJtaW5lSG90U3BvdChpbWcsIGhvdFNwb3QpOwogICAgIHN0YXRpYyBib29sIGRvQWxwaGEgPSBz
dXBwb3J0c0FscGhhQ3Vyc29ycygpOwogICAgIEJpdG1hcEluZm8gY3Vyc29ySW1hZ2UgPSBCaXRt
YXBJbmZvOjpjcmVhdGUoSW50U2l6ZShpbWctPndpZHRoKCksIGltZy0+aGVpZ2h0KCkpKTsKQEAg
LTgwLDcgKzc3LDcgQEAgQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqIGltZywgY29uc3QgSW50UG9pbgog
ICAgICAgICBpaS5oYm1NYXNrID0gaE1hc2suZ2V0KCk7CiAgICAgICAgIGlpLmhibUNvbG9yID0g
aEN1cnNvci5nZXQoKTsKIAotICAgICAgICBtX2ltcGwgPSBTaGFyZWRDdXJzb3I6OmNyZWF0ZShD
cmVhdGVJY29uSW5kaXJlY3QoJmlpKSk7CisgICAgICAgIGltcGwgPSBTaGFyZWRDdXJzb3I6OmNy
ZWF0ZShDcmVhdGVJY29uSW5kaXJlY3QoJmlpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
UGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IGFscGhhIGJsZW5kZWQgY3Vyc29ycywgc28gd2UgbmVl
ZAogICAgICAgICAvLyB0byBjcmVhdGUgdGhlIG1hc2sgbWFudWFsbHkKQEAgLTExNSwzMDMgKzEx
MiwxODIgQEAgQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqIGltZywgY29uc3QgSW50UG9pbgogICAgICAg
ICBpY29uLnlIb3RzcG90ID0gZWZmZWN0aXZlSG90U3BvdC55KCk7CiAgICAgICAgIGljb24uaGJt
TWFzayA9IGFuZE1hc2suZ2V0KCk7CiAgICAgICAgIGljb24uaGJtQ29sb3IgPSB4b3JNYXNrLmdl
dCgpOwotICAgICAgICBtX2ltcGwgPSBTaGFyZWRDdXJzb3I6OmNyZWF0ZShDcmVhdGVJY29uSW5k
aXJlY3QoJmljb24pKTsKKyAgICAgICAgaW1wbCA9IFNoYXJlZEN1cnNvcjo6Y3JlYXRlKENyZWF0
ZUljb25JbmRpcmVjdCgmaWNvbikpOwogCiAgICAgICAgIERlbGV0ZURDKHhvck1hc2tEQyk7CiAg
ICAgICAgIERlbGV0ZURDKGFuZE1hc2tEQyk7CiAgICAgfQogICAgIERlbGV0ZURDKHdvcmtpbmdE
Qyk7CiAgICAgUmVsZWFzZURDKDAsIGRjKTsKLX0KIAotQ3Vyc29yOjp+Q3Vyc29yKCkKLXsKKyAg
ICByZXR1cm4gaW1wbC5yZWxlYXNlKCk7CiB9CiAKLUN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0o
Y29uc3QgQ3Vyc29yJiBvdGhlcikKLXsKLSAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7Ci0gICAg
cmV0dXJuICp0aGlzOwotfQotCi1DdXJzb3I6OkN1cnNvcihQbGF0Zm9ybUN1cnNvciBjKQotICAg
IDogbV9pbXBsKGMpCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRDdXJzb3I+IGxvYWRTaGFyZWRD
dXJzb3IoSElOU1RBTkNFIGhJbnN0YW5jZSwgTFBDVFNUUiBscEN1cnNvck5hbWUpCiB7CisgICAg
cmV0dXJuIFNoYXJlZEN1cnNvcjo6Y3JlYXRlKDo6TG9hZEN1cnNvcihoSW5zdGFuY2UsIGxwQ3Vy
c29yTmFtZSkpOwogfQogCi1zdGF0aWMgQ3Vyc29yIGxvYWRDdXJzb3JCeU5hbWUoY2hhciogbmFt
ZSwgaW50IHgsIGludCB5KSAKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gbG9hZEN1
cnNvckJ5TmFtZShjaGFyKiBuYW1lLCBpbnQgeCwgaW50IHkpCiB7CiAgICAgSW50UG9pbnQgaG90
U3BvdCh4LCB5KTsKLSAgICBDdXJzb3IgYzsKICAgICBSZWZQdHI8SW1hZ2U+IGN1cnNvckltYWdl
KEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShuYW1lKSk7Ci0gICAgaWYgKGN1cnNvckltYWdl
ICYmICFjdXJzb3JJbWFnZS0+aXNOdWxsKCkpIAotICAgICAgICBjID0gQ3Vyc29yKGN1cnNvcklt
YWdlLmdldCgpLCBob3RTcG90KTsKLSAgICBlbHNlCi0gICAgICAgIGMgPSBwb2ludGVyQ3Vyc29y
KCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLXN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4g
bG9hZFNoYXJlZEN1cnNvcihISU5TVEFOQ0UgaEluc3RhbmNlLCBMUENUU1RSIGxwQ3Vyc29yTmFt
ZSkKLXsKLSAgICByZXR1cm4gU2hhcmVkQ3Vyc29yOjpjcmVhdGUoTG9hZEN1cnNvcihoSW5zdGFu
Y2UsIGxwQ3Vyc29yTmFtZSkpOwotfQotCi1jb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQot
ewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0FSUk9XKTsK
LSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCi17Ci0gICAg
c3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfQ1JPU1MpOwotICAgIHJl
dHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGhhbmRDdXJzb3IoKQotewotICAgIHN0YXRpYyBD
dXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0hBTkQpOwotICAgIHJldHVybiBjOwot
fQotCi1jb25zdCBDdXJzb3ImIGlCZWFtQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMg
PSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19JQkVBTSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNv
bnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNo
YXJlZEN1cnNvcigwLCBJRENfV0FJVCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgaGVscEN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNv
cigwLCBJRENfSEVMUCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFJl
c2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigw
LCBJRENfU0laRVdFKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFJl
c2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigw
LCBJRENfU0laRU5TKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aEVh
c3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJz
b3IoMCwgSURDX1NJWkVORVNXKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBu
b3J0aFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFy
ZWRDdXJzb3IoMCwgSURDX1NJWkVOV1NFKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBzb3V0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNo
YXJlZEN1cnNvcigwLCBJRENfU0laRU5TKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxv
YWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVOV1NFKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29u
c3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3Ig
YyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVORVNXKTsKLSAgICByZXR1cm4gYzsKLX0K
LQotY29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29y
IGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFV0UpOwotICAgIHJldHVybiBjOwotfQot
Ci1jb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBD
dXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVOUyk7Ci0gICAgcmV0dXJuIGM7
Ci19Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRp
YyBDdXJzb3IgYyA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVXRSk7Ci0gICAgcmV0dXJu
IGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCkK
LXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTkVT
Vyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhFYXN0
UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29y
KDAsIElEQ19TSVpFTldTRSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY29s
dW1uUmVzaXplQ3Vyc29yKCkKLXsKLSAgICAvLyBGSVhNRTogV2luZG93cyBkb2VzIG5vdCBoYXZl
IGEgc3RhbmRhcmQgY29sdW1uIHJlc2l6ZSBjdXJzb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMTg1OTE+
Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRVdFKTsK
LSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJzb3IoKQotewot
ICAgIC8vIEZJWE1FOiBXaW5kb3dzIGRvZXMgbm90IGhhdmUgYSBzdGFuZGFyZCByb3cgcmVzaXpl
IGN1cnNvciA8cmRhcjovL3Byb2JsZW0vNTAxODU5MT4KLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBs
b2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTlMpOwotICAgIHJldHVybiBjOwotfQotCi1jb25z
dCBDdXJzb3ImIG1pZGRsZVBhbm5pbmdDdXJzb3IoKQotewotICAgIHN0YXRpYyBjb25zdCBDdXJz
b3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInBhbkljb24iLCA4LCA4KTsKLSAgICByZXR1cm4gYzsK
LX0KLQotY29uc3QgQ3Vyc29yJiBlYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgc3RhdGljIGNv
bnN0IEN1cnNvciBjID0gbG9hZEN1cnNvckJ5TmFtZSgicGFuRWFzdEN1cnNvciIsIDcsIDcpOwot
ICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoUGFubmluZ0N1cnNvcigpCi17
Ci0gICAgc3RhdGljIGNvbnN0IEN1cnNvciBjID0gbG9hZEN1cnNvckJ5TmFtZSgicGFuTm9ydGhD
dXJzb3IiLCA3LCA3KTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aEVh
c3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ3Vyc29yIGMgPSBsb2FkQ3Vy
c29yQnlOYW1lKCJwYW5Ob3J0aEVhc3RDdXJzb3IiLCA3LCA3KTsKLSAgICByZXR1cm4gYzsKLX0K
LQotY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RQYW5uaW5nQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMg
Y29uc3QgQ3Vyc29yIGMgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5Ob3J0aFdlc3RDdXJzb3IiLCA3
LCA3KTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBzb3V0aFBhbm5pbmdDdXJz
b3IoKQotewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInBh
blNvdXRoQ3Vyc29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
c291dGhFYXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAgc3RhdGljIGNvbnN0IEN1cnNvciBjID0g
bG9hZEN1cnNvckJ5TmFtZSgicGFuU291dGhFYXN0Q3Vyc29yIiwgNywgNyk7Ci0gICAgcmV0dXJu
IGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgc291dGhXZXN0UGFubmluZ0N1cnNvcigpCi17Ci0gICAg
c3RhdGljIGNvbnN0IEN1cnNvciBjID0gbG9hZEN1cnNvckJ5TmFtZSgicGFuU291dGhXZXN0Q3Vy
c29yIiwgNywgNyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgd2VzdFBhbm5p
bmdDdXJzb3IoKQotewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5h
bWUoInBhbldlc3RDdXJzb3IiLCA3LCA3KTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vy
c29yJiBtb3ZlQ3Vyc29yKCkgCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gbG9hZFNoYXJlZEN1
cnNvcigwLCBJRENfU0laRUFMTCk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
dmVydGljYWxUZXh0Q3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ3Vyc29yIGMgPSBsb2Fk
Q3Vyc29yQnlOYW1lKCJ2ZXJ0aWNhbFRleHRDdXJzb3IiLCA3LCA3KTsKLSAgICByZXR1cm4gYzsK
LX0KLQotY29uc3QgQ3Vyc29yJiBjZWxsQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gcG9pbnRlckN1
cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGNvbnRleHRNZW51Q3Vyc29yKCkKLXsKLSAgICBy
ZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGFsaWFzQ3Vyc29yKCkK
LXsKLSAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIHByb2dy
ZXNzQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAs
IElEQ19BUFBTVEFSVElORyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9E
cm9wQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBsb2FkU2hhcmVkQ3Vyc29yKDAs
IElEQ19OTyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY29weUN1cnNvcigp
Ci17Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub25l
Q3Vyc29yKCkKLXsKLSAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBDdXJz
b3ImIG5vdEFsbG93ZWRDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGxvYWRTaGFy
ZWRDdXJzb3IoMCwgSURDX05PKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiB6
b29tSW5DdXJzb3IoKQotewotICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JC
eU5hbWUoInpvb21JbkN1cnNvciIsIDcsIDcpOwotICAgIHJldHVybiBjOworICAgIGlmIChjdXJz
b3JJbWFnZSAmJiAhY3Vyc29ySW1hZ2UtPmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gY3JlYXRl
U2hhcmVkQ3Vyc29yKGN1cnNvckltYWdlLmdldCgpLCBob3RTcG90KTsKKyAgICByZXR1cm4gbG9h
ZFNoYXJlZEN1cnNvcigwLCBJRENfQVJST1cpOworfQorCit2b2lkIEN1cnNvcjo6ZW5zdXJlUGxh
dGZvcm1DdXJzb3IoKSBjb25zdAoreworICAgIGlmIChtX3BsYXRmb3JtQ3Vyc29yKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIEN1cnNvcjo6
UG9pbnRlcjoKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNlbGw6CisgICAgICAgIGNhc2UgQ3Vyc29y
OjpDb250ZXh0TWVudToKKyAgICAgICAgY2FzZSBDdXJzb3I6OkFsaWFzOgorICAgICAgICBjYXNl
IEN1cnNvcjo6Q29weToKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vbmU6CisgICAgICAgIGNhc2Ug
Q3Vyc29yOjpHcmFiOgorICAgICAgICBjYXNlIEN1cnNvcjo6R3JhYmJpbmc6CisgICAgICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfQVJST1cpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpDcm9zczoKKyAgICAgICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19DUk9TUyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkhhbmQ6CisgICAgICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfSEFORCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OklCZWFtOgorICAgICAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX0lCRUFNKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6V2FpdDoKKyAgICAgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19XQUlUKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6SGVscDoKKyAgICAgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19IRUxQKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6TW92ZToKKyAgICAgICAgICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFQUxMKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6TWlkZGxlUGFubmluZzoKKyAgICAgICAgICAgIG1f
cGxhdGZvcm1DdXJzb3IgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5JY29uIiwgOCwgOCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkVhc3RSZXNpemU6CisgICAgICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRVdFKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6RWFzdFBhbm5pbmc6Cisg
ICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbG9hZEN1cnNvckJ5TmFtZSgicGFuRWFzdEN1
cnNvciIsIDcsIDcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpO
b3J0aFJlc2l6ZToKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vy
c29yKDAsIElEQ19TSVpFTlMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vy
c29yOjpOb3J0aFBhbm5pbmc6CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbG9hZEN1
cnNvckJ5TmFtZSgicGFuTm9ydGhDdXJzb3IiLCA3LCA3KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UmVzaXplOgorICAgICAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGxvYWRTaGFyZWRDdXJzb3IoMCwgSURDX1NJWkVORVNXKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKKyAgICAg
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5Ob3J0aEVhc3RD
dXJzb3IiLCA3LCA3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6
Tm9ydGhXZXN0UmVzaXplOgorICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxvYWRTaGFy
ZWRDdXJzb3IoMCwgSURDX1NJWkVOV1NFKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEN1cnNvcjo6Tm9ydGhXZXN0UGFubmluZzoKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5Ob3J0aFdlc3RDdXJzb3IiLCA3LCA3KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhSZXNpemU6CisgICAgICAg
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRU5TKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6U291dGhQYW5uaW5nOgor
ICAgICAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxvYWRDdXJzb3JCeU5hbWUoInBhblNvdXRo
Q3Vyc29yIiwgNywgNyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6
OlNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hh
cmVkQ3Vyc29yKDAsIElEQ19TSVpFTldTRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDdXJzb3I6OlNvdXRoRWFzdFBhbm5pbmc6CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gbG9hZEN1cnNvckJ5TmFtZSgicGFuU291dGhFYXN0Q3Vyc29yIiwgNywgNyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFJlc2l6ZToKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpF
TkVTVyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2Vz
dFBhbm5pbmc6CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbG9hZEN1cnNvckJ5TmFt
ZSgicGFuU291dGhXZXN0Q3Vyc29yIiwgNywgNyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDdXJzb3I6Oldlc3RSZXNpemU6CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRVdFKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhTb3V0aFJlc2l6ZToKKyAgICAgICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTlMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpFYXN0V2VzdFJlc2l6ZToKKyAgICAgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFV0UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpXZXN0UGFubmluZzoKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkQ3Vyc29yQnlOYW1lKCJwYW5XZXN0Q3Vy
c29yIiwgNywgNyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5v
cnRoRWFzdFNvdXRoV2VzdFJlc2l6ZToKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBs
b2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTkVTVyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZToKKyAgICAgICAgICAg
IG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFTldTRSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6OkNvbHVtblJlc2l6ZToKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXaW5kb3dzIGRvZXMgbm90IGhhdmUgYSBzdGFuZGFyZCBjb2x1
bW4gcmVzaXplIGN1cnNvciA8cmRhcjovL3Byb2JsZW0vNTAxODU5MT4KKyAgICAgICAgICAgIG1f
cGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19TSVpFV0UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpSb3dSZXNpemU6CisgICAgICAgICAg
ICAvLyBGSVhNRTogV2luZG93cyBkb2VzIG5vdCBoYXZlIGEgc3RhbmRhcmQgcm93IHJlc2l6ZSBj
dXJzb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMTg1OTE+CisgICAgICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gbG9hZFNoYXJlZEN1cnNvcigwLCBJRENfU0laRU5TKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEN1cnNvcjo6VmVydGljYWxUZXh0OgorICAgICAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IGxvYWRDdXJzb3JCeU5hbWUoInZlcnRpY2FsVGV4dEN1cnNvciIsIDcsIDcp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vyc29yOjpQcm9ncmVzczoKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19BUFBT
VEFSVElORyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6Ok5vRHJv
cDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6Tm90QWxsb3dlZDoK
KyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkU2hhcmVkQ3Vyc29yKDAsIElEQ19O
Tyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXJzb3I6Olpvb21JbjoKKyAg
ICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkQ3Vyc29yQnlOYW1lKCJ6b29tSW5DdXJz
b3IiLCA3LCA3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1cnNvcjo6Wm9v
bU91dDoKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsb2FkQ3Vyc29yQnlOYW1lKCJ6
b29tT3V0Q3Vyc29yIiwgNywgNyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
dXJzb3I6OkN1c3RvbToKKyAgICAgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBjcmVhdGVTaGFy
ZWRDdXJzb3IobV9pbWFnZS5nZXQoKSwgbV9ob3RTcG90KTsKKyAgICB9CiB9CiAKLWNvbnN0IEN1
cnNvciYgem9vbU91dEN1cnNvcigpCitTaGFyZWRDdXJzb3I6On5TaGFyZWRDdXJzb3IoKQogewot
ICAgIHN0YXRpYyBjb25zdCBDdXJzb3IgYyA9IGxvYWRDdXJzb3JCeU5hbWUoInpvb21PdXRDdXJz
b3IiLCA3LCA3KTsKLSAgICByZXR1cm4gYzsKKyAgICBEZXN0cm95SWNvbihtX25hdGl2ZUN1cnNv
cik7CiB9CiAKLWNvbnN0IEN1cnNvciYgZ3JhYkN1cnNvcigpCitDdXJzb3I6OkN1cnNvcihjb25z
dCBDdXJzb3ImIG90aGVyKQorICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKKyAgICAsIG1faW1h
Z2Uob3RoZXIubV9pbWFnZSkKKyAgICAsIG1faG90U3BvdChvdGhlci5tX2hvdFNwb3QpCisgICAg
LCBtX3BsYXRmb3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZvcm1DdXJzb3IpCiB7Ci0gICAgcmV0dXJu
IHBvaW50ZXJDdXJzb3IoKTsKIH0KIAotY29uc3QgQ3Vyc29yJiBncmFiYmluZ0N1cnNvcigpCitD
dXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCiB7Ci0gICAgcmV0
dXJuIHBvaW50ZXJDdXJzb3IoKTsKKyAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7CisgICAgbV9p
bWFnZSA9IG90aGVyLm1faW1hZ2U7CisgICAgbV9ob3RTcG90ID0gb3RoZXIubV9ob3RTcG90Owor
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vyc29yOworICAgIHJldHVy
biAqdGhpczsKIH0KIAotU2hhcmVkQ3Vyc29yOjp+U2hhcmVkQ3Vyc29yKCkKK0N1cnNvcjo6fkN1
cnNvcigpCiB7Ci0gICAgRGVzdHJveUljb24obV9uYXRpdmVDdXJzb3IpOwogfQogCi19Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAJKHJl
dmlzaW9uIDYzMTAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCB2b2lkIFdpZGdldDo6aGlkZSgpCiB7CiB9CiAK
LUhDVVJTT1IgbGFzdFNldEN1cnNvciA9IDA7CiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3IgPSBm
YWxzZTsKIAogdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKQEAg
LTcxLDMwICs3MCwxMCBAQCB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vy
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWN1cnNvci5pbXBsKCktPm5hdGl2
ZUN1cnNvcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXN0U2V0Q3Vyc29yID0gY3Vyc29y
LmltcGwoKS0+bmF0aXZlQ3Vyc29yKCk7Ci0KICAgICBTY3JvbGxWaWV3KiB2aWV3ID0gcm9vdCgp
OwotICAgIGlmICghdmlldyB8fCAhdmlldy0+aXNGcmFtZVZpZXcoKSkgewotICAgICAgICBTZXRD
dXJzb3IobGFzdFNldEN1cnNvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGcmFt
ZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih2aWV3KS0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKSB7Ci0gICAgICAgIFNldEN1cnNvcihsYXN0U2V0Q3Vyc29yKTsKKyAgICBpZiAo
IXZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUt
PnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpIHsKLSAgICAgICAgU2V0Q3Vyc29yKGxhc3RTZXRDdXJz
b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGFnZS0+Y2hyb21lKCktPnNldEN1
cnNvcihsYXN0U2V0Q3Vyc29yKTsKKyAgICB2aWV3LT5ob3N0V2luZG93KCktPnNldEN1cnNvcihj
dXJzb3IpOwogfQogCiB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbmNlL0N1cnNvcldpbmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbmNlL0N1cnNvcldpbmNlLmNwcAkocmV2
aXNpb24gNjMxMDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbmNlL0N1cnNvcldpbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDEyIEBAIHN0YXRpYyBjb25zdCBDdXJzb3ImIGdl
dEN1cnNvcihDdXJzb3JUeXAKIH0KIAogQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBvdGhl
cikKLTogbV9pbXBsKG90aGVyLm1faW1wbCkKKzogbV9wbGF0Zm9ybUN1cnNvcihvdGhlci5tX3Bs
YXRmb3JtQ3Vyc29yKQogewogfQogCiBDdXJzb3I6OkN1cnNvcihJbWFnZSogaW1nLCBjb25zdCBJ
bnRQb2ludCYgaG90c3BvdCkKLTogbV9pbXBsKEN1cnNvck5vbmUpCis6IG1fcGxhdGZvcm1DdXJz
b3IoQ3Vyc29yTm9uZSkKIHsKIH0KIApAQCAtNTMsMTIgKzUzLDEyIEBAIEN1cnNvcjo6fkN1cnNv
cigpCiAKIEN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKIHsK
LSAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVy
Lm1fcGxhdGZvcm1DdXJzb3I7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCiBDdXJzb3I6OkN1cnNv
cihQbGF0Zm9ybUN1cnNvciBjKQotOiBtX2ltcGwoYykKKzogbV9wbGF0Zm9ybUN1cnNvcihjKQog
ewogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L0N1cnNvcld4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L0N1cnNvcld4LmNwcAkocmV2aXNpb24gNjMxMDIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3d4L0N1cnNvcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
MTUgKzM0LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEN1cnNvcjo6Q3Vyc29yKGNvbnN0
IEN1cnNvciYgb3RoZXIpCi0gICAgOiBtX2ltcGwob3RoZXIubV9pbXBsKQorICAgIDogbV9wbGF0
Zm9ybUN1cnNvcihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKQogewogfQogCiBDdXJzb3I6OkN1cnNv
cihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JikgCiB7Ci0gICAgbV9pbXBsID0gMDsKKyAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gMDsKICAgICAvLyBGSVhNRTogZmlndXJlIG91dCB3aHkgdGhl
IGJlbG93IGNvZGUgY2F1c2VzIGEgY3Jhc2ggIAotICAgIC8vbV9pbXBsID0gbmV3IHd4Q3Vyc29y
KCBpbWFnZS0+Z2V0V3hCaXRtYXAoKS0+Q29udmVydFRvSW1hZ2UoKSApOworICAgIC8vbV9wbGF0
Zm9ybUN1cnNvciA9IG5ldyB3eEN1cnNvciggaW1hZ2UtPmdldFd4Qml0bWFwKCktPkNvbnZlcnRU
b0ltYWdlKCkgKTsKIH0KIAogQ3Vyc29yOjp+Q3Vyc29yKCkKQEAgLTUxLDEyICs1MSwxMiBAQCBD
dXJzb3I6On5DdXJzb3IoKQogCiBDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNv
ciYgb3RoZXIpCiB7Ci0gICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBvdGhlci5tX3BsYXRmb3JtQ3Vyc29yOwogICAgIHJldHVybiAqdGhpczsKIH0KIAog
Q3Vyc29yOjpDdXJzb3Iod3hDdXJzb3IqIGMpCi0gICAgOiBtX2ltcGwoYykKKyAgICA6IG1fcGxh
dGZvcm1DdXJzb3IoYykKIHsKIH0KIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdX
aW4uY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmll
d1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiQnJpZGdlLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTY1Niw3ICs2NTgs
NiBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5CiB9CiAKICNpZiAh
T1MoV0lOQ0UpCi1leHRlcm4gSENVUlNPUiBsYXN0U2V0Q3Vyc29yOwogZXh0ZXJuIGJvb2wgaWdu
b3JlTmV4dFNldEN1cnNvcjsKICNlbmRpZgogCkBAIC03MjcsNyArNzI4LDggQEAgdm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRQogICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0
OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50
SGFuZGxlci5jcHAKICAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBp
Z25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCiAgICAgaWdu
b3JlTmV4dFNldEN1cnNvciA9IHRydWU7Ci0gICAgbGFzdFNldEN1cnNvciA9IDo6R2V0Q3Vyc29y
KCk7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAg
IHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+c2V0TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNv
cigpOyAgICAKICNlbmRpZgogfQogCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNjMyNzIpCisrKyBXZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEwLTA3LTEzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MjIzMgorICAgICAgICBNYWtlIGNoYW5naW5nIEN1cnNvcnMgd29yayBpbiBXZWJL
aXQyLgorCisgICAgICAgICogU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlBhZ2VQcm94eU1lc3Nh
Z2VLaW5kcy5oOgorICAgICAgICBBZGQgU2V0Q3Vyc29yIG1lc3NhZ2UuCisKKyAgICAgICAgKiBT
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIEFkZCBlbmNvZGluZy9kZWNv
ZGluZyBvZiBDdXJzb3JzLiBGb3Igbm93IHdlIGRvbid0IHN1cHBvcnQgQ3VzdG9tCisgICAgICAg
IGN1cnNvcnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvUGFnZUNsaWVudC5oOgorICAgICAgICBBZGQgcGFzcyB0aHJvdWdoIGZ1bmN0aW9ucyB0byBn
ZXQgdGhlIGN1cnNvciBmcm9tIHRoZSBXZWJQYWdlUHJveHkKKyAgICAgICAgdG8gdGhlIFdLVmll
dy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1b
V0tWaWV3IF9zZXRDdXJzb3I6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
SW50ZXJuYWwuaDoKKyAgICAgICAgSW1wbGVtZW50IGNoYW5naW5nIHRoZSBjdXJzb3IuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2V0Q3Vyc29yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgIERlY29kZSB0aGUgY3Vyc29yLgorCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d25kUHJvYyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvblNl
dEN1cnNvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEN1cnNvcik6CisgICAgICAg
ICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3Lmg6CisgICAgICAgIEltcGxlbWVudCBjaGFuZ2luZyB0
aGUgY3Vyc29yLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnNldEN1cnNv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2V0TGFzdFNldEN1cnNvclRv
Q3VycmVudEN1cnNvcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaDoKKyAgICAgICAgRW5jb2RlIHRoZSBjdXJzb3Igd2hlbiBzZXRDdXJzb3Ig
aXMgY2FsbGVkLgorCiAyMDEwLTA3LTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdDIv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdDIv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRF
bmNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DdXJz
b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KQEAgLTExMCw2
ICsxMTEsMzAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAg
IH0KIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q3Vyc29y
PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29u
c3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCisgICAgeworICAgICAgICAvLyBGSVhNRTogU3Vw
cG9ydCBjdXN0b20gY3Vyc29ycy4KKyAgICAgICAgaWYgKGN1cnNvci50eXBlKCkgPT0gV2ViQ29y
ZTo6Q3Vyc29yOjpDdXN0b20pCisgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KFdlYkNvcmU6OkN1cnNvcjo6UG9pbnRlcikpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGN1cnNvci50
eXBlKCkpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCisgICAgeworICAgICAgICB1
aW50MzJfdCB0eXBlSW50OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0eXBlSW50KSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBXZWJDb3JlOjpDdXJzb3I6OlR5
cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkN1cnNvcjo6VHlwZT4odHlwZUludCk7Cisg
ICAgICAgIEFTU0VSVCh0eXBlICE9IFdlYkNvcmU6OkN1cnNvcjo6Q3VzdG9tKTsKKworICAgICAg
ICBjdXJzb3IgPSBXZWJDb3JlOjpDdXJzb3I6OmZyb21UeXBlKHR5cGUpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9Cit9OworCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAv
LyBXZWJDb3JlQXJndW1lbnRDb2RlcnNfaApJbmRleDogV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1
cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9T
aGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRzLmgJKHJldmlzaW9u
IDYzMTAyKQorKysgV2ViS2l0Mi9TaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVz
c2FnZUtpbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgZW51bSBLaW5kIHsK
ICAgICBEaWRTdGFydFByb2dyZXNzLAogICAgIERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUsCiAgICAgRGlkVXBkYXRlSGlzdG9yeVRpdGxlLAorICAgIFNldEN1cnNvciwKICAgICBTZXRU
b29sVGlwLAogICAgIFRha2VGb2N1cywKICAgICAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJ
KHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBTdHJpbmc7CisgICAgY2xhc3MgQ3Vyc29yOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
QEAgLTQxLDYgKzQyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhi
b29sIGRpcmVjdGlvbikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25z
dCBXZWJDb3JlOjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzMSw2ICs1MzEsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKENvcgogICAgICAgICAgICAgc2V0VG9vbFRpcCh0b29sVGlwKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViUGFnZVByb3h5TWVz
c2FnZTo6U2V0Q3Vyc29yOiB7CisgICAgICAgICAgICBDdXJzb3IgY3Vyc29yOworICAgICAgICAg
ICAgaWYgKCFhcmd1bWVudHMuZGVjb2RlKGN1cnNvcikpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgc2V0Q3Vyc29yKGN1cnNvcik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OlNob3dQYWdlOiB7CiAg
ICAgICAgICAgICBzaG93UGFnZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04NDMsNiArODUw
LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUb29sVGlwKGNvbnN0IFN0cmkKICAgICBtX3Bh
Z2VDbGllbnQtPnRvb2xUaXBDaGFuZ2VkKG9sZFRvb2xUaXAsIG1fdG9vbFRpcCk7CiB9CiAKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3Ip
Cit7CisgICAgbV9wYWdlQ2xpZW50LT5zZXRDdXJzb3IoY3Vyc29yKTsKK30KKwogdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudChXZWJFdmVudDo6VHlwZSB0eXBlKQogewogICAgIHN3
aXRjaCAodHlwZSkgewpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDYz
MTAyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDYgKzUyLDcgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgSW50U2l6ZTsKKyAgICBjbGFzcyBDdXJzb3I7CiB9CiAKIHN0cnVjdCBX
S0NvbnRleHRTdGF0aXN0aWNzOwpAQCAtMTkwLDExICsxOTEsMTMgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsKICAgICB2b2lkIHNldFRvb2xUaXAoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJik7CisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6
Q3Vyc29yJik7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVFdmVudChXZWJFdmVudDo6VHlwZSk7CiAg
ICAgdm9pZCBkaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3QgV2ViQ29yZTo6U3RyaW5n
JiwgdWludDY0X3QpOwogICAgIHZvaWQgZGlkR2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50
YXRpb24oY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgdWludDY0X3QpOwogCisKICNpZiBQTEFURk9S
TShXSU4pCiAgICAgUGFnZUNsaWVudCogbV9wYWdlQ2xpZW50OwogI2Vsc2UKSW5kZXg6IFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDYzMTAyKQor
KysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NE
aWRSZXZpdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgdGFrZUZvY3VzKGJvb2wgZGlyZWN0aW9uKTsK
ICAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBv
bGRUb29sVGlwLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG5ld1Rvb2xUaXApOwotICAgIAorICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisKICAgICBX
S1ZpZXcqIG1fd2tWaWV3OwogfTsKIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbXBvcnQgIldLQVBJQ2FzdC5oIgogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgogI2ltcG9y
dCAiV0tWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZvdW5kYXRpb25FeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1T
dHJpbmcuaD4KIApAQCAtNjksNCArNzAsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjp0b29sVGlw
Q2hhbmdlZChjb25zCiAgICAgW21fd2tWaWV3IF90b29sVGlwQ2hhbmdlZEZyb206bnNTdHJpbmdG
cm9tV2ViQ29yZVN0cmluZyhvbGRUb29sVGlwKSB0bzpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5n
KG5ld1Rvb2xUaXApXTsKIH0KIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29yKGNvbnN0
IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKQoreworICAgIFttX3drVmlldyBfc2V0Q3Vyc29yOmN1
cnNvci5wbGF0Zm9ybUN1cnNvcigpXTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE5LDYg
KzMxOSwxMiBAQCAtICh2b2lkKV90YWtlRm9jdXM6KEJPT0wpZm9yd2FyZAogICAgICAgICBbW3Nl
bGYgd2luZG93XSBzZWxlY3RLZXlWaWV3UHJlY2VkaW5nVmlldzpzZWxmXTsKIH0KIAorLSAodm9p
ZClfc2V0Q3Vyc29yOihOU0N1cnNvciAqKWN1cnNvcgoreworICAgIGlmIChbTlNDdXJzb3IgY3Vy
cmVudEN1cnNvcl0gPT0gY3Vyc29yKQorICAgICAgICByZXR1cm47CisgICAgW2N1cnNvciBzZXRd
OworfQogCiAvLyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNvbWV0aGlu
ZyByZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KICNkZWZpbmUgVFJB
Q0tJTkdfUkVDVF9UQUcgMHhCQURGQUNFCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QCBAaW50ZXJmYWNlIFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV9wcm9jZXNzRGlkUmV2aXZl
OwogLSAodm9pZClfdGFrZUZvY3VzOihCT09MKWRpcmVjdGlvbjsKIC0gKHZvaWQpX3Rvb2xUaXBD
aGFuZ2VkRnJvbTooTlNTdHJpbmcgKilvbGRUb29sVGlwIHRvOihOU1N0cmluZyAqKW5ld1Rvb2xU
aXA7CistICh2b2lkKV9zZXRDdXJzb3I6KE5TQ3Vyc29yICopY3Vyc29yOwogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogLSAodm9pZClfc3RhcnRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nOihDQUxheWVyICopcm9vdExheWVyOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNw
cAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksOSBAQCBMUkVTVUxUIFdlYlZpZXc6OnduZFBy
b2MoSFdORCBoV25kLCBVSU5UCiAgICAgICAgIGNhc2UgV01fU0hPV1dJTkRPVzoKICAgICAgICAg
ICAgIGxSZXN1bHQgPSBvblNob3dXaW5kb3dFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSwgaGFuZGxlZCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTV9TRVRD
VVJTT1I6CisgICAgICAgICAgICBsUmVzdWx0ID0gb25TZXRDdXJzb3IoaFduZCwgbWVzc2FnZSwg
d1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBoYW5kbGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTE3MCw2ICsxNzMsNyBAQCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgV2ViUGFnZU5h
bWVzCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykKICAgICAsIG1fdG9wTGV2ZWxQYXJl
bnRXaW5kb3coMCkKICAgICAsIG1fdG9vbFRpcFdpbmRvdygwKQorICAgICwgbV9sYXN0Q3Vyc29y
U2V0KDApCiAgICAgLCBtX3RyYWNraW5nTW91c2VMZWF2ZShmYWxzZSkKICAgICAsIG1faXNCZWlu
Z0Rlc3Ryb3llZChmYWxzZSkKIHsKQEAgLTQwOCw2ICs0MTIsMTIgQEAgTFJFU1VMVCBXZWJWaWV3
OjpvblNob3dXaW5kb3dFdmVudChIV05EIAogICAgIHJldHVybiAwOwogfQogCitMUkVTVUxUIFdl
YlZpZXc6Om9uU2V0Q3Vyc29yKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFt
LCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSA6OlNldEN1
cnNvcihtX2xhc3RDdXJzb3JTZXQpOworICAgIHJldHVybiAwOworfQorCiBib29sIFdlYlZpZXc6
OmlzQWN0aXZlKCkKIHsKICAgICBIV05EIGFjdGl2ZVdpbmRvdyA9IDo6R2V0QWN0aXZlV2luZG93
KCk7CkBAIC01MzMsNiArNTQzLDE2IEBAIHZvaWQgV2ViVmlldzo6dG9vbFRpcENoYW5nZWQoY29u
c3QgU3RyaW4KICAgICA6OlNlbmRNZXNzYWdlKG1fdG9vbFRpcFdpbmRvdywgVFRNX0FDVElWQVRF
LCAhbmV3VG9vbFRpcC5pc0VtcHR5KCksIDApOwogfQogCit2b2lkIFdlYlZpZXc6OnNldEN1cnNv
cihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBIQ1VSU09SIHBsYXRmb3Jt
Q3Vyc29yID0gY3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCktPm5hdGl2ZUN1cnNvcigpOworICAgIGlm
ICghcGxhdGZvcm1DdXJzb3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGFzdEN1cnNvclNl
dCA9IHBsYXRmb3JtQ3Vyc29yOworICAgIDo6U2V0Q3Vyc29yKHBsYXRmb3JtQ3Vyc29yKTsKK30K
KwogLy8gV2ViQ29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCiAKIHZvaWQgV2ViVmlldzo6d2lu
ZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCShyZXZpc2lvbiA2MzEwMikKKysrIFdl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2
LDcgQEAgcHJpdmF0ZToKICAgICBMUkVTVUxUIG9uS2lsbEZvY3VzRXZlbnQoSFdORCBoV25kLCBV
SU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKICAgICBMUkVTVUxU
IG9uVGltZXJFdmVudChIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0sIGJv
b2wmIGhhbmRsZWQpOwogICAgIExSRVNVTFQgb25TaG93V2luZG93RXZlbnQoSFdORCBoV25kLCBV
SU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKTsKKyAgICBMUkVTVUxU
IG9uU2V0Q3Vyc29yKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSwgYm9v
bCYgaGFuZGxlZCk7CiAKICAgICBib29sIGlzQWN0aXZlKCk7CiAgICAgdm9pZCB1cGRhdGVBY3Rp
dmVTdGF0ZSgpOwpAQCAtOTMsNiArOTQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzRGlkUmV2aXZlKCk7CiAgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhib29sIGRpcmVj
dGlvbik7CiAgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJz
b3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAKICAgICAvLyBXZWJDb3JlOjpXaW5kb3dNZXNz
YWdlTGlzdGVuZXIKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQs
IFVJTlQgbWVzc2FnZSwgV1BBUkFNLCBMUEFSQU0pOwpAQCAtMTAzLDYgKzEwNSw4IEBAIHByaXZh
dGU6CiAgICAgSFdORCBtX3RvcExldmVsUGFyZW50V2luZG93OwogICAgIEhXTkQgbV90b29sVGlw
V2luZG93OwogCisgICAgSENVUlNPUiBtX2xhc3RDdXJzb3JTZXQ7CisKICAgICBib29sIG1fdHJh
Y2tpbmdNb3VzZUxlYXZlOwogICAgIGJvb2wgbV9pc0JlaW5nRGVzdHJveWVkOwogCkluZGV4OiBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE2LDEwICs0MTYs
OSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihQbGF0Zm9y
bUN1cnNvckhhbmRsZSkKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJiBjdXJzb3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKFdlYlBhZ2VQcm94
eU1lc3NhZ2U6OlNldEN1cnNvciwgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6SW4oY3Vyc29y
KSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3Qg
Tm9kZSopCkBAIC00NzcsNCArNDc2LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpuZWVkVG91
Y2hFdmVudHMoYm8KIH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oV0lOKQordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKQoreworfQorI2VuZGlm
CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiA2MzEwMikK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHJ1bk9wZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6Rmls
ZUNob29zZXI+KTsKICAgICB2aXJ0dWFsIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpTdHJpbmc+JiwgV2ViQ29yZTo6RmlsZUNob29zZXIqKTsKIAotICAgIHZp
cnR1YWwgYm9vbCBzZXRDdXJzb3IoV2ViQ29yZTo6UGxhdGZvcm1DdXJzb3JIYW5kbGUpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAgICAgCiAg
ICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCBoYXMgY2hhbmdl
ZC4gVGhpcyBmdW5jdGlvbgogICAgIC8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGhh
bmRsaW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCkBAIC0xNzUsNyArMTc1LDExIEBAIHByaXZhdGU6
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFsIHZvaWQgbmVlZFRvdWNoRXZl
bnRzKGJvb2wpOwogI2VuZGlmCi0gICAgCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgdmlydHVh
bCB2b2lkIHNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKTsKKyNlbmRpZgorCiAgICAg
V2ViQ29yZTo6U3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKICAgICBXZWJQYWdlKiBtX3BhZ2U7CiB9
OwpJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI3MikKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMC0wNy0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAgICAgICAg
TWFrZSBjaGFuZ2luZyBDdXJzb3JzIHdvcmsgaW4gV2ViS2l0Mi4KKworICAgICAgICAqIGVmbC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lQ2xpZW50RWZsOjpzZXRDdXJzb3IpOgorICAgICAgICAqIGVmbC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRFZmwuaDoKKyAgICAgICAgQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaCBuZXcg
b25lLgorCiAyMDEwLTA3LTEzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDYzMjcyKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA3LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjIzMgor
ICAgICAgICBNYWtlIGNoYW5naW5nIEN1cnNvcnMgd29yayBpbiBXZWJLaXQyLgorCisgICAgICAg
ICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50
SW1wbDo6c2V0Q3Vyc29yKTogQ2hhbmdlIHByb3RvdHlwZSB0byBtYXRjaCBuZXcgb25lLgorCiAy
MDEwLTA3LTEzICBDaHJpcyBHdWlsbG9yeSAgPGNocmlzLmd1aWxsb3J5QGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9tZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L0Nocm9tZUNsaWVudEltcGwuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9tZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdEZvckZyYW1lKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpGaWxlQ2hvb3Nlcj4pOwogICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmls
ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mLCBXZWJDb3JlOjpGaWxlQ2hvb3Nlciop
OwotICAgIHZpcnR1YWwgYm9vbCBzZXRDdXJzb3IoV2ViQ29yZTo6UGxhdGZvcm1DdXJzb3JIYW5k
bGUpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBX
ZWJDb3JlOjpDdXJzb3ImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRlRGlkQ2hhbmdl
KGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
SFRNTFBhcnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIHsgcmV0dXJuIDA7IH0K
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
b3B1cE1lbnVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBv
cHVwTWVudUltcGwuY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUG9wdXBNZW51SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw2ICszMTgsMTAgQEAg
dm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpzY3JvbGxiYXJzTW9kZURpZAogICAgIC8vIE5vdGhpbmcg
dG8gYmUgZG9uZSBzaW5jZSB3ZSBoYXZlIG5vIGNvbmNlcHQgb2YgZGlmZmVyZW50IHNjcm9sbGJh
ciBtb2Rlcy4KIH0KIAordm9pZCBXZWJQb3B1cE1lbnVJbXBsOjpzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJikKK3sKK30KKwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gV2ViQ29yZTo6RnJhbWVs
ZXNzU2Nyb2xsVmlld0NsaWVudAogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVw
TWVudUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVu
dUltcGwuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVw
TWVudUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdCB7
IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6U2Nyb2xsVmlldyopIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAKICAgICAvLyBXZWJD
b3JlOjpGcmFtZWxlc3NTY3JvbGxWaWV3Q2xpZW50IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lk
IHBvcHVwQ2xvc2VkKFdlYkNvcmU6OkZyYW1lbGVzc1Njcm9sbFZpZXcqKTsKSW5kZXg6IFdlYktp
dC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5jcHAJKHJldmlzaW9uIDYz
MTAyKQorKysgV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzcsMTAgKzQzNyw5IEBAIHZvaWQgQ2hyb21lQ2xpZW50RWZsOjpm
b3JtU3RhdGVEaWRDaGFuZ2UKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIENocm9t
ZUNsaWVudEVmbDo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlKQordm9pZCBDaHJvbWVD
bGllbnRFZmw6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIENocm9tZUNsaWVudEVmbDo6cmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKQpJbmRl
eDogV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRFZmwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEVmbC5oCShyZXZpc2lv
biA2MzEwMikKKysrIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50RWZsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8SFRNTFBhcnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIHsg
cmV0dXJuIDA7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JI
YW5kbGUpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBT
Y3JvbGxWaWV3KikgY29uc3Qge30KIApJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMjcyKQorKysgV2ViS2l0
L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNy0x
MyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAgICAgICAgTWFrZSBjaGFuZ2luZyBDdXJzb3JzIHdv
cmsgaW4gV2ViS2l0Mi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaDoKKyAgICAgICAgQ2hhbmdlIHBy
b3RvdHlwZSB0byBtYXRjaCBuZXcgb25lLgorCiAyMDEwLTA3LTEyICBNYXJ0aW4gUm9iaW5zb24g
IDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5v
cm9uaGEgU2lsdmEuCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkxLDEwICs1OTEsOSBA
QCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzKGNvCiAgICAgY2hvb3Nlci0+
aWNvbkxvYWRlZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAKLWJv
b2wgQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUpCit2b2lkIENo
cm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50OjpyZXF1ZXN0
R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiog
Z2VvbG9jYXRpb24pCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpIVE1M
UGFyc2VyUXVpcmtzPiBjcmVhdGVIVE1MUGFyc2VyUXVpcmtzKCkgeyByZXR1cm4gMDsgfQogCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBzZXRDdXJzb3IoV2ViQ29yZTo6UGxhdGZvcm1DdXJzb3JIYW5k
bGUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNv
ciYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlNjcm9sbFZpZXcqKSBjb25zdCB7fQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFdl
YkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKSW5kZXg6IFdlYktpdC9oYWlr
dS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1L0NoYW5nZUxvZwkocmV2aXNp
b24gNjMyNzIpCisrKyBXZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTAtMDctMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3Ig
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAgIE1h
a2UgY2hhbmdpbmcgQ3Vyc29ycyB3b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRIYWlrdTo6c2V0Q3Vyc29yKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRIYWlrdS5oOgorICAgICAgICBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIG5ldyBvbmUu
CisKIDIwMTAtMDYtMTQgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBXZWJLaXQvaGFpa3Uv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHAJKHJldmlzaW9uIDYz
MTAyKQorKysgV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYyLDEwICszNjIsOSBAQCB2b2lkIENocm9tZUNsaWVudEhh
aWt1OjpjaG9vc2VJY29uRm9yRmlsCiAgICAgY2hvb3Nlci0+aWNvbkxvYWRlZChJY29uOjpjcmVh
dGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAKLWJvb2wgQ2hyb21lQ2xpZW50SGFpa3U6
OnNldEN1cnNvcihQbGF0Zm9ybUN1cnNvckhhbmRsZSkKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6
OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwogfQogCiAvLyBOb3RpZmljYXRpb24gdGhhdCB0aGUgZ2l2ZW4gZm9ybSBl
bGVtZW50IGhhcyBjaGFuZ2VkLiBUaGlzIGZ1bmN0aW9uCkluZGV4OiBXZWJLaXQvaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvaGFp
a3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaAkocmV2aXNpb24gNjMxMDIpCisr
KyBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CiAgICAg
ICAgIHZvaWQgY2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgRmlsZUNo
b29zZXIqKTsKIAotICAgICAgICBib29sIHNldEN1cnNvcihQbGF0Zm9ybUN1cnNvckhhbmRsZSk7
CisgICAgICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpOwogCiAgICAgICAgIC8vIE5v
dGlmaWNhdGlvbiB0aGF0IHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgaGFzIGNoYW5nZWQuIFRoaXMg
ZnVuY3Rpb24KICAgICAgICAgLy8gd2lsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSwgc28gaGFuZGxp
bmcgc2hvdWxkIGJlIHZlcnkgZmFzdC4KSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzI3MikKKysrIFdlYktp
dC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDct
MTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQyMjMyCisgICAgICAgIE1ha2UgY2hhbmdpbmcgQ3Vyc29ycyB3
b3JrIGluIFdlYktpdDIuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAg
ICAgIChXZWJDaHJvbWVDbGllbnQ6OnNldEN1cnNvcik6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICBJbXBsZW1lbnQgY3Vyc29yIGNoYW5naW5nIGF0IHRoZSBXZWJLaXQg
bGV2ZWwgZm9yIHRoZSBzYWtlIG9mIFdlYktpdDIuCisgICAgICAgIFRoaXMgZnVuY3Rpb25hbGl0
eSBpcyBiZWluZyBtb3ZlZCBmcm9tIFdpZGdldE1hYy5tbS4KKyAgICAgICAgKCtbV2ViVmlldyBf
cG9pbnRpbmdIYW5kQ3Vyc29yXSk6CisgICAgICAgIFVwZGF0ZSB0byB1c2UgcGxhdGZvcm1DdXJz
b3IoKSBpbnN0ZWFkIG9mIGltcGwoKS4KKwogMjAxMC0wNy0xMyAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggVGlnZXIgYnVpbGQuCkluZGV4OiBX
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDYz
MTAyKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cnVuT3BlblBhbmVsKFdlYkNvcmU6OkZyYW1lKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hv
b3Nlcj4pOwogICAgIHZpcnR1YWwgdm9pZCBjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlN0cmluZz4mLCBXZWJDb3JlOjpGaWxlQ2hvb3NlciopOwogCi0gICAgdmlydHVh
bCBib29sIHNldEN1cnNvcihXZWJDb3JlOjpQbGF0Zm9ybUN1cnNvckhhbmRsZSkgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNv
ciYpOwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY3VzdG9tSGlnaGxpZ2h0UmVj
dChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV2ViQ29yZTo6QXRvbWljU3RyaW5nJiB0eXBlLAogICAg
ICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGxpbmVSZWN0KTsKSW5kZXg6IFdlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCShyZXZpc2lvbiA2MzEwMikK
KysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvQmxvY2tFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0NvbnNvbGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmlsZUNob29zZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CkBAIC02NTksNiArNjYwLDE0IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpjaG9vc2VJY29uRm9yRmlsZXMKICAgICBjaG9vc2VyLT5pY29uTG9hZGVkKEljb246OmNy
ZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBOU0N1cnNv
ciAqcGxhdGZvcm1DdXJzb3IgPSBjdXJzb3IucGxhdGZvcm1DdXJzb3IoKTsKKyAgICBpZiAoW05T
Q3Vyc29yIGN1cnJlbnRDdXJzb3JdID09IHBsYXRmb3JtQ3Vyc29yKQorICAgICAgICByZXR1cm47
CisgICAgW3BsYXRmb3JtQ3Vyc29yIHNldF07Cit9CisKIEtleWJvYXJkVUlNb2RlIFdlYkNocm9t
ZUNsaWVudDo6a2V5Ym9hcmRVSU1vZGUoKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA2MzEwMikKKysrIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMjE5LDcgKzIyMTks
NyBAQCAtICh2b2lkKV9zZXRKYXZhU2NyaXB0VVJMc0FyZUFsbG93ZWQ6KEJPCiAKICsgKE5TQ3Vy
c29yICopX3BvaW50aW5nSGFuZEN1cnNvcgogewotICAgIHJldHVybiBoYW5kQ3Vyc29yKCkuaW1w
bCgpOworICAgIHJldHVybiBoYW5kQ3Vyc29yKCkucGxhdGZvcm1DdXJzb3IoKTsKIH0KIAogLSAo
Qk9PTClfcG9zdHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nTm90aWZpY2F0aW9ucwpJbmRleDogV2Vi
S2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MzI3MikKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNSBAQAorMjAxMC0wNy0xMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAgICAgICAgTWFr
ZSBjaGFuZ2luZyBDdXJzb3JzIHdvcmsgaW4gV2ViS2l0Mi4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVu
dFF0OjpzZXRDdXJzb3IpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0
Lmg6CisgICAgICAgIENoYW5nZSBwcm90b3R5cGUgdG8gbWF0Y2ggbmV3IG9uZS4KKwogMjAxMC0w
Ny0wNyAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI5
LDEwICs1MjksOSBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpjaG9vc2VJY29uRm9yRmlsZXMoCiAg
ICAgY2hvb3Nlci0+aWNvbkxvYWRlZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVz
KSk7CiB9CiAKLWJvb2wgQ2hyb21lQ2xpZW50UXQ6OnNldEN1cnNvcihQbGF0Zm9ybUN1cnNvckhh
bmRsZSkKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIENocm9t
ZUNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZy
YW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
SFRNTFBhcnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIHsgcmV0dXJuIDA7IH0K
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKTsKIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2Nyb2xsUmVjdEludG9WaWV3KGNvbnN0IEludFJlY3QmLCBjb25zdCBT
Y3JvbGxWaWV3KikgY29uc3Qge30KIApJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMjcyKQorKysgV2ViS2l0
L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0wNy0x
MyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhdGNoIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMzIKKyAgICAgICAgTWFrZSBjaGFuZ2luZyBDdXJzb3JzIHdv
cmsgaW4gV2ViS2l0Mi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnNldEN1cnNvcik6CisgICAgICAgIFdl
IG5vdyBuZWVkIHRvIGdyYWIgdGhlIG5hdGl2ZSBjdXJzb3Igb3V0IG9mIHRoZSBXZWJDb3JlIGN1
cnNvci4KKworICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzZXRMYXN0U2V0Q3Vyc29yVG9DdXJy
ZW50Q3Vyc29yKToKKyAgICAgICAgU2V0cyB0aGUgV2ViVmlldydzICJsYXN0IHNldCBjdXJzb3Ii
IHRvIGJlIHRoZSBjdXJyZW50IGN1cnNvciBzbyB0aGF0CisgICAgICAgIHRoZSBjdXJzb3IgaXMg
c2V0IGNvcnJlY3RseSBmb3IgcGx1Z2lucy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6
OldlYlZpZXcpOgorICAgICAgICAoV2ViVmlldzo6V2ViVmlld1duZFByb2MpOgorICAgICAgICAq
IFdlYlZpZXcuaDoKKyAgICAgICAgKFdlYlZpZXc6OnNldExhc3RDdXJzb3IpOgorICAgICAgICBD
aGFuZ2UgdGhlICJsYXN0IHNldCBjdXJzb3IiIHRvIGJlIHN0b3JlZCBhcyBhIG1lbWJlciBpbnN0
ZWFkIG9mIGEgZ2xvYmFsLgorCiAyMDEwLTA3LTEzICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtl
bkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBidWlsZCBmaXguCkluZGV4OiBXZWJLaXQv
d2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDYzMTAyKQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQ0LDYgKzM0NCw3IEBAIFdlYlZpZXc6OldlYlZpZXcoKQogICAgICwgbV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fbmV4dERpc3BsYXlJc1N5bmNo
cm9ub3VzKGZhbHNlKQorICAgICwgbV9sYXN0U2V0Q3Vyc29yKDApCiB7CiAgICAgSlNDOjppbml0
aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwpAQCAt
MTk3MiwxMCArMTk3Myw2IEBAIGJvb2wgV2ViVmlldzo6cmVnaXN0ZXJXZWJWaWV3V2luZG93Q2xh
c3MKICAgICByZXR1cm4gISFSZWdpc3RlckNsYXNzRXgoJndjZXgpOwogfQogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgZXh0ZXJuIEhDVVJTT1IgbGFzdFNldEN1cnNvcjsKLX0KLQogc3RhdGlj
IEhXTkQgZmluZFRvcExldmVsUGFyZW50KEhXTkQgd2luZG93KQogewogICAgIGlmICghd2luZG93
KQpAQCAtMjI1MCwxMCArMjI0Nyw4IEBAIExSRVNVTFQgQ0FMTEJBQ0sgV2ViVmlldzo6V2ViVmll
d1duZFByb2MKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFdNX1NFVENVUlNPUjoKLSAgICAgICAgICAgIGlmIChoYW5kbGVkID0gd2ViVmlldy0+cGFnZSgp
LT5jaHJvbWUoKS0+c2V0Q3Vyc29yKGxhc3RTZXRDdXJzb3IpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgaGFuZGxlZCA9
IDo6U2V0Q3Vyc29yKHdlYlZpZXctPm1fbGFzdFNldEN1cnNvcik7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBXTV9WU0NST0xMOgogICAgICAgICAgICAgaGFuZGxlZCA9IHdlYlZp
ZXctPnZlcnRpY2FsU2Nyb2xsKHdQYXJhbSwgbFBhcmFtKTsKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJW
aWV3LmgJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkwMyw2ICs5MDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbnRlckZ1bGxzY3Jl
ZW5Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUqKTsKICAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7CiAK
KyAgICB2b2lkIHNldExhc3RDdXJzb3IoSENVUlNPUiBjdXJzb3IpIHsgbV9sYXN0U2V0Q3Vyc29y
ID0gY3Vyc29yOyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRab29tTXVsdGlwbGllcihmbG9h
dCBtdWx0aXBsaWVyLCBib29sIGlzVGV4dE9ubHkpOwogICAgIGZsb2F0IHpvb21NdWx0aXBsaWVy
KGJvb2wgaXNUZXh0T25seSk7CkBAIC0xMDQyLDYgKzEwNDQsOCBAQCBwcm90ZWN0ZWQ6CiAjZW5k
aWYKIAogICAgIGJvb2wgbV9uZXh0RGlzcGxheUlzU3luY2hyb25vdXM7CisKKyAgICBIQ1VSU09S
IG1fbGFzdFNldEN1cnNvcjsKIH07CiAKICNlbmRpZgpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4MiwyMSArNzgyLDI4IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpjaG9vc2VJY29uRm9y
RmlsZXMKICAgICBjaG9vc2VyLT5pY29uTG9hZGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhm
aWxlbmFtZXMpKTsKIH0KIAotYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihQbGF0Zm9y
bUN1cnNvckhhbmRsZSBjdXJzb3IpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNv
bnN0IEN1cnNvciYgY3Vyc29yKQogewotICAgIGlmICghY3Vyc29yKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgSENVUlNPUiBwbGF0Zm9ybUN1cnNvciA9IGN1cnNvci5wbGF0Zm9ybUN1cnNv
cigpLT5uYXRpdmVDdXJzb3IoKTsKKyAgICBpZiAoIXBsYXRmb3JtQ3Vyc29yKQorICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoQ09NUHRyPElXZWJVSURlbGVnYXRlPiBkZWxlZ2F0ZSA9IHVpRGVs
ZWdhdGUoKSkgewogICAgICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGVQcml2YXRlPiBkZWxlZ2F0
ZVByaXZhdGUoUXVlcnksIGRlbGVnYXRlKTsKICAgICAgICAgaWYgKGRlbGVnYXRlUHJpdmF0ZSkg
ewotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChkZWxlZ2F0ZVByaXZhdGUtPndlYlZpZXdTZXRD
dXJzb3IobV93ZWJWaWV3LCByZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KGN1cnNvcikpKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQo
ZGVsZWdhdGVQcml2YXRlLT53ZWJWaWV3U2V0Q3Vyc29yKG1fd2ViVmlldywgcmVpbnRlcnByZXRf
Y2FzdDxPTEVfSEFORExFPihwbGF0Zm9ybUN1cnNvcikpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICA6OlNldEN1cnNvcihjdXJzb3IpOwotICAgIHJl
dHVybiB0cnVlOworICAgIG1fd2ViVmlldy0+c2V0TGFzdEN1cnNvcihwbGF0Zm9ybUN1cnNvcik7
CisgICAgOjpTZXRDdXJzb3IocGxhdGZvcm1DdXJzb3IpOworICAgIHJldHVybjsKK30KKwordm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OnNldExhc3RTZXRDdXJzb3JUb0N1cnJlbnRDdXJzb3IoKQorewor
ICAgIG1fd2ViVmlldy0+c2V0TGFzdEN1cnNvcig6OkdldEN1cnNvcigpKTsKIH0KIAogdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFt
ZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKSW5kZXg6IFdlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzAsNyArMTMwLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBydW5PcGVuUGFuZWwo
V2ViQ29yZTo6RnJhbWUqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPik7CiAgICAg
dmlydHVhbCB2b2lkIGNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6U3Ry
aW5nPiYsIFdlYkNvcmU6OkZpbGVDaG9vc2VyKik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2V0Q3Vy
c29yKFdlYkNvcmU6OlBsYXRmb3JtQ3Vyc29ySGFuZGxlIGN1cnNvcik7CisgICAgdmlydHVhbCB2
b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TGFzdFNldEN1cnNvclRvQ3VycmVudEN1cnNvcigpOwogCiAgICAgV2ViVmlldyogd2ViVmll
dygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQogCkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMjcyKQor
KysgV2ViS2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTA3LTEzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGF0Y2ggZm9yIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjIzMgorICAgICAgICBNYWtlIGNoYW5naW5nIEN1
cnNvcnMgd29yayBpbiBXZWJLaXQyLgorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJvbWVD
bGllbnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRXeDo6c2V0Q3Vyc29y
KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4Lmg6CisgICAgICAgIENo
YW5nZSBwcm90b3R5cGUgdG8gbWF0Y2ggbmV3IG9uZS4KKwogMjAxMC0wNy0wNyAgS2V2aW4gT2xs
aXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBbd3hdIEJ1aWxkIGZp
eCBhZnRlciBjaGFuZ2UgaW4gUGFnZSBjb25zdHJ1Y3Rvci4KSW5kZXg6IFdlYktpdC93eC9XZWJL
aXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2Vi
S2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHJldmlzaW9uIDYzMTAyKQorKysgV2ViS2l0
L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NDcsMTAgKzQ0Nyw5IEBAIHZvaWQgQ2hyb21lQ2xpZW50V3g6OmNob29zZUljb25Gb3JGaWxlcygK
ICAgICBjaG9vc2VyLT5pY29uTG9hZGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFt
ZXMpKTsKIH0KIAotYm9vbCBDaHJvbWVDbGllbnRXeDo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29y
SGFuZGxlKQordm9pZCBDaHJvbWVDbGllbnRXeDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgQ2hy
b21lQ2xpZW50V3g6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSos
IEdlb2xvY2F0aW9uKikKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVu
dFd4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50
V3guaAkocmV2aXNpb24gNjMxMDIpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVD
bGllbnRXeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBQYXNzT3duUHRyPEhUTUxQYXJzZXJRdWlya3M+IGNyZWF0ZUhUTUxQYXJzZXJR
dWlya3MoKSB7IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2V0Q3Vyc29yKFBsYXRm
b3JtQ3Vyc29ySGFuZGxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNv
ciYpOwogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0
JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAK
</data>
<flag name="review"
          id="49573"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>