<?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>73388</bug_id>
          
          <creation_ts>2011-11-29 19:48:00 -0800</creation_ts>
          <short_desc>Upstream the BlackBerry porting of network Resource</short_desc>
          <delta_ts>2011-12-08 18:57:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Leo Yang">leo.yang</reporter>
          <assigned_to name="Leo Yang">leo.yang</assigned_to>
          <cc>charles.wei</cc>
    
    <cc>dbates</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>staikos</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>511316</commentid>
    <comment_count>0</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-11-29 19:48:00 -0800</bug_when>
    <thetext>This is to upstream the BlackBerry implement of network resource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511322</commentid>
    <comment_count>1</comment_count>
      <attachid>117102</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-11-29 20:15:24 -0800</bug_when>
    <thetext>Created attachment 117102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512071</commentid>
    <comment_count>2</comment_count>
      <attachid>117102</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-30 13:27:56 -0800</bug_when>
    <thetext>Comment on attachment 117102
Patch

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

&gt; Source/WebCore/platform/network/blackberry/ResourceErrorBlackBerry.cpp:25
&gt; +const char* ResourceError::platformErrorDomain = &quot;BlackBerryPlatform&quot;;

These should probably be const char* const to make the actual pointer const, too, and avoid unnecessary relocations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512325</commentid>
    <comment_count>3</comment_count>
      <attachid>117308</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-11-30 18:47:14 -0800</bug_when>
    <thetext>Created attachment 117308
Patch

Following Simon&apos;s comment. Thanks Simon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515728</commentid>
    <comment_count>4</comment_count>
      <attachid>118006</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-06 01:21:03 -0800</bug_when>
    <thetext>Created attachment 118006
Patch v2

Updated from the internal fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516947</commentid>
    <comment_count>5</comment_count>
      <attachid>118006</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-12-07 15:25:19 -0800</bug_when>
    <thetext>Comment on attachment 118006
Patch v2

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

Looking quite good, can be improved a bit, so r- for now.

&gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:47
&gt; +    virtual void didFinishLoading(ResourceHandle*, double /*finishTime*/);

Why put finishTime in a comment?

&gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:148
&gt; +        ASSERT(false &amp;&amp; &quot;loadResourceSynchronously called with invalid networking context&quot;);

Is this correct? Seems uncommon.

&gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:155
&gt; +        ASSERT(false &amp;&amp; &quot;loadResourceSynchronously called without a frame or frame client&quot;);

Ditto.

&gt; Source/WebCore/platform/network/blackberry/ResourceRequest.h:89
&gt; +    // marks requests which must be handled by webkit, even if LinksHandledExternally is set

Make this a sentence.

&gt; Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp:88
&gt; +    // if this is the initial load, skip the request body and headers

Ditto.

&gt; Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp:100
&gt; +            // use setData for simple forms because it is slightly more efficient

Ditto.

&gt; Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp:123
&gt; +        {

Brace should go on same line as the for loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517031</commentid>
    <comment_count>6</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-07 17:45:59 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 118006 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118006&amp;action=review
&gt; 
&gt; Looking quite good, can be improved a bit, so r- for now.
&gt; 
&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:47
&gt; &gt; +    virtual void didFinishLoading(ResourceHandle*, double /*finishTime*/);
&gt; 
&gt; Why put finishTime in a comment?
&gt; 
Will remove the comment.

&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:148
&gt; &gt; +        ASSERT(false &amp;&amp; &quot;loadResourceSynchronously called with invalid networking context&quot;);
&gt; 
&gt; Is this correct? Seems uncommon.
Yes. Actually it&apos;s same as ASSERT(false) except that it will print the useful information when the ASSERT reaches.

&gt; 
&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:155
&gt; &gt; +        ASSERT(false &amp;&amp; &quot;loadResourceSynchronously called without a frame or frame client&quot;);
&gt; 
&gt; Ditto.
Ditto.

&gt; 
&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceRequest.h:89
&gt; &gt; +    // marks requests which must be handled by webkit, even if LinksHandledExternally is set
&gt; 
&gt; Make this a sentence.
OK.

&gt; 
&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp:88
&gt; &gt; +    // if this is the initial load, skip the request body and headers
&gt; 
&gt; Ditto.
OK.

&gt; 
&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp:100
&gt; &gt; +            // use setData for simple forms because it is slightly more efficient
&gt; 
&gt; Ditto.
OK.

&gt; 
&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp:123
&gt; &gt; +        {
&gt; 
&gt; Brace should go on same line as the for loop.
OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517078</commentid>
    <comment_count>7</comment_count>
      <attachid>118302</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-07 18:26:24 -0800</bug_when>
    <thetext>Created attachment 118302
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517090</commentid>
    <comment_count>8</comment_count>
      <attachid>118302</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-12-07 18:35:24 -0800</bug_when>
    <thetext>Comment on attachment 118302
Patch v3

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

Some nits.... Mainly empty space related.

&gt; Source/WebCore/platform/network/blackberry/ResourceError.h:28
&gt; +

Why empty line?

&gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:190
&gt; +WTF::PassRefPtr&lt;SharedBuffer&gt; ResourceHandle::bufferedData()

Is WTF needed?

&gt; Source/WebCore/platform/network/blackberry/ResourceRequest.h:113
&gt; +

Why empty line?

&gt; Source/WebCore/platform/network/blackberry/ResourceResponse.h:47
&gt; +    bool isMultipartPayload() const { return m_isMultipartPayload; }

Why not an empty line here?

&gt; Source/WebCore/platform/network/blackberry/ResourceResponse.h:51
&gt; +

Why empty line?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517095</commentid>
    <comment_count>9</comment_count>
      <attachid>118306</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-07 18:48:36 -0800</bug_when>
    <thetext>Created attachment 118306
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517105</commentid>
    <comment_count>10</comment_count>
      <attachid>118306</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-12-07 18:58:54 -0800</bug_when>
    <thetext>Comment on attachment 118306
Patch v4

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

Some nits, but you cant fix them before landing. r+

&gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:46
&gt; +    virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);

Didn&apos;t see this before, but lengthReceived is not needed.

&gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:172
&gt; +    static const double s_syncLoadTimeOut = 60.0; // seconds

60.0 -&gt; 60.
Also s_syncLoadTimeOut is a bit weird. It looks like a global constant but is just used in this function. Should it use DEFINE_STATIC_LOCAL? Maybe look at similar code like this in WebCore/, but no blocker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517106</commentid>
    <comment_count>11</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-12-07 19:02:51 -0800</bug_when>
    <thetext>Typo, I meant of course &quot;you *can* fix them before landing&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517110</commentid>
    <comment_count>12</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-07 19:09:00 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 118306 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118306&amp;action=review
&gt; 
&gt; Some nits, but you cant fix them before landing. r+
&gt; 
&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:46
&gt; &gt; +    virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
&gt; 
&gt; Didn&apos;t see this before, but lengthReceived is not needed.
Will fix before landing.

&gt; 
&gt; &gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:172
&gt; &gt; +    static const double s_syncLoadTimeOut = 60.0; // seconds
&gt; 
&gt; 60.0 -&gt; 60.
&gt; Also s_syncLoadTimeOut is a bit weird. It looks like a global constant but is just used in this function. Should it use DEFINE_STATIC_LOCAL? Maybe look at similar code like this in WebCore/, but no blocker.
Actually static is not needed, will remove static and change 60.0 to 60 before landing. 

Thanks for your review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517123</commentid>
    <comment_count>13</comment_count>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-07 19:38:47 -0800</bug_when>
    <thetext>Committed r102303: &lt;http://trac.webkit.org/changeset/102303&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517239</commentid>
    <comment_count>14</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-08 00:36:35 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 118306 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118306&amp;action=review
&gt; &gt; 
&gt; &gt; Some nits, but you cant fix them before landing. r+
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:46
&gt; &gt; &gt; +    virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
&gt; &gt; 
&gt; &gt; Didn&apos;t see this before, but lengthReceived is not needed.
&gt; Will fix before landing.

Just for the record: this is a place where names are actually helpful for _both_ integers. Can you tell what they would mean w/o looking at the cpp file? Same for the const char*.

We only leave it out, if it doesn&apos;t help. eg. void setFontStyle(FontStyle);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518028</commentid>
    <comment_count>15</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-12-08 18:57:36 -0800</bug_when>
    <thetext>Hi Niko,

(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; (From update of attachment 118306 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118306&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Some nits, but you cant fix them before landing. r+
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/network/blackberry/ResourceHandleBlackBerry.cpp:46
&gt; &gt; &gt; &gt; +    virtual void didReceiveData(ResourceHandle*, const char*, int, int lengthReceived);
&gt; &gt; &gt; 
&gt; &gt; &gt; Didn&apos;t see this before, but lengthReceived is not needed.
&gt; &gt; Will fix before landing.
&gt; 
&gt; Just for the record: this is a place where names are actually helpful for _both_ integers. Can you tell what they would mean w/o looking at the cpp file? Same for the const char*.
&gt; 
&gt; We only leave it out, if it doesn&apos;t help. eg. void setFontStyle(FontStyle);

Good point! Will be more careful in future.
Cheers,

Rob.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117102</attachid>
            <date>2011-11-29 20:15:24 -0800</date>
            <delta_ts>2011-11-30 18:47:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Upstream-the-BlackBerry-porting-of-network-Resource.patch</filename>
            <type>text/plain</type>
            <size>28859</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSA2MmNhNWMwZjAzMmEzYmU2YjZjODI5M2Y0MmZlNWY2ZTU4ZWUxNDgyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBXZWQsIDMwIE5vdiAyMDExIDEyOjEyOjUzICswODAwClN1YmplY3Q6IFtQQVRDSF0g
VXBzdHJlYW0gdGhlIEJsYWNrQmVycnkgcG9ydGluZyBvZiBuZXR3b3JrIFJlc291cmNlCiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzODgKClJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKT3RoZXIgbWFpbiBjb250cmlidXRvcnM6CkpvZSBNYXNvbiA8am1hc29u
QHJpbS5jb20+CllvbmcgTGkgIDx5b2xpQHJpbS5jb20+CkdhcnkgU2ltbW9ucyAgPGdzaW1tb25z
QHJpbS5jb20+CkdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNvbT4KQ2hyaXMgR3VhbiA8Y2hyaXMu
Z3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Ck1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5j
b20+CgpJbml0aWFsIHVwc3RyZWFtLCBjYW4ndCBiZSBidWlsdCB5ZXQsIG5vIG5ldyB0ZXN0cy4K
CiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaDogQWRkZWQuCiog
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5LmNwcDog
QWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tC
ZXJyeS5jcHA6IEFkZGVkLgoqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
cXVlc3QuaDogQWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVx
dWVzdEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZS5oOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwOiBBZGRlZC4KLS0tCiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKysrCiAuLi4vcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaCAgICB8ICAgNDQgKysrKysK
IC4uLi9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNrQmVycnkuY3BwIHwgICAy
NyArKysKIC4uLi9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAgICAgICAg
IHwgIDE5NiArKysrKysrKysrKysrKysrKysrKwogLi4uL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlcXVlc3QuaCAgfCAgMTI3ICsrKysrKysrKysrKysKIC4uLi9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwICAgICAgIHwgIDE1NSArKysrKysrKysr
KysrKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2Uu
aCB8ICAgNjAgKysrKysrCiAuLi4vYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJy
eS5jcHAgICAgICB8ICAgMzUgKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA2NjkgaW5zZXJ0aW9ucygr
KSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJy
b3JCbGFja0JlcnJ5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVzcG9uc2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5j
cHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggNTljOTA4Zi4uZWY4ZjdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDMwIEBACiAyMDExLTExLTI5ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5j
bj4KIAorICAgICAgICBVcHN0cmVhbSB0aGUgQmxhY2tCZXJyeSBwb3J0aW5nIG9mIG5ldHdvcmsg
UmVzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTczMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
T3RoZXIgbWFpbiBjb250cmlidXRvcnM6CisgICAgICAgIEpvZSBNYXNvbiA8am1hc29uQHJpbS5j
b20+CisgICAgICAgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisgICAgICAgIEdhcnkgU2ltbW9u
cyAgPGdzaW1tb25zQHJpbS5jb20+CisgICAgICAgIEdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNv
bT4KKyAgICAgICAgQ2hyaXMgR3VhbiA8Y2hyaXMuZ3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Cisg
ICAgICAgIE1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5jb20+CisKKyAgICAgICAgSW5p
dGlhbCB1cHN0cmVhbSwgY2FuJ3QgYmUgYnVpbHQgeWV0LCBubyBuZXcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNr
QmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
c3BvbnNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorCisyMDExLTExLTI5ICBMZW8g
WWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5jbj4KKwogICAgICAgICBVcHN0cmVhbSBw
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUHJveHlTZXJ2ZXJCbGFja0JlcnJ5LmNwcAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyODgKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291
cmNlRXJyb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZUVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlZDMy
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9SZXNvdXJjZUVycm9yLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFJlc291cmNlRXJyb3JfaAorI2RlZmlu
ZSBSZXNvdXJjZUVycm9yX2gKKworI2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJj
ZUVycm9yQmFzZSB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaHR0cEVycm9y
RG9tYWluOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwbGF0Zm9ybUVycm9yRG9tYWluOworCisg
ICAgUmVzb3VyY2VFcnJvcigpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlRXJyb3IoY29u
c3QgU3RyaW5nJiBkb21haW4sIGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZmFpbGluZ1VS
TCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbikKKyAgICAgICAgOiBSZXNvdXJj
ZUVycm9yQmFzZShkb21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3Jp
cHRpb24pCisgICAgeworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFJlc291cmNlRXJyb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUVycm9yQmxhY2tC
ZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzODEzOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJy
eS9SZXNvdXJjZUVycm9yQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VFcnJvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNo
YXIqIFJlc291cmNlRXJyb3I6Omh0dHBFcnJvckRvbWFpbiA9ICJIVFRQIjsKK2NvbnN0IGNoYXIq
IFJlc291cmNlRXJyb3I6OnBsYXRmb3JtRXJyb3JEb21haW4gPSAiQmxhY2tCZXJyeVBsYXRmb3Jt
IjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VIYW5k
bGVCbGFja0JlcnJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmUz
OTFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSwxOTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisKKyNpbmNsdWRlICJFdmVu
dExvb3AuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
QmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgIk5ldHdvcmtNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgor
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVy
LmgiIC8vIGZvciBTdG9yZWRDcmVkZW50aWFscworCisjaW5jbHVkZSA8bmV0d29yay9GaWx0ZXJT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJDb3JlU3luY2hyb25v
dXNMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworcHVibGljOgorICAgIFdl
YkNvcmVTeW5jaHJvbm91c0xvYWRlcigpOworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwg
aW50LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKwor
ICAgIFJlc291cmNlUmVzcG9uc2UgcmVzb3VyY2VSZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzcG9uc2U7IH0KKyAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoKSBjb25zdCB7IHJl
dHVybiBtX2Vycm9yOyB9CisgICAgVmVjdG9yPGNoYXI+IGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGE7IH0KKyAgICBib29sIGlzRG9uZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEb25lOyB9CisK
K3ByaXZhdGU6CisgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFJlc291cmNl
RXJyb3IgbV9lcnJvcjsKKyAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOworICAgIGJvb2wgbV9pc0Rv
bmU7Cit9OworCitXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OldlYkNvcmVTeW5jaHJvbm91c0xv
YWRlcigpCisgICAgOiBtX2lzRG9uZShmYWxzZSkKK3sKK30KKwordm9pZCBXZWJDb3JlU3luY2hy
b25vdXNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsK
K30KKwordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50KQoreworICAgIG1f
ZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpCit7CisgICAg
bV9pc0RvbmUgPSB0cnVlOworfQorCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlk
RmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAg
IG1fZXJyb3IgPSBlcnJvcjsKKyAgICBtX2lzRG9uZSA9IHRydWU7Cit9CisKK1Jlc291cmNlSGFu
ZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnNMb2Fk
aW5nKQoreworICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5zZXREZWZlcnNMb2FkaW5n
KHRoaXMsIGRlZmVyc0xvYWRpbmcpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRl
eHQtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IGNs
ZWFuIHVwIHVzZSBvZiBGcmFtZSBub3cgdGhhdCB3ZSBoYXZlIE5ldHdvcmtpbmdDb250ZXh0IChz
ZWUgUklNIEJ1ZyAjMTUxNSkKKyAgICBGcmFtZSogZnJhbWUgPSBjb250ZXh0LT53cmFwcGVkRnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+bG9hZGVyKCkgfHwgIWZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCkgfHwgIWNsaWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aW50IHBsYXllcklkID0gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4o
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPnBsYXllcklkKCk7CisgICAgcmV0dXJuIE5ldHdv
cmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5zdGFydEpvYihwbGF5ZXJJZCwgdGhpcywgKmZyYW1lLCBk
LT5tX2RlZmVyc0xvYWRpbmcpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1
ZmZlcmVkRGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBhdXNlTG9hZChib29sIHBhdXNlKQoreworICAg
IGlmIChOZXR3b3JrTWFuYWdlcjo6aW5zdGFuY2UoKSkKKyAgICAgICAgTmV0d29ya01hbmFnZXI6
Omluc3RhbmNlKCktPnBhdXNlTG9hZCh0aGlzLCBwYXVzZSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VI
YW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZXNvdXJj
ZUhhbmRsZTo6Y2FuY2VsKCkKK3sKKyAgICBOZXR3b3JrTWFuYWdlcjo6aW5zdGFuY2UoKS0+c3Rv
cEpvYih0aGlzKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgaWYgKCFj
b250ZXh0IHx8ICFjb250ZXh0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlICYm
ICJsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5IGNhbGxlZCB3aXRoIGludmFsaWQgbmV0d29ya2lu
ZyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogY2xl
YW4gdXAgdXNlIG9mIEZyYW1lIG5vdyB0aGF0IHdlIGhhdmUgTmV0d29ya2luZ0NvbnRleHQgKHNl
ZSBSSU0gQnVnICMxNTE1KQorICAgIEZyYW1lKiBmcmFtZSA9IGNvbnRleHQtPndyYXBwZWRGcmFt
ZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5sb2FkZXIoKSB8fCAhZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKSB8fCAhZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICBBU1NFUlQoZmFsc2Ug
JiYgImxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkgY2FsbGVkIHdpdGhvdXQgYSBmcmFtZSBvciBm
cmFtZSBjbGllbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBhZ2VHcm91cExv
YWREZWZlcnJlciBkZWZlcnJlcihmcmFtZS0+cGFnZSgpLCB0cnVlKTsKKyAgICBUaW1lckJhc2U6
OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworCisgICAgaW50IHBsYXllcklkID0gc3Rh
dGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKSktPnBsYXllcklkKCk7CisKKyAgICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgc3lu
Y0xvYWRlcjsKKworICAgIGJvb2wgZGVmZXJzTG9hZGluZyA9IGZhbHNlOworICAgIGJvb2wgc2hv
dWxkQ29udGVudFNuaWZmID0gZmFsc2U7CisKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhh
bmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCAmc3luY0xvYWRlciwg
ZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSk7CisgICAgTmV0d29ya01hbmFnZXI6
Omluc3RhbmNlKCktPnN0YXJ0Sm9iKHBsYXllcklkLCBoYW5kbGUsICpmcmFtZSwgZGVmZXJzTG9h
ZGluZyk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfc3luY0xvYWRUaW1lT3V0ID0gNjAu
MDsgLy8gc2Vjb25kcworCisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7Cisg
ICAgRXZlbnRMb29wIGxvb3A7CisgICAgd2hpbGUgKCFzeW5jTG9hZGVyLmlzRG9uZSgpICYmICFs
b29wLmVuZGVkKCkpIHsKKyAgICAgICAgbG9vcC5jeWNsZSgpOworICAgICAgICBpZiAoY3VycmVu
dFRpbWUoKSAtIHN0YXJ0VGltZSA+IHNfc3luY0xvYWRUaW1lT3V0KSB7CisgICAgICAgICAgICBo
YW5kbGUtPmNhbmNlbCgpOworICAgICAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKFJlc291
cmNlRXJyb3I6OnBsYXRmb3JtRXJyb3JEb21haW4sIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0
ZXJTdHJlYW06OlN0YXR1c05ldHdvcmtFcnJvciwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgIlRp
bWUgb3V0Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBl
cnJvciA9IHN5bmNMb2FkZXIucmVzb3VyY2VFcnJvcigpOworICAgIGRhdGEgPSBzeW5jTG9hZGVy
LmRhdGEoKTsKKyAgICByZXNwb25zZSA9IHN5bmNMb2FkZXIucmVzb3VyY2VSZXNwb25zZSgpOwor
fQorCitXVEY6OlBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBSZXNvdXJjZUhhbmRsZTo6YnVmZmVy
ZWREYXRhKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmZTFlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3QuaApA
QCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaWZuZGVmIFJlc291cmNlUmVxdWVzdF9oCisjZGVmaW5lIFJlc291cmNlUmVxdWVz
dF9oCisKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3RCYXNlLmgiCisKK25hbWVzcGFjZSBCbGFj
a0JlcnJ5IHsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7CitjbGFzcyBOZXR3b3JrUmVxdWVzdDsKK30K
K30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZVJlcXVlc3QgOiBwdWJs
aWMgUmVzb3VyY2VSZXF1ZXN0QmFzZSB7CitwdWJsaWM6CisgICAgUmVzb3VyY2VSZXF1ZXN0KGNv
bnN0IFN0cmluZyYgdXJsKQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIHVybCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICwgbV9p
c1hNTEhUVFBSZXF1ZXN0KGZhbHNlKQorICAgICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHko
ZmFsc2UpCisgICAgICAgICwgbV9pc1JlcXVlc3RlZEJ5UGx1Z2luKGZhbHNlKQorICAgICAgICAs
IG1fZm9yY2VEb3dubG9hZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1
ZXN0KGNvbnN0IEtVUkwmIHVybCkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwg
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgLCBtX2lzWE1MSFRUUFJlcXVlc3QoZmFs
c2UpCisgICAgICAgICwgbV9tdXN0SGFuZGxlSW50ZXJuYWxseShmYWxzZSkKKyAgICAgICAgLCBt
X2lzUmVxdWVzdGVkQnlQbHVnaW4oZmFsc2UpCisgICAgICAgICwgbV9mb3JjZURvd25sb2FkKGZh
bHNlKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBwb2xp
Y3kgPSBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJh
c2UodXJsLCBwb2xpY3kpCisgICAgICAgICwgbV9pc1hNTEhUVFBSZXF1ZXN0KGZhbHNlKQorICAg
ICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFsc2UpCisgICAgICAgICwgbV9pc1JlcXVl
c3RlZEJ5UGx1Z2luKGZhbHNlKQorICAgICAgICAsIG1fZm9yY2VEb3dubG9hZChmYWxzZSkKKyAg
ICB7CisgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZlcnJlcik7CisgICAgfQorCisgICAgUmVz
b3VyY2VSZXF1ZXN0KCkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwoKSwgVXNl
UHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgLCBtX2lzWE1MSFRUUFJlcXVlc3QoZmFsc2Up
CisgICAgICAgICwgbV9tdXN0SGFuZGxlSW50ZXJuYWxseShmYWxzZSkKKyAgICAgICAgLCBtX2lz
UmVxdWVzdGVkQnlQbHVnaW4oZmFsc2UpCisgICAgICAgICwgbV9mb3JjZURvd25sb2FkKGZhbHNl
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFRva2VuKGNvbnN0IFN0cmluZyYgdG9rZW4p
IHsgbV90b2tlbiA9IHRva2VuOyB9CisgICAgU3RyaW5nIHRva2VuKCkgY29uc3QgeyByZXR1cm4g
bV90b2tlbjsgfQorCisgICAgLy8gRklYTUU6IEZvciBSSU0gQnVnICM0NTIuIFRoZSBCbGFja0Jl
cnJ5IGFwcGxpY2F0aW9uIHdhbnRzIHRoZSBhbmNob3IgdGV4dCBmb3IgYSBjbGlja2VkIGh5cGVy
bGluayBzbyBhcyB0bworICAgIC8vIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYXMgdG8gd2hl
dGhlciB0byBhbGxvdyB0aGUgbmF2aWdhdGlvbi4gV2Ugc2hvdWxkIG1vdmUgdGhpcyBmdW5jdGlv
bmFsaXR5IGludG8gYQorICAgIC8vIFVJL1BvbGljeSBkZWxlZ2F0ZS4KKyAgICB2b2lkIHNldEFu
Y2hvclRleHQoY29uc3QgU3RyaW5nJiBhbmNob3JUZXh0KSB7IG1fYW5jaG9yVGV4dCA9IGFuY2hv
clRleHQ7IH0KKyAgICBTdHJpbmcgYW5jaG9yVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9y
VGV4dDsgfQorCisgICAgdm9pZCBzZXRPdmVycmlkZUNvbnRlbnRUeXBlKGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpIHsgbV9vdmVycmlkZUNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7IH0KKyAg
ICBTdHJpbmcgb3ZlcnJpZGVDb250ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVD
b250ZW50VHlwZTsgfQorCisgICAgdm9pZCBzZXRJc1hNTEhUVFBSZXF1ZXN0KGJvb2wgaXNYTUxI
VFRQUmVxdWVzdCkgeyBtX2lzWE1MSFRUUFJlcXVlc3QgPSBpc1hNTEhUVFBSZXF1ZXN0OyB9Cisg
ICAgYm9vbCBpc1hNTEhUVFBSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1hNTEhUVFBSZXF1
ZXN0OyB9CisKKyAgICB2b2lkIHNldElzUmVxdWVzdGVkQnlQbHVnaW4oYm9vbCBpc1JlcXVlc3Rl
ZEJ5UGx1Z2luKSB7IG1faXNSZXF1ZXN0ZWRCeVBsdWdpbiA9IGlzUmVxdWVzdGVkQnlQbHVnaW47
IH0KKyAgICBib29sIGlzUmVxdWVzdGVkQnlQbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX2lzUmVx
dWVzdGVkQnlQbHVnaW47IH0KKworICAgIC8vIG1hcmtzIHJlcXVlc3RzIHdoaWNoIG11c3QgYmUg
aGFuZGxlZCBieSB3ZWJraXQsIGV2ZW4gaWYgTGlua3NIYW5kbGVkRXh0ZXJuYWxseSBpcyBzZXQK
KyAgICB2b2lkIHNldE11c3RIYW5kbGVJbnRlcm5hbGx5KGJvb2wgbXVzdEhhbmRsZUludGVybmFs
bHkpIHsgbV9tdXN0SGFuZGxlSW50ZXJuYWxseSA9IG11c3RIYW5kbGVJbnRlcm5hbGx5OyB9Cisg
ICAgYm9vbCBtdXN0SGFuZGxlSW50ZXJuYWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVzdEhhbmRs
ZUludGVybmFsbHk7IH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZVBsYXRmb3JtUmVxdWVzdChCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3QmLCBib29sIGlzSW5pdGlhbCA9IGZhbHNl
KSBjb25zdDsKKyAgICB2b2lkIHNldEZvcmNlRG93bmxvYWQoYm9vbCBmb3JjZURvd25sb2FkKSB7
IG1fZm9yY2VEb3dubG9hZCA9IHRydWU7IH0KKyAgICBib29sIGZvcmNlRG93bmxvYWQoKSBjb25z
dCB7IHJldHVybiBtX2ZvcmNlRG93bmxvYWQ7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0QmFzZTsKKworICAgIFN0cmluZyBtX3Rva2VuOworICAgIFN0cmlu
ZyBtX2FuY2hvclRleHQ7CisgICAgU3RyaW5nIG1fb3ZlcnJpZGVDb250ZW50VHlwZTsKKyAgICBi
b29sIG1faXNYTUxIVFRQUmVxdWVzdDsKKyAgICBib29sIG1fbXVzdEhhbmRsZUludGVybmFsbHk7
CisgICAgYm9vbCBtX2lzUmVxdWVzdGVkQnlQbHVnaW47CisgICAgYm9vbCBtX2ZvcmNlRG93bmxv
YWQ7CisKKyAgICB2b2lkIGRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkgeyB9CisgICAgdm9pZCBk
b1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpIHsgfQorCisgICAgUGFzc093blB0cjxDcm9zc1RocmVh
ZFJlc291cmNlUmVxdWVzdERhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3Nz
VGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4pIGNvbnN0OworICAgIHZvaWQgZG9QbGF0Zm9ybUFk
b3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPik7CisKK307CisK
K3N0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJl
YWRSZXNvdXJjZVJlcXVlc3REYXRhQmFzZSB7CisgICAgU3RyaW5nIG1fdG9rZW47CisgICAgU3Ry
aW5nIG1fYW5jaG9yVGV4dDsKKyAgICBib29sIG1faXNYTUxIVFRQUmVxdWVzdDsKKyAgICBib29s
IG1fbXVzdEhhbmRsZUludGVybmFsbHk7CisgICAgYm9vbCBtX2lzUmVxdWVzdGVkQnlQbHVnaW47
CisgICAgYm9vbCBtX2ZvcmNlRG93bmxvYWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBSZXNvdXJjZVJlcXVlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNl
UmVxdWVzdEJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmVkZWViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSwx
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorCisj
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtQ2xpZW50Lmg+CisjaW5jbHVkZSA8bmV0d29yay9O
ZXR3b3JrUmVxdWVzdC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcg
QmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0OworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3Vuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhv
c3QoKQoreworICAgIHJldHVybiA2OworfQorCitzdGF0aWMgaW5saW5lIE5ldHdvcmtSZXF1ZXN0
OjpDYWNoZVBvbGljeSBwbGF0Zm9ybUNhY2hlUG9saWN5Rm9yUmVxdWVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgc3dpdGNoIChyZXF1ZXN0LmNhY2hlUG9saWN5KCkp
IHsKKyAgICBjYXNlIFdlYkNvcmU6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3k6CisgICAgICAgIHJl
dHVybiBOZXR3b3JrUmVxdWVzdDo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeTsKKyAgICBjYXNlIFdl
YkNvcmU6OlJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhOgorICAgICAgICByZXR1cm4gTmV0d29ya1Jl
cXVlc3Q6OlJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhOworICAgIGNhc2UgV2ViQ29yZTo6UmV0dXJu
Q2FjaGVEYXRhRWxzZUxvYWQ6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6UmV0dXJu
Q2FjaGVEYXRhRWxzZUxvYWQ7CisgICAgY2FzZSBXZWJDb3JlOjpSZXR1cm5DYWNoZURhdGFEb250
TG9hZDoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpSZXR1cm5DYWNoZURhdGFEb250
TG9hZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9saWN5OworICAgIH0K
K30KKworc3RhdGljIGlubGluZSBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0VHlwZSBwbGF0Zm9ybVRh
cmdldFR5cGVGb3JSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAg
ICBpZiAocmVxdWVzdC5pc1hNTEhUVFBSZXF1ZXN0KCkpCisgICAgICAgIHJldHVybiBOZXR3b3Jr
UmVxdWVzdDo6VGFyZ2V0SXNYTUxIVFRQUmVxdWVzdDsKKworICAgIHN3aXRjaCAocmVxdWVzdC50
YXJnZXRUeXBlKCkpIHsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJh
bWU6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJhbWU7Cisg
ICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU3ViZnJhbWU6CisgICAgICAgIHJldHVy
biBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTdWJmcmFtZTsKKyAgICBjYXNlIFJlc291cmNlUmVx
dWVzdDo6VGFyZ2V0SXNTdWJyZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0
OjpUYXJnZXRJc1N1YnJlc291cmNlOworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJ
c1N0eWxlU2hlZXQ6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTdHls
ZVNoZWV0OworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1NjcmlwdDoKKyAgICAg
ICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1NjcmlwdDsKKyAgICBjYXNlIFJlc291
cmNlUmVxdWVzdDo6VGFyZ2V0SXNGb250UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBOZXR3b3Jr
UmVxdWVzdDo6VGFyZ2V0SXNGb250UmVzb3VyY2U7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6
OlRhcmdldElzSW1hZ2U6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNJ
bWFnZTsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNPYmplY3Q6CisgICAgICAg
IHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNPYmplY3Q7CisgICAgY2FzZSBSZXNvdXJj
ZVJlcXVlc3Q6OlRhcmdldElzTWVkaWE6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6
VGFyZ2V0SXNNZWRpYTsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNXb3JrZXI6
CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNXb3JrZXI7CisgICAgY2Fz
ZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU2hhcmVkV29ya2VyOgorICAgICAgICByZXR1cm4g
TmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU2hhcmVkV29ya2VyOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6
OlRhcmdldElzVW5rbm93bjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojppbml0
aWFsaXplUGxhdGZvcm1SZXF1ZXN0KE5ldHdvcmtSZXF1ZXN0JiBwbGF0Zm9ybVJlcXVlc3QsIGJv
b2wgaXNJbml0aWFsKSBjb25zdAoreworICAgIC8vIGlmIHRoaXMgaXMgdGhlIGluaXRpYWwgbG9h
ZCwgc2tpcCB0aGUgcmVxdWVzdCBib2R5IGFuZCBoZWFkZXJzCisgICAgaWYgKGlzSW5pdGlhbCkK
KyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFJlcXVlc3RJbml0aWFsKHRpbWVvdXRJbnRlcnZh
bCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFJlcXVlc3RVcmwo
dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBodHRwTWV0aG9k
KCkubGF0aW4xKCkuZGF0YSgpLAorICAgICAgICAgICAgICAgIHBsYXRmb3JtQ2FjaGVQb2xpY3lG
b3JSZXF1ZXN0KCp0aGlzKSwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybVRhcmdldFR5cGVGb3JS
ZXF1ZXN0KCp0aGlzKSwKKyAgICAgICAgICAgICAgICB0aW1lb3V0SW50ZXJ2YWwoKSk7CisKKyAg
ICAgICAgaWYgKGh0dHBCb2R5KCkgJiYgIWh0dHBCb2R5KCktPmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRzID0gaHR0cEJvZHko
KS0+ZWxlbWVudHMoKTsKKyAgICAgICAgICAgIC8vIHVzZSBzZXREYXRhIGZvciBzaW1wbGUgZm9y
bXMgYmVjYXVzZSBpdCBpcyBzbGlnaHRseSBtb3JlIGVmZmljaWVudAorICAgICAgICAgICAgaWYg
KGVsZW1lbnRzLnNpemUoKSA9PSAxICYmIGVsZW1lbnRzWzBdLm1fdHlwZSA9PSBGb3JtRGF0YUVs
ZW1lbnQ6OmRhdGEpCisgICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldERhdGEoZWxl
bWVudHNbMF0ubV9kYXRhLmRhdGEoKSwgZWxlbWVudHNbMF0ubV9kYXRhLnNpemUoKSk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybURh
dGFFbGVtZW50JiBlbGVtZW50ID0gZWxlbWVudHNbaV07CisgICAgICAgICAgICAgICAgICAgIGlm
IChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCisgICAgICAgICAgICAg
ICAgICAgICAgICBwbGF0Zm9ybVJlcXVlc3QuYWRkTXVsdGlwYXJ0RGF0YShlbGVtZW50Lm1fZGF0
YS5kYXRhKCksIGVsZW1lbnQubV9kYXRhLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybVJlcXVlc3QuYWRkTXVsdGlwYXJ0RmlsZW5h
bWUoZWxlbWVudC5tX2ZpbGVuYW1lLmNoYXJhY3RlcnMoKSwgZWxlbWVudC5tX2ZpbGVuYW1lLmxl
bmd0aCgpKTsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
ZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkQmxvYikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBXZSBkb24ndCBzdXBwb3J0IGJsb2Igbm93IQor
I2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyB1bmtub3duIHR5cGUKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7CisgICAgICAg
ICAgICAgICAgaXQgIT0gaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOworICAgICAgICAgICAgICAg
ICsraXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFdURjo6U3RyaW5nIGtleSA9IGl0LT5maXJz
dDsKKyAgICAgICAgICAgIFdURjo6U3RyaW5nIHZhbHVlID0gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIGlmICgha2V5LmlzRW1wdHkoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIHBsYXRmb3JtUmVxdWVzdC5hZGRIZWFkZXIoa2V5LmxhdGluMSgpLmRhdGEoKSwgdmFsdWUu
bGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIExvY2FsZSBoYXMgdGhl
IGZvcm0gImVuLVVTIi4gQ29uc3RydWN0IGFjY2VwdCBsYW5ndWFnZSBsaWtlICJlbi1VUywgZW47
cT0wLjgiLgorICAgICAgICBzdGQ6OnN0cmluZyBsb2NhbGUgPSBCbGFja0JlcnJ5OjpQbGF0Zm9y
bTo6Q2xpZW50OjpnZXQoKS0+Z2V0TG9jYWxlKCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGFjY2Vw
dExhbmd1YWdlID0gbG9jYWxlICsgIiwgIiArIGxvY2FsZS5zdWJzdHIoMCwgMikgKyAiO3E9MC44
IjsKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZEhlYWRlcigiQWNjZXB0LUxhbmd1YWdlIiwg
YWNjZXB0TGFuZ3VhZ2UuY19zdHIoKSk7CisgICAgfQorfQorCitQYXNzT3duUHRyPENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gUmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRmb3JtQ29weURh
dGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGRhdGEpIGNvbnN0
Cit7CisgICAgZGF0YS0+bV90b2tlbiA9IG1fdG9rZW47CisgICAgZGF0YS0+bV9hbmNob3JUZXh0
ID0gbV9hbmNob3JUZXh0OworICAgIGRhdGEtPm1faXNYTUxIVFRQUmVxdWVzdCA9IG1faXNYTUxI
VFRQUmVxdWVzdDsKKyAgICBkYXRhLT5tX211c3RIYW5kbGVJbnRlcm5hbGx5ID0gbV9tdXN0SGFu
ZGxlSW50ZXJuYWxseTsKKyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBSZXNvdXJjZVJlcXVl
c3Q6OmRvUGxhdGZvcm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0
RGF0YT4gZGF0YSkKK3sKKyAgICBtX3Rva2VuID0gZGF0YS0+bV90b2tlbjsKKyAgICBtX2FuY2hv
clRleHQgPSBkYXRhLT5tX2FuY2hvclRleHQ7CisgICAgbV9pc1hNTEhUVFBSZXF1ZXN0ID0gZGF0
YS0+bV9pc1hNTEhUVFBSZXF1ZXN0OworICAgIG1fbXVzdEhhbmRsZUludGVybmFsbHkgPSBkYXRh
LT5tX211c3RIYW5kbGVJbnRlcm5hbGx5OworICAgIG1fZm9yY2VEb3dubG9hZCA9IGRhdGEtPm1f
Zm9yY2VEb3dubG9hZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9u
c2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJj
ZVJlc3BvbnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzNzM5Mgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlc3BvbnNlLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFJlc291cmNlUmVzcG9uc2Vf
aAorI2RlZmluZSBSZXNvdXJjZVJlc3BvbnNlX2gKKworI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2VCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VSZXNwb25z
ZSA6IHB1YmxpYyBSZXNvdXJjZVJlc3BvbnNlQmFzZSB7CitwdWJsaWM6CisgICAgUmVzb3VyY2VS
ZXNwb25zZSgpCisgICAgICAgIDogbV9pc1dNTChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAg
UmVzb3VyY2VSZXNwb25zZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1l
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorICAgICAgICA6IFJlc291cmNlUmVzcG9uc2VCYXNl
KHVybCwgbWltZVR5cGUsIGV4cGVjdGVkTGVuZ3RoLCB0ZXh0RW5jb2RpbmdOYW1lLCBmaWxlbmFt
ZSkKKyAgICAgICAgLCBtX2lzTXVsdGlwYXJ0UGF5bG9hZChmYWxzZSkKKyAgICAgICAgLCBtX2lz
V01MKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldElzV01MKGJvb2wgaXNXTUwp
IHsgbV9pc1dNTCA9IGlzV01MOyB9CisgICAgYm9vbCBpc1dNTCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNXTUw7IH0KKworICAgIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0
YT4gZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3Bv
bnNlRGF0YT4pIGNvbnN0OworICAgIHZvaWQgZG9QbGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jv
c3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4pOworCisgICAgdm9pZCBzZXRJc011bHRpcGFy
dFBheWxvYWQoYm9vbCB2YWx1ZSkgeyBtX2lzTXVsdGlwYXJ0UGF5bG9hZCA9IHZhbHVlOyB9Cisg
ICAgYm9vbCBpc011bHRpcGFydFBheWxvYWQoKSBjb25zdCB7IHJldHVybiBtX2lzTXVsdGlwYXJ0
UGF5bG9hZDsgfQorcHJpdmF0ZToKKyAgICBib29sIG1faXNNdWx0aXBhcnRQYXlsb2FkOworICAg
IGJvb2wgbV9pc1dNTDsKKworfTsKKworc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25z
ZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2UgeworICAg
IGJvb2wgbV9pc1dNTDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFJlc291cmNlUmVzcG9uc2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2VCbGFja0JlcnJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxh
Y2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NmM1ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gUmVzb3VyY2VSZXNw
b25zZTo6ZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
c3BvbnNlRGF0YT4gZGF0YSkgY29uc3QKK3sKKyAgICBkYXRhLT5tX2lzV01MID0gbV9pc1dNTDsK
KyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpkb1BsYXRmb3Jt
QWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBkYXRhKQor
eworICAgIG1faXNXTUwgPSBkYXRhLT5tX2lzV01MOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117308</attachid>
            <date>2011-11-30 18:47:14 -0800</date>
            <delta_ts>2011-12-06 01:21:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Upstream-the-BlackBerry-porting-of-network-Resource.patch</filename>
            <type>text/plain</type>
            <size>28883</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSA0OGRhOTk4Y2ViMTEzODNiYTUxY2Q4ZDc3MGVlMmZhZTdjOTBmMzFkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBXZWQsIDMwIE5vdiAyMDExIDEyOjEyOjUzICswODAwClN1YmplY3Q6IFtQQVRDSF0g
VXBzdHJlYW0gdGhlIEJsYWNrQmVycnkgcG9ydGluZyBvZiBuZXR3b3JrIFJlc291cmNlCiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzODgKClJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKT3RoZXIgbWFpbiBjb250cmlidXRvcnM6CkpvZSBNYXNvbiA8am1hc29u
QHJpbS5jb20+CllvbmcgTGkgIDx5b2xpQHJpbS5jb20+CkdhcnkgU2ltbW9ucyAgPGdzaW1tb25z
QHJpbS5jb20+CkdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNvbT4KQ2hyaXMgR3VhbiA8Y2hyaXMu
Z3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Ck1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5j
b20+CgpJbml0aWFsIHVwc3RyZWFtLCBjYW4ndCBiZSBidWlsdCB5ZXQsIG5vIG5ldyB0ZXN0cy4K
CiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaDogQWRkZWQuCiog
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5LmNwcDog
QWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tC
ZXJyeS5jcHA6IEFkZGVkLgoqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
cXVlc3QuaDogQWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVx
dWVzdEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZS5oOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwOiBBZGRlZC4KLS0tCiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKysrCiAuLi4vcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaCAgICB8ICAgNDQgKysrKysK
IC4uLi9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNrQmVycnkuY3BwIHwgICAy
NyArKysKIC4uLi9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAgICAgICAg
IHwgIDE5NiArKysrKysrKysrKysrKysrKysrKwogLi4uL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlcXVlc3QuaCAgfCAgMTI3ICsrKysrKysrKysrKysKIC4uLi9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwICAgICAgIHwgIDE1NSArKysrKysrKysr
KysrKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2Uu
aCB8ICAgNjAgKysrKysrCiAuLi4vYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJy
eS5jcHAgICAgICB8ICAgMzUgKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA2NjkgaW5zZXJ0aW9ucygr
KSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJy
b3JCbGFja0JlcnJ5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVzcG9uc2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5j
cHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggNTljOTA4Zi4uZWY4ZjdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsx
LDMwIEBACiAyMDExLTExLTI5ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5j
bj4KIAorICAgICAgICBVcHN0cmVhbSB0aGUgQmxhY2tCZXJyeSBwb3J0aW5nIG9mIG5ldHdvcmsg
UmVzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTczMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
T3RoZXIgbWFpbiBjb250cmlidXRvcnM6CisgICAgICAgIEpvZSBNYXNvbiA8am1hc29uQHJpbS5j
b20+CisgICAgICAgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisgICAgICAgIEdhcnkgU2ltbW9u
cyAgPGdzaW1tb25zQHJpbS5jb20+CisgICAgICAgIEdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNv
bT4KKyAgICAgICAgQ2hyaXMgR3VhbiA8Y2hyaXMuZ3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Cisg
ICAgICAgIE1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5jb20+CisKKyAgICAgICAgSW5p
dGlhbCB1cHN0cmVhbSwgY2FuJ3QgYmUgYnVpbHQgeWV0LCBubyBuZXcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNr
QmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
c3BvbnNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorCisyMDExLTExLTI5ICBMZW8g
WWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5jbj4KKwogICAgICAgICBVcHN0cmVhbSBw
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUHJveHlTZXJ2ZXJCbGFja0JlcnJ5LmNwcAogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMyODgKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291
cmNlRXJyb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZUVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzNzdk
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9SZXNvdXJjZUVycm9yLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFJlc291cmNlRXJyb3JfaAorI2RlZmlu
ZSBSZXNvdXJjZUVycm9yX2gKKworI2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJj
ZUVycm9yQmFzZSB7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaHR0
cEVycm9yRG9tYWluOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBwbGF0Zm9ybUVycm9y
RG9tYWluOworCisgICAgUmVzb3VyY2VFcnJvcigpCisgICAgeworICAgIH0KKworICAgIFJlc291
cmNlRXJyb3IoY29uc3QgU3RyaW5nJiBkb21haW4sIGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbikKKyAgICAg
ICAgOiBSZXNvdXJjZUVycm9yQmFzZShkb21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9j
YWxpemVkRGVzY3JpcHRpb24pCisgICAgeworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFJlc291cmNlRXJyb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJj
ZUVycm9yQmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YmQyNmFiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9SZXNvdXJjZUVycm9yQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSwyNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NvbnN0IGNoYXIqIGNvbnN0IFJlc291cmNlRXJyb3I6Omh0dHBFcnJvckRvbWFpbiA9ICJI
VFRQIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFJlc291cmNlRXJyb3I6OnBsYXRmb3JtRXJyb3JEb21h
aW4gPSAiQmxhY2tCZXJyeVBsYXRmb3JtIjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291
cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvUmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lNmUzOTFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJy
eS5jcHAKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCisKKyNpbmNsdWRlICJFdmVudExvb3AuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgIk5ldHdvcmtN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERlZmVycmVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VF
cnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiIC8vIGZvciBTdG9yZWRDcmVkZW50aWFscworCisj
aW5jbHVkZSA8bmV0d29yay9GaWx0ZXJTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVD
bGllbnQgeworcHVibGljOgorICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcigpOworCisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmlu
aXNoVGltZSovKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzb3VyY2VSZXNw
b25zZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KKyAgICBSZXNvdXJjZUVycm9yIHJl
c291cmNlRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CisgICAgVmVjdG9yPGNoYXI+
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBib29sIGlzRG9uZSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNEb25lOyB9CisKK3ByaXZhdGU6CisgICAgUmVzb3VyY2VSZXNwb25zZSBt
X3Jlc3BvbnNlOworICAgIFJlc291cmNlRXJyb3IgbV9lcnJvcjsKKyAgICBWZWN0b3I8Y2hhcj4g
bV9kYXRhOworICAgIGJvb2wgbV9pc0RvbmU7Cit9OworCitXZWJDb3JlU3luY2hyb25vdXNMb2Fk
ZXI6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcigpCisgICAgOiBtX2lzRG9uZShmYWxzZSkKK3sK
K30KKwordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IG1fcmVzcG9uc2UgPSByZXNwb25zZTsKK30KKwordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2Fk
ZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCwgaW50KQoreworICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKK30KKwor
dm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VI
YW5kbGUqLCBkb3VibGUpCit7CisgICAgbV9pc0RvbmUgPSB0cnVlOworfQorCit2b2lkIFdlYkNv
cmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQoreworICAgIG1fZXJyb3IgPSBlcnJvcjsKKyAgICBtX2lzRG9uZSA9
IHRydWU7Cit9CisKK1Jlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVy
bmFsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitSZXNvdXJjZUhhbmRsZTo6flJl
c291cmNlSGFuZGxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFJlc291
cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVy
c0xvYWRpbmcoYm9vbCBkZWZlcnNMb2FkaW5nKQoreworICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0
YW5jZSgpLT5zZXREZWZlcnNMb2FkaW5nKHRoaXMsIGRlZmVyc0xvYWRpbmcpOworfQorCitib29s
IFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gRklYTUU6IGNsZWFuIHVwIHVzZSBvZiBGcmFtZSBub3cgdGhhdCB3ZSBo
YXZlIE5ldHdvcmtpbmdDb250ZXh0IChzZWUgUklNIEJ1ZyAjMTUxNSkKKyAgICBGcmFtZSogZnJh
bWUgPSBjb250ZXh0LT53cmFwcGVkRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+
bG9hZGVyKCkgfHwgIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkgfHwgIWNsaWVudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IHBsYXllcklkID0gc3RhdGljX2Nhc3Q8RnJhbWVM
b2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPnBsYXll
cklkKCk7CisgICAgcmV0dXJuIE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5zdGFydEpvYihw
bGF5ZXJJZCwgdGhpcywgKmZyYW1lLCBkLT5tX2RlZmVyc0xvYWRpbmcpOworfQorCitib29sIFJl
c291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBhdXNl
TG9hZChib29sIHBhdXNlKQoreworICAgIGlmIChOZXR3b3JrTWFuYWdlcjo6aW5zdGFuY2UoKSkK
KyAgICAgICAgTmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnBhdXNlTG9hZCh0aGlzLCBwYXVz
ZSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNl
UmVxdWVzdCYsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKK3sKKyAgICBOZXR3b3Jr
TWFuYWdlcjo6aW5zdGFuY2UoKS0+c3RvcEpvYih0aGlzKTsKK30KKwordm9pZCBSZXNvdXJjZUhh
bmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscywgUmVz
b3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hh
cj4mIGRhdGEpCit7CisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgQVNTRVJUKGZhbHNlICYmICJsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5IGNhbGxl
ZCB3aXRoIGludmFsaWQgbmV0d29ya2luZyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogY2xlYW4gdXAgdXNlIG9mIEZyYW1lIG5vdyB0aGF0IHdlIGhh
dmUgTmV0d29ya2luZ0NvbnRleHQgKHNlZSBSSU0gQnVnICMxNTE1KQorICAgIEZyYW1lKiBmcmFt
ZSA9IGNvbnRleHQtPndyYXBwZWRGcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5s
b2FkZXIoKSB8fCAhZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSB8fCAhZnJhbWUtPnBhZ2UoKSkg
eworICAgICAgICBBU1NFUlQoZmFsc2UgJiYgImxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkgY2Fs
bGVkIHdpdGhvdXQgYSBmcmFtZSBvciBmcmFtZSBjbGllbnQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFBhZ2VHcm91cExvYWREZWZlcnJlciBkZWZlcnJlcihmcmFtZS0+cGFnZSgp
LCB0cnVlKTsKKyAgICBUaW1lckJhc2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOwor
CisgICAgaW50IHBsYXllcklkID0gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0Jl
cnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPnBsYXllcklkKCk7CisKKyAgICBXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXIgc3luY0xvYWRlcjsKKworICAgIGJvb2wgZGVmZXJzTG9hZGlu
ZyA9IGZhbHNlOworICAgIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gZmFsc2U7CisKKyAgICBS
ZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRs
ZShyZXF1ZXN0LCAmc3luY0xvYWRlciwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZm
KSk7CisgICAgTmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnN0YXJ0Sm9iKHBsYXllcklkLCBo
YW5kbGUsICpmcmFtZSwgZGVmZXJzTG9hZGluZyk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHNfc3luY0xvYWRUaW1lT3V0ID0gNjAuMDsgLy8gc2Vjb25kcworCisgICAgZG91YmxlIHN0YXJ0
VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgRXZlbnRMb29wIGxvb3A7CisgICAgd2hpbGUgKCFz
eW5jTG9hZGVyLmlzRG9uZSgpICYmICFsb29wLmVuZGVkKCkpIHsKKyAgICAgICAgbG9vcC5jeWNs
ZSgpOworICAgICAgICBpZiAoY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZSA+IHNfc3luY0xvYWRU
aW1lT3V0KSB7CisgICAgICAgICAgICBoYW5kbGUtPmNhbmNlbCgpOworICAgICAgICAgICAgZXJy
b3IgPSBSZXNvdXJjZUVycm9yKFJlc291cmNlRXJyb3I6OnBsYXRmb3JtRXJyb3JEb21haW4sIEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpGaWx0ZXJTdHJlYW06OlN0YXR1c05ldHdvcmtFcnJvciwgcmVx
dWVzdC51cmwoKS5zdHJpbmcoKSwgIlRpbWUgb3V0Iik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBlcnJvciA9IHN5bmNMb2FkZXIucmVzb3VyY2VFcnJvcigp
OworICAgIGRhdGEgPSBzeW5jTG9hZGVyLmRhdGEoKTsKKyAgICByZXNwb25zZSA9IHN5bmNMb2Fk
ZXIucmVzb3VyY2VSZXNwb25zZSgpOworfQorCitXVEY6OlBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBSZXNvdXJjZUhhbmRsZTo6YnVmZmVyZWREYXRhKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1
ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3Vy
Y2VSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmZTFlMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlcXVlc3QuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFJlc291cmNlUmVxdWVzdF9o
CisjZGVmaW5lIFJlc291cmNlUmVxdWVzdF9oCisKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3RC
YXNlLmgiCisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBQbGF0Zm9ybSB7Citj
bGFzcyBOZXR3b3JrUmVxdWVzdDsKK30KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZXNvdXJjZVJlcXVlc3QgOiBwdWJsaWMgUmVzb3VyY2VSZXF1ZXN0QmFzZSB7CitwdWJsaWM6
CisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsKQorICAgICAgICA6IFJlc291
cmNlUmVxdWVzdEJhc2UoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIFVzZVByb3RvY29sQ2Fj
aGVQb2xpY3kpCisgICAgICAgICwgbV9pc1hNTEhUVFBSZXF1ZXN0KGZhbHNlKQorICAgICAgICAs
IG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFsc2UpCisgICAgICAgICwgbV9pc1JlcXVlc3RlZEJ5
UGx1Z2luKGZhbHNlKQorICAgICAgICAsIG1fZm9yY2VEb3dubG9hZChmYWxzZSkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVybCkKKyAgICAgICAgOiBS
ZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAg
LCBtX2lzWE1MSFRUUFJlcXVlc3QoZmFsc2UpCisgICAgICAgICwgbV9tdXN0SGFuZGxlSW50ZXJu
YWxseShmYWxzZSkKKyAgICAgICAgLCBtX2lzUmVxdWVzdGVkQnlQbHVnaW4oZmFsc2UpCisgICAg
ICAgICwgbV9mb3JjZURvd25sb2FkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJj
ZVJlcXVlc3QoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJj
ZVJlcXVlc3RDYWNoZVBvbGljeSBwb2xpY3kgPSBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAg
ICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBwb2xpY3kpCisgICAgICAgICwgbV9pc1hN
TEhUVFBSZXF1ZXN0KGZhbHNlKQorICAgICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFs
c2UpCisgICAgICAgICwgbV9pc1JlcXVlc3RlZEJ5UGx1Z2luKGZhbHNlKQorICAgICAgICAsIG1f
Zm9yY2VEb3dubG9hZChmYWxzZSkKKyAgICB7CisgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZl
cnJlcik7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KCkKKyAgICAgICAgOiBSZXNvdXJj
ZVJlcXVlc3RCYXNlKEtVUkwoKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgLCBt
X2lzWE1MSFRUUFJlcXVlc3QoZmFsc2UpCisgICAgICAgICwgbV9tdXN0SGFuZGxlSW50ZXJuYWxs
eShmYWxzZSkKKyAgICAgICAgLCBtX2lzUmVxdWVzdGVkQnlQbHVnaW4oZmFsc2UpCisgICAgICAg
ICwgbV9mb3JjZURvd25sb2FkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFRv
a2VuKGNvbnN0IFN0cmluZyYgdG9rZW4pIHsgbV90b2tlbiA9IHRva2VuOyB9CisgICAgU3RyaW5n
IHRva2VuKCkgY29uc3QgeyByZXR1cm4gbV90b2tlbjsgfQorCisgICAgLy8gRklYTUU6IEZvciBS
SU0gQnVnICM0NTIuIFRoZSBCbGFja0JlcnJ5IGFwcGxpY2F0aW9uIHdhbnRzIHRoZSBhbmNob3Ig
dGV4dCBmb3IgYSBjbGlja2VkIGh5cGVybGluayBzbyBhcyB0bworICAgIC8vIG1ha2UgYW4gaW5m
b3JtZWQgZGVjaXNpb24gYXMgdG8gd2hldGhlciB0byBhbGxvdyB0aGUgbmF2aWdhdGlvbi4gV2Ug
c2hvdWxkIG1vdmUgdGhpcyBmdW5jdGlvbmFsaXR5IGludG8gYQorICAgIC8vIFVJL1BvbGljeSBk
ZWxlZ2F0ZS4KKyAgICB2b2lkIHNldEFuY2hvclRleHQoY29uc3QgU3RyaW5nJiBhbmNob3JUZXh0
KSB7IG1fYW5jaG9yVGV4dCA9IGFuY2hvclRleHQ7IH0KKyAgICBTdHJpbmcgYW5jaG9yVGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yVGV4dDsgfQorCisgICAgdm9pZCBzZXRPdmVycmlkZUNv
bnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIHsgbV9vdmVycmlkZUNvbnRlbnRU
eXBlID0gY29udGVudFR5cGU7IH0KKyAgICBTdHJpbmcgb3ZlcnJpZGVDb250ZW50VHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGVDb250ZW50VHlwZTsgfQorCisgICAgdm9pZCBzZXRJc1hN
TEhUVFBSZXF1ZXN0KGJvb2wgaXNYTUxIVFRQUmVxdWVzdCkgeyBtX2lzWE1MSFRUUFJlcXVlc3Qg
PSBpc1hNTEhUVFBSZXF1ZXN0OyB9CisgICAgYm9vbCBpc1hNTEhUVFBSZXF1ZXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9pc1hNTEhUVFBSZXF1ZXN0OyB9CisKKyAgICB2b2lkIHNldElzUmVxdWVzdGVk
QnlQbHVnaW4oYm9vbCBpc1JlcXVlc3RlZEJ5UGx1Z2luKSB7IG1faXNSZXF1ZXN0ZWRCeVBsdWdp
biA9IGlzUmVxdWVzdGVkQnlQbHVnaW47IH0KKyAgICBib29sIGlzUmVxdWVzdGVkQnlQbHVnaW4o
KSBjb25zdCB7IHJldHVybiBtX2lzUmVxdWVzdGVkQnlQbHVnaW47IH0KKworICAgIC8vIG1hcmtz
IHJlcXVlc3RzIHdoaWNoIG11c3QgYmUgaGFuZGxlZCBieSB3ZWJraXQsIGV2ZW4gaWYgTGlua3NI
YW5kbGVkRXh0ZXJuYWxseSBpcyBzZXQKKyAgICB2b2lkIHNldE11c3RIYW5kbGVJbnRlcm5hbGx5
KGJvb2wgbXVzdEhhbmRsZUludGVybmFsbHkpIHsgbV9tdXN0SGFuZGxlSW50ZXJuYWxseSA9IG11
c3RIYW5kbGVJbnRlcm5hbGx5OyB9CisgICAgYm9vbCBtdXN0SGFuZGxlSW50ZXJuYWxseSgpIGNv
bnN0IHsgcmV0dXJuIG1fbXVzdEhhbmRsZUludGVybmFsbHk7IH0KKworICAgIHZvaWQgaW5pdGlh
bGl6ZVBsYXRmb3JtUmVxdWVzdChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Qm
LCBib29sIGlzSW5pdGlhbCA9IGZhbHNlKSBjb25zdDsKKyAgICB2b2lkIHNldEZvcmNlRG93bmxv
YWQoYm9vbCBmb3JjZURvd25sb2FkKSB7IG1fZm9yY2VEb3dubG9hZCA9IHRydWU7IH0KKyAgICBi
b29sIGZvcmNlRG93bmxvYWQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlRG93bmxvYWQ7IH0KKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFzZTsKKworICAgIFN0
cmluZyBtX3Rva2VuOworICAgIFN0cmluZyBtX2FuY2hvclRleHQ7CisgICAgU3RyaW5nIG1fb3Zl
cnJpZGVDb250ZW50VHlwZTsKKyAgICBib29sIG1faXNYTUxIVFRQUmVxdWVzdDsKKyAgICBib29s
IG1fbXVzdEhhbmRsZUludGVybmFsbHk7CisgICAgYm9vbCBtX2lzUmVxdWVzdGVkQnlQbHVnaW47
CisgICAgYm9vbCBtX2ZvcmNlRG93bmxvYWQ7CisKKyAgICB2b2lkIGRvVXBkYXRlUGxhdGZvcm1S
ZXF1ZXN0KCkgeyB9CisgICAgdm9pZCBkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpIHsgfQorCisg
ICAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGRvUGxhdGZvcm1D
b3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4pIGNvbnN0
OworICAgIHZvaWQgZG9QbGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlcXVlc3REYXRhPik7CisKK307CisKK3N0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVz
dERhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhQmFzZSB7CisgICAg
U3RyaW5nIG1fdG9rZW47CisgICAgU3RyaW5nIG1fYW5jaG9yVGV4dDsKKyAgICBib29sIG1faXNY
TUxIVFRQUmVxdWVzdDsKKyAgICBib29sIG1fbXVzdEhhbmRsZUludGVybmFsbHk7CisgICAgYm9v
bCBtX2lzUmVxdWVzdGVkQnlQbHVnaW47CisgICAgYm9vbCBtX2ZvcmNlRG93bmxvYWQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZVJlcXVlc3RfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jl
c291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZWViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0Qmxh
Y2tCZXJyeS5jcHAKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgorCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtQ2xpZW50
Lmg+CisjaW5jbHVkZSA8bmV0d29yay9OZXR3b3JrUmVxdWVzdC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgQmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1
ZXN0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVt
SFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKQoreworICAgIHJldHVybiA2OworfQorCitzdGF0
aWMgaW5saW5lIE5ldHdvcmtSZXF1ZXN0OjpDYWNoZVBvbGljeSBwbGF0Zm9ybUNhY2hlUG9saWN5
Rm9yUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgc3dpdGNo
IChyZXF1ZXN0LmNhY2hlUG9saWN5KCkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OlVzZVByb3RvY29s
Q2FjaGVQb2xpY3k6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VXNlUHJvdG9jb2xD
YWNoZVBvbGljeTsKKyAgICBjYXNlIFdlYkNvcmU6OlJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhOgor
ICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhOwor
ICAgIGNhc2UgV2ViQ29yZTo6UmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQ6CisgICAgICAgIHJldHVy
biBOZXR3b3JrUmVxdWVzdDo6UmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQ7CisgICAgY2FzZSBXZWJD
b3JlOjpSZXR1cm5DYWNoZURhdGFEb250TG9hZDoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1
ZXN0OjpSZXR1cm5DYWNoZURhdGFEb250TG9hZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90
b2NvbENhY2hlUG9saWN5OworICAgIH0KK30KKworc3RhdGljIGlubGluZSBOZXR3b3JrUmVxdWVz
dDo6VGFyZ2V0VHlwZSBwbGF0Zm9ybVRhcmdldFR5cGVGb3JSZXF1ZXN0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBpZiAocmVxdWVzdC5pc1hNTEhUVFBSZXF1ZXN0KCkp
CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNYTUxIVFRQUmVxdWVzdDsK
KworICAgIHN3aXRjaCAocmVxdWVzdC50YXJnZXRUeXBlKCkpIHsKKyAgICBjYXNlIFJlc291cmNl
UmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJhbWU6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVz
dDo6VGFyZ2V0SXNNYWluRnJhbWU7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElz
U3ViZnJhbWU6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTdWJmcmFt
ZTsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTdWJyZXNvdXJjZToKKyAgICAg
ICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1N1YnJlc291cmNlOworICAgIGNhc2Ug
UmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1N0eWxlU2hlZXQ6CisgICAgICAgIHJldHVybiBOZXR3
b3JrUmVxdWVzdDo6VGFyZ2V0SXNTdHlsZVNoZWV0OworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0
OjpUYXJnZXRJc1NjcmlwdDoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJ
c1NjcmlwdDsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNGb250UmVzb3VyY2U6
CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNGb250UmVzb3VyY2U7Cisg
ICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzSW1hZ2U6CisgICAgICAgIHJldHVybiBO
ZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNJbWFnZTsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6
VGFyZ2V0SXNPYmplY3Q6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNP
YmplY3Q7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzTWVkaWE6CisgICAgICAg
IHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNNZWRpYTsKKyAgICBjYXNlIFJlc291cmNl
UmVxdWVzdDo6VGFyZ2V0SXNXb3JrZXI6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6
VGFyZ2V0SXNXb3JrZXI7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU2hhcmVk
V29ya2VyOgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU2hhcmVkV29y
a2VyOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzVW5rbm93bjsKKyAgICB9Cit9CisKK3Zv
aWQgUmVzb3VyY2VSZXF1ZXN0Ojppbml0aWFsaXplUGxhdGZvcm1SZXF1ZXN0KE5ldHdvcmtSZXF1
ZXN0JiBwbGF0Zm9ybVJlcXVlc3QsIGJvb2wgaXNJbml0aWFsKSBjb25zdAoreworICAgIC8vIGlm
IHRoaXMgaXMgdGhlIGluaXRpYWwgbG9hZCwgc2tpcCB0aGUgcmVxdWVzdCBib2R5IGFuZCBoZWFk
ZXJzCisgICAgaWYgKGlzSW5pdGlhbCkKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFJlcXVl
c3RJbml0aWFsKHRpbWVvdXRJbnRlcnZhbCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcGxhdGZv
cm1SZXF1ZXN0LnNldFJlcXVlc3RVcmwodXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAg
ICAgICAgICAgICAgICBodHRwTWV0aG9kKCkubGF0aW4xKCkuZGF0YSgpLAorICAgICAgICAgICAg
ICAgIHBsYXRmb3JtQ2FjaGVQb2xpY3lGb3JSZXF1ZXN0KCp0aGlzKSwKKyAgICAgICAgICAgICAg
ICBwbGF0Zm9ybVRhcmdldFR5cGVGb3JSZXF1ZXN0KCp0aGlzKSwKKyAgICAgICAgICAgICAgICB0
aW1lb3V0SW50ZXJ2YWwoKSk7CisKKyAgICAgICAgaWYgKGh0dHBCb2R5KCkgJiYgIWh0dHBCb2R5
KCktPmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVu
dD4mIGVsZW1lbnRzID0gaHR0cEJvZHkoKS0+ZWxlbWVudHMoKTsKKyAgICAgICAgICAgIC8vIHVz
ZSBzZXREYXRhIGZvciBzaW1wbGUgZm9ybXMgYmVjYXVzZSBpdCBpcyBzbGlnaHRseSBtb3JlIGVm
ZmljaWVudAorICAgICAgICAgICAgaWYgKGVsZW1lbnRzLnNpemUoKSA9PSAxICYmIGVsZW1lbnRz
WzBdLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCisgICAgICAgICAgICAgICAgcGxh
dGZvcm1SZXF1ZXN0LnNldERhdGEoZWxlbWVudHNbMF0ubV9kYXRhLmRhdGEoKSwgZWxlbWVudHNb
MF0ubV9kYXRhLnNpemUoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50ID0gZWxlbWVudHNbaV07
CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1l
bnQ6OmRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybVJlcXVlc3QuYWRkTXVs
dGlwYXJ0RGF0YShlbGVtZW50Lm1fZGF0YS5kYXRhKCksIGVsZW1lbnQubV9kYXRhLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6ZW5jb2RlZEZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybVJl
cXVlc3QuYWRkTXVsdGlwYXJ0RmlsZW5hbWUoZWxlbWVudC5tX2ZpbGVuYW1lLmNoYXJhY3RlcnMo
KSwgZWxlbWVudC5tX2ZpbGVuYW1lLmxlbmd0aCgpKTsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50
OjplbmNvZGVkQmxvYikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBXZSBk
b24ndCBzdXBwb3J0IGJsb2Igbm93IQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyB1bmtub3du
IHR5cGUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZp
ZWxkcygpLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgaXQgIT0gaHR0cEhlYWRlckZpZWxkcygp
LmVuZCgpOworICAgICAgICAgICAgICAgICsraXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFdU
Rjo6U3RyaW5nIGtleSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIFdURjo6U3RyaW5nIHZhbHVl
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSAmJiAhdmFsdWUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5hZGRIZWFkZXIoa2V5
LmxhdGluMSgpLmRhdGEoKSwgdmFsdWUubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIExvY2FsZSBoYXMgdGhlIGZvcm0gImVuLVVTIi4gQ29uc3RydWN0IGFjY2VwdCBs
YW5ndWFnZSBsaWtlICJlbi1VUywgZW47cT0wLjgiLgorICAgICAgICBzdGQ6OnN0cmluZyBsb2Nh
bGUgPSBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Q2xpZW50OjpnZXQoKS0+Z2V0TG9jYWxlKCk7Cisg
ICAgICAgIHN0ZDo6c3RyaW5nIGFjY2VwdExhbmd1YWdlID0gbG9jYWxlICsgIiwgIiArIGxvY2Fs
ZS5zdWJzdHIoMCwgMikgKyAiO3E9MC44IjsKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZEhl
YWRlcigiQWNjZXB0LUxhbmd1YWdlIiwgYWNjZXB0TGFuZ3VhZ2UuY19zdHIoKSk7CisgICAgfQor
fQorCitQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gUmVzb3VyY2VS
ZXF1ZXN0Ojpkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNl
UmVxdWVzdERhdGE+IGRhdGEpIGNvbnN0Cit7CisgICAgZGF0YS0+bV90b2tlbiA9IG1fdG9rZW47
CisgICAgZGF0YS0+bV9hbmNob3JUZXh0ID0gbV9hbmNob3JUZXh0OworICAgIGRhdGEtPm1faXNY
TUxIVFRQUmVxdWVzdCA9IG1faXNYTUxIVFRQUmVxdWVzdDsKKyAgICBkYXRhLT5tX211c3RIYW5k
bGVJbnRlcm5hbGx5ID0gbV9tdXN0SGFuZGxlSW50ZXJuYWxseTsKKyAgICByZXR1cm4gZGF0YTsK
K30KKwordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvUGxhdGZvcm1BZG9wdChQYXNzT3duUHRyPENy
b3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gZGF0YSkKK3sKKyAgICBtX3Rva2VuID0gZGF0
YS0+bV90b2tlbjsKKyAgICBtX2FuY2hvclRleHQgPSBkYXRhLT5tX2FuY2hvclRleHQ7CisgICAg
bV9pc1hNTEhUVFBSZXF1ZXN0ID0gZGF0YS0+bV9pc1hNTEhUVFBSZXF1ZXN0OworICAgIG1fbXVz
dEhhbmRsZUludGVybmFsbHkgPSBkYXRhLT5tX211c3RIYW5kbGVJbnRlcm5hbGx5OworICAgIG1f
Zm9yY2VEb3dubG9hZCA9IGRhdGEtPm1fZm9yY2VEb3dubG9hZDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMzYzNzM5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlLmgKQEAgLTAsMCAr
MSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aWZuZGVmIFJlc291cmNlUmVzcG9uc2VfaAorI2RlZmluZSBSZXNvdXJjZVJlc3BvbnNlX2gKKwor
I2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2VCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBSZXNvdXJjZVJlc3BvbnNlQmFzZSB7
CitwdWJsaWM6CisgICAgUmVzb3VyY2VSZXNwb25zZSgpCisgICAgICAgIDogbV9pc1dNTChmYWxz
ZSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXNwb25zZShjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3Qg
U3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorICAgICAg
ICA6IFJlc291cmNlUmVzcG9uc2VCYXNlKHVybCwgbWltZVR5cGUsIGV4cGVjdGVkTGVuZ3RoLCB0
ZXh0RW5jb2RpbmdOYW1lLCBmaWxlbmFtZSkKKyAgICAgICAgLCBtX2lzTXVsdGlwYXJ0UGF5bG9h
ZChmYWxzZSkKKyAgICAgICAgLCBtX2lzV01MKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIHNldElzV01MKGJvb2wgaXNXTUwpIHsgbV9pc1dNTCA9IGlzV01MOyB9CisgICAgYm9vbCBp
c1dNTCgpIGNvbnN0IHsgcmV0dXJuIG1faXNXTUw7IH0KKworICAgIFBhc3NPd25QdHI8Q3Jvc3NU
aHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8
Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4pIGNvbnN0OworICAgIHZvaWQgZG9QbGF0
Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4pOwor
CisgICAgdm9pZCBzZXRJc011bHRpcGFydFBheWxvYWQoYm9vbCB2YWx1ZSkgeyBtX2lzTXVsdGlw
YXJ0UGF5bG9hZCA9IHZhbHVlOyB9CisgICAgYm9vbCBpc011bHRpcGFydFBheWxvYWQoKSBjb25z
dCB7IHJldHVybiBtX2lzTXVsdGlwYXJ0UGF5bG9hZDsgfQorcHJpdmF0ZToKKyAgICBib29sIG1f
aXNNdWx0aXBhcnRQYXlsb2FkOworICAgIGJvb2wgbV9pc1dNTDsKKworfTsKKworc3RydWN0IENy
b3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlc3BvbnNlRGF0YUJhc2UgeworICAgIGJvb2wgbV9pc1dNTDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlc291cmNlUmVzcG9uc2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9u
c2VCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYWU0NmM1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5j
cHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
c3BvbnNlRGF0YT4gUmVzb3VyY2VSZXNwb25zZTo6ZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25Q
dHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gZGF0YSkgY29uc3QKK3sKKyAgICBk
YXRhLT5tX2lzV01MID0gbV9pc1dNTDsKKyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBSZXNv
dXJjZVJlc3BvbnNlOjpkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVzcG9uc2VEYXRhPiBkYXRhKQoreworICAgIG1faXNXTUwgPSBkYXRhLT5tX2lzV01MOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0tIAoxLjcuNS40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118006</attachid>
            <date>2011-12-06 01:21:03 -0800</date>
            <delta_ts>2011-12-07 18:26:24 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>0001-Upstream-the-BlackBerry-porting-of-network-Resource.patch</filename>
            <type>text/plain</type>
            <size>29090</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSBjY2ZiMmUyODJhMmQyMDM2ZWMyMmRjNjViMDQwMzRlMWY2OGRmMjFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBXZWQsIDMwIE5vdiAyMDExIDEyOjEyOjUzICswODAwClN1YmplY3Q6IFtQQVRDSF0g
VXBzdHJlYW0gdGhlIEJsYWNrQmVycnkgcG9ydGluZyBvZiBuZXR3b3JrIFJlc291cmNlCiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzODgKClJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKT3RoZXIgbWFpbiBjb250cmlidXRvcnM6CkpvZSBNYXNvbiA8am1hc29u
QHJpbS5jb20+CllvbmcgTGkgIDx5b2xpQHJpbS5jb20+CkdhcnkgU2ltbW9ucyAgPGdzaW1tb25z
QHJpbS5jb20+CkdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNvbT4KQ2hyaXMgR3VhbiA8Y2hyaXMu
Z3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Ck1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5j
b20+CgpJbml0aWFsIHVwc3RyZWFtLCBjYW4ndCBiZSBidWlsdCB5ZXQsIG5vIG5ldyB0ZXN0cy4K
CiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaDogQWRkZWQuCiog
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5LmNwcDog
QWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tC
ZXJyeS5jcHA6IEFkZGVkLgoqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
cXVlc3QuaDogQWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVx
dWVzdEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZS5oOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwOiBBZGRlZC4KLS0tCiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKysrCiAuLi4vcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaCAgICB8ICAgNDQgKysrKysK
IC4uLi9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNrQmVycnkuY3BwIHwgICAy
NyArKysKIC4uLi9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAgICAgICAg
IHwgIDE5NiArKysrKysrKysrKysrKysrKysrKwogLi4uL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlcXVlc3QuaCAgfCAgMTI3ICsrKysrKysrKysrKysKIC4uLi9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwICAgICAgIHwgIDE2MCArKysrKysrKysr
KysrKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2Uu
aCB8ICAgNjAgKysrKysrCiAuLi4vYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJy
eS5jcHAgICAgICB8ICAgMzUgKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA2NzQgaW5zZXJ0aW9ucygr
KSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJy
b3JCbGFja0JlcnJ5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVzcG9uc2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5j
cHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggYTY5YjFiOS4uZjk5MWE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDExLTExLTI5ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5j
bj4KKworICAgICAgICBVcHN0cmVhbSB0aGUgQmxhY2tCZXJyeSBwb3J0aW5nIG9mIG5ldHdvcmsg
UmVzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTczMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
T3RoZXIgbWFpbiBjb250cmlidXRvcnM6CisgICAgICAgIEpvZSBNYXNvbiA8am1hc29uQHJpbS5j
b20+CisgICAgICAgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisgICAgICAgIEdhcnkgU2ltbW9u
cyAgPGdzaW1tb25zQHJpbS5jb20+CisgICAgICAgIEdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNv
bT4KKyAgICAgICAgQ2hyaXMgR3VhbiA8Y2hyaXMuZ3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Cisg
ICAgICAgIE1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5jb20+CisKKyAgICAgICAgSW5p
dGlhbCB1cHN0cmVhbSwgY2FuJ3QgYmUgYnVpbHQgeWV0LCBubyBuZXcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNr
QmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
c3BvbnNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorCiAyMDExLTEyLTA0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEhJRVJBUkNIWV9SRVFVRVNU
X0VSUiBjaGVjayBpbiBjaGVja0FjY2VwdENoaWxkIHNob3VsZCBiZSBvcHRpbWl6ZWQgZm9yIG5l
d0NoaWxkIHdpdGhvdXQgY2hpbGRyZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMzc3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lm
bmRlZiBSZXNvdXJjZUVycm9yX2gKKyNkZWZpbmUgUmVzb3VyY2VFcnJvcl9oCisKKyNpbmNsdWRl
ICJSZXNvdXJjZUVycm9yQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJl
c291cmNlRXJyb3IgOiBwdWJsaWMgUmVzb3VyY2VFcnJvckJhc2UgeworcHVibGljOgorCisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGh0dHBFcnJvckRvbWFpbjsKKyAgICBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgcGxhdGZvcm1FcnJvckRvbWFpbjsKKworICAgIFJlc291cmNlRXJyb3Io
KQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZUVycm9yKGNvbnN0IFN0cmluZyYgZG9tYWlu
LCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYg
bG9jYWxpemVkRGVzY3JpcHRpb24pCisgICAgICAgIDogUmVzb3VyY2VFcnJvckJhc2UoZG9tYWlu
LCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxvY2FsaXplZERlc2NyaXB0aW9uKQorICAgIHsKKyAg
ICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZUVy
cm9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZUVycm9yQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNrQmVycnkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjZhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJs
YWNrQmVycnkuY3BwCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJy
b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyKiBjb25zdCBSZXNvdXJj
ZUVycm9yOjpodHRwRXJyb3JEb21haW4gPSAiSFRUUCI7Citjb25zdCBjaGFyKiBjb25zdCBSZXNv
dXJjZUVycm9yOjpwbGF0Zm9ybUVycm9yRG9tYWluID0gIkJsYWNrQmVycnlQbGF0Zm9ybSI7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxh
Y2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlMzkxZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCkBAIC0wLDAgKzEsMTk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorCisjaW5jbHVkZSAiRXZlbnRMb29w
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEJsYWNr
QmVycnkuaCIKKyNpbmNsdWRlICJOZXR3b3JrTWFuYWdlci5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cExvYWREZWZl
cnJlci5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIiAv
LyBmb3IgU3RvcmVkQ3JlZGVudGlhbHMKKworI2luY2x1ZGUgPG5ldHdvcmsvRmlsdGVyU3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9h
ZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwg
aW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLyk7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICBS
ZXNvdXJjZVJlc3BvbnNlIHJlc291cmNlUmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3Bv
bnNlOyB9CisgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKCkgY29uc3QgeyByZXR1cm4g
bV9lcnJvcjsgfQorICAgIFZlY3RvcjxjaGFyPiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
OyB9CisgICAgYm9vbCBpc0RvbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRG9uZTsgfQorCitwcml2
YXRlOgorICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBSZXNvdXJjZUVycm9y
IG1fZXJyb3I7CisgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBib29sIG1faXNEb25lOwor
fTsKKworV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIo
KQorICAgIDogbV9pc0RvbmUoZmFsc2UpCit7Cit9CisKK3ZvaWQgV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7Cit9CisK
K3ZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCkKK3sKKyAgICBtX2RhdGEu
YXBwZW5kKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlKQoreworICAgIG1faXNE
b25lID0gdHJ1ZTsKK30KKwordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZEZhaWwo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBtX2Vy
cm9yID0gZXJyb3I7CisgICAgbV9pc0RvbmUgPSB0cnVlOworfQorCitSZXNvdXJjZUhhbmRsZUlu
dGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzTG9hZGluZykK
K3sKKyAgICBOZXR3b3JrTWFuYWdlcjo6aW5zdGFuY2UoKS0+c2V0RGVmZXJzTG9hZGluZyh0aGlz
LCBkZWZlcnNMb2FkaW5nKTsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBjbGVhbiB1
cCB1c2Ugb2YgRnJhbWUgbm93IHRoYXQgd2UgaGF2ZSBOZXR3b3JraW5nQ29udGV4dCAoc2VlIFJJ
TSBCdWcgIzE1MTUpCisgICAgRnJhbWUqIGZyYW1lID0gY29udGV4dC0+d3JhcHBlZEZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmxvYWRlcigpIHx8ICFmcmFtZS0+bG9hZGVyKCkt
PmNsaWVudCgpIHx8ICFjbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGludCBw
bGF5ZXJJZCA9IHN0YXRpY19jYXN0PEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCkpLT5wbGF5ZXJJZCgpOworICAgIHJldHVybiBOZXR3b3JrTWFu
YWdlcjo6aW5zdGFuY2UoKS0+c3RhcnRKb2IocGxheWVySWQsIHRoaXMsICpmcmFtZSwgZC0+bV9k
ZWZlcnNMb2FkaW5nKTsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3VwcG9ydHNCdWZmZXJl
ZERhdGEoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlOjpwYXVzZUxvYWQoYm9vbCBwYXVzZSkKK3sKKyAgICBpZiAo
TmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCkpCisgICAgICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0
YW5jZSgpLT5wYXVzZUxvYWQodGhpcywgcGF1c2UpOworfQorCitib29sIFJlc291cmNlSGFuZGxl
Ojp3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZSopCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNhbmNlbCgpCit7CisgICAgTmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnN0b3BKb2Io
dGhpcyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQoreworICAgIGlmICghY29udGV4
dCB8fCAhY29udGV4dC0+aXNWYWxpZCgpKSB7CisgICAgICAgIEFTU0VSVChmYWxzZSAmJiAibG9h
ZFJlc291cmNlU3luY2hyb25vdXNseSBjYWxsZWQgd2l0aCBpbnZhbGlkIG5ldHdvcmtpbmcgY29u
dGV4dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IGNsZWFuIHVw
IHVzZSBvZiBGcmFtZSBub3cgdGhhdCB3ZSBoYXZlIE5ldHdvcmtpbmdDb250ZXh0IChzZWUgUklN
IEJ1ZyAjMTUxNSkKKyAgICBGcmFtZSogZnJhbWUgPSBjb250ZXh0LT53cmFwcGVkRnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+bG9hZGVyKCkgfHwgIWZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCkgfHwgIWZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlICYmICJs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5IGNhbGxlZCB3aXRob3V0IGEgZnJhbWUgb3IgZnJhbWUg
Y2xpZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQYWdlR3JvdXBMb2FkRGVm
ZXJyZXIgZGVmZXJyZXIoZnJhbWUtPnBhZ2UoKSwgdHJ1ZSk7CisgICAgVGltZXJCYXNlOjpmaXJl
VGltZXJzSW5OZXN0ZWRFdmVudExvb3AoKTsKKworICAgIGludCBwbGF5ZXJJZCA9IHN0YXRpY19j
YXN0PEZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeSo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCkpLT5wbGF5ZXJJZCgpOworCisgICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIHN5bmNMb2Fk
ZXI7CisKKyAgICBib29sIGRlZmVyc0xvYWRpbmcgPSBmYWxzZTsKKyAgICBib29sIHNob3VsZENv
bnRlbnRTbmlmZiA9IGZhbHNlOworCisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUg
PSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgJnN5bmNMb2FkZXIsIGRlZmVy
c0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZikpOworICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0
YW5jZSgpLT5zdGFydEpvYihwbGF5ZXJJZCwgaGFuZGxlLCAqZnJhbWUsIGRlZmVyc0xvYWRpbmcp
OworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzX3N5bmNMb2FkVGltZU91dCA9IDYwLjA7IC8v
IHNlY29uZHMKKworICAgIGRvdWJsZSBzdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIEV2
ZW50TG9vcCBsb29wOworICAgIHdoaWxlICghc3luY0xvYWRlci5pc0RvbmUoKSAmJiAhbG9vcC5l
bmRlZCgpKSB7CisgICAgICAgIGxvb3AuY3ljbGUoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRUaW1l
KCkgLSBzdGFydFRpbWUgPiBzX3N5bmNMb2FkVGltZU91dCkgeworICAgICAgICAgICAgaGFuZGxl
LT5jYW5jZWwoKTsKKyAgICAgICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcihSZXNvdXJjZUVy
cm9yOjpwbGF0Zm9ybUVycm9yRG9tYWluLCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6RmlsdGVyU3Ry
ZWFtOjpTdGF0dXNOZXR3b3JrRXJyb3IsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksICJUaW1lIG91
dCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgZXJyb3Ig
PSBzeW5jTG9hZGVyLnJlc291cmNlRXJyb3IoKTsKKyAgICBkYXRhID0gc3luY0xvYWRlci5kYXRh
KCk7CisgICAgcmVzcG9uc2UgPSBzeW5jTG9hZGVyLnJlc291cmNlUmVzcG9uc2UoKTsKK30KKwor
V1RGOjpQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0
YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI2ZmUxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTAs
MCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2lmbmRlZiBSZXNvdXJjZVJlcXVlc3RfaAorI2RlZmluZSBSZXNvdXJjZVJlcXVlc3RfaAor
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgorCituYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworY2xhc3MgTmV0d29ya1JlcXVlc3Q7Cit9Cit9CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0IDogcHVibGljIFJl
c291cmNlUmVxdWVzdEJhc2UgeworcHVibGljOgorICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBT
dHJpbmcmIHVybCkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwoUGFyc2VkVVJM
U3RyaW5nLCB1cmwpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAsIG1faXNYTUxI
VFRQUmVxdWVzdChmYWxzZSkKKyAgICAgICAgLCBtX211c3RIYW5kbGVJbnRlcm5hbGx5KGZhbHNl
KQorICAgICAgICAsIG1faXNSZXF1ZXN0ZWRCeVBsdWdpbihmYWxzZSkKKyAgICAgICAgLCBtX2Zv
cmNlRG93bmxvYWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdChj
b25zdCBLVVJMJiB1cmwpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmwsIFVzZVBy
b3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICwgbV9pc1hNTEhUVFBSZXF1ZXN0KGZhbHNlKQor
ICAgICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFsc2UpCisgICAgICAgICwgbV9pc1Jl
cXVlc3RlZEJ5UGx1Z2luKGZhbHNlKQorICAgICAgICAsIG1fZm9yY2VEb3dubG9hZChmYWxzZSkK
KyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5ID0g
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVy
bCwgcG9saWN5KQorICAgICAgICAsIG1faXNYTUxIVFRQUmVxdWVzdChmYWxzZSkKKyAgICAgICAg
LCBtX211c3RIYW5kbGVJbnRlcm5hbGx5KGZhbHNlKQorICAgICAgICAsIG1faXNSZXF1ZXN0ZWRC
eVBsdWdpbihmYWxzZSkKKyAgICAgICAgLCBtX2ZvcmNlRG93bmxvYWQoZmFsc2UpCisgICAgewor
ICAgICAgICBzZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOworICAgIH0KKworICAgIFJlc291cmNl
UmVxdWVzdCgpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKCksIFVzZVByb3Rv
Y29sQ2FjaGVQb2xpY3kpCisgICAgICAgICwgbV9pc1hNTEhUVFBSZXF1ZXN0KGZhbHNlKQorICAg
ICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFsc2UpCisgICAgICAgICwgbV9pc1JlcXVl
c3RlZEJ5UGx1Z2luKGZhbHNlKQorICAgICAgICAsIG1fZm9yY2VEb3dubG9hZChmYWxzZSkKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBzZXRUb2tlbihjb25zdCBTdHJpbmcmIHRva2VuKSB7IG1f
dG9rZW4gPSB0b2tlbjsgfQorICAgIFN0cmluZyB0b2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fdG9r
ZW47IH0KKworICAgIC8vIEZJWE1FOiBGb3IgUklNIEJ1ZyAjNDUyLiBUaGUgQmxhY2tCZXJyeSBh
cHBsaWNhdGlvbiB3YW50cyB0aGUgYW5jaG9yIHRleHQgZm9yIGEgY2xpY2tlZCBoeXBlcmxpbmsg
c28gYXMgdG8KKyAgICAvLyBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIGFzIHRvIHdoZXRoZXIg
dG8gYWxsb3cgdGhlIG5hdmlnYXRpb24uIFdlIHNob3VsZCBtb3ZlIHRoaXMgZnVuY3Rpb25hbGl0
eSBpbnRvIGEKKyAgICAvLyBVSS9Qb2xpY3kgZGVsZWdhdGUuCisgICAgdm9pZCBzZXRBbmNob3JU
ZXh0KGNvbnN0IFN0cmluZyYgYW5jaG9yVGV4dCkgeyBtX2FuY2hvclRleHQgPSBhbmNob3JUZXh0
OyB9CisgICAgU3RyaW5nIGFuY2hvclRleHQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclRleHQ7
IH0KKworICAgIHZvaWQgc2V0T3ZlcnJpZGVDb250ZW50VHlwZShjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlKSB7IG1fb3ZlcnJpZGVDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOyB9CisgICAgU3Ry
aW5nIG92ZXJyaWRlQ29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlQ29udGVu
dFR5cGU7IH0KKworICAgIHZvaWQgc2V0SXNYTUxIVFRQUmVxdWVzdChib29sIGlzWE1MSFRUUFJl
cXVlc3QpIHsgbV9pc1hNTEhUVFBSZXF1ZXN0ID0gaXNYTUxIVFRQUmVxdWVzdDsgfQorICAgIGJv
b2wgaXNYTUxIVFRQUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYTUxIVFRQUmVxdWVzdDsg
fQorCisgICAgdm9pZCBzZXRJc1JlcXVlc3RlZEJ5UGx1Z2luKGJvb2wgaXNSZXF1ZXN0ZWRCeVBs
dWdpbikgeyBtX2lzUmVxdWVzdGVkQnlQbHVnaW4gPSBpc1JlcXVlc3RlZEJ5UGx1Z2luOyB9Cisg
ICAgYm9vbCBpc1JlcXVlc3RlZEJ5UGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcXVlc3Rl
ZEJ5UGx1Z2luOyB9CisKKyAgICAvLyBtYXJrcyByZXF1ZXN0cyB3aGljaCBtdXN0IGJlIGhhbmRs
ZWQgYnkgd2Via2l0LCBldmVuIGlmIExpbmtzSGFuZGxlZEV4dGVybmFsbHkgaXMgc2V0CisgICAg
dm9pZCBzZXRNdXN0SGFuZGxlSW50ZXJuYWxseShib29sIG11c3RIYW5kbGVJbnRlcm5hbGx5KSB7
IG1fbXVzdEhhbmRsZUludGVybmFsbHkgPSBtdXN0SGFuZGxlSW50ZXJuYWxseTsgfQorICAgIGJv
b2wgbXVzdEhhbmRsZUludGVybmFsbHkoKSBjb25zdCB7IHJldHVybiBtX211c3RIYW5kbGVJbnRl
cm5hbGx5OyB9CisKKyAgICB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVJlcXVlc3QoQmxhY2tCZXJy
eTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0JiwgYm9vbCBpc0luaXRpYWwgPSBmYWxzZSkgY29u
c3Q7CisgICAgdm9pZCBzZXRGb3JjZURvd25sb2FkKGJvb2wgZm9yY2VEb3dubG9hZCkgeyBtX2Zv
cmNlRG93bmxvYWQgPSB0cnVlOyB9CisgICAgYm9vbCBmb3JjZURvd25sb2FkKCkgY29uc3QgeyBy
ZXR1cm4gbV9mb3JjZURvd25sb2FkOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFJl
c291cmNlUmVxdWVzdEJhc2U7CisKKyAgICBTdHJpbmcgbV90b2tlbjsKKyAgICBTdHJpbmcgbV9h
bmNob3JUZXh0OworICAgIFN0cmluZyBtX292ZXJyaWRlQ29udGVudFR5cGU7CisgICAgYm9vbCBt
X2lzWE1MSFRUUFJlcXVlc3Q7CisgICAgYm9vbCBtX211c3RIYW5kbGVJbnRlcm5hbGx5OworICAg
IGJvb2wgbV9pc1JlcXVlc3RlZEJ5UGx1Z2luOworICAgIGJvb2wgbV9mb3JjZURvd25sb2FkOwor
CisgICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpIHsgfQorICAgIHZvaWQgZG9VcGRh
dGVSZXNvdXJjZVJlcXVlc3QoKSB7IH0KKworICAgIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlcXVlc3REYXRhPiBkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVh
ZFJlc291cmNlUmVxdWVzdERhdGE+KSBjb25zdDsKKyAgICB2b2lkIGRvUGxhdGZvcm1BZG9wdChQ
YXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4pOworCit9OworCitzdHJ1
Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVz
b3VyY2VSZXF1ZXN0RGF0YUJhc2UgeworICAgIFN0cmluZyBtX3Rva2VuOworICAgIFN0cmluZyBt
X2FuY2hvclRleHQ7CisgICAgYm9vbCBtX2lzWE1MSFRUUFJlcXVlc3Q7CisgICAgYm9vbCBtX211
c3RIYW5kbGVJbnRlcm5hbGx5OworICAgIGJvb2wgbV9pc1JlcXVlc3RlZEJ5UGx1Z2luOworICAg
IGJvb2wgbV9mb3JjZURvd25sb2FkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVl
c3RCbGFja0JlcnJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQ3
NmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCkBAIC0wLDAgKzEsMTYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKworI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUNsaWVudC5oPgorI2luY2x1ZGUgPG5ldHdvcmsvTmV0d29y
a1JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIEJsYWNr
QmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCkK
K3sKKyAgICByZXR1cm4gNjsKK30KKworc3RhdGljIGlubGluZSBOZXR3b3JrUmVxdWVzdDo6Q2Fj
aGVQb2xpY3kgcGxhdGZvcm1DYWNoZVBvbGljeUZvclJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQoreworICAgIHN3aXRjaCAocmVxdWVzdC5jYWNoZVBvbGljeSgpKSB7Cisg
ICAgY2FzZSBXZWJDb3JlOjpVc2VQcm90b2NvbENhY2hlUG9saWN5OgorICAgICAgICByZXR1cm4g
TmV0d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3k7CisgICAgY2FzZSBXZWJDb3Jl
OjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YToKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0
OjpSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YTsKKyAgICBjYXNlIFdlYkNvcmU6OlJldHVybkNhY2hl
RGF0YUVsc2VMb2FkOgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlJldHVybkNhY2hl
RGF0YUVsc2VMb2FkOworICAgIGNhc2UgV2ViQ29yZTo6UmV0dXJuQ2FjaGVEYXRhRG9udExvYWQ6
CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6UmV0dXJuQ2FjaGVEYXRhRG9udExvYWQ7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBOZXR3b3JrUmVxdWVzdDo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeTsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgTmV0d29ya1JlcXVlc3Q6OlRhcmdldFR5cGUgcGxhdGZvcm1UYXJnZXRU
eXBlRm9yUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgaWYg
KHJlcXVlc3QuaXNYTUxIVFRQUmVxdWVzdCgpKQorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVl
c3Q6OlRhcmdldElzWE1MSFRUUFJlcXVlc3Q7CisKKyAgICBzd2l0Y2ggKHJlcXVlc3QudGFyZ2V0
VHlwZSgpKSB7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzTWFpbkZyYW1lOgor
ICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzTWFpbkZyYW1lOworICAgIGNh
c2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1N1YmZyYW1lOgorICAgICAgICByZXR1cm4gTmV0
d29ya1JlcXVlc3Q6OlRhcmdldElzU3ViZnJhbWU7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6
OlRhcmdldElzU3VicmVzb3VyY2U6CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFy
Z2V0SXNTdWJyZXNvdXJjZTsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTdHls
ZVNoZWV0OgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU3R5bGVTaGVl
dDsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTY3JpcHQ6CisgICAgICAgIHJl
dHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTY3JpcHQ7CisgICAgY2FzZSBSZXNvdXJjZVJl
cXVlc3Q6OlRhcmdldElzRm9udFJlc291cmNlOgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVl
c3Q6OlRhcmdldElzRm9udFJlc291cmNlOworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJn
ZXRJc0ltYWdlOgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzSW1hZ2U7
CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzT2JqZWN0OgorICAgICAgICByZXR1
cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzT2JqZWN0OworICAgIGNhc2UgUmVzb3VyY2VSZXF1
ZXN0OjpUYXJnZXRJc01lZGlhOgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdl
dElzTWVkaWE7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzV29ya2VyOgorICAg
ICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzV29ya2VyOworICAgIGNhc2UgUmVz
b3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1NoYXJlZFdvcmtlcjoKKyAgICAgICAgcmV0dXJuIE5ldHdv
cmtSZXF1ZXN0OjpUYXJnZXRJc1NoYXJlZFdvcmtlcjsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJn
ZXRJc1Vua25vd247CisgICAgfQorfQorCit2b2lkIFJlc291cmNlUmVxdWVzdDo6aW5pdGlhbGl6
ZVBsYXRmb3JtUmVxdWVzdChOZXR3b3JrUmVxdWVzdCYgcGxhdGZvcm1SZXF1ZXN0LCBib29sIGlz
SW5pdGlhbCkgY29uc3QKK3sKKyAgICAvLyBpZiB0aGlzIGlzIHRoZSBpbml0aWFsIGxvYWQsIHNr
aXAgdGhlIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycworICAgIGlmIChpc0luaXRpYWwpCisgICAg
ICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRSZXF1ZXN0SW5pdGlhbCh0aW1lb3V0SW50ZXJ2YWwoKSk7
CisgICAgZWxzZSB7CisgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXRSZXF1ZXN0VXJsKHVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgaHR0cE1ldGhvZCgpLmxh
dGluMSgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybUNhY2hlUG9saWN5Rm9yUmVx
dWVzdCgqdGhpcyksCisgICAgICAgICAgICAgICAgcGxhdGZvcm1UYXJnZXRUeXBlRm9yUmVxdWVz
dCgqdGhpcyksCisgICAgICAgICAgICAgICAgdGltZW91dEludGVydmFsKCkpOworCisgICAgICAg
IGlmIChodHRwQm9keSgpICYmICFodHRwQm9keSgpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+JiBlbGVtZW50cyA9IGh0dHBCb2R5KCktPmVs
ZW1lbnRzKCk7CisgICAgICAgICAgICAvLyB1c2Ugc2V0RGF0YSBmb3Igc2ltcGxlIGZvcm1zIGJl
Y2F1c2UgaXQgaXMgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQKKyAgICAgICAgICAgIGlmIChlbGVt
ZW50cy5zaXplKCkgPT0gMSAmJiBlbGVtZW50c1swXS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50
OjpkYXRhKQorICAgICAgICAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXREYXRhKGVsZW1lbnRz
WzBdLm1fZGF0YS5kYXRhKCksIGVsZW1lbnRzWzBdLm1fZGF0YS5zaXplKCkpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1l
bnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1EYXRhRWxl
bWVudCYgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoZWxl
bWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZE11bHRpcGFydERhdGEoZWxlbWVudC5tX2RhdGEuZGF0
YSgpLCBlbGVtZW50Lm1fZGF0YS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZE11bHRpcGFydEZpbGVuYW1lKGVs
ZW1lbnQubV9maWxlbmFtZS5jaGFyYWN0ZXJzKCksIGVsZW1lbnQubV9maWxlbmFtZS5sZW5ndGgo
KSk7CisjaWYgRU5BQkxFKEJMT0IpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1l
bnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEJsb2IpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBibG9iIG5vdyEKKyNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgLy8gdW5rbm93biB0eXBlCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOworICAgICAgICAgICAg
ICAgIGl0ICE9IGh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgICAgICAgICArK2l0
KQorICAgICAgICB7CisgICAgICAgICAgICBXVEY6OlN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICBXVEY6OlN0cmluZyB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBp
ZiAoIWtleS5pc0VtcHR5KCkgJiYgIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBw
bGF0Zm9ybVJlcXVlc3QuYWRkSGVhZGVyKGtleS5sYXRpbjEoKS5kYXRhKCksIHZhbHVlLmxhdGlu
MSgpLmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBMb2NhbGUgaGFzIHRoZSBmb3Jt
ICJlbi1VUyIuIENvbnN0cnVjdCBhY2NlcHQgbGFuZ3VhZ2UgbGlrZSAiZW4tVVMsIGVuO3E9MC44
Ii4KKyAgICAgICAgc3RkOjpzdHJpbmcgbG9jYWxlID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNs
aWVudDo6Z2V0KCktPmdldExvY2FsZSgpOworICAgICAgICAvLyBQT1NJWCBsb2NhbGUgaGFzICdf
JyBpbnN0ZWFkIG9mICctJy4KKyAgICAgICAgLy8gUmVwbGFjZSB0byBjb25mb3JtIHRvIEhUVFAg
c3BlYy4KKyAgICAgICAgc2l6ZV90IHVuZGVyc2NvcmUgPSBsb2NhbGUuZmluZCgnXycpOworICAg
ICAgICBpZiAodW5kZXJzY29yZSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgICAgIGxv
Y2FsZS5yZXBsYWNlKHVuZGVyc2NvcmUsIDEsICItIik7CisgICAgICAgIHN0ZDo6c3RyaW5nIGFj
Y2VwdExhbmd1YWdlID0gbG9jYWxlICsgIiwgIiArIGxvY2FsZS5zdWJzdHIoMCwgMikgKyAiO3E9
MC44IjsKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZEhlYWRlcigiQWNjZXB0LUxhbmd1YWdl
IiwgYWNjZXB0TGFuZ3VhZ2UuY19zdHIoKSk7CisgICAgfQorfQorCitQYXNzT3duUHRyPENyb3Nz
VGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gUmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRmb3JtQ29w
eURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGRhdGEpIGNv
bnN0Cit7CisgICAgZGF0YS0+bV90b2tlbiA9IG1fdG9rZW47CisgICAgZGF0YS0+bV9hbmNob3JU
ZXh0ID0gbV9hbmNob3JUZXh0OworICAgIGRhdGEtPm1faXNYTUxIVFRQUmVxdWVzdCA9IG1faXNY
TUxIVFRQUmVxdWVzdDsKKyAgICBkYXRhLT5tX211c3RIYW5kbGVJbnRlcm5hbGx5ID0gbV9tdXN0
SGFuZGxlSW50ZXJuYWxseTsKKyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBSZXNvdXJjZVJl
cXVlc3Q6OmRvUGxhdGZvcm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1
ZXN0RGF0YT4gZGF0YSkKK3sKKyAgICBtX3Rva2VuID0gZGF0YS0+bV90b2tlbjsKKyAgICBtX2Fu
Y2hvclRleHQgPSBkYXRhLT5tX2FuY2hvclRleHQ7CisgICAgbV9pc1hNTEhUVFBSZXF1ZXN0ID0g
ZGF0YS0+bV9pc1hNTEhUVFBSZXF1ZXN0OworICAgIG1fbXVzdEhhbmRsZUludGVybmFsbHkgPSBk
YXRhLT5tX211c3RIYW5kbGVJbnRlcm5hbGx5OworICAgIG1fZm9yY2VEb3dubG9hZCA9IGRhdGEt
Pm1fZm9yY2VEb3dubG9hZDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVz
cG9uc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNv
dXJjZVJlc3BvbnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzNzM5
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFJlc291cmNlUmVzcG9u
c2VfaAorI2RlZmluZSBSZXNvdXJjZVJlc3BvbnNlX2gKKworI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2VCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VSZXNw
b25zZSA6IHB1YmxpYyBSZXNvdXJjZVJlc3BvbnNlQmFzZSB7CitwdWJsaWM6CisgICAgUmVzb3Vy
Y2VSZXNwb25zZSgpCisgICAgICAgIDogbV9pc1dNTChmYWxzZSkKKyAgICB7CisgICAgfQorCisg
ICAgUmVzb3VyY2VSZXNwb25zZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdO
YW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorICAgICAgICA6IFJlc291cmNlUmVzcG9uc2VC
YXNlKHVybCwgbWltZVR5cGUsIGV4cGVjdGVkTGVuZ3RoLCB0ZXh0RW5jb2RpbmdOYW1lLCBmaWxl
bmFtZSkKKyAgICAgICAgLCBtX2lzTXVsdGlwYXJ0UGF5bG9hZChmYWxzZSkKKyAgICAgICAgLCBt
X2lzV01MKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldElzV01MKGJvb2wgaXNX
TUwpIHsgbV9pc1dNTCA9IGlzV01MOyB9CisgICAgYm9vbCBpc1dNTCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNXTUw7IH0KKworICAgIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNl
RGF0YT4gZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
c3BvbnNlRGF0YT4pIGNvbnN0OworICAgIHZvaWQgZG9QbGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8
Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4pOworCisgICAgdm9pZCBzZXRJc011bHRp
cGFydFBheWxvYWQoYm9vbCB2YWx1ZSkgeyBtX2lzTXVsdGlwYXJ0UGF5bG9hZCA9IHZhbHVlOyB9
CisgICAgYm9vbCBpc011bHRpcGFydFBheWxvYWQoKSBjb25zdCB7IHJldHVybiBtX2lzTXVsdGlw
YXJ0UGF5bG9hZDsgfQorcHJpdmF0ZToKKyAgICBib29sIG1faXNNdWx0aXBhcnRQYXlsb2FkOwor
ICAgIGJvb2wgbV9pc1dNTDsKKworfTsKKworc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNw
b25zZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2Ugewor
ICAgIGJvb2wgbV9pc1dNTDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFJlc291cmNlUmVzcG9uc2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2VCbGFja0JlcnJ5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNl
QmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NmM1
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxh
Y2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSwzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1Bhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gUmVzb3VyY2VS
ZXNwb25zZTo6ZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlc3BvbnNlRGF0YT4gZGF0YSkgY29uc3QKK3sKKyAgICBkYXRhLT5tX2lzV01MID0gbV9pc1dN
TDsKKyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpkb1BsYXRm
b3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBkYXRh
KQoreworICAgIG1faXNXTUwgPSBkYXRhLT5tX2lzV01MOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0tIAoxLjcuNS40Cgo=
</data>
<flag name="review"
          id="117649"
          type_id="1"
          status="-"
          setter="rwlbuis"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118302</attachid>
            <date>2011-12-07 18:26:24 -0800</date>
            <delta_ts>2011-12-07 18:48:36 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>0001-Upstream-the-BlackBerry-porting-of-network-Resource.patch</filename>
            <type>text/plain</type>
            <size>28998</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSBhODBiODdhNGJjMGE5ZDY0MmE0ZmIxOTcyMGViZTBlYzA5MGEwNGQ3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBXZWQsIDMwIE5vdiAyMDExIDEyOjEyOjUzICswODAwClN1YmplY3Q6IFtQQVRDSF0g
VXBzdHJlYW0gdGhlIEJsYWNrQmVycnkgcG9ydGluZyBvZiBuZXR3b3JrIFJlc291cmNlCiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzODgKClJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKT3RoZXIgbWFpbiBjb250cmlidXRvcnM6CkpvZSBNYXNvbiA8am1hc29u
QHJpbS5jb20+CllvbmcgTGkgIDx5b2xpQHJpbS5jb20+CkdhcnkgU2ltbW9ucyAgPGdzaW1tb25z
QHJpbS5jb20+CkdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNvbT4KQ2hyaXMgR3VhbiA8Y2hyaXMu
Z3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Ck1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5j
b20+CgpJbml0aWFsIHVwc3RyZWFtLCBjYW4ndCBiZSBidWlsdCB5ZXQsIG5vIG5ldyB0ZXN0cy4K
CiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaDogQWRkZWQuCiog
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5LmNwcDog
QWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tC
ZXJyeS5jcHA6IEFkZGVkLgoqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
cXVlc3QuaDogQWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVx
dWVzdEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZS5oOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwOiBBZGRlZC4KLS0tCiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKysrCiAuLi4vcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaCAgICB8ICAgNDQgKysrKysK
IC4uLi9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNrQmVycnkuY3BwIHwgICAy
NyArKysKIC4uLi9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAgICAgICAg
IHwgIDE5NiArKysrKysrKysrKysrKysrKysrKwogLi4uL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlcXVlc3QuaCAgfCAgMTI3ICsrKysrKysrKysrKysKIC4uLi9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwICAgICAgIHwgIDE1NyArKysrKysrKysr
KysrKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2Uu
aCB8ICAgNjAgKysrKysrCiAuLi4vYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJy
eS5jcHAgICAgICB8ICAgMzUgKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA2NzEgaW5zZXJ0aW9ucygr
KSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJy
b3JCbGFja0JlcnJ5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVzcG9uc2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5j
cHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggM2FlOGI1MS4uYzBlNDdkYyAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDExLTExLTI5ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5j
bj4KKworICAgICAgICBVcHN0cmVhbSB0aGUgQmxhY2tCZXJyeSBwb3J0aW5nIG9mIG5ldHdvcmsg
UmVzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTczMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
T3RoZXIgbWFpbiBjb250cmlidXRvcnM6CisgICAgICAgIEpvZSBNYXNvbiA8am1hc29uQHJpbS5j
b20+CisgICAgICAgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisgICAgICAgIEdhcnkgU2ltbW9u
cyAgPGdzaW1tb25zQHJpbS5jb20+CisgICAgICAgIEdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNv
bT4KKyAgICAgICAgQ2hyaXMgR3VhbiA8Y2hyaXMuZ3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Cisg
ICAgICAgIE1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5jb20+CisKKyAgICAgICAgSW5p
dGlhbCB1cHN0cmVhbSwgY2FuJ3QgYmUgYnVpbHQgeWV0LCBubyBuZXcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNr
QmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
c3BvbnNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorCiAyMDExLTEyLTA3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBSZXBs
YWNlIGJvb2wgYXJncyBpbiBJREJLZXlSYW5nZSBwcml2YXRlIG1ldGhvZHMgd2l0aCBlbnVtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVz
b3VyY2VFcnJvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlRXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjM3
N2RhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgUmVzb3VyY2VFcnJvcl9oCisjZGVm
aW5lIFJlc291cmNlRXJyb3JfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvckJhc2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZUVycm9yIDogcHVibGljIFJlc291
cmNlRXJyb3JCYXNlIHsKK3B1YmxpYzoKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBo
dHRwRXJyb3JEb21haW47CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHBsYXRmb3JtRXJy
b3JEb21haW47CisKKyAgICBSZXNvdXJjZUVycm9yKCkKKyAgICB7CisgICAgfQorCisgICAgUmVz
b3VyY2VFcnJvcihjb25zdCBTdHJpbmcmIGRvbWFpbiwgaW50IGVycm9yQ29kZSwgY29uc3QgU3Ry
aW5nJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uKQorICAg
ICAgICA6IFJlc291cmNlRXJyb3JCYXNlKGRvbWFpbiwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBs
b2NhbGl6ZWREZXNjcmlwdGlvbikKKyAgICB7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VFcnJvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNrQmVy
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291
cmNlRXJyb3JCbGFja0JlcnJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iZDI2YWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5LmNwcApAQCAtMCwwICsxLDI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY29uc3QgY2hhciogY29uc3QgUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yRG9tYWluID0g
IkhUVFAiOworY29uc3QgY2hhciogY29uc3QgUmVzb3VyY2VFcnJvcjo6cGxhdGZvcm1FcnJvckRv
bWFpbiA9ICJCbGFja0JlcnJ5UGxhdGZvcm0iOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVz
b3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NjM0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VIYW5kbGVCbGFja0Jl
cnJ5LmNwcApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGUuaCIKKworI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmgiCisjaW5jbHVkZSAiTmV0d29y
a01hbmFnZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIgLy8gZm9yIFN0b3JlZENyZWRlbnRpYWxzCisK
KyNpbmNsdWRlIDxuZXR3b3JrL0ZpbHRlclN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciA6IHB1YmxpYyBSZXNvdXJjZUhhbmRs
ZUNsaWVudCB7CitwdWJsaWM6CisgICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VF
cnJvciYpOworCisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNvdXJjZVJlc3BvbnNlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXNwb25zZTsgfQorICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KKyAgICBWZWN0b3I8Y2hhcj4gZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIGJvb2wgaXNEb25lKCkgY29uc3QgeyByZXR1cm4gbV9p
c0RvbmU7IH0KKworcHJpdmF0ZToKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Cisg
ICAgUmVzb3VyY2VFcnJvciBtX2Vycm9yOworICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAg
Ym9vbCBtX2lzRG9uZTsKK307CisKK1dlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6V2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyKCkKKyAgICA6IG1faXNEb25lKGZhbHNlKQoreworfQorCit2b2lkIFdl
YkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgbV9yZXNwb25zZSA9
IHJlc3BvbnNlOworfQorCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2
ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQp
Cit7CisgICAgbV9kYXRhLmFwcGVuZChkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFdlYkNvcmVT
eW5jaHJvbm91c0xvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJs
ZSkKK3sKKyAgICBtX2lzRG9uZSA9IHRydWU7Cit9CisKK3ZvaWQgV2ViQ29yZVN5bmNocm9ub3Vz
TG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCit7CisgICAgbV9lcnJvciA9IGVycm9yOworICAgIG1faXNEb25lID0gdHJ1ZTsKK30KKwor
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Jlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6Omxv
YWRzQmxvY2tlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29s
IGRlZmVyc0xvYWRpbmcpCit7CisgICAgTmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnNldERl
ZmVyc0xvYWRpbmcodGhpcywgZGVmZXJzTG9hZGluZyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5k
bGU6OnN0YXJ0KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIGlmICghY29udGV4
dCB8fCAhY29udGV4dC0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBGSVhNRTogY2xlYW4gdXAgdXNlIG9mIEZyYW1lIG5vdyB0aGF0IHdlIGhhdmUgTmV0d29ya2lu
Z0NvbnRleHQgKHNlZSBSSU0gQnVnICMxNTE1KQorICAgIEZyYW1lKiBmcmFtZSA9IGNvbnRleHQt
PndyYXBwZWRGcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5sb2FkZXIoKSB8fCAh
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSB8fCAhY2xpZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpbnQgcGxheWVySWQgPSBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJs
YWNrQmVycnkqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+cGxheWVySWQoKTsKKyAgICBy
ZXR1cm4gTmV0d29ya01hbmFnZXI6Omluc3RhbmNlKCktPnN0YXJ0Sm9iKHBsYXllcklkLCB0aGlz
LCAqZnJhbWUsIGQtPm1fZGVmZXJzTG9hZGluZyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6
OnN1cHBvcnRzQnVmZmVyZWREYXRhKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGF1c2VMb2FkKGJvb2wgcGF1
c2UpCit7CisgICAgaWYgKE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpKQorICAgICAgICBOZXR3
b3JrTWFuYWdlcjo6aW5zdGFuY2UoKS0+cGF1c2VMb2FkKHRoaXMsIHBhdXNlKTsKK30KKworYm9v
bCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiwgRnJh
bWUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQoreworICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0
YW5jZSgpLT5zdG9wSm9iKHRoaXMpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sK
KyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPmlzVmFsaWQoKSkgeworICAgICAgICBBU1NF
UlQoZmFsc2UgJiYgImxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkgY2FsbGVkIHdpdGggaW52YWxp
ZCBuZXR3b3JraW5nIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IEZJWE1FOiBjbGVhbiB1cCB1c2Ugb2YgRnJhbWUgbm93IHRoYXQgd2UgaGF2ZSBOZXR3b3JraW5n
Q29udGV4dCAoc2VlIFJJTSBCdWcgIzE1MTUpCisgICAgRnJhbWUqIGZyYW1lID0gY29udGV4dC0+
d3JhcHBlZEZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmxvYWRlcigpIHx8ICFm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpIHx8ICFmcmFtZS0+cGFnZSgpKSB7CisgICAgICAgIEFT
U0VSVChmYWxzZSAmJiAibG9hZFJlc291cmNlU3luY2hyb25vdXNseSBjYWxsZWQgd2l0aG91dCBh
IGZyYW1lIG9yIGZyYW1lIGNsaWVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UGFnZUdyb3VwTG9hZERlZmVycmVyIGRlZmVycmVyKGZyYW1lLT5wYWdlKCksIHRydWUpOworICAg
IFRpbWVyQmFzZTo6ZmlyZVRpbWVyc0luTmVzdGVkRXZlbnRMb29wKCk7CisKKyAgICBpbnQgcGxh
eWVySWQgPSBzdGF0aWNfY2FzdDxGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkqPihmcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpKS0+cGxheWVySWQoKTsKKworICAgIFdlYkNvcmVTeW5jaHJvbm91
c0xvYWRlciBzeW5jTG9hZGVyOworCisgICAgYm9vbCBkZWZlcnNMb2FkaW5nID0gZmFsc2U7Cisg
ICAgYm9vbCBzaG91bGRDb250ZW50U25pZmYgPSBmYWxzZTsKKworICAgIFJlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKHJlcXVlc3QsICZz
eW5jTG9hZGVyLCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYpKTsKKyAgICBOZXR3
b3JrTWFuYWdlcjo6aW5zdGFuY2UoKS0+c3RhcnRKb2IocGxheWVySWQsIGhhbmRsZSwgKmZyYW1l
LCBkZWZlcnNMb2FkaW5nKTsKKworICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc19zeW5jTG9hZFRp
bWVPdXQgPSA2MC4wOyAvLyBzZWNvbmRzCisKKyAgICBkb3VibGUgc3RhcnRUaW1lID0gY3VycmVu
dFRpbWUoKTsKKyAgICBFdmVudExvb3AgbG9vcDsKKyAgICB3aGlsZSAoIXN5bmNMb2FkZXIuaXNE
b25lKCkgJiYgIWxvb3AuZW5kZWQoKSkgeworICAgICAgICBsb29wLmN5Y2xlKCk7CisgICAgICAg
IGlmIChjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1lID4gc19zeW5jTG9hZFRpbWVPdXQpIHsKKyAg
ICAgICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7CisgICAgICAgICAgICBlcnJvciA9IFJlc291cmNl
RXJyb3IoUmVzb3VyY2VFcnJvcjo6cGxhdGZvcm1FcnJvckRvbWFpbiwgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkZpbHRlclN0cmVhbTo6U3RhdHVzTmV0d29ya0Vycm9yLCByZXF1ZXN0LnVybCgpLnN0
cmluZygpLCAiVGltZSBvdXQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGVycm9yID0gc3luY0xvYWRlci5yZXNvdXJjZUVycm9yKCk7CisgICAgZGF0YSA9
IHN5bmNMb2FkZXIuZGF0YSgpOworICAgIHJlc3BvbnNlID0gc3luY0xvYWRlci5yZXNvdXJjZVJl
c3BvbnNlKCk7Cit9CisKK1dURjo6UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFu
ZGxlOjpidWZmZXJlZERhdGEoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE2NDk0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNl
UmVxdWVzdC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgUmVzb3VyY2VSZXF1ZXN0X2gKKyNkZWZpbmUgUmVz
b3VyY2VSZXF1ZXN0X2gKKworI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdEJhc2UuaCIKKworbmFt
ZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIE5ldHdvcmtS
ZXF1ZXN0OworfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlc291cmNlUmVx
dWVzdCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVlc3RCYXNlIHsKK3B1YmxpYzoKKyAgICBSZXNvdXJj
ZVJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFz
ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAg
ICAgICAgLCBtX2lzWE1MSFRUUFJlcXVlc3QoZmFsc2UpCisgICAgICAgICwgbV9tdXN0SGFuZGxl
SW50ZXJuYWxseShmYWxzZSkKKyAgICAgICAgLCBtX2lzUmVxdWVzdGVkQnlQbHVnaW4oZmFsc2Up
CisgICAgICAgICwgbV9mb3JjZURvd25sb2FkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBS
ZXNvdXJjZVJlcXVlc3QoY29uc3QgS1VSTCYgdXJsKQorICAgICAgICA6IFJlc291cmNlUmVxdWVz
dEJhc2UodXJsLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAsIG1faXNYTUxIVFRQ
UmVxdWVzdChmYWxzZSkKKyAgICAgICAgLCBtX211c3RIYW5kbGVJbnRlcm5hbGx5KGZhbHNlKQor
ICAgICAgICAsIG1faXNSZXF1ZXN0ZWRCeVBsdWdpbihmYWxzZSkKKyAgICAgICAgLCBtX2ZvcmNl
RG93bmxvYWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdChjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIFJlc291cmNlUmVxdWVzdENhY2hl
UG9saWN5IHBvbGljeSA9IFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgIDogUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSh1cmwsIHBvbGljeSkKKyAgICAgICAgLCBtX2lzWE1MSFRUUFJlcXVlc3Qo
ZmFsc2UpCisgICAgICAgICwgbV9tdXN0SGFuZGxlSW50ZXJuYWxseShmYWxzZSkKKyAgICAgICAg
LCBtX2lzUmVxdWVzdGVkQnlQbHVnaW4oZmFsc2UpCisgICAgICAgICwgbV9mb3JjZURvd25sb2Fk
KGZhbHNlKQorICAgIHsKKyAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKKyAgICB9
CisKKyAgICBSZXNvdXJjZVJlcXVlc3QoKQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2Uo
S1VSTCgpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAsIG1faXNYTUxIVFRQUmVx
dWVzdChmYWxzZSkKKyAgICAgICAgLCBtX211c3RIYW5kbGVJbnRlcm5hbGx5KGZhbHNlKQorICAg
ICAgICAsIG1faXNSZXF1ZXN0ZWRCeVBsdWdpbihmYWxzZSkKKyAgICAgICAgLCBtX2ZvcmNlRG93
bmxvYWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0VG9rZW4oY29uc3QgU3Ry
aW5nJiB0b2tlbikgeyBtX3Rva2VuID0gdG9rZW47IH0KKyAgICBTdHJpbmcgdG9rZW4oKSBjb25z
dCB7IHJldHVybiBtX3Rva2VuOyB9CisKKyAgICAvLyBGSVhNRTogRm9yIFJJTSBCdWcgIzQ1Mi4g
VGhlIEJsYWNrQmVycnkgYXBwbGljYXRpb24gd2FudHMgdGhlIGFuY2hvciB0ZXh0IGZvciBhIGNs
aWNrZWQgaHlwZXJsaW5rIHNvIGFzIHRvCisgICAgLy8gbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lv
biBhcyB0byB3aGV0aGVyIHRvIGFsbG93IHRoZSBuYXZpZ2F0aW9uLiBXZSBzaG91bGQgbW92ZSB0
aGlzIGZ1bmN0aW9uYWxpdHkgaW50byBhCisgICAgLy8gVUkvUG9saWN5IGRlbGVnYXRlLgorICAg
IHZvaWQgc2V0QW5jaG9yVGV4dChjb25zdCBTdHJpbmcmIGFuY2hvclRleHQpIHsgbV9hbmNob3JU
ZXh0ID0gYW5jaG9yVGV4dDsgfQorICAgIFN0cmluZyBhbmNob3JUZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9hbmNob3JUZXh0OyB9CisKKyAgICB2b2lkIHNldE92ZXJyaWRlQ29udGVudFR5cGUoY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSkgeyBtX292ZXJyaWRlQ29udGVudFR5cGUgPSBjb250ZW50
VHlwZTsgfQorICAgIFN0cmluZyBvdmVycmlkZUNvbnRlbnRUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9vdmVycmlkZUNvbnRlbnRUeXBlOyB9CisKKyAgICB2b2lkIHNldElzWE1MSFRUUFJlcXVlc3Qo
Ym9vbCBpc1hNTEhUVFBSZXF1ZXN0KSB7IG1faXNYTUxIVFRQUmVxdWVzdCA9IGlzWE1MSFRUUFJl
cXVlc3Q7IH0KKyAgICBib29sIGlzWE1MSFRUUFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2lz
WE1MSFRUUFJlcXVlc3Q7IH0KKworICAgIHZvaWQgc2V0SXNSZXF1ZXN0ZWRCeVBsdWdpbihib29s
IGlzUmVxdWVzdGVkQnlQbHVnaW4pIHsgbV9pc1JlcXVlc3RlZEJ5UGx1Z2luID0gaXNSZXF1ZXN0
ZWRCeVBsdWdpbjsgfQorICAgIGJvb2wgaXNSZXF1ZXN0ZWRCeVBsdWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZXF1ZXN0ZWRCeVBsdWdpbjsgfQorCisgICAgLy8gTWFya3MgcmVxdWVzdHMgd2hp
Y2ggbXVzdCBiZSBoYW5kbGVkIGJ5IHdlYmtpdCBldmVuIGlmIExpbmtzSGFuZGxlZEV4dGVybmFs
bHkgaXMgc2V0LgorICAgIHZvaWQgc2V0TXVzdEhhbmRsZUludGVybmFsbHkoYm9vbCBtdXN0SGFu
ZGxlSW50ZXJuYWxseSkgeyBtX211c3RIYW5kbGVJbnRlcm5hbGx5ID0gbXVzdEhhbmRsZUludGVy
bmFsbHk7IH0KKyAgICBib29sIG11c3RIYW5kbGVJbnRlcm5hbGx5KCkgY29uc3QgeyByZXR1cm4g
bV9tdXN0SGFuZGxlSW50ZXJuYWxseTsgfQorCisgICAgdm9pZCBpbml0aWFsaXplUGxhdGZvcm1S
ZXF1ZXN0KEJsYWNrQmVycnk6OlBsYXRmb3JtOjpOZXR3b3JrUmVxdWVzdCYsIGJvb2wgaXNJbml0
aWFsID0gZmFsc2UpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9yY2VEb3dubG9hZChib29sIGZvcmNl
RG93bmxvYWQpIHsgbV9mb3JjZURvd25sb2FkID0gdHJ1ZTsgfQorICAgIGJvb2wgZm9yY2VEb3du
bG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9yY2VEb3dubG9hZDsgfQorCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNlOworCisgICAgU3RyaW5nIG1fdG9rZW47
CisgICAgU3RyaW5nIG1fYW5jaG9yVGV4dDsKKyAgICBTdHJpbmcgbV9vdmVycmlkZUNvbnRlbnRU
eXBlOworICAgIGJvb2wgbV9pc1hNTEhUVFBSZXF1ZXN0OworICAgIGJvb2wgbV9tdXN0SGFuZGxl
SW50ZXJuYWxseTsKKyAgICBib29sIG1faXNSZXF1ZXN0ZWRCeVBsdWdpbjsKKyAgICBib29sIG1f
Zm9yY2VEb3dubG9hZDsKKworICAgIHZvaWQgZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKSB7IH0K
KyAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCkgeyB9CisKKyAgICBQYXNzT3duUHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NP
d25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPikgY29uc3Q7CisgICAgdm9pZCBk
b1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+
KTsKKworfTsKKworc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YSA6IHB1Ymxp
YyBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGFCYXNlIHsKKyAgICBTdHJpbmcgbV90b2tl
bjsKKyAgICBTdHJpbmcgbV9hbmNob3JUZXh0OworICAgIGJvb2wgbV9pc1hNTEhUVFBSZXF1ZXN0
OworICAgIGJvb2wgbV9tdXN0SGFuZGxlSW50ZXJuYWxseTsKKyAgICBib29sIG1faXNSZXF1ZXN0
ZWRCeVBsdWdpbjsKKyAgICBib29sIG1fZm9yY2VEb3dubG9hZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlc291cmNlUmVxdWVzdF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0
QmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVy
cnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNGQ1NWZhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcApA
QCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCisKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1DbGllbnQuaD4KKyNpbmNsdWRl
IDxuZXR3b3JrL05ldHdvcmtSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCit1c2luZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordW5zaWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlv
bkNvdW50UGVySG9zdCgpCit7CisgICAgcmV0dXJuIDY7Cit9CisKK3N0YXRpYyBpbmxpbmUgTmV0
d29ya1JlcXVlc3Q6OkNhY2hlUG9saWN5IHBsYXRmb3JtQ2FjaGVQb2xpY3lGb3JSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBzd2l0Y2ggKHJlcXVlc3QuY2Fj
aGVQb2xpY3koKSkgeworICAgIGNhc2UgV2ViQ29yZTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeToK
KyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9saWN5Owor
ICAgIGNhc2UgV2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE6CisgICAgICAgIHJldHVy
biBOZXR3b3JrUmVxdWVzdDo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE7CisgICAgY2FzZSBXZWJD
b3JlOjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1
ZXN0OjpSZXR1cm5DYWNoZURhdGFFbHNlTG9hZDsKKyAgICBjYXNlIFdlYkNvcmU6OlJldHVybkNh
Y2hlRGF0YURvbnRMb2FkOgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlJldHVybkNh
Y2hlRGF0YURvbnRMb2FkOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xp
Y3k7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRUeXBl
IHBsYXRmb3JtVGFyZ2V0VHlwZUZvclJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIGlmIChyZXF1ZXN0LmlzWE1MSFRUUFJlcXVlc3QoKSkKKyAgICAgICAgcmV0
dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1hNTEhUVFBSZXF1ZXN0OworCisgICAgc3dpdGNo
IChyZXF1ZXN0LnRhcmdldFR5cGUoKSkgeworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJn
ZXRJc01haW5GcmFtZToKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc01h
aW5GcmFtZTsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTdWJmcmFtZToKKyAg
ICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1N1YmZyYW1lOworICAgIGNhc2Ug
UmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1N1YnJlc291cmNlOgorICAgICAgICByZXR1cm4gTmV0
d29ya1JlcXVlc3Q6OlRhcmdldElzU3VicmVzb3VyY2U7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVl
c3Q6OlRhcmdldElzU3R5bGVTaGVldDoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpU
YXJnZXRJc1N0eWxlU2hlZXQ7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU2Ny
aXB0OgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU2NyaXB0OworICAg
IGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc0ZvbnRSZXNvdXJjZToKKyAgICAgICAgcmV0
dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc0ZvbnRSZXNvdXJjZTsKKyAgICBjYXNlIFJlc291
cmNlUmVxdWVzdDo6VGFyZ2V0SXNJbWFnZToKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0
OjpUYXJnZXRJc0ltYWdlOworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc09iamVj
dDoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc09iamVjdDsKKyAgICBj
YXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNNZWRpYToKKyAgICAgICAgcmV0dXJuIE5ldHdv
cmtSZXF1ZXN0OjpUYXJnZXRJc01lZGlhOworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJn
ZXRJc1dvcmtlcjoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1dvcmtl
cjsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTaGFyZWRXb3JrZXI6CisgICAg
ICAgIHJldHVybiBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTaGFyZWRXb3JrZXI7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBOZXR3
b3JrUmVxdWVzdDo6VGFyZ2V0SXNVbmtub3duOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZVJl
cXVlc3Q6OmluaXRpYWxpemVQbGF0Zm9ybVJlcXVlc3QoTmV0d29ya1JlcXVlc3QmIHBsYXRmb3Jt
UmVxdWVzdCwgYm9vbCBpc0luaXRpYWwpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhpcyBpcyB0aGUg
aW5pdGlhbCBsb2FkLCBza2lwIHRoZSByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMuCisgICAgaWYg
KGlzSW5pdGlhbCkKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFJlcXVlc3RJbml0aWFsKHRp
bWVvdXRJbnRlcnZhbCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNl
dFJlcXVlc3RVcmwodXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAg
ICBodHRwTWV0aG9kKCkubGF0aW4xKCkuZGF0YSgpLAorICAgICAgICAgICAgICAgIHBsYXRmb3Jt
Q2FjaGVQb2xpY3lGb3JSZXF1ZXN0KCp0aGlzKSwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybVRh
cmdldFR5cGVGb3JSZXF1ZXN0KCp0aGlzKSwKKyAgICAgICAgICAgICAgICB0aW1lb3V0SW50ZXJ2
YWwoKSk7CisKKyAgICAgICAgaWYgKGh0dHBCb2R5KCkgJiYgIWh0dHBCb2R5KCktPmlzRW1wdHko
KSkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRz
ID0gaHR0cEJvZHkoKS0+ZWxlbWVudHMoKTsKKyAgICAgICAgICAgIC8vIFVzZSBzZXREYXRhIGZv
ciBzaW1wbGUgZm9ybXMgYmVjYXVzZSBpdCBpcyBzbGlnaHRseSBtb3JlIGVmZmljaWVudC4KKyAg
ICAgICAgICAgIGlmIChlbGVtZW50cy5zaXplKCkgPT0gMSAmJiBlbGVtZW50c1swXS5tX3R5cGUg
PT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQorICAgICAgICAgICAgICAgIHBsYXRmb3JtUmVxdWVz
dC5zZXREYXRhKGVsZW1lbnRzWzBdLm1fZGF0YS5kYXRhKCksIGVsZW1lbnRzWzBdLm1fZGF0YS5z
aXplKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZE11bHRpcGFydERhdGEo
ZWxlbWVudC5tX2RhdGEuZGF0YSgpLCBlbGVtZW50Lm1fZGF0YS5zaXplKCkpOworICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmVu
Y29kZWRGaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZE11
bHRpcGFydEZpbGVuYW1lKGVsZW1lbnQubV9maWxlbmFtZS5jaGFyYWN0ZXJzKCksIGVsZW1lbnQu
bV9maWxlbmFtZS5sZW5ndGgoKSk7CisjaWYgRU5BQkxFKEJMT0IpCisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEJs
b2IpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCBibG9iIG5vdyEKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gdW5rbm93biB0eXBlCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdp
bigpOyBpdCAhPSBodHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAg
IFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpICYmICF2YWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZEhlYWRlcihrZXkubGF0aW4x
KCkuZGF0YSgpLCB2YWx1ZS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gTG9jYWxlIGhhcyB0aGUgZm9ybSAiZW4tVVMiLiBDb25zdHJ1Y3QgYWNjZXB0IGxhbmd1YWdl
IGxpa2UgImVuLVVTLCBlbjtxPTAuOCIuCisgICAgICAgIHN0ZDo6c3RyaW5nIGxvY2FsZSA9IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpDbGllbnQ6OmdldCgpLT5nZXRMb2NhbGUoKTsKKyAgICAgICAg
Ly8gUE9TSVggbG9jYWxlIGhhcyAnXycgaW5zdGVhZCBvZiAnLScuCisgICAgICAgIC8vIFJlcGxh
Y2UgdG8gY29uZm9ybSB0byBIVFRQIHNwZWMuCisgICAgICAgIHNpemVfdCB1bmRlcnNjb3JlID0g
bG9jYWxlLmZpbmQoJ18nKTsKKyAgICAgICAgaWYgKHVuZGVyc2NvcmUgIT0gc3RkOjpzdHJpbmc6
Om5wb3MpCisgICAgICAgICAgICBsb2NhbGUucmVwbGFjZSh1bmRlcnNjb3JlLCAxLCAiLSIpOwor
ICAgICAgICBzdGQ6OnN0cmluZyBhY2NlcHRMYW5ndWFnZSA9IGxvY2FsZSArICIsICIgKyBsb2Nh
bGUuc3Vic3RyKDAsIDIpICsgIjtxPTAuOCI7CisgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5hZGRI
ZWFkZXIoIkFjY2VwdC1MYW5ndWFnZSIsIGFjY2VwdExhbmd1YWdlLmNfc3RyKCkpOworICAgIH0K
K30KKworUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IFJlc291cmNl
UmVxdWVzdDo6ZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlcXVlc3REYXRhPiBkYXRhKSBjb25zdAoreworICAgIGRhdGEtPm1fdG9rZW4gPSBtX3Rva2Vu
OworICAgIGRhdGEtPm1fYW5jaG9yVGV4dCA9IG1fYW5jaG9yVGV4dDsKKyAgICBkYXRhLT5tX2lz
WE1MSFRUUFJlcXVlc3QgPSBtX2lzWE1MSFRUUFJlcXVlc3Q7CisgICAgZGF0YS0+bV9tdXN0SGFu
ZGxlSW50ZXJuYWxseSA9IG1fbXVzdEhhbmRsZUludGVybmFsbHk7CisgICAgcmV0dXJuIGRhdGE7
Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxD
cm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IGRhdGEpCit7CisgICAgbV90b2tlbiA9IGRh
dGEtPm1fdG9rZW47CisgICAgbV9hbmNob3JUZXh0ID0gZGF0YS0+bV9hbmNob3JUZXh0OworICAg
IG1faXNYTUxIVFRQUmVxdWVzdCA9IGRhdGEtPm1faXNYTUxIVFRQUmVxdWVzdDsKKyAgICBtX211
c3RIYW5kbGVJbnRlcm5hbGx5ID0gZGF0YS0+bV9tdXN0SGFuZGxlSW50ZXJuYWxseTsKKyAgICBt
X2ZvcmNlRG93bmxvYWQgPSBkYXRhLT5tX2ZvcmNlRG93bmxvYWQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
YmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjM2MzczOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZS5oCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2lmbmRlZiBSZXNvdXJjZVJlc3BvbnNlX2gKKyNkZWZpbmUgUmVzb3VyY2VSZXNwb25zZV9oCisK
KyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlc291cmNlUmVzcG9uc2UgOiBwdWJsaWMgUmVzb3VyY2VSZXNwb25zZUJhc2Ug
eworcHVibGljOgorICAgIFJlc291cmNlUmVzcG9uc2UoKQorICAgICAgICA6IG1faXNXTUwoZmFs
c2UpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIGNvbnN0
IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKKyAgICAg
ICAgOiBSZXNvdXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0aCwg
dGV4dEVuY29kaW5nTmFtZSwgZmlsZW5hbWUpCisgICAgICAgICwgbV9pc011bHRpcGFydFBheWxv
YWQoZmFsc2UpCisgICAgICAgICwgbV9pc1dNTChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBzZXRJc1dNTChib29sIGlzV01MKSB7IG1faXNXTUwgPSBpc1dNTDsgfQorICAgIGJvb2wg
aXNXTUwoKSBjb25zdCB7IHJldHVybiBtX2lzV01MOyB9CisKKyAgICBQYXNzT3duUHRyPENyb3Nz
VGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+KSBjb25zdDsKKyAgICB2b2lkIGRvUGxh
dGZvcm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+KTsK
KworICAgIHZvaWQgc2V0SXNNdWx0aXBhcnRQYXlsb2FkKGJvb2wgdmFsdWUpIHsgbV9pc011bHRp
cGFydFBheWxvYWQgPSB2YWx1ZTsgfQorICAgIGJvb2wgaXNNdWx0aXBhcnRQYXlsb2FkKCkgY29u
c3QgeyByZXR1cm4gbV9pc011bHRpcGFydFBheWxvYWQ7IH0KK3ByaXZhdGU6CisgICAgYm9vbCBt
X2lzTXVsdGlwYXJ0UGF5bG9hZDsKKyAgICBib29sIG1faXNXTUw7CisKK307CisKK3N0cnVjdCBD
cm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXNwb25zZURhdGFCYXNlIHsKKyAgICBib29sIG1faXNXTUw7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZVJlc3BvbnNlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3Bv
bnNlQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNr
YmVycnkvUmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmFlNDZjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnku
Y3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXNwb25zZURhdGE+IFJlc291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3du
UHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0Cit7CisgICAg
ZGF0YS0+bV9pc1dNTCA9IG1faXNXTUw7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgUmVz
b3VyY2VSZXNwb25zZTo6ZG9QbGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlc3BvbnNlRGF0YT4gZGF0YSkKK3sKKyAgICBtX2lzV01MID0gZGF0YS0+bV9pc1dNTDsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMS43LjUuNAoK
</data>
<flag name="review"
          id="117999"
          type_id="1"
          status="-"
          setter="rwlbuis"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118306</attachid>
            <date>2011-12-07 18:48:36 -0800</date>
            <delta_ts>2011-12-07 18:58:54 -0800</delta_ts>
            <desc>Patch v4</desc>
            <filename>0001-Upstream-the-BlackBerry-porting-of-network-Resource.patch</filename>
            <type>text/plain</type>
            <size>28989</size>
            <attacher name="Leo Yang">leo.yang</attacher>
            
              <data encoding="base64">RnJvbSBjMmNmMjExYTVkNDg3OWYzODE4ZGRlZjhhM2E3NGFiMzExYWMxMzhmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMZW8gWWFuZyA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNu
PgpEYXRlOiBXZWQsIDMwIE5vdiAyMDExIDEyOjEyOjUzICswODAwClN1YmplY3Q6IFtQQVRDSF0g
VXBzdHJlYW0gdGhlIEJsYWNrQmVycnkgcG9ydGluZyBvZiBuZXR3b3JrIFJlc291cmNlCiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMzODgKClJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKT3RoZXIgbWFpbiBjb250cmlidXRvcnM6CkpvZSBNYXNvbiA8am1hc29u
QHJpbS5jb20+CllvbmcgTGkgIDx5b2xpQHJpbS5jb20+CkdhcnkgU2ltbW9ucyAgPGdzaW1tb25z
QHJpbS5jb20+CkdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNvbT4KQ2hyaXMgR3VhbiA8Y2hyaXMu
Z3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Ck1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5j
b20+CgpJbml0aWFsIHVwc3RyZWFtLCBjYW4ndCBiZSBidWlsdCB5ZXQsIG5vIG5ldyB0ZXN0cy4K
CiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaDogQWRkZWQuCiog
cGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5LmNwcDog
QWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tC
ZXJyeS5jcHA6IEFkZGVkLgoqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
cXVlc3QuaDogQWRkZWQuCiogcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVx
dWVzdEJsYWNrQmVycnkuY3BwOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZS5oOiBBZGRlZC4KKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwOiBBZGRlZC4KLS0tCiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKysrCiAuLi4vcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaCAgICB8ICAgNDMgKysrKysK
IC4uLi9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNrQmVycnkuY3BwIHwgICAy
NyArKysKIC4uLi9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAgICAgICAg
IHwgIDE5NiArKysrKysrKysrKysrKysrKysrKwogLi4uL3BsYXRmb3JtL25ldHdvcmsvYmxhY2ti
ZXJyeS9SZXNvdXJjZVJlcXVlc3QuaCAgfCAgMTI2ICsrKysrKysrKysrKysKIC4uLi9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwICAgICAgIHwgIDE1NyArKysrKysrKysr
KysrKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVzcG9uc2Uu
aCB8ICAgNjAgKysrKysrCiAuLi4vYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJy
eS5jcHAgICAgICB8ICAgMzUgKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA2NjkgaW5zZXJ0aW9ucygr
KSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJy
b3JCbGFja0JlcnJ5LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZUhhbmRsZUJsYWNrQmVycnkuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlUmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdEJsYWNrQmVycnkuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2Jl
cnJ5L1Jlc291cmNlUmVzcG9uc2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5j
cHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggM2FlOGI1MS4uYzBlNDdkYyAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDExLTExLTI5ICBMZW8gWWFuZyAgPGxlby55YW5nQHRvcmNobW9iaWxlLmNvbS5j
bj4KKworICAgICAgICBVcHN0cmVhbSB0aGUgQmxhY2tCZXJyeSBwb3J0aW5nIG9mIG5ldHdvcmsg
UmVzb3VyY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTczMzg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
T3RoZXIgbWFpbiBjb250cmlidXRvcnM6CisgICAgICAgIEpvZSBNYXNvbiA8am1hc29uQHJpbS5j
b20+CisgICAgICAgIFlvbmcgTGkgIDx5b2xpQHJpbS5jb20+CisgICAgICAgIEdhcnkgU2ltbW9u
cyAgPGdzaW1tb25zQHJpbS5jb20+CisgICAgICAgIEdlbmV2aWV2ZSBNYWsgPGdtYWtAcmltLmNv
bT4KKyAgICAgICAgQ2hyaXMgR3VhbiA8Y2hyaXMuZ3VhbkB0b3JjaG1vYmlsZS5jb20uY24+Cisg
ICAgICAgIE1pa2UgTGF0dGFuemlvIDxtbGF0dGFuemlvQHJpbS5jb20+CisKKyAgICAgICAgSW5p
dGlhbCB1cHN0cmVhbSwgY2FuJ3QgYmUgYnVpbHQgeWV0LCBubyBuZXcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvci5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VFcnJvckJsYWNr
QmVycnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkv
UmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHA6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJl
c3BvbnNlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9S
ZXNvdXJjZVJlc3BvbnNlQmxhY2tCZXJyeS5jcHA6IEFkZGVkLgorCiAyMDExLTEyLTA3ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBSZXBs
YWNlIGJvb2wgYXJncyBpbiBJREJLZXlSYW5nZSBwcml2YXRlIG1ldGhvZHMgd2l0aCBlbnVtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVz
b3VyY2VFcnJvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5
L1Jlc291cmNlRXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTVh
MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9i
bGFja2JlcnJ5L1Jlc291cmNlRXJyb3IuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgUmVzb3VyY2VFcnJvcl9oCisjZGVm
aW5lIFJlc291cmNlRXJyb3JfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvckJhc2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZUVycm9yIDogcHVibGljIFJlc291
cmNlRXJyb3JCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaHR0
cEVycm9yRG9tYWluOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBwbGF0Zm9ybUVycm9y
RG9tYWluOworCisgICAgUmVzb3VyY2VFcnJvcigpCisgICAgeworICAgIH0KKworICAgIFJlc291
cmNlRXJyb3IoY29uc3QgU3RyaW5nJiBkb21haW4sIGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbikKKyAgICAg
ICAgOiBSZXNvdXJjZUVycm9yQmFzZShkb21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9j
YWxpemVkRGVzY3JpcHRpb24pCisgICAgeworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFJlc291cmNlRXJyb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlRXJyb3JCbGFja0JlcnJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJj
ZUVycm9yQmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YmQyNmFiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvYmxhY2tiZXJyeS9SZXNvdXJjZUVycm9yQmxhY2tCZXJyeS5jcHAKQEAgLTAsMCArMSwyNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NvbnN0IGNoYXIqIGNvbnN0IFJlc291cmNlRXJyb3I6Omh0dHBFcnJvckRvbWFpbiA9ICJI
VFRQIjsKK2NvbnN0IGNoYXIqIGNvbnN0IFJlc291cmNlRXJyb3I6OnBsYXRmb3JtRXJyb3JEb21h
aW4gPSAiQmxhY2tCZXJyeVBsYXRmb3JtIjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291
cmNlSGFuZGxlQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2JsYWNrYmVycnkvUmVzb3VyY2VIYW5kbGVCbGFja0JlcnJ5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43NjA0OGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlSGFuZGxlQmxhY2tCZXJy
eS5jcHAKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCisKKyNpbmNsdWRlICJFdmVudExvb3AuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeS5oIgorI2luY2x1ZGUgIk5ldHdvcmtN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGFnZUdyb3VwTG9hZERlZmVycmVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VF
cnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiIC8vIGZvciBTdG9yZWRDcmVkZW50aWFscworCisj
aW5jbHVkZSA8bmV0d29yay9GaWx0ZXJTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVD
bGllbnQgeworcHVibGljOgorICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcigpOworCisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKKworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzb3VyY2VSZXNwb25zZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzcG9uc2U7IH0KKyAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoKSBj
b25zdCB7IHJldHVybiBtX2Vycm9yOyB9CisgICAgVmVjdG9yPGNoYXI+IGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX2RhdGE7IH0KKyAgICBib29sIGlzRG9uZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNE
b25lOyB9CisKK3ByaXZhdGU6CisgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAg
IFJlc291cmNlRXJyb3IgbV9lcnJvcjsKKyAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOworICAgIGJv
b2wgbV9pc0RvbmU7Cit9OworCitXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OldlYkNvcmVTeW5j
aHJvbm91c0xvYWRlcigpCisgICAgOiBtX2lzRG9uZShmYWxzZSkKK3sKK30KKwordm9pZCBXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIG1fcmVzcG9uc2UgPSBy
ZXNwb25zZTsKK30KKwordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVE
YXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50KQor
eworICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBXZWJDb3JlU3lu
Y2hyb25vdXNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUp
Cit7CisgICAgbV9pc0RvbmUgPSB0cnVlOworfQorCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xv
YWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQoreworICAgIG1fZXJyb3IgPSBlcnJvcjsKKyAgICBtX2lzRG9uZSA9IHRydWU7Cit9CisKK1Jl
c291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpsb2Fk
c0Jsb2NrZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9vbCBk
ZWZlcnNMb2FkaW5nKQoreworICAgIE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5zZXREZWZl
cnNMb2FkaW5nKHRoaXMsIGRlZmVyc0xvYWRpbmcpOworfQorCitib29sIFJlc291cmNlSGFuZGxl
OjpzdGFydChOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQg
fHwgIWNvbnRleHQtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
RklYTUU6IGNsZWFuIHVwIHVzZSBvZiBGcmFtZSBub3cgdGhhdCB3ZSBoYXZlIE5ldHdvcmtpbmdD
b250ZXh0IChzZWUgUklNIEJ1ZyAjMTUxNSkKKyAgICBGcmFtZSogZnJhbWUgPSBjb250ZXh0LT53
cmFwcGVkRnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+bG9hZGVyKCkgfHwgIWZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkgfHwgIWNsaWVudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaW50IHBsYXllcklkID0gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFj
a0JlcnJ5Kj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPnBsYXllcklkKCk7CisgICAgcmV0
dXJuIE5ldHdvcmtNYW5hZ2VyOjppbnN0YW5jZSgpLT5zdGFydEpvYihwbGF5ZXJJZCwgdGhpcywg
KmZyYW1lLCBkLT5tX2RlZmVyc0xvYWRpbmcpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpz
dXBwb3J0c0J1ZmZlcmVkRGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBhdXNlTG9hZChib29sIHBhdXNl
KQoreworICAgIGlmIChOZXR3b3JrTWFuYWdlcjo6aW5zdGFuY2UoKSkKKyAgICAgICAgTmV0d29y
a01hbmFnZXI6Omluc3RhbmNlKCktPnBhdXNlTG9hZCh0aGlzLCBwYXVzZSk7Cit9CisKK2Jvb2wg
UmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1l
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKK3sKKyAgICBOZXR3b3JrTWFuYWdlcjo6aW5zdGFu
Y2UoKS0+c3RvcEpvYih0aGlzKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJy
b3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7Cisg
ICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJU
KGZhbHNlICYmICJsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5IGNhbGxlZCB3aXRoIGludmFsaWQg
bmV0d29ya2luZyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBG
SVhNRTogY2xlYW4gdXAgdXNlIG9mIEZyYW1lIG5vdyB0aGF0IHdlIGhhdmUgTmV0d29ya2luZ0Nv
bnRleHQgKHNlZSBSSU0gQnVnICMxNTE1KQorICAgIEZyYW1lKiBmcmFtZSA9IGNvbnRleHQtPndy
YXBwZWRGcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5sb2FkZXIoKSB8fCAhZnJh
bWUtPmxvYWRlcigpLT5jbGllbnQoKSB8fCAhZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICBBU1NF
UlQoZmFsc2UgJiYgImxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkgY2FsbGVkIHdpdGhvdXQgYSBm
cmFtZSBvciBmcmFtZSBjbGllbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBh
Z2VHcm91cExvYWREZWZlcnJlciBkZWZlcnJlcihmcmFtZS0+cGFnZSgpLCB0cnVlKTsKKyAgICBU
aW1lckJhc2U6OmZpcmVUaW1lcnNJbk5lc3RlZEV2ZW50TG9vcCgpOworCisgICAgaW50IHBsYXll
cklkID0gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5Kj4oZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKSktPnBsYXllcklkKCk7CisKKyAgICBXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXIgc3luY0xvYWRlcjsKKworICAgIGJvb2wgZGVmZXJzTG9hZGluZyA9IGZhbHNlOworICAg
IGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gZmFsc2U7CisKKyAgICBSZWZQdHI8UmVzb3VyY2VI
YW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCAmc3lu
Y0xvYWRlciwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSk7CisgICAgTmV0d29y
a01hbmFnZXI6Omluc3RhbmNlKCktPnN0YXJ0Sm9iKHBsYXllcklkLCBoYW5kbGUsICpmcmFtZSwg
ZGVmZXJzTG9hZGluZyk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfc3luY0xvYWRUaW1l
T3V0ID0gNjAuMDsgLy8gc2Vjb25kcworCisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRU
aW1lKCk7CisgICAgRXZlbnRMb29wIGxvb3A7CisgICAgd2hpbGUgKCFzeW5jTG9hZGVyLmlzRG9u
ZSgpICYmICFsb29wLmVuZGVkKCkpIHsKKyAgICAgICAgbG9vcC5jeWNsZSgpOworICAgICAgICBp
ZiAoY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZSA+IHNfc3luY0xvYWRUaW1lT3V0KSB7CisgICAg
ICAgICAgICBoYW5kbGUtPmNhbmNlbCgpOworICAgICAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVy
cm9yKFJlc291cmNlRXJyb3I6OnBsYXRmb3JtRXJyb3JEb21haW4sIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpGaWx0ZXJTdHJlYW06OlN0YXR1c05ldHdvcmtFcnJvciwgcmVxdWVzdC51cmwoKS5zdHJp
bmcoKSwgIlRpbWUgb3V0Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBlcnJvciA9IHN5bmNMb2FkZXIucmVzb3VyY2VFcnJvcigpOworICAgIGRhdGEgPSBz
eW5jTG9hZGVyLmRhdGEoKTsKKyAgICByZXNwb25zZSA9IHN5bmNMb2FkZXIucmVzb3VyY2VSZXNw
b25zZSgpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUmVzb3VyY2VIYW5kbGU6OmJ1
ZmZlcmVkRGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ibGFja2JlcnJ5L1Jlc291cmNlUmVxdWVzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZDU0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0
LmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZVJlcXVlc3RfaAorI2RlZmluZSBSZXNvdXJjZVJl
cXVlc3RfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgorCituYW1lc3BhY2Ug
QmxhY2tCZXJyeSB7CituYW1lc3BhY2UgUGxhdGZvcm0geworY2xhc3MgTmV0d29ya1JlcXVlc3Q7
Cit9Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0IDog
cHVibGljIFJlc291cmNlUmVxdWVzdEJhc2UgeworcHVibGljOgorICAgIFJlc291cmNlUmVxdWVz
dChjb25zdCBTdHJpbmcmIHVybCkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAs
IG1faXNYTUxIVFRQUmVxdWVzdChmYWxzZSkKKyAgICAgICAgLCBtX211c3RIYW5kbGVJbnRlcm5h
bGx5KGZhbHNlKQorICAgICAgICAsIG1faXNSZXF1ZXN0ZWRCeVBsdWdpbihmYWxzZSkKKyAgICAg
ICAgLCBtX2ZvcmNlRG93bmxvYWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNl
UmVxdWVzdChjb25zdCBLVVJMJiB1cmwpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1
cmwsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICwgbV9pc1hNTEhUVFBSZXF1ZXN0
KGZhbHNlKQorICAgICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFsc2UpCisgICAgICAg
ICwgbV9pc1JlcXVlc3RlZEJ5UGx1Z2luKGZhbHNlKQorICAgICAgICAsIG1fZm9yY2VEb3dubG9h
ZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kg
cG9saWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVl
c3RCYXNlKHVybCwgcG9saWN5KQorICAgICAgICAsIG1faXNYTUxIVFRQUmVxdWVzdChmYWxzZSkK
KyAgICAgICAgLCBtX211c3RIYW5kbGVJbnRlcm5hbGx5KGZhbHNlKQorICAgICAgICAsIG1faXNS
ZXF1ZXN0ZWRCeVBsdWdpbihmYWxzZSkKKyAgICAgICAgLCBtX2ZvcmNlRG93bmxvYWQoZmFsc2Up
CisgICAgeworICAgICAgICBzZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOworICAgIH0KKworICAg
IFJlc291cmNlUmVxdWVzdCgpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKCks
IFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICwgbV9pc1hNTEhUVFBSZXF1ZXN0KGZh
bHNlKQorICAgICAgICAsIG1fbXVzdEhhbmRsZUludGVybmFsbHkoZmFsc2UpCisgICAgICAgICwg
bV9pc1JlcXVlc3RlZEJ5UGx1Z2luKGZhbHNlKQorICAgICAgICAsIG1fZm9yY2VEb3dubG9hZChm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRUb2tlbihjb25zdCBTdHJpbmcmIHRv
a2VuKSB7IG1fdG9rZW4gPSB0b2tlbjsgfQorICAgIFN0cmluZyB0b2tlbigpIGNvbnN0IHsgcmV0
dXJuIG1fdG9rZW47IH0KKworICAgIC8vIEZJWE1FOiBGb3IgUklNIEJ1ZyAjNDUyLiBUaGUgQmxh
Y2tCZXJyeSBhcHBsaWNhdGlvbiB3YW50cyB0aGUgYW5jaG9yIHRleHQgZm9yIGEgY2xpY2tlZCBo
eXBlcmxpbmsgc28gYXMgdG8KKyAgICAvLyBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIGFzIHRv
IHdoZXRoZXIgdG8gYWxsb3cgdGhlIG5hdmlnYXRpb24uIFdlIHNob3VsZCBtb3ZlIHRoaXMgZnVu
Y3Rpb25hbGl0eSBpbnRvIGEKKyAgICAvLyBVSS9Qb2xpY3kgZGVsZWdhdGUuCisgICAgdm9pZCBz
ZXRBbmNob3JUZXh0KGNvbnN0IFN0cmluZyYgYW5jaG9yVGV4dCkgeyBtX2FuY2hvclRleHQgPSBh
bmNob3JUZXh0OyB9CisgICAgU3RyaW5nIGFuY2hvclRleHQoKSBjb25zdCB7IHJldHVybiBtX2Fu
Y2hvclRleHQ7IH0KKworICAgIHZvaWQgc2V0T3ZlcnJpZGVDb250ZW50VHlwZShjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlKSB7IG1fb3ZlcnJpZGVDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOyB9
CisgICAgU3RyaW5nIG92ZXJyaWRlQ29udGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX292ZXJy
aWRlQ29udGVudFR5cGU7IH0KKworICAgIHZvaWQgc2V0SXNYTUxIVFRQUmVxdWVzdChib29sIGlz
WE1MSFRUUFJlcXVlc3QpIHsgbV9pc1hNTEhUVFBSZXF1ZXN0ID0gaXNYTUxIVFRQUmVxdWVzdDsg
fQorICAgIGJvb2wgaXNYTUxIVFRQUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYTUxIVFRQ
UmVxdWVzdDsgfQorCisgICAgdm9pZCBzZXRJc1JlcXVlc3RlZEJ5UGx1Z2luKGJvb2wgaXNSZXF1
ZXN0ZWRCeVBsdWdpbikgeyBtX2lzUmVxdWVzdGVkQnlQbHVnaW4gPSBpc1JlcXVlc3RlZEJ5UGx1
Z2luOyB9CisgICAgYm9vbCBpc1JlcXVlc3RlZEJ5UGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9p
c1JlcXVlc3RlZEJ5UGx1Z2luOyB9CisKKyAgICAvLyBNYXJrcyByZXF1ZXN0cyB3aGljaCBtdXN0
IGJlIGhhbmRsZWQgYnkgd2Via2l0IGV2ZW4gaWYgTGlua3NIYW5kbGVkRXh0ZXJuYWxseSBpcyBz
ZXQuCisgICAgdm9pZCBzZXRNdXN0SGFuZGxlSW50ZXJuYWxseShib29sIG11c3RIYW5kbGVJbnRl
cm5hbGx5KSB7IG1fbXVzdEhhbmRsZUludGVybmFsbHkgPSBtdXN0SGFuZGxlSW50ZXJuYWxseTsg
fQorICAgIGJvb2wgbXVzdEhhbmRsZUludGVybmFsbHkoKSBjb25zdCB7IHJldHVybiBtX211c3RI
YW5kbGVJbnRlcm5hbGx5OyB9CisKKyAgICB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVJlcXVlc3Qo
QmxhY2tCZXJyeTo6UGxhdGZvcm06Ok5ldHdvcmtSZXF1ZXN0JiwgYm9vbCBpc0luaXRpYWwgPSBm
YWxzZSkgY29uc3Q7CisgICAgdm9pZCBzZXRGb3JjZURvd25sb2FkKGJvb2wgZm9yY2VEb3dubG9h
ZCkgeyBtX2ZvcmNlRG93bmxvYWQgPSB0cnVlOyB9CisgICAgYm9vbCBmb3JjZURvd25sb2FkKCkg
Y29uc3QgeyByZXR1cm4gbV9mb3JjZURvd25sb2FkOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFJlc291cmNlUmVxdWVzdEJhc2U7CisKKyAgICBTdHJpbmcgbV90b2tlbjsKKyAgICBT
dHJpbmcgbV9hbmNob3JUZXh0OworICAgIFN0cmluZyBtX292ZXJyaWRlQ29udGVudFR5cGU7Cisg
ICAgYm9vbCBtX2lzWE1MSFRUUFJlcXVlc3Q7CisgICAgYm9vbCBtX211c3RIYW5kbGVJbnRlcm5h
bGx5OworICAgIGJvb2wgbV9pc1JlcXVlc3RlZEJ5UGx1Z2luOworICAgIGJvb2wgbV9mb3JjZURv
d25sb2FkOworCisgICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpIHsgfQorICAgIHZv
aWQgZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3QoKSB7IH0KKworICAgIFBhc3NPd25QdHI8Q3Jvc3NU
aHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxD
cm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+KSBjb25zdDsKKyAgICB2b2lkIGRvUGxhdGZv
cm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4pOworfTsK
Kworc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YSA6IHB1YmxpYyBDcm9zc1Ro
cmVhZFJlc291cmNlUmVxdWVzdERhdGFCYXNlIHsKKyAgICBTdHJpbmcgbV90b2tlbjsKKyAgICBT
dHJpbmcgbV9hbmNob3JUZXh0OworICAgIGJvb2wgbV9pc1hNTEhUVFBSZXF1ZXN0OworICAgIGJv
b2wgbV9tdXN0SGFuZGxlSW50ZXJuYWxseTsKKyAgICBib29sIG1faXNSZXF1ZXN0ZWRCeVBsdWdp
bjsKKyAgICBib29sIG1fZm9yY2VEb3dubG9hZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFJlc291cmNlUmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXF1ZXN0QmxhY2tCZXJy
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3Vy
Y2VSZXF1ZXN0QmxhY2tCZXJyeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGQ1NWZhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlcXVlc3RCbGFja0JlcnJ5LmNwcApAQCAtMCwwICsx
LDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisK
KyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1DbGllbnQuaD4KKyNpbmNsdWRlIDxuZXR3b3Jr
L05ldHdvcmtSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TmV0d29ya1JlcXVlc3Q7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordW5zaWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVy
SG9zdCgpCit7CisgICAgcmV0dXJuIDY7Cit9CisKK3N0YXRpYyBpbmxpbmUgTmV0d29ya1JlcXVl
c3Q6OkNhY2hlUG9saWN5IHBsYXRmb3JtQ2FjaGVQb2xpY3lGb3JSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBzd2l0Y2ggKHJlcXVlc3QuY2FjaGVQb2xpY3ko
KSkgeworICAgIGNhc2UgV2ViQ29yZTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeToKKyAgICAgICAg
cmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpVc2VQcm90b2NvbENhY2hlUG9saWN5OworICAgIGNhc2Ug
V2ViQ29yZTo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE6CisgICAgICAgIHJldHVybiBOZXR3b3Jr
UmVxdWVzdDo6UmVsb2FkSWdub3JpbmdDYWNoZURhdGE7CisgICAgY2FzZSBXZWJDb3JlOjpSZXR1
cm5DYWNoZURhdGFFbHNlTG9hZDoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpSZXR1
cm5DYWNoZURhdGFFbHNlTG9hZDsKKyAgICBjYXNlIFdlYkNvcmU6OlJldHVybkNhY2hlRGF0YURv
bnRMb2FkOgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlJldHVybkNhY2hlRGF0YURv
bnRMb2FkOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3k7CisgICAg
fQorfQorCitzdGF0aWMgaW5saW5lIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRUeXBlIHBsYXRmb3Jt
VGFyZ2V0VHlwZUZvclJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorewor
ICAgIGlmIChyZXF1ZXN0LmlzWE1MSFRUUFJlcXVlc3QoKSkKKyAgICAgICAgcmV0dXJuIE5ldHdv
cmtSZXF1ZXN0OjpUYXJnZXRJc1hNTEhUVFBSZXF1ZXN0OworCisgICAgc3dpdGNoIChyZXF1ZXN0
LnRhcmdldFR5cGUoKSkgeworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc01haW5G
cmFtZToKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc01haW5GcmFtZTsK
KyAgICBjYXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTdWJmcmFtZToKKyAgICAgICAgcmV0
dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1N1YmZyYW1lOworICAgIGNhc2UgUmVzb3VyY2VS
ZXF1ZXN0OjpUYXJnZXRJc1N1YnJlc291cmNlOgorICAgICAgICByZXR1cm4gTmV0d29ya1JlcXVl
c3Q6OlRhcmdldElzU3VicmVzb3VyY2U7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdl
dElzU3R5bGVTaGVldDoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1N0
eWxlU2hlZXQ7CisgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU2NyaXB0OgorICAg
ICAgICByZXR1cm4gTmV0d29ya1JlcXVlc3Q6OlRhcmdldElzU2NyaXB0OworICAgIGNhc2UgUmVz
b3VyY2VSZXF1ZXN0OjpUYXJnZXRJc0ZvbnRSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIE5ldHdv
cmtSZXF1ZXN0OjpUYXJnZXRJc0ZvbnRSZXNvdXJjZTsKKyAgICBjYXNlIFJlc291cmNlUmVxdWVz
dDo6VGFyZ2V0SXNJbWFnZToKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJ
c0ltYWdlOworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc09iamVjdDoKKyAgICAg
ICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc09iamVjdDsKKyAgICBjYXNlIFJlc291
cmNlUmVxdWVzdDo6VGFyZ2V0SXNNZWRpYToKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0
OjpUYXJnZXRJc01lZGlhOworICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1dvcmtl
cjoKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtSZXF1ZXN0OjpUYXJnZXRJc1dvcmtlcjsKKyAgICBj
YXNlIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTaGFyZWRXb3JrZXI6CisgICAgICAgIHJldHVy
biBOZXR3b3JrUmVxdWVzdDo6VGFyZ2V0SXNTaGFyZWRXb3JrZXI7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBOZXR3b3JrUmVxdWVz
dDo6VGFyZ2V0SXNVbmtub3duOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZVJlcXVlc3Q6Omlu
aXRpYWxpemVQbGF0Zm9ybVJlcXVlc3QoTmV0d29ya1JlcXVlc3QmIHBsYXRmb3JtUmVxdWVzdCwg
Ym9vbCBpc0luaXRpYWwpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhpcyBpcyB0aGUgaW5pdGlhbCBs
b2FkLCBza2lwIHRoZSByZXF1ZXN0IGJvZHkgYW5kIGhlYWRlcnMuCisgICAgaWYgKGlzSW5pdGlh
bCkKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFJlcXVlc3RJbml0aWFsKHRpbWVvdXRJbnRl
cnZhbCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LnNldFJlcXVlc3RV
cmwodXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBodHRwTWV0
aG9kKCkubGF0aW4xKCkuZGF0YSgpLAorICAgICAgICAgICAgICAgIHBsYXRmb3JtQ2FjaGVQb2xp
Y3lGb3JSZXF1ZXN0KCp0aGlzKSwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybVRhcmdldFR5cGVG
b3JSZXF1ZXN0KCp0aGlzKSwKKyAgICAgICAgICAgICAgICB0aW1lb3V0SW50ZXJ2YWwoKSk7CisK
KyAgICAgICAgaWYgKGh0dHBCb2R5KCkgJiYgIWh0dHBCb2R5KCktPmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4mIGVsZW1lbnRzID0gaHR0cEJv
ZHkoKS0+ZWxlbWVudHMoKTsKKyAgICAgICAgICAgIC8vIFVzZSBzZXREYXRhIGZvciBzaW1wbGUg
Zm9ybXMgYmVjYXVzZSBpdCBpcyBzbGlnaHRseSBtb3JlIGVmZmljaWVudC4KKyAgICAgICAgICAg
IGlmIChlbGVtZW50cy5zaXplKCkgPT0gMSAmJiBlbGVtZW50c1swXS5tX3R5cGUgPT0gRm9ybURh
dGFFbGVtZW50OjpkYXRhKQorICAgICAgICAgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5zZXREYXRh
KGVsZW1lbnRzWzBdLm1fZGF0YS5kYXRhKCksIGVsZW1lbnRzWzBdLm1fZGF0YS5zaXplKCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGVsZW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZv
cm1EYXRhRWxlbWVudCYgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAgICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZE11bHRpcGFydERhdGEoZWxlbWVudC5t
X2RhdGEuZGF0YSgpLCBlbGVtZW50Lm1fZGF0YS5zaXplKCkpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZE11bHRpcGFydEZp
bGVuYW1lKGVsZW1lbnQubV9maWxlbmFtZS5jaGFyYWN0ZXJzKCksIGVsZW1lbnQubV9maWxlbmFt
ZS5sZW5ndGgoKSk7CisjaWYgRU5BQkxFKEJMT0IpCisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEJsb2IpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBibG9iIG5v
dyEKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gdW5rbm93biB0eXBlCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAh
PSBodHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIFN0cmluZyBr
ZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpICYmICF2YWx1ZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgcGxhdGZvcm1SZXF1ZXN0LmFkZEhlYWRlcihrZXkubGF0aW4xKCkuZGF0YSgp
LCB2YWx1ZS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9jYWxl
IGhhcyB0aGUgZm9ybSAiZW4tVVMiLiBDb25zdHJ1Y3QgYWNjZXB0IGxhbmd1YWdlIGxpa2UgImVu
LVVTLCBlbjtxPTAuOCIuCisgICAgICAgIHN0ZDo6c3RyaW5nIGxvY2FsZSA9IEJsYWNrQmVycnk6
OlBsYXRmb3JtOjpDbGllbnQ6OmdldCgpLT5nZXRMb2NhbGUoKTsKKyAgICAgICAgLy8gUE9TSVgg
bG9jYWxlIGhhcyAnXycgaW5zdGVhZCBvZiAnLScuCisgICAgICAgIC8vIFJlcGxhY2UgdG8gY29u
Zm9ybSB0byBIVFRQIHNwZWMuCisgICAgICAgIHNpemVfdCB1bmRlcnNjb3JlID0gbG9jYWxlLmZp
bmQoJ18nKTsKKyAgICAgICAgaWYgKHVuZGVyc2NvcmUgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisg
ICAgICAgICAgICBsb2NhbGUucmVwbGFjZSh1bmRlcnNjb3JlLCAxLCAiLSIpOworICAgICAgICBz
dGQ6OnN0cmluZyBhY2NlcHRMYW5ndWFnZSA9IGxvY2FsZSArICIsICIgKyBsb2NhbGUuc3Vic3Ry
KDAsIDIpICsgIjtxPTAuOCI7CisgICAgICAgIHBsYXRmb3JtUmVxdWVzdC5hZGRIZWFkZXIoIkFj
Y2VwdC1MYW5ndWFnZSIsIGFjY2VwdExhbmd1YWdlLmNfc3RyKCkpOworICAgIH0KK30KKworUGFz
c093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+IFJlc291cmNlUmVxdWVzdDo6
ZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3RE
YXRhPiBkYXRhKSBjb25zdAoreworICAgIGRhdGEtPm1fdG9rZW4gPSBtX3Rva2VuOworICAgIGRh
dGEtPm1fYW5jaG9yVGV4dCA9IG1fYW5jaG9yVGV4dDsKKyAgICBkYXRhLT5tX2lzWE1MSFRUUFJl
cXVlc3QgPSBtX2lzWE1MSFRUUFJlcXVlc3Q7CisgICAgZGF0YS0+bV9tdXN0SGFuZGxlSW50ZXJu
YWxseSA9IG1fbXVzdEhhbmRsZUludGVybmFsbHk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3Zv
aWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVh
ZFJlc291cmNlUmVxdWVzdERhdGE+IGRhdGEpCit7CisgICAgbV90b2tlbiA9IGRhdGEtPm1fdG9r
ZW47CisgICAgbV9hbmNob3JUZXh0ID0gZGF0YS0+bV9hbmNob3JUZXh0OworICAgIG1faXNYTUxI
VFRQUmVxdWVzdCA9IGRhdGEtPm1faXNYTUxIVFRQUmVxdWVzdDsKKyAgICBtX211c3RIYW5kbGVJ
bnRlcm5hbGx5ID0gZGF0YS0+bV9tdXN0SGFuZGxlSW50ZXJuYWxseTsKKyAgICBtX2ZvcmNlRG93
bmxvYWQgPSBkYXRhLT5tX2ZvcmNlRG93bmxvYWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJy
eS9SZXNvdXJjZVJlc3BvbnNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Js
YWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjFjZWE4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZS5oCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBS
ZXNvdXJjZVJlc3BvbnNlX2gKKyNkZWZpbmUgUmVzb3VyY2VSZXNwb25zZV9oCisKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFJlc291cmNlUmVzcG9uc2UgOiBwdWJsaWMgUmVzb3VyY2VSZXNwb25zZUJhc2UgeworcHVibGlj
OgorICAgIFJlc291cmNlUmVzcG9uc2UoKQorICAgICAgICA6IG1faXNXTUwoZmFsc2UpCisgICAg
eworICAgIH0KKworICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIGNvbnN0IFN0cmluZyYg
dGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKKyAgICAgICAgOiBSZXNv
dXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0aCwgdGV4dEVuY29k
aW5nTmFtZSwgZmlsZW5hbWUpCisgICAgICAgICwgbV9pc011bHRpcGFydFBheWxvYWQoZmFsc2Up
CisgICAgICAgICwgbV9pc1dNTChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRJ
c1dNTChib29sIGlzV01MKSB7IG1faXNXTUwgPSBpc1dNTDsgfQorICAgIGJvb2wgaXNXTUwoKSBj
b25zdCB7IHJldHVybiBtX2lzV01MOyB9CisKKyAgICBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVz
b3VyY2VSZXNwb25zZURhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+KSBjb25zdDsKKyAgICB2b2lkIGRvUGxhdGZvcm1BZG9w
dChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+KTsKKworICAgIHZv
aWQgc2V0SXNNdWx0aXBhcnRQYXlsb2FkKGJvb2wgdmFsdWUpIHsgbV9pc011bHRpcGFydFBheWxv
YWQgPSB2YWx1ZTsgfQorICAgIGJvb2wgaXNNdWx0aXBhcnRQYXlsb2FkKCkgY29uc3QgeyByZXR1
cm4gbV9pc011bHRpcGFydFBheWxvYWQ7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faXNNdWx0
aXBhcnRQYXlsb2FkOworICAgIGJvb2wgbV9pc1dNTDsKK307CisKK3N0cnVjdCBDcm9zc1RocmVh
ZFJlc291cmNlUmVzcG9uc2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25z
ZURhdGFCYXNlIHsKKyAgICBib29sIG1faXNXTUw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZVJlc3BvbnNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvYmxhY2tiZXJyeS9SZXNvdXJjZVJlc3BvbnNlQmxhY2tC
ZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2JsYWNrYmVycnkvUmVz
b3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmFlNDZjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2JsYWNrYmVycnkvUmVzb3VyY2VSZXNwb25zZUJsYWNrQmVycnkuY3BwCkBAIC0w
LDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURh
dGE+IFJlc291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3Nz
VGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0Cit7CisgICAgZGF0YS0+bV9p
c1dNTCA9IG1faXNXTUw7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXNw
b25zZTo6ZG9QbGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3Bv
bnNlRGF0YT4gZGF0YSkKK3sKKyAgICBtX2lzV01MID0gZGF0YS0+bV9pc1dNTDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMS43LjUuNAoK
</data>
<flag name="review"
          id="118005"
          type_id="1"
          status="+"
          setter="rwlbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>