<?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>64999</bug_id>
          
          <creation_ts>2011-07-21 17:10:02 -0700</creation_ts>
          <short_desc>Remove operator new from JSCell</short_desc>
          <delta_ts>2011-07-27 21:59:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>
          <dependson>64732</dependson>
          <blocked>65288</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>darin</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>440737</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-21 17:10:02 -0700</bug_when>
    <thetext>This is the third installment of the ongoing effort to phase out the use of constructors for GC-managed objects in favor of static create methods.  We want to avoid calling operator new any more, so the best way to do that is to remove it.  Actually, the best way is to assert that we never use it.  If we fully remove the calls and somebody uses them or if a call was missed during the refactoring process we can get strange behavior in the browser that is difficult to track down to the source.  By leaving an assert in, it is easy to determine exactly where in the code the offending call to new took place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442991</commentid>
    <comment_count>1</comment_count>
      <attachid>102156</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-27 10:33:12 -0700</bug_when>
    <thetext>Created attachment 102156
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442993</commentid>
    <comment_count>2</comment_count>
      <attachid>102156</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-27 10:36:31 -0700</bug_when>
    <thetext>Comment on attachment 102156
Patch

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

&gt; Source/JavaScriptCore/debugger/DebuggerActivation.h:37
&gt; +        static DebuggerActivation* create(JSGlobalData&amp; globalData, JSObject* obj)

We use words like “object”, not abbreviations like “obj”.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:130
&gt; +        static JS_EXPORTDATA const ClassInfo s_info;

Why are we making this public?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442998</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-27 10:42:03 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:130
&gt; &gt; +        static JS_EXPORTDATA const ClassInfo s_info;
&gt; 
&gt; Why are we making this public?

It was public before.  The way the diff worked out made it look like I changed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442999</commentid>
    <comment_count>4</comment_count>
      <attachid>102156</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-07-27 10:46:45 -0700</bug_when>
    <thetext>Comment on attachment 102156
Patch

Attachment 102156 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9260004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443007</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-27 10:54:01 -0700</bug_when>
    <thetext>Should I put a comment on the operator new declarations in JSCell saying that there are no concrete implementations to prevent successful linking? This would prevent somebody going and looking for them in the future and wasting a lot of time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443009</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-27 10:58:10 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Should I put a comment on the operator new declarations in JSCell saying that there are no concrete implementations to prevent successful linking? This would prevent somebody going and looking for them in the future and wasting a lot of time.

Yeah, that probably makes sense.

Also look into why the Qt build is failing (_sigh_)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443010</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-27 10:59:28 -0700</bug_when>
    <thetext>&gt; Yeah, that probably makes sense.

Will do.

&gt; Also look into why the Qt build is failing (_sigh_)

I didn&apos;t actually test any of the builds on the other platforms yet.  I didn&apos;t expect the patch to clear the build bots and the commit queue in its current state.  Removing operator new from JSCell affects pretty much every platform, so I&apos;m using the bots to catch the build errors more or less simultaneously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443103</commentid>
    <comment_count>8</comment_count>
      <attachid>102172</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-27 12:46:47 -0700</bug_when>
    <thetext>Created attachment 102172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443111</commentid>
    <comment_count>9</comment_count>
      <attachid>102172</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-07-27 13:03:52 -0700</bug_when>
    <thetext>Comment on attachment 102172
Patch

Attachment 102172 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9247893</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443115</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-27 13:07:37 -0700</bug_when>
    <thetext>EWS says Qt fails to build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443118</commentid>
    <comment_count>11</comment_count>
      <attachid>102175</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-27 13:10:41 -0700</bug_when>
    <thetext>Created attachment 102175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443155</commentid>
    <comment_count>12</comment_count>
      <attachid>102175</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-27 14:35:49 -0700</bug_when>
    <thetext>Comment on attachment 102175
Patch

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

&gt; Source/JavaScriptCore/runtime/JSCell.h:127
&gt; +        // Note that the first two declarations of operator new have no corresponding implementation and 
&gt; +        // will cause link errors if you use them.
&gt;          void* operator new(size_t, ExecState*);
&gt;          void* operator new(size_t, JSGlobalData*);

Can these be made private so we are more likely to get compilation errors rather than linking errors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443187</commentid>
    <comment_count>13</comment_count>
      <attachid>102193</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-27 15:19:22 -0700</bug_when>
    <thetext>Created attachment 102193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443191</commentid>
    <comment_count>14</comment_count>
      <attachid>102193</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-27 15:24:00 -0700</bug_when>
    <thetext>Comment on attachment 102193
Patch

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

noticed a couple of additional abbreviations, correct those and this will be finished :D

&gt; Source/WebCore/bridge/c/CRuntimeObject.h:40
&gt; +    static CRuntimeObject* create(ExecState* exec, JSGlobalObject* globalObject, PassRefPtr&lt;CInstance&gt; cinst)

normal name for &apos;cinst&apos; would be instance

&gt; Source/WebCore/bridge/objc/objc_runtime.h:95
&gt; +    static ObjcFallbackObjectImp* create(ExecState* exec, JSGlobalObject* globalObject, ObjcInstance* inst, const Identifier&amp; propertyName)

s/inst/instance

&gt; Source/WebKit/mac/Plugins/Hosted/ProxyRuntimeObject.h:39
&gt; +    static ProxyRuntimeObject* create(JSC::ExecState* exec, JSC::JSGlobalObject* globalObject, PassRefPtr&lt;ProxyInstance&gt; inst)

s/inst/instance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443195</commentid>
    <comment_count>15</comment_count>
      <attachid>102196</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-27 15:27:45 -0700</bug_when>
    <thetext>Created attachment 102196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443332</commentid>
    <comment_count>16</comment_count>
      <attachid>102196</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-27 21:59:25 -0700</bug_when>
    <thetext>Comment on attachment 102196
Patch

Clearing flags on attachment: 102196

Committed r91903: &lt;http://trac.webkit.org/changeset/91903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443333</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-27 21:59:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102156</attachid>
            <date>2011-07-27 10:33:12 -0700</date>
            <delta_ts>2011-07-27 12:46:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64999-20110727103313.patch</filename>
            <type>text/plain</type>
            <size>41702</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDctMjcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgb3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9u
IG9mIG9wZXJhdG9yIG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAg
d2lsbCBub3Qgc3VjY2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1
c2VzIG9mIG9wZXJhdG9yIG5ldy4KKworICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29wZSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNw
cDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6SlNTdGF0aWNTY29wZU9i
amVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlKToKKwogMjAxMS0wNy0yNyAgU2hp
bnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGFuIGlu
dGVyZmFjZSB0byB0YWtlIElzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0
ZQogI2VuZGlmCiAKICAgICBpZiAoIWdsb2JhbE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTR2xvYmFs
T2JqZWN0KCpnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnbG9i
YWxEYXRhLCBqc051bGwoKSkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAgICAgICAgcmV0dXJuIEpT
R2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVidWdnZXJB
Y3RpdmF0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRGVidWdnZXJBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CisgICAgICAg
IHN0YXRpYyBEZWJ1Z2dlckFjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTT2JqZWN0KiBvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxEZWJ1Z2dlckFjdGl2YXRpb24+KGdsb2JhbERhdGEuaGVhcCkpIERlYnVnZ2Vy
QWN0aXZhdGlvbihnbG9iYWxEYXRhLCBvYmopOworICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVhbCBVU3Ry
aW5nIGNsYXNzTmFtZSgpIGNvbnN0OwpAQCAtNTgsNiArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTT2JqZWN0OjpT
dHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6CisgICAgICAgIERlYnVnZ2VyQWN0aXZhdGlv
bihKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOwogICAgICAgICBXcml0ZUJhcnJpZXI8SlNBY3Rp
dmF0aW9uPiBtX2FjdGl2YXRpb247CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5MTg1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMDYsNyArMTIwNiw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4
ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBib29sIHB1c2hlZFNjb3BlID0gZmFsc2U7CiAgICAgaWYg
KG51bVZhcmlhYmxlcyB8fCBudW1GdW5jdGlvbnMpIHsKICAgICAgICAgaWYgKGNvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gbmV3IChjYWxs
RnJhbWUpIFN0cmljdEV2YWxBY3RpdmF0aW9uKGNhbGxGcmFtZSk7CisgICAgICAgICAgICB2YXJp
YWJsZU9iamVjdCA9IFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lKTsKICAg
ICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5wdXNoKHZhcmlhYmxlT2JqZWN0KTsK
ICAgICAgICAgICAgIHB1c2hlZFNjb3BlID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTMxMSw3ICsx
MzExLDcgQEAgTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBJbnRlcnByZXRlcgogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJZGVudGlm
aWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVyYW5kKTsK
ICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFs
dWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKGNhbGxGcmFtZSkgSlNTdGF0aWNTY29w
ZU9iamVjdChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7CisgICAgSlNP
YmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGNhbGxGcmFtZSwgcHJv
cGVydHksIHZhbHVlLCBEb250RGVsZXRlKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IEpTVmFsdWUoc2NvcGUpOwogCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigp
LT5wdXNoKHNjb3BlKTsKQEAgLTQxMzYsNyArNDEzNiw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6
CiAgICAgICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0aGUgRnVu
Y3Rpb25FeHByZXNzaW9uLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCFmdW5jdGlvbi0+bmFt
ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBmdW5jdGlv
blNjb3BlT2JqZWN0ID0gbmV3IChjYWxsRnJhbWUpIEpTU3RhdGljU2NvcGVPYmplY3QoY2FsbEZy
YW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUpOworICAg
ICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpTU3Rh
dGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmMs
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgICAgICBmdW5jLT5zZXRTY29wZSgqZ2xv
YmFsRGF0YSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7CiAgICAg
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlz
aW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwODIsNyArMzA4Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpT
T2JqZWN0Kiwgb3BfbmV3X2YKICAgICAgICAgZG9lcyBub3QgYWZmZWN0IHRoZSBzY29wZSBlbmNs
b3NpbmcgdGhlIEZ1bmN0aW9uRXhwcmVzc2lvbi4KICAgICAgKi8KICAgICBpZiAoIWZ1bmN0aW9u
LT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rp
b25TY29wZU9iamVjdCA9IG5ldyAoY2FsbEZyYW1lKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGNhbGxG
cmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAg
ICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpTU3RhdGlj
U2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1bmMsIFJl
YWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmMtPnNldFNjb3BlKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmplY3QpKTsK
ICAgICB9CiAKQEAgLTMzNzgsNyArMzM3OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2Jq
ZWN0Kiwgb3BfcHVzaF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7
CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSkgSlNT
dGF0aWNTY29wZU9iamVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBd
LmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSwgRG9udERlbGV0ZSk7
CisgICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKHN0YWNr
RnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBzdGFja0Zy
YW1lLmFyZ3NbMV0uanNWYWx1ZSgpLCBEb250RGVsZXRlKTsKIAogICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNo
YWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDIw
ICszNTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIGlubGluZSB2
b2lkKiBKU0NlbGw6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQotICAgIHsKLSAgICAgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0Nl
bGwqPihnbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRlKHNpemUpKTsKLSAgICAgICAgcmVzdWx0LT5t
X3N0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAg
IGlubGluZSB2b2lkKiBKU0NlbGw6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgRXhlY1N0YXRl
KiBleGVjKQotICAgIHsKLSAgICAgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0Nl
bGwqPihleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemUpKTsKLSAgICAgICAgcmVzdWx0LT5tX3N0
cnVjdHVyZS5jbGVhcigpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKICAg
ICBpbmxpbmUgdm9pZCBkZXN0cnVjdG9yKEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIGNl
bGwtPn5KU0NlbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiArMTIy
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fZXZhbEVuYWJsZWQ7CiAKICAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU0dsb2JhbE9iamVjdCogY3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0dsb2JhbE9iamVjdD4oZ2xvYmFsRGF0
YS5oZWFwKSkgSlNHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgICAgICA6
IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSwg
MCkKICAgICAgICAgICAgICwgbV9yZWdpc3RlckFycmF5U2l6ZSgwKQpAQCAtMTM0LDkgKzE0Miw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaW5pdCh0aGlzKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Ci0K
LSAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiB0aGlzVmFsdWUpCiAgICAg
ICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAmbV9zeW1i
b2xUYWJsZSwgMCkKICAgICAgICAgICAgICwgbV9yZWdpc3RlckFycmF5U2l6ZSgwKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmpl
Y3QuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0YXRpY1Njb3BlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiw5IEBAIG5h
bWVzcGFjZSBKU0N7CiAgICAgCiAgICAgY2xhc3MgSlNTdGF0aWNTY29wZU9iamVjdCA6IHB1Ymxp
YyBKU1ZhcmlhYmxlT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTU3RhdGljU2NvcGVP
YmplY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgSlNWYWx1ZSB2
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLSAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVj
dChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5zdGF0aWNTY29wZVN0cnVj
dHVyZS5nZXQoKSwgJm1fc3ltYm9sVGFibGUsIHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigm
bV9yZWdpc3RlclN0b3JlICsgMSkpCisgICAgICAgIHN0YXRpYyBKU1N0YXRpY1Njb3BlT2JqZWN0
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgSlNWYWx1
ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICAgICAgewotICAgICAgICAgICAgbV9y
ZWdpc3RlclN0b3JlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKLSAgICAg
ICAgICAgIHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeSgt
MSwgYXR0cmlidXRlcykpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpT
U3RhdGljU2NvcGVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU1N0YXRpY1Njb3BlT2JqZWN0KGV4
ZWMsIGlkZW50LCB2YWx1ZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwpAQCAtNTMsNiArNTEsMTMgQEAg
bmFtZXNwYWNlIEpTQ3sKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNW
YXJpYWJsZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBwcml2YXRlOgorICAgICAgICBK
U1N0YXRpY1Njb3BlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCisgICAgICAgICAgICA6IEpT
VmFyaWFibGVPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkuc3Rh
dGljU2NvcGVTdHJ1Y3R1cmUuZ2V0KCksICZtX3N5bWJvbFRhYmxlLCByZWludGVycHJldF9jYXN0
PFJlZ2lzdGVyKj4oJm1fcmVnaXN0ZXJTdG9yZSArIDEpKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX3JlZ2lzdGVyU3RvcmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwor
ICAgICAgICAgICAgc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVu
dHJ5KC0xLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFN5bWJv
bFRhYmxlIG1fc3ltYm9sVGFibGU7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3Jl
Z2lzdGVyU3RvcmU7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmljdEV2YWxBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgU3Ry
aWN0RXZhbEFjdGl2YXRpb24gOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6Ci0g
ICAgU3RyaWN0RXZhbEFjdGl2YXRpb24oRXhlY1N0YXRlKik7CisgICAgc3RhdGljIFN0cmljdEV2
YWxBY3RpdmF0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmljdEV2YWxBY3RpdmF0aW9uPigqZXhlYy0+aGVhcCgp
KSkgU3RyaWN0RXZhbEFjdGl2YXRpb24oZXhlYyk7CisgICAgfQorCiAgICAgdmlydHVhbCBib29s
IGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImKTsKICAgICB2aXJ0
dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdmlydHVh
bCBKU1ZhbHVlIHRvU3RyaWN0VGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKQEAgLTQ0LDYg
KzQ4LDkgQEAgcHVibGljOgogICAgIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBKU05vbkZpbmFsT2Jq
ZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICBTdHJpY3RFdmFsQWN0aXZhdGlv
bihFeGVjU3RhdGUqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEds
dWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMS0wNy0yNyAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBv
cGVyYXRvciBuZXcgZnJvbSBKU0NlbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVtb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygb3BlcmF0b3IgbmV3
IGluIEpTQ2VsbCwgc28gYW55IGZ1cnRoZXIgdXNlcworICAgICAgICB3aWxsIG5vdCBzdWNjZXNz
ZnVsbHkgbGluay4gIEFsc28gcmVtb3ZlZCBhbnkgcmVtYWluaW5nIHVzZXMgb2Ygb3BlcmF0b3Ig
bmV3LgorCisgICAgICAgICogSlNSdW4uY3BwOgorICAgICAgICAoSlNSdW46OkpTUnVuKToKKyAg
ICAgICAgKiBKU1J1bi5oOgorICAgICAgICAoSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIEpTVXRpbHMuY3BwOgorICAgICAgICAoSlNPYmplY3RLSlNWYWx1ZSk6CisgICAg
ICAgIChnZXRUaHJlYWRHbG9iYWxPYmplY3QpOgorICAgICAgICAqIFVzZXJPYmplY3RJbXAuaDoK
KyAgICAgICAgKFVzZXJPYmplY3RJbXA6OmNyZWF0ZSk6CisKIDIwMTEtMDctMDEgIEp1bmdzaGlr
IFNoaW4gIDxqc2hpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5
IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gOTE4
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw3ICs0Myw3IEBAIEpTR2x1ZUdsb2JhbE9iamVjdDo6SlNHbHVlR2xvYmFsT2JqZWN0KEoK
IEpTUnVuOjpKU1J1bihDRlN0cmluZ1JlZiBzb3VyY2UsIEpTRmxhZ3MgaW5GbGFncykKICAgICA6
ICAgSlNCYXNlKGtKU1J1blR5cGVJRCksCiAgICAgICAgIGZTb3VyY2UoQ0ZTdHJpbmdUb1VTdHJp
bmcoc291cmNlKSksCi0gICAgICAgIGZHbG9iYWxPYmplY3QoZ2V0VGhyZWFkR2xvYmFsRXhlY1N0
YXRlKCktPmdsb2JhbERhdGEoKSwgbmV3ICgmZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmds
b2JhbERhdGEoKSkgSlNHbHVlR2xvYmFsT2JqZWN0KGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgp
LT5nbG9iYWxEYXRhKCksIEpTR2x1ZUdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGdldFRo
cmVhZEdsb2JhbEV4ZWNTdGF0ZSgpLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwgaW5GbGFncykp
LAorICAgICAgICBmR2xvYmFsT2JqZWN0KGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpLT5nbG9i
YWxEYXRhKCksIEpTR2x1ZUdsb2JhbE9iamVjdDo6Y3JlYXRlKGdldFRocmVhZEdsb2JhbEV4ZWNT
dGF0ZSgpLT5nbG9iYWxEYXRhKCksIEpTR2x1ZUdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
KGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwgaW5G
bGFncykpLAogICAgICAgICBmRmxhZ3MoaW5GbGFncykKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0R2x1ZS9KU1J1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9K
U1J1bi5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMiArMzUsMTcgQEAKIAogY2xhc3MgSlNHbHVlR2xvYmFs
T2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpT
R2x1ZUdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBKU0ZsYWdzID0ga0pT
RmxhZ05vbmUpOworICAgICAgICBzdGF0aWMgSlNHbHVlR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNGbGFncyBmbGFn
cyA9IGtKU0ZsYWdOb25lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8SlNHbHVlR2xvYmFsT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBKU0dsdWVHbG9i
YWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBmbGFncyk7CisgICAgICAgIH0KIAogICAg
ICAgICBKU0ZsYWdzIEZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQogICAgICAgICBT
dHJ1Y3R1cmUqIHVzZXJPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3VzZXJPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIEpTR2x1ZUdsb2Jh
bE9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBKU0ZsYWdzID0ga0pTRmxhZ05vbmUp
OworICAgICAgICAKICAgICAgICAgSlNGbGFncyBtX2ZsYWdzOwogICAgICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBtX3VzZXJPYmplY3RTdHJ1Y3R1cmU7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRHbHVlL0pTVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9K
U1V0aWxzLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNV
dGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw3ICsxODQsNyBAQCBKU1ZhbHVlIEpTT2Jq
ZWN0S0pTVmFsdWUoSlNVc2VyT2JqZWN0KiBwCiAgICAgICAgIGlmICghaGFuZGxlZCkKICAgICAg
ICAgewogICAgICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2V0VGhyZWFkR2xvYmFsRXhlY1N0
YXRlKCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBuZXcgKGV4ZWMpIFVzZXJPYmplY3RJbXAoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnZXRUaHJlYWRHbG9iYWxPYmplY3QoKS0+dXNlck9iamVjdFN0cnVj
dHVyZSgpLCBwdHIpOworICAgICAgICAgICAgcmVzdWx0ID0gVXNlck9iamVjdEltcDo6Y3JlYXRl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KCktPnVzZXJPYmplY3RT
dHJ1Y3R1cmUoKSwgcHRyKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyBKU0dsdWVHbG9iYWxPYmplY3QqIGdldFRocmVhZEds
b2IKICAgICBwdGhyZWFkX29uY2UoJmdsb2JhbE9iamVjdEtleU9uY2UsIGluaXRpYWxpemVHbG9i
YWxPYmplY3RLZXkpOwogICAgIEpTR2x1ZUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNHbHVlR2xvYmFsT2JqZWN0Kj4ocHRocmVhZF9nZXRzcGVjaWZpYyhnbG9iYWxP
YmplY3RLZXkpKTsKICAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAgICAgICBnbG9iYWxPYmpl
Y3QgPSBuZXcgKGdldFRocmVhZEdsb2JhbERhdGEoKSkgSlNHbHVlR2xvYmFsT2JqZWN0KCpnZXRU
aHJlYWRHbG9iYWxEYXRhKCksIEpTR2x1ZUdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpn
ZXRUaHJlYWRHbG9iYWxEYXRhKCksIGpzTnVsbCgpKSk7CisgICAgICAgIGdsb2JhbE9iamVjdCA9
IEpTR2x1ZUdsb2JhbE9iamVjdDo6Y3JlYXRlKCpnZXRUaHJlYWRHbG9iYWxEYXRhKCksIEpTR2x1
ZUdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnZXRUaHJlYWRHbG9iYWxEYXRhKCksIGpz
TnVsbCgpKSk7CiAgICAgICAgIGdjUHJvdGVjdChnbG9iYWxPYmplY3QpOwogICAgICAgICBwdGhy
ZWFkX3NldHNwZWNpZmljKGdsb2JhbE9iamVjdEtleSwgZ2xvYmFsT2JqZWN0KTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHJldmlzaW9uIDkxODUyKQor
KysgU291cmNlL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsMTEgQEAKIAogY2xhc3MgVXNlck9iamVjdEltcCA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBVc2VyT2JqZWN0SW1wKEpTR2xvYmFsRGF0YSYsIFN0
cnVjdHVyZSosIEpTVXNlck9iamVjdCopOworICAgIHN0YXRpYyBVc2VyT2JqZWN0SW1wKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNVc2Vy
T2JqZWN0KiB1c2VyT2JqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PFVzZXJPYmplY3RJbXA+KGdsb2JhbERhdGEuaGVhcCkpIFVzZXJPYmplY3RJbXAoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCB1c2VyT2JqKTsKKyAgICB9CisgICAgCiAgICAgdmlydHVhbCB+VXNlck9i
amVjdEltcCgpOwogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CkBAIC02NCw2
ICs2OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgVXNlck9iamVjdEltcChK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBKU1VzZXJPYmplY3QqKTsKICAgICBzdGF0aWMgSlNW
YWx1ZSB1c2VyT2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSk7CiAKICAgICBKU1VzZXJPYmplY3QqIGZKU1VzZXJPYmplY3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTg1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDExLTA3LTI3ICBNYXJrIEhhaG5l
bmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIG9wZXJhdG9y
IG5ldyBmcm9tIEpTQ2VsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgUmVtb3ZlZCB0aGUgaW1wbGVtZW50YXRp
b24gb2Ygb3BlcmF0b3IgbmV3IGluIEpTQ2VsbCwgc28gYW55IGZ1cnRoZXIgdXNlcworICAgICAg
ICB3aWxsIG5vdCBzdWNjZXNzZnVsbHkgbGluay4gIEFsc28gcmVtb3ZlZCBhbnkgcmVtYWluaW5n
IHVzZXMgb2Ygb3BlcmF0b3IgbmV3LgorCisgICAgICAgICogYnJpZGdlL2MvQ1J1bnRpbWVPYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNSdW50aW1lT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6Q0luc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OkNSdW50aW1lTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRp
bWVNZXRob2Q6OkNSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0
YW5jZTo6Z2V0TWV0aG9kKToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VK
U0MuY3BwOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAg
ICAgKEphdmFSdW50aW1lTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoSmF2YVJ1bnRpbWVNZXRo
b2Q6OkphdmFSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6Z2V0TWV0aG9k
KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhUnVudGltZU9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6SmF2YVJ1bnRpbWVPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICog
YnJpZGdlL29iamMvT2JqQ1J1bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
Ok9iakNSdW50aW1lT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNf
Y2xhc3MubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpjQ2xhc3M6OmZhbGxiYWNrT2Jq
ZWN0KToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tOgorICAgICAgICAo
T2JqY0luc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAgICAgICAgKE9iakNSdW50aW1lTWV0
aG9kOjpjcmVhdGUpOgorICAgICAgICAoT2JqQ1J1bnRpbWVNZXRob2Q6Ok9iakNSdW50aW1lTWV0
aG9kKToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0TWV0aG9kKToKKyAgICAgICAgKiBicmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUuaDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxs
YmFja09iamVjdEltcDo6Y3JlYXRlKToKKwogMjAxMS0wNy0yNyAgUm9iIEJ1aXMgIDxyYnVpc0By
aW0uY29tPgogCiAgICAgICAgIEltcGxlbWVudCBnZXRJbnRlcnNlY3Rpb25MaXN0KCksIGdldEVu
Y2xvc3VyZUxpc3QoKSwgY2hlY2tJbnRlcnNlY3Rpb24oKSBhbmQgY2hlY2tFbmNsb3N1cmUoKSBp
biBTVkdTVkdFbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2Jq
ZWN0LmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvQ1J1bnRp
bWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsMTEgQEAgY2xhc3MgQ0luc3Rh
bmNlOwogCiBjbGFzcyBDUnVudGltZU9iamVjdCA6IHB1YmxpYyBSdW50aW1lT2JqZWN0IHsKIHB1
YmxpYzoKLSAgICBDUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFBh
c3NSZWZQdHI8Q0luc3RhbmNlPik7CisgICAgc3RhdGljIENSdW50aW1lT2JqZWN0KiBjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PENJbnN0YW5jZT4gY2luc3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8Q1J1bnRpbWVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBDUnVudGltZU9iamVjdChleGVjLCBn
bG9iYWxPYmplY3QsIGNpbnN0KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5DUnVudGltZU9iamVj
dCgpOwogCiAgICAgQ0luc3RhbmNlKiBnZXRJbnRlcm5hbENJbnN0YW5jZSgpIGNvbnN0OwpAQCAt
NDgsNiArNTIsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CiAgICAgfQorCitwcml2YXRl
OgorICAgIENSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxDSW5zdGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2Nf
aW5zdGFuY2UuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIENJbnN0YW5j
ZTo6fkNJbnN0YW5jZSgpIAogCiBSdW50aW1lT2JqZWN0KiBDSW5zdGFuY2U6Om5ld1J1bnRpbWVP
YmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIENSdW50aW1l
T2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CisgICAgcmV0
dXJuIENSdW50aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCB0aGlzKTsKIH0KIAogQ2xhc3MgKkNJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdApAQCAt
MTExLDEyICsxMTEsOSBAQCBib29sIENJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0
CiAKIGNsYXNzIENSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewogcHVibGlj
OgotICAgIENSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3Qm
IGxpc3QpCi0gICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMg
dGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKLSAgICAgICAgLy8g
V2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCi0gICAg
ICAgIDogUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJlY2F0
ZWRHZXRET01TdHJ1Y3R1cmU8Q1J1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQorICAg
IHN0YXRpYyBDUnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1l
dGhvZExpc3QmIGxpc3QpCiAgICAgewotICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVNZXRob2Q+KCpleGVj
LT5oZWFwKCkpKSBDUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIG5hbWUsIGxpc3Qp
OwogICAgIH0KIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMTI1LDYgKzEyMiwxNiBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisK
K3ByaXZhdGU6CisgICAgQ1J1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0
aG9kTGlzdCYgbGlzdCkKKyAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1
cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAorICAg
ICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJp
Ii4KKyAgICAgICAgOiBSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgV2ViQ29yZTo6
ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxDUnVudGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxp
c3QpCisgICAgeworICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIH0KKwog
fTsKIAogY29uc3QgQ2xhc3NJbmZvIENSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJDUnVudGlt
ZU1ldGhvZCIsICZSdW50aW1lTWV0aG9kOjpzX2luZm8sIDAsIDAgfTsKQEAgLTEzMiw3ICsxMzks
NyBAQCBjb25zdCBDbGFzc0luZm8gQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9CiBKU1ZhbHVlIENJ
bnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1l
dGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIENS
dW50aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlO
YW1lLCBtZXRob2RMaXN0KTsKKyAgICByZXR1cm4gQ1J1bnRpbWVNZXRob2Q6OmNyZWF0ZShleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7
CiB9CiAKIEpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBS
dW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiA5MTg1MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgSmF2YUluc3RhbmNlOjp+SmF2YUluc3RhbmNlKCkK
IAogUnVudGltZU9iamVjdCogSmF2YUluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKYXZhUnVudGltZU9iamVjdChleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOworICAgIHJldHVybiBKYXZhUnVu
dGltZU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhp
cyk7CiB9CiAKICNkZWZpbmUgTlVNX0xPQ0FMX1JFRlMgNjQKQEAgLTExNiwxMiArMTE2LDkgQEAg
SlNWYWx1ZSBKYXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbgogCiBjbGFzcyBKYXZhUnVu
dGltZU1ldGhvZCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAgICBKYXZhUnVu
dGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAg
ICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5
cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8g
cGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAgICAgICA6IFJ1bnRp
bWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3Ry
dWN0dXJlPEphdmFSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICBzdGF0aWMg
SmF2YVJ1bnRpbWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RM
aXN0JiBsaXN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEphdmFSdW50aW1lTWV0aG9kPigqZXhlYy0+
aGVhcCgpKSkgSmF2YVJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0
KTsKICAgICB9CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTEzMCw2ICsxMjcsMTYg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwor
Citwcml2YXRlOgorICAgIEphdmFSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6
Ok1ldGhvZExpc3QmIGxpc3QpCisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3Ry
dWN0dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QK
KyAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZv
ciAiaSIuCisgICAgICAgIDogUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNv
cmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8SmF2YVJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBu
YW1lLCBsaXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAg
ICB9CisKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKYXZhUnVudGltZU1ldGhvZDo6c19pbmZvID0g
eyAiSmF2YVJ1bnRpbWVNZXRob2QiLCAmUnVudGltZU1ldGhvZDo6c19pbmZvLCAwLCAwIH07CkBA
IC0xMzcsNyArMTQ0LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEphdmFSdW50aW1lTWV0aG9kOjpzX2lu
ZgogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Qg
PSBnZXRDbGFzcygpLT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKLSAgICByZXR1
cm4gbmV3IChleGVjKSBKYXZhUnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIEphdmFSdW50
aW1lTWV0aG9kOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9w
ZXJ0eU5hbWUsIG1ldGhvZExpc3QpOwogfQogCiBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tl
TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVJ1bnRpbWVPYmpl
Y3QuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhUnVudGltZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQCBjbGFz
cyBKYXZhSW5zdGFuY2U7CiAKIGNsYXNzIEphdmFSdW50aW1lT2JqZWN0IDogcHVibGljIFJ1bnRp
bWVPYmplY3QgewogcHVibGljOgotICAgIEphdmFSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpT
R2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxKYXZhSW5zdGFuY2U+KTsKKyAgICBzdGF0aWMgSmF2
YVJ1bnRpbWVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8SmF2YUluc3RhbmNlPiBqYXZhSW5zdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKYXZhUnVudGltZU9iamVjdD4oKmV4ZWMt
PmhlYXAoKSkpIEphdmFSdW50aW1lT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgamF2YUluc3Qp
OworICAgIH0KKwogICAgIHZpcnR1YWwgfkphdmFSdW50aW1lT2JqZWN0KCk7CiAKICAgICBKYXZh
SW5zdGFuY2UqIGdldEludGVybmFsSmF2YUluc3RhbmNlKCkgY29uc3Q7CkBAIC00Niw2ICs1MCw5
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
QW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgSmF2
YVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEph
dmFJbnN0YW5jZT4pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
T2JqQ1J1bnRpbWVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
b2JqYy9PYmpDUnVudGltZU9iamVjdC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL09iakNSdW50aW1lT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDExIEBAIGNsYXNzIE9iamNJbnN0YW5jZTsKIAogY2xhc3MgT2JqQ1J1bnRpbWVPYmpl
Y3QgOiBwdWJsaWMgUnVudGltZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgT2JqQ1J1bnRpbWVPYmpl
Y3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPE9iamNJbnN0YW5jZT4p
OworICAgIHN0YXRpYyBPYmpDUnVudGltZU9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxPYmpjSW5zdGFuY2U+IGlu
c3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8T2JqQ1J1bnRpbWVP
YmplY3Q+KCpleGVjLT5oZWFwKCkpKSBPYmpDUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmpl
Y3QsIGluc3QpOworICAgIH0KKwogICAgIHZpcnR1YWwgfk9iakNSdW50aW1lT2JqZWN0KCk7CiAK
ICAgICBPYmpjSW5zdGFuY2UqIGdldEludGVybmFsT2JqQ0luc3RhbmNlKCkgY29uc3Q7CkBAIC00
Niw2ICs1MCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKICAgICB9CisKK3ByaXZhdGU6
CisgICAgT2JqQ1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPE9iamNJbnN0YW5jZT4pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL29iamMvb2JqY19jbGFzcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX2NsYXNzLm1tCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9vYmpjL29iamNfY2xhc3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYs
NyBAQCBKU1ZhbHVlIE9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0CiAgICAgCiAgICAg
aWYgKCFbdGFyZ2V0T2JqZWN0IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW52b2tlVW5k
ZWZpbmVkTWV0aG9kRnJvbVdlYlNjcmlwdDp3aXRoQXJndW1lbnRzOildKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXAoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBvYmpjSW5zdGFuY2UsIHBy
b3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIE9iamNGYWxsYmFja09iamVjdEltcDo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgb2JqY0luc3RhbmNlLCBwcm9wZXJ0eU5h
bWUpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3Rh
bmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5z
dGFuY2UubW0JKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMg
TlNNYXBUYWJsZSAqY3JlYXRlSW5zdGFuY2VXcmFwcGVyCiAKIFJ1bnRpbWVPYmplY3QqIE9iamNJ
bnN0YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJu
IG5ldyAoZXhlYykgT2JqQ1J1bnRpbWVPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCB0aGlzKTsKKyAgICByZXR1cm4gT2JqQ1J1bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOwogfQogCiB2b2lkIE9iamNJbnN0
YW5jZTo6c2V0R2xvYmFsRXhjZXB0aW9uKE5TU3RyaW5nKiBleGNlcHRpb24sIEpTR2xvYmFsT2Jq
ZWN0KiBleGNlcHRpb25FbnZpcm9ubWVudCkKQEAgLTE3MiwxMiArMTcyLDkgQEAgYm9vbCBPYmpj
SW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdAogCiBjbGFzcyBPYmpDUnVudGltZU1ldGhv
ZCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAgICBPYmpDUnVudGltZU1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAgICAgICAvLyBG
SVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9m
IHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0
aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAgICAgICA6IFJ1bnRpbWVNZXRob2Qo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPE9i
akNSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICBzdGF0aWMgT2JqQ1J1bnRp
bWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE9iakNSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkg
T2JqQ1J1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0KTsKICAgICB9
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTE4Niw2ICsxODMsMTUgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRl
OgorICAgIE9iakNSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExp
c3QmIGxpc3QpCisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVz
ZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCisg
ICAgICAgIDogUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJl
Y2F0ZWRHZXRET01TdHJ1Y3R1cmU8T2JqQ1J1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CiB9Owog
CiBjb25zdCBDbGFzc0luZm8gT2JqQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIk9iakNSdW50
aW1lTWV0aG9kIiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgMCwgMCB9OwpAQCAtMTkzLDcgKzE5
OSw3IEBAIGNvbnN0IENsYXNzSW5mbyBPYmpDUnVudGltZU1ldGhvZDo6c19pbmYKIEpTVmFsdWUg
T2JqY0luc3RhbmNlOjpnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gZ2V0Q2xhc3Mo
KS0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgT2JqQ1J1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBw
cm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworICAgIHJldHVybiBPYmpDUnVudGltZU1ldGhvZDo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBt
ZXRob2RMaXN0KTsKIH0KIAogSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtOTIsNyArOTIsMTAgQEAgcHJpdmF0ZToKIAogY2xhc3MgT2JqY0ZhbGxiYWNrT2JqZWN0SW1w
IDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgT2JqY0Zh
bGxiYWNrT2JqZWN0SW1wKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgT2JqY0luc3RhbmNl
KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgT2JqY0ZhbGxi
YWNrT2JqZWN0SW1wKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBPYmpjSW5zdGFuY2UqIGluc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmpjRmFsbGJh
Y2tPYmplY3RJbXA+KCpleGVjLT5oZWFwKCkpKSBPYmpjRmFsbGJhY2tPYmplY3RJbXAoZXhlYywg
Z2xvYmFsT2JqZWN0LCBpbnN0LCBwcm9wZXJ0eU5hbWUpOworICAgIH0KIAogICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0xMDksNiArMTEyLDcgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKKyAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBPYmpjSW5zdGFuY2UqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODU0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDctMjcgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgb3BlcmF0
b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIG9wZXJhdG9yIG5ldyBpbiBK
U0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAgd2lsbCBub3Qgc3VjY2Vzc2Z1bGx5
IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1c2VzIG9mIG9wZXJhdG9yIG5ldy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmg6Cisg
ICAgICAgIChXZWJLaXQ6OkpTTlBNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpKU05Q
T2JqZWN0OjptZXRob2RHZXR0ZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0Lmg6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmNyZWF0ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1h
cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVudGltZU9iamVjdE1hcDo6Z2V0T3JDcmVhdGVK
U09iamVjdCk6CisKIDIwMTEtMDctMjcgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBDbGVhbiBXS1BhZ2VMb2FkZXJDbGllbnQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL0pTTlBNZXRob2QuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMyArMzUsMTggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyBBIEpTT2JqZWN0IHRoYXQgd3Jh
cHMgYW4gTlBNZXRob2QuCiBjbGFzcyBKU05QTWV0aG9kIDogcHVibGljIEpTQzo6SW50ZXJuYWxG
dW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgSlNOUE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBOUElkZW50aWZpZXIpOwor
ICAgIHN0YXRpYyBKU05QTWV0aG9kKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVu
dCwgTlBJZGVudGlmaWVyIG5wSWRlbnQpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChKU0M6
OmFsbG9jYXRlQ2VsbDxKU05QTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgSlNOUE1ldGhvZChleGVj
LCBnbG9iYWxPYmplY3QsIGlkZW50LCBucElkZW50KTsKKyAgICB9CiAKICAgICBzdGF0aWMgY29u
c3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCiAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fbnBJZGVudGlmaWVyOyB9CiAKIHByaXZhdGU6ICAgIAorICAg
IEpTTlBNZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiwgTlBJZGVudGlmaWVyKTsKKwogICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1NCw3ICs0NTQsNyBAQCBKU1ZhbHVlIEpTTlBPYmplY3Q6Om1ldGhvZEdldHRlcihFeGVj
U3RhCiAgICAgICAgIHJldHVybiB0aHJvd0ludmFsaWRBY2Nlc3NFcnJvcihleGVjKTsKIAogICAg
IE5QSWRlbnRpZmllciBucElkZW50aWZpZXIgPSBucElkZW50aWZpZXJGcm9tSWRlbnRpZmllciht
ZXRob2ROYW1lKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU05QTWV0aG9kKGV4ZWMsIHRoaXNP
YmotPmdsb2JhbE9iamVjdCgpLCBtZXRob2ROYW1lLCBucElkZW50aWZpZXIpOworICAgIHJldHVy
biBKU05QTWV0aG9kOjpjcmVhdGUoZXhlYywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIG1ldGhv
ZE5hbWUsIG5wSWRlbnRpZmllcik7CiB9CiAKIEpTT2JqZWN0KiBKU05QT2JqZWN0Ojp0aHJvd0lu
dmFsaWRBY2Nlc3NFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHJl
dmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL0pTTlBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksMTEgQEAgY2xhc3Mg
TlBSdW50aW1lT2JqZWN0TWFwOwogCiBjbGFzcyBKU05QT2JqZWN0IDogcHVibGljIEpTQzo6SlNP
YmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBKU05QT2JqZWN0KEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBOUFJ1bnRpbWVPYmplY3RNYXAqIG9iamVjdE1hcCwgTlBPYmplY3QqIG5w
T2JqZWN0KTsKKyAgICBzdGF0aWMgSlNOUE9iamVjdCogY3JlYXRlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIE5QT2JqZWN0
KiBucE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKEpTQzo6YWxsb2NhdGVDZWxs
PEpTTlBPYmplY3Q+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLmhlYXApKSBKU05QT2JqZWN0
KGdsb2JhbE9iamVjdCwgb2JqZWN0TWFwLCBucE9iamVjdCk7CisgICAgfQorCiAgICAgfkpTTlBP
YmplY3QoKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwpAQCAtNTMsNiArNTcsOCBAQCBwdWJs
aWM6CiAgICAgTlBPYmplY3QqIG5wT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9ucE9iamVjdDsg
fQogCiBwcml2YXRlOgorICAgIEpTTlBPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIE5QUnVu
dGltZU9iamVjdE1hcCosIE5QT2JqZWN0Kik7CisKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAg
ICAKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIEpTT2JqZWN0KiBOUFJ1bnRpbWVPYmpl
Y3RNYXA6OmdldE9yQ3JlYXQKICAgICBpZiAoSlNDOjpXZWFrPEpTTlBPYmplY3Q+IGpzTlBPYmpl
Y3QgPSBtX2pzTlBPYmplY3RzLmdldChucE9iamVjdCkpCiAgICAgICAgIHJldHVybiBqc05QT2Jq
ZWN0LmdldCgpOwogCi0gICAgSlNOUE9iamVjdCoganNOUE9iamVjdCA9IG5ldyAoJmdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpKSBKU05QT2JqZWN0KGdsb2JhbE9iamVjdCwgdGhpcywgbnBPYmpl
Y3QpOworICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBKU05QT2JqZWN0OjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LCB0aGlzLCBucE9iamVjdCk7CiAgICAgbV9qc05QT2JqZWN0cy5zZXQobnBPYmpl
Y3QsIEpTQzo6V2VhazxKU05QT2JqZWN0PihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwganNO
UE9iamVjdCwgdGhpcywgbnBPYmplY3QpKTsKIAogICAgIHJldHVybiBqc05QT2JqZWN0OwpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxMS0wNy0yNyAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBv
cGVyYXRvciBuZXcgZnJvbSBKU0NlbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVtb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygb3BlcmF0b3IgbmV3
IGluIEpTQ2VsbCwgc28gYW55IGZ1cnRoZXIgdXNlcworICAgICAgICB3aWxsIG5vdCBzdWNjZXNz
ZnVsbHkgbGluay4gIEFsc28gcmVtb3ZlZCBhbnkgcmVtYWluaW5nIHVzZXMgb2Ygb3BlcmF0b3Ig
bmV3LgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbToKKyAgICAg
ICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OlByb3h5UnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UHJv
eHlSdW50aW1lTWV0aG9kOjpQcm94eVJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpQ
cm94eUluc3RhbmNlOjpnZXRNZXRob2QpOgorICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5
UnVudGltZU9iamVjdC5oOgorICAgICAgICAoV2ViS2l0OjpQcm94eVJ1bnRpbWVPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tOgorICAg
ICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgc2NvcGVDaGFpbl0pOgorCiAyMDExLTA3LTI2ICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzk4NDI4ODk+IEFkZCBhIGdlbmVyaWMgcGljdG9ncmFwaCBmb250IGZhbWlseQpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCShy
ZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5
SW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3ICsxMzQsNyBAQCBQcm94eUluc3Rh
bmNlOjp+UHJveHlJbnN0YW5jZSgpCiAgICAgCiBSdW50aW1lT2JqZWN0KiBQcm94eUluc3RhbmNl
OjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gbmV3IChl
eGVjKSBQcm94eVJ1bnRpbWVPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCB0aGlzKTsKKyAgICByZXR1cm4gUHJveHlSdW50aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKIH0KIAogSlNDOjpCaW5kaW5nczo6Q2xh
c3MqIFByb3h5SW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKQEAgLTE3OSwxMiArMTc5LDkgQEAg
SlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2UoSlNDOjpFeGVjUwogCiBjbGFzcyBQcm94eVJ1
bnRpbWVNZXRob2QgOiBwdWJsaWMgUnVudGltZU1ldGhvZCB7CiBwdWJsaWM6Ci0gICAgUHJveHlS
dW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3QpCi0g
ICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3Rv
dHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKLSAgICAgICAgLy8gZXhlYy1nbG9i
YWxEYXRhKCkgaXMgYWxzbyBsaWtlbHkgd3JvbmcuCi0gICAgICAgIDogUnVudGltZU1ldGhvZChl
eGVjLCBnbG9iYWxPYmplY3QsIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UHJveHlSdW50aW1l
TWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICBzdGF0aWMgUHJveHlSdW50aW1lTWV0aG9k
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlzdCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxQcm94eVJ1bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBQcm94eVJ1
bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0KTsKICAgICB9CiAKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTE5Myw2ICsxOTAsMTUgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAg
IFByb3h5UnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBs
aXN0KQorICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRo
ZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CisgICAgICAgIC8vIGV4
ZWMtZ2xvYmFsRGF0YSgpIGlzIGFsc28gbGlrZWx5IHdyb25nLgorICAgICAgICA6IFJ1bnRpbWVN
ZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5
UnVudGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAgeworICAgICAgICBBU1NFUlQo
aW5oZXJpdHMoJnNfaW5mbykpOworICAgIH0KIH07CiAKIGNvbnN0IENsYXNzSW5mbyBQcm94eVJ1
bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIlByb3h5UnVudGltZU1ldGhvZCIsICZSdW50aW1lTWV0
aG9kOjpzX2luZm8sIDAsIDAgfTsKQEAgLTIwMCw3ICsyMDYsNyBAQCBjb25zdCBDbGFzc0luZm8g
UHJveHlSdW50aW1lTWV0aG9kOjpzX2luCiBKU1ZhbHVlIFByb3h5SW5zdGFuY2U6OmdldE1ldGhv
ZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpCiB7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gZ2V0Q2xhc3MoKS0+bWV0aG9kc05h
bWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgUHJveHlSdW50
aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1l
LCBtZXRob2RMaXN0KTsKKyAgICByZXR1cm4gUHJveHlSdW50aW1lTWV0aG9kOjpjcmVhdGUoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3Qp
OwogfQogCiBKU1ZhbHVlIFByb3h5SW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6UnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5UnVudGltZU9iamVjdC5oCShy
ZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5
UnVudGltZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiwxMSBAQCBjbGFzcyBQ
cm94eUluc3RhbmNlOwogCiBjbGFzcyBQcm94eVJ1bnRpbWVPYmplY3QgOiBwdWJsaWMgSlNDOjpC
aW5kaW5nczo6UnVudGltZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgUHJveHlSdW50aW1lT2JqZWN0
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8UHJveHlJ
bnN0YW5jZT4pOworICAgIHN0YXRpYyBQcm94eVJ1bnRpbWVPYmplY3QqIGNyZWF0ZShKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVm
UHRyPFByb3h5SW5zdGFuY2U+IGluc3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChKU0M6
OmFsbG9jYXRlQ2VsbDxQcm94eVJ1bnRpbWVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBQcm94eVJ1
bnRpbWVPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnN0KTsKKyAgICB9CisKICAgICB2aXJ0
dWFsIH5Qcm94eVJ1bnRpbWVPYmplY3QoKTsKIAogICAgIFByb3h5SW5zdGFuY2UqIGdldEludGVy
bmFsUHJveHlJbnN0YW5jZSgpIGNvbnN0OwpAQCAtNDcsNiArNTEsOCBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKK3ByaXZhdGU6Cisg
ICAgUHJveHlSdW50aW1lT2JqZWN0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIFBhc3NSZWZQdHI8UHJveHlJbnN0YW5jZT4pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkocmV2
aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVn
RGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCAtIChOU0FycmF5
ICopc2NvcGVDaGFpbgogICAgIGZvciAoU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ID0gc2NvcGVDaGFp
bi0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBpdC0+Z2V0KCk7CiAgICAgICAgIGlmIChvYmplY3QtPmlzQWN0aXZhdGlvbk9iamVjdCgpKQot
ICAgICAgICAgICAgb2JqZWN0ID0gbmV3IChzY29wZUNoYWluLT5nbG9iYWxEYXRhKSBEZWJ1Z2dl
ckFjdGl2YXRpb24oKnNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIG9iamVjdCk7CisgICAgICAgICAg
ICBvYmplY3QgPSBEZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSgqc2NvcGVDaGFpbi0+Z2xvYmFs
RGF0YSwgb2JqZWN0KTsKICAgICAgICAgW3Njb3BlcyBhZGRPYmplY3Q6W3NlbGYgX2NvbnZlcnRW
YWx1ZVRvT2JqY1ZhbHVlOm9iamVjdF1dOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102172</attachid>
            <date>2011-07-27 12:46:47 -0700</date>
            <delta_ts>2011-07-27 13:10:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64999-20110727124649.patch</filename>
            <type>text/plain</type>
            <size>52986</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDctMjcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgb3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9u
IG9mIG9wZXJhdG9yIG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAg
d2lsbCBub3Qgc3VjY2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1
c2VzIG9mIG9wZXJhdG9yIG5ldy4KKworICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29wZSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNw
cDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6SlNTdGF0aWNTY29wZU9i
amVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlKToKKwogMjAxMS0wNy0yNyAgU2hp
bnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGFuIGlu
dGVyZmFjZSB0byB0YWtlIElzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0
ZQogI2VuZGlmCiAKICAgICBpZiAoIWdsb2JhbE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTR2xvYmFs
T2JqZWN0KCpnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnbG9i
YWxEYXRhLCBqc051bGwoKSkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAgICAgICAgcmV0dXJuIEpT
R2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVidWdnZXJB
Y3RpdmF0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRGVidWdnZXJBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CisgICAgICAg
IHN0YXRpYyBEZWJ1Z2dlckFjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTT2JqZWN0KiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxEZWJ1Z2dlckFjdGl2YXRpb24+KGdsb2JhbERhdGEuaGVhcCkpIERlYnVn
Z2VyQWN0aXZhdGlvbihnbG9iYWxEYXRhLCBvYmplY3QpOworICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVh
bCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwpAQCAtNTgsNiArNjEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTT2Jq
ZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6CisgICAgICAgIERlYnVnZ2VyQWN0
aXZhdGlvbihKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOwogICAgICAgICBXcml0ZUJhcnJpZXI8
SlNBY3RpdmF0aW9uPiBtX2FjdGl2YXRpb247CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5
MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDYsNyArMTIwNiw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBib29sIHB1c2hlZFNjb3BlID0gZmFsc2U7CiAg
ICAgaWYgKG51bVZhcmlhYmxlcyB8fCBudW1GdW5jdGlvbnMpIHsKICAgICAgICAgaWYgKGNvZGVC
bG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gbmV3
IChjYWxsRnJhbWUpIFN0cmljdEV2YWxBY3RpdmF0aW9uKGNhbGxGcmFtZSk7CisgICAgICAgICAg
ICB2YXJpYWJsZU9iamVjdCA9IFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1l
KTsKICAgICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5wdXNoKHZhcmlhYmxlT2Jq
ZWN0KTsKICAgICAgICAgICAgIHB1c2hlZFNjb3BlID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTMx
MSw3ICsxMzExLDcgQEAgTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBJbnRlcnByZXRlcgog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVy
YW5kKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKGNhbGxGcmFtZSkgSlNTdGF0
aWNTY29wZU9iamVjdChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7Cisg
ICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGNhbGxGcmFt
ZSwgcHJvcGVydHksIHZhbHVlLCBEb250RGVsZXRlKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoZHN0KSA9IEpTVmFsdWUoc2NvcGUpOwogCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKHNjb3BlKTsKQEAgLTQxMzYsNyArNDEzNiw3IEBAIHNraXBfaWRfY3VzdG9t
X3NlbGY6CiAgICAgICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0
aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCFmdW5jdGlv
bi0+bmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBm
dW5jdGlvblNjb3BlT2JqZWN0ID0gbmV3IChjYWxsRnJhbWUpIEpTU3RhdGljU2NvcGVPYmplY3Qo
Y2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUp
OworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9
IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCks
IGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgICAgICBmdW5jLT5zZXRTY29w
ZSgqZ2xvYmFsRGF0YSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7
CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwODIsNyArMzA4Miw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2YKICAgICAgICAgZG9lcyBub3QgYWZmZWN0IHRoZSBzY29w
ZSBlbmNsb3NpbmcgdGhlIEZ1bmN0aW9uRXhwcmVzc2lvbi4KICAgICAgKi8KICAgICBpZiAoIWZ1
bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCog
ZnVuY3Rpb25TY29wZU9iamVjdCA9IG5ldyAoY2FsbEZyYW1lKSBKU1N0YXRpY1Njb3BlT2JqZWN0
KGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRl
KTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpT
U3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1
bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmMtPnNldFNjb3BlKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmpl
Y3QpKTsKICAgICB9CiAKQEAgLTMzNzgsNyArMzM3OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEpTT2JqZWN0Kiwgb3BfcHVzaF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YSkgSlNTdGF0aWNTY29wZU9iamVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSwgRG9udERl
bGV0ZSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBz
dGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpLCBEb250RGVsZXRlKTsKIAogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDYgKzEyMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgICAg
IC8vIEdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBmaXJzdCB0
d28gZGVjbGFyYXRpb25zIG9mIG9wZXJhdG9yIG5ldyBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgaW1w
bGVtZW50YXRpb24gYW5kIAorICAgICAgICAvLyB3aWxsIGNhdXNlIGxpbmsgZXJyb3JzIGlmIHlv
dSB1c2UgdGhlbS4KICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgRXhlY1N0YXRl
Kik7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOwog
ICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwbGFjZW1lbnROZXdEZXN0
aW5hdGlvbikgeyByZXR1cm4gcGxhY2VtZW50TmV3RGVzdGluYXRpb247IH0KQEAgLTM1OCwyMCAr
MzYwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBpbmxpbmUgdm9p
ZCogSlNDZWxsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0ZShzaXplKSk7Ci0gICAgICAgIHJlc3VsdC0+bV9z
dHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBp
bmxpbmUgdm9pZCogSlNDZWxsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEV4ZWNTdGF0ZSog
ZXhlYykKLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplKSk7Ci0gICAgICAgIHJlc3VsdC0+bV9zdHJ1
Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCiAgICAg
aW5saW5lIHZvaWQgZGVzdHJ1Y3RvcihKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBjZWxs
LT5+SlNDZWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2V2YWxFbmFibGVkOwogCiAgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEu
aGVhcCkpIEpTR2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwor
CisgICAgcHJvdGVjdGVkOgogICAgICAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICAgICAgOiBK
U1ZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUsIDAp
CiAgICAgICAgICAgICAsIG1fcmVnaXN0ZXJBcnJheVNpemUoMCkKQEAgLTEzNCw5ICsxNDIsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGluaXQodGhpcyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwotCi0g
ICAgcHJvdGVjdGVkOgogICAgICAgICBKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogdGhpc1ZhbHVlKQogICAgICAg
ICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9s
VGFibGUsIDApCiAgICAgICAgICAgICAsIG1fcmVnaXN0ZXJBcnJheVNpemUoMCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0
LmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dGF0aWNTY29wZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsOSBAQCBuYW1l
c3BhY2UgSlNDewogICAgIAogICAgIGNsYXNzIEpTU3RhdGljU2NvcGVPYmplY3QgOiBwdWJsaWMg
SlNWYXJpYWJsZU9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkuc3RhdGljU2NvcGVTdHJ1Y3R1
cmUuZ2V0KCksICZtX3N5bWJvbFRhYmxlLCByZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJm1f
cmVnaXN0ZXJTdG9yZSArIDEpKQorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEpTVmFsdWUg
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fcmVn
aXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEs
IGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0
YXRpY1Njb3BlT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNTdGF0aWNTY29wZU9iamVjdChleGVj
LCBpZGVudCwgdmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKQEAgLTUzLDYgKzUxLDEzIEBAIG5h
bWVzcGFjZSBKU0N7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTVmFy
aWFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgOiBKU1Zh
cmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRp
Y1Njb3BlU3RydWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnByZXRfY2FzdDxS
ZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9yZWdpc3RlclN0b3JlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwgU3ltYm9sVGFibGVFbnRy
eSgtMSwgYXR0cmlidXRlcykpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTeW1ib2xU
YWJsZSBtX3N5bWJvbFRhYmxlOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdp
c3RlclN0b3JlOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpY3RFdmFsQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFN0cmlj
dEV2YWxBY3RpdmF0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgotICAg
IFN0cmljdEV2YWxBY3RpdmF0aW9uKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBTdHJpY3RFdmFs
QWN0aXZhdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpY3RFdmFsQWN0aXZhdGlvbj4oKmV4ZWMtPmhlYXAoKSkp
IFN0cmljdEV2YWxBY3RpdmF0aW9uKGV4ZWMpOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdmlydHVh
bCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwg
SlNWYWx1ZSB0b1N0cmljdFRoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC00NCw2ICs0
OCw5IEBAIHB1YmxpYzoKICAgICAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgSlNOb25GaW5hbE9iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CisKK3ByaXZhdGU6CisgICAgU3RyaWN0RXZhbEFjdGl2YXRpb24o
RXhlY1N0YXRlKik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDctMjcgIE1hcmsg
SGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgb3Bl
cmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIG9wZXJhdG9yIG5ldyBp
biBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAgd2lsbCBub3Qgc3VjY2Vzc2Z1
bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1c2VzIG9mIG9wZXJhdG9yIG5l
dy4KKworICAgICAgICAqIEpTUnVuLmNwcDoKKyAgICAgICAgKEpTUnVuOjpKU1J1bik6CisgICAg
ICAgICogSlNSdW4uaDoKKyAgICAgICAgKEpTR2x1ZUdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBKU1V0aWxzLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0S0pTVmFsdWUpOgorICAgICAg
ICAoZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBVc2VyT2JqZWN0SW1wLmg6Cisg
ICAgICAgIChVc2VyT2JqZWN0SW1wOjpjcmVhdGUpOgorCiAyMDExLTA3LTAxICBKdW5nc2hpayBT
aGluICA8anNoaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQ
cm9za3VyeWFrb3YuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJKHJldmlzaW9uIDkxODUy
KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBKU0dsdWVHbG9iYWxPYmplY3Q6OkpTR2x1ZUdsb2JhbE9iamVjdChKCiBK
U1J1bjo6SlNSdW4oQ0ZTdHJpbmdSZWYgc291cmNlLCBKU0ZsYWdzIGluRmxhZ3MpCiAgICAgOiAg
IEpTQmFzZShrSlNSdW5UeXBlSUQpLAogICAgICAgICBmU291cmNlKENGU3RyaW5nVG9VU3RyaW5n
KHNvdXJjZSkpLAotICAgICAgICBmR2xvYmFsT2JqZWN0KGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0
ZSgpLT5nbG9iYWxEYXRhKCksIG5ldyAoJmdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpLT5nbG9i
YWxEYXRhKCkpIEpTR2x1ZUdsb2JhbE9iamVjdChnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+
Z2xvYmFsRGF0YSgpLCBKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShnZXRUaHJl
YWRHbG9iYWxFeGVjU3RhdGUoKS0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSksIGluRmxhZ3MpKSwK
KyAgICAgICAgZkdsb2JhbE9iamVjdChnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+Z2xvYmFs
RGF0YSgpLCBKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZShnZXRUaHJlYWRHbG9iYWxFeGVjU3Rh
dGUoKS0+Z2xvYmFsRGF0YSgpLCBKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShn
ZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSksIGluRmxh
Z3MpKSwKICAgICAgICAgZkZsYWdzKGluRmxhZ3MpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdEdsdWUvSlNSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNS
dW4uaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE3IEBACiAKIGNsYXNzIEpTR2x1ZUdsb2JhbE9i
amVjdCA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBKU0ds
dWVHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSlNGbGFncyA9IGtKU0Zs
YWdOb25lKTsKKyAgICAgICAgc3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRmxhZ3MgZmxhZ3Mg
PSBrSlNGbGFnTm9uZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEpTR2x1ZUdsb2JhbE9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNHbHVlR2xvYmFs
T2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgZmxhZ3MpOworICAgICAgICB9CiAKICAgICAg
ICAgSlNGbGFncyBGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICAgICAgU3Ry
dWN0dXJlKiB1c2VyT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VyT2JqZWN0
U3RydWN0dXJlLmdldCgpOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBKU0dsdWVHbG9iYWxP
YmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSlNGbGFncyA9IGtKU0ZsYWdOb25lKTsK
KyAgICAgICAgCiAgICAgICAgIEpTRmxhZ3MgbV9mbGFnczsKICAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gbV91c2VyT2JqZWN0U3RydWN0dXJlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
R2x1ZS9KU1V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNV
dGlscy5jcHAJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRp
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyArMTg0LDcgQEAgSlNWYWx1ZSBKU09iamVj
dEtKU1ZhbHVlKEpTVXNlck9iamVjdCogcAogICAgICAgICBpZiAoIWhhbmRsZWQpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0
ZSgpOwotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChleGVjKSBVc2VyT2JqZWN0SW1wKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KCktPnVzZXJPYmplY3RTdHJ1Y3R1
cmUoKSwgcHRyKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFVzZXJPYmplY3RJbXA6OmNyZWF0ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGdldFRocmVhZEdsb2JhbE9iamVjdCgpLT51c2VyT2JqZWN0U3Ry
dWN0dXJlKCksIHB0cik7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgSlNHbHVlR2xvYmFsT2JqZWN0KiBnZXRUaHJlYWRHbG9i
CiAgICAgcHRocmVhZF9vbmNlKCZnbG9iYWxPYmplY3RLZXlPbmNlLCBpbml0aWFsaXplR2xvYmFs
T2JqZWN0S2V5KTsKICAgICBKU0dsdWVHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRp
Y19jYXN0PEpTR2x1ZUdsb2JhbE9iamVjdCo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoZ2xvYmFsT2Jq
ZWN0S2V5KSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgZ2xvYmFsT2JqZWN0
ID0gbmV3IChnZXRUaHJlYWRHbG9iYWxEYXRhKCkpIEpTR2x1ZUdsb2JhbE9iamVjdCgqZ2V0VGhy
ZWFkR2xvYmFsRGF0YSgpLCBKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2V0
VGhyZWFkR2xvYmFsRGF0YSgpLCBqc051bGwoKSkpOworICAgICAgICBnbG9iYWxPYmplY3QgPSBK
U0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2V0VGhyZWFkR2xvYmFsRGF0YSgpLCBKU0dsdWVH
bG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2V0VGhyZWFkR2xvYmFsRGF0YSgpLCBqc051
bGwoKSkpOwogICAgICAgICBnY1Byb3RlY3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcHRocmVh
ZF9zZXRzcGVjaWZpYyhnbG9iYWxPYmplY3RLZXksIGdsb2JhbE9iamVjdCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCShyZXZpc2lvbiA5MTg1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDExIEBACiAKIGNsYXNzIFVzZXJPYmplY3RJbXAgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgVXNlck9iamVjdEltcChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqLCBKU1VzZXJPYmplY3QqKTsKKyAgICBzdGF0aWMgVXNlck9iamVjdEltcCogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVXNlck9i
amVjdCogdXNlck9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxVc2VyT2JqZWN0SW1wPihnbG9iYWxEYXRhLmhlYXApKSBVc2VyT2JqZWN0SW1wKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSwgdXNlck9iamVjdCk7CisgICAgfQorICAgIAogICAgIHZpcnR1YWwgflVz
ZXJPYmplY3RJbXAoKTsKIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAt
NjQsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIFVzZXJPYmplY3RJ
bXAoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSlNVc2VyT2JqZWN0Kik7CiAgICAgc3RhdGlj
IEpTVmFsdWUgdXNlck9iamVjdEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogCiAgICAgSlNVc2VyT2JqZWN0KiBmSlNVc2VyT2JqZWN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMS0wNy0yNyAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBvcGVy
YXRvciBuZXcgZnJvbSBKU0NlbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVu
dGF0aW9uIG9mIG9wZXJhdG9yIG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAg
ICAgICAgd2lsbCBub3Qgc3VjY2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFp
bmluZyB1c2VzIG9mIG9wZXJhdG9yIG5ldy4KKworICAgICAgICAqIGJyaWRnZS9jL0NSdW50aW1l
T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDUnVudGltZU9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OkNJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNS
dW50aW1lTWV0aG9kOjpDUnVudGltZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpD
SW5zdGFuY2U6OmdldE1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUluc3Rh
bmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6Cisg
ICAgICAgIChKYXZhUnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKEphdmFSdW50aW1l
TWV0aG9kOjpKYXZhUnVudGltZU1ldGhvZCk6CisgICAgICAgIChKYXZhSW5zdGFuY2U6OmdldE1l
dGhvZCk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVJ1bnRpbWVPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFSdW50aW1lT2JqZWN0OjpjcmVhdGUpOgorICAgICAg
ICAqIGJyaWRnZS9vYmpjL09iakNSdW50aW1lT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpPYmpDUnVudGltZU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9v
YmpjX2NsYXNzLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0NsYXNzOjpmYWxsYmFj
a09iamVjdCk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbToKKyAgICAg
ICAgKE9iamNJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgIChPYmpDUnVudGlt
ZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKE9iakNSdW50aW1lTWV0aG9kOjpPYmpDUnVudGlt
ZU1ldGhvZCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OmdldE1ldGhvZCk6CisgICAgICAgICog
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OmNyZWF0ZSk6CisKIDIwMTEtMDctMjcgIFJvYiBCdWlzICA8cmJ1
aXNAcmltLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgZ2V0SW50ZXJzZWN0aW9uTGlzdCgpLCBn
ZXRFbmNsb3N1cmVMaXN0KCksIGNoZWNrSW50ZXJzZWN0aW9uKCkgYW5kIGNoZWNrRW5jbG9zdXJl
KCkgaW4gU1ZHU1ZHRWxlbWVudApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBSdW50aW1lTWV0aG9kIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHVi
bGljOgotICAgIFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYpOwor
ICAgIHN0YXRpYyBSdW50aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIG1ldGhvZExpc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAo
KSkpIFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG5hbWUsIG1l
dGhvZExpc3QpOworICAgIH0KKwogICAgIEJpbmRpbmdzOjpNZXRob2RMaXN0KiBtZXRob2RzKCkg
Y29uc3QgeyByZXR1cm4gX21ldGhvZExpc3QuZ2V0KCk7IH0KIAogICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwpAQCAtNTEsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90
ZWN0ZWQ6CisgICAgUnVudGltZU1ldGhvZChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0Jik7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJuYWxGdW5jdGlvbjo6U3RydWN0dXJlRmxhZ3M7CiAKIHBy
aXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmgJKHJl
dmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvQ1J1bnRpbWVPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsMTEgQEAgY2xhc3MgQ0luc3RhbmNlOwogCiBj
bGFzcyBDUnVudGltZU9iamVjdCA6IHB1YmxpYyBSdW50aW1lT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICBDUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8
Q0luc3RhbmNlPik7CisgICAgc3RhdGljIENSdW50aW1lT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPENJbnN0YW5j
ZT4gY2luc3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Q1J1bnRp
bWVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBDUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmpl
Y3QsIGNpbnN0KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5DUnVudGltZU9iamVjdCgpOwogCiAg
ICAgQ0luc3RhbmNlKiBnZXRJbnRlcm5hbENJbnN0YW5jZSgpIGNvbnN0OwpAQCAtNDgsNiArNTIs
OSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CiAgICAgfQorCitwcml2YXRlOgorICAgIENS
dW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxDSW5z
dGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2Uu
Y3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIENJbnN0YW5jZTo6fkNJbnN0
YW5jZSgpIAogCiBSdW50aW1lT2JqZWN0KiBDSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIENSdW50aW1lT2JqZWN0KGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CisgICAgcmV0dXJuIENSdW50
aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlz
KTsKIH0KIAogQ2xhc3MgKkNJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdApAQCAtMTExLDEyICsx
MTEsOSBAQCBib29sIENJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0CiAKIGNsYXNz
IENSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewogcHVibGljOgotICAgIENS
dW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3QpCi0g
ICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3Rv
dHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKLSAgICAgICAgLy8gV2UgbmVlZCB0
byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCi0gICAgICAgIDogUnVu
dGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01T
dHJ1Y3R1cmU8Q1J1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQorICAgIHN0YXRpYyBD
UnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3Qm
IGxpc3QpCiAgICAgewotICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkp
KSBDUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIG5hbWUsIGxpc3QpOwogICAgIH0K
IAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMTI1LDYgKzEyMiwxNiBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKK3ByaXZhdGU6
CisgICAgQ1J1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYg
bGlzdCkKKyAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0
aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAorICAgICAgICAvLyBX
ZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KKyAgICAg
ICAgOiBSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgV2ViQ29yZTo6ZGVwcmVjYXRl
ZEdldERPTVN0cnVjdHVyZTxDUnVudGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAg
eworICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIH0KKwogfTsKIAogY29u
c3QgQ2xhc3NJbmZvIENSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJDUnVudGltZU1ldGhvZCIs
ICZSdW50aW1lTWV0aG9kOjpzX2luZm8sIDAsIDAgfTsKQEAgLTEzMiw3ICsxMzksNyBAQCBjb25z
dCBDbGFzc0luZm8gQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9CiBKU1ZhbHVlIENJbnN0YW5jZTo6
Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1l
ZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIENSdW50aW1lTWV0
aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRo
b2RMaXN0KTsKKyAgICByZXR1cm4gQ1J1bnRpbWVNZXRob2Q6OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CiB9CiAKIEpT
VmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0
aG9kKiBydW50aW1lTWV0aG9kKQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgSmF2YUluc3RhbmNlOjp+SmF2YUluc3RhbmNlKCkKIAogUnVudGlt
ZU9iamVjdCogSmF2YUluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKYXZhUnVudGltZU9iamVjdChleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOworICAgIHJldHVybiBKYXZhUnVudGltZU9iamVj
dDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CiAK
ICNkZWZpbmUgTlVNX0xPQ0FMX1JFRlMgNjQKQEAgLTExNiwxMiArMTE2LDkgQEAgSlNWYWx1ZSBK
YXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbgogCiBjbGFzcyBKYXZhUnVudGltZU1ldGhv
ZCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAgICBKYXZhUnVudGltZU1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAgICAgICAvLyBG
SVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9m
IHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0
aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAgICAgICA6IFJ1bnRpbWVNZXRob2Qo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPEph
dmFSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICBzdGF0aWMgSmF2YVJ1bnRp
bWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEphdmFSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkg
SmF2YVJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0KTsKICAgICB9
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTEzMCw2ICsxMjcsMTYgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRl
OgorICAgIEphdmFSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExp
c3QmIGxpc3QpCisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVz
ZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCisg
ICAgICAgIDogUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJl
Y2F0ZWRHZXRET01TdHJ1Y3R1cmU8SmF2YVJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CisKIH07
CiAKIGNvbnN0IENsYXNzSW5mbyBKYXZhUnVudGltZU1ldGhvZDo6c19pbmZvID0geyAiSmF2YVJ1
bnRpbWVNZXRob2QiLCAmUnVudGltZU1ldGhvZDo6c19pbmZvLCAwLCAwIH07CkBAIC0xMzcsNyAr
MTQ0LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEphdmFSdW50aW1lTWV0aG9kOjpzX2luZgogSlNWYWx1
ZSBKYXZhSW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFz
cygpLT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKLSAgICByZXR1cm4gbmV3IChl
eGVjKSBKYXZhUnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIEphdmFSdW50aW1lTWV0aG9k
OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUs
IG1ldGhvZExpc3QpOwogfQogCiBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4
ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVJ1bnRpbWVPYmplY3QuaAkocmV2
aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhUnVudGlt
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQCBjbGFzcyBKYXZhSW5z
dGFuY2U7CiAKIGNsYXNzIEphdmFSdW50aW1lT2JqZWN0IDogcHVibGljIFJ1bnRpbWVPYmplY3Qg
ewogcHVibGljOgotICAgIEphdmFSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgUGFzc1JlZlB0cjxKYXZhSW5zdGFuY2U+KTsKKyAgICBzdGF0aWMgSmF2YVJ1bnRpbWVP
YmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8SmF2YUluc3RhbmNlPiBqYXZhSW5zdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKYXZhUnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkp
IEphdmFSdW50aW1lT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgamF2YUluc3QpOworICAgIH0K
KwogICAgIHZpcnR1YWwgfkphdmFSdW50aW1lT2JqZWN0KCk7CiAKICAgICBKYXZhSW5zdGFuY2Uq
IGdldEludGVybmFsSmF2YUluc3RhbmNlKCkgY29uc3Q7CkBAIC00Niw2ICs1MCw5IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3Vz
U2xvdENvdW50LCAmc19pbmZvKTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgSmF2YVJ1bnRpbWVP
YmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEphdmFJbnN0YW5j
ZT4pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvT2JqQ1J1bnRp
bWVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9PYmpD
UnVudGltZU9iamVjdC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL09iakNSdW50aW1lT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDEx
IEBAIGNsYXNzIE9iamNJbnN0YW5jZTsKIAogY2xhc3MgT2JqQ1J1bnRpbWVPYmplY3QgOiBwdWJs
aWMgUnVudGltZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgT2JqQ1J1bnRpbWVPYmplY3QoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPE9iamNJbnN0YW5jZT4pOworICAgIHN0
YXRpYyBPYmpDUnVudGltZU9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxPYmpjSW5zdGFuY2U+IGluc3QpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8T2JqQ1J1bnRpbWVPYmplY3Q+KCpl
eGVjLT5oZWFwKCkpKSBPYmpDUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGluc3Qp
OworICAgIH0KKwogICAgIHZpcnR1YWwgfk9iakNSdW50aW1lT2JqZWN0KCk7CiAKICAgICBPYmpj
SW5zdGFuY2UqIGdldEludGVybmFsT2JqQ0luc3RhbmNlKCkgY29uc3Q7CkBAIC00Niw2ICs1MCw5
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
QW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT2Jq
Q1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPE9i
amNJbnN0YW5jZT4pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19jbGFzcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX2NsYXNzLm1tCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfY2xhc3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBKU1Zh
bHVlIE9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0CiAgICAgCiAgICAgaWYgKCFbdGFy
Z2V0T2JqZWN0IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW52b2tlVW5kZWZpbmVkTWV0
aG9kRnJvbVdlYlNjcmlwdDp3aXRoQXJndW1lbnRzOildKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBPYmpjRmFsbGJhY2tPYmplY3RJbXAoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBvYmpjSW5zdGFuY2UsIHByb3BlcnR5TmFt
ZSk7CisgICAgcmV0dXJuIE9iamNGYWxsYmFja09iamVjdEltcDo6Y3JlYXRlKGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgb2JqY0luc3RhbmNlLCBwcm9wZXJ0eU5hbWUpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0J
KHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0
YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgTlNNYXBUYWJs
ZSAqY3JlYXRlSW5zdGFuY2VXcmFwcGVyCiAKIFJ1bnRpbWVPYmplY3QqIE9iamNJbnN0YW5jZTo6
bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgT2JqQ1J1bnRpbWVPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0
aGlzKTsKKyAgICByZXR1cm4gT2JqQ1J1bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOwogfQogCiB2b2lkIE9iamNJbnN0YW5jZTo6c2V0
R2xvYmFsRXhjZXB0aW9uKE5TU3RyaW5nKiBleGNlcHRpb24sIEpTR2xvYmFsT2JqZWN0KiBleGNl
cHRpb25FbnZpcm9ubWVudCkKQEAgLTE3MiwxMiArMTcyLDkgQEAgYm9vbCBPYmpjSW5zdGFuY2U6
OnN1cHBvcnRzSW52b2tlRGVmYXVsdAogCiBjbGFzcyBPYmpDUnVudGltZU1ldGhvZCA6IHB1Ymxp
YyBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAgICBPYmpDUnVudGltZU1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAgICAgICAvLyBGSVhNRTogZGVw
cmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9u
ZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQg
Z2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAgICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xv
YmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPE9iakNSdW50aW1l
TWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICBzdGF0aWMgT2JqQ1J1bnRpbWVNZXRob2Qq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQogICAgIHsK
LSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPE9iakNSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgT2JqQ1J1bnRp
bWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0KTsKICAgICB9CiAKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTE4Niw2ICsxODMsMTUgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAgIE9i
akNSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3Qp
CisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHBy
b3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCisgICAgICAgIDog
UnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRE
T01TdHJ1Y3R1cmU8T2JqQ1J1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CiB9OwogCiBjb25zdCBD
bGFzc0luZm8gT2JqQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIk9iakNSdW50aW1lTWV0aG9k
IiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgMCwgMCB9OwpAQCAtMTkzLDcgKzE5OSw3IEBAIGNv
bnN0IENsYXNzSW5mbyBPYmpDUnVudGltZU1ldGhvZDo6c19pbmYKIEpTVmFsdWUgT2JqY0luc3Rh
bmNlOjpnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCiB7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gZ2V0Q2xhc3MoKS0+bWV0aG9k
c05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgT2JqQ1J1
bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5h
bWUsIG1ldGhvZExpc3QpOworICAgIHJldHVybiBPYmpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0
KTsKIH0KIAogSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4
ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyAr
OTIsMTAgQEAgcHJpdmF0ZToKIAogY2xhc3MgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wIDogcHVibGlj
IEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgT2JqY0ZhbGxiYWNrT2Jq
ZWN0SW1wKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgT2JqY0luc3RhbmNlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgT2JqY0ZhbGxiYWNrT2JqZWN0
SW1wKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBPYmpjSW5zdGFuY2UqIGluc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmpjRmFsbGJhY2tPYmplY3RJ
bXA+KCpleGVjLT5oZWFwKCkpKSBPYmpjRmFsbGJhY2tPYmplY3RJbXAoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbnN0LCBwcm9wZXJ0eU5hbWUpOworICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOwogCkBAIC0xMDksNiArMTEyLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJp
dmF0ZToKKyAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBPYmpjSW5zdGFuY2UqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3
ICs4Niw3IEBAIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0YXQKICAgICBp
ZiAobm9ybWFsLmNvbnRhaW5zKCcoJykgJiYgKGluZGV4ID0gbV9tZXRhT2JqZWN0LT5pbmRleE9m
TWV0aG9kKG5vcm1hbCkpICE9IC0xKSB7CiAgICAgICAgIFFNZXRhTWV0aG9kIG0gPSBtX21ldGFP
YmplY3QtPm1ldGhvZChpbmRleCk7CiAgICAgICAgIGlmIChtLmFjY2VzcygpICE9IFFNZXRhTWV0
aG9kOjpQcml2YXRlKSB7Ci0gICAgICAgICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB2YWwgPSBu
ZXcgKGV4ZWMpIFF0UnVudGltZU1ldGFNZXRob2QoZXhlYywgaWRlbnRpZmllciwgc3RhdGljX2Nh
c3Q8UXRJbnN0YW5jZSo+KGluc3QpLCBpbmRleCwgbm9ybWFsLCBmYWxzZSk7CisgICAgICAgICAg
ICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB2YWwgPSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjcmVhdGUo
ZXhlYywgaWRlbnRpZmllciwgc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3QpLCBpbmRleCwg
bm9ybWFsLCBmYWxzZSk7CiAgICAgICAgICAgICBxdGluc3QtPm1fbWV0aG9kcy5pbnNlcnQobmFt
ZSwgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PihleGVjLT5nbG9iYWxEYXRhKCksIHF0aW5zdC0+Y3Jl
YXRlUnVudGltZU9iamVjdChleGVjKSwgdmFsKSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsOwog
ICAgICAgICB9CkBAIC0xMDUsNyArMTA1LDcgQEAgSlNWYWx1ZSBRdENsYXNzOjpmYWxsYmFja09i
amVjdChFeGVjU3RhdAogICAgICAgICAgICAgKytpdGVyOwogCiAgICAgICAgIGlmIChub3JtYWwg
PT0gUUJ5dGVBcnJheTo6ZnJvbVJhd0RhdGEoc2lnbmF0dXJlLCBpdGVyKSkgewotICAgICAgICAg
ICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFsID0gbmV3IChleGVjKSBRdFJ1bnRpbWVNZXRhTWV0
aG9kKGV4ZWMsIGlkZW50aWZpZXIsIHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5k
ZXgsIG5vcm1hbCwgZmFsc2UpOworICAgICAgICAgICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFs
ID0gUXRSdW50aW1lTWV0YU1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlkZW50aWZpZXIsIHN0YXRpY19j
YXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5kZXgsIG5vcm1hbCwgZmFsc2UpOwogICAgICAgICAg
ICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0KG5hbWUsIFdyaXRlQmFycmllcjxKU09iamVjdD4o
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBxdGluc3QtPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyksIHZh
bCkpOwogICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDggKzUwLDExIEBAIFFfR0xPQkFMX1NUQVRJQyhRdEluc3RhbmNlOjpRdFNlbmRlclN0YWMKIC8v
IERlcml2ZWQgUnVudGltZU9iamVjdAogY2xhc3MgUXRSdW50aW1lT2JqZWN0IDogcHVibGljIFJ1
bnRpbWVPYmplY3QgewogcHVibGljOgotICAgIFF0UnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsKLQorICAgIHN0YXRpYyBRdFJ1
bnRpbWVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkp
IFF0UnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGluc3RhbmNlKTsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTY5LDYgKzcyLDkgQEAg
cHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gUnVudGltZU9iamVjdDo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuOworCitwcml2YXRlOgorICAgIFF0UnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsKIH07CiAKIGNvbnN0IENsYXNzSW5m
byBRdFJ1bnRpbWVPYmplY3Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU9iamVjdCIsICZSdW50aW1l
T2JqZWN0OjpzX2luZm8sIDAsIDAgfTsKQEAgLTE4Miw3ICsxODgsNyBAQCBSdW50aW1lT2JqZWN0
KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBtX21ldGhvZHMuY2xlYXIoKTsKLSAgICByZXR1cm4gbmV3IChl
eGVjKSBRdFJ1bnRpbWVPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0
aGlzKTsKKyAgICByZXR1cm4gUXRSdW50aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKIH0KIAogdm9pZCBRdEluc3RhbmNlOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTIzOCw3ICsyNDQsNyBAQCBKU1ZhbHVl
IFF0SW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqCiAgICAgaWYgKCFnZXRDbGFzcygpKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gbV9j
bGFzcy0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIG5ldyAo
ZXhlYykgUnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIFdl
YkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UnVudGltZU1ldGhvZD4oZXhlYyksIHBy
b3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIFJ1bnRpbWVNZXRob2Q6OmNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIFdlYkNvcmU6OmRlcHJlY2F0ZWRH
ZXRET01TdHJ1Y3R1cmU8UnVudGltZU1ldGhvZD4oZXhlYyksIHByb3BlcnR5TmFtZSwgbWV0aG9k
TGlzdCk7CiB9CiAKIEpTVmFsdWUgUXRJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSos
IFJ1bnRpbWVNZXRob2QqKQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1h
cHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9w
aXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgs
MTAgQEAgc3RydWN0IFF0UGl4bWFwTWV0YURhdGEgewogLy8gRGVyaXZlZCBSdW50aW1lT2JqZWN0
CiBjbGFzcyBRdFBpeG1hcFJ1bnRpbWVPYmplY3QgOiBwdWJsaWMgUnVudGltZU9iamVjdCB7CiBw
dWJsaWM6Ci0gICAgUXRQaXhtYXBSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgUGFzc1JlZlB0cjxJbnN0YW5jZT4pOworICAgIHN0YXRpYyBRdFBpeG1hcFJ1bnRpbWVP
YmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPFF0UGl4bWFwUnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkp
IFF0UGl4bWFwUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGluc3RhbmNlKTsKKyAg
ICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMjA5LDYgKzIx
Miw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IFJ1bnRpbWVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbjsKKworcHJpdmF0ZToKKyAgICBRdFBpeG1hcFJ1bnRpbWVPYmplY3QoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEluc3RhbmNlPik7CiB9OwogCiBR
dFBpeG1hcFJ1bnRpbWVPYmplY3Q6OlF0UGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGlu
c3RhbmNlKQpAQCAtMjMxLDcgKzIzNyw3IEBAIENsYXNzKiBRdFBpeG1hcEluc3RhbmNlOjpnZXRD
bGFzcygpIGNvbnMKIEpTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIE1ldGhvZExp
c3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRo
aXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFJ1
bnRpbWVNZXRob2Q+KGV4ZWMpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworICAgIHJldHVy
biBSdW50aW1lTWV0aG9kOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVNZXRob2Q+KGV4ZWMp
LCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOwogfQogCiBKU1ZhbHVlIFF0UGl4bWFwSW5zdGFu
Y2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVN
ZXRob2QpCkBAIC00MDIsNyArNDA4LDcgQEAgcmV0dXJuRW1wdHlWYXJpYW50OgogCiBSdW50aW1l
T2JqZWN0KiBRdFBpeG1hcEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4gbmV3KGV4ZWMpIFF0UGl4bWFwUnVudGltZU9iamVjdChleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOworICAgIHJldHVybiBRdFBpeG1hcFJ1
bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRo
aXMpOwogfQogCiBKU09iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGlt
ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29u
c3QgUVZhcmlhbnQmIGRhdGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVu
dGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRp
bWUuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Niw3ICsxNTQ2LDcgQEAgSlNWYWx1ZSBR
dFJ1bnRpbWVNZXRhTWV0aG9kOjpjb25uZWN0R2V0dAogICAgIFFXX0RTKFF0UnVudGltZU1ldGFN
ZXRob2QsIHRoaXNPYmopOwogCiAgICAgaWYgKCFkLT5tX2Nvbm5lY3QpCi0gICAgICAgIGQtPm1f
Y29ubmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBuZXcgKGV4ZWMpIFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2QoZXhlYywgaWRlbnQsIHRydWUsIGQtPm1faW5zdGFuY2UsIGQt
Pm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7CisgICAgICAgIGQtPm1fY29ubmVjdC5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjcmVh
dGUoZXhlYywgaWRlbnQsIHRydWUsIGQtPm1faW5zdGFuY2UsIGQtPm1faW5kZXgsIGQtPm1fc2ln
bmF0dXJlKSk7CiAgICAgcmV0dXJuIGQtPm1fY29ubmVjdC5nZXQoKTsKIH0KIApAQCAtMTU1Niw3
ICsxNTU2LDcgQEAgSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpkaXNjb25uZWN0RwogICAg
IFFXX0RTKFF0UnVudGltZU1ldGFNZXRob2QsIHRoaXNPYmopOwogCiAgICAgaWYgKCFkLT5tX2Rp
c2Nvbm5lY3QpCi0gICAgICAgIGQtPm1fZGlzY29ubmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzT2JqLCBuZXcgKGV4ZWMpIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QoZXhlYywgaWRl
bnQsIGZhbHNlLCBkLT5tX2luc3RhbmNlLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSkpOwor
ICAgICAgICBkLT5tX2Rpc2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iaiwg
UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlkZW50LCBmYWxzZSwgZC0+
bV9pbnN0YW5jZSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUpKTsKICAgICByZXR1cm4gZC0+
bV9kaXNjb25uZWN0LmdldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSwxMCBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBRdFJ1bnRpbWVNZXRhTWV0aG9kIDogcHVibGljIFF0UnVudGltZU1ldGhvZAogewog
cHVibGljOgotICAgIFF0UnVudGltZU1ldGFNZXRob2QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZuLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBpbmRleCwgY29u
c3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlLCBib29sIGFsbG93UHJpdmF0ZSk7CisgICAgc3RhdGlj
IFF0UnVudGltZU1ldGFNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIG4sIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdCwgaW50IGluZGV4LCBjb25zdCBR
Qnl0ZUFycmF5JiBzaWduYXR1cmUsIGJvb2wgYWxsb3dQcml2YXRlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZU1ldGFNZXRob2Q+KCpleGVjLT5oZWFw
KCkpKSBRdFJ1bnRpbWVNZXRhTWV0aG9kKGV4ZWMsIG4sIGluc3QsIGluZGV4LCBzaWduYXR1cmUs
IGFsbG93UHJpdmF0ZSk7CisgICAgfQogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAtMTYzLDYgKzE2Niw4IEBAIHBy
b3RlY3RlZDoKICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSogZF9mdW5jKCkgY29uc3Qge3Jl
dHVybiByZWludGVycHJldF9jYXN0PFF0UnVudGltZU1ldGFNZXRob2REYXRhKj4oZF9wdHIpO30K
IAogcHJpdmF0ZToKKyAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+LCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRl
QXJyYXkmLCBib29sIGFsbG93UHJpdmF0ZSk7CisKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENh
bGxEYXRhKENhbGxEYXRhJik7CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY2FsbChFeGVjU3RhdGUqIGV4ZWMpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0aEdldHRl
cihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJik7CkBAIC0xNzQsNyArMTc5
LDEwIEBAIGNsYXNzIFF0Q29ubmVjdGlvbk9iamVjdDsKIGNsYXNzIFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2QgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9kCiB7CiBwdWJsaWM6Ci0gICAgUXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJm4s
IGJvb2wgaXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBpbmRleCwg
Y29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlICk7CisgICAgc3RhdGljIFF0UnVudGltZUNvbm5l
Y3Rpb25NZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG4s
IGJvb2wgaXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBpbmRleCwg
Y29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKGV4ZWMsIG4sIGlzQ29ubmVjdCwgaW5zdCwgaW5kZXgs
IHNpZ25hdHVyZSk7CisgICAgfQogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAtMTg0LDYgKzE5Miw4IEBAIHByb3Rl
Y3RlZDoKICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZF9mdW5jKCkgY29uc3Qg
e3JldHVybiByZWludGVycHJldF9jYXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKj4o
ZF9wdHIpO30KIAogcHJpdmF0ZToKKyAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBib29sIGlzQ29ubmVjdCwgUGFzc1JlZlB0cjxRdElu
c3RhbmNlPiwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5Jik7CisKICAgICB2aXJ0dWFsIENh
bGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqIGV4ZWMpOwogICAgIHN0YXRpYyBKU1ZhbHVl
IGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTg1NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTA3LTI3ICBNYXJrIEhhaG5l
bmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIG9wZXJhdG9y
IG5ldyBmcm9tIEpTQ2VsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBvcGVyYXRvciBuZXcgaW4gSlND
ZWxsLCBzbyBhbnkgZnVydGhlciB1c2VzCisgICAgICAgIHdpbGwgbm90IHN1Y2Nlc3NmdWxseSBs
aW5rLiAgQWxzbyByZW1vdmVkIGFueSByZW1haW5pbmcgdXNlcyBvZiBvcGVyYXRvciBuZXcuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oOgorICAg
ICAgICAoV2ViS2l0OjpKU05QTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9i
amVjdDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5oOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmdldE9yQ3JlYXRlSlNP
YmplY3QpOgorCiAyMDExLTA3LTI3ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBbUXRdW1dLMl0gQ2xlYW4gV0tQYWdlTG9hZGVyQ2xpZW50CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9KU05QTWV0aG9kLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTMgKzM1LDE4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gQSBKU09iamVjdCB0aGF0IHdyYXBz
IGFuIE5QTWV0aG9kLgogY2xhc3MgSlNOUE1ldGhvZCA6IHB1YmxpYyBKU0M6OkludGVybmFsRnVu
Y3Rpb24gewogcHVibGljOgotICAgIEpTTlBNZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgTlBJZGVudGlmaWVyKTsKKyAg
ICBzdGF0aWMgSlNOUE1ldGhvZCogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnQs
IE5QSWRlbnRpZmllciBucElkZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoSlNDOjph
bGxvY2F0ZUNlbGw8SlNOUE1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIEpTTlBNZXRob2QoZXhlYywg
Z2xvYmFsT2JqZWN0LCBpZGVudCwgbnBJZGVudCk7CisgICAgfQogCiAgICAgc3RhdGljIGNvbnN0
IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIE5QSWRlbnRpZmllciBucElkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX25wSWRlbnRpZmllcjsgfQogCiBwcml2YXRlOiAgICAKKyAgICBK
U05QTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIE5QSWRlbnRpZmllcik7CisKICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NTQsNyArNDU0LDcgQEAgSlNWYWx1ZSBKU05QT2JqZWN0OjptZXRob2RHZXR0ZXIoRXhlY1N0
YQogICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CiAKICAgICBO
UElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVudGlmaWVyRnJvbUlkZW50aWZpZXIobWV0
aG9kTmFtZSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOUE1ldGhvZChleGVjLCB0aGlzT2Jq
LT5nbG9iYWxPYmplY3QoKSwgbWV0aG9kTmFtZSwgbnBJZGVudGlmaWVyKTsKKyAgICByZXR1cm4g
SlNOUE1ldGhvZDo6Y3JlYXRlKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBtZXRob2RO
YW1lLCBucElkZW50aWZpZXIpOwogfQogCiBKU09iamVjdCogSlNOUE9iamVjdDo6dGhyb3dJbnZh
bGlkQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCShyZXZp
c2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDExIEBAIGNsYXNzIE5Q
UnVudGltZU9iamVjdE1hcDsKIAogY2xhc3MgSlNOUE9iamVjdCA6IHB1YmxpYyBKU0M6OkpTT2Jq
ZWN0V2l0aEdsb2JhbE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgSlNOUE9iamVjdChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIE5QT2JqZWN0KiBucE9i
amVjdCk7CisgICAgc3RhdGljIEpTTlBPYmplY3QqIGNyZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBOUE9iamVjdCog
bnBPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxK
U05QT2JqZWN0PihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNOUE9iamVjdChn
bG9iYWxPYmplY3QsIG9iamVjdE1hcCwgbnBPYmplY3QpOworICAgIH0KKwogICAgIH5KU05QT2Jq
ZWN0KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKQEAgLTUzLDYgKzU3LDggQEAgcHVibGlj
OgogICAgIE5QT2JqZWN0KiBucE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbnBPYmplY3Q7IH0K
IAogcHJpdmF0ZToKKyAgICBKU05QT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBOUFJ1bnRp
bWVPYmplY3RNYXAqLCBOUE9iamVjdCopOworCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAg
CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBKU09iamVjdCogTlBSdW50aW1lT2JqZWN0
TWFwOjpnZXRPckNyZWF0CiAgICAgaWYgKEpTQzo6V2VhazxKU05QT2JqZWN0PiBqc05QT2JqZWN0
ID0gbV9qc05QT2JqZWN0cy5nZXQobnBPYmplY3QpKQogICAgICAgICByZXR1cm4ganNOUE9iamVj
dC5nZXQoKTsKIAotICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBuZXcgKCZnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSkgSlNOUE9iamVjdChnbG9iYWxPYmplY3QsIHRoaXMsIG5wT2JqZWN0
KTsKKyAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gSlNOUE9iamVjdDo6Y3JlYXRlKGdsb2Jh
bE9iamVjdCwgdGhpcywgbnBPYmplY3QpOwogICAgIG1fanNOUE9iamVjdHMuc2V0KG5wT2JqZWN0
LCBKU0M6OldlYWs8SlNOUE9iamVjdD4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGpzTlBP
YmplY3QsIHRoaXMsIG5wT2JqZWN0KSk7CiAKICAgICByZXR1cm4ganNOUE9iamVjdDsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODU0KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDctMjcgIE1hcmsg
SGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgb3Bl
cmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIG9wZXJhdG9yIG5ldyBp
biBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAgd2lsbCBub3Qgc3VjY2Vzc2Z1
bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1c2VzIG9mIG9wZXJhdG9yIG5l
dy4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAg
IChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpQcm94eVJ1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5
UnVudGltZU1ldGhvZDo6UHJveHlSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6UHJv
eHlJbnN0YW5jZTo6Z2V0TWV0aG9kKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eVJ1
bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1lT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbToKKyAgICAg
ICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1lIHNjb3BlQ2hhaW5dKToKKwogMjAxMS0wNy0yNiAgRGFu
IEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85
ODQyODg5PiBBZGQgYSBnZW5lcmljIHBpY3RvZ3JhcGggZm9udCBmYW1pbHkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQkocmV2
aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUlu
c3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgUHJveHlJbnN0YW5j
ZTo6flByb3h5SW5zdGFuY2UoKQogICAgIAogUnVudGltZU9iamVjdCogUHJveHlJbnN0YW5jZTo6
bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgUHJveHlSdW50aW1lT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
dGhpcyk7CisgICAgcmV0dXJuIFByb3h5UnVudGltZU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CiAKIEpTQzo6QmluZGluZ3M6OkNsYXNz
KiBQcm94eUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CkBAIC0xNzksMTIgKzE3OSw5IEBAIEpT
VmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlKEpTQzo6RXhlY1MKIAogY2xhc3MgUHJveHlSdW50
aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewogcHVibGljOgotICAgIFByb3h5UnVu
dGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAg
ICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5
cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIGV4ZWMtZ2xvYmFs
RGF0YSgpIGlzIGFsc28gbGlrZWx5IHdyb25nLgotICAgICAgICA6IFJ1bnRpbWVNZXRob2QoZXhl
YywgZ2xvYmFsT2JqZWN0LCBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5UnVudGltZU1l
dGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAgc3RhdGljIFByb3h5UnVudGltZU1ldGhvZCog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3QpCiAgICAgewot
ICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgICAgICByZXR1cm4gbmV3IChh
bGxvY2F0ZUNlbGw8UHJveHlSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgUHJveHlSdW50
aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmFtZSwgbGlzdCk7CiAgICAgfQogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xOTMsNiArMTkwLDE1IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworcHJpdmF0ZToKKyAgICBQ
cm94eVJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlz
dCkKKyAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUg
cHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAorICAgICAgICAvLyBleGVj
LWdsb2JhbERhdGEoKSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KKyAgICAgICAgOiBSdW50aW1lTWV0
aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxQcm94eVJ1
bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlu
aGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CiB9OwogCiBjb25zdCBDbGFzc0luZm8gUHJveHlSdW50
aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJQcm94eVJ1bnRpbWVNZXRob2QiLCAmUnVudGltZU1ldGhv
ZDo6c19pbmZvLCAwLCAwIH07CkBAIC0yMDAsNyArMjA2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIFBy
b3h5UnVudGltZU1ldGhvZDo6c19pbgogSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpnZXRNZXRob2Qo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1l
ZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3h5UnVudGlt
ZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwg
bWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIFByb3h5UnVudGltZU1ldGhvZDo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsK
IH0KIAogSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVj
LCBKU0M6OlJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QuaAkocmV2
aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1
bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMTEgQEAgY2xhc3MgUHJv
eHlJbnN0YW5jZTsKIAogY2xhc3MgUHJveHlSdW50aW1lT2JqZWN0IDogcHVibGljIEpTQzo6Qmlu
ZGluZ3M6OlJ1bnRpbWVPYmplY3QgewogcHVibGljOgotICAgIFByb3h5UnVudGltZU9iamVjdChK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFByb3h5SW5z
dGFuY2U+KTsKKyAgICBzdGF0aWMgUHJveHlSdW50aW1lT2JqZWN0KiBjcmVhdGUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxQcm94eUluc3RhbmNlPiBpbnN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoSlNDOjph
bGxvY2F0ZUNlbGw8UHJveHlSdW50aW1lT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgUHJveHlSdW50
aW1lT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5zdCk7CisgICAgfQorCiAgICAgdmlydHVh
bCB+UHJveHlSdW50aW1lT2JqZWN0KCk7CiAKICAgICBQcm94eUluc3RhbmNlKiBnZXRJbnRlcm5h
bFByb3h5SW5zdGFuY2UoKSBjb25zdDsKQEAgLTQ3LDYgKzUxLDggQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Citwcml2YXRlOgorICAg
IFByb3h5UnVudGltZU9iamVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBQYXNzUmVmUHRyPFByb3h5SW5zdGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHJldmlz
aW9uIDkxODUyKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0Rl
bGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgLSAoTlNBcnJheSAq
KXNjb3BlQ2hhaW4KICAgICBmb3IgKFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3BlQ2hhaW4t
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
aXQtPmdldCgpOwogICAgICAgICBpZiAob2JqZWN0LT5pc0FjdGl2YXRpb25PYmplY3QoKSkKLSAg
ICAgICAgICAgIG9iamVjdCA9IG5ldyAoc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSkgRGVidWdnZXJB
Y3RpdmF0aW9uKCpzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBvYmplY3QpOworICAgICAgICAgICAg
b2JqZWN0ID0gRGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGUoKnNjb3BlQ2hhaW4tPmdsb2JhbERh
dGEsIG9iamVjdCk7CiAgICAgICAgIFtzY29wZXMgYWRkT2JqZWN0OltzZWxmIF9jb252ZXJ0VmFs
dWVUb09iamNWYWx1ZTpvYmplY3RdXTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102175</attachid>
            <date>2011-07-27 13:10:41 -0700</date>
            <delta_ts>2011-07-27 15:19:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64999-20110727131043.patch</filename>
            <type>text/plain</type>
            <size>53277</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDctMjcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgb3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9u
IG9mIG9wZXJhdG9yIG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAg
d2lsbCBub3Qgc3VjY2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1
c2VzIG9mIG9wZXJhdG9yIG5ldy4KKworICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29wZSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNw
cDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6SlNTdGF0aWNTY29wZU9i
amVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlKToKKwogMjAxMS0wNy0yNyAgU2hp
bnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGFuIGlu
dGVyZmFjZSB0byB0YWtlIElzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0
ZQogI2VuZGlmCiAKICAgICBpZiAoIWdsb2JhbE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTR2xvYmFs
T2JqZWN0KCpnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnbG9i
YWxEYXRhLCBqc051bGwoKSkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAgICAgICAgcmV0dXJuIEpT
R2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVidWdnZXJB
Y3RpdmF0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRGVidWdnZXJBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CisgICAgICAg
IHN0YXRpYyBEZWJ1Z2dlckFjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTT2JqZWN0KiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxEZWJ1Z2dlckFjdGl2YXRpb24+KGdsb2JhbERhdGEuaGVhcCkpIERlYnVn
Z2VyQWN0aXZhdGlvbihnbG9iYWxEYXRhLCBvYmplY3QpOworICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVh
bCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwpAQCAtNTgsNiArNjEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTT2Jq
ZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6CisgICAgICAgIERlYnVnZ2VyQWN0
aXZhdGlvbihKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOwogICAgICAgICBXcml0ZUJhcnJpZXI8
SlNBY3RpdmF0aW9uPiBtX2FjdGl2YXRpb247CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5
MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDYsNyArMTIwNiw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBib29sIHB1c2hlZFNjb3BlID0gZmFsc2U7CiAg
ICAgaWYgKG51bVZhcmlhYmxlcyB8fCBudW1GdW5jdGlvbnMpIHsKICAgICAgICAgaWYgKGNvZGVC
bG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gbmV3
IChjYWxsRnJhbWUpIFN0cmljdEV2YWxBY3RpdmF0aW9uKGNhbGxGcmFtZSk7CisgICAgICAgICAg
ICB2YXJpYWJsZU9iamVjdCA9IFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1l
KTsKICAgICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5wdXNoKHZhcmlhYmxlT2Jq
ZWN0KTsKICAgICAgICAgICAgIHB1c2hlZFNjb3BlID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTMx
MSw3ICsxMzExLDcgQEAgTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBJbnRlcnByZXRlcgog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVy
YW5kKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKGNhbGxGcmFtZSkgSlNTdGF0
aWNTY29wZU9iamVjdChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7Cisg
ICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGNhbGxGcmFt
ZSwgcHJvcGVydHksIHZhbHVlLCBEb250RGVsZXRlKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoZHN0KSA9IEpTVmFsdWUoc2NvcGUpOwogCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKHNjb3BlKTsKQEAgLTQxMzYsNyArNDEzNiw3IEBAIHNraXBfaWRfY3VzdG9t
X3NlbGY6CiAgICAgICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0
aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCFmdW5jdGlv
bi0+bmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBm
dW5jdGlvblNjb3BlT2JqZWN0ID0gbmV3IChjYWxsRnJhbWUpIEpTU3RhdGljU2NvcGVPYmplY3Qo
Y2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUp
OworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9
IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCks
IGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgICAgICBmdW5jLT5zZXRTY29w
ZSgqZ2xvYmFsRGF0YSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7
CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwODIsNyArMzA4Miw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2YKICAgICAgICAgZG9lcyBub3QgYWZmZWN0IHRoZSBzY29w
ZSBlbmNsb3NpbmcgdGhlIEZ1bmN0aW9uRXhwcmVzc2lvbi4KICAgICAgKi8KICAgICBpZiAoIWZ1
bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCog
ZnVuY3Rpb25TY29wZU9iamVjdCA9IG5ldyAoY2FsbEZyYW1lKSBKU1N0YXRpY1Njb3BlT2JqZWN0
KGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRl
KTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpT
U3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1
bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmMtPnNldFNjb3BlKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmpl
Y3QpKTsKICAgICB9CiAKQEAgLTMzNzgsNyArMzM3OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEpTT2JqZWN0Kiwgb3BfcHVzaF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YSkgSlNTdGF0aWNTY29wZU9iamVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSwgRG9udERl
bGV0ZSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBz
dGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpLCBEb250RGVsZXRlKTsKIAogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDYgKzEyMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgICAg
IC8vIEdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBmaXJzdCB0
d28gZGVjbGFyYXRpb25zIG9mIG9wZXJhdG9yIG5ldyBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgaW1w
bGVtZW50YXRpb24gYW5kIAorICAgICAgICAvLyB3aWxsIGNhdXNlIGxpbmsgZXJyb3JzIGlmIHlv
dSB1c2UgdGhlbS4KICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgRXhlY1N0YXRl
Kik7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOwog
ICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwbGFjZW1lbnROZXdEZXN0
aW5hdGlvbikgeyByZXR1cm4gcGxhY2VtZW50TmV3RGVzdGluYXRpb247IH0KQEAgLTM1OCwyMCAr
MzYwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBpbmxpbmUgdm9p
ZCogSlNDZWxsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0ZShzaXplKSk7Ci0gICAgICAgIHJlc3VsdC0+bV9z
dHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBp
bmxpbmUgdm9pZCogSlNDZWxsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEV4ZWNTdGF0ZSog
ZXhlYykKLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplKSk7Ci0gICAgICAgIHJlc3VsdC0+bV9zdHJ1
Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCiAgICAg
aW5saW5lIHZvaWQgZGVzdHJ1Y3RvcihKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBjZWxs
LT5+SlNDZWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2V2YWxFbmFibGVkOwogCiAgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEu
aGVhcCkpIEpTR2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwor
CisgICAgcHJvdGVjdGVkOgogICAgICAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICAgICAgOiBK
U1ZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUsIDAp
CiAgICAgICAgICAgICAsIG1fcmVnaXN0ZXJBcnJheVNpemUoMCkKQEAgLTEzNCw5ICsxNDIsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGluaXQodGhpcyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwotCi0g
ICAgcHJvdGVjdGVkOgogICAgICAgICBKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogdGhpc1ZhbHVlKQogICAgICAg
ICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9s
VGFibGUsIDApCiAgICAgICAgICAgICAsIG1fcmVnaXN0ZXJBcnJheVNpemUoMCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0
LmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dGF0aWNTY29wZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsOSBAQCBuYW1l
c3BhY2UgSlNDewogICAgIAogICAgIGNsYXNzIEpTU3RhdGljU2NvcGVPYmplY3QgOiBwdWJsaWMg
SlNWYXJpYWJsZU9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkuc3RhdGljU2NvcGVTdHJ1Y3R1
cmUuZ2V0KCksICZtX3N5bWJvbFRhYmxlLCByZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4oJm1f
cmVnaXN0ZXJTdG9yZSArIDEpKQorICAgICAgICBzdGF0aWMgSlNTdGF0aWNTY29wZU9iamVjdCog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEpTVmFsdWUg
dmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fcmVn
aXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoLTEs
IGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0
YXRpY1Njb3BlT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNTdGF0aWNTY29wZU9iamVjdChleGVj
LCBpZGVudCwgdmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKQEAgLTUzLDYgKzUxLDEzIEBAIG5h
bWVzcGFjZSBKU0N7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IElzRW52aXJvbm1lbnRSZWNvcmQgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTVmFy
aWFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgSlNT
dGF0aWNTY29wZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAgICAgICAgOiBKU1Zh
cmlhYmxlT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRp
Y1Njb3BlU3RydWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnByZXRfY2FzdDxS
ZWdpc3Rlcio+KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9yZWdpc3RlclN0b3JlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlKCkuYWRkKGlkZW50LmltcGwoKSwgU3ltYm9sVGFibGVFbnRy
eSgtMSwgYXR0cmlidXRlcykpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTeW1ib2xU
YWJsZSBtX3N5bWJvbFRhYmxlOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9yZWdp
c3RlclN0b3JlOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpY3RFdmFsQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFN0cmlj
dEV2YWxBY3RpdmF0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgotICAg
IFN0cmljdEV2YWxBY3RpdmF0aW9uKEV4ZWNTdGF0ZSopOworICAgIHN0YXRpYyBTdHJpY3RFdmFs
QWN0aXZhdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpY3RFdmFsQWN0aXZhdGlvbj4oKmV4ZWMtPmhlYXAoKSkp
IFN0cmljdEV2YWxBY3RpdmF0aW9uKGV4ZWMpOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgdmlydHVh
bCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwg
SlNWYWx1ZSB0b1N0cmljdFRoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CkBAIC00NCw2ICs0
OCw5IEBAIHB1YmxpYzoKICAgICAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgSlNOb25GaW5hbE9iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CisKK3ByaXZhdGU6CisgICAgU3RyaWN0RXZhbEFjdGl2YXRpb24o
RXhlY1N0YXRlKik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVl
L0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDctMjcgIE1hcmsg
SGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgb3Bl
cmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIG9wZXJhdG9yIG5ldyBp
biBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAgd2lsbCBub3Qgc3VjY2Vzc2Z1
bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1c2VzIG9mIG9wZXJhdG9yIG5l
dy4KKworICAgICAgICAqIEpTUnVuLmNwcDoKKyAgICAgICAgKEpTUnVuOjpKU1J1bik6CisgICAg
ICAgICogSlNSdW4uaDoKKyAgICAgICAgKEpTR2x1ZUdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBKU1V0aWxzLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0S0pTVmFsdWUpOgorICAgICAg
ICAoZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBVc2VyT2JqZWN0SW1wLmg6Cisg
ICAgICAgIChVc2VyT2JqZWN0SW1wOjpjcmVhdGUpOgorCiAyMDExLTA3LTAxICBKdW5nc2hpayBT
aGluICA8anNoaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQ
cm9za3VyeWFrb3YuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJKHJldmlzaW9uIDkxODUy
KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBKU0dsdWVHbG9iYWxPYmplY3Q6OkpTR2x1ZUdsb2JhbE9iamVjdChKCiBK
U1J1bjo6SlNSdW4oQ0ZTdHJpbmdSZWYgc291cmNlLCBKU0ZsYWdzIGluRmxhZ3MpCiAgICAgOiAg
IEpTQmFzZShrSlNSdW5UeXBlSUQpLAogICAgICAgICBmU291cmNlKENGU3RyaW5nVG9VU3RyaW5n
KHNvdXJjZSkpLAotICAgICAgICBmR2xvYmFsT2JqZWN0KGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0
ZSgpLT5nbG9iYWxEYXRhKCksIG5ldyAoJmdldFRocmVhZEdsb2JhbEV4ZWNTdGF0ZSgpLT5nbG9i
YWxEYXRhKCkpIEpTR2x1ZUdsb2JhbE9iamVjdChnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+
Z2xvYmFsRGF0YSgpLCBKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShnZXRUaHJl
YWRHbG9iYWxFeGVjU3RhdGUoKS0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSksIGluRmxhZ3MpKSwK
KyAgICAgICAgZkdsb2JhbE9iamVjdChnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+Z2xvYmFs
RGF0YSgpLCBKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZShnZXRUaHJlYWRHbG9iYWxFeGVjU3Rh
dGUoKS0+Z2xvYmFsRGF0YSgpLCBKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShn
ZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSksIGluRmxh
Z3MpKSwKICAgICAgICAgZkZsYWdzKGluRmxhZ3MpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdEdsdWUvSlNSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNS
dW4uaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDE3IEBACiAKIGNsYXNzIEpTR2x1ZUdsb2JhbE9i
amVjdCA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBKU0ds
dWVHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSlNGbGFncyA9IGtKU0Zs
YWdOb25lKTsKKyAgICAgICAgc3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRmxhZ3MgZmxhZ3Mg
PSBrSlNGbGFnTm9uZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEpTR2x1ZUdsb2JhbE9iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNHbHVlR2xvYmFs
T2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgZmxhZ3MpOworICAgICAgICB9CiAKICAgICAg
ICAgSlNGbGFncyBGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICAgICAgU3Ry
dWN0dXJlKiB1c2VyT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VyT2JqZWN0
U3RydWN0dXJlLmdldCgpOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBKU0dsdWVHbG9iYWxP
YmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSlNGbGFncyA9IGtKU0ZsYWdOb25lKTsK
KyAgICAgICAgCiAgICAgICAgIEpTRmxhZ3MgbV9mbGFnczsKICAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gbV91c2VyT2JqZWN0U3RydWN0dXJlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
R2x1ZS9KU1V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNV
dGlscy5jcHAJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTVXRp
bHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyArMTg0LDcgQEAgSlNWYWx1ZSBKU09iamVj
dEtKU1ZhbHVlKEpTVXNlck9iamVjdCogcAogICAgICAgICBpZiAoIWhhbmRsZWQpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdldFRocmVhZEdsb2JhbEV4ZWNTdGF0
ZSgpOwotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IChleGVjKSBVc2VyT2JqZWN0SW1wKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZ2V0VGhyZWFkR2xvYmFsT2JqZWN0KCktPnVzZXJPYmplY3RTdHJ1Y3R1
cmUoKSwgcHRyKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFVzZXJPYmplY3RJbXA6OmNyZWF0ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGdldFRocmVhZEdsb2JhbE9iamVjdCgpLT51c2VyT2JqZWN0U3Ry
dWN0dXJlKCksIHB0cik7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgSlNHbHVlR2xvYmFsT2JqZWN0KiBnZXRUaHJlYWRHbG9i
CiAgICAgcHRocmVhZF9vbmNlKCZnbG9iYWxPYmplY3RLZXlPbmNlLCBpbml0aWFsaXplR2xvYmFs
T2JqZWN0S2V5KTsKICAgICBKU0dsdWVHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRp
Y19jYXN0PEpTR2x1ZUdsb2JhbE9iamVjdCo+KHB0aHJlYWRfZ2V0c3BlY2lmaWMoZ2xvYmFsT2Jq
ZWN0S2V5KSk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgZ2xvYmFsT2JqZWN0
ID0gbmV3IChnZXRUaHJlYWRHbG9iYWxEYXRhKCkpIEpTR2x1ZUdsb2JhbE9iamVjdCgqZ2V0VGhy
ZWFkR2xvYmFsRGF0YSgpLCBKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2V0
VGhyZWFkR2xvYmFsRGF0YSgpLCBqc051bGwoKSkpOworICAgICAgICBnbG9iYWxPYmplY3QgPSBK
U0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2V0VGhyZWFkR2xvYmFsRGF0YSgpLCBKU0dsdWVH
bG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2V0VGhyZWFkR2xvYmFsRGF0YSgpLCBqc051
bGwoKSkpOwogICAgICAgICBnY1Byb3RlY3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcHRocmVh
ZF9zZXRzcGVjaWZpYyhnbG9iYWxPYmplY3RLZXksIGdsb2JhbE9iamVjdCk7CiAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCShyZXZpc2lvbiA5MTg1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDExIEBACiAKIGNsYXNzIFVzZXJPYmplY3RJbXAgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgVXNlck9iamVjdEltcChKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqLCBKU1VzZXJPYmplY3QqKTsKKyAgICBzdGF0aWMgVXNlck9iamVjdEltcCogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVXNlck9i
amVjdCogdXNlck9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxVc2VyT2JqZWN0SW1wPihnbG9iYWxEYXRhLmhlYXApKSBVc2VyT2JqZWN0SW1wKGdsb2JhbERh
dGEsIHN0cnVjdHVyZSwgdXNlck9iamVjdCk7CisgICAgfQorICAgIAogICAgIHZpcnR1YWwgflVz
ZXJPYmplY3RJbXAoKTsKIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAt
NjQsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIFVzZXJPYmplY3RJ
bXAoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgSlNVc2VyT2JqZWN0Kik7CiAgICAgc3RhdGlj
IEpTVmFsdWUgdXNlck9iamVjdEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogCiAgICAgSlNVc2VyT2JqZWN0KiBmSlNVc2VyT2JqZWN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMS0wNy0yNyAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBvcGVy
YXRvciBuZXcgZnJvbSBKU0NlbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVu
dGF0aW9uIG9mIG9wZXJhdG9yIG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAg
ICAgICAgd2lsbCBub3Qgc3VjY2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFp
bmluZyB1c2VzIG9mIG9wZXJhdG9yIG5ldy4KKworICAgICAgICAqIGJyaWRnZS9jL0NSdW50aW1l
T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDUnVudGltZU9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKiBicmlkZ2UvYy9jX2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OkNJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNS
dW50aW1lTWV0aG9kOjpDUnVudGltZU1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpD
SW5zdGFuY2U6OmdldE1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUluc3Rh
bmNlSlNDLmNwcDoKKyAgICAgICAgKEphdmFJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6Cisg
ICAgICAgIChKYXZhUnVudGltZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKEphdmFSdW50aW1l
TWV0aG9kOjpKYXZhUnVudGltZU1ldGhvZCk6CisgICAgICAgIChKYXZhSW5zdGFuY2U6OmdldE1l
dGhvZCk6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVJ1bnRpbWVPYmplY3QuaDoKKyAg
ICAgICAgKEpTQzo6QmluZGluZ3M6OkphdmFSdW50aW1lT2JqZWN0OjpjcmVhdGUpOgorICAgICAg
ICAqIGJyaWRnZS9vYmpjL09iakNSdW50aW1lT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpPYmpDUnVudGltZU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9v
YmpjX2NsYXNzLm1tOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6T2JqY0NsYXNzOjpmYWxsYmFj
a09iamVjdCk6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbToKKyAgICAg
ICAgKE9iamNJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdCk6CisgICAgICAgIChPYmpDUnVudGlt
ZU1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKE9iakNSdW50aW1lTWV0aG9kOjpPYmpDUnVudGlt
ZU1ldGhvZCk6CisgICAgICAgIChPYmpjSW5zdGFuY2U6OmdldE1ldGhvZCk6CisgICAgICAgICog
YnJpZGdlL29iamMvb2JqY19ydW50aW1lLmg6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpPYmpj
RmFsbGJhY2tPYmplY3RJbXA6OmNyZWF0ZSk6CisKIDIwMTEtMDctMjcgIFJvYiBCdWlzICA8cmJ1
aXNAcmltLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgZ2V0SW50ZXJzZWN0aW9uTGlzdCgpLCBn
ZXRFbmNsb3N1cmVMaXN0KCksIGNoZWNrSW50ZXJzZWN0aW9uKCkgYW5kIGNoZWNrRW5jbG9zdXJl
KCkgaW4gU1ZHU1ZHRWxlbWVudApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
bWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBSdW50aW1lTWV0aG9kIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogcHVi
bGljOgotICAgIFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYpOwor
ICAgIHN0YXRpYyBSdW50aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIG1ldGhvZExpc3QpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAo
KSkpIFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG5hbWUsIG1l
dGhvZExpc3QpOworICAgIH0KKwogICAgIEJpbmRpbmdzOjpNZXRob2RMaXN0KiBtZXRob2RzKCkg
Y29uc3QgeyByZXR1cm4gX21ldGhvZExpc3QuZ2V0KCk7IH0KIAogICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwpAQCAtNTEsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcm90
ZWN0ZWQ6CisgICAgUnVudGltZU1ldGhvZChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0Jik7
CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJuYWxGdW5jdGlvbjo6U3RydWN0dXJlRmxhZ3M7CiAKIHBy
aXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmgJKHJl
dmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvQ1J1bnRpbWVPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsMTEgQEAgY2xhc3MgQ0luc3RhbmNlOwogCiBj
bGFzcyBDUnVudGltZU9iamVjdCA6IHB1YmxpYyBSdW50aW1lT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICBDUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8
Q0luc3RhbmNlPik7CisgICAgc3RhdGljIENSdW50aW1lT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPENJbnN0YW5j
ZT4gY2luc3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Q1J1bnRp
bWVPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBDUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmpl
Y3QsIGNpbnN0KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5DUnVudGltZU9iamVjdCgpOwogCiAg
ICAgQ0luc3RhbmNlKiBnZXRJbnRlcm5hbENJbnN0YW5jZSgpIGNvbnN0OwpAQCAtNDgsNiArNTIs
OSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CiAgICAgfQorCitwcml2YXRlOgorICAgIENS
dW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxDSW5z
dGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2Uu
Y3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIENJbnN0YW5jZTo6fkNJbnN0
YW5jZSgpIAogCiBSdW50aW1lT2JqZWN0KiBDSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIENSdW50aW1lT2JqZWN0KGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CisgICAgcmV0dXJuIENSdW50
aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlz
KTsKIH0KIAogQ2xhc3MgKkNJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdApAQCAtMTExLDEyICsx
MTEsOSBAQCBib29sIENJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0CiAKIGNsYXNz
IENSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewogcHVibGljOgotICAgIENS
dW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3QpCi0g
ICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHByb3Rv
dHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKLSAgICAgICAgLy8gV2UgbmVlZCB0
byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCi0gICAgICAgIDogUnVu
dGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01T
dHJ1Y3R1cmU8Q1J1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQorICAgIHN0YXRpYyBD
UnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3Qm
IGxpc3QpCiAgICAgewotICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Q1J1bnRpbWVNZXRob2Q+KCpleGVjLT5oZWFwKCkp
KSBDUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIG5hbWUsIGxpc3QpOwogICAgIH0K
IAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMTI1LDYgKzEyMiwxNiBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKK3ByaXZhdGU6
CisgICAgQ1J1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYg
bGlzdCkKKyAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0
aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAorICAgICAgICAvLyBX
ZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KKyAgICAg
ICAgOiBSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgV2ViQ29yZTo6ZGVwcmVjYXRl
ZEdldERPTVN0cnVjdHVyZTxDUnVudGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAg
eworICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIH0KKwogfTsKIAogY29u
c3QgQ2xhc3NJbmZvIENSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJDUnVudGltZU1ldGhvZCIs
ICZSdW50aW1lTWV0aG9kOjpzX2luZm8sIDAsIDAgfTsKQEAgLTEzMiw3ICsxMzksNyBAQCBjb25z
dCBDbGFzc0luZm8gQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9CiBKU1ZhbHVlIENJbnN0YW5jZTo6
Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1l
ZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIENSdW50aW1lTWV0
aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRo
b2RMaXN0KTsKKyAgICByZXR1cm4gQ1J1bnRpbWVNZXRob2Q6OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CiB9CiAKIEpT
VmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0
aG9kKiBydW50aW1lTWV0aG9kKQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YUluc3RhbmNlSlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgSmF2YUluc3RhbmNlOjp+SmF2YUluc3RhbmNlKCkKIAogUnVudGlt
ZU9iamVjdCogSmF2YUluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKYXZhUnVudGltZU9iamVjdChleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOworICAgIHJldHVybiBKYXZhUnVudGltZU9iamVj
dDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CiAK
ICNkZWZpbmUgTlVNX0xPQ0FMX1JFRlMgNjQKQEAgLTExNiwxMiArMTE2LDkgQEAgSlNWYWx1ZSBK
YXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbgogCiBjbGFzcyBKYXZhUnVudGltZU1ldGhv
ZCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAgICBKYXZhUnVudGltZU1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAgICAgICAvLyBG
SVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9m
IHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0
aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAgICAgICA6IFJ1bnRpbWVNZXRob2Qo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPEph
dmFSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICBzdGF0aWMgSmF2YVJ1bnRp
bWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEphdmFSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkg
SmF2YVJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0KTsKICAgICB9
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTEzMCw2ICsxMjcsMTYgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRl
OgorICAgIEphdmFSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExp
c3QmIGxpc3QpCisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVz
ZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCisg
ICAgICAgIDogUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJl
Y2F0ZWRHZXRET01TdHJ1Y3R1cmU8SmF2YVJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CisKIH07
CiAKIGNvbnN0IENsYXNzSW5mbyBKYXZhUnVudGltZU1ldGhvZDo6c19pbmZvID0geyAiSmF2YVJ1
bnRpbWVNZXRob2QiLCAmUnVudGltZU1ldGhvZDo6c19pbmZvLCAwLCAwIH07CkBAIC0xMzcsNyAr
MTQ0LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEphdmFSdW50aW1lTWV0aG9kOjpzX2luZgogSlNWYWx1
ZSBKYXZhSW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFz
cygpLT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKLSAgICByZXR1cm4gbmV3IChl
eGVjKSBKYXZhUnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIEphdmFSdW50aW1lTWV0aG9k
OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUs
IG1ldGhvZExpc3QpOwogfQogCiBKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4
ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVJ1bnRpbWVPYmplY3QuaAkocmV2
aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhUnVudGlt
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQCBjbGFzcyBKYXZhSW5z
dGFuY2U7CiAKIGNsYXNzIEphdmFSdW50aW1lT2JqZWN0IDogcHVibGljIFJ1bnRpbWVPYmplY3Qg
ewogcHVibGljOgotICAgIEphdmFSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgUGFzc1JlZlB0cjxKYXZhSW5zdGFuY2U+KTsKKyAgICBzdGF0aWMgSmF2YVJ1bnRpbWVP
YmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8SmF2YUluc3RhbmNlPiBqYXZhSW5zdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKYXZhUnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkp
IEphdmFSdW50aW1lT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgamF2YUluc3QpOworICAgIH0K
KwogICAgIHZpcnR1YWwgfkphdmFSdW50aW1lT2JqZWN0KCk7CiAKICAgICBKYXZhSW5zdGFuY2Uq
IGdldEludGVybmFsSmF2YUluc3RhbmNlKCkgY29uc3Q7CkBAIC00Niw2ICs1MCw5IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3Vz
U2xvdENvdW50LCAmc19pbmZvKTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgSmF2YVJ1bnRpbWVP
YmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEphdmFJbnN0YW5j
ZT4pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvT2JqQ1J1bnRp
bWVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9PYmpD
UnVudGltZU9iamVjdC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9vYmpjL09iakNSdW50aW1lT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDEx
IEBAIGNsYXNzIE9iamNJbnN0YW5jZTsKIAogY2xhc3MgT2JqQ1J1bnRpbWVPYmplY3QgOiBwdWJs
aWMgUnVudGltZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgT2JqQ1J1bnRpbWVPYmplY3QoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPE9iamNJbnN0YW5jZT4pOworICAgIHN0
YXRpYyBPYmpDUnVudGltZU9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxPYmpjSW5zdGFuY2U+IGluc3QpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8T2JqQ1J1bnRpbWVPYmplY3Q+KCpl
eGVjLT5oZWFwKCkpKSBPYmpDUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGluc3Qp
OworICAgIH0KKwogICAgIHZpcnR1YWwgfk9iakNSdW50aW1lT2JqZWN0KCk7CiAKICAgICBPYmpj
SW5zdGFuY2UqIGdldEludGVybmFsT2JqQ0luc3RhbmNlKCkgY29uc3Q7CkBAIC00Niw2ICs1MCw5
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
QW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKICAgICB9CisKK3ByaXZhdGU6CisgICAgT2Jq
Q1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPE9i
amNJbnN0YW5jZT4pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
b2JqY19jbGFzcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9v
YmpjX2NsYXNzLm1tCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfY2xhc3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBKU1Zh
bHVlIE9iamNDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0CiAgICAgCiAgICAgaWYgKCFbdGFy
Z2V0T2JqZWN0IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoaW52b2tlVW5kZWZpbmVkTWV0
aG9kRnJvbVdlYlNjcmlwdDp3aXRoQXJndW1lbnRzOildKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBPYmpjRmFsbGJhY2tPYmplY3RJbXAoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBvYmpjSW5zdGFuY2UsIHByb3BlcnR5TmFt
ZSk7CisgICAgcmV0dXJuIE9iamNGYWxsYmFja09iamVjdEltcDo6Y3JlYXRlKGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgb2JqY0luc3RhbmNlLCBwcm9wZXJ0eU5hbWUpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0J
KHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0
YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgTlNNYXBUYWJs
ZSAqY3JlYXRlSW5zdGFuY2VXcmFwcGVyCiAKIFJ1bnRpbWVPYmplY3QqIE9iamNJbnN0YW5jZTo6
bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgT2JqQ1J1bnRpbWVPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0
aGlzKTsKKyAgICByZXR1cm4gT2JqQ1J1bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOwogfQogCiB2b2lkIE9iamNJbnN0YW5jZTo6c2V0
R2xvYmFsRXhjZXB0aW9uKE5TU3RyaW5nKiBleGNlcHRpb24sIEpTR2xvYmFsT2JqZWN0KiBleGNl
cHRpb25FbnZpcm9ubWVudCkKQEAgLTE3MiwxMiArMTcyLDkgQEAgYm9vbCBPYmpjSW5zdGFuY2U6
OnN1cHBvcnRzSW52b2tlRGVmYXVsdAogCiBjbGFzcyBPYmpDUnVudGltZU1ldGhvZCA6IHB1Ymxp
YyBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAgICBPYmpDUnVudGltZU1ldGhvZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAgICAgICAvLyBGSVhNRTogZGVw
cmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9u
ZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQg
Z2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAgICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xv
YmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPE9iakNSdW50aW1l
TWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICBzdGF0aWMgT2JqQ1J1bnRpbWVNZXRob2Qq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQogICAgIHsK
LSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPE9iakNSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgT2JqQ1J1bnRp
bWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0KTsKICAgICB9CiAKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTE4Niw2ICsxODMsMTUgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAgIE9i
akNSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3Qp
CisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVzZXMgdGhlIHBy
b3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCisgICAgICAgIDog
UnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRE
T01TdHJ1Y3R1cmU8T2JqQ1J1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CiB9OwogCiBjb25zdCBD
bGFzc0luZm8gT2JqQ1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIk9iakNSdW50aW1lTWV0aG9k
IiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgMCwgMCB9OwpAQCAtMTkzLDcgKzE5OSw3IEBAIGNv
bnN0IENsYXNzSW5mbyBPYmpDUnVudGltZU1ldGhvZDo6c19pbmYKIEpTVmFsdWUgT2JqY0luc3Rh
bmNlOjpnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCiB7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gZ2V0Q2xhc3MoKS0+bWV0aG9k
c05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgT2JqQ1J1
bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5h
bWUsIG1ldGhvZExpc3QpOworICAgIHJldHVybiBPYmpDUnVudGltZU1ldGhvZDo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0
KTsKIH0KIAogSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4
ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyAr
OTIsMTAgQEAgcHJpdmF0ZToKIAogY2xhc3MgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wIDogcHVibGlj
IEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgT2JqY0ZhbGxiYWNrT2Jq
ZWN0SW1wKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgT2JqY0luc3RhbmNlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgT2JqY0ZhbGxiYWNrT2JqZWN0
SW1wKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBPYmpjSW5zdGFuY2UqIGluc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmpjRmFsbGJhY2tPYmplY3RJ
bXA+KCpleGVjLT5oZWFwKCkpKSBPYmpjRmFsbGJhY2tPYmplY3RJbXAoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbnN0LCBwcm9wZXJ0eU5hbWUpOworICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOwogCkBAIC0xMDksNiArMTEyLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJp
dmF0ZToKKyAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBPYmpjSW5zdGFuY2UqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3
ICs4Niw3IEBAIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0YXQKICAgICBp
ZiAobm9ybWFsLmNvbnRhaW5zKCcoJykgJiYgKGluZGV4ID0gbV9tZXRhT2JqZWN0LT5pbmRleE9m
TWV0aG9kKG5vcm1hbCkpICE9IC0xKSB7CiAgICAgICAgIFFNZXRhTWV0aG9kIG0gPSBtX21ldGFP
YmplY3QtPm1ldGhvZChpbmRleCk7CiAgICAgICAgIGlmIChtLmFjY2VzcygpICE9IFFNZXRhTWV0
aG9kOjpQcml2YXRlKSB7Ci0gICAgICAgICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB2YWwgPSBu
ZXcgKGV4ZWMpIFF0UnVudGltZU1ldGFNZXRob2QoZXhlYywgaWRlbnRpZmllciwgc3RhdGljX2Nh
c3Q8UXRJbnN0YW5jZSo+KGluc3QpLCBpbmRleCwgbm9ybWFsLCBmYWxzZSk7CisgICAgICAgICAg
ICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB2YWwgPSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjcmVhdGUo
ZXhlYywgaWRlbnRpZmllciwgc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3QpLCBpbmRleCwg
bm9ybWFsLCBmYWxzZSk7CiAgICAgICAgICAgICBxdGluc3QtPm1fbWV0aG9kcy5pbnNlcnQobmFt
ZSwgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PihleGVjLT5nbG9iYWxEYXRhKCksIHF0aW5zdC0+Y3Jl
YXRlUnVudGltZU9iamVjdChleGVjKSwgdmFsKSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsOwog
ICAgICAgICB9CkBAIC0xMDUsNyArMTA1LDcgQEAgSlNWYWx1ZSBRdENsYXNzOjpmYWxsYmFja09i
amVjdChFeGVjU3RhdAogICAgICAgICAgICAgKytpdGVyOwogCiAgICAgICAgIGlmIChub3JtYWwg
PT0gUUJ5dGVBcnJheTo6ZnJvbVJhd0RhdGEoc2lnbmF0dXJlLCBpdGVyKSkgewotICAgICAgICAg
ICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFsID0gbmV3IChleGVjKSBRdFJ1bnRpbWVNZXRhTWV0
aG9kKGV4ZWMsIGlkZW50aWZpZXIsIHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5k
ZXgsIG5vcm1hbCwgZmFsc2UpOworICAgICAgICAgICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFs
ID0gUXRSdW50aW1lTWV0YU1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlkZW50aWZpZXIsIHN0YXRpY19j
YXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5kZXgsIG5vcm1hbCwgZmFsc2UpOwogICAgICAgICAg
ICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0KG5hbWUsIFdyaXRlQmFycmllcjxKU09iamVjdD4o
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBxdGluc3QtPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyksIHZh
bCkpOwogICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDggKzUwLDExIEBAIFFfR0xPQkFMX1NUQVRJQyhRdEluc3RhbmNlOjpRdFNlbmRlclN0YWMKIC8v
IERlcml2ZWQgUnVudGltZU9iamVjdAogY2xhc3MgUXRSdW50aW1lT2JqZWN0IDogcHVibGljIFJ1
bnRpbWVPYmplY3QgewogcHVibGljOgotICAgIFF0UnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsKLQorICAgIHN0YXRpYyBRdFJ1
bnRpbWVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkp
IFF0UnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGluc3RhbmNlKTsKKyAgICB9Cisg
ICAgCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTY5LDYgKzcyLDkgQEAg
cHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gUnVudGltZU9iamVjdDo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuOworCitwcml2YXRlOgorICAgIFF0UnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsKIH07CiAKIGNvbnN0IENsYXNzSW5m
byBRdFJ1bnRpbWVPYmplY3Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU9iamVjdCIsICZSdW50aW1l
T2JqZWN0OjpzX2luZm8sIDAsIDAgfTsKQEAgLTE4Miw3ICsxODgsNyBAQCBSdW50aW1lT2JqZWN0
KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqCiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBtX21ldGhvZHMuY2xlYXIoKTsKLSAgICByZXR1cm4gbmV3IChl
eGVjKSBRdFJ1bnRpbWVPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0
aGlzKTsKKyAgICByZXR1cm4gUXRSdW50aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKIH0KIAogdm9pZCBRdEluc3RhbmNlOjp2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTIzOCw3ICsyNDQsNyBAQCBKU1ZhbHVl
IFF0SW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqCiAgICAgaWYgKCFnZXRDbGFzcygpKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gbV9j
bGFzcy0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIG5ldyAo
ZXhlYykgUnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIFdl
YkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UnVudGltZU1ldGhvZD4oZXhlYyksIHBy
b3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIFJ1bnRpbWVNZXRob2Q6OmNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIFdlYkNvcmU6OmRlcHJlY2F0ZWRH
ZXRET01TdHJ1Y3R1cmU8UnVudGltZU1ldGhvZD4oZXhlYyksIHByb3BlcnR5TmFtZSwgbWV0aG9k
TGlzdCk7CiB9CiAKIEpTVmFsdWUgUXRJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSos
IFJ1bnRpbWVNZXRob2QqKQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1h
cHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9w
aXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgs
MTAgQEAgc3RydWN0IFF0UGl4bWFwTWV0YURhdGEgewogLy8gRGVyaXZlZCBSdW50aW1lT2JqZWN0
CiBjbGFzcyBRdFBpeG1hcFJ1bnRpbWVPYmplY3QgOiBwdWJsaWMgUnVudGltZU9iamVjdCB7CiBw
dWJsaWM6Ci0gICAgUXRQaXhtYXBSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgUGFzc1JlZlB0cjxJbnN0YW5jZT4pOworICAgIHN0YXRpYyBRdFBpeG1hcFJ1bnRpbWVP
YmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPFF0UGl4bWFwUnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkp
IFF0UGl4bWFwUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGluc3RhbmNlKTsKKyAg
ICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMjA5LDYgKzIx
Miw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IFJ1bnRpbWVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbjsKKworcHJpdmF0ZToKKyAgICBRdFBpeG1hcFJ1bnRpbWVPYmplY3QoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEluc3RhbmNlPik7CiB9OwogCiBR
dFBpeG1hcFJ1bnRpbWVPYmplY3Q6OlF0UGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGlu
c3RhbmNlKQpAQCAtMjMxLDcgKzIzNyw3IEBAIENsYXNzKiBRdFBpeG1hcEluc3RhbmNlOjpnZXRD
bGFzcygpIGNvbnMKIEpTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIE1ldGhvZExp
c3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRo
aXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFJ1
bnRpbWVNZXRob2Q+KGV4ZWMpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworICAgIHJldHVy
biBSdW50aW1lTWV0aG9kOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVNZXRob2Q+KGV4ZWMp
LCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOwogfQogCiBKU1ZhbHVlIFF0UGl4bWFwSW5zdGFu
Y2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVN
ZXRob2QpCkBAIC00MDIsNyArNDA4LDcgQEAgcmV0dXJuRW1wdHlWYXJpYW50OgogCiBSdW50aW1l
T2JqZWN0KiBRdFBpeG1hcEluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICByZXR1cm4gbmV3KGV4ZWMpIFF0UGl4bWFwUnVudGltZU9iamVjdChleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOworICAgIHJldHVybiBRdFBpeG1hcFJ1
bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRo
aXMpOwogfQogCiBKU09iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGlt
ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29u
c3QgUVZhcmlhbnQmIGRhdGEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVu
dGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRp
bWUuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Niw3ICsxNTQ2LDcgQEAgSlNWYWx1ZSBR
dFJ1bnRpbWVNZXRhTWV0aG9kOjpjb25uZWN0R2V0dAogICAgIFFXX0RTKFF0UnVudGltZU1ldGFN
ZXRob2QsIHRoaXNPYmopOwogCiAgICAgaWYgKCFkLT5tX2Nvbm5lY3QpCi0gICAgICAgIGQtPm1f
Y29ubmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBuZXcgKGV4ZWMpIFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2QoZXhlYywgaWRlbnQsIHRydWUsIGQtPm1faW5zdGFuY2UsIGQt
Pm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7CisgICAgICAgIGQtPm1fY29ubmVjdC5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjcmVh
dGUoZXhlYywgaWRlbnQsIHRydWUsIGQtPm1faW5zdGFuY2UsIGQtPm1faW5kZXgsIGQtPm1fc2ln
bmF0dXJlKSk7CiAgICAgcmV0dXJuIGQtPm1fY29ubmVjdC5nZXQoKTsKIH0KIApAQCAtMTU1Niw3
ICsxNTU2LDcgQEAgSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpkaXNjb25uZWN0RwogICAg
IFFXX0RTKFF0UnVudGltZU1ldGFNZXRob2QsIHRoaXNPYmopOwogCiAgICAgaWYgKCFkLT5tX2Rp
c2Nvbm5lY3QpCi0gICAgICAgIGQtPm1fZGlzY29ubmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzT2JqLCBuZXcgKGV4ZWMpIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QoZXhlYywgaWRl
bnQsIGZhbHNlLCBkLT5tX2luc3RhbmNlLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSkpOwor
ICAgICAgICBkLT5tX2Rpc2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iaiwg
UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlkZW50LCBmYWxzZSwgZC0+
bV9pbnN0YW5jZSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUpKTsKICAgICByZXR1cm4gZC0+
bV9kaXNjb25uZWN0LmdldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkJy
aWRnZUpTQy5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHQuaCIKICNpbmNsdWRlICJXZWFrLmgiCisj
aW5jbHVkZSAicXRfaW5zdGFuY2UuaCIKICNpbmNsdWRlICJydW50aW1lX21ldGhvZC5oIgogCiAj
aW5jbHVkZSA8cWJ5dGVhcnJheS5oPgpAQCAtMzMsOCArMzQsNiBAQAogbmFtZXNwYWNlIEpTQyB7
CiBuYW1lc3BhY2UgQmluZGluZ3MgewogCi1jbGFzcyBRdEluc3RhbmNlOwotCiBjbGFzcyBRdEZp
ZWxkIDogcHVibGljIEZpZWxkIHsKIHB1YmxpYzoKIApAQCAtMTUxLDcgKzE1MCwxMCBAQCBwcm90
ZWN0ZWQ6CiBjbGFzcyBRdFJ1bnRpbWVNZXRhTWV0aG9kIDogcHVibGljIFF0UnVudGltZU1ldGhv
ZAogewogcHVibGljOgotICAgIFF0UnVudGltZU1ldGFNZXRob2QoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZuLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBpbmRl
eCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlLCBib29sIGFsbG93UHJpdmF0ZSk7CisgICAg
c3RhdGljIFF0UnVudGltZU1ldGFNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIG4sIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdCwgaW50IGluZGV4LCBj
b25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUsIGJvb2wgYWxsb3dQcml2YXRlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZU1ldGFNZXRob2Q+KCpleGVj
LT5oZWFwKCkpKSBRdFJ1bnRpbWVNZXRhTWV0aG9kKGV4ZWMsIG4sIGluc3QsIGluZGV4LCBzaWdu
YXR1cmUsIGFsbG93UHJpdmF0ZSk7CisgICAgfQogCiAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAtMTYzLDYgKzE2NSw4
IEBAIHByb3RlY3RlZDoKICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSogZF9mdW5jKCkgY29u
c3Qge3JldHVybiByZWludGVycHJldF9jYXN0PFF0UnVudGltZU1ldGFNZXRob2REYXRhKj4oZF9w
dHIpO30KIAogcHJpdmF0ZToKKyAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+LCBpbnQgaW5kZXgsIGNvbnN0
IFFCeXRlQXJyYXkmLCBib29sIGFsbG93UHJpdmF0ZSk7CisKICAgICB2aXJ0dWFsIENhbGxUeXBl
IGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqIGV4ZWMpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0
aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJik7CkBAIC0xNzQs
NyArMTc4LDEwIEBAIGNsYXNzIFF0Q29ubmVjdGlvbk9iamVjdDsKIGNsYXNzIFF0UnVudGltZUNv
bm5lY3Rpb25NZXRob2QgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9kCiB7CiBwdWJsaWM6Ci0gICAg
UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJm4sIGJvb2wgaXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBp
bmRleCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlICk7CisgICAgc3RhdGljIFF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIG4sIGJvb2wgaXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBp
bmRleCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q+KCpleGVjLT5oZWFw
KCkpKSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKGV4ZWMsIG4sIGlzQ29ubmVjdCwgaW5zdCwg
aW5kZXgsIHNpZ25hdHVyZSk7CisgICAgfQogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwog
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAtMTg0LDYgKzE5MSw4IEBA
IHByb3RlY3RlZDoKICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZF9mdW5jKCkg
Y29uc3Qge3JldHVybiByZWludGVycHJldF9jYXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2RE
YXRhKj4oZF9wdHIpO30KIAogcHJpdmF0ZToKKyAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9k
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBib29sIGlzQ29ubmVjdCwgUGFzc1JlZlB0
cjxRdEluc3RhbmNlPiwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5Jik7CisKICAgICB2aXJ0
dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAgICAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqIGV4ZWMpOwogICAgIHN0YXRpYyBK
U1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVy
Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTg1NCkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTA3LTI3ICBNYXJr
IEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIG9w
ZXJhdG9yIG5ldyBmcm9tIEpTQ2VsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBSZW1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBvcGVyYXRvciBuZXcg
aW4gSlNDZWxsLCBzbyBhbnkgZnVydGhlciB1c2VzCisgICAgICAgIHdpbGwgbm90IHN1Y2Nlc3Nm
dWxseSBsaW5rLiAgQWxzbyByZW1vdmVkIGFueSByZW1haW5pbmcgdXNlcyBvZiBvcGVyYXRvciBu
ZXcuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5o
OgorICAgICAgICAoV2ViS2l0OjpKU05QTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SlNOUE9iamVjdDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5oOgorICAgICAgICAoV2ViS2l0OjpKU05QT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmpl
Y3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVPYmplY3RNYXA6OmdldE9yQ3Jl
YXRlSlNPYmplY3QpOgorCiAyMDExLTA3LTI3ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdW1dLMl0gQ2xlYW4gV0tQYWdlTG9hZGVyQ2xpZW50
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE1l
dGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QTWV0aG9kLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsMTMgKzM1LDE4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gQSBKU09iamVjdCB0aGF0
IHdyYXBzIGFuIE5QTWV0aG9kLgogY2xhc3MgSlNOUE1ldGhvZCA6IHB1YmxpYyBKU0M6OkludGVy
bmFsRnVuY3Rpb24gewogcHVibGljOgotICAgIEpTTlBNZXRob2QoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgTlBJZGVudGlmaWVy
KTsKKyAgICBzdGF0aWMgSlNOUE1ldGhvZCogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYg
aWRlbnQsIE5QSWRlbnRpZmllciBucElkZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAo
SlNDOjphbGxvY2F0ZUNlbGw8SlNOUE1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIEpTTlBNZXRob2Qo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGVudCwgbnBJZGVudCk7CisgICAgfQogCiAgICAgc3RhdGlj
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIE5QSWRlbnRpZmllciBucElkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX25wSWRlbnRpZmllcjsgfQogCiBwcml2YXRlOiAgICAK
KyAgICBKU05QTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYsIE5QSWRlbnRpZmllcik7CisKICAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTQsNyArNDU0LDcgQEAgSlNWYWx1ZSBKU05QT2JqZWN0OjptZXRob2RHZXR0ZXIo
RXhlY1N0YQogICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoZXhlYyk7CiAK
ICAgICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVudGlmaWVyRnJvbUlkZW50aWZp
ZXIobWV0aG9kTmFtZSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOUE1ldGhvZChleGVjLCB0
aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgbWV0aG9kTmFtZSwgbnBJZGVudGlmaWVyKTsKKyAgICBy
ZXR1cm4gSlNOUE1ldGhvZDo6Y3JlYXRlKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBt
ZXRob2ROYW1lLCBucElkZW50aWZpZXIpOwogfQogCiBKU09iamVjdCogSlNOUE9iamVjdDo6dGhy
b3dJbnZhbGlkQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5o
CShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDExIEBAIGNs
YXNzIE5QUnVudGltZU9iamVjdE1hcDsKIAogY2xhc3MgSlNOUE9iamVjdCA6IHB1YmxpYyBKU0M6
OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CiBwdWJsaWM6Ci0gICAgSlNOUE9iamVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgTlBSdW50aW1lT2JqZWN0TWFwKiBvYmplY3RNYXAsIE5QT2JqZWN0
KiBucE9iamVjdCk7CisgICAgc3RhdGljIEpTTlBPYmplY3QqIGNyZWF0ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBOUE9i
amVjdCogbnBPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChKU0M6OmFsbG9jYXRl
Q2VsbDxKU05QT2JqZWN0PihnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNOUE9i
amVjdChnbG9iYWxPYmplY3QsIG9iamVjdE1hcCwgbnBPYmplY3QpOworICAgIH0KKwogICAgIH5K
U05QT2JqZWN0KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKQEAgLTUzLDYgKzU3LDggQEAg
cHVibGljOgogICAgIE5QT2JqZWN0KiBucE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbnBPYmpl
Y3Q7IH0KIAogcHJpdmF0ZToKKyAgICBKU05QT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBO
UFJ1bnRpbWVPYmplY3RNYXAqLCBOUE9iamVjdCopOworCiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7
CiAgICAgCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBKU09iamVjdCogTlBSdW50aW1l
T2JqZWN0TWFwOjpnZXRPckNyZWF0CiAgICAgaWYgKEpTQzo6V2VhazxKU05QT2JqZWN0PiBqc05Q
T2JqZWN0ID0gbV9qc05QT2JqZWN0cy5nZXQobnBPYmplY3QpKQogICAgICAgICByZXR1cm4ganNO
UE9iamVjdC5nZXQoKTsKIAotICAgIEpTTlBPYmplY3QqIGpzTlBPYmplY3QgPSBuZXcgKCZnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSkgSlNOUE9iamVjdChnbG9iYWxPYmplY3QsIHRoaXMsIG5w
T2JqZWN0KTsKKyAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gSlNOUE9iamVjdDo6Y3JlYXRl
KGdsb2JhbE9iamVjdCwgdGhpcywgbnBPYmplY3QpOwogICAgIG1fanNOUE9iamVjdHMuc2V0KG5w
T2JqZWN0LCBKU0M6OldlYWs8SlNOUE9iamVjdD4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IGpzTlBPYmplY3QsIHRoaXMsIG5wT2JqZWN0KSk7CiAKICAgICByZXR1cm4ganNOUE9iamVjdDsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODU0KQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDctMjcg
IE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1v
dmUgb3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIG9wZXJhdG9y
IG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAgd2lsbCBub3Qgc3Vj
Y2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1c2VzIG9mIG9wZXJh
dG9yIG5ldy4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW06Cisg
ICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAg
ICAoV2ViS2l0OjpQcm94eVJ1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlByb3h5UnVudGltZU1ldGhvZDo6UHJveHlSdW50aW1lTWV0aG9kKToKKyAgICAgICAgKFdlYktp
dDo6UHJveHlJbnN0YW5jZTo6Z2V0TWV0aG9kKToKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Q
cm94eVJ1bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1lT2JqZWN0
OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbToK
KyAgICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1lIHNjb3BlQ2hhaW5dKToKKwogMjAxMS0wNy0y
NiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS85ODQyODg5PiBBZGQgYSBnZW5lcmljIHBpY3RvZ3JhcGggZm9udCBmYW1pbHkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5t
bQkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Q
cm94eUluc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgUHJveHlJ
bnN0YW5jZTo6flByb3h5SW5zdGFuY2UoKQogICAgIAogUnVudGltZU9iamVjdCogUHJveHlJbnN0
YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgUHJveHlSdW50aW1lT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgdGhpcyk7CisgICAgcmV0dXJuIFByb3h5UnVudGltZU9iamVjdDo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CiAKIEpTQzo6QmluZGluZ3M6
OkNsYXNzKiBQcm94eUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CkBAIC0xNzksMTIgKzE3OSw5
IEBAIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlKEpTQzo6RXhlY1MKIAogY2xhc3MgUHJv
eHlSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewogcHVibGljOgotICAgIFBy
b3h5UnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0
KQotICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBw
cm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIGV4ZWMt
Z2xvYmFsRGF0YSgpIGlzIGFsc28gbGlrZWx5IHdyb25nLgotICAgICAgICA6IFJ1bnRpbWVNZXRo
b2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFByb3h5UnVu
dGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAgc3RhdGljIFByb3h5UnVudGltZU1l
dGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3QpCiAg
ICAgewotICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8UHJveHlSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVhcCgpKSkgUHJv
eHlSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmFtZSwgbGlzdCk7CiAgICAgfQog
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xOTMsNiArMTkwLDE1IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworcHJpdmF0ZToK
KyAgICBQcm94eVJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlz
dCYgbGlzdCkKKyAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNl
cyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAorICAgICAgICAv
LyBleGVjLWdsb2JhbERhdGEoKSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KKyAgICAgICAgOiBSdW50
aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxQ
cm94eVJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CiB9OwogCiBjb25zdCBDbGFzc0luZm8gUHJv
eHlSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJQcm94eVJ1bnRpbWVNZXRob2QiLCAmUnVudGlt
ZU1ldGhvZDo6c19pbmZvLCAwLCAwIH07CkBAIC0yMDAsNyArMjA2LDcgQEAgY29uc3QgQ2xhc3NJ
bmZvIFByb3h5UnVudGltZU1ldGhvZDo6c19pbgogSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpnZXRN
ZXRob2QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhv
ZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3h5
UnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5
TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIFByb3h5UnVudGltZU1ldGhvZDo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBtZXRob2RM
aXN0KTsKIH0KIAogSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRl
KiBleGVjLCBKU0M6OlJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3Qu
aAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Q
cm94eVJ1bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMTEgQEAgY2xh
c3MgUHJveHlJbnN0YW5jZTsKIAogY2xhc3MgUHJveHlSdW50aW1lT2JqZWN0IDogcHVibGljIEpT
Qzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3QgewogcHVibGljOgotICAgIFByb3h5UnVudGltZU9i
amVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFBy
b3h5SW5zdGFuY2U+KTsKKyAgICBzdGF0aWMgUHJveHlSdW50aW1lT2JqZWN0KiBjcmVhdGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFz
c1JlZlB0cjxQcm94eUluc3RhbmNlPiBpbnN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAo
SlNDOjphbGxvY2F0ZUNlbGw8UHJveHlSdW50aW1lT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgUHJv
eHlSdW50aW1lT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5zdCk7CisgICAgfQorCiAgICAg
dmlydHVhbCB+UHJveHlSdW50aW1lT2JqZWN0KCk7CiAKICAgICBQcm94eUluc3RhbmNlKiBnZXRJ
bnRlcm5hbFByb3h5SW5zdGFuY2UoKSBjb25zdDsKQEAgLTQ3LDYgKzUxLDggQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Citwcml2YXRl
OgorICAgIFByb3h5UnVudGltZU9iamVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBQYXNzUmVmUHRyPFByb3h5SW5zdGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0J
KHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRE
ZWJ1Z0RlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgLSAoTlNB
cnJheSAqKXNjb3BlQ2hhaW4KICAgICBmb3IgKFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3Bl
Q2hhaW4tPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gaXQtPmdldCgpOwogICAgICAgICBpZiAob2JqZWN0LT5pc0FjdGl2YXRpb25PYmplY3Qo
KSkKLSAgICAgICAgICAgIG9iamVjdCA9IG5ldyAoc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSkgRGVi
dWdnZXJBY3RpdmF0aW9uKCpzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBvYmplY3QpOworICAgICAg
ICAgICAgb2JqZWN0ID0gRGVidWdnZXJBY3RpdmF0aW9uOjpjcmVhdGUoKnNjb3BlQ2hhaW4tPmds
b2JhbERhdGEsIG9iamVjdCk7CiAgICAgICAgIFtzY29wZXMgYWRkT2JqZWN0OltzZWxmIF9jb252
ZXJ0VmFsdWVUb09iamNWYWx1ZTpvYmplY3RdXTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102193</attachid>
            <date>2011-07-27 15:19:22 -0700</date>
            <delta_ts>2011-07-27 15:27:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64999-20110727151924.patch</filename>
            <type>text/plain</type>
            <size>53737</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDctMjcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgb3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9u
IG9mIG9wZXJhdG9yIG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAg
d2lsbCBub3Qgc3VjY2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1
c2VzIG9mIG9wZXJhdG9yIG5ldy4KKworICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29wZSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNw
cDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6SlNTdGF0aWNTY29wZU9i
amVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlKToKKwogMjAxMS0wNy0yNyAgU2hp
bnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGFuIGlu
dGVyZmFjZSB0byB0YWtlIElzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0
ZQogI2VuZGlmCiAKICAgICBpZiAoIWdsb2JhbE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTR2xvYmFs
T2JqZWN0KCpnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnbG9i
YWxEYXRhLCBqc051bGwoKSkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAgICAgICAgcmV0dXJuIEpT
R2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVidWdnZXJB
Y3RpdmF0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRGVidWdnZXJBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CisgICAgICAg
IHN0YXRpYyBEZWJ1Z2dlckFjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTT2JqZWN0KiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxEZWJ1Z2dlckFjdGl2YXRpb24+KGdsb2JhbERhdGEuaGVhcCkpIERlYnVn
Z2VyQWN0aXZhdGlvbihnbG9iYWxEYXRhLCBvYmplY3QpOworICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVh
bCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwpAQCAtNTgsNiArNjEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTT2Jq
ZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6CisgICAgICAgIERlYnVnZ2VyQWN0
aXZhdGlvbihKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOwogICAgICAgICBXcml0ZUJhcnJpZXI8
SlNBY3RpdmF0aW9uPiBtX2FjdGl2YXRpb247CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5
MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDYsNyArMTIwNiw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBib29sIHB1c2hlZFNjb3BlID0gZmFsc2U7CiAg
ICAgaWYgKG51bVZhcmlhYmxlcyB8fCBudW1GdW5jdGlvbnMpIHsKICAgICAgICAgaWYgKGNvZGVC
bG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gbmV3
IChjYWxsRnJhbWUpIFN0cmljdEV2YWxBY3RpdmF0aW9uKGNhbGxGcmFtZSk7CisgICAgICAgICAg
ICB2YXJpYWJsZU9iamVjdCA9IFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1l
KTsKICAgICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5wdXNoKHZhcmlhYmxlT2Jq
ZWN0KTsKICAgICAgICAgICAgIHB1c2hlZFNjb3BlID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTMx
MSw3ICsxMzExLDcgQEAgTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBJbnRlcnByZXRlcgog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVy
YW5kKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKGNhbGxGcmFtZSkgSlNTdGF0
aWNTY29wZU9iamVjdChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7Cisg
ICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGNhbGxGcmFt
ZSwgcHJvcGVydHksIHZhbHVlLCBEb250RGVsZXRlKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoZHN0KSA9IEpTVmFsdWUoc2NvcGUpOwogCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKHNjb3BlKTsKQEAgLTQxMzYsNyArNDEzNiw3IEBAIHNraXBfaWRfY3VzdG9t
X3NlbGY6CiAgICAgICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0
aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCFmdW5jdGlv
bi0+bmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBm
dW5jdGlvblNjb3BlT2JqZWN0ID0gbmV3IChjYWxsRnJhbWUpIEpTU3RhdGljU2NvcGVPYmplY3Qo
Y2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUp
OworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9
IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCks
IGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgICAgICBmdW5jLT5zZXRTY29w
ZSgqZ2xvYmFsRGF0YSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7
CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwODIsNyArMzA4Miw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2YKICAgICAgICAgZG9lcyBub3QgYWZmZWN0IHRoZSBzY29w
ZSBlbmNsb3NpbmcgdGhlIEZ1bmN0aW9uRXhwcmVzc2lvbi4KICAgICAgKi8KICAgICBpZiAoIWZ1
bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCog
ZnVuY3Rpb25TY29wZU9iamVjdCA9IG5ldyAoY2FsbEZyYW1lKSBKU1N0YXRpY1Njb3BlT2JqZWN0
KGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRl
KTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpT
U3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1
bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmMtPnNldFNjb3BlKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmpl
Y3QpKTsKICAgICB9CiAKQEAgLTMzNzgsNyArMzM3OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEpTT2JqZWN0Kiwgb3BfcHVzaF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YSkgSlNTdGF0aWNTY29wZU9iamVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSwgRG9udERl
bGV0ZSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBz
dGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpLCBEb250RGVsZXRlKTsKIAogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDggKzEyMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgICAg
IC8vIEdhcmJhZ2UgY29sbGVjdGlvbi4KLSAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCwgRXhlY1N0YXRlKik7Ci0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xv
YmFsRGF0YSopOwogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwbGFj
ZW1lbnROZXdEZXN0aW5hdGlvbikgeyByZXR1cm4gcGxhY2VtZW50TmV3RGVzdGluYXRpb247IH0K
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwpAQCAt
MTY1LDYgKzE2MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAg
ICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGZpcnN0IHR3byBkZWNsYXJhdGlvbnMg
b2Ygb3BlcmF0b3IgbmV3IGhhdmUgbm8gY29ycmVzcG9uZGluZyBpbXBsZW1lbnRhdGlvbiBhbmQg
CisgICAgICAgIC8vIHdpbGwgY2F1c2UgbGluayBlcnJvcnMgaWYgeW91IHVzZSB0aGVtLgorICAg
ICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBFeGVjU3RhdGUqKTsKKyAgICAgICAgdm9p
ZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7CisgICAgICAgIAogICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKICAgICB9OwogCkBAIC0zNTgs
MjAgKzM2MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KICNlbmRpZgogCi0gICAgaW5saW5l
IHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCi0gICAgewotICAgICAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KGdsb2JhbERhdGEtPmhlYXAuYWxsb2NhdGUoc2l6ZSkpOwotICAgICAgICByZXN1bHQt
Pm1fc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgaW5saW5lIHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBFeGVjU3Rh
dGUqIGV4ZWMpCi0gICAgewotICAgICAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZSkpOwotICAgICAgICByZXN1bHQtPm1f
c3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAog
ICAgIGlubGluZSB2b2lkIGRlc3RydWN0b3IoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAg
Y2VsbC0+fkpTQ2VsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsx
MjIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9ldmFsRW5hYmxlZDsKIAog
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTR2xvYmFsT2JqZWN0PihnbG9iYWxE
YXRhLmhlYXApKSBKU0dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKKworICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgICAg
IDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxl
LCAwKQogICAgICAgICAgICAgLCBtX3JlZ2lzdGVyQXJyYXlTaXplKDApCkBAIC0xMzQsOSArMTQy
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpbml0KHRoaXMpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
LQotICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKICAg
ICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5
bWJvbFRhYmxlLCAwKQogICAgICAgICAgICAgLCBtX3JlZ2lzdGVyQXJyYXlTaXplKDApCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9i
amVjdC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDkgQEAg
bmFtZXNwYWNlIEpTQ3sKICAgICAKICAgICBjbGFzcyBKU1N0YXRpY1Njb3BlT2JqZWN0IDogcHVi
bGljIEpTVmFyaWFibGVPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNTdGF0aWNTY29w
ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2Jq
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRpY1Njb3BlU3Ry
dWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+
KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgc3RhdGljIEpTU3RhdGljU2NvcGVPYmpl
Y3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBKU1Zh
bHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
X3JlZ2lzdGVyU3RvcmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAg
ICAgICAgICAgc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5
KC0xLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
SlNTdGF0aWNTY29wZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIEpTU3RhdGljU2NvcGVPYmplY3Qo
ZXhlYywgaWRlbnQsIHZhbHVlLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CkBAIC01Myw2ICs1MSwxMyBA
QCBuYW1lc3BhY2UgSlNDewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBK
U1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6CisgICAgICAg
IEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgICAgIDog
SlNWYXJpYWJsZU9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5z
dGF0aWNTY29wZVN0cnVjdHVyZS5nZXQoKSwgJm1fc3ltYm9sVGFibGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fcmVnaXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxl
RW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3lt
Ym9sVGFibGUgbV9zeW1ib2xUYWJsZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1f
cmVnaXN0ZXJTdG9yZTsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lvbiA5MTg1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBT
dHJpY3RFdmFsQWN0aXZhdGlvbiA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
LSAgICBTdHJpY3RFdmFsQWN0aXZhdGlvbihFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgU3RyaWN0
RXZhbEFjdGl2YXRpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaWN0RXZhbEFjdGl2YXRpb24+KCpleGVjLT5oZWFw
KCkpKSBTdHJpY3RFdmFsQWN0aXZhdGlvbihleGVjKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHZp
cnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKICAgICB2aXJ0
dWFsIEpTVmFsdWUgdG9TdHJpY3RUaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtNDQs
NiArNDgsOSBAQCBwdWJsaWM6CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IEpTTm9uRmluYWxP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIFN0cmljdEV2YWxBY3RpdmF0
aW9uKEV4ZWNTdGF0ZSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODU0KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTA3LTI3ICBN
YXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IG9wZXJhdG9yIG5ldyBmcm9tIEpTQ2VsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBvcGVyYXRvciBu
ZXcgaW4gSlNDZWxsLCBzbyBhbnkgZnVydGhlciB1c2VzCisgICAgICAgIHdpbGwgbm90IHN1Y2Nl
c3NmdWxseSBsaW5rLiAgQWxzbyByZW1vdmVkIGFueSByZW1haW5pbmcgdXNlcyBvZiBvcGVyYXRv
ciBuZXcuCisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAgIChKU1J1bjo6SlNSdW4pOgor
ICAgICAgICAqIEpTUnVuLmg6CisgICAgICAgIChKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZSk6
CisgICAgICAgICogSlNVdGlscy5jcHA6CisgICAgICAgIChKU09iamVjdEtKU1ZhbHVlKToKKyAg
ICAgICAgKGdldFRocmVhZEdsb2JhbE9iamVjdCk6CisgICAgICAgICogVXNlck9iamVjdEltcC5o
OgorICAgICAgICAoVXNlck9iamVjdEltcDo6Y3JlYXRlKToKKwogMjAxMS0wNy0wMSAgSnVuZ3No
aWsgU2hpbiAgPGpzaGluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4
ZXkgUHJvc2t1cnlha292LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCShyZXZpc2lvbiA5
MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgSlNHbHVlR2xvYmFsT2JqZWN0OjpKU0dsdWVHbG9iYWxPYmplY3Qo
SgogSlNSdW46OkpTUnVuKENGU3RyaW5nUmVmIHNvdXJjZSwgSlNGbGFncyBpbkZsYWdzKQogICAg
IDogICBKU0Jhc2Uoa0pTUnVuVHlwZUlEKSwKICAgICAgICAgZlNvdXJjZShDRlN0cmluZ1RvVVN0
cmluZyhzb3VyY2UpKSwKLSAgICAgICAgZkdsb2JhbE9iamVjdChnZXRUaHJlYWRHbG9iYWxFeGVj
U3RhdGUoKS0+Z2xvYmFsRGF0YSgpLCBuZXcgKCZnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+
Z2xvYmFsRGF0YSgpKSBKU0dsdWVHbG9iYWxPYmplY3QoZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRl
KCktPmdsb2JhbERhdGEoKSwgSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZ2V0
VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmdsb2JhbERhdGEoKSwganNOdWxsKCkpLCBpbkZsYWdz
KSksCisgICAgICAgIGZHbG9iYWxPYmplY3QoZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmds
b2JhbERhdGEoKSwgSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGUoZ2V0VGhyZWFkR2xvYmFsRXhl
Y1N0YXRlKCktPmdsb2JhbERhdGEoKSwgSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUoZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmdsb2JhbERhdGEoKSwganNOdWxsKCkpLCBp
bkZsYWdzKSksCiAgICAgICAgIGZGbGFncyhpbkZsYWdzKQogewogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRHbHVlL0pTUnVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVl
L0pTUnVuLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNyBAQAogCiBjbGFzcyBKU0dsdWVHbG9i
YWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAg
SlNHbHVlR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEpTRmxhZ3MgPSBr
SlNGbGFnTm9uZSk7CisgICAgICAgIHN0YXRpYyBKU0dsdWVHbG9iYWxPYmplY3QqIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0ZsYWdzIGZs
YWdzID0ga0pTRmxhZ05vbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxKU0dsdWVHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEpTR2x1ZUds
b2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGZsYWdzKTsKKyAgICAgICAgfQogCiAg
ICAgICAgIEpTRmxhZ3MgRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAgICAgICAg
IFN0cnVjdHVyZSogdXNlck9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlck9i
amVjdFN0cnVjdHVyZS5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgSlNHbHVlR2xv
YmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEpTRmxhZ3MgPSBrSlNGbGFnTm9u
ZSk7CisgICAgICAgIAogICAgICAgICBKU0ZsYWdzIG1fZmxhZ3M7CiAgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IG1fdXNlck9iamVjdFN0cnVjdHVyZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdEdsdWUvSlNVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVl
L0pTVXRpbHMuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9K
U1V0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIEpTVmFsdWUgSlNP
YmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHAKICAgICAgICAgaWYgKCFoYW5kbGVkKQogICAg
ICAgICB7CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnZXRUaHJlYWRHbG9iYWxFeGVj
U3RhdGUoKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAoZXhlYykgVXNlck9iamVjdEltcChl
eGVjLT5nbG9iYWxEYXRhKCksIGdldFRocmVhZEdsb2JhbE9iamVjdCgpLT51c2VyT2JqZWN0U3Ry
dWN0dXJlKCksIHB0cik7CisgICAgICAgICAgICByZXN1bHQgPSBVc2VyT2JqZWN0SW1wOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXRUaHJlYWRHbG9iYWxPYmplY3QoKS0+dXNlck9iamVj
dFN0cnVjdHVyZSgpLCBwdHIpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogZ2V0VGhyZWFk
R2xvYgogICAgIHB0aHJlYWRfb25jZSgmZ2xvYmFsT2JqZWN0S2V5T25jZSwgaW5pdGlhbGl6ZUds
b2JhbE9iamVjdEtleSk7CiAgICAgSlNHbHVlR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU0dsdWVHbG9iYWxPYmplY3QqPihwdGhyZWFkX2dldHNwZWNpZmljKGdsb2Jh
bE9iamVjdEtleSkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGdsb2JhbE9i
amVjdCA9IG5ldyAoZ2V0VGhyZWFkR2xvYmFsRGF0YSgpKSBKU0dsdWVHbG9iYWxPYmplY3QoKmdl
dFRocmVhZEdsb2JhbERhdGEoKSwgSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
KmdldFRocmVhZEdsb2JhbERhdGEoKSwganNOdWxsKCkpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0
ID0gSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGUoKmdldFRocmVhZEdsb2JhbERhdGEoKSwgSlNH
bHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdldFRocmVhZEdsb2JhbERhdGEoKSwg
anNOdWxsKCkpKTsKICAgICAgICAgZ2NQcm90ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIHB0
aHJlYWRfc2V0c3BlY2lmaWMoZ2xvYmFsT2JqZWN0S2V5LCBnbG9iYWxPYmplY3QpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAkocmV2aXNpb24gOTE4NTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiwxMSBAQAogCiBjbGFzcyBVc2VyT2JqZWN0SW1wIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgotICAgIFVzZXJPYmplY3RJbXAoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKiwgSlNVc2VyT2JqZWN0Kik7CisgICAgc3RhdGljIFVzZXJPYmplY3RJbXAqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Vz
ZXJPYmplY3QqIHVzZXJPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8VXNlck9iamVjdEltcD4oZ2xvYmFsRGF0YS5oZWFwKSkgVXNlck9iamVjdEltcChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIHVzZXJPYmplY3QpOworICAgIH0KKyAgICAKICAgICB2aXJ0dWFs
IH5Vc2VyT2JqZWN0SW1wKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
QEAgLTY0LDYgKzY4LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBVc2VyT2Jq
ZWN0SW1wKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEpTVXNlck9iamVjdCopOwogICAgIHN0
YXRpYyBKU1ZhbHVlIHVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAogICAgIEpTVXNlck9iamVjdCogZkpTVXNlck9i
amVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODU0KQorKysgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDctMjcgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUg
b3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBSZW1vdmVkIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiBvcGVyYXRvciBuZXcgaW4gSlNDZWxsLCBzbyBhbnkgZnVydGhlciB1c2Vz
CisgICAgICAgIHdpbGwgbm90IHN1Y2Nlc3NmdWxseSBsaW5rLiAgQWxzbyByZW1vdmVkIGFueSBy
ZW1haW5pbmcgdXNlcyBvZiBvcGVyYXRvciBuZXcuCisKKyAgICAgICAgKiBicmlkZ2UvYy9DUnVu
dGltZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpDSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Q1J1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpDUnVudGltZU1ldGhvZDo6Q1J1bnRpbWVNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6Q0luc3RhbmNlOjpnZXRNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJ
bnN0YW5jZUpTQy5jcHA6CisgICAgICAgIChKYXZhSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3Qp
OgorICAgICAgICAoSmF2YVJ1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChKYXZhUnVu
dGltZU1ldGhvZDo6SmF2YVJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpn
ZXRNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhUnVudGltZU9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBicmlkZ2Uvb2JqYy9PYmpDUnVudGltZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6T2JqQ1J1bnRpbWVPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogYnJpZGdlL29i
amMvb2JqY19jbGFzcy5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNDbGFzczo6ZmFs
bGJhY2tPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06Cisg
ICAgICAgIChPYmpjSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAgICAoT2JqQ1J1
bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChPYmpDUnVudGltZU1ldGhvZDo6T2JqQ1J1
bnRpbWVNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpnZXRNZXRob2QpOgorICAgICAg
ICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpjcmVhdGUpOgorCiAyMDExLTA3LTI3ICBSb2IgQnVpcyAg
PHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGdldEludGVyc2VjdGlvbkxpc3Qo
KSwgZ2V0RW5jbG9zdXJlTGlzdCgpLCBjaGVja0ludGVyc2VjdGlvbigpIGFuZCBjaGVja0VuY2xv
c3VyZSgpIGluIFNWR1NWR0VsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X21ldGhvZC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgUnVudGltZU1ldGhvZCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsK
IHB1YmxpYzoKLSAgICBSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3Qm
KTsKKyAgICBzdGF0aWMgUnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBtZXRob2RMaXN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJ1bnRpbWVNZXRob2Q+KCpleGVjLT5o
ZWFwKCkpKSBSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBuYW1l
LCBtZXRob2RMaXN0KTsKKyAgICB9CisKICAgICBCaW5kaW5nczo6TWV0aG9kTGlzdCogbWV0aG9k
cygpIGNvbnN0IHsgcmV0dXJuIF9tZXRob2RMaXN0LmdldCgpOyB9CiAKICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTUxLDYgKzU1LDcgQEAgcHVibGljOgogICAgIH0KIAog
cHJvdGVjdGVkOgorICAgIFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlz
dCYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzOwog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvQ1J1bnRpbWVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5o
CShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDExIEBAIGNsYXNzIENJbnN0YW5jZTsK
IAogY2xhc3MgQ1J1bnRpbWVPYmplY3QgOiBwdWJsaWMgUnVudGltZU9iamVjdCB7CiBwdWJsaWM6
Ci0gICAgQ1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVm
UHRyPENJbnN0YW5jZT4pOworICAgIHN0YXRpYyBDUnVudGltZU9iamVjdCogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxDSW5z
dGFuY2U+IGNpbnN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPENS
dW50aW1lT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgQ1J1bnRpbWVPYmplY3QoZXhlYywgZ2xvYmFs
T2JqZWN0LCBjaW5zdCk7CisgICAgfQorCiAgICAgdmlydHVhbCB+Q1J1bnRpbWVPYmplY3QoKTsK
IAogICAgIENJbnN0YW5jZSogZ2V0SW50ZXJuYWxDSW5zdGFuY2UoKSBjb25zdDsKQEAgLTQ4LDYg
KzUyLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwogICAgIH0KKworcHJpdmF0ZToKKyAg
ICBDUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8
Q0luc3RhbmNlPik7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2lu
c3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3Rh
bmNlLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2lu
c3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBDSW5zdGFuY2U6On5D
SW5zdGFuY2UoKSAKIAogUnVudGltZU9iamVjdCogQ0luc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBDUnVudGltZU9iamVj
dChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOworICAgIHJldHVybiBD
UnVudGltZU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
dGhpcyk7CiB9CiAKIENsYXNzICpDSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKQEAgLTExMSwx
MiArMTExLDkgQEAgYm9vbCBDSW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldAogCiBj
bGFzcyBDUnVudGltZU1ldGhvZCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAg
ICBDUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0
KQotICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBw
cm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8vIFdlIG5l
ZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAgICAgICA6
IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0
RE9NU3RydWN0dXJlPENSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICBzdGF0
aWMgQ1J1bnRpbWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RM
aXN0JiBsaXN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPENSdW50aW1lTWV0aG9kPigqZXhlYy0+aGVh
cCgpKSkgQ1J1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0KTsKICAg
ICB9CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTEyNSw2ICsxMjIsMTYgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCitwcml2
YXRlOgorICAgIENSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExp
c3QmIGxpc3QpCisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlIHVz
ZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKKyAgICAgICAg
Ly8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAiaSIuCisg
ICAgICAgIDogUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6OmRlcHJl
Y2F0ZWRHZXRET01TdHJ1Y3R1cmU8Q1J1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CisKIH07CiAK
IGNvbnN0IENsYXNzSW5mbyBDUnVudGltZU1ldGhvZDo6c19pbmZvID0geyAiQ1J1bnRpbWVNZXRo
b2QiLCAmUnVudGltZU1ldGhvZDo6c19pbmZvLCAwLCAwIH07CkBAIC0xMzIsNyArMTM5LDcgQEAg
Y29uc3QgQ2xhc3NJbmZvIENSdW50aW1lTWV0aG9kOjpzX2luZm8gPQogSlNWYWx1ZSBDSW5zdGFu
Y2U6OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKIHsKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFzcygpLT5tZXRob2Rz
TmFtZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBDUnVudGlt
ZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwg
bWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIENSdW50aW1lTWV0aG9kOjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOwogfQog
CiBKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGlt
ZU1ldGhvZCogcnVudGltZU1ldGhvZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFJbnN0YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw3ICs2Myw3IEBAIEphdmFJbnN0YW5jZTo6fkphdmFJbnN0YW5jZSgpCiAKIFJ1
bnRpbWVPYmplY3QqIEphdmFJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSmF2YVJ1bnRpbWVPYmplY3QoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKKyAgICByZXR1cm4gSmF2YVJ1bnRpbWVP
YmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOwog
fQogCiAjZGVmaW5lIE5VTV9MT0NBTF9SRUZTIDY0CkBAIC0xMTYsMTIgKzExNiw5IEBAIEpTVmFs
dWUgSmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb24KIAogY2xhc3MgSmF2YVJ1bnRpbWVN
ZXRob2QgOiBwdWJsaWMgUnVudGltZU1ldGhvZCB7CiBwdWJsaWM6Ci0gICAgSmF2YVJ1bnRpbWVN
ZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlzdCkKLSAgICAgICAg
Ly8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9m
ZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3Mg
aW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KLSAgICAgICAgOiBSdW50aW1lTWV0
aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZTxKYXZhUnVudGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAgc3RhdGljIEphdmFS
dW50aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYg
bGlzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKYXZhUnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAo
KSkpIEphdmFSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmFtZSwgbGlzdCk7CiAg
ICAgfQogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xMzAsNiArMTI3LDE2IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworcHJp
dmF0ZToKKyAgICBKYXZhUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRo
b2RMaXN0JiBsaXN0KQorICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CisgICAg
ICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImki
LgorICAgICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpk
ZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPEphdmFSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwg
bGlzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgfQor
CiB9OwogCiBjb25zdCBDbGFzc0luZm8gSmF2YVJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIkph
dmFSdW50aW1lTWV0aG9kIiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgMCwgMCB9OwpAQCAtMTM3
LDcgKzE0NCw3IEBAIGNvbnN0IENsYXNzSW5mbyBKYXZhUnVudGltZU1ldGhvZDo6c19pbmYKIEpT
VmFsdWUgSmF2YUluc3RhbmNlOjpnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gZ2V0
Q2xhc3MoKS0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgSmF2YVJ1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworICAgIHJldHVybiBKYXZhUnVudGltZU1l
dGhvZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVydHlO
YW1lLCBtZXRob2RMaXN0KTsKIH0KIAogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhUnVudGltZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2JqZWN0LmgJ
KHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YVJ1
bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAgY2xhc3MgSmF2
YUluc3RhbmNlOwogCiBjbGFzcyBKYXZhUnVudGltZU9iamVjdCA6IHB1YmxpYyBSdW50aW1lT2Jq
ZWN0IHsKIHB1YmxpYzoKLSAgICBKYXZhUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8SmF2YUluc3RhbmNlPik7CisgICAgc3RhdGljIEphdmFSdW50
aW1lT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPEphdmFJbnN0YW5jZT4gamF2YUluc3QpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SmF2YVJ1bnRpbWVPYmplY3Q+KCpleGVjLT5oZWFw
KCkpKSBKYXZhUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGphdmFJbnN0KTsKKyAg
ICB9CisKICAgICB2aXJ0dWFsIH5KYXZhUnVudGltZU9iamVjdCgpOwogCiAgICAgSmF2YUluc3Rh
bmNlKiBnZXRJbnRlcm5hbEphdmFJbnN0YW5jZSgpIGNvbnN0OwpAQCAtNDYsNiArNTAsOSBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255
bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CiAgICAgfQorCitwcml2YXRlOgorICAgIEphdmFSdW50
aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxKYXZhSW5z
dGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL09iakNS
dW50aW1lT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMv
T2JqQ1J1bnRpbWVPYmplY3QuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvb2JqYy9PYmpDUnVudGltZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSwxMSBAQCBjbGFzcyBPYmpjSW5zdGFuY2U7CiAKIGNsYXNzIE9iakNSdW50aW1lT2JqZWN0IDog
cHVibGljIFJ1bnRpbWVPYmplY3QgewogcHVibGljOgotICAgIE9iakNSdW50aW1lT2JqZWN0KEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxPYmpjSW5zdGFuY2U+KTsKKyAg
ICBzdGF0aWMgT2JqQ1J1bnRpbWVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8T2JqY0luc3RhbmNlPiBpbnN0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE9iakNSdW50aW1lT2JqZWN0
PigqZXhlYy0+aGVhcCgpKSkgT2JqQ1J1bnRpbWVPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bnN0KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5PYmpDUnVudGltZU9iamVjdCgpOwogCiAgICAg
T2JqY0luc3RhbmNlKiBnZXRJbnRlcm5hbE9iakNJbnN0YW5jZSgpIGNvbnN0OwpAQCAtNDYsNiAr
NTAsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CiAgICAgfQorCitwcml2YXRlOgorICAg
IE9iakNSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0
cjxPYmpjSW5zdGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9v
YmpjL29iamNfY2xhc3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29i
amMvb2JqY19jbGFzcy5tbQkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9vYmpjX2NsYXNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAg
SlNWYWx1ZSBPYmpjQ2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdAogICAgIAogICAgIGlmICgh
W3RhcmdldE9iamVjdCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGludm9rZVVuZGVmaW5l
ZE1ldGhvZEZyb21XZWJTY3JpcHQ6d2l0aEFyZ3VtZW50czopXSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgT2JqY0ZhbGxiYWNrT2JqZWN0SW1w
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgb2JqY0luc3RhbmNlLCBwcm9wZXJ0
eU5hbWUpOworICAgIHJldHVybiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmNyZWF0ZShleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG9iamNJbnN0YW5jZSwgcHJvcGVydHlOYW1lKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNl
Lm1tCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNf
aW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIE5TTWFw
VGFibGUgKmNyZWF0ZUluc3RhbmNlV3JhcHBlcgogCiBSdW50aW1lT2JqZWN0KiBPYmpjSW5zdGFu
Y2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBuZXcg
KGV4ZWMpIE9iakNSdW50aW1lT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgdGhpcyk7CisgICAgcmV0dXJuIE9iakNSdW50aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKIH0KIAogdm9pZCBPYmpjSW5zdGFuY2U6
OnNldEdsb2JhbEV4Y2VwdGlvbihOU1N0cmluZyogZXhjZXB0aW9uLCBKU0dsb2JhbE9iamVjdCog
ZXhjZXB0aW9uRW52aXJvbm1lbnQpCkBAIC0xNzIsMTIgKzE3Miw5IEBAIGJvb2wgT2JqY0luc3Rh
bmNlOjpzdXBwb3J0c0ludm9rZURlZmF1bHQKIAogY2xhc3MgT2JqQ1J1bnRpbWVNZXRob2QgOiBw
dWJsaWMgUnVudGltZU1ldGhvZCB7CiBwdWJsaWM6Ci0gICAgT2JqQ1J1bnRpbWVNZXRob2QoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlzdCkKLSAgICAgICAgLy8gRklYTUU6
IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUg
d3JvbmcgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gdGhlIHJp
Z2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KLSAgICAgICAgOiBSdW50aW1lTWV0aG9kKGV4ZWMs
IGdsb2JhbE9iamVjdCwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxPYmpDUnVu
dGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAgc3RhdGljIE9iakNSdW50aW1lTWV0
aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlzdCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxPYmpDUnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkpIE9iakNS
dW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmFtZSwgbGlzdCk7CiAgICAgfQogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xODYsNiArMTgzLDE1IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworcHJpdmF0ZToKKyAg
ICBPYmpDUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBs
aXN0KQorICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRo
ZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CisgICAgICAgIC8vIFdl
IG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgorICAgICAg
ICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNhdGVk
R2V0RE9NU3RydWN0dXJlPE9iakNSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgfQogfTsKIAogY29u
c3QgQ2xhc3NJbmZvIE9iakNSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJPYmpDUnVudGltZU1l
dGhvZCIsICZSdW50aW1lTWV0aG9kOjpzX2luZm8sIDAsIDAgfTsKQEAgLTE5Myw3ICsxOTksNyBA
QCBjb25zdCBDbGFzc0luZm8gT2JqQ1J1bnRpbWVNZXRob2Q6OnNfaW5mCiBKU1ZhbHVlIE9iamNJ
bnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1l
dGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIE9i
akNSdW50aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJvcGVy
dHlOYW1lLCBtZXRob2RMaXN0KTsKKyAgICByZXR1cm4gT2JqQ1J1bnRpbWVNZXRob2Q6OmNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgbWV0aG9k
TGlzdCk7CiB9CiAKIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRl
KiBleGVjLCBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNl
L1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTky
LDcgKzkyLDEwIEBAIHByaXZhdGU6CiAKIGNsYXNzIE9iamNGYWxsYmFja09iamVjdEltcCA6IHB1
YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewogcHVibGljOgotICAgIE9iamNGYWxsYmFj
a09iamVjdEltcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIE9iamNJbnN0YW5jZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIE9iamNGYWxsYmFja09i
amVjdEltcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgT2JqY0luc3RhbmNlKiBpbnN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8T2JqY0ZhbGxiYWNrT2Jq
ZWN0SW1wPigqZXhlYy0+aGVhcCgpKSkgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgaW5zdCwgcHJvcGVydHlOYW1lKTsKKyAgICB9CiAKICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKIApAQCAtMTA5LDYgKzExMiw3IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6CisgICAgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgT2JqY0luc3RhbmNlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAJKHJldmlzaW9uIDkxODUyKQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODYsNyArODYsNyBAQCBKU1ZhbHVlIFF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0CiAg
ICAgaWYgKG5vcm1hbC5jb250YWlucygnKCcpICYmIChpbmRleCA9IG1fbWV0YU9iamVjdC0+aW5k
ZXhPZk1ldGhvZChub3JtYWwpKSAhPSAtMSkgewogICAgICAgICBRTWV0YU1ldGhvZCBtID0gbV9t
ZXRhT2JqZWN0LT5tZXRob2QoaW5kZXgpOwogICAgICAgICBpZiAobS5hY2Nlc3MoKSAhPSBRTWV0
YU1ldGhvZDo6UHJpdmF0ZSkgewotICAgICAgICAgICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFs
ID0gbmV3IChleGVjKSBRdFJ1bnRpbWVNZXRhTWV0aG9kKGV4ZWMsIGlkZW50aWZpZXIsIHN0YXRp
Y19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5kZXgsIG5vcm1hbCwgZmFsc2UpOworICAgICAg
ICAgICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFsID0gUXRSdW50aW1lTWV0YU1ldGhvZDo6Y3Jl
YXRlKGV4ZWMsIGlkZW50aWZpZXIsIHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5k
ZXgsIG5vcm1hbCwgZmFsc2UpOwogICAgICAgICAgICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0
KG5hbWUsIFdyaXRlQmFycmllcjxKU09iamVjdD4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBxdGluc3Qt
PmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyksIHZhbCkpOwogICAgICAgICAgICAgcmV0dXJuIHZh
bDsKICAgICAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBAIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJh
Y2tPYmplY3QoRXhlY1N0YXQKICAgICAgICAgICAgICsraXRlcjsKIAogICAgICAgICBpZiAobm9y
bWFsID09IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKHNpZ25hdHVyZSwgaXRlcikpIHsKLSAgICAg
ICAgICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHZhbCA9IG5ldyAoZXhlYykgUXRSdW50aW1lTWV0
YU1ldGhvZChleGVjLCBpZGVudGlmaWVyLCBzdGF0aWNfY2FzdDxRdEluc3RhbmNlKj4oaW5zdCks
IGluZGV4LCBub3JtYWwsIGZhbHNlKTsKKyAgICAgICAgICAgIFF0UnVudGltZU1ldGFNZXRob2Qq
IHZhbCA9IFF0UnVudGltZU1ldGFNZXRob2Q6OmNyZWF0ZShleGVjLCBpZGVudGlmaWVyLCBzdGF0
aWNfY2FzdDxRdEluc3RhbmNlKj4oaW5zdCksIGluZGV4LCBub3JtYWwsIGZhbHNlKTsKICAgICAg
ICAgICAgIHF0aW5zdC0+bV9tZXRob2RzLmluc2VydChuYW1lLCBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+KGV4ZWMtPmdsb2JhbERhdGEoKSwgcXRpbnN0LT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMp
LCB2YWwpKTsKICAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw4ICs1MCwxMSBAQCBRX0dMT0JBTF9TVEFUSUMoUXRJbnN0YW5jZTo6UXRTZW5kZXJTdGFj
CiAvLyBEZXJpdmVkIFJ1bnRpbWVPYmplY3QKIGNsYXNzIFF0UnVudGltZU9iamVjdCA6IHB1Ymxp
YyBSdW50aW1lT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBRdFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEluc3RhbmNlPik7Ci0KKyAgICBzdGF0aWMg
UXRSdW50aW1lT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxRdFJ1bnRpbWVPYmplY3Q+KCpleGVjLT5oZWFw
KCkpKSBRdFJ1bnRpbWVPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnN0YW5jZSk7CisgICAg
fQorICAgIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgdmlydHVh
bCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC02OSw2ICs3Miw5
IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IFJ1bnRpbWVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbjsKKworcHJpdmF0ZToKKyAgICBRdFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwg
SlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEluc3RhbmNlPik7CiB9OwogCiBjb25zdCBDbGFz
c0luZm8gUXRSdW50aW1lT2JqZWN0OjpzX2luZm8gPSB7ICJRdFJ1bnRpbWVPYmplY3QiLCAmUnVu
dGltZU9iamVjdDo6c19pbmZvLCAwLCAwIH07CkBAIC0xODIsNyArMTg4LDcgQEAgUnVudGltZU9i
amVjdCogUXRJbnN0YW5jZTo6bmV3UnVudGltZU9iagogewogICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CiAgICAgbV9tZXRob2RzLmNsZWFyKCk7Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgUXRSdW50aW1lT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgdGhpcyk7CisgICAgcmV0dXJuIFF0UnVudGltZU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9CiAKIHZvaWQgUXRJbnN0YW5jZTo6dmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0yMzgsNyArMjQ0LDcgQEAgSlNW
YWx1ZSBRdEluc3RhbmNlOjpnZXRNZXRob2QoRXhlY1N0YXRlKgogICAgIGlmICghZ2V0Q2xhc3Mo
KSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9
IG1fY2xhc3MtPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBu
ZXcgKGV4ZWMpIFJ1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVNZXRob2Q+KGV4ZWMp
LCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworICAgIHJldHVybiBSdW50aW1lTWV0aG9kOjpj
cmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpkZXByZWNh
dGVkR2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBwcm9wZXJ0eU5hbWUsIG1l
dGhvZExpc3QpOwogfQogCiBKU1ZhbHVlIFF0SW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3Rh
dGUqLCBSdW50aW1lTWV0aG9kKikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9w
aXhtYXBydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyAr
MTk4LDEwIEBAIHN0cnVjdCBRdFBpeG1hcE1ldGFEYXRhIHsKIC8vIERlcml2ZWQgUnVudGltZU9i
amVjdAogY2xhc3MgUXRQaXhtYXBSdW50aW1lT2JqZWN0IDogcHVibGljIFJ1bnRpbWVPYmplY3Qg
ewogcHVibGljOgotICAgIFF0UGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsKKyAgICBzdGF0aWMgUXRQaXhtYXBSdW50
aW1lT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxRdFBpeG1hcFJ1bnRpbWVPYmplY3Q+KCpleGVjLT5oZWFw
KCkpKSBRdFBpeG1hcFJ1bnRpbWVPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnN0YW5jZSk7
CisgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKQEAgLTIwOSw2
ICsyMTIsOSBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBSdW50aW1lT2JqZWN0OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW47CisKK3ByaXZhdGU6CisgICAgUXRQaXhtYXBSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxJbnN0YW5jZT4pOwogfTsK
IAogUXRQaXhtYXBSdW50aW1lT2JqZWN0OjpRdFBpeG1hcFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPEluc3RhbmNl
PiBpbnN0YW5jZSkKQEAgLTIzMSw3ICsyMzcsNyBAQCBDbGFzcyogUXRQaXhtYXBJbnN0YW5jZTo6
Z2V0Q2xhc3MoKSBjb25zCiBKU1ZhbHVlIFF0UGl4bWFwSW5zdGFuY2U6OmdldE1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBNZXRo
b2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFzcygpLT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1l
LCB0aGlzKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lTWV0aG9kKGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZTxSdW50aW1lTWV0aG9kPihleGVjKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKKyAgICBy
ZXR1cm4gUnVudGltZU1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxSdW50aW1lTWV0aG9kPihl
eGVjKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIH0KIAogSlNWYWx1ZSBRdFBpeG1hcElu
c3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0aG9kKiBydW50
aW1lTWV0aG9kKQpAQCAtNDAyLDcgKzQwOCw3IEBAIHJldHVybkVtcHR5VmFyaWFudDoKIAogUnVu
dGltZU9iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgcmV0dXJuIG5ldyhleGVjKSBRdFBpeG1hcFJ1bnRpbWVPYmplY3QoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKKyAgICByZXR1cm4gUXRQaXht
YXBSdW50aW1lT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCB0aGlzKTsKIH0KIAogSlNPYmplY3QqIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVBpeG1hcFJ1
bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3Qs
IGNvbnN0IFFWYXJpYW50JiBkYXRhKQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDYsNyArMTU0Niw3IEBAIEpTVmFs
dWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y29ubmVjdEdldHQKICAgICBRV19EUyhRdFJ1bnRpbWVN
ZXRhTWV0aG9kLCB0aGlzT2JqKTsKIAogICAgIGlmICghZC0+bV9jb25uZWN0KQotICAgICAgICBk
LT5tX2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iaiwgbmV3IChleGVjKSBR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKGV4ZWMsIGlkZW50LCB0cnVlLCBkLT5tX2luc3RhbmNl
LCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSkpOworICAgICAgICBkLT5tX2Nvbm5lY3Quc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iaiwgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6
Y3JlYXRlKGV4ZWMsIGlkZW50LCB0cnVlLCBkLT5tX2luc3RhbmNlLCBkLT5tX2luZGV4LCBkLT5t
X3NpZ25hdHVyZSkpOwogICAgIHJldHVybiBkLT5tX2Nvbm5lY3QuZ2V0KCk7CiB9CiAKQEAgLTE1
NTYsNyArMTU1Niw3IEBAIEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6ZGlzY29ubmVjdEcK
ICAgICBRV19EUyhRdFJ1bnRpbWVNZXRhTWV0aG9kLCB0aGlzT2JqKTsKIAogICAgIGlmICghZC0+
bV9kaXNjb25uZWN0KQotICAgICAgICBkLT5tX2Rpc2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpc09iaiwgbmV3IChleGVjKSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKGV4ZWMs
IGlkZW50LCBmYWxzZSwgZC0+bV9pbnN0YW5jZSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUp
KTsKKyAgICAgICAgZC0+bV9kaXNjb25uZWN0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNP
YmosIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNyZWF0ZShleGVjLCBpZGVudCwgZmFsc2Us
IGQtPm1faW5zdGFuY2UsIGQtPm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7CiAgICAgcmV0dXJu
IGQtPm1fZGlzY29ubmVjdC5nZXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3J1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9x
dC9xdF9ydW50aW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRl
ICJCcmlkZ2VKU0MuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0LmgiCiAjaW5jbHVkZSAiV2Vhay5o
IgorI2luY2x1ZGUgInF0X2luc3RhbmNlLmgiCiAjaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIK
IAogI2luY2x1ZGUgPHFieXRlYXJyYXkuaD4KQEAgLTMzLDggKzM0LDYgQEAKIG5hbWVzcGFjZSBK
U0MgewogbmFtZXNwYWNlIEJpbmRpbmdzIHsKIAotY2xhc3MgUXRJbnN0YW5jZTsKLQogY2xhc3Mg
UXRGaWVsZCA6IHB1YmxpYyBGaWVsZCB7CiBwdWJsaWM6CiAKQEAgLTE1MSw3ICsxNTAsMTAgQEAg
cHJvdGVjdGVkOgogY2xhc3MgUXRSdW50aW1lTWV0YU1ldGhvZCA6IHB1YmxpYyBRdFJ1bnRpbWVN
ZXRob2QKIHsKIHB1YmxpYzoKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmbiwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0LCBpbnQg
aW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSwgYm9vbCBhbGxvd1ByaXZhdGUpOwor
ICAgIHN0YXRpYyBRdFJ1bnRpbWVNZXRhTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBuLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBpbmRl
eCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlLCBib29sIGFsbG93UHJpdmF0ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxRdFJ1bnRpbWVNZXRhTWV0aG9kPigq
ZXhlYy0+aGVhcCgpKSkgUXRSdW50aW1lTWV0YU1ldGhvZChleGVjLCBuLCBpbnN0LCBpbmRleCwg
c2lnbmF0dXJlLCBhbGxvd1ByaXZhdGUpOworICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNs
b3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKQEAgLTE2Myw2ICsx
NjUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUXRSdW50aW1lTWV0YU1ldGhvZERhdGEqIGRfZnVuYygp
IGNvbnN0IHtyZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSo+
KGRfcHRyKTt9CiAKIHByaXZhdGU6CisgICAgUXRSdW50aW1lTWV0YU1ldGhvZChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiwgaW50IGluZGV4LCBj
b25zdCBRQnl0ZUFycmF5JiwgYm9vbCBhbGxvd1ByaXZhdGUpOworCiAgICAgdmlydHVhbCBDYWxs
VHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKiBleGVjKTsKICAgICBzdGF0aWMgSlNWYWx1ZSBs
ZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpOwpAQCAt
MTc0LDcgKzE3OCwxMCBAQCBjbGFzcyBRdENvbm5lY3Rpb25PYmplY3Q7CiBjbGFzcyBRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kIDogcHVibGljIFF0UnVudGltZU1ldGhvZAogewogcHVibGljOgot
ICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZuLCBib29sIGlzQ29ubmVjdCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0LCBp
bnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSApOworICAgIHN0YXRpYyBRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBuLCBib29sIGlzQ29ubmVjdCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0LCBp
bnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kPigqZXhlYy0+
aGVhcCgpKSkgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZChleGVjLCBuLCBpc0Nvbm5lY3QsIGlu
c3QsIGluZGV4LCBzaWduYXR1cmUpOworICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKQEAgLTE4NCw2ICsxOTEs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEqIGRfZnVu
YygpIGNvbnN0IHtyZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kRGF0YSo+KGRfcHRyKTt9CiAKIHByaXZhdGU6CisgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1l
dGhvZChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCBpc0Nvbm5lY3QsIFBhc3NS
ZWZQdHI8UXRJbnN0YW5jZT4sIGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYpOworCiAgICAg
dmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogICAgIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKiBleGVjKTsKICAgICBzdGF0
aWMgSlNWYWx1ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMS0wNy0yNyAg
TWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92
ZSBvcGVyYXRvciBuZXcgZnJvbSBKU0NlbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0OTk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gb2Ygb3BlcmF0b3Ig
bmV3IGluIEpTQ2VsbCwgc28gYW55IGZ1cnRoZXIgdXNlcworICAgICAgICB3aWxsIG5vdCBzdWNj
ZXNzZnVsbHkgbGluay4gIEFsc28gcmVtb3ZlZCBhbnkgcmVtYWluaW5nIHVzZXMgb2Ygb3BlcmF0
b3IgbmV3LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRo
b2QuaDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE1ldGhvZDo6Y3JlYXRlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkpTTlBPYmplY3Q6Om1ldGhvZEdldHRlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuaDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6
Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1l
T2JqZWN0TWFwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBSdW50aW1lT2JqZWN0TWFwOjpnZXRP
ckNyZWF0ZUpTT2JqZWN0KToKKwogMjAxMS0wNy0yNyAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmph
bWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtXSzJdIENsZWFuIFdLUGFnZUxvYWRlckNs
aWVudApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pT
TlBNZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDEzICszNSwxOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIC8vIEEgSlNPYmplY3Qg
dGhhdCB3cmFwcyBhbiBOUE1ldGhvZC4KIGNsYXNzIEpTTlBNZXRob2QgOiBwdWJsaWMgSlNDOjpJ
bnRlcm5hbEZ1bmN0aW9uIHsKIHB1YmxpYzoKLSAgICBKU05QTWV0aG9kKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIE5QSWRlbnRp
Zmllcik7CisgICAgc3RhdGljIEpTTlBNZXRob2QqIGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50LCBOUElkZW50aWZpZXIgbnBJZGVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZXcgKEpTQzo6YWxsb2NhdGVDZWxsPEpTTlBNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBKU05QTWV0
aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRlbnQsIG5wSWRlbnQpOworICAgIH0KIAogICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKICAgICBOUElkZW50aWZpZXIgbnBJ
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9ucElkZW50aWZpZXI7IH0KIAogcHJpdmF0ZTog
ICAgCisgICAgSlNOUE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBOUElkZW50aWZpZXIpOworCiAgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5m
byk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIEpTVmFsdWUgSlNOUE9iamVjdDo6bWV0aG9kR2V0
dGVyKEV4ZWNTdGEKICAgICAgICAgcmV0dXJuIHRocm93SW52YWxpZEFjY2Vzc0Vycm9yKGV4ZWMp
OwogCiAgICAgTlBJZGVudGlmaWVyIG5wSWRlbnRpZmllciA9IG5wSWRlbnRpZmllckZyb21JZGVu
dGlmaWVyKG1ldGhvZE5hbWUpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTlBNZXRob2QoZXhl
YywgdGhpc09iai0+Z2xvYmFsT2JqZWN0KCksIG1ldGhvZE5hbWUsIG5wSWRlbnRpZmllcik7Cisg
ICAgcmV0dXJuIEpTTlBNZXRob2Q6OmNyZWF0ZShleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3Qo
KSwgbWV0aG9kTmFtZSwgbnBJZGVudGlmaWVyKTsKIH0KIAogSlNPYmplY3QqIEpTTlBPYmplY3Q6
OnRocm93SW52YWxpZEFjY2Vzc0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSwxMSBA
QCBjbGFzcyBOUFJ1bnRpbWVPYmplY3RNYXA7CiAKIGNsYXNzIEpTTlBPYmplY3QgOiBwdWJsaWMg
SlNDOjpKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewogcHVibGljOgotICAgIEpTTlBPYmplY3Qo
SlNDOjpKU0dsb2JhbE9iamVjdCosIE5QUnVudGltZU9iamVjdE1hcCogb2JqZWN0TWFwLCBOUE9i
amVjdCogbnBPYmplY3QpOworICAgIHN0YXRpYyBKU05QT2JqZWN0KiBjcmVhdGUoSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBOUFJ1bnRpbWVPYmplY3RNYXAqIG9iamVjdE1hcCwg
TlBPYmplY3QqIG5wT2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoSlNDOjphbGxv
Y2F0ZUNlbGw8SlNOUE9iamVjdD4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpIEpT
TlBPYmplY3QoZ2xvYmFsT2JqZWN0LCBvYmplY3RNYXAsIG5wT2JqZWN0KTsKKyAgICB9CisKICAg
ICB+SlNOUE9iamVjdCgpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CkBAIC01Myw2ICs1Nyw4
IEBAIHB1YmxpYzoKICAgICBOUE9iamVjdCogbnBPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX25w
T2JqZWN0OyB9CiAKIHByaXZhdGU6CisgICAgSlNOUE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgTlBSdW50aW1lT2JqZWN0TWFwKiwgTlBPYmplY3QqKTsKKwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOwogICAgIAogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9i
amVjdE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDkxODUyKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVj
dE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgSlNPYmplY3QqIE5QUnVu
dGltZU9iamVjdE1hcDo6Z2V0T3JDcmVhdAogICAgIGlmIChKU0M6OldlYWs8SlNOUE9iamVjdD4g
anNOUE9iamVjdCA9IG1fanNOUE9iamVjdHMuZ2V0KG5wT2JqZWN0KSkKICAgICAgICAgcmV0dXJu
IGpzTlBPYmplY3QuZ2V0KCk7CiAKLSAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0gbmV3ICgm
Z2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkpIEpTTlBPYmplY3QoZ2xvYmFsT2JqZWN0LCB0aGlz
LCBucE9iamVjdCk7CisgICAgSlNOUE9iamVjdCoganNOUE9iamVjdCA9IEpTTlBPYmplY3Q6OmNy
ZWF0ZShnbG9iYWxPYmplY3QsIHRoaXMsIG5wT2JqZWN0KTsKICAgICBtX2pzTlBPYmplY3RzLnNl
dChucE9iamVjdCwgSlNDOjpXZWFrPEpTTlBPYmplY3Q+KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBqc05QT2JqZWN0LCB0aGlzLCBucE9iamVjdCkpOwogCiAgICAgcmV0dXJuIGpzTlBPYmpl
Y3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTg1NCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTA3
LTI3ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIG9wZXJhdG9yIG5ldyBmcm9tIEpTQ2VsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBvcGVy
YXRvciBuZXcgaW4gSlNDZWxsLCBzbyBhbnkgZnVydGhlciB1c2VzCisgICAgICAgIHdpbGwgbm90
IHN1Y2Nlc3NmdWxseSBsaW5rLiAgQWxzbyByZW1vdmVkIGFueSByZW1haW5pbmcgdXNlcyBvZiBv
cGVyYXRvciBuZXcuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1t
OgorICAgICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpuZXdSdW50aW1lT2JqZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6UHJveHlSdW50aW1lTWV0aG9kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpQcm94eVJ1bnRpbWVNZXRob2Q6OlByb3h5UnVudGltZU1ldGhvZCk6CisgICAgICAgIChX
ZWJLaXQ6OlByb3h5SW5zdGFuY2U6OmdldE1ldGhvZCk6CisgICAgICAgICogUGx1Z2lucy9Ib3N0
ZWQvUHJveHlSdW50aW1lT2JqZWN0Lmg6CisgICAgICAgIChXZWJLaXQ6OlByb3h5UnVudGltZU9i
amVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUu
bW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWluXSk6CisKIDIwMTEt
MDctMjYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjov
L3Byb2JsZW0vOTg0Mjg4OT4gQWRkIGEgZ2VuZXJpYyBwaWN0b2dyYXBoIGZvbnQgZmFtaWx5Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFu
Y2UubW0JKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlJbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIFBy
b3h5SW5zdGFuY2U6On5Qcm94eUluc3RhbmNlKCkKICAgICAKIFJ1bnRpbWVPYmplY3QqIFByb3h5
SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBuZXcgKGV4ZWMpIFByb3h5UnVudGltZU9iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIHRoaXMpOworICAgIHJldHVybiBQcm94eVJ1bnRpbWVPYmplY3Q6OmNyZWF0ZShl
eGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOwogfQogCiBKU0M6OkJpbmRp
bmdzOjpDbGFzcyogUHJveHlJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdApAQCAtMTc5LDEyICsx
NzksOSBAQCBKU1ZhbHVlIFByb3h5SW5zdGFuY2U6Omludm9rZShKU0M6OkV4ZWNTCiAKIGNsYXNz
IFByb3h5UnVudGltZU1ldGhvZCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKIHB1YmxpYzoKLSAg
ICBQcm94eVJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYg
bGlzdCkKLSAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0
aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBl
eGVjLWdsb2JhbERhdGEoKSBpcyBhbHNvIGxpa2VseSB3cm9uZy4KLSAgICAgICAgOiBSdW50aW1l
TWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxQcm94
eVJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQorICAgIHN0YXRpYyBQcm94eVJ1bnRp
bWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFByb3h5UnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkp
IFByb3h5UnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIG5hbWUsIGxpc3QpOwogICAg
IH0KIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMTkzLDYgKzE5MCwxNSBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKK3ByaXZh
dGU6CisgICAgUHJveHlSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhv
ZExpc3QmIGxpc3QpCisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJl
IHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKKyAgICAg
ICAgLy8gZXhlYy1nbG9iYWxEYXRhKCkgaXMgYWxzbyBsaWtlbHkgd3JvbmcuCisgICAgICAgIDog
UnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1
cmU8UHJveHlSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgfQogfTsKIAogY29uc3QgQ2xhc3NJbmZv
IFByb3h5UnVudGltZU1ldGhvZDo6c19pbmZvID0geyAiUHJveHlSdW50aW1lTWV0aG9kIiwgJlJ1
bnRpbWVNZXRob2Q6OnNfaW5mbywgMCwgMCB9OwpAQCAtMjAwLDcgKzIwNiw3IEBAIGNvbnN0IENs
YXNzSW5mbyBQcm94eVJ1bnRpbWVNZXRob2Q6OnNfaW4KIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6
Z2V0TWV0aG9kKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKIHsKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFzcygpLT5t
ZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBQ
cm94eVJ1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9w
ZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworICAgIHJldHVybiBQcm94eVJ1bnRpbWVNZXRob2Q6OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgbWV0
aG9kTGlzdCk7CiB9CiAKIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlSdW50aW1lT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlSdW50aW1lT2Jq
ZWN0LmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlSdW50aW1lT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDExIEBA
IGNsYXNzIFByb3h5SW5zdGFuY2U7CiAKIGNsYXNzIFByb3h5UnVudGltZU9iamVjdCA6IHB1Ymxp
YyBKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBQcm94eVJ1bnRp
bWVPYmplY3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0
cjxQcm94eUluc3RhbmNlPik7CisgICAgc3RhdGljIFByb3h5UnVudGltZU9iamVjdCogY3JlYXRl
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFBhc3NSZWZQdHI8UHJveHlJbnN0YW5jZT4gaW5zdCkKKyAgICB7CisgICAgICAgIHJldHVybiBu
ZXcgKEpTQzo6YWxsb2NhdGVDZWxsPFByb3h5UnVudGltZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkp
IFByb3h5UnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGluc3QpOworICAgIH0KKwog
ICAgIHZpcnR1YWwgflByb3h5UnVudGltZU9iamVjdCgpOwogCiAgICAgUHJveHlJbnN0YW5jZSog
Z2V0SW50ZXJuYWxQcm94eUluc3RhbmNlKCkgY29uc3Q7CkBAIC00Nyw2ICs1MSw4IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworcHJp
dmF0ZToKKyAgICBQcm94eVJ1bnRpbWVPYmplY3QoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxQcm94eUluc3RhbmNlPik7CiB9OwogCiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRl
Lm1tCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2Ny
aXB0RGVidWdEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw3IEBAIC0g
KE5TQXJyYXkgKilzY29wZUNoYWluCiAgICAgZm9yIChTY29wZUNoYWluSXRlcmF0b3IgaXQgPSBz
Y29wZUNoYWluLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGl0LT5nZXQoKTsKICAgICAgICAgaWYgKG9iamVjdC0+aXNBY3RpdmF0aW9uT2Jq
ZWN0KCkpCi0gICAgICAgICAgICBvYmplY3QgPSBuZXcgKHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEp
IERlYnVnZ2VyQWN0aXZhdGlvbigqc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgb2JqZWN0KTsKKyAg
ICAgICAgICAgIG9iamVjdCA9IERlYnVnZ2VyQWN0aXZhdGlvbjo6Y3JlYXRlKCpzY29wZUNoYWlu
LT5nbG9iYWxEYXRhLCBvYmplY3QpOwogICAgICAgICBbc2NvcGVzIGFkZE9iamVjdDpbc2VsZiBf
Y29udmVydFZhbHVlVG9PYmpjVmFsdWU6b2JqZWN0XV07CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102196</attachid>
            <date>2011-07-27 15:27:45 -0700</date>
            <delta_ts>2011-07-27 21:59:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64999-20110727152746.patch</filename>
            <type>text/plain</type>
            <size>53759</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTE4NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTEtMDctMjcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgb3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVudGF0aW9u
IG9mIG9wZXJhdG9yIG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAgICAgICAg
d2lsbCBub3Qgc3VjY2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFpbmluZyB1
c2VzIG9mIG9wZXJhdG9yIG5ldy4KKworICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckFjdGl2YXRpb246OmNyZWF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjcmVhdGVFeGNlcHRpb25TY29wZSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNw
cDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3Rh
dGljU2NvcGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6SlNTdGF0aWNTY29wZU9i
amVjdCk6CisgICAgICAgICogcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oOgorICAgICAg
ICAoSlNDOjpTdHJpY3RFdmFsQWN0aXZhdGlvbjo6Y3JlYXRlKToKKwogMjAxMS0wNy0yNyAgU2hp
bnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGFuIGlu
dGVyZmFjZSB0byB0YWtlIElzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0
ZQogI2VuZGlmCiAKICAgICBpZiAoIWdsb2JhbE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTR2xvYmFs
T2JqZWN0KCpnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnbG9i
YWxEYXRhLCBqc051bGwoKSkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAgICAgICAgcmV0dXJuIEpT
R2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckFjdGl2YXRpb24uaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGVidWdnZXJB
Y3RpdmF0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRGVidWdnZXJBY3RpdmF0aW9uKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CisgICAgICAg
IHN0YXRpYyBEZWJ1Z2dlckFjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTT2JqZWN0KiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxEZWJ1Z2dlckFjdGl2YXRpb24+KGdsb2JhbERhdGEuaGVhcCkpIERlYnVn
Z2VyQWN0aXZhdGlvbihnbG9iYWxEYXRhLCBvYmplY3QpOworICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdmlydHVh
bCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwpAQCAtNTgsNiArNjEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTT2Jq
ZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6CisgICAgICAgIERlYnVnZ2VyQWN0
aXZhdGlvbihKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOwogICAgICAgICBXcml0ZUJhcnJpZXI8
SlNBY3RpdmF0aW9uPiBtX2FjdGl2YXRpb247CiAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5
MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDYsNyArMTIwNiw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBib29sIHB1c2hlZFNjb3BlID0gZmFsc2U7CiAg
ICAgaWYgKG51bVZhcmlhYmxlcyB8fCBudW1GdW5jdGlvbnMpIHsKICAgICAgICAgaWYgKGNvZGVC
bG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gbmV3
IChjYWxsRnJhbWUpIFN0cmljdEV2YWxBY3RpdmF0aW9uKGNhbGxGcmFtZSk7CisgICAgICAgICAg
ICB2YXJpYWJsZU9iamVjdCA9IFN0cmljdEV2YWxBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1l
KTsKICAgICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5wdXNoKHZhcmlhYmxlT2Jq
ZWN0KTsKICAgICAgICAgICAgIHB1c2hlZFNjb3BlID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTMx
MSw3ICsxMzExLDcgQEAgTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2RlKiBJbnRlcnByZXRlcgog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSA9IGNvZGVCbG9jay0+aWRlbnRpZmllcih2UENbMl0udS5vcGVy
YW5kKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQp
LmpzVmFsdWUoKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKGNhbGxGcmFtZSkgSlNTdGF0
aWNTY29wZU9iamVjdChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgRG9udERlbGV0ZSk7Cisg
ICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRlKGNhbGxGcmFt
ZSwgcHJvcGVydHksIHZhbHVlLCBEb250RGVsZXRlKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoZHN0KSA9IEpTVmFsdWUoc2NvcGUpOwogCiAgICAgcmV0dXJuIGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKHNjb3BlKTsKQEAgLTQxMzYsNyArNDEzNiw3IEBAIHNraXBfaWRfY3VzdG9t
X3NlbGY6CiAgICAgICAgICAgICBkb2VzIG5vdCBhZmZlY3QgdGhlIHNjb3BlIGVuY2xvc2luZyB0
aGUgRnVuY3Rpb25FeHByZXNzaW9uLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCFmdW5jdGlv
bi0+bmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiBm
dW5jdGlvblNjb3BlT2JqZWN0ID0gbmV3IChjYWxsRnJhbWUpIEpTU3RhdGljU2NvcGVPYmplY3Qo
Y2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jLCBSZWFkT25seSB8IERvbnREZWxldGUp
OworICAgICAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9
IEpTU3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCks
IGZ1bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgICAgICBmdW5jLT5zZXRTY29w
ZSgqZ2xvYmFsRGF0YSwgZnVuYy0+c2NvcGUoKS0+cHVzaChmdW5jdGlvblNjb3BlT2JqZWN0KSk7
CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwODIsNyArMzA4Miw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2YKICAgICAgICAgZG9lcyBub3QgYWZmZWN0IHRoZSBzY29w
ZSBlbmNsb3NpbmcgdGhlIEZ1bmN0aW9uRXhwcmVzc2lvbi4KICAgICAgKi8KICAgICBpZiAoIWZ1
bmN0aW9uLT5uYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCog
ZnVuY3Rpb25TY29wZU9iamVjdCA9IG5ldyAoY2FsbEZyYW1lKSBKU1N0YXRpY1Njb3BlT2JqZWN0
KGNhbGxGcmFtZSwgZnVuY3Rpb24tPm5hbWUoKSwgZnVuYywgUmVhZE9ubHkgfCBEb250RGVsZXRl
KTsKKyAgICAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogZnVuY3Rpb25TY29wZU9iamVjdCA9IEpT
U3RhdGljU2NvcGVPYmplY3Q6OmNyZWF0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uLT5uYW1lKCksIGZ1
bmMsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CiAgICAgICAgIGZ1bmMtPnNldFNjb3BlKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jLT5zY29wZSgpLT5wdXNoKGZ1bmN0aW9uU2NvcGVPYmpl
Y3QpKTsKICAgICB9CiAKQEAgLTMzNzgsNyArMzM3OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEpTT2JqZWN0Kiwgb3BfcHVzaF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CiAKLSAgICBKU09iamVjdCogc2NvcGUgPSBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0
YSkgSlNTdGF0aWNTY29wZU9iamVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzBdLmlkZW50aWZpZXIoKSwgc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKSwgRG9udERl
bGV0ZSk7CisgICAgSlNPYmplY3QqIHNjb3BlID0gSlNTdGF0aWNTY29wZU9iamVjdDo6Y3JlYXRl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBz
dGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpLCBEb250RGVsZXRlKTsKIAogICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKHNjb3BlKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDggKzEyMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgICAg
IC8vIEdhcmJhZ2UgY29sbGVjdGlvbi4KLSAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVf
dCwgRXhlY1N0YXRlKik7Ci0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xv
YmFsRGF0YSopOwogICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwbGFj
ZW1lbnROZXdEZXN0aW5hdGlvbikgeyByZXR1cm4gcGxhY2VtZW50TmV3RGVzdGluYXRpb247IH0K
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwpAQCAt
MTY1LDYgKzE2MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAg
ICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGZpcnN0IHR3byBkZWNsYXJhdGlvbnMg
b2Ygb3BlcmF0b3IgbmV3IGhhdmUgbm8gY29ycmVzcG9uZGluZyBpbXBsZW1lbnRhdGlvbiBhbmQg
CisgICAgICAgIC8vIHdpbGwgY2F1c2UgbGluayBlcnJvcnMgaWYgeW91IHVzZSB0aGVtLgorICAg
ICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBFeGVjU3RhdGUqKTsKKyAgICAgICAgdm9p
ZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7CisgICAgICAgIAogICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKICAgICB9OwogCkBAIC0zNTgs
MjAgKzM2MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KICNlbmRpZgogCi0gICAgaW5saW5l
IHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCi0gICAgewotICAgICAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KGdsb2JhbERhdGEtPmhlYXAuYWxsb2NhdGUoc2l6ZSkpOwotICAgICAgICByZXN1bHQt
Pm1fc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgaW5saW5lIHZvaWQqIEpTQ2VsbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBFeGVjU3Rh
dGUqIGV4ZWMpCi0gICAgewotICAgICAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZSkpOwotICAgICAgICByZXN1bHQtPm1f
c3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAog
ICAgIGlubGluZSB2b2lkIGRlc3RydWN0b3IoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAg
Y2VsbC0+fkpTQ2VsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsx
MjIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9ldmFsRW5hYmxlZDsKIAog
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTR2xvYmFsT2JqZWN0PihnbG9iYWxE
YXRhLmhlYXApKSBKU0dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKKworICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgICAg
IDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxl
LCAwKQogICAgICAgICAgICAgLCBtX3JlZ2lzdGVyQXJyYXlTaXplKDApCkBAIC0xMzQsOSArMTQy
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpbml0KHRoaXMpOwogICAgICAgICB9
CiAKLSAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
LQotICAgIHByb3RlY3RlZDoKICAgICAgICAgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIHRoaXNWYWx1ZSkKICAg
ICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5
bWJvbFRhYmxlLCAwKQogICAgICAgICAgICAgLCBtX3JlZ2lzdGVyQXJyYXlTaXplKDApCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9i
amVjdC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDkgQEAg
bmFtZXNwYWNlIEpTQ3sKICAgICAKICAgICBjbGFzcyBKU1N0YXRpY1Njb3BlT2JqZWN0IDogcHVi
bGljIEpTVmFyaWFibGVPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNTdGF0aWNTY29w
ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2Jq
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnN0YXRpY1Njb3BlU3Ry
dWN0dXJlLmdldCgpLCAmbV9zeW1ib2xUYWJsZSwgcmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+
KCZtX3JlZ2lzdGVyU3RvcmUgKyAxKSkKKyAgICAgICAgc3RhdGljIEpTU3RhdGljU2NvcGVPYmpl
Y3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBKU1Zh
bHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
X3JlZ2lzdGVyU3RvcmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgdmFsdWUpOwotICAg
ICAgICAgICAgc3ltYm9sVGFibGUoKS5hZGQoaWRlbnQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5
KC0xLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
SlNTdGF0aWNTY29wZU9iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIEpTU3RhdGljU2NvcGVPYmplY3Qo
ZXhlYywgaWRlbnQsIHZhbHVlLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CkBAIC01Myw2ICs1MSwxMyBA
QCBuYW1lc3BhY2UgSlNDewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBK
U1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIHByaXZhdGU6CisgICAgICAg
IEpTU3RhdGljU2NvcGVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgICAgIDog
SlNWYXJpYWJsZU9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5z
dGF0aWNTY29wZVN0cnVjdHVyZS5nZXQoKSwgJm1fc3ltYm9sVGFibGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8UmVnaXN0ZXIqPigmbV9yZWdpc3RlclN0b3JlICsgMSkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fcmVnaXN0ZXJTdG9yZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCB2YWx1ZSk7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIFN5bWJvbFRhYmxl
RW50cnkoLTEsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3lt
Ym9sVGFibGUgbV9zeW1ib2xUYWJsZTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1f
cmVnaXN0ZXJTdG9yZTsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5oCShyZXZpc2lvbiA5MTg1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBT
dHJpY3RFdmFsQWN0aXZhdGlvbiA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
LSAgICBTdHJpY3RFdmFsQWN0aXZhdGlvbihFeGVjU3RhdGUqKTsKKyAgICBzdGF0aWMgU3RyaWN0
RXZhbEFjdGl2YXRpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaWN0RXZhbEFjdGl2YXRpb24+KCpleGVjLT5oZWFw
KCkpKSBTdHJpY3RFdmFsQWN0aXZhdGlvbihleGVjKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHZp
cnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKICAgICB2aXJ0
dWFsIEpTVmFsdWUgdG9TdHJpY3RUaGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwpAQCAtNDQs
NiArNDgsOSBAQCBwdWJsaWM6CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSXNFbnZpcm9ubWVudFJlY29yZCB8IEpTTm9uRmluYWxP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIFN0cmljdEV2YWxBY3RpdmF0
aW9uKEV4ZWNTdGF0ZSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODU0KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTA3LTI3ICBN
YXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IG9wZXJhdG9yIG5ldyBmcm9tIEpTQ2VsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBvcGVyYXRvciBu
ZXcgaW4gSlNDZWxsLCBzbyBhbnkgZnVydGhlciB1c2VzCisgICAgICAgIHdpbGwgbm90IHN1Y2Nl
c3NmdWxseSBsaW5rLiAgQWxzbyByZW1vdmVkIGFueSByZW1haW5pbmcgdXNlcyBvZiBvcGVyYXRv
ciBuZXcuCisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAgIChKU1J1bjo6SlNSdW4pOgor
ICAgICAgICAqIEpTUnVuLmg6CisgICAgICAgIChKU0dsdWVHbG9iYWxPYmplY3Q6OmNyZWF0ZSk6
CisgICAgICAgICogSlNVdGlscy5jcHA6CisgICAgICAgIChKU09iamVjdEtKU1ZhbHVlKToKKyAg
ICAgICAgKGdldFRocmVhZEdsb2JhbE9iamVjdCk6CisgICAgICAgICogVXNlck9iamVjdEltcC5o
OgorICAgICAgICAoVXNlck9iamVjdEltcDo6Y3JlYXRlKToKKwogMjAxMS0wNy0wMSAgSnVuZ3No
aWsgU2hpbiAgPGpzaGluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4
ZXkgUHJvc2t1cnlha292LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCShyZXZpc2lvbiA5
MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgSlNHbHVlR2xvYmFsT2JqZWN0OjpKU0dsdWVHbG9iYWxPYmplY3Qo
SgogSlNSdW46OkpTUnVuKENGU3RyaW5nUmVmIHNvdXJjZSwgSlNGbGFncyBpbkZsYWdzKQogICAg
IDogICBKU0Jhc2Uoa0pTUnVuVHlwZUlEKSwKICAgICAgICAgZlNvdXJjZShDRlN0cmluZ1RvVVN0
cmluZyhzb3VyY2UpKSwKLSAgICAgICAgZkdsb2JhbE9iamVjdChnZXRUaHJlYWRHbG9iYWxFeGVj
U3RhdGUoKS0+Z2xvYmFsRGF0YSgpLCBuZXcgKCZnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+
Z2xvYmFsRGF0YSgpKSBKU0dsdWVHbG9iYWxPYmplY3QoZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRl
KCktPmdsb2JhbERhdGEoKSwgSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZ2V0
VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmdsb2JhbERhdGEoKSwganNOdWxsKCkpLCBpbkZsYWdz
KSksCisgICAgICAgIGZHbG9iYWxPYmplY3QoZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmds
b2JhbERhdGEoKSwgSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGUoZ2V0VGhyZWFkR2xvYmFsRXhl
Y1N0YXRlKCktPmdsb2JhbERhdGEoKSwgSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUoZ2V0VGhyZWFkR2xvYmFsRXhlY1N0YXRlKCktPmdsb2JhbERhdGEoKSwganNOdWxsKCkpLCBp
bkZsYWdzKSksCiAgICAgICAgIGZGbGFncyhpbkZsYWdzKQogewogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRHbHVlL0pTUnVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVl
L0pTUnVuLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0pTUnVu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxNyBAQAogCiBjbGFzcyBKU0dsdWVHbG9i
YWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAg
SlNHbHVlR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEpTRmxhZ3MgPSBr
SlNGbGFnTm9uZSk7CisgICAgICAgIHN0YXRpYyBKU0dsdWVHbG9iYWxPYmplY3QqIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0ZsYWdzIGZs
YWdzID0ga0pTRmxhZ05vbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxKU0dsdWVHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEpTR2x1ZUds
b2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGZsYWdzKTsKKyAgICAgICAgfQogCiAg
ICAgICAgIEpTRmxhZ3MgRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CiAgICAgICAg
IFN0cnVjdHVyZSogdXNlck9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlck9i
amVjdFN0cnVjdHVyZS5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgSlNHbHVlR2xv
YmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEpTRmxhZ3MgPSBrSlNGbGFnTm9u
ZSk7CisgICAgICAgIAogICAgICAgICBKU0ZsYWdzIG1fZmxhZ3M7CiAgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IG1fdXNlck9iamVjdFN0cnVjdHVyZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdEdsdWUvSlNVdGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVl
L0pTVXRpbHMuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9K
U1V0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIEpTVmFsdWUgSlNP
YmplY3RLSlNWYWx1ZShKU1VzZXJPYmplY3QqIHAKICAgICAgICAgaWYgKCFoYW5kbGVkKQogICAg
ICAgICB7CiAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnZXRUaHJlYWRHbG9iYWxFeGVj
U3RhdGUoKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5ldyAoZXhlYykgVXNlck9iamVjdEltcChl
eGVjLT5nbG9iYWxEYXRhKCksIGdldFRocmVhZEdsb2JhbE9iamVjdCgpLT51c2VyT2JqZWN0U3Ry
dWN0dXJlKCksIHB0cik7CisgICAgICAgICAgICByZXN1bHQgPSBVc2VyT2JqZWN0SW1wOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnZXRUaHJlYWRHbG9iYWxPYmplY3QoKS0+dXNlck9iamVj
dFN0cnVjdHVyZSgpLCBwdHIpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIEpTR2x1ZUdsb2JhbE9iamVjdCogZ2V0VGhyZWFk
R2xvYgogICAgIHB0aHJlYWRfb25jZSgmZ2xvYmFsT2JqZWN0S2V5T25jZSwgaW5pdGlhbGl6ZUds
b2JhbE9iamVjdEtleSk7CiAgICAgSlNHbHVlR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU0dsdWVHbG9iYWxPYmplY3QqPihwdGhyZWFkX2dldHNwZWNpZmljKGdsb2Jh
bE9iamVjdEtleSkpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGdsb2JhbE9i
amVjdCA9IG5ldyAoZ2V0VGhyZWFkR2xvYmFsRGF0YSgpKSBKU0dsdWVHbG9iYWxPYmplY3QoKmdl
dFRocmVhZEdsb2JhbERhdGEoKSwgSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
KmdldFRocmVhZEdsb2JhbERhdGEoKSwganNOdWxsKCkpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0
ID0gSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGUoKmdldFRocmVhZEdsb2JhbERhdGEoKSwgSlNH
bHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdldFRocmVhZEdsb2JhbERhdGEoKSwg
anNOdWxsKCkpKTsKICAgICAgICAgZ2NQcm90ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgICAgIHB0
aHJlYWRfc2V0c3BlY2lmaWMoZ2xvYmFsT2JqZWN0S2V5LCBnbG9iYWxPYmplY3QpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJbXAuaAkocmV2aXNpb24gOTE4NTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiwxMSBAQAogCiBjbGFzcyBVc2VyT2JqZWN0SW1wIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgotICAgIFVzZXJPYmplY3RJbXAoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKiwgSlNVc2VyT2JqZWN0Kik7CisgICAgc3RhdGljIFVzZXJPYmplY3RJbXAqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1Vz
ZXJPYmplY3QqIHVzZXJPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8VXNlck9iamVjdEltcD4oZ2xvYmFsRGF0YS5oZWFwKSkgVXNlck9iamVjdEltcChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIHVzZXJPYmplY3QpOworICAgIH0KKyAgICAKICAgICB2aXJ0dWFs
IH5Vc2VyT2JqZWN0SW1wKCk7CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
QEAgLTY0LDYgKzY4LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBVc2VyT2Jq
ZWN0SW1wKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIEpTVXNlck9iamVjdCopOwogICAgIHN0
YXRpYyBKU1ZhbHVlIHVzZXJPYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAogICAgIEpTVXNlck9iamVjdCogZkpTVXNlck9i
amVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODU0KQorKysgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDctMjcgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUg
b3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBSZW1vdmVkIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiBvcGVyYXRvciBuZXcgaW4gSlNDZWxsLCBzbyBhbnkgZnVydGhlciB1c2Vz
CisgICAgICAgIHdpbGwgbm90IHN1Y2Nlc3NmdWxseSBsaW5rLiAgQWxzbyByZW1vdmVkIGFueSBy
ZW1haW5pbmcgdXNlcyBvZiBvcGVyYXRvciBuZXcuCisKKyAgICAgICAgKiBicmlkZ2UvYy9DUnVu
dGltZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpDSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6Q1J1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpDUnVudGltZU1ldGhvZDo6Q1J1bnRpbWVNZXRob2QpOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6Q0luc3RhbmNlOjpnZXRNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJ
bnN0YW5jZUpTQy5jcHA6CisgICAgICAgIChKYXZhSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3Qp
OgorICAgICAgICAoSmF2YVJ1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChKYXZhUnVu
dGltZU1ldGhvZDo6SmF2YVJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjpn
ZXRNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpKYXZhUnVudGltZU9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBicmlkZ2Uvb2JqYy9PYmpDUnVudGltZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6T2JqQ1J1bnRpbWVPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogYnJpZGdlL29i
amMvb2JqY19jbGFzcy5tbToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNDbGFzczo6ZmFs
bGJhY2tPYmplY3QpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06Cisg
ICAgICAgIChPYmpjSW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QpOgorICAgICAgICAoT2JqQ1J1
bnRpbWVNZXRob2Q6OmNyZWF0ZSk6CisgICAgICAgIChPYmpDUnVudGltZU1ldGhvZDo6T2JqQ1J1
bnRpbWVNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjpnZXRNZXRob2QpOgorICAgICAg
ICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpjcmVhdGUpOgorCiAyMDExLTA3LTI3ICBSb2IgQnVpcyAg
PHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGdldEludGVyc2VjdGlvbkxpc3Qo
KSwgZ2V0RW5jbG9zdXJlTGlzdCgpLCBjaGVja0ludGVyc2VjdGlvbigpIGFuZCBjaGVja0VuY2xv
c3VyZSgpIGluIFNWR1NWR0VsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X21ldGhvZC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgUnVudGltZU1ldGhvZCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsK
IHB1YmxpYzoKLSAgICBSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3Qm
KTsKKyAgICBzdGF0aWMgUnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBtZXRob2RMaXN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJ1bnRpbWVNZXRob2Q+KCpleGVjLT5o
ZWFwKCkpKSBSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBuYW1l
LCBtZXRob2RMaXN0KTsKKyAgICB9CisKICAgICBCaW5kaW5nczo6TWV0aG9kTGlzdCogbWV0aG9k
cygpIGNvbnN0IHsgcmV0dXJuIF9tZXRob2RMaXN0LmdldCgpOyB9CiAKICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKQEAgLTUxLDYgKzU1LDcgQEAgcHVibGljOgogICAgIH0KIAog
cHJvdGVjdGVkOgorICAgIFJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlz
dCYpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzOwog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvQ1J1bnRpbWVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9DUnVudGltZU9iamVjdC5o
CShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL0NSdW50aW1lT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDExIEBAIGNsYXNzIENJbnN0YW5jZTsK
IAogY2xhc3MgQ1J1bnRpbWVPYmplY3QgOiBwdWJsaWMgUnVudGltZU9iamVjdCB7CiBwdWJsaWM6
Ci0gICAgQ1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVm
UHRyPENJbnN0YW5jZT4pOworICAgIHN0YXRpYyBDUnVudGltZU9iamVjdCogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxDSW5z
dGFuY2U+IGluc3RhbmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PENSdW50aW1lT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgQ1J1bnRpbWVPYmplY3QoZXhlYywgZ2xv
YmFsT2JqZWN0LCBpbnN0YW5jZSk7CisgICAgfQorCiAgICAgdmlydHVhbCB+Q1J1bnRpbWVPYmpl
Y3QoKTsKIAogICAgIENJbnN0YW5jZSogZ2V0SW50ZXJuYWxDSW5zdGFuY2UoKSBjb25zdDsKQEAg
LTQ4LDYgKzUyLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwogICAgIH0KKworcHJpdmF0
ZToKKyAgICBDUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NS
ZWZQdHI8Q0luc3RhbmNlPik7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9jX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9j
X2luc3RhbmNlLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
Yy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBDSW5zdGFu
Y2U6On5DSW5zdGFuY2UoKSAKIAogUnVudGltZU9iamVjdCogQ0luc3RhbmNlOjpuZXdSdW50aW1l
T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBDUnVudGlt
ZU9iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOworICAgIHJl
dHVybiBDUnVudGltZU9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgdGhpcyk7CiB9CiAKIENsYXNzICpDSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKQEAg
LTExMSwxMiArMTExLDkgQEAgYm9vbCBDSW5zdGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1l
dAogCiBjbGFzcyBDUnVudGltZU1ldGhvZCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKIHB1Ymxp
YzoKLSAgICBDUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0
JiBsaXN0KQotICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2Vz
IHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIC8v
IFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgotICAg
ICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpkZXByZWNh
dGVkR2V0RE9NU3RydWN0dXJlPENSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlzdCkKKyAg
ICBzdGF0aWMgQ1J1bnRpbWVNZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpN
ZXRob2RMaXN0JiBsaXN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8p
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPENSdW50aW1lTWV0aG9kPigqZXhl
Yy0+aGVhcCgpKSkgQ1J1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBuYW1lLCBsaXN0
KTsKICAgICB9CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTEyNSw2ICsxMjIsMTYg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwor
Citwcml2YXRlOgorICAgIENSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1l
dGhvZExpc3QmIGxpc3QpCisgICAgICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkR2V0RE9NU3RydWN0
dXJlIHVzZXMgdGhlIHByb3RvdHlwZSBvZmYgb2YgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QKKyAg
ICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIHRoZSByaWdodCBnbG9iYWwgb2JqZWN0IGZvciAi
aSIuCisgICAgICAgIDogUnVudGltZU1ldGhvZChleGVjLCBnbG9iYWxPYmplY3QsIFdlYkNvcmU6
OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8Q1J1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBs
aXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CisK
IH07CiAKIGNvbnN0IENsYXNzSW5mbyBDUnVudGltZU1ldGhvZDo6c19pbmZvID0geyAiQ1J1bnRp
bWVNZXRob2QiLCAmUnVudGltZU1ldGhvZDo6c19pbmZvLCAwLCAwIH07CkBAIC0xMzIsNyArMTM5
LDcgQEAgY29uc3QgQ2xhc3NJbmZvIENSdW50aW1lTWV0aG9kOjpzX2luZm8gPQogSlNWYWx1ZSBD
SW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKIHsKICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFzcygpLT5t
ZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBD
UnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5
TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIENSdW50aW1lTWV0aG9kOjpjcmVhdGUoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3Qp
OwogfQogCiBKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywg
UnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkocmV2aXNpb24gOTE4NTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIEphdmFJbnN0YW5jZTo6fkphdmFJbnN0YW5jZSgp
CiAKIFJ1bnRpbWVPYmplY3QqIEphdmFJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSmF2YVJ1bnRpbWVPYmplY3QoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKKyAgICByZXR1cm4gSmF2YVJ1
bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRo
aXMpOwogfQogCiAjZGVmaW5lIE5VTV9MT0NBTF9SRUZTIDY0CkBAIC0xMTYsMTIgKzExNiw5IEBA
IEpTVmFsdWUgSmF2YUluc3RhbmNlOjpib29sZWFuVmFsdWUoKSBjb24KIAogY2xhc3MgSmF2YVJ1
bnRpbWVNZXRob2QgOiBwdWJsaWMgUnVudGltZU1ldGhvZCB7CiBwdWJsaWM6Ci0gICAgSmF2YVJ1
bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlzdCkKLSAg
ICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90
eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBXZSBuZWVkIHRv
IHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KLSAgICAgICAgOiBSdW50
aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0
cnVjdHVyZTxKYXZhUnVudGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAgc3RhdGlj
IEphdmFSdW50aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9k
TGlzdCYgbGlzdCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Cisg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKYXZhUnVudGltZU1ldGhvZD4oKmV4ZWMt
PmhlYXAoKSkpIEphdmFSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmFtZSwgbGlz
dCk7CiAgICAgfQogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xMzAsNiArMTI3LDE2
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
KworcHJpdmF0ZToKKyAgICBKYXZhUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdz
OjpNZXRob2RMaXN0JiBsaXN0KQorICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0
cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBm
b3IgImkiLgorICAgICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJD
b3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPEphdmFSdW50aW1lTWV0aG9kPihleGVjKSwg
bmFtZSwgbGlzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Cisg
ICAgfQorCiB9OwogCiBjb25zdCBDbGFzc0luZm8gSmF2YVJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9
IHsgIkphdmFSdW50aW1lTWV0aG9kIiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgMCwgMCB9OwpA
QCAtMTM3LDcgKzE0NCw3IEBAIGNvbnN0IENsYXNzSW5mbyBKYXZhUnVudGltZU1ldGhvZDo6c19p
bmYKIEpTVmFsdWUgSmF2YUluc3RhbmNlOjpnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0
ID0gZ2V0Q2xhc3MoKS0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0
dXJuIG5ldyAoZXhlYykgSmF2YVJ1bnRpbWVNZXRob2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworICAgIHJldHVybiBKYXZhUnVu
dGltZU1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJv
cGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIH0KIAogSlNWYWx1ZSBKYXZhSW5zdGFuY2U6Omludm9r
ZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhUnVudGltZU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2Jq
ZWN0LmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2Mv
SmF2YVJ1bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAgY2xh
c3MgSmF2YUluc3RhbmNlOwogCiBjbGFzcyBKYXZhUnVudGltZU9iamVjdCA6IHB1YmxpYyBSdW50
aW1lT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBKYXZhUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SmF2YUluc3RhbmNlPik7CisgICAgc3RhdGljIEph
dmFSdW50aW1lT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPEphdmFJbnN0YW5jZT4gamF2YUluc3QpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SmF2YVJ1bnRpbWVPYmplY3Q+KCpleGVj
LT5oZWFwKCkpKSBKYXZhUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGphdmFJbnN0
KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5KYXZhUnVudGltZU9iamVjdCgpOwogCiAgICAgSmF2
YUluc3RhbmNlKiBnZXRJbnRlcm5hbEphdmFJbnN0YW5jZSgpIGNvbnN0OwpAQCAtNDYsNiArNTAs
OSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CiAgICAgfQorCitwcml2YXRlOgorICAgIEph
dmFSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxK
YXZhSW5zdGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L09iakNSdW50aW1lT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L29iamMvT2JqQ1J1bnRpbWVPYmplY3QuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9PYmpDUnVudGltZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSwxMSBAQCBjbGFzcyBPYmpjSW5zdGFuY2U7CiAKIGNsYXNzIE9iakNSdW50aW1lT2Jq
ZWN0IDogcHVibGljIFJ1bnRpbWVPYmplY3QgewogcHVibGljOgotICAgIE9iakNSdW50aW1lT2Jq
ZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxPYmpjSW5zdGFuY2U+
KTsKKyAgICBzdGF0aWMgT2JqQ1J1bnRpbWVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8T2JqY0luc3RhbmNlPiBp
bnN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE9iakNSdW50aW1l
T2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgT2JqQ1J1bnRpbWVPYmplY3QoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbnN0KTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5PYmpDUnVudGltZU9iamVjdCgpOwog
CiAgICAgT2JqY0luc3RhbmNlKiBnZXRJbnRlcm5hbE9iakNJbnN0YW5jZSgpIGNvbnN0OwpAQCAt
NDYsNiArNTAsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CiAgICAgfQorCitwcml2YXRl
OgorICAgIE9iakNSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFz
c1JlZlB0cjxPYmpjSW5zdGFuY2U+KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9vYmpjL29iamNfY2xhc3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL29iamMvb2JqY19jbGFzcy5tbQkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9vYmpjX2NsYXNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2
LDcgQEAgSlNWYWx1ZSBPYmpjQ2xhc3M6OmZhbGxiYWNrT2JqZWN0KEV4ZWNTdAogICAgIAogICAg
IGlmICghW3RhcmdldE9iamVjdCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGludm9rZVVu
ZGVmaW5lZE1ldGhvZEZyb21XZWJTY3JpcHQ6d2l0aEFyZ3VtZW50czopXSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgT2JqY0ZhbGxiYWNrT2Jq
ZWN0SW1wKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgb2JqY0luc3RhbmNlLCBw
cm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBPYmpjRmFsbGJhY2tPYmplY3RJbXA6OmNyZWF0ZShl
eGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG9iamNJbnN0YW5jZSwgcHJvcGVydHlO
YW1lKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0
YW5jZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2lu
c3RhbmNlLm1tCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpj
L29iamNfaW5zdGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGlj
IE5TTWFwVGFibGUgKmNyZWF0ZUluc3RhbmNlV3JhcHBlcgogCiBSdW50aW1lT2JqZWN0KiBPYmpj
SW5zdGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVy
biBuZXcgKGV4ZWMpIE9iakNSdW50aW1lT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgdGhpcyk7CisgICAgcmV0dXJuIE9iakNSdW50aW1lT2JqZWN0OjpjcmVhdGUoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKIH0KIAogdm9pZCBPYmpjSW5z
dGFuY2U6OnNldEdsb2JhbEV4Y2VwdGlvbihOU1N0cmluZyogZXhjZXB0aW9uLCBKU0dsb2JhbE9i
amVjdCogZXhjZXB0aW9uRW52aXJvbm1lbnQpCkBAIC0xNzIsMTIgKzE3Miw5IEBAIGJvb2wgT2Jq
Y0luc3RhbmNlOjpzdXBwb3J0c0ludm9rZURlZmF1bHQKIAogY2xhc3MgT2JqQ1J1bnRpbWVNZXRo
b2QgOiBwdWJsaWMgUnVudGltZU1ldGhvZCB7CiBwdWJsaWM6Ci0gICAgT2JqQ1J1bnRpbWVNZXRo
b2QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlzdCkKLSAgICAgICAgLy8g
RklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBv
ZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4g
dGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KLSAgICAgICAgOiBSdW50aW1lTWV0aG9k
KGV4ZWMsIGdsb2JhbE9iamVjdCwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxP
YmpDUnVudGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAgc3RhdGljIE9iakNSdW50
aW1lTWV0aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlz
dCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmpDUnVudGltZU1ldGhvZD4oKmV4ZWMtPmhlYXAoKSkp
IE9iakNSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmFtZSwgbGlzdCk7CiAgICAg
fQogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xODYsNiArMTgzLDE1IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworcHJpdmF0
ZToKKyAgICBPYmpDUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RM
aXN0JiBsaXN0KQorICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1
c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CisgICAgICAg
IC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVjdCBmb3IgImkiLgor
ICAgICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJDb3JlOjpkZXBy
ZWNhdGVkR2V0RE9NU3RydWN0dXJlPE9iakNSdW50aW1lTWV0aG9kPihleGVjKSwgbmFtZSwgbGlz
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgfQogfTsK
IAogY29uc3QgQ2xhc3NJbmZvIE9iakNSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJPYmpDUnVu
dGltZU1ldGhvZCIsICZSdW50aW1lTWV0aG9kOjpzX2luZm8sIDAsIDAgfTsKQEAgLTE5Myw3ICsx
OTksNyBAQCBjb25zdCBDbGFzc0luZm8gT2JqQ1J1bnRpbWVNZXRob2Q6OnNfaW5mCiBKU1ZhbHVl
IE9iamNJbnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNz
KCktPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBuZXcgKGV4
ZWMpIE9iakNSdW50aW1lTWV0aG9kKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
cHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKKyAgICByZXR1cm4gT2JqQ1J1bnRpbWVNZXRob2Q6
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwg
bWV0aG9kTGlzdCk7CiB9CiAKIEpTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhl
Y1N0YXRlKiBleGVjLCBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHJldmlzaW9uIDkxODUyKQorKysg
U291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDcgKzkyLDEwIEBAIHByaXZhdGU6CiAKIGNsYXNzIE9iamNGYWxsYmFja09iamVjdElt
cCA6IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewogcHVibGljOgotICAgIE9iamNG
YWxsYmFja09iamVjdEltcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIE9iamNJbnN0YW5j
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIE9iamNGYWxs
YmFja09iamVjdEltcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgT2JqY0luc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE9iamNG
YWxsYmFja09iamVjdEltcD4oKmV4ZWMtPmhlYXAoKSkpIE9iamNGYWxsYmFja09iamVjdEltcChl
eGVjLCBnbG9iYWxPYmplY3QsIGluc3RhbmNlLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KIAogICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkBAIC0xMDksNiArMTEyLDcgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBPYmpjRmFsbGJhY2tPYmplY3RJbXAoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBPYmpjSW5zdGFuY2UqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcAkocmV2aXNp
b24gOTE4NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJhY2tPYmpl
Y3QoRXhlY1N0YXQKICAgICBpZiAobm9ybWFsLmNvbnRhaW5zKCcoJykgJiYgKGluZGV4ID0gbV9t
ZXRhT2JqZWN0LT5pbmRleE9mTWV0aG9kKG5vcm1hbCkpICE9IC0xKSB7CiAgICAgICAgIFFNZXRh
TWV0aG9kIG0gPSBtX21ldGFPYmplY3QtPm1ldGhvZChpbmRleCk7CiAgICAgICAgIGlmIChtLmFj
Y2VzcygpICE9IFFNZXRhTWV0aG9kOjpQcml2YXRlKSB7Ci0gICAgICAgICAgICBRdFJ1bnRpbWVN
ZXRhTWV0aG9kKiB2YWwgPSBuZXcgKGV4ZWMpIFF0UnVudGltZU1ldGFNZXRob2QoZXhlYywgaWRl
bnRpZmllciwgc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3QpLCBpbmRleCwgbm9ybWFsLCBm
YWxzZSk7CisgICAgICAgICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB2YWwgPSBRdFJ1bnRpbWVN
ZXRhTWV0aG9kOjpjcmVhdGUoZXhlYywgaWRlbnRpZmllciwgc3RhdGljX2Nhc3Q8UXRJbnN0YW5j
ZSo+KGluc3QpLCBpbmRleCwgbm9ybWFsLCBmYWxzZSk7CiAgICAgICAgICAgICBxdGluc3QtPm1f
bWV0aG9kcy5pbnNlcnQobmFtZSwgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PihleGVjLT5nbG9iYWxE
YXRhKCksIHF0aW5zdC0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKSwgdmFsKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdmFsOwogICAgICAgICB9CkBAIC0xMDUsNyArMTA1LDcgQEAgSlNWYWx1ZSBR
dENsYXNzOjpmYWxsYmFja09iamVjdChFeGVjU3RhdAogICAgICAgICAgICAgKytpdGVyOwogCiAg
ICAgICAgIGlmIChub3JtYWwgPT0gUUJ5dGVBcnJheTo6ZnJvbVJhd0RhdGEoc2lnbmF0dXJlLCBp
dGVyKSkgewotICAgICAgICAgICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdmFsID0gbmV3IChleGVj
KSBRdFJ1bnRpbWVNZXRhTWV0aG9kKGV4ZWMsIGlkZW50aWZpZXIsIHN0YXRpY19jYXN0PFF0SW5z
dGFuY2UqPihpbnN0KSwgaW5kZXgsIG5vcm1hbCwgZmFsc2UpOworICAgICAgICAgICAgUXRSdW50
aW1lTWV0YU1ldGhvZCogdmFsID0gUXRSdW50aW1lTWV0YU1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGlk
ZW50aWZpZXIsIHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5kZXgsIG5vcm1hbCwg
ZmFsc2UpOwogICAgICAgICAgICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0KG5hbWUsIFdyaXRl
QmFycmllcjxKU09iamVjdD4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBxdGluc3QtPmNyZWF0ZVJ1bnRp
bWVPYmplY3QoZXhlYyksIHZhbCkpOwogICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCShyZXZpc2lv
biA5MTg1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDExIEBAIFFfR0xPQkFMX1NUQVRJQyhRdEluc3RhbmNl
OjpRdFNlbmRlclN0YWMKIC8vIERlcml2ZWQgUnVudGltZU9iamVjdAogY2xhc3MgUXRSdW50aW1l
T2JqZWN0IDogcHVibGljIFJ1bnRpbWVPYmplY3QgewogcHVibGljOgotICAgIFF0UnVudGltZU9i
amVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsK
LQorICAgIHN0YXRpYyBRdFJ1bnRpbWVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZU9iamVj
dD4oKmV4ZWMtPmhlYXAoKSkpIFF0UnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIGlu
c3RhbmNlKTsKKyAgICB9CisgICAgCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CiAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
QEAgLTY5LDYgKzcyLDkgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gUnVudGltZU9iamVjdDo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNWaXNpdENoaWxkcmVuOworCitwcml2YXRlOgorICAgIFF0UnVudGltZU9iamVj
dChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsKIH07
CiAKIGNvbnN0IENsYXNzSW5mbyBRdFJ1bnRpbWVPYmplY3Q6OnNfaW5mbyA9IHsgIlF0UnVudGlt
ZU9iamVjdCIsICZSdW50aW1lT2JqZWN0OjpzX2luZm8sIDAsIDAgfTsKQEAgLTE4Miw3ICsxODgs
NyBAQCBSdW50aW1lT2JqZWN0KiBRdEluc3RhbmNlOjpuZXdSdW50aW1lT2JqCiB7CiAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBtX21ldGhvZHMuY2xlYXIoKTsK
LSAgICByZXR1cm4gbmV3IChleGVjKSBRdFJ1bnRpbWVPYmplY3QoZXhlYywgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKKyAgICByZXR1cm4gUXRSdW50aW1lT2JqZWN0OjpjcmVh
dGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKIH0KIAogdm9pZCBR
dEluc3RhbmNlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTIzOCw3
ICsyNDQsNyBAQCBKU1ZhbHVlIFF0SW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqCiAgICAg
aWYgKCFnZXRDbGFzcygpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgTWV0aG9kTGlz
dCBtZXRob2RMaXN0ID0gbV9jbGFzcy0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7
Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgUnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UnVudGlt
ZU1ldGhvZD4oZXhlYyksIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIFJ1
bnRpbWVNZXRob2Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIFdl
YkNvcmU6OmRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UnVudGltZU1ldGhvZD4oZXhlYyksIHBy
b3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CiB9CiAKIEpTVmFsdWUgUXRJbnN0YW5jZTo6aW52b2tl
TWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRpbWVNZXRob2QqKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gOTE4NTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OCw3ICsxOTgsMTAgQEAgc3RydWN0IFF0UGl4bWFwTWV0YURhdGEgewogLy8gRGVy
aXZlZCBSdW50aW1lT2JqZWN0CiBjbGFzcyBRdFBpeG1hcFJ1bnRpbWVPYmplY3QgOiBwdWJsaWMg
UnVudGltZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgUXRQaXhtYXBSdW50aW1lT2JqZWN0KEV4ZWNT
dGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxJbnN0YW5jZT4pOworICAgIHN0YXRp
YyBRdFBpeG1hcFJ1bnRpbWVPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFF0UGl4bWFwUnVudGltZU9iamVj
dD4oKmV4ZWMtPmhlYXAoKSkpIFF0UGl4bWFwUnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmpl
Y3QsIGluc3RhbmNlKTsKKyAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKIApAQCAtMjA5LDYgKzIxMiw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFJ1bnRpbWVPYmplY3Q6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbjsKKworcHJpdmF0ZToKKyAgICBRdFBpeG1h
cFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPElu
c3RhbmNlPik7CiB9OwogCiBRdFBpeG1hcFJ1bnRpbWVPYmplY3Q6OlF0UGl4bWFwUnVudGltZU9i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQpAQCAtMjMxLDcgKzIzNyw3IEBAIENsYXNzKiBRdFBp
eG1hcEluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnMKIEpTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6
Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1l
ZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVNZXRo
b2QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpkZXByZWNhdGVk
R2V0RE9NU3RydWN0dXJlPFJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBwcm9wZXJ0eU5hbWUsIG1ldGhv
ZExpc3QpOworICAgIHJldHVybiBSdW50aW1lTWV0aG9kOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFJ1
bnRpbWVNZXRob2Q+KGV4ZWMpLCBwcm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOwogfQogCiBKU1Zh
bHVlIFF0UGl4bWFwSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRp
bWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCkBAIC00MDIsNyArNDA4LDcgQEAgcmV0dXJuRW1wdHlW
YXJpYW50OgogCiBSdW50aW1lT2JqZWN0KiBRdFBpeG1hcEluc3RhbmNlOjpuZXdSdW50aW1lT2Jq
ZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gbmV3KGV4ZWMpIFF0UGl4bWFwUnVu
dGltZU9iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRoaXMpOworICAg
IHJldHVybiBRdFBpeG1hcFJ1bnRpbWVPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIHRoaXMpOwogfQogCiBKU09iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6
Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9v
dE9iamVjdD4gcm9vdCwgY29uc3QgUVZhcmlhbnQmIGRhdGEpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Niw3ICsx
NTQ2LDcgQEAgSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjb25uZWN0R2V0dAogICAgIFFX
X0RTKFF0UnVudGltZU1ldGFNZXRob2QsIHRoaXNPYmopOwogCiAgICAgaWYgKCFkLT5tX2Nvbm5l
Y3QpCi0gICAgICAgIGQtPm1fY29ubmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2Jq
LCBuZXcgKGV4ZWMpIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QoZXhlYywgaWRlbnQsIHRydWUs
IGQtPm1faW5zdGFuY2UsIGQtPm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7CisgICAgICAgIGQt
Pm1fY29ubmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kOjpjcmVhdGUoZXhlYywgaWRlbnQsIHRydWUsIGQtPm1faW5zdGFuY2UsIGQt
Pm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7CiAgICAgcmV0dXJuIGQtPm1fY29ubmVjdC5nZXQo
KTsKIH0KIApAQCAtMTU1Niw3ICsxNTU2LDcgQEAgSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9k
OjpkaXNjb25uZWN0RwogICAgIFFXX0RTKFF0UnVudGltZU1ldGFNZXRob2QsIHRoaXNPYmopOwog
CiAgICAgaWYgKCFkLT5tX2Rpc2Nvbm5lY3QpCi0gICAgICAgIGQtPm1fZGlzY29ubmVjdC5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBuZXcgKGV4ZWMpIFF0UnVudGltZUNvbm5lY3Rp
b25NZXRob2QoZXhlYywgaWRlbnQsIGZhbHNlLCBkLT5tX2luc3RhbmNlLCBkLT5tX2luZGV4LCBk
LT5tX3NpZ25hdHVyZSkpOworICAgICAgICBkLT5tX2Rpc2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpc09iaiwgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y3JlYXRlKGV4ZWMs
IGlkZW50LCBmYWxzZSwgZC0+bV9pbnN0YW5jZSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUp
KTsKICAgICByZXR1cm4gZC0+bV9kaXNjb25uZWN0LmdldCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgJKHJldmlzaW9uIDkxODUyKQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
NyBAQAogI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHQuaCIKICNp
bmNsdWRlICJXZWFrLmgiCisjaW5jbHVkZSAicXRfaW5zdGFuY2UuaCIKICNpbmNsdWRlICJydW50
aW1lX21ldGhvZC5oIgogCiAjaW5jbHVkZSA8cWJ5dGVhcnJheS5oPgpAQCAtMzMsOCArMzQsNiBA
QAogbmFtZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgQmluZGluZ3MgewogCi1jbGFzcyBRdEluc3Rh
bmNlOwotCiBjbGFzcyBRdEZpZWxkIDogcHVibGljIEZpZWxkIHsKIHB1YmxpYzoKIApAQCAtMTUx
LDcgKzE1MCwxMCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBRdFJ1bnRpbWVNZXRhTWV0aG9kIDogcHVi
bGljIFF0UnVudGltZU1ldGhvZAogewogcHVibGljOgotICAgIFF0UnVudGltZU1ldGFNZXRob2Qo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZuLCBQYXNzUmVmUHRyPFF0SW5zdGFu
Y2U+IGluc3QsIGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlLCBib29sIGFs
bG93UHJpdmF0ZSk7CisgICAgc3RhdGljIFF0UnVudGltZU1ldGFNZXRob2QqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG4sIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4g
aW5zdCwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUsIGJvb2wgYWxsb3dQ
cml2YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGlt
ZU1ldGFNZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBRdFJ1bnRpbWVNZXRhTWV0aG9kKGV4ZWMsIG4s
IGluc3QsIGluZGV4LCBzaWduYXR1cmUsIGFsbG93UHJpdmF0ZSk7CisgICAgfQogCiAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYp
OwpAQCAtMTYzLDYgKzE2NSw4IEBAIHByb3RlY3RlZDoKICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9k
RGF0YSogZF9mdW5jKCkgY29uc3Qge3JldHVybiByZWludGVycHJldF9jYXN0PFF0UnVudGltZU1l
dGFNZXRob2REYXRhKj4oZF9wdHIpO30KIAogcHJpdmF0ZToKKyAgICBRdFJ1bnRpbWVNZXRhTWV0
aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+
LCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmLCBib29sIGFsbG93UHJpdmF0ZSk7CisKICAg
ICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAgICAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqIGV4ZWMpOwogICAgIHN0
YXRpYyBKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJik7CkBAIC0xNzQsNyArMTc4LDEwIEBAIGNsYXNzIFF0Q29ubmVjdGlvbk9iamVjdDsK
IGNsYXNzIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9k
CiB7CiBwdWJsaWM6Ci0gICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJm4sIGJvb2wgaXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5z
dGFuY2U+IGluc3QsIGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlICk7Cisg
ICAgc3RhdGljIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIG4sIGJvb2wgaXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5z
dGFuY2U+IGluc3QsIGludCBpbmRleCwgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2Q+KCpleGVjLT5oZWFwKCkpKSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKGV4ZWMsIG4s
IGlzQ29ubmVjdCwgaW5zdCwgaW5kZXgsIHNpZ25hdHVyZSk7CisgICAgfQogCiAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpA
QCAtMTg0LDYgKzE5MSw4IEBAIHByb3RlY3RlZDoKICAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0
aG9kRGF0YSogZF9mdW5jKCkgY29uc3Qge3JldHVybiByZWludGVycHJldF9jYXN0PFF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2REYXRhKj4oZF9wdHIpO30KIAogcHJpdmF0ZToKKyAgICBRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBib29sIGlz
Q29ubmVjdCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFy
cmF5Jik7CisKICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAg
ICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqIGV4
ZWMpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTg1NCkKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDExLTA3LTI3ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3ZlIG9wZXJhdG9yIG5ldyBmcm9tIEpTQ2VsbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5OTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIHRoZSBpbXBsZW1lbnRhdGlv
biBvZiBvcGVyYXRvciBuZXcgaW4gSlNDZWxsLCBzbyBhbnkgZnVydGhlciB1c2VzCisgICAgICAg
IHdpbGwgbm90IHN1Y2Nlc3NmdWxseSBsaW5rLiAgQWxzbyByZW1vdmVkIGFueSByZW1haW5pbmcg
dXNlcyBvZiBvcGVyYXRvciBuZXcuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvSlNOUE1ldGhvZC5oOgorICAgICAgICAoV2ViS2l0OjpKU05QTWV0aG9kOjpjcmVhdGUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6bWV0aG9kR2V0dGVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oOgorICAgICAgICAoV2ViS2l0
OjpKU05QT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUFJ1bnRpbWVP
YmplY3RNYXA6OmdldE9yQ3JlYXRlSlNPYmplY3QpOgorCiAyMDExLTA3LTI3ICBCZW5qYW1pbiBQ
b3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdW1dLMl0gQ2xlYW4g
V0tQYWdlTG9hZGVyQ2xpZW50CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvSlNOUE1ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QTWV0aG9kLmgJKHJldmlzaW9uIDkxODUyKQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBNZXRob2Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDE4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
Ly8gQSBKU09iamVjdCB0aGF0IHdyYXBzIGFuIE5QTWV0aG9kLgogY2xhc3MgSlNOUE1ldGhvZCA6
IHB1YmxpYyBKU0M6OkludGVybmFsRnVuY3Rpb24gewogcHVibGljOgotICAgIEpTTlBNZXRob2Qo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiwgTlBJZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgSlNOUE1ldGhvZCogY3JlYXRlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgaWRlbnQsIE5QSWRlbnRpZmllciBucElkZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyAoSlNDOjphbGxvY2F0ZUNlbGw8SlNOUE1ldGhvZD4oKmV4ZWMtPmhl
YXAoKSkpIEpTTlBNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGVudCwgbnBJZGVudCk7Cisg
ICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIE5Q
SWRlbnRpZmllciBucElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX25wSWRlbnRpZmllcjsg
fQogCiBwcml2YXRlOiAgICAKKyAgICBKU05QTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIE5QSWRlbnRpZmllcik7CisK
ICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xv
dENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDkxODUy
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNyArNDU0LDcgQEAgSlNWYWx1ZSBKU05QT2Jq
ZWN0OjptZXRob2RHZXR0ZXIoRXhlY1N0YQogICAgICAgICByZXR1cm4gdGhyb3dJbnZhbGlkQWNj
ZXNzRXJyb3IoZXhlYyk7CiAKICAgICBOUElkZW50aWZpZXIgbnBJZGVudGlmaWVyID0gbnBJZGVu
dGlmaWVyRnJvbUlkZW50aWZpZXIobWV0aG9kTmFtZSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykg
SlNOUE1ldGhvZChleGVjLCB0aGlzT2JqLT5nbG9iYWxPYmplY3QoKSwgbWV0aG9kTmFtZSwgbnBJ
ZGVudGlmaWVyKTsKKyAgICByZXR1cm4gSlNOUE1ldGhvZDo6Y3JlYXRlKGV4ZWMsIHRoaXNPYmot
Pmdsb2JhbE9iamVjdCgpLCBtZXRob2ROYW1lLCBucElkZW50aWZpZXIpOwogfQogCiBKU09iamVj
dCogSlNOUE9iamVjdDo6dGhyb3dJbnZhbGlkQWNjZXNzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvSlNOUE9iamVjdC5oCShyZXZpc2lvbiA5MTg1MikKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDcgKzM5LDExIEBAIGNsYXNzIE5QUnVudGltZU9iamVjdE1hcDsKIAogY2xhc3MgSlNOUE9i
amVjdCA6IHB1YmxpYyBKU0M6OkpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CiBwdWJsaWM6Ci0g
ICAgSlNOUE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgTlBSdW50aW1lT2JqZWN0TWFwKiBv
YmplY3RNYXAsIE5QT2JqZWN0KiBucE9iamVjdCk7CisgICAgc3RhdGljIEpTTlBPYmplY3QqIGNy
ZWF0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5QUnVudGltZU9iamVjdE1h
cCogb2JqZWN0TWFwLCBOUE9iamVjdCogbnBPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IChKU0M6OmFsbG9jYXRlQ2VsbDxKU05QT2JqZWN0PihnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS5oZWFwKSkgSlNOUE9iamVjdChnbG9iYWxPYmplY3QsIG9iamVjdE1hcCwgbnBPYmplY3Qp
OworICAgIH0KKwogICAgIH5KU05QT2JqZWN0KCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsK
QEAgLTUzLDYgKzU3LDggQEAgcHVibGljOgogICAgIE5QT2JqZWN0KiBucE9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbnBPYmplY3Q7IH0KIAogcHJpdmF0ZToKKyAgICBKU05QT2JqZWN0KEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBOUFJ1bnRpbWVPYmplY3RNYXAqLCBOUE9iamVjdCopOworCiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CiAgICAgCiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBSdW50aW1lT2JqZWN0TWFwLmNwcAkocmV2aXNp
b24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TlBSdW50aW1lT2JqZWN0TWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBK
U09iamVjdCogTlBSdW50aW1lT2JqZWN0TWFwOjpnZXRPckNyZWF0CiAgICAgaWYgKEpTQzo6V2Vh
azxKU05QT2JqZWN0PiBqc05QT2JqZWN0ID0gbV9qc05QT2JqZWN0cy5nZXQobnBPYmplY3QpKQog
ICAgICAgICByZXR1cm4ganNOUE9iamVjdC5nZXQoKTsKIAotICAgIEpTTlBPYmplY3QqIGpzTlBP
YmplY3QgPSBuZXcgKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSkgSlNOUE9iamVjdChnbG9i
YWxPYmplY3QsIHRoaXMsIG5wT2JqZWN0KTsKKyAgICBKU05QT2JqZWN0KiBqc05QT2JqZWN0ID0g
SlNOUE9iamVjdDo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdGhpcywgbnBPYmplY3QpOwogICAgIG1f
anNOUE9iamVjdHMuc2V0KG5wT2JqZWN0LCBKU0M6OldlYWs8SlNOUE9iamVjdD4oZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIGpzTlBPYmplY3QsIHRoaXMsIG5wT2JqZWN0KSk7CiAKICAgICBy
ZXR1cm4ganNOUE9iamVjdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxODU0KQor
KysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTEtMDctMjcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgb3BlcmF0b3IgbmV3IGZyb20gSlNDZWxsCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NDk5OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgdGhlIGltcGxlbWVu
dGF0aW9uIG9mIG9wZXJhdG9yIG5ldyBpbiBKU0NlbGwsIHNvIGFueSBmdXJ0aGVyIHVzZXMKKyAg
ICAgICAgd2lsbCBub3Qgc3VjY2Vzc2Z1bGx5IGxpbmsuICBBbHNvIHJlbW92ZWQgYW55IHJlbWFp
bmluZyB1c2VzIG9mIG9wZXJhdG9yIG5ldy4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL1By
b3h5SW5zdGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlByb3h5SW5zdGFuY2U6Om5ld1J1bnRp
bWVPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpQcm94eVJ1bnRpbWVNZXRob2Q6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlByb3h5UnVudGltZU1ldGhvZDo6UHJveHlSdW50aW1lTWV0aG9k
KToKKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6Z2V0TWV0aG9kKToKKyAgICAgICAg
KiBQbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QuaDoKKyAgICAgICAgKFdlYktpdDo6
UHJveHlSdW50aW1lT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZS5tbToKKyAgICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1lIHNjb3BlQ2hh
aW5dKToKKwogMjAxMS0wNy0yNiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS85ODQyODg5PiBBZGQgYSBnZW5lcmljIHBpY3RvZ3JhcGgg
Zm9udCBmYW1pbHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5
SW5zdGFuY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvUHJveHlJbnN0YW5jZS5tbQkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
NyArMTM0LDcgQEAgUHJveHlJbnN0YW5jZTo6flByb3h5SW5zdGFuY2UoKQogICAgIAogUnVudGlt
ZU9iamVjdCogUHJveHlJbnN0YW5jZTo6bmV3UnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgUHJveHlSdW50aW1lT2JqZWN0KGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CisgICAgcmV0dXJuIFByb3h5UnVudGltZU9i
amVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgdGhpcyk7CiB9
CiAKIEpTQzo6QmluZGluZ3M6OkNsYXNzKiBQcm94eUluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0
CkBAIC0xNzksMTIgKzE3OSw5IEBAIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlKEpTQzo6
RXhlY1MKIAogY2xhc3MgUHJveHlSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2Qg
ewogcHVibGljOgotICAgIFByb3h5UnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdz
OjpNZXRob2RMaXN0JiBsaXN0KQotICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERPTVN0
cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0
Ci0gICAgICAgIC8vIGV4ZWMtZ2xvYmFsRGF0YSgpIGlzIGFsc28gbGlrZWx5IHdyb25nLgotICAg
ICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgZ2xvYmFsT2JqZWN0LCBkZXByZWNhdGVkR2V0RE9N
U3RydWN0dXJlPFByb3h5UnVudGltZU1ldGhvZD4oZXhlYyksIG5hbWUsIGxpc3QpCisgICAgc3Rh
dGljIFByb3h5UnVudGltZU1ldGhvZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgQmluZGluZ3M6Ok1l
dGhvZExpc3QmIGxpc3QpCiAgICAgewotICAgICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UHJveHlSdW50aW1lTWV0aG9kPigq
ZXhlYy0+aGVhcCgpKSkgUHJveHlSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgbmFt
ZSwgbGlzdCk7CiAgICAgfQogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0xOTMsNiAr
MTkwLDE1IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKKworcHJpdmF0ZToKKyAgICBQcm94eVJ1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBC
aW5kaW5nczo6TWV0aG9kTGlzdCYgbGlzdCkKKyAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRH
ZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFs
IG9iamVjdAorICAgICAgICAvLyBleGVjLWdsb2JhbERhdGEoKSBpcyBhbHNvIGxpa2VseSB3cm9u
Zy4KKyAgICAgICAgOiBSdW50aW1lTWV0aG9kKGV4ZWMsIGdsb2JhbE9iamVjdCwgZGVwcmVjYXRl
ZEdldERPTVN0cnVjdHVyZTxQcm94eVJ1bnRpbWVNZXRob2Q+KGV4ZWMpLCBuYW1lLCBsaXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICB9CiB9OwogCiBj
b25zdCBDbGFzc0luZm8gUHJveHlSdW50aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJQcm94eVJ1bnRp
bWVNZXRob2QiLCAmUnVudGltZU1ldGhvZDo6c19pbmZvLCAwLCAwIH07CkBAIC0yMDAsNyArMjA2
LDcgQEAgY29uc3QgQ2xhc3NJbmZvIFByb3h5UnVudGltZU1ldGhvZDo6c19pbgogSlNWYWx1ZSBQ
cm94eUluc3RhbmNlOjpnZXRNZXRob2QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewogICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9
IGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwotICAgIHJldHVy
biBuZXcgKGV4ZWMpIFByb3h5UnVudGltZU1ldGhvZChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgcmV0dXJuIFByb3h5UnVu
dGltZU1ldGhvZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgcHJv
cGVydHlOYW1lLCBtZXRob2RMaXN0KTsKIH0KIAogSlNWYWx1ZSBQcm94eUluc3RhbmNlOjppbnZv
a2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0M6OlJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRo
b2QpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Q
cm94eVJ1bnRpbWVPYmplY3QuaAkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9QbHVnaW5zL0hvc3RlZC9Qcm94eVJ1bnRpbWVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsMTEgQEAgY2xhc3MgUHJveHlJbnN0YW5jZTsKIAogY2xhc3MgUHJveHlSdW50aW1l
T2JqZWN0IDogcHVibGljIEpTQzo6QmluZGluZ3M6OlJ1bnRpbWVPYmplY3QgewogcHVibGljOgot
ICAgIFByb3h5UnVudGltZU9iamVjdChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBQYXNzUmVmUHRyPFByb3h5SW5zdGFuY2U+KTsKKyAgICBzdGF0aWMgUHJveHlSdW50aW1l
T2JqZWN0KiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxQcm94eUluc3RhbmNlPiBpbnN0YW5jZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgKEpTQzo6YWxsb2NhdGVDZWxsPFByb3h5UnVudGltZU9iamVj
dD4oKmV4ZWMtPmhlYXAoKSkpIFByb3h5UnVudGltZU9iamVjdChleGVjLCBnbG9iYWxPYmplY3Qs
IGluc3RhbmNlKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5Qcm94eVJ1bnRpbWVPYmplY3QoKTsK
IAogICAgIFByb3h5SW5zdGFuY2UqIGdldEludGVybmFsUHJveHlJbnN0YW5jZSgpIGNvbnN0OwpA
QCAtNDcsNiArNTEsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvIHNfaW5mbzsKK3ByaXZhdGU6CisgICAgUHJveHlSdW50aW1lT2JqZWN0KEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8UHJveHlJbnN0YW5j
ZT4pOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRE
ZWJ1Z0RlbGVnYXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQkocmV2aXNpb24gOTE4NTIpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE4Niw3ICsxODYsNyBAQCAtIChOU0FycmF5ICopc2NvcGVDaGFpbgogICAgIGZvciAoU2Nv
cGVDaGFpbkl0ZXJhdG9yIGl0ID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpdC0+Z2V0KCk7CiAgICAgICAgIGlmIChv
YmplY3QtPmlzQWN0aXZhdGlvbk9iamVjdCgpKQotICAgICAgICAgICAgb2JqZWN0ID0gbmV3IChz
Y29wZUNoYWluLT5nbG9iYWxEYXRhKSBEZWJ1Z2dlckFjdGl2YXRpb24oKnNjb3BlQ2hhaW4tPmds
b2JhbERhdGEsIG9iamVjdCk7CisgICAgICAgICAgICBvYmplY3QgPSBEZWJ1Z2dlckFjdGl2YXRp
b246OmNyZWF0ZSgqc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgb2JqZWN0KTsKICAgICAgICAgW3Nj
b3BlcyBhZGRPYmplY3Q6W3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOm9iamVjdF1dOwog
ICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>