<?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>88420</bug_id>
          
          <creation_ts>2012-06-06 08:32:59 -0700</creation_ts>
          <short_desc>Web Inspector: Provide source data for all known rule types in CSSParser, except &quot;keyframe&quot; and &quot;region&quot;</short_desc>
          <delta_ts>2012-06-29 05:06:30 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>88646</dependson>
          <blocked>88408</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>hyatt</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>koivisto</cc>
    
    <cc>loislo</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mitz</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>642497</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-06 08:32:59 -0700</bug_when>
    <thetext>This patch does not intend to refactor the protocol, so some new code will be in an intermediate state to mask the actual rule tree structure (along with non-style rules) when pushing it over the WIP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642597</commentid>
    <comment_count>1</comment_count>
      <attachid>146060</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-06 10:40:38 -0700</bug_when>
    <thetext>Created attachment 146060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642599</commentid>
    <comment_count>2</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-06 10:45:19 -0700</bug_when>
    <thetext>Need to mention that Tools/Scripts/run-perf-tests Parser/css-parser-yui.html didn&apos;t show any impact of this change at all...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643424</commentid>
    <comment_count>3</comment_count>
      <attachid>146060</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-06-07 04:53:00 -0700</bug_when>
    <thetext>Comment on attachment 146060
Patch

Please split this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643484</commentid>
    <comment_count>4</comment_count>
      <attachid>146272</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-07 06:19:20 -0700</bug_when>
    <thetext>Created attachment 146272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643522</commentid>
    <comment_count>5</comment_count>
      <attachid>146272</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-06-07 07:10:54 -0700</bug_when>
    <thetext>Comment on attachment 146272
Patch

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

&gt; Source/WebCore/css/CSSParser.cpp:305
&gt; +void CSSParser::parseSheet(StyleSheetContents* sheet, const String&amp; string, int startLineNumber, Vector&lt;RefPtr&lt;CSSRuleSourceData&gt; &gt;* ruleSourceDataResult)

You could use RuleSourceDataList here.

&gt; Source/WebCore/css/CSSParser.h:317
&gt; +    Vector&lt;SourceRange&gt; m_ruleBodyRangeStack;

Why do you need two stacks?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643531</commentid>
    <comment_count>6</comment_count>
      <attachid>146286</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-07 07:18:57 -0700</bug_when>
    <thetext>Created attachment 146286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643635</commentid>
    <comment_count>7</comment_count>
      <attachid>146312</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-07 09:49:17 -0700</bug_when>
    <thetext>Created attachment 146312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656524</commentid>
    <comment_count>8</comment_count>
      <attachid>149281</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-25 06:32:32 -0700</bug_when>
    <thetext>Created attachment 149281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656583</commentid>
    <comment_count>9</comment_count>
      <attachid>149281</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-06-25 08:28:48 -0700</bug_when>
    <thetext>Comment on attachment 149281
Patch

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

&gt; Source/WebCore/css/CSSGrammar.y:492
&gt; +  | before_import_rule IMPORT_SYM error &apos;;&apos; {

I don&apos;t think you need to gather any data for errors. This change should be reverted.

&gt; Source/WebCore/css/CSSGrammar.y:496
&gt; +  | before_import_rule IMPORT_SYM error invalid_block {

Ditto, should be reverted.

&gt; Source/WebCore/css/CSSGrammar.y:684
&gt; +        CSSParser* p = static_cast&lt;CSSParser*&gt;(parser);

This should probably be in the end of keyframes action.

&gt; Source/WebCore/css/CSSGrammar.y:685
&gt; +        if (p-&gt;isExtractingSourceData())

I would move this check inside the method.

&gt; Source/WebCore/css/CSSGrammar.y:744
&gt; +    | before_page_rule PAGE_SYM error invalid_block {

Ditto, should be reverted.

&gt; Source/WebCore/css/CSSGrammar.y:748
&gt; +    | before_page_rule PAGE_SYM error &apos;;&apos; {

Ditto, should be reverted.

&gt; Source/WebCore/css/CSSGrammar.y:856
&gt; +    | before_font_face_rule FONT_FACE_SYM error invalid_block {

Ditto, should be reverted.

&gt; Source/WebCore/css/CSSGrammar.y:860
&gt; +    | before_font_face_rule FONT_FACE_SYM error &apos;;&apos; {

Ditto, should be reverted.

&gt; Source/WebCore/css/CSSParser.cpp:1156
&gt; +    RefPtr&lt;CSSRuleSourceData&gt; ruleSourceDataRef = ruleSourceData;

prpRuleSourceData / ruleSourceData?

&gt; Source/WebCore/css/CSSParser.cpp:1175
&gt; +    if (ruleSourceDataRef) {

I would add an assertion that stack size is correct here.

&gt; Source/WebCore/css/CSSParser.cpp:9375
&gt; +        ASSERT(!m_currentRuleDataStack-&gt;isEmpty());

We can probably extract these 4-5 lines to one method.

&gt; Source/WebCore/css/CSSParser.cpp:9681
&gt; +void CSSParser::markAtRuleHeaderStart(CSSRuleSourceData::Type ruleType)

Looks like markStyleRuleHeaderStart and markAtRuleHeaderStart are identical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656607</commentid>
    <comment_count>10</comment_count>
      <attachid>149301</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-25 09:05:55 -0700</bug_when>
    <thetext>Created attachment 149301
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656644</commentid>
    <comment_count>11</comment_count>
      <attachid>149301</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-06-25 09:52:04 -0700</bug_when>
    <thetext>Comment on attachment 149301
Patch

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

&gt; Source/WebCore/css/CSSParser.cpp:9339
&gt; +void CSSParser::updateTopRuleBodyEnd()

Could this be replaced by markRuleBodyEnd?

&gt; Source/WebCore/css/CSSParser.cpp:9344
&gt; +    if (m_currentRuleDataStack-&gt;isEmpty())

The stack is never empty at this point.

&gt; Source/WebCore/css/CSSParser.cpp:9350
&gt; +    if (!data)

You are already asserting data is not null on the line above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660350</commentid>
    <comment_count>12</comment_count>
      <attachid>150133</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-29 04:08:56 -0700</bug_when>
    <thetext>Created attachment 150133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660359</commentid>
    <comment_count>13</comment_count>
      <attachid>150133</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-06-29 04:25:49 -0700</bug_when>
    <thetext>Comment on attachment 150133
Patch

This looks good to me now inspector-wise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660367</commentid>
    <comment_count>14</comment_count>
      <attachid>150133</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-29 04:43:40 -0700</bug_when>
    <thetext>Comment on attachment 150133
Patch

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

r=me

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests, as there is no client-visible behavior change. Existing Inspector tests will be modified
&gt; +        to test the new data provided, along with the necessary Inspector plumbing.

You could add a word about performance (which I hear progresses)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660368</commentid>
    <comment_count>15</comment_count>
      <attachid>150133</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-06-29 04:45:26 -0700</bug_when>
    <thetext>Comment on attachment 150133
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        to test the new data provided, along with the necessary Inspector plumbing.
&gt; 
&gt; You could add a word about performance (which I hear progresses)

And some motivation too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660380</commentid>
    <comment_count>16</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-29 05:06:30 -0700</bug_when>
    <thetext>Committed r121551: &lt;http://trac.webkit.org/changeset/121551&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146060</attachid>
            <date>2012-06-06 10:40:38 -0700</date>
            <delta_ts>2012-06-07 06:19:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88420-20120606214035.patch</filename>
            <type>text/plain</type>
            <size>90899</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRmOWIwYWM1NGE5Nzc1
OGJkM2Y0ODdmMGU2ZWRmYjYxMDY5ZGYxMi4uMzU2OWU1OWYwYTVlNDZiYzIzMTBlOTNmZDYyMDZk
ZGVjNmJmZmIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MyBAQAorMjAxMi0wNi0wNiAgQWxl
eGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IFByb3ZpZGUgc291cmNlIGRhdGEgZm9yIGFsbCBrbm93biBydWxlIHR5cGVzIGluIENT
U1BhcnNlciwgZXhjZXB0ICJrZXlmcmFtZSIgYW5kICJyZWdpb24iCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODQyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgdGhlcmUgaXMg
bm8gYmVoYXZpb3IgY2hhbmdlIHZpc2libGUgdG8gdGhlIGNsaWVudHMuIEV4aXN0aW5nIEluc3Bl
Y3RvciB0ZXN0cyB3aWxsIGJlIG1vZGlmaWVkIHNvb24KKyAgICAgICAgdG8gdGVzdCB0aGUgbmV3
IGRhdGEgcHJvdmlkZWQsIGFsb25nIHdpdGggdGhlIG5lY2Vzc2FyeSBJbnNwZWN0b3IgcGx1bWJp
bmcuCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICAqIGNzcy9DU1NNZWRp
YVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxlOjpyZWF0dGFjaCk6IENo
ZWNrIGZvciBtZWRpYVF1ZXJpZXMoKSB2YWxpZGl0eSBiZWZvcmUgcmVhdHRhY2hpbmcuCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6IFVubGVzcyBleHBsaWNpdGx5IHNwZWNpZmllZCBiZWxv
dywgdGhlIG1ldGhvZCBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIHRoZSBleHRlbnNpb24gb2YgdGhl
CisgICAgICAgIHNvdXJjZS1iYXNlZCBDU1MgbW9kZWwgcHJvdmlkZWQgYnkgdGhlIHBhcnNlci4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Q1NTUGFyc2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6c2V0dXBQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZVNoZWV0KTogRmlsbCBhIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXN0IG9mIGRhdGEgZW50
cmllcy4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbik6IEFj
Y2VwdCBhIENTU1J1bGVTb3VyY2VEYXRhIGZvciBmaWxsaW5nLCBzaW5jZSBpdCBub3cgY29udGFp
bnMKKyAgICAgICAgdGhlIHJlbGF0ZWQgc3R5bGUgc291cmNlIHJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKTogQ3JlYXRlIENTU01lZGlhUnVsZSBldmVuIGlmIG1l
ZGlhIGFuZCBydWxlcyBhcmUgZW1wdHksCisgICAgICAgIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0
aCBNb3ppbGxhLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGROZXdSdWxlVG9Tb3Vy
Y2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
Ojp1cGRhdGVUb3BSdWxlQm9keUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNy
ZWF0ZUtleWZyYW1lc1J1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVT
dHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVJlZ2lvblJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKTogUHJvY2VzcyBpbnZh
bGlkIENTUyBwcm9wZXJ0aWVzIHRvIHByb3ZpZGUgY29ycmVjdCBzb3VyY2UgY29kZSBkYXRhIGZv
ciB0aGVtLgorICAgICAgICBUaGlzIHdhcyBtb3ZlZCBmcm9tIEluc3BlY3RvclN0eWxlU2hlZXQu
Y3BwIChhcyB0aGlzIG1ldGhvZCBhY3R1YWxseSBiZWxvbmdzIGluIHRoZSBwYXJzZXIpLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrU3R5bGVSdWxlSGVhZGVyU3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrQXRSdWxlSGVhZGVyU3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUnVsZUhlYWRlckVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6bWFya1J1bGVCb2R5RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
bWFya1Byb3BlcnR5RW5kKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChD
U1NQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldFJ1bGVIZWFkZXJS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBvcFJ1bGVCb2R5UmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldFByb3BlcnR5UmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwb3BSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmlzRXh0cmFjdGluZ1NvdXJjZURhdGEpOgorICAgICAgICAqIGNzcy9DU1NQcm9w
ZXJ0eVNvdXJjZURhdGEuaDogRXh0ZW5kIHRoZSBtb2RlbCB0byBoYW5kbGUgbW9yZSB0eXBlcyBv
ZiBydWxlcyBhbmQgdGhlaXIgY29udGFpbm1lbnRzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKENTU1J1
bGVTb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpjcmVh
dGVVbmtub3duKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpDU1NSdWxl
U291cmNlRGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6IEZvbGxvdyB0aGUgSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAgQVBJIGNoYW5nZXMKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNT
U0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChQYXJz
ZWRTdHlsZVNoZWV0KToKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRh
QXQpOgorICAgICAgICAoV2ViQ29yZTo6YXNDU1NSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFJ1bGVWaXNpdG9yKTogQSBnZW5lcmljIHdheSBvZiB0aGUgQ1NTIHJ1bGUg
dHJlZSB0cmF2ZXJzYWwuCisgICAgICAgIChXZWJDb3JlOjpSdWxlVmlzaXRvcjo6Zm9yUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZVZpc2l0b3I6On5SdWxlVmlzaXRvcik6CisgICAgICAg
IChJbnNwZWN0b3JSdWxlVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UnVsZVRyZWVCdWlsZGVyOjpJbnNwZWN0b3JSdWxlVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUnVsZVRyZWVCdWlsZGVyOjp+SW5zcGVjdG9yUnVsZVRyZWVCdWlsZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bGVUcmVlQnVpbGRlcjo6d2lsbFZpc2l0
TWVkaWFSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bGVUcmVlQnVpbGRlcjo6
ZGlkVmlzaXRNZWRpYVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVsZVRyZWVC
dWlsZGVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxlVHJlZUJ1aWxk
ZXI6OnZpc2l0Q29tbW9uKToKKyAgICAgICAgKFJ1bGVQYXRoQnVpbGRlcik6IEJ1aWxkcyBydWxl
IHBhdGggYXMgYSB2ZWN0b3Igb2YgaW50ZWdlcnMuCisgICAgICAgIChXZWJDb3JlOjpSdWxlUGF0
aEJ1aWxkZXI6OlJ1bGVQYXRoQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlUGF0aEJ1
aWxkZXI6On5SdWxlUGF0aEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVBhdGhCdWls
ZGVyOjp3aWxsVmlzaXRNZWRpYVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVBhdGhCdWls
ZGVyOjpkaWRWaXNpdE1lZGlhUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlUGF0aEJ1aWxk
ZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVQYXRoQnVpbGRlcjo6Zm91bmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzdHlsZVRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVsZTo6SW5zcGVjdG9yUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSdWxlOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
eWxlU2hlZXQ6OnNldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVl
dDo6cnVsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6
OnNldFJ1bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
OjpkZWxldGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1
bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVl
dDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpydWxlT3JTdHlsZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhRm9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVQYXRoQnlTdHlsZUludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVQYXRoQnlTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlUnVsZVRyZWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaW5kUnVsZUlkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmFwcGVuZFRvUnVsZUFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkVHJlZUZvclJ1bGVMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmVu
c3VyZVBhcnNlZERhdGFSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGU6Omluc3BlY3RvclN0eWxlRm9ySWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJh
bmdlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6OmZvcklubGlu
ZVN0eWxlKToKKyAgICAgICAgKEluc3BlY3RvckNTU0lkKTogTW9kaWZpZWQgdG8gaG9sZCBhIENT
UyBydWxlL3N0eWxlIHBhdGggcmF0aGVyIHRoYW4gYSBzaW5nbGUgKG9yZGluYWwpIGludGVnZXIu
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6Zm9yUGFyZW50UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6SW5zcGVjdG9yQ1NTSWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6OnBhdGhBdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDU1NJZDo6bGFzdFBhdGhDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTSWQ6OnBhdGhMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6
OmFzUHJvdG9jb2xWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3JTdHlsZSk6CisgICAgICAgIChJ
bnNwZWN0b3JSdWxlKTogVGhpcyBpcyBpbnRlbmRlZCB0byBob2xkIG1ldGFkYXRhIGZvciBDU1Mg
cnVsZXMuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVsZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUnVsZTo6Y3NzUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxlOjpzdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxlOjphcHBlbmRDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxlOjpzdHlsZVJ1bGVDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSdWxlOjpjYW5IYXZlQ2hpbGRSdWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JSdWxlOjpjaGlsZFJ1bGVMaXN0KToKKyAgICAgICAgKEluc3BlY3RvclN0
eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnN0eWxl
Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjpydWxlU291cmNlRGF0YUZvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnJ1bGVQYXRoQnlTdHlsZSk6CisgICAgICAgIChJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUpOgorCiAyMDEyLTA2LTA2ICBUb3IgQXJuZSBWZXN0
YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KIAogICAgICAgICBGaXggYSBmZXcgc3Bl
bGxpbmcgbWlzdGFrZXMgaW4gSWNvbkRhdGFiYXNlIGxvZ2dpbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1h
ci55CmluZGV4IDllZGRjMTdhMTA5YTQ1YTVhMGI5M2QwZWJmMDhkNWQ5NTA2YTM1YjkuLjc5YTIz
MjZkNmM4NzFiMDhlNTI1Njk1MDE3ZjAyOGQ0YTQ3NDBhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueQpAQCAtMzgyLDYgKzM4Miw4IEBAIGNoYXJzZXQ6CiAgICAgIENTU1BhcnNlciogcCA9IHN0
YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CiAgICAgIGlmIChwLT5tX3N0eWxlU2hlZXQp
CiAgICAgICAgICBwLT5tX3N0eWxlU2hlZXQtPnBhcnNlclNldEVuY29kaW5nRnJvbUNoYXJzZXRS
dWxlKCQzKTsKKyAgICAgaWYgKHAtPmlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSAmJiBwLT5tX2N1
cnJlbnRSdWxlRGF0YVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgIHAtPm1fcnVsZVNvdXJjZURh
dGFSZXN1bHQtPmFwcGVuZChDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bigpKTsKICAg
ICAgJCQgPSAwOwogICB9CiAgIHwgQ0hBUlNFVF9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CkBA
IC00MTAsMTUgKzQxMiwyNSBAQCBydWxlX2xpc3Q6CiAgOwogCiB2YWxpZF9ydWxlOgotICAgIGJl
Zm9yZV9ydWxlc2V0IHJ1bGVzZXQgeworICAgIGJlZm9yZV9zdHlsZV9ydWxlIHJ1bGVzZXQgewor
ICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgfCBiZWZvcmVfbWVkaWFfcnVsZSBtZWRpYSB7Cisg
ICAgICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9yZV9wYWdlX3J1bGUgcGFnZSB7CisgICAg
ICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9yZV9mb250X2ZhY2VfcnVsZSBmb250X2ZhY2Ug
eworICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgfCBiZWZvcmVfa2V5ZnJhbWVzX3J1bGUga2V5
ZnJhbWVzIHsKICAgICAgICAgJCQgPSAkMjsKICAgICB9Ci0gIHwgbWVkaWEKLSAgfCBwYWdlCi0g
IHwgZm9udF9mYWNlCi0gIHwga2V5ZnJhbWVzCiAgIHwgbmFtZXNwYWNlCi0gIHwgaW1wb3J0Cisg
IHwgYmVmb3JlX2ltcG9ydF9ydWxlIGltcG9ydCB7CisgICAgICAgICQkID0gJDI7CisgICAgfQog
ICB8IHJlZ2lvbgogICA7CiAKQEAgLTQ0NCwxMCArNDU2LDE4IEBAIGJsb2NrX3J1bGVfbGlzdDoK
ICAgOwogCiBibG9ja192YWxpZF9ydWxlOgotICAgIHJ1bGVzZXQKLSAgfCBwYWdlCi0gIHwgZm9u
dF9mYWNlCi0gIHwga2V5ZnJhbWVzCisgICAgYmVmb3JlX3N0eWxlX3J1bGUgcnVsZXNldCB7Cisg
ICAgICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9yZV9wYWdlX3J1bGUgcGFnZSB7CisgICAg
ICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9yZV9mb250X2ZhY2VfcnVsZSBmb250X2ZhY2Ug
eworICAgICAgICAkJCA9ICQyOworICAgIH0KKyAgfCBiZWZvcmVfa2V5ZnJhbWVzX3J1bGUga2V5
ZnJhbWVzIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CiAgIDsKIAogYmxvY2tfcnVsZToKQEAg
LTQ1NSwyNiArNDc1LDQwIEBAIGJsb2NrX3J1bGU6CiAgIHwgaW52YWxpZF9ydWxlCiAgIHwgaW52
YWxpZF9hdAogICB8IG5hbWVzcGFjZQotICB8IGltcG9ydAotICB8IG1lZGlhCisgIHwgYmVmb3Jl
X2ltcG9ydF9ydWxlIGltcG9ydCB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9y
ZV9tZWRpYV9ydWxlIG1lZGlhIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CiAgIDsKIAorYXRf
aW1wb3J0X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2U6CisgICAgbWF5YmVfc3BhY2UgeworICAgICAg
ICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAg
ICBwLT5tYXJrUnVsZUhlYWRlckVuZCgpOworICAgICAgICBwLT5tYXJrUnVsZUJvZHlTdGFydCgp
OworICAgIH0KKyAgICA7CiAKIGltcG9ydDoKLSAgICBJTVBPUlRfU1lNIG1heWJlX3NwYWNlIHN0
cmluZ19vcl91cmkgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCAnOycgeworICAgIElNUE9S
VF9TWU0gYXRfaW1wb3J0X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXli
ZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0ICc7JyB7CiAgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8
Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlSW1wb3J0UnVsZSgkMywgJDUpOwogICAgIH0KLSAg
fCBJTVBPUlRfU1lNIG1heWJlX3NwYWNlIHN0cmluZ19vcl91cmkgbWF5YmVfc3BhY2UgbWF5YmVf
bWVkaWFfbGlzdCBUT0tFTl9FT0YgeworICB8IElNUE9SVF9TWU0gYXRfaW1wb3J0X2hlYWRlcl9l
bmRfbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0
IFRPS0VOX0VPRiB7CiAgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2Vy
KS0+Y3JlYXRlSW1wb3J0UnVsZSgkMywgJDUpOwogICAgIH0KLSAgfCBJTVBPUlRfU1lNIG1heWJl
X3NwYWNlIHN0cmluZ19vcl91cmkgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCBpbnZhbGlk
X2Jsb2NrIHsKKyAgfCBJTVBPUlRfU1lNIGF0X2ltcG9ydF9oZWFkZXJfZW5kX21heWJlX3NwYWNl
IHN0cmluZ19vcl91cmkgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCBpbnZhbGlkX2Jsb2Nr
IHsKICAgICAgICAgJCQgPSAwOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KICAgfCBJTVBPUlRfU1lNIGVycm9yICc7JyB7CiAg
ICAgICAgICQkID0gMDsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+
cG9wUnVsZURhdGEoKTsKICAgICB9CiAgIHwgSU1QT1JUX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2Nr
IHsKICAgICAgICAgJCQgPSAwOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KICAgOwogCkBAIC01OTksMTUgKzYzMywzNiBAQCBt
ZWRpYV9saXN0OgogICAgIH0KICAgICA7CiAKK2F0X3J1bGVfYm9keV9zdGFydDoKKyAgICAvKiBl
bXB0eSAqLyB7CisgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+
KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtSdWxlQm9keVN0YXJ0KCk7CisgICAgfQorICAgIDsK
KworYXRfbm9uX2RlY2xhcmF0aW9uX2JvZHlfc3RhcnQ6CisgICAgLyogZW1wdHkgKi8geworICAg
ICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAg
ICAgICBwLT5tYXJrUnVsZUJvZHlTdGFydChmYWxzZSk7CisgICAgfQorICAgIDsKKworYXRfbWVk
aWFfaGVhZGVyX2VuZF9tYXliZV9zcGFjZToKKyAgICBtYXliZV9zcGFjZSB7CisgICAgICAgIHN0
YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtSdWxlSGVhZGVyRW5kKCk7CisgICAg
fQorICAgIDsKKwogbWVkaWE6Ci0gICAgTUVESUFfU1lNIG1heWJlX3NwYWNlIG1lZGlhX2xpc3Qg
J3snIG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKLSAgICAgICAgJCQg
PSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUoJDMsICQ2
KTsKKyAgICBNRURJQV9TWU0gbWF5YmVfc3BhY2UgbWVkaWFfbGlzdCBhdF9ydWxlX2hlYWRlcl9l
bmQgJ3snIGF0X25vbl9kZWNsYXJhdGlvbl9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2NrX3J1
bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIq
PihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUoJDMsICQ4KTsKICAgICB9Ci0gICAgfCBNRURJQV9T
WU0gbWF5YmVfc3BhY2UgJ3snIG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2Nr
IHsKLSAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVN
ZWRpYVJ1bGUoMCwgJDUpOworICAgIHwgTUVESUFfU1lNIGF0X21lZGlhX2hlYWRlcl9lbmRfbWF5
YmVfc3BhY2UgJ3snIGF0X25vbl9kZWNsYXJhdGlvbl9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJs
b2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQ
YXJzZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUoMCwgJDYpOwogICAgIH0KLSAgICB8IE1F
RElBX1NZTSBtYXliZV9zcGFjZSAnOycgeworICAgIHwgTUVESUFfU1lNIGF0X21lZGlhX2hlYWRl
cl9lbmRfbWF5YmVfc3BhY2UgJzsnIHsKICAgICAgICAgJCQgPSAwOworICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KICAgICA7CiAK
QEAgLTYxOCw5ICs2NzMsOSBAQCBtZWRpdW06CiAgIDsKIAoga2V5ZnJhbWVzOgotICAgIFdFQktJ
VF9LRVlGUkFNRVNfU1lNIG1heWJlX3NwYWNlIGtleWZyYW1lX25hbWUgbWF5YmVfc3BhY2UgJ3sn
IG1heWJlX3NwYWNlIGtleWZyYW1lc19ydWxlICd9JyB7Ci0gICAgICAgICQkID0gJDc7Ci0gICAg
ICAgICQ3LT5zZXROYW1lKCQzKTsKKyAgICBXRUJLSVRfS0VZRlJBTUVTX1NZTSBtYXliZV9zcGFj
ZSBrZXlmcmFtZV9uYW1lIG1heWJlX3NwYWNlIGF0X3J1bGVfaGVhZGVyX2VuZCAneycgYXRfbm9u
X2RlY2xhcmF0aW9uX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2Uga2V5ZnJhbWVzX3J1bGUgJ30nIHsK
KyAgICAgICAgJCQgPSAkOTsKKyAgICAgICAgJDktPnNldE5hbWUoJDMpOwogICAgIH0KICAgICA7
CiAgIApAQCAtNjM1LDYgKzY5MCw5IEBAIGtleWZyYW1lc19ydWxlOgogICAgICAgICAkJCA9ICQx
OwogICAgICAgICBpZiAoJDIpCiAgICAgICAgICAgICAkJC0+cGFyc2VyQXBwZW5kS2V5ZnJhbWUo
JDIpOworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpOworICAgICAgICBpZiAocC0+aXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICAg
ICAgcC0+dXBkYXRlVG9wUnVsZUJvZHlFbmQoKTsKICAgICB9CiAgICAgOwogCkBAIC02NzMsOCAr
NzMxLDggQEAga2V5OgogICAgIDsKIAogcGFnZToKLSAgICBQQUdFX1NZTSBtYXliZV9zcGFjZSBw
YWdlX3NlbGVjdG9yIG1heWJlX3NwYWNlCi0gICAgJ3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9u
c19hbmRfbWFyZ2lucyBjbG9zaW5nX2JyYWNlIHsKKyAgICBQQUdFX1NZTSBtYXliZV9zcGFjZSBw
YWdlX3NlbGVjdG9yIG1heWJlX3NwYWNlIGF0X3J1bGVfaGVhZGVyX2VuZAorICAgICd7JyBhdF9y
dWxlX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9u
c19hbmRfbWFyZ2lucyBjbG9zaW5nX2JyYWNlIHsKICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKICAgICAgICAgaWYgKCQzKQogICAgICAgICAg
ICAgJCQgPSBwLT5jcmVhdGVQYWdlUnVsZShwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkMykpOwpA
QCAtNjgzLDEzICs3NDEsMTYgQEAgcGFnZToKICAgICAgICAgICAgIHAtPmNsZWFyUHJvcGVydGll
cygpOwogICAgICAgICAgICAgLy8gQWxzbyBjbGVhciBtYXJnaW4gYXQtcnVsZXMgaGVyZSBvbmNl
IHdlIGZ1bGx5IGltcGxlbWVudCBtYXJnaW4gYXQtcnVsZXMgcGFyc2luZy4KICAgICAgICAgICAg
ICQkID0gMDsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBv
cFJ1bGVEYXRhKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBQQUdFX1NZTSBlcnJvciBpbnZh
bGlkX2Jsb2NrIHsKICAgICAgICQkID0gMDsKKyAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+
KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogICAgIHwgUEFHRV9TWU0gZXJyb3IgJzsn
IHsKICAgICAgICQkID0gMDsKKyAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcikt
PnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogICAgIDsKIApAQCAtNzg1LDE1ICs4NDYsMTcgQEAgbWFy
Z2luX3N5bSA6CiAgICAgOwogCiBmb250X2ZhY2U6Ci0gICAgRk9OVF9GQUNFX1NZTSBtYXliZV9z
cGFjZQotICAgICd7JyBtYXliZV9zcGFjZSBkZWNsYXJhdGlvbl9saXN0ICd9JyAgbWF5YmVfc3Bh
Y2UgeworICAgIEZPTlRfRkFDRV9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kIG1heWJlX3NwYWNlCisg
ICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24g
ZGVjbGFyYXRpb25fbGlzdCAnfScgIG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVGb250RmFjZVJ1bGUoKTsKICAgICB9CiAg
ICAgfCBGT05UX0ZBQ0VfU1lNIGVycm9yIGludmFsaWRfYmxvY2sgewogICAgICAgJCQgPSAwOwor
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAg
ICB9CiAgICAgfCBGT05UX0ZBQ0VfU1lNIGVycm9yICc7JyB7CiAgICAgICAkJCA9IDA7CisgICAg
ICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0K
IDsKIApAQCAtODQwLDIyICs5MDMsNTcgQEAgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9u
OgogICAgIH0KICAgOwogCi1iZWZvcmVfcnVsZXNldDoKK2JlZm9yZV9zdHlsZV9ydWxlOgorICAg
IC8qIGVtcHR5ICovIHsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyKj4ocGFyc2VyKTsKKyAgICAgICAgcC0+bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KCk7Cisg
ICAgfQorICA7CisKK2JlZm9yZV9tZWRpYV9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAg
ICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKKyAgICAg
ICAgcC0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpNRURJQV9SVUxF
KTsKKyAgICB9CisgIDsKKworYmVmb3JlX2ltcG9ydF9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsK
KyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsK
KyAgICAgICAgcC0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpJTVBP
UlRfUlVMRSk7CisgICAgfQorICA7CisKK2JlZm9yZV9mb250X2ZhY2VfcnVsZToKKyAgICAvKiBl
bXB0eSAqLyB7CisgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+
KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNl
RGF0YTo6Rk9OVF9GQUNFX1JVTEUpOworICAgIH0KKyAgOworCitiZWZvcmVfcGFnZV9ydWxlOgor
ICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKTsKKyAgICAgICAgcC0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1
bGVTb3VyY2VEYXRhOjpQQUdFX1JVTEUpOworICAgIH0KKyAgOworCitiZWZvcmVfa2V5ZnJhbWVz
X3J1bGU6CiAgICAgLyogZW1wdHkgKi8gewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwotICAgICAgICBwLT5tYXJrU2VsZWN0b3JMaXN0U3Rh
cnQoKTsKKyAgICAgICAgcC0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRh
OjpLRVlGUkFNRVNfUlVMRSk7CiAgICAgfQogICA7CiAKLWJlZm9yZV9ydWxlX29wZW5pbmdfYnJh
Y2U6CithdF9ydWxlX2hlYWRlcl9lbmQ6CiAgICAgLyogZW1wdHkgKi8gewogICAgICAgICBDU1NQ
YXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwotICAgICAgICBwLT5t
YXJrU2VsZWN0b3JMaXN0RW5kKCk7CisgICAgICAgIHAtPm1hcmtSdWxlSGVhZGVyRW5kKCk7CiAg
ICAgfQogICA7CiAKIHJ1bGVzZXQ6Ci0gICAgc2VsZWN0b3JfbGlzdCBiZWZvcmVfcnVsZV9vcGVu
aW5nX2JyYWNlICd7JyBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25f
bGlzdCBjbG9zaW5nX2JyYWNlIHsKKyAgICBzZWxlY3Rvcl9saXN0IGF0X3J1bGVfaGVhZGVyX2Vu
ZCAneycgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgY2xv
c2luZ19icmFjZSB7CiAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNl
cio+KHBhcnNlcik7CiAgICAgICAgICQkID0gcC0+Y3JlYXRlU3R5bGVSdWxlKCQxKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCmluZGV4IDZkYjMyMGMyNzBkOGY4YWNlZTdk
ZjMzZDNhMTdhM2UzYzI3NjYzODYuLjU1YmJhYTVmZGEyNTYwMWE3NGU4NTM0YWNkZWM5Zjc3MmEw
NzE4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCkBAIC0xNjYsNyArMTY2LDcg
QEAgdm9pZCBDU1NNZWRpYVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKiBydWxlKQogewog
ICAgIEFTU0VSVChydWxlKTsKICAgICBtX21lZGlhUnVsZSA9IHJ1bGU7Ci0gICAgaWYgKG1fbWVk
aWFDU1NPTVdyYXBwZXIpCisgICAgaWYgKG1fbWVkaWFDU1NPTVdyYXBwZXIgJiYgbV9tZWRpYVJ1
bGUtPm1lZGlhUXVlcmllcygpKQogICAgICAgICBtX21lZGlhQ1NTT01XcmFwcGVyLT5yZWF0dGFj
aChtX21lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYg
KG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5k
ZXggNjVlMWEyZmE1NDRmN2M2YTk3MGJiMjIwN2M5OTc1ZTlmN2QyM2QwZi4uYjhhNWMyZDMzN2E2
ZTExOGI2NTBlZWJhNzUxYTYzMzE5N2M2MDk4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAK
QEAgLTIzNiwxMSArMjM2LDkgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCkKICAgICAsIG1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZShm
YWxzZSkKICAgICAsIG1fZGVmYXVsdE5hbWVzcGFjZShzdGFyQXRvbSkKICAgICAsIG1faW5TdHls
ZVJ1bGVPckRlY2xhcmF0aW9uKGZhbHNlKQotICAgICwgbV9zZWxlY3Rvckxpc3RSYW5nZSgwLCAw
KQotICAgICwgbV9ydWxlQm9keVJhbmdlKDAsIDApCisgICAgLCBtX2hlYWRlclJhbmdlKDAsIDAp
CiAgICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQotICAgICwgbV9ydWxl
UmFuZ2VNYXAoMCkKLSAgICAsIG1fY3VycmVudFJ1bGVEYXRhKDApCisgICAgLCBtX3J1bGVTb3Vy
Y2VEYXRhUmVzdWx0KDApCiAgICAgLCBtX3BhcnNpbmdNb2RlKE5vcm1hbE1vZGUpCiAgICAgLCBt
X2N1cnJlbnRDaGFyYWN0ZXIoMCkKICAgICAsIG1fdG9rZW5TdGFydCgwKQpAQCAtMjg1LDYgKzI4
Myw3IEBAIHZvaWQgQ1NTUGFyc2VyU3RyaW5nOjpsb3dlcigpCiAKIHZvaWQgQ1NTUGFyc2VyOjpz
ZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25z
dCBjaGFyKiBzdWZmaXgpCiB7CisgICAgbV9wYXJzZWRUZXh0ID0gc3RyaW5nOwogICAgIGludCBs
ZW5ndGggPSBzdHJpbmcubGVuZ3RoKCkgKyBzdHJsZW4ocHJlZml4KSArIHN0cmxlbihzdWZmaXgp
ICsgMTsKIAogICAgIG1fZGF0YVN0YXJ0ID0gYWRvcHRBcnJheVB0cihuZXcgVUNoYXJbbGVuZ3Ro
XSk7CkBAIC0zMDEsMjQgKzMwMCwxOSBAQCB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29u
c3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhcgogICAgIG1f
ZGF0YVN0YXJ0W2xlbmd0aCAtIDFdID0gMDsKIAogICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1f
dG9rZW5TdGFydCA9IG1fZGF0YVN0YXJ0LmdldCgpOwotICAgIHJlc2V0UnVsZUJvZHlNYXJrcygp
OwogfQogCi12b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNo
ZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0TGluZU51bWJlciwgU3R5bGVSdWxl
UmFuZ2VNYXAqIHJ1bGVSYW5nZU1hcCkKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KFN0eWxl
U2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQgc3RhcnRMaW5l
TnVtYmVyLCBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+KiBydWxlU291cmNlRGF0
YVJlc3VsdCkKIHsKICAgICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKICAgICBtX2RlZmF1bHROYW1l
c3BhY2UgPSBzdGFyQXRvbTsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgotICAgIG1f
cnVsZVJhbmdlTWFwID0gcnVsZVJhbmdlTWFwOwotICAgIGlmIChydWxlUmFuZ2VNYXApIHsKLSAg
ICAgICAgbV9jdXJyZW50UnVsZURhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7Ci0g
ICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJj
ZURhdGE6OmNyZWF0ZSgpOwotICAgIH0KKyAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gcnVs
ZVNvdXJjZURhdGFSZXN1bHQ7CiAKICAgICBtX2xpbmVOdW1iZXIgPSBzdGFydExpbmVOdW1iZXI7
CiAgICAgc2V0dXBQYXJzZXIoIiIsIHN0cmluZywgIiIpOwogICAgIGNzc3l5cGFyc2UodGhpcyk7
Ci0gICAgbV9ydWxlUmFuZ2VNYXAgPSAwOwotICAgIG1fY3VycmVudFJ1bGVEYXRhID0gMDsKKyAg
ICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gMDsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LmNsZWFyKCk7CiAgICAgbV9ydWxlID0gMDsKIH0KIApAQCAtMTExOSwxNiArMTExMywxNyBAQCB2
b2lkIENTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTU2Vs
ZWN0b3JMaXN0JiBzZWxlY3RvckxpcwogICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3Rv
ciA9IDA7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVy
dHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxl
U291cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0
U3R5bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVy
dHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUGFzc1JlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGEsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4
dFN0eWxlU2hlZXQpCiB7CiAgICAgLy8gTGVuZ3RoIG9mIHRoZSAiQC13ZWJraXQtZGVjbHN7IiBw
cmVmaXguCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDE1OwogCiAg
ICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCk7CiAKLSAgICBpZiAoc3R5bGVTb3Vy
Y2VEYXRhKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6
OmNyZWF0ZSgpOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0g
Q1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURh
dGE+IHJ1bGVTb3VyY2VEYXRhUmVmID0gcnVsZVNvdXJjZURhdGE7CisgICAgaWYgKHJ1bGVTb3Vy
Y2VEYXRhUmVmKSB7CisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2suYXBwZW5kKHJ1bGVT
b3VyY2VEYXRhUmVmKTsKKyAgICAgICAgbV9ydWxlQm9keVJhbmdlU3RhY2suYXBwZW5kKFNvdXJj
ZVJhbmdlKCkpOwogICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IHRydWU7CiAg
ICAgfQogCkBAIC0xMTQ1LDE5ICsxMTQwLDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xh
cmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0CiAg
ICAgICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIH0KIAotICAgIGlmIChtX2N1cnJlbnRSdWxl
RGF0YSkgewotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHls
ZUJvZHlSYW5nZS5zdGFydCA9IDA7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNv
dXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAg
Zm9yIChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPjo6aXRlcmF0b3IgaXQgPSBtX2N1cnJl
bnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYmVnaW4oKSwgZW5kSXQg
PSBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuZW5kKCk7
IGl0ICE9IGVuZEl0OyArK2l0KSB7Ci0gICAgICAgICAgICAoKml0KS5yYW5nZS5zdGFydCAtPSBw
cmVmaXhMZW5ndGg7Ci0gICAgICAgICAgICAoKml0KS5yYW5nZS5lbmQgLT0gcHJlZml4TGVuZ3Ro
OwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChydWxlU291cmNlRGF0YVJlZikgeworICAgICAg
ICAgIHJ1bGVTb3VyY2VEYXRhUmVmLT5ydWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKKyAgICAgICAg
ICBydWxlU291cmNlRGF0YVJlZi0+cnVsZUJvZHlSYW5nZS5lbmQgPSBzdHJpbmcubGVuZ3RoKCk7
CisgICAgICAgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPjo6aXRlcmF0b3Ig
aXQgPSBydWxlU291cmNlRGF0YVJlZi0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYmVn
aW4oKSwgZW5kSXQgPSBydWxlU291cmNlRGF0YVJlZi0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0
eURhdGEuZW5kKCk7IGl0ICE9IGVuZEl0OyArK2l0KSB7CisgICAgICAgICAgICAgIGl0LT5yYW5n
ZS5zdGFydCAtPSBwcmVmaXhMZW5ndGg7CisgICAgICAgICAgICAgIGl0LT5yYW5nZS5lbmQgLT0g
cHJlZml4TGVuZ3RoOworICAgICAgICAgIH0KIAotICAgIGlmIChzdHlsZVNvdXJjZURhdGEpIHsK
LSAgICAgICAgKnN0eWxlU291cmNlRGF0YSA9IG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJj
ZURhdGEucmVsZWFzZSgpOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IDA7CiAgICAgICAg
IG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gZmFsc2U7CisgICAgICAgIG1fY3VycmVudFJ1
bGVEYXRhU3RhY2suY2xlYXIoKTsKKyAgICAgICAgbV9ydWxlQm9keVJhbmdlU3RhY2suY2xlYXIo
KTsKICAgICB9CiAgICAgcmV0dXJuIG9rOwogfQpAQCAtOTA5MiwxNyArOTA4NSwzOCBAQCBTdHls
ZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgQ1NTUGFyc2VyU3Ry
aW5nJiB1cmwsIE1lZGlhUXVlcgogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U3R5bGVS
dWxlSW1wb3J0PiBydWxlID0gU3R5bGVSdWxlSW1wb3J0OjpjcmVhdGUodXJsLCBtZWRpYSk7CiAg
ICAgU3R5bGVSdWxlSW1wb3J0KiByZXN1bHQgPSBydWxlLmdldCgpOworICAgIGlmIChpc0V4dHJh
Y3RpbmdTb3VyY2VEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0
YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIG1hcmtSdWxlQm9keUVuZCgpOworICAgICAgICBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7Cisg
ICAgICAgIGN1cnJlbnRSdWxlRGF0YS0+cnVsZUJvZHlSYW5nZSA9IG1fcnVsZUJvZHlSYW5nZVN0
YWNrLmxhc3QoKTsKKyAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURh
dGEucmVsZWFzZSgpKTsKKyAgICAgICAgcmVzZXRSdWxlSGVhZGVyUmFuZ2UoKTsKKyAgICAgICAg
cG9wUnVsZUJvZHlSYW5nZSgpOworICAgIH0KICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxl
LnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3R5bGVSdWxlQmFzZSogQ1NT
UGFyc2VyOjpjcmVhdGVNZWRpYVJ1bGUoTWVkaWFRdWVyeVNldCogbWVkaWEsIFJ1bGVMaXN0KiBy
dWxlcykKIHsKLSAgICBpZiAoIW1lZGlhIHx8ICFydWxlcykKLSAgICAgICAgcmV0dXJuIDA7CiAg
ICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZh
bHNlOwotICAgIFJlZlB0cjxTdHlsZVJ1bGVNZWRpYT4gcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpj
cmVhdGUobWVkaWEsICpydWxlcyk7CisgICAgUmVmUHRyPFN0eWxlUnVsZU1lZGlhPiBydWxlOwor
ICAgIGlmIChydWxlcykKKyAgICAgICAgcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVk
aWEsICpydWxlcyk7CisgICAgZWxzZSB7CisgICAgICAgIFJ1bGVMaXN0IGVtcHR5UnVsZXM7Cisg
ICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCBlbXB0eVJ1bGVzKTsK
KyAgICB9CiAgICAgU3R5bGVSdWxlTWVkaWEqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgaWYg
KGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1
bGVEYXRhU3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgbWFya1J1bGVCb2R5RW5kKCk7CisgICAg
ICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3VycmVudFJ1bGVEYXRhID0gcG9wUnVsZURh
dGEoKTsKKyAgICAgICAgY3VycmVudFJ1bGVEYXRhLT5ydWxlQm9keVJhbmdlID0gbV9ydWxlQm9k
eVJhbmdlU3RhY2subGFzdCgpOworICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKGN1cnJl
bnRSdWxlRGF0YS5yZWxlYXNlKCkpOworICAgICAgICBwb3BSdWxlQm9keVJhbmdlKCk7CisgICAg
fQogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtOTExNiwxMSArOTEzMCw2MSBAQCBDU1NQYXJzZXI6OlJ1bGVMaXN0KiBD
U1NQYXJzZXI6OmNyZWF0ZVJ1bGVMaXN0KCkKICAgICByZXR1cm4gbGlzdFB0cjsKIH0KIAordm9p
ZCBDU1NQYXJzZXI6OmFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxlU291
cmNlRGF0YT4gcnVsZSkKK3sKKyAgICAvLyBQcmVjb25kaXRpb246IChpc0V4dHJhY3RpbmdTb3Vy
Y2VEYXRhKCkpLgorICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+YXBwZW5kKHJ1bGUpOworICAgIGVsc2UKKyAg
ICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5sYXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKHJ1
bGUpOworfQorCit2b2lkIENTU1BhcnNlcjo6dXBkYXRlVG9wUnVsZUJvZHlFbmQoKQoreworICAg
IC8vIFByZWNvbmRpdGlvbjogKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkuCisgICAgQ1NTUnVs
ZVNvdXJjZURhdGEqIGRhdGE7CisgICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2suaXNFbXB0
eSgpKQorICAgICAgICBkYXRhID0gbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+aXNFbXB0eSgpID8g
MCA6IG1fcnVsZVNvdXJjZURhdGFSZXN1bHQtPmxhc3QoKS5nZXQoKTsKKyAgICBlbHNlCisgICAg
ICAgIGRhdGEgPSBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmxhc3QoKS0+Y2hpbGRSdWxlcy5pc0Vt
cHR5KCkgPyAwIDogbV9jdXJyZW50UnVsZURhdGFTdGFjay5sYXN0KCktPmNoaWxkUnVsZXMubGFz
dCgpLmdldCgpOworCisgICAgQVNTRVJUKGRhdGEpOworICAgIGlmICghZGF0YSkKKyAgICAgICAg
cmV0dXJuOworICAgIGRhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5kID0gbV90b2tlblN0YXJ0IC0gbV9k
YXRhU3RhcnQuZ2V0KCk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjpwb3BSdWxlQm9keVJhbmdlKCkK
K3sKKyAgICBpZiAobV9ydWxlU291cmNlRGF0YVJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIW1f
cnVsZUJvZHlSYW5nZVN0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIG1fcnVsZUJvZHlSYW5nZVN0
YWNrLnJlbW92ZUxhc3QoKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURh
dGE+IENTU1BhcnNlcjo6cG9wUnVsZURhdGEoKQoreworICAgIGlmICghbV9ydWxlU291cmNlRGF0
YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVE
YXRhU3RhY2suaXNFbXB0eSgpKTsKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGRhdGEg
PSBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmxhc3QoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0
YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7Cit9CisKIFN0eWxl
UnVsZUtleWZyYW1lcyogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNSdWxlKCkKIHsKICAgICBt
X2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7
CiAgICAgUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSA9IFN0eWxlUnVsZUtleWZyYW1l
czo6Y3JlYXRlKCk7CiAgICAgU3R5bGVSdWxlS2V5ZnJhbWVzKiBydWxlUHRyID0gcnVsZS5nZXQo
KTsKKyAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKSB7CisgICAgICAgIEFTU0VSVCgh
bV9jdXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5KCkpOworICAgICAgICBtYXJrUnVsZUJvZHlF
bmQoKTsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEg
PSBwb3BSdWxlRGF0YSgpOworICAgICAgICBjdXJyZW50UnVsZURhdGEtPnJ1bGVCb2R5UmFuZ2Ug
PSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5sYXN0KCk7CisgICAgICAgIGFkZE5ld1J1bGVUb1NvdXJj
ZVRyZWUoY3VycmVudFJ1bGVEYXRhLnJlbGVhc2UoKSk7CisgICAgfQogICAgIG1fcGFyc2VkUnVs
ZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICByZXR1cm4gcnVsZVB0cjsKIH0KQEAgLTkx
MzgsMTggKzkyMDIsMTkgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1
bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2UKICAgICAgICAgcnVsZS0+
c2V0UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwogICAgICAgICByZXN1bHQg
PSBydWxlLmdldCgpOwogICAgICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2Uo
KSk7Ci0gICAgICAgIGlmIChtX3J1bGVSYW5nZU1hcCkgewotICAgICAgICAgICAgQVNTRVJUKG1f
Y3VycmVudFJ1bGVEYXRhKTsKLSAgICAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNv
dXJjZURhdGEtPnN0eWxlQm9keVJhbmdlID0gbV9ydWxlQm9keVJhbmdlOwotICAgICAgICAgICAg
bV9jdXJyZW50UnVsZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlID0gbV9zZWxlY3Rvckxpc3RSYW5n
ZTsKLSAgICAgICAgICAgIG1fcnVsZVJhbmdlTWFwLT5zZXQocmVzdWx0LCBtX2N1cnJlbnRSdWxl
RGF0YS5yZWxlYXNlKCkpOwotICAgICAgICAgICAgbV9jdXJyZW50UnVsZURhdGEgPSBDU1NSdWxl
U291cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5
bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgaWYg
KGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJl
bnRSdWxlRGF0YVN0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgICAgICBj
dXJyZW50UnVsZURhdGEtPnJ1bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5sYXN0
KCk7CisgICAgICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKGN1cnJlbnRSdWxlRGF0
YS5nZXQoKSk7CisgICAgICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKGN1cnJlbnRSdWxl
RGF0YS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24g
PSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXNldFNlbGVjdG9yTGlzdE1hcmtzKCk7
Ci0gICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURh
dGEoKSkgeworICAgICAgICByZXNldFJ1bGVIZWFkZXJSYW5nZSgpOworICAgICAgICBwb3BSdWxl
Qm9keVJhbmdlKCk7CisgICAgfQogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC05MTc0LDYgKzkyMzksMTUgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2Vy
OjpjcmVhdGVGb250RmFjZVJ1bGUoKQogICAgIHJ1bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5
bGVQcm9wZXJ0eVNldCgpKTsKICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICBTdHlsZVJ1bGVG
b250RmFjZSogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNl
RGF0YSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5
KCkpOworICAgICAgICBtYXJrUnVsZUJvZHlFbmQoKTsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVT
b3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEgPSBwb3BSdWxlRGF0YSgpOworICAgICAgICBjdXJy
ZW50UnVsZURhdGEtPnJ1bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5sYXN0KCk7
CisgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoY3VycmVudFJ1bGVEYXRhLmdldCgp
KTsKKyAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFz
ZSgpKTsKKyAgICAgICAgcG9wUnVsZUJvZHlSYW5nZSgpOworICAgIH0KICAgICBtX3BhcnNlZFJ1
bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTky
NTMsNiArOTMyNywxNSBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxl
KFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlYwogICAgICAgICBydWxlLT5w
YXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKICAgICAgICAgcnVsZS0+
c2V0UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwogICAgICAgICBwYWdlUnVs
ZSA9IHJ1bGUuZ2V0KCk7CisgICAgICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgbWFya1J1bGVCb2R5RW5kKCk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgICAg
ICBjdXJyZW50UnVsZURhdGEtPnJ1bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5s
YXN0KCk7CisgICAgICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKGN1cnJlbnRSdWxl
RGF0YS5nZXQoKSk7CisgICAgICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKGN1cnJlbnRS
dWxlRGF0YS5yZWxlYXNlKCkpOworICAgICAgICAgICAgcG9wUnVsZUJvZHlSYW5nZSgpOworICAg
ICAgICB9CiAgICAgICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAg
ICB9CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CkBAIC05Mjc2LDYgKzkzNTksOCBAQCBTdHlsZVJ1
bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4gPiogcgogCiAgICAgU3R5bGVSdWxlUmVnaW9uKiByZXN1bHQgPSByZWdpb25S
dWxlLmdldCgpOwogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJlZ2lvblJ1bGUucmVsZWFzZSgp
KTsKKyAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICBhZGROZXdSdWxl
VG9Tb3VyY2VUcmVlKENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGVVbmtub3duKCkpOwogCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkzNTUsMTUgKzk0NDAsNzQgQEAgdm9pZCBDU1NQYXJzZXI6
OnVwZGF0ZUxhc3RNZWRpYUxpbmUoTWVkaWFRdWVyeVNldCogbWVkaWEpCiAgICAgbWVkaWEtPnNl
dExhc3RMaW5lKG1fbGluZU51bWJlcik7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0
b3JMaXN0U3RhcnQoKQordm9pZCBDU1NQYXJzZXI6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMo
Q1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhKQogewotICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uu
c3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBpZiAoIXJ1bGVE
YXRhLT5zdHlsZVNvdXJjZURhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8Q1NTUHJv
cGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0
YS0+cHJvcGVydHlEYXRhOworICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eURhdGEuc2l6ZSgp
OworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgc3R5bGVT
dGFydCA9IHJ1bGVEYXRhLT5ydWxlQm9keVJhbmdlLnN0YXJ0OworICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzID0gbV9wYXJzZWRUZXh0LmNoYXJhY3RlcnMoKTsKKyAgICBDU1NQcm9wZXJ0eVNv
dXJjZURhdGEqIG5leHREYXRhID0gJihwcm9wZXJ0eURhdGEuYXQoMCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VE
YXRhKiBjdXJyZW50RGF0YSA9IG5leHREYXRhOworICAgICAgICBuZXh0RGF0YSA9IGkgPCBzaXpl
IC0gMSA/ICYocHJvcGVydHlEYXRhLmF0KGkgKyAxKSkgOiAwOworCisgICAgICAgIGlmIChjdXJy
ZW50RGF0YS0+cGFyc2VkT2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGN1
cnJlbnREYXRhLT5yYW5nZS5lbmQgPiAwICYmIGNoYXJhY3RlcnNbc3R5bGVTdGFydCArIGN1cnJl
bnREYXRhLT5yYW5nZS5lbmQgLSAxXSA9PSAnOycpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldDsKKyAgICAgICAgaWYgKCFu
ZXh0RGF0YSkKKyAgICAgICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gcnVsZURhdGEt
PnJ1bGVCb2R5UmFuZ2UuZW5kIC0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvcGVy
dHlFbmRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgbmV4dERhdGEtPnJhbmdlLnN0YXJ0IC0g
MTsKKworICAgICAgICB3aGlsZSAoaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1twcm9wZXJ0eUVuZElu
U3R5bGVTaGVldF0pKQorICAgICAgICAgICAgLS1wcm9wZXJ0eUVuZEluU3R5bGVTaGVldDsKKwor
ICAgICAgICAvLyBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCBwb2ludHMgYXQgdGhlIGxhc3QgcHJv
cGVydHkgdGV4dCBjaGFyYWN0ZXIuCisgICAgICAgIHVuc2lnbmVkIG5ld1Byb3BlcnR5RW5kID0g
cHJvcGVydHlFbmRJblN0eWxlU2hlZXQgLSBzdHlsZVN0YXJ0ICsgMTsgLy8gRXhjbHVzaXZlIG9m
IHRoZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgorICAgICAgICBpZiAoY3VycmVudERh
dGEtPnJhbmdlLmVuZCAhPSBuZXdQcm9wZXJ0eUVuZCkgeworICAgICAgICAgICAgY3VycmVudERh
dGEtPnJhbmdlLmVuZCA9IG5ld1Byb3BlcnR5RW5kOworICAgICAgICAgICAgdW5zaWduZWQgdmFs
dWVTdGFydEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2Uuc3Rh
cnQgKyBjdXJyZW50RGF0YS0+bmFtZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHdoaWxlICh2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgJiYgY2hhcmFjdGVy
c1t2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSAhPSAnOicpCisgICAgICAgICAgICAgICAgKyt2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0OworICAgICAgICAgICAgaWYgKHZhbHVlU3RhcnRJblN0eWxlU2hl
ZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCkKKyAgICAgICAgICAgICAgICArK3ZhbHVlU3Rh
cnRJblN0eWxlU2hlZXQ7IC8vIFNoaWZ0IHBhc3QgdGhlICc6Jy4KKyAgICAgICAgICAgIHdoaWxl
ICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgJiYgaXNI
VE1MU3BhY2UoY2hhcmFjdGVyc1t2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSkpCisgICAgICAgICAg
ICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OworICAgICAgICAgICAgLy8gTmVlZCB0byBl
eGNsdWRlIHRoZSB0cmFpbGluZyAnOycgZnJvbSB0aGUgcHJvcGVydHkgdmFsdWUuCisgICAgICAg
ICAgICBjdXJyZW50RGF0YS0+dmFsdWUgPSBtX3BhcnNlZFRleHQuc3Vic3RyaW5nKHZhbHVlU3Rh
cnRJblN0eWxlU2hlZXQsIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gdmFsdWVTdGFydEluU3R5
bGVTaGVldCArIChjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNoZWV0XSA9PSAnOycgPyAw
IDogMSkpOworICAgICAgICB9CisgICAgfQogfQogCi12b2lkIENTU1BhcnNlcjo6bWFya1NlbGVj
dG9yTGlzdEVuZCgpCit2b2lkIENTU1BhcnNlcjo6bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KCkK
IHsKLSAgICBpZiAoIW1fY3VycmVudFJ1bGVEYXRhKQorICAgIGlmICghbV9ydWxlU291cmNlRGF0
YVJlc3VsdCkKICAgICAgICAgcmV0dXJuOworICAgIG1faGVhZGVyUmFuZ2Uuc3RhcnQgPSBtX3Rv
a2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LmFwcGVuZChDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKENTU1J1bGVTb3VyY2VEYXRhOjpTVFlM
RV9SVUxFKSk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NT
UnVsZVNvdXJjZURhdGE6OlR5cGUgcnVsZVR5cGUpCit7CisgICAgaWYgKCFtX3J1bGVTb3VyY2VE
YXRhUmVzdWx0KQorICAgICAgICByZXR1cm47CisgICAgbV9oZWFkZXJSYW5nZS5zdGFydCA9IG1f
dG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOworICAgIG1fY3VycmVudFJ1bGVEYXRhU3Rh
Y2suYXBwZW5kKENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUocnVsZVR5cGUpKTsKK30KKwordm9p
ZCBDU1NQYXJzZXI6Om1hcmtSdWxlSGVhZGVyRW5kKCkKK3sKKyAgICBpZiAoIW1fcnVsZVNvdXJj
ZURhdGFSZXN1bHQpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVE
YXRhU3RhY2suaXNFbXB0eSgpKTsKICAgICBVQ2hhciogbGlzdEVuZCA9IG1fdG9rZW5TdGFydDsK
ICAgICB3aGlsZSAobGlzdEVuZCA+IG1fZGF0YVN0YXJ0LmdldCgpICsgMSkgewogICAgICAgICBp
ZiAoaXNIVE1MU3BhY2UoKihsaXN0RW5kIC0gMSkpKQpAQCAtOTM3MSwyNCArOTUxNSwyOSBAQCB2
b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdEVuZCgpCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RF
bmQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBtX2hlYWRlclJhbmdlLmVuZCA9IGxpc3RFbmQg
LSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmxhc3QoKS0+
cnVsZUhlYWRlclJhbmdlID0gbV9oZWFkZXJSYW5nZTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6Om1h
cmtSdWxlQm9keVN0YXJ0KCkKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydChib29s
IGlzRGVjbGFyYXRpb24pCiB7CisgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAg
ICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRh
U3RhcnQuZ2V0KCk7CiAgICAgaWYgKCptX3Rva2VuU3RhcnQgPT0gJ3snKQogICAgICAgICArK29m
ZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcgYnJhY2UuCi0gICAgaWYgKG9mZnNl
dCA+IG1fcnVsZUJvZHlSYW5nZS5zdGFydCkKLSAgICAgICAgbV9ydWxlQm9keVJhbmdlLnN0YXJ0
ID0gb2Zmc2V0OwotICAgIG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICBt
X3J1bGVCb2R5UmFuZ2VTdGFjay5hcHBlbmQoU291cmNlUmFuZ2UoKSk7CisgICAgbV9ydWxlQm9k
eVJhbmdlU3RhY2subGFzdCgpLnN0YXJ0ID0gb2Zmc2V0OworICAgIGlmIChpc0RlY2xhcmF0aW9u
KQorICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IHRydWU7CiB9CiAKIHZvaWQg
Q1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQogeworICAgIGlmICghbV9ydWxlU291cmNlRGF0
YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5T
dGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwotICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFu
Z2UuZW5kKQotICAgICAgICBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0OworICAgIG1fcnVs
ZUJvZHlSYW5nZVN0YWNrLmxhc3QoKS5lbmQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2Vy
OjptYXJrUHJvcGVydHlTdGFydCgpCkBAIC05NDA2LDcgKzk1NTUsNyBAQCB2b2lkIENTU1BhcnNl
cjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5
UGFyc2VkKQogICAgIGlmICgqbV90b2tlblN0YXJ0ID09ICc7JykgLy8gSW5jbHVkZSBzZW1pY29s
b24gaW50byB0aGUgcHJvcGVydHkgdGV4dC4KICAgICAgICAgKytvZmZzZXQ7CiAgICAgbV9wcm9w
ZXJ0eVJhbmdlLmVuZCA9IG9mZnNldDsKLSAgICBpZiAobV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ICE9
IFVJTlRfTUFYICYmIG1fY3VycmVudFJ1bGVEYXRhKSB7CisgICAgaWYgKG1fcHJvcGVydHlSYW5n
ZS5zdGFydCAhPSBVSU5UX01BWCAmJiAhbV9jdXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gVGhpcyBzdHVmZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIHN0eWxl
IGRhdGEgcmV0cmlldmFsIGlzIHJlcXVlc3RlZCBieSBjbGllbnQuCiAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAgICBjb25zdCB1bnNp
Z25lZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwpAQCAtOTQyMCwxMCArOTU2OSwxMSBAQCB2
b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9v
bCBpc1Byb3BlcnR5UGFyc2VkKQogICAgICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3RyaW5n
LmxlZnQoY29sb25JbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIFN0cmluZyB2YWx1
ZSA9IHByb3BlcnR5U3RyaW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJp
bmcubGVuZ3RoKCkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkg
cmFuZ2UgaXMgcmVsYXRpdmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KLSAgICAg
ICAgbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFwcGVu
ZCgKLSAgICAgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1lLCB2YWx1ZSwgaXNJbXBv
cnRhbnRGb3VuZCwgaXNQcm9wZXJ0eVBhcnNlZCwgU291cmNlUmFuZ2Uoc3RhcnQgLSBtX3J1bGVC
b2R5UmFuZ2Uuc3RhcnQsIGVuZCAtIG1fcnVsZUJvZHlSYW5nZS5zdGFydCkpKTsKKyAgICAgICAg
U291cmNlUmFuZ2UmIHRvcFJ1bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5sYXN0
KCk7CisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2subGFzdCgpLT5zdHlsZVNvdXJjZURh
dGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoCisgICAgICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURh
dGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJj
ZVJhbmdlKHN0YXJ0IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kIC0gdG9wUnVsZUJvZHlS
YW5nZS5zdGFydCkpKTsKICAgICB9Ci0gICAgcmVzZXRQcm9wZXJ0eU1hcmtzKCk7CisgICAgcmVz
ZXRQcm9wZXJ0eVJhbmdlKCk7CiB9CiAKIHN0YXRpYyBDU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5
SUQoY29uc3QgVUNoYXIqIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5oCmluZGV4IDdjNWE2MjM3NzQ4ZmYyN2M5NTVmNzNhNWIzNDAwNWIwYzhlMjczNjEu
LjI3MjhmMTA0OTk5MjBjM2ZlYWVjNDNkM2FjZDFjMWE1OTY3ODcwZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgfkNTU1BhcnNlcigpOwog
Ci0gICAgdm9pZCBwYXJzZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYs
IGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogPSAwKTsKKyAgICB2
b2lkIHBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0
YXJ0TGluZU51bWJlciA9IDAsIFJ1bGVTb3VyY2VEYXRhTGlzdCogPSAwKTsKICAgICBQYXNzUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IHBhcnNlUnVsZShTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBT
dHJpbmcmKTsKICAgICBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNlS2V5ZnJhbWVSdWxl
KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBib29sIHBh
cnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYs
IGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqKTsKQEAg
LTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHBhcnNlU3lzdGVtQ29sb3Io
UkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJp
bmcmKTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0
aXZlKGludCBpZGVudCwgQ1NTUGFyc2VyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlRGVjbGFyYXRp
b24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHlsZVNvdXJj
ZURhdGE+KiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgYm9v
bCBwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBQYXNz
UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5
bGVTaGVldCk7CiAgICAgUGFzc093blB0cjxNZWRpYVF1ZXJ5PiBwYXJzZU1lZGlhUXVlcnkoY29u
c3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+LCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKTsK
QEAgLTMxMSwyMCArMzExLDI4IEBAIHB1YmxpYzoKIAogICAgIC8vIHRva2VuaXplciBtZXRob2Rz
IGFuZCBkYXRhCiAgICAgYm9vbCBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbjsKLSAgICBTb3Vy
Y2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOwotICAgIFNvdXJjZVJhbmdlIG1fcnVsZUJvZHlS
YW5nZTsKKyAgICBTdHJpbmcgbV9wYXJzZWRUZXh0OworICAgIFNvdXJjZVJhbmdlIG1faGVhZGVy
UmFuZ2U7CiAgICAgU291cmNlUmFuZ2UgbV9wcm9wZXJ0eVJhbmdlOwotICAgIFN0eWxlUnVsZVJh
bmdlTWFwKiBtX3J1bGVSYW5nZU1hcDsKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1f
Y3VycmVudFJ1bGVEYXRhOwotICAgIHZvaWQgbWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7Ci0gICAg
dm9pZCBtYXJrU2VsZWN0b3JMaXN0RW5kKCk7Ci0gICAgdm9pZCBtYXJrUnVsZUJvZHlTdGFydCgp
OworICAgIFZlY3RvcjxTb3VyY2VSYW5nZT4gbV9ydWxlQm9keVJhbmdlU3RhY2s7CisgICAgVmVj
dG9yPFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gPiBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrOwor
ICAgIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4qIG1fcnVsZVNvdXJjZURhdGFS
ZXN1bHQ7CisKKyAgICB2b2lkIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJj
ZURhdGEqKTsKKyAgICB2b2lkIG1hcmtTdHlsZVJ1bGVIZWFkZXJTdGFydCgpOworICAgIHZvaWQg
bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpUeXBlKTsKKyAgICB2b2lk
IG1hcmtSdWxlSGVhZGVyRW5kKCk7CisgICAgdm9pZCBtYXJrUnVsZUJvZHlTdGFydChib29sIGlz
RGVjbGFyYXRpb24gPSB0cnVlKTsKICAgICB2b2lkIG1hcmtSdWxlQm9keUVuZCgpOwogICAgIHZv
aWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKICAgICB2b2lkIG1hcmtQcm9wZXJ0eUVuZChib29sIGlz
SW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCk7Ci0gICAgdm9pZCByZXNldFNl
bGVjdG9yTGlzdE1hcmtzKCkgeyBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0gbV9zZWxlY3Rv
ckxpc3RSYW5nZS5lbmQgPSAwOyB9Ci0gICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1f
cnVsZUJvZHlSYW5nZS5zdGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9Ci0gICAgdm9p
ZCByZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVy
dHlSYW5nZS5lbmQgPSBVSU5UX01BWDsgfQorICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNlVHJl
ZShQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPik7CisgICAgdm9pZCB1cGRhdGVUb3BSdWxl
Qm9keUVuZCgpOworICAgIHZvaWQgcmVzZXRSdWxlSGVhZGVyUmFuZ2UoKSB7IG1faGVhZGVyUmFu
Z2Uuc3RhcnQgPSBtX2hlYWRlclJhbmdlLmVuZCA9IDA7IH0KKyAgICB2b2lkIHBvcFJ1bGVCb2R5
UmFuZ2UoKTsKKyAgICB2b2lkIHJlc2V0UHJvcGVydHlSYW5nZSgpIHsgbV9wcm9wZXJ0eVJhbmdl
LnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLmVuZCA9IFVJTlRfTUFYOyB9CisgICAgUGFzc1JlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gcG9wUnVsZURhdGEoKTsKKyAgICBib29sIGlzRXh0cmFjdGlu
Z1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiAhIW1fcnVsZVNvdXJjZURhdGFSZXN1bHQ7IH0K
ICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7CiAgICAgaW50IHRva2VuKCkgeyByZXR1cm4gbV90
b2tlbjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKaW5k
ZXggNTgwM2Y5NGIxYzJmYTc1MWU5ZTU2ZTEwMjUyY2JkYjY0MGUxNWUyNC4uMDlkZTlmZWYzOTZh
NmY2MzY2Y2ZlZWUwNGZjM2VmMjZiM2Q0Y2U3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIFN0eWxlUnVsZTsKK2NsYXNzIFN0eWxlUnVsZUJhc2U7CiAKIHN0cnVjdCBT
b3VyY2VSYW5nZSB7CiAgICAgU291cmNlUmFuZ2UoKTsKQEAgLTc4LDIyICs3OCw1NSBAQCBzdHJ1
Y3QgQ1NTU3R5bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTU3R5bGVTb3VyY2VE
YXRhPiB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTb3VyY2VEYXRhKCkp
OwogICAgIH0KIAotICAgIC8vIFJhbmdlIG9mIHRoZSBzdHlsZSB0ZXh0IGluIHRoZSBlbmNsb3Np
bmcgc291cmNlLgotICAgIFNvdXJjZVJhbmdlIHN0eWxlQm9keVJhbmdlOwogICAgIFZlY3RvcjxD
U1NQcm9wZXJ0eVNvdXJjZURhdGE+IHByb3BlcnR5RGF0YTsKIH07CiAKK2NsYXNzIENTU1J1bGVT
b3VyY2VEYXRhOwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+IFJ1
bGVTb3VyY2VEYXRhTGlzdDsKKwogc3RydWN0IENTU1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q1NTUnVsZVNvdXJjZURhdGE+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gY3JlYXRlKCkKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBVTktOT1dO
X1JVTEUsCisgICAgICAgIFNUWUxFX1JVTEUsCisgICAgICAgIENIQVJTRVRfUlVMRSwKKyAgICAg
ICAgSU1QT1JUX1JVTEUsCisgICAgICAgIE1FRElBX1JVTEUsCisgICAgICAgIEZPTlRfRkFDRV9S
VUxFLAorICAgICAgICBQQUdFX1JVTEUsCisgICAgICAgIEtFWUZSQU1FU19SVUxFCisgICAgfTsK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0
YSh0eXBlKSk7CisgICAgfQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURh
dGE+IGNyZWF0ZVVua25vd24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
U1NSdWxlU291cmNlRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxl
U291cmNlRGF0YShVTktOT1dOX1JVTEUpKTsKICAgICB9CiAKKyAgICBDU1NSdWxlU291cmNlRGF0
YShUeXBlIHR5cGUpCisgICAgICAgIDogdHlwZSh0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5
cGUgPT0gU1RZTEVfUlVMRSB8fCB0eXBlID09IEZPTlRfRkFDRV9SVUxFIHx8IHR5cGUgPT0gUEFH
RV9SVUxFKQorICAgICAgICAgICAgc3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRh
OjpjcmVhdGUoKTsKKyAgICB9CisKKyAgICBUeXBlIHR5cGU7CisKICAgICAvLyBSYW5nZSBvZiB0
aGUgc2VsZWN0b3IgbGlzdCBpbiB0aGUgZW5jbG9zaW5nIHNvdXJjZS4KLSAgICBTb3VyY2VSYW5n
ZSBzZWxlY3Rvckxpc3RSYW5nZTsKKyAgICBTb3VyY2VSYW5nZSBydWxlSGVhZGVyUmFuZ2U7CisK
KyAgICAvLyBSYW5nZSBvZiB0aGUgcnVsZSBib2R5IChlLmcuIHN0eWxlIHRleHQgZm9yIHN0eWxl
IHJ1bGVzKSBpbiB0aGUgZW5jbG9zaW5nIHNvdXJjZS4KKyAgICBTb3VyY2VSYW5nZSBydWxlQm9k
eVJhbmdlOworCisgICAgLy8gT25seSBmb3IgQ1NTU3R5bGVSdWxlcywgQ1NTRm9udEZhY2VSdWxl
cywgYW5kIENTU1BhZ2VSdWxlcy4KICAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHls
ZVNvdXJjZURhdGE7CisKKyAgICAvLyBPbmx5IGZvciBDU1NNZWRpYVJ1bGVzLgorICAgIFJ1bGVT
b3VyY2VEYXRhTGlzdCBjaGlsZFJ1bGVzOwogfTsKLXR5cGVkZWYgSGFzaE1hcDxTdHlsZVJ1bGUq
LCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4gU3R5bGVSdWxlUmFuZ2VNYXA7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
CmluZGV4IDA0MmJlOGY2ZjNlMDJmM2RiYTM1MzdhODljNmM3Y2VmN2ViYWFiNGIuLmUwMmFmODcx
MTA0NWU2NWFlODI3MmM0NWQzMjQxYzNkY2FiNzkyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE4NTQsNyArMTg1NCw4IEBACiAgICAgICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHlsZVNoZWV0SWQiLCAiJHJlZiI6ICJTdHlsZVNo
ZWV0SWQiLCAiZGVzY3JpcHRpb24iOiAiRW5jbG9zaW5nIHN0eWxlc2hlZXQgaWRlbnRpZmllci4i
IH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib3JkaW5hbCIsICJ0eXBlIjogImlu
dGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiVGhlIHN0eWxlIG9yZGluYWwgd2l0aGluIHRoZSBzdHls
ZXNoZWV0LiIgfQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhdGgiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfSwgImRlc2NyaXB0aW9uIjog
IlRoZSBzdHlsZSBwYXRoIHdpdGhpbiB0aGUgc3R5bGVzaGVldCAodXNpbmcgdGhlIHJ1bGUgcGFy
ZW50IGhpZXJhcmNoeSkuIiB9CisKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0eWxlIGluIGEg
dW5pcXVlIHdheS4iCiAgICAgICAgICAgICB9LApAQCAtMTg2OSw3ICsxODcwLDcgQEAKICAgICAg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0eWxlU2hlZXRJZCIsICIkcmVm
IjogIlN0eWxlU2hlZXRJZCIsICJkZXNjcmlwdGlvbiI6ICJFbmNsb3Npbmcgc3R5bGVzaGVldCBp
ZGVudGlmaWVyLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvcmRpbmFsIiwg
InR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJUaGUgcnVsZSBvcmRpbmFsIHdpdGhp
biB0aGUgc3R5bGVzaGVldC4iIH0KKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXRo
IiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogImludGVnZXIiIH0sICJkZXNj
cmlwdGlvbiI6ICJUaGUgcnVsZSBwYXRoIHdpdGhpbiB0aGUgc3R5bGVzaGVldCAodXNpbmcgdGhl
IHJ1bGUgcGFyZW50IGhpZXJhcmNoeSkuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBydWxl
IGluIGEgdW5pcXVlIHdheS4iCiAgICAgICAgICAgICB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggNmZhODhjNDViNDc2OTI2N2IxMjFl
NWNhOTZjNDQ0YmZmOTQwZDZlZi4uZDliYjMxN2I3NTg5YWU5M2ViODhmZjhiYWI5NThiYzQzMmE2
Y2E2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
Y3BwCkBAIC02MDQsNyArNjA0LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hl
ZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICAgICAg
ICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxlKCkt
Pmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHBhcmVudEVsZW1lbnQp
OwogICAgICAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQotICAgICAgICAgICAgICAgICAgICBw
YXJlbnRTdHlsZS0+c2V0SW5saW5lU3R5bGUoc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHls
ZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0eWxlU2hlZXQtPmlkKCks
IDApKSkpOworICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0SW5saW5lU3R5bGUo
c3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKElu
c3BlY3RvckNTU0lkOjpmb3JJbmxpbmVTdHlsZShzdHlsZVNoZWV0LT5pZCgpKSkpKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaW5oZXJpdGVkU3R5bGVzLT5hZGRJdGVtKHBhcmVudFN0
eWxlLnJlbGVhc2UoKSk7CkBAIC02MzksNyArNjM5LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQg
bm8KICAgICByZWNhbGNTdHlsZUZvclBzZXVkb1N0YXRlSWZOZWVkZWQoZWxlbWVudCwgZm9yY2Vk
UHNldWRvQ2xhc3NlcyA/IGZvcmNlZFBzZXVkb0NsYXNzZXMtPmdldCgpIDogMCk7CiAKICAgICBS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5mbyA9IENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGVsZW1lbnQsIHRydWUpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3Jl
YXRlKEluc3BlY3RvckNTU0lkKCksIGNvbXB1dGVkU3R5bGVJbmZvLCAwKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZVdp
dGhTdHlsZVNoZWV0KEluc3BlY3RvckNTU0lkKCksIGNvbXB1dGVkU3R5bGVJbmZvLCAwKTsKICAg
ICBzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpOwog
fQogCkBAIC05NzksNyArOTc5LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NT
dHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXQKICAgICBpZiAo
IWF0dHJpYnV0ZVN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3Rv
ckNTU0lkKCksIGF0dHJpYnV0ZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCksIDAp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JT
dHlsZTo6Y3JlYXRlV2l0aFN0eWxlU2hlZXQoSW5zcGVjdG9yQ1NTSWQoKSwgYXR0cmlidXRlU3R5
bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgMCk7CiAgICAgcmV0dXJuIGluc3BlY3Rv
clN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCA0NDk4YWRjMTRmNzEyMTkw
NmZiMmJlNjA2OTA1YmUwMjdjNWI1MDMxLi5lZTc0OTZlZGFmMWE3NTFjZGVlYjIyOWVmNTliOWNk
NDFhMTYwYzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCkBAIC01MCw5ICs1MCw5IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVk
ZSAiU3R5bGVSdWxlSW1wb3J0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAj
aW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKLSNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIFNvdXJjZURhdGEqIHNvdXJjZURh
dGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGEuZ2V0KCk7IH0KICAgICB2b2lkIHNldFNv
dXJjZURhdGEoUGFzc093blB0cjxTb3VyY2VEYXRhPiBzb3VyY2VEYXRhKTsKICAgICBib29sIGhh
c1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGE7IH0KLSAgICBSZWZQdHI8
V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhQXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1
bGVTb3VyY2VEYXRhQXQoY29uc3QgVmVjdG9yPGludD4mIHBhdGgpIGNvbnN0OwogCiBwcml2YXRl
OgogCkBAIC0xMDIsMTIgKzEwMiwyNyBAQCB2b2lkIFBhcnNlZFN0eWxlU2hlZXQ6OnNldFNvdXJj
ZURhdGEoUGFzc093blB0cjxTb3VyY2VEYXRhPiBzb3VyY2VEYXRhKQogICAgIG1fc291cmNlRGF0
YSA9IHNvdXJjZURhdGE7CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4g
UGFyc2VkU3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
K1Bhc3NSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IFBhcnNlZFN0eWxlU2hlZXQ6
OnJ1bGVTb3VyY2VEYXRhQXQoY29uc3QgVmVjdG9yPGludD4mIHBhdGgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFoYXNTb3VyY2VEYXRhKCkgfHwgaW5kZXggPj0gbV9zb3VyY2VEYXRhLT5zaXplKCkpCisg
ICAgQVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7CisgICAgaWYgKCFoYXNTb3VyY2VEYXRhKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIG1fc291cmNlRGF0YS0+YXQoaW5kZXgpOwor
ICAgIFNvdXJjZURhdGEqIHNvdXJjZURhdGEgPSBtX3NvdXJjZURhdGEuZ2V0KCk7CisgICAgdW5z
aWduZWQgcGF0aExlbmd0aCA9IHBhdGguc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGN1cnJlbnRQ
YXRoSW5kZXggPSAwOyBjdXJyZW50UGF0aEluZGV4IDwgcGF0aExlbmd0aCAtIDE7ICsrY3VycmVu
dFBhdGhJbmRleCkgeworICAgICAgICB1bnNpZ25lZCBydWxlSW5kZXggPSBwYXRoLmF0KGN1cnJl
bnRQYXRoSW5kZXgpOworICAgICAgICBpZiAocnVsZUluZGV4ID49IHNvdXJjZURhdGEtPnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBzb3VyY2VEYXRhID0gJnNvdXJjZURh
dGEtPmF0KHJ1bGVJbmRleCktPmNoaWxkUnVsZXM7CisgICAgICAgIGlmICghc291cmNlRGF0YSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGludCBsYXN0UGF0aEl0ZW0gPSBw
YXRoLmxhc3QoKTsKKyAgICBpZiAobGFzdFBhdGhJdGVtID49IHN0YXRpY19jYXN0PGludD4oc291
cmNlRGF0YS0+c2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNvdXJjZURh
dGEtPmF0KGxhc3RQYXRoSXRlbSk7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExOSw2
ICsxMzQsMTkyIEBAIGVudW0gTWVkaWFMaXN0U291cmNlIHsKICAgICBNZWRpYUxpc3RTb3VyY2VJ
bXBvcnRSdWxlCiB9OwogCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxl
TGlzdChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQoreworICAgIGlmICghc3R5bGVTaGVldCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8U3RhdGljQ1NTUnVsZUxpc3Q+IGxpc3Qg
PSBTdGF0aWNDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NSdWxl
PiA+JiBsaXN0UnVsZXMgPSBsaXN0LT5ydWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDAs
IHNpemUgPSBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgbGlz
dFJ1bGVzLmFwcGVuZChzdHlsZVNoZWV0LT5pdGVtKGkpKTsKKyAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0
KENTU1J1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q1NTTWVkaWFSdWxlKj4ocnVsZSktPmNzc1J1bGVzKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwor
Y2xhc3MgUnVsZVZpc2l0b3IgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGZvclJ1bGVzKFBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0LCBSdWxlVmlzaXRvciYgdmlzaXRvcikKKyAg
ICB7CisgICAgICAgIGlmICghcnVsZUxpc3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHJ1bGVMaXN0LT5sZW5ndGgoKTsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgQ1NTUnVsZSogcnVsZSA9IHJ1bGVMaXN0LT5p
dGVtKGkpOworICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBzdHlsZVJ1bGUgPSBJbnNwZWN0b3JD
U1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUocnVsZSk7CisgICAgICAgICAgICBpZiAoc3R5bGVSdWxl
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IudmlzaXQoc3R5bGVSdWxlKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAocnVsZS0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBD
U1NSdWxlOjpNRURJQV9SVUxFOiB7CisgICAgICAgICAgICAgICAgICAgIENTU01lZGlhUnVsZSog
bWVkaWFSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4ocnVsZSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghdmlzaXRvci53aWxsVmlzaXRNZWRpYVJ1bGUobWVkaWFSdWxlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjaGlsZFJ1bGVMaXN0
ID0gYXNDU1NSdWxlTGlzdChydWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGls
ZFJ1bGVMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvclJ1bGVzKGNo
aWxkUnVsZUxpc3QsIHZpc2l0b3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLmRpZFZpc2l0TWVkaWFSdWxl
KG1lZGlhUnVsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLnZpc2l0KHJ1bGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5SdWxlVmlzaXRvcigp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB3aWxsVmlzaXRNZWRpYVJ1bGUoQ1NT
TWVkaWFSdWxlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkaWRWaXNpdE1lZGlhUnVsZShDU1NN
ZWRpYVJ1bGUqKSA9IDA7CisgICAgdmlydHVhbCBib29sIHZpc2l0KENTU1N0eWxlUnVsZSopID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXQoQ1NTUnVsZSopID0gMDsKK307CisKK2NsYXNzIElu
c3BlY3RvclJ1bGVUcmVlQnVpbGRlciA6IHB1YmxpYyBSdWxlVmlzaXRvciB7CitwdWJsaWM6Cisg
ICAgSW5zcGVjdG9yUnVsZVRyZWVCdWlsZGVyKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQsIEluc3BlY3RvclJ1bGVMaXN0KiBydWxlTGlzdCkKKyAgICAgICAgOiBtX3N0eWxlU2hlZXQo
c3R5bGVTaGVldCkKKyAgICB7CisgICAgICAgIG1fcnVsZUxpc3RTdGFjay5hcHBlbmQocnVsZUxp
c3QpOworICAgICAgICBtX3BhdGguYXBwZW5kKDApOworICAgIH0KKworICAgIHZpcnR1YWwgfklu
c3BlY3RvclJ1bGVUcmVlQnVpbGRlcigpIHsgfQorCisgICAgdmlydHVhbCBib29sIHdpbGxWaXNp
dE1lZGlhUnVsZShDU1NNZWRpYVJ1bGUqIHJ1bGUpCisgICAgeworICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yUnVsZT4gbWVkaWFJbnNwZWN0b3JSdWxlID0gSW5zcGVjdG9yUnVsZTo6Y3JlYXRlKElu
c3BlY3RvckNTU0lkKG1fc3R5bGVTaGVldC0+aWQoKSwgbV9wYXRoKSwgcnVsZSwgbV9zdHlsZVNo
ZWV0KTsKKyAgICAgICAgbV9ydWxlTGlzdFN0YWNrLmxhc3QoKS0+YXBwZW5kKG1lZGlhSW5zcGVj
dG9yUnVsZSk7CisgICAgICAgIG1fcnVsZUxpc3RTdGFjay5hcHBlbmQobWVkaWFJbnNwZWN0b3JS
dWxlLT5jaGlsZFJ1bGVMaXN0KCkpOworICAgICAgICBtX3BhdGguYXBwZW5kKDApOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGRpZFZpc2l0TWVkaWFS
dWxlKENTU01lZGlhUnVsZSopCisgICAgeworICAgICAgICBtX3BhdGgucmVtb3ZlTGFzdCgpOwor
ICAgICAgICBtX3J1bGVMaXN0U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHZpc2l0KENTU1N0eWxlUnVsZSogcnVsZSkK
KyAgICB7CisgICAgICAgIG1fcnVsZUxpc3RTdGFjay5sYXN0KCktPmFwcGVuZChJbnNwZWN0b3JS
dWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQobV9zdHlsZVNoZWV0LT5pZCgpLCBtX3BhdGgpLCBy
dWxlLCBtX3N0eWxlU2hlZXQpKTsKKyAgICAgICAgcmV0dXJuIHZpc2l0Q29tbW9uKCk7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0KENTU1J1bGUqIHJ1bGUpCisgICAgeworICAgICAg
ICBtX3J1bGVMaXN0U3RhY2subGFzdCgpLT5hcHBlbmQoSW5zcGVjdG9yUnVsZTo6Y3JlYXRlKElu
c3BlY3RvckNTU0lkKG1fc3R5bGVTaGVldC0+aWQoKSwgbV9wYXRoKSwgcnVsZSwgbV9zdHlsZVNo
ZWV0KSk7CisgICAgICAgIHJldHVybiB2aXNpdENvbW1vbigpOworICAgIH0KKworCitwcml2YXRl
OgorICAgIGJvb2wgdmlzaXRDb21tb24oKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGxhc3RJbmRl
eCA9IG1fcGF0aC5zaXplKCkgLSAxOworICAgICAgICBtX3BhdGhbbGFzdEluZGV4XSA9IG1fcGF0
aC5hdChsYXN0SW5kZXgpICsgMTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIG1fc3R5bGVTaGVldDsKKyAgICBWZWN0b3I8SW5zcGVjdG9y
UnVsZUxpc3QqPiBtX3J1bGVMaXN0U3RhY2s7CisgICAgVmVjdG9yPGludD4gbV9wYXRoOworfTsK
KworY2xhc3MgUnVsZVBhdGhCdWlsZGVyIDogcHVibGljIFJ1bGVWaXNpdG9yIHsKK3B1YmxpYzoK
KyAgICBSdWxlUGF0aEJ1aWxkZXIoQ1NTUnVsZSogcnVsZSwgVmVjdG9yPGludD4mIHBhdGgpCisg
ICAgICAgIDogbV9mb3VuZChmYWxzZSkKKyAgICAgICAgLCBtX3J1bGUocnVsZSkKKyAgICAgICAg
LCBtX3BhdGgocGF0aCkKKyAgICB7CisgICAgICAgIG1fcGF0aC5hcHBlbmQoMCk7CisgICAgfQor
CisgICAgdmlydHVhbCB+UnVsZVBhdGhCdWlsZGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
d2lsbFZpc2l0TWVkaWFSdWxlKENTU01lZGlhUnVsZSogcnVsZSkKKyAgICB7CisgICAgICAgIGlm
IChtX3J1bGUgPT0gcnVsZSkgeworICAgICAgICAgICAgbV9mb3VuZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGF0aC5hcHBlbmQoMCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlkVmlz
aXRNZWRpYVJ1bGUoQ1NTTWVkaWFSdWxlKikKKyAgICB7CisgICAgICAgIGlmIChtX2ZvdW5kKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgbV9wYXRoLnJlbW92ZUxhc3QoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdChD
U1NTdHlsZVJ1bGUqIHJ1bGUpCisgICAgeworICAgICAgICByZXR1cm4gdmlzaXQoc3RhdGljX2Nh
c3Q8Q1NTUnVsZSo+KHJ1bGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXQoQ1NT
UnVsZSogcnVsZSkKKyAgICB7CisgICAgICAgIGlmIChtX3J1bGUgPT0gcnVsZSkgeworICAgICAg
ICAgICAgbV9mb3VuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHNpemVfdCBsYXN0SW5kZXggPSBtX3BhdGguc2l6ZSgpIC0gMTsKKyAgICAg
ICAgbV9wYXRoW2xhc3RJbmRleF0gPSBtX3BhdGguYXQobGFzdEluZGV4KSArIDE7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGZvdW5kKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2ZvdW5kOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIG1fZm91bmQ7Cisg
ICAgQ1NTUnVsZSogbV9ydWxlOworICAgIFZlY3RvcjxpbnQ+JiBtX3BhdGg7Cit9OworCiBzdGF0
aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VS
YW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UpCiB7CiAgICAgUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6Q1NTOjpTb3Vy
Y2VSYW5nZTo6Y3JlYXRlKCkKQEAgLTE1NywzNiArMzU4LDYgQEAgc3RhdGljIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+IGJ1aWxkTWVkaWFPYmplY3QoY29uc3QgTWVkaWFM
aXN0KgogICAgIHJldHVybiBtZWRpYU9iamVjdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNz
UmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQpCi17Ci0gICAgaWYgKCFzdHlsZVNoZWV0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJl
ZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUo
KTsKLSAgICBWZWN0b3I8UmVmUHRyPENTU1J1bGU+ID4mIGxpc3RSdWxlcyA9IGxpc3QtPnJ1bGVz
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHN0eWxlU2hlZXQtPmxlbmd0aCgp
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIENTU1J1bGUqIGl0ZW0gPSBzdHlsZVNoZWV0LT5p
dGVtKGkpOwotICAgICAgICBpZiAoaXRlbS0+aXNDaGFyc2V0UnVsZSgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGxpc3RSdWxlcy5hcHBlbmQoaXRlbSk7Ci0gICAgfQotICAgIHJl
dHVybiBsaXN0LnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+
IGFzQ1NTUnVsZUxpc3QoQ1NTUnVsZSogcnVsZSkKLXsKLSAgICBpZiAoIXJ1bGUpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpCi0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihydWxlKS0+Y3NzUnVsZXMoKTsKLQotICAgIGlm
IChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YktpdENTU0tleWZyYW1lc1J1bGUqPihydWxlKS0+Y3NzUnVsZXMoKTsKLQotICAgIHJldHVybiAw
OwotfQotCiBzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSogcnVsZSwgQXJy
YXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+KiBtZWRpYUFycmF5KQogewogICAgIE1lZGlh
TGlzdCogbWVkaWFMaXN0OwpAQCAtMjQyLDcgKzQxMyw3IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRp
YUxpc3RDaGFpbihDU1NSdWxlKiBydWxlLCBBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRp
YT4qCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHls
ZTo6Y3JlYXRlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0
eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNo
ZWV0KQorUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZVdp
dGhTdHlsZVNoZWV0KGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENT
U1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHls
ZVNoZWV0KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGUoc3R5bGVJ
ZCwgc3R5bGUsIHBhcmVudFN0eWxlU2hlZXQpKTsKIH0KQEAgLTI3MSwxNCArNDQyLDE0IEBAIFBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWls
ZE9iamVjdEZvclN0eWxlKCkgY29uCiAKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNv
dXJjZURhdGEgPSBtX3BhcmVudFN0eWxlU2hlZXQgPyBtX3BhcmVudFN0eWxlU2hlZXQtPnJ1bGVT
b3VyY2VEYXRhRm9yKG1fc3R5bGUuZ2V0KCkpIDogMDsKICAgICBpZiAoc291cmNlRGF0YSkKLSAg
ICAgICAgcmVzdWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEt
PnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRS
YW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UpKTsK
IAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ID4g
SW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKK1Bhc3NS
ZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiA+
IEluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0CiB7Ci0g
ICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRl
ZFN0eWxlUHJvcGVydHk+ID4gcmVzdWx0ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVy
OjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxB
cnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ID4gcmVzdWx0
ID0gQXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pjo6Y3Jl
YXRlKCk7CiAgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IHByb3BlcnRpZXM7CiAg
ICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9wZXJ0aWVzKTsKIApAQCAtMzE0LDEwICs0ODUs
MTAgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVuc2lnbmVkIGluZGV4
LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VGV4dCwKIAogICAgIGlmIChwcm9wZXJ0eVRleHQuc3Ry
aXBXaGl0ZVNwYWNlKCkubGVuZ3RoKCkpIHsKICAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IHRlbXBNdXRhYmxlU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKLSAgICAg
ICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENTU1N0eWxlU291cmNl
RGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIENTU1BhcnNlciBwKENTU1N0cmljdE1vZGUpOwotICAg
ICAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcE11dGFibGVTdHlsZS5nZXQoKSwgcHJvcGVydHlU
ZXh0ICsgIiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBub25lIiwgJnNvdXJjZURhdGEsIG1f
c3R5bGUtPnBhcmVudFN0eWxlU2hlZXQoKS0+Y29udGVudHMoKSk7Ci0gICAgICAgIFZlY3RvcjxD
U1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5wcm9wZXJ0
eURhdGE7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENT
U1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoQ1NTUnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpOwor
ICAgICAgICBDU1NQYXJzZXIgcChtX3N0eWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmNvbnRlbnRz
KCktPnBhcnNlckNvbnRleHQoKS5tb2RlKTsKKyAgICAgICAgcC5wYXJzZURlY2xhcmF0aW9uKHRl
bXBNdXRhYmxlU3R5bGUuZ2V0KCksIHByb3BlcnR5VGV4dCArICIgIiArIGJvZ3VzUHJvcGVydHlO
YW1lICsgIjogbm9uZSIsIHNvdXJjZURhdGEsIG1fc3R5bGUtPnBhcmVudFN0eWxlU2hlZXQoKS0+
Y29udGVudHMoKSk7CisgICAgICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9w
ZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKICAg
ICAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnR5RGF0YS5zaXplKCk7CiAKICAg
ICAgICAgLy8gQXQgbGVhc3Qgb25lIHByb3BlcnR5ICsgdGhlIGJvZ3VzIHByb3BlcnR5IGFkZGVk
IGp1c3QgYWJvdmUgc2hvdWxkIGJlIHByZXNlbnQuCkBAIC0zNTUsNyArNTI2LDcgQEAgYm9vbCBJ
bnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5VGV4dCwKICAgICAgICAgKm9sZFRleHQgPSBhbGxQcm9wZXJ0aWVzLmF0KGlu
ZGV4KS5yYXdUZXh0OwogICAgICAgICBlZGl0b3IucmVwbGFjZVByb3BlcnR5KGluZGV4LCBwcm9w
ZXJ0eVRleHQpOwogICAgIH0gZWxzZQotICAgICAgICBlZGl0b3IuaW5zZXJ0UHJvcGVydHkoaW5k
ZXgsIHByb3BlcnR5VGV4dCwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlS
YW5nZS5sZW5ndGgoKSk7CisgICAgICAgIGVkaXRvci5pbnNlcnRQcm9wZXJ0eShpbmRleCwgcHJv
cGVydHlUZXh0LCBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlLmxlbmd0aCgpKTsKIAogICAgIHJl
dHVybiBhcHBseVN0eWxlVGV4dChlZGl0b3Iuc3R5bGVUZXh0KCkpOwogfQpAQCAtNDEzLDcgKzU4
NCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dChTdHJpbmcqIHJlc3VsdCkgY29u
c3QKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNvdXJj
ZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlOworICAgIFNvdXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5ydWxlQm9k
eVJhbmdlOwogICAgICpyZXN1bHQgPSBzdHlsZVNoZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJhbmdl
LnN0YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTY4Myw2ICs4NTQsMzQgQEAgTmV3TGluZUFuZFdoaXRlc3BhY2UmIEluc3BlY3Rv
clN0eWxlOjpuZXdMaW5lQW5kV2hpdGVzcGFjZURlbGltaXRlcnMoKSBjb25zdAogICAgIHJldHVy
biBtX2Zvcm1hdDsKIH0KIAorSW5zcGVjdG9yUnVsZTo6SW5zcGVjdG9yUnVsZShjb25zdCBJbnNw
ZWN0b3JDU1NJZCYgaWQsIENTU1J1bGUqIHJ1bGUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVu
dFN0eWxlU2hlZXQpCisgICAgOiBtX2lkKGlkKQorICAgICwgbV9ydWxlKHJ1bGUpCit7CisgICAg
aWYgKCFtX3J1bGUpCisgICAgICAgIHJldHVybjsgLy8gVU5LTk9XTl9SVUxFCisKKyAgICBpZiAo
bV9ydWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICBtX3N0eWxlID0gSW5zcGVjdG9yU3R5bGU6
OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KGlkLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KS0+c3R5bGUoKSwgcGFyZW50U3R5bGVTaGVldCk7CisgICAgZWxzZSBpZiAobV9ydWxlLT5pc01l
ZGlhUnVsZSgpKQorICAgICAgICBtX2NoaWxkUnVsZXMgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9y
UnVsZUxpc3QoKSk7Cit9CisKK0luc3BlY3RvclJ1bGU6OlR5cGUgSW5zcGVjdG9yUnVsZTo6dHlw
ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3J1bGUpCisgICAgICAgIHJldHVybiBVTktOT1dOX1JV
TEU7CisKKyAgICBzd2l0Y2ggKG1fcnVsZS0+dHlwZSgpKSB7CisgICAgY2FzZSBDU1NSdWxlOjpT
VFlMRV9SVUxFOgorICAgICAgICByZXR1cm4gU1RZTEVfUlVMRTsKKyAgICBjYXNlIENTU1J1bGU6
Ok1FRElBX1JVTEU6CisgICAgICAgIHJldHVybiBNRURJQV9SVUxFOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBVTktOT1dOX1JVTEU7CisgICAgfQorfQorCiBQYXNzUmVmUHRyPEluc3Bl
Y3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdl
QWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNo
ZWV0PiBwYWdlU3R5bGVTaGVldCwgVHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
RW51bSBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5l
cikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFn
ZW50LCBpZCwgcGFnZVN0eWxlU2hlZXQsIG9yaWdpbiwgZG9jdW1lbnRVUkwsIGxpc3RlbmVyKSk7
CkBAIC03MzUsNDMgKzkzNCw1MSBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3BhcnNl
ZFN0eWxlU2hlZXQtPnNldFRleHQodGV4dCk7Ci0gICAgbV9mbGF0UnVsZXMuY2xlYXIoKTsKKyAg
ICBtX3J1bGVzLmNsZWFyKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogU3RyaW5nIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnJ1bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVGb3JJZChp
ZCk7CisgICAgQ1NTUnVsZSogcnVsZSA9IHJ1bGVGb3JJZChpZCk7CiAgICAgaWYgKCFydWxlKSB7
CiAgICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0K
LSAgICByZXR1cm4gcnVsZS0+c2VsZWN0b3JUZXh0KCk7CisKKyAgICAvLyBXZSBjYW4gdHJlYXQg
Q1NTUGFnZVJ1bGUgdGhlIHNhbWUgd2F5IGhlcmUgaWYgbmVlZGVkLgorICAgIGlmIChydWxlLT5p
c1N0eWxlUnVsZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4o
cnVsZSktPnNlbGVjdG9yVGV4dCgpOworCisgICAgZWMgPSBOT1RfRk9VTkRfRVJSOworICAgIHJl
dHVybiAiIjsKIH0KIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3Io
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOwot
ICAgIGlmICghcnVsZSkgeworICAgIENTU1J1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOworICAg
IGlmICghcnVsZSB8fCAhcnVsZS0+aXNTdHlsZVJ1bGUoKSkgewogICAgICAgICBlYyA9IE5PVF9G
T1VORF9FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKKworICAgIENTU1N0eWxl
UnVsZSogc3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7CisgICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxlUnVsZS0+cGFyZW50U3R5bGVTaGVldCgp
OwogICAgIGlmICghc3R5bGVTaGVldCB8fCAhZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpIHsKICAg
ICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgcnVsZS0+c2V0U2VsZWN0b3JUZXh0KHNlbGVjdG9yKTsKLSAgICBSZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihydWxlLT5zdHlsZSgp
KTsKKyAgICBzdHlsZVJ1bGUtPnNldFNlbGVjdG9yVGV4dChzZWxlY3Rvcik7CisgICAgUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGVS
dWxlLT5zdHlsZSgpKTsKICAgICBpZiAoIXNvdXJjZURhdGEpIHsKICAgICAgICAgZWMgPSBOT1Rf
Rk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgU3RyaW5nIHNo
ZWV0VGV4dCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpOwotICAgIHNoZWV0VGV4dC5yZXBs
YWNlKHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0LCBzb3VyY2VEYXRhLT5zZWxl
Y3Rvckxpc3RSYW5nZS5lbmQgLSBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCwg
c2VsZWN0b3IpOworICAgIHNoZWV0VGV4dC5yZXBsYWNlKHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJS
YW5nZS5zdGFydCwgc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLmxlbmd0aCgpLCBzZWxlY3Rv
cik7CiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHNoZWV0VGV4dCk7CiAgICAgZmly
ZVN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC04MTksNyArMTAyNiw3
IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZGVsZXRlUnVsZShjb25zdCBJbnNwZWN0b3JD
U1NJZCYgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBzdHlsZVNoZWV0LT5kZWxldGVSdWxlKGlkLm9yZGluYWwoKSwgZWMpOworICAgIHN0
eWxlU2hlZXQtPmRlbGV0ZVJ1bGUoaWQubGFzdFBhdGhDb21wb25lbnQoKSwgZWMpOwogICAgIGlm
IChlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC04MzAsNyArMTAzNyw3IEBAIGJvb2wg
SW5zcGVjdG9yU3R5bGVTaGVldDo6ZGVsZXRlUnVsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQs
IEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgfQogCiAgICAgU3RyaW5nIHNoZWV0VGV4dCA9IG1fcGFy
c2VkU3R5bGVTaGVldC0+dGV4dCgpOwotICAgIHNoZWV0VGV4dC5yZW1vdmUoc291cmNlRGF0YS0+
c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2UuZW5kIC0gc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgKyAx
KTsKKyAgICBzaGVldFRleHQucmVtb3ZlKHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZS5zdGFy
dCwgc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5lbmQgLSBzb3VyY2VEYXRhLT5ydWxlSGVhZGVy
UmFuZ2Uuc3RhcnQgKyAxKTsKICAgICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNldFRleHQoc2hlZXRU
ZXh0KTsKICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTg0Miw5ICsxMDQ5LDIxIEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVs
ZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICBBU1NFUlQoIWlkLmlzRW1wdHkoKSk7Ci0gICAgZW5zdXJlRmxhdFJ1bGVzKCk7Ci0g
ICAgcmV0dXJuIGlkLm9yZGluYWwoKSA+PSBtX2ZsYXRSdWxlcy5zaXplKCkgPyAwIDogbV9mbGF0
UnVsZXMuYXQoaWQub3JkaW5hbCgpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkLnBhdGhBdCgw
KTsKKyAgICBpZiAoaW5kZXggPj0gbV9wYWdlU3R5bGVTaGVldC0+bGVuZ3RoKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIENTU1J1bGUqIGN1cnJlbnRSdWxlID0gbV9wYWdlU3R5bGVTaGVldC0+
aXRlbShpbmRleCk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBpZC5wYXRoTGVuZ3RoKCk7
ICsraSkgeworICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNoaWxkcmVuID0gYXNDU1NSdWxl
TGlzdChjdXJyZW50UnVsZSk7CisgICAgICAgIGluZGV4ID0gaWQucGF0aEF0KGkpOworICAgICAg
ICBpZiAoIWNoaWxkcmVuIHx8IGluZGV4ID49IGNoaWxkcmVuLT5sZW5ndGgoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgIGN1cnJlbnRSdWxlID0gY2hpbGRyZW4tPml0ZW0oaW5k
ZXgpOworICAgIH0KIAorICAgIEFTU0VSVCghY3VycmVudFJ1bGUgfHwgY3VycmVudFJ1bGUtPmlz
U3R5bGVSdWxlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihjdXJy
ZW50UnVsZSk7CiB9CiAKIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVl
dEJvZHk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCkBA
IC04NTMsMTEgKzEwNzIsMTEgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHls
ZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3QKICAgICBpZiAoIXN0
eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPENTU1J1bGVMaXN0PiBj
c3NSdWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qoc3R5bGVTaGVldCk7CisgICAgZW5zdXJlUnVsZVRy
ZWUoKTsKIAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4g
cmVzdWx0ID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKLSAgICAgICAgLnNldFJ1bGVzKGJ1aWxkQXJy
YXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpOworICAgICAgICAuc2V0UnVsZXMoYnVp
bGRUcmVlRm9yUnVsZUxpc3QoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7CiAgICAg
Ym9vbCBzdWNjZXNzID0gZ2V0VGV4dCgmc3R5bGVTaGVldFRleHQpOwpAQCAtOTA4LDE0ICsxMTI3
LDEwIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTCiAgICAgICAgICAgICByZXN1bHQtPnNldFJ1
bGVJZChpZC5hc1Byb3RvY29sVmFsdWU8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZUlkPigpKTsK
ICAgICB9CiAKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7Ci0gICAg
aWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQotICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNv
dXJjZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7Ci0gICAgaWYgKHNvdXJjZURhdGEpIHsKLSAgICAg
ICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiBzZWxlY3RvclJhbmdlID0g
VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0
U3RhcnQoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQpCi0gICAgICAgICAgICAu
c2V0RW5kKHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0U2VsZWN0b3JSYW5nZShzZWxlY3RvclJhbmdlLnJlbGVhc2UoKSk7CisgICAgaWYgKGVu
c3VyZVBhcnNlZERhdGFSZWFkeSgpKSB7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOworICAgICAg
ICBpZiAoc291cmNlRGF0YSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U2VsZWN0b3JSYW5nZShi
dWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZSkpOwogICAg
IH0KIAogICAgIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4gPiBtZWRp
YUFycmF5ID0gQXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+OjpjcmVhdGUoKTsKQEAg
LTk0OCw3ICsxMTYzLDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZSgKICAgICAgICAgU3RyaW5n
IHNoZWV0VGV4dDsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gZ2V0VGV4dCgmc2hlZXRUZXh0KTsK
ICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIGNvbnN0IFNvdXJjZVJhbmdlJiBi
b2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlOwor
ICAgICAgICAgICAgY29uc3QgU291cmNlUmFuZ2UmIGJvZHlSYW5nZSA9IHNvdXJjZURhdGEtPnJ1
bGVCb2R5UmFuZ2U7CiAgICAgICAgICAgICByZXN1bHQtPnNldENzc1RleHQoc2hlZXRUZXh0LnN1
YnN0cmluZyhib2R5UmFuZ2Uuc3RhcnQsIGJvZHlSYW5nZS5lbmQgLSBib2R5UmFuZ2Uuc3RhcnQp
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwMjAsMTMgKzEyMzUsMTMgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVGb3JJZChj
b25zdCBJbnNwZWMKIAogICAgIEluc3BlY3RvclN0eWxlTWFwOjppdGVyYXRvciBpdCA9IG1faW5z
cGVjdG9yU3R5bGVzLmZpbmQoc3R5bGUpOwogICAgIGlmIChpdCA9PSBtX2luc3BlY3RvclN0eWxl
cy5lbmQoKSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxl
ID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShpZCwgc3R5bGUsIHRoaXMpOworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0
ZVdpdGhTdHlsZVNoZWV0KGlkLCBzdHlsZSwgdGhpcyk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0
b3JTdHlsZS5yZWxlYXNlKCk7CiAgICAgfQogICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi12
b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJlbWVtYmVySW5zcGVjdG9yU3R5bGUoUmVmUHRyPElu
c3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSkKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6
cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+JiBpbnNwZWN0b3JT
dHlsZSkKIHsKICAgICBtX2luc3BlY3RvclN0eWxlcy5zZXQoaW5zcGVjdG9yU3R5bGUtPmNzc1N0
eWxlKCksIGluc3BlY3RvclN0eWxlKTsKIH0KQEAgLTEwMzYsMTIgKzEyNTEsMTIgQEAgdm9pZCBJ
bnNwZWN0b3JTdHlsZVNoZWV0Ojpmb3JnZXRJbnNwZWN0b3JTdHlsZShDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSkKICAgICBtX2luc3BlY3RvclN0eWxlcy5yZW1vdmUoc3R5bGUpOwogfQogCi1J
bnNwZWN0b3JDU1NJZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlT3JTdHlsZUlkKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdAorSW5zcGVjdG9yQ1NTSWQgSW5zcGVjdG9yU3R5bGVT
aGVldDo6cnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKLSAgICB1
bnNpZ25lZCBpbmRleCA9IHJ1bGVJbmRleEJ5U3R5bGUoc3R5bGUpOwotICAgIGlmIChpbmRleCAh
PSBVSU5UX01BWCkKLSAgICAgICAgcmV0dXJuIEluc3BlY3RvckNTU0lkKGlkKCksIGluZGV4KTsK
LSAgICByZXR1cm4gSW5zcGVjdG9yQ1NTSWQoKTsKKyAgICBWZWN0b3I8aW50PiBwYXRoID0gcnVs
ZVBhdGhCeVN0eWxlKHN0eWxlKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBJbnNwZWN0b3JDU1NJZCgpOworICAgIHJldHVybiBJbnNwZWN0b3JDU1NJZChpZCgpLCBw
YXRoKTsKIH0KIAogRG9jdW1lbnQqIEluc3BlY3RvclN0eWxlU2hlZXQ6Om93bmVyRG9jdW1lbnQo
KSBjb25zdApAQCAtMTA0OSwyMiArMTI2NCw2NSBAQCBEb2N1bWVudCogSW5zcGVjdG9yU3R5bGVT
aGVldDo6b3duZXJEb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFnZVN0eWxlU2hlZXQt
Pm93bmVyRG9jdW1lbnQoKTsKIH0KIAotUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkgY29uc3QKK1Bhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnJ1bGVTb3VyY2VEYXRhRm9yKENTU1J1bGUqIHJ1bGUpCiB7Ci0gICAgcmV0dXJuIG1fcGFy
c2VkU3R5bGVTaGVldC0+cnVsZVNvdXJjZURhdGFBdChydWxlSW5kZXhCeVN0eWxlKHN0eWxlKSk7
CisgICAgVmVjdG9yPGludD4gcGF0aDsKKyAgICBpZiAoIWVuc3VyZVNvdXJjZURhdGEoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgZW5zdXJlUnVsZVRyZWUoKTsKKyAgICBSdWxlUGF0aEJ1aWxk
ZXIgYnVpbGRlcihydWxlLCBwYXRoKTsKKyAgICBSdWxlVmlzaXRvcjo6Zm9yUnVsZXMoYXNDU1NS
dWxlTGlzdChtX3BhZ2VTdHlsZVNoZWV0LmdldCgpKSwgYnVpbGRlcik7CisgICAgaWYgKCFidWls
ZGVyLmZvdW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3BhcnNlZFN0eWxl
U2hlZXQtPnJ1bGVTb3VyY2VEYXRhQXQocGF0aCk7CiB9CiAKLXVuc2lnbmVkIEluc3BlY3RvclN0
eWxlU2hlZXQ6OnJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcGFnZVN0eWxl
KSBjb25zdAorUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gSW5zcGVjdG9yU3R5bGVTaGVl
dDo6cnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAg
ZW5zdXJlRmxhdFJ1bGVzKCk7Ci0gICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDAsIHNpemUgPSBtX2ZsYXRSdWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgaWYgKG1fZmxhdFJ1bGVzLmF0KGkpLT5zdHlsZSgpID09IHBhZ2VTdHlsZSkKLSAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICBWZWN0b3I8aW50PiBwYXRoID0gcnVsZVBhdGhC
eVN0eWxlKHN0eWxlKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBtX3BhcnNlZFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRhQXQocGF0aCk7
Cit9CiAKLSAgICAgICAgKytpbmRleDsKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZVBh
dGhCeVN0eWxlSW50ZXJuYWwoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcGFnZVN0eWxlLCBJbnNwZWN0
b3JSdWxlTGlzdCogcnVsZUxpc3QsIFZlY3RvcjxpbnQ+JiBwYXRoKQoreworICAgIEFTU0VSVChy
dWxlTGlzdCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBydWxlTGlzdC0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgSW5zcGVjdG9yUnVsZSogY2hpbGRSdWxlID0gcnVsZUxpc3QtPmF0KGkp
LmdldCgpOworICAgICAgICBpZiAoIWNoaWxkUnVsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBzd2l0Y2ggKGNoaWxkUnVsZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW5zcGVj
dG9yUnVsZTo6U1RZTEVfUlVMRToKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZFJ1bGUtPmNzc1J1
bGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRSdWxlLT5jc3NSdWxlKCktPmlzU3R5bGVS
dWxlKCkpOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGNoaWxk
UnVsZS0+Y3NzUnVsZSgpKS0+c3R5bGUoKSA9PSBwYWdlU3R5bGUpIHsKKyAgICAgICAgICAgICAg
ICBwYXRoLmFwcGVuZChpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3BlY3RvclJ1bGU6Ok1F
RElBX1JVTEU6IHsKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZFJ1bGUtPmNhbkhhdmVDaGlsZFJ1
bGVzKCkpOworICAgICAgICAgICAgcGF0aC5hcHBlbmQoaSk7CisgICAgICAgICAgICBib29sIGZv
dW5kID0gcnVsZVBhdGhCeVN0eWxlSW50ZXJuYWwocGFnZVN0eWxlLCBjaGlsZFJ1bGUtPmNoaWxk
UnVsZUxpc3QoKSwgcGF0aCk7CisgICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBwYXRoLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitWZWN0b3I8aW50PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlUGF0aEJ5U3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcGFnZVN0eWxlKQoreworICAgIFZlY3RvcjxpbnQ+IHBh
dGg7CisgICAgaWYgKCFydWxlUGF0aEJ5U3R5bGVJbnRlcm5hbChwYWdlU3R5bGUsIHJ1bGVUcmVl
KCksIHBhdGgpKQorICAgICAgICBwYXRoLmNsZWFyKCk7IC8vIENsZWFyIGluIHRoZSBjYXNlIG9m
IGFuIGVycm9yLgorICAgIHJldHVybiBwYXRoOwogfQogCiBib29sIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpCkBAIC0xMDgzLDcgKzEzNDEsNyBAQCBib29sIElu
c3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVRleHQoKSBjb25zdAogICAgIGJvb2wgc3VjY2VzcyA9
IG9yaWdpbmFsU3R5bGVTaGVldFRleHQoJnRleHQpOwogICAgIGlmIChzdWNjZXNzKQogICAgICAg
ICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNldFRleHQodGV4dCk7Ci0gICAgLy8gTm8gbmVlZCB0byBj
bGVhciBtX2ZsYXRSdWxlcyBoZXJlIC0gaXQncyBlbXB0eS4KKyAgICAvLyBObyBuZWVkIHRvIGNs
ZWFyIG1fcnVsZXMgaGVyZSAtIGl0J3MgZW1wdHkuCiAKICAgICByZXR1cm4gc3VjY2VzczsKIH0K
QEAgLTEwOTcsMzEgKzEzNTUsMjEgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVT
b3VyY2VEYXRhKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPFN0eWxlU2hl
ZXRDb250ZW50cz4gbmV3U3R5bGVTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCk7
Ci0gICAgQ1NTUGFyc2VyIHAoQ1NTU3RyaWN0TW9kZSk7Ci0gICAgU3R5bGVSdWxlUmFuZ2VNYXAg
cnVsZVJhbmdlTWFwOwotICAgIHAucGFyc2VTaGVldChuZXdTdHlsZVNoZWV0LmdldCgpLCBtX3Bh
cnNlZFN0eWxlU2hlZXQtPnRleHQoKSwgMCwgJnJ1bGVSYW5nZU1hcCk7Ci0gICAgT3duUHRyPFBh
cnNlZFN0eWxlU2hlZXQ6OlNvdXJjZURhdGE+IHJhbmdlc1ZlY3RvcihhZG9wdFB0cihuZXcgUGFy
c2VkU3R5bGVTaGVldDo6U291cmNlRGF0YSkpOwotCi0gICAgVmVjdG9yPENTU1N0eWxlUnVsZSo+
IHJ1bGVzOwotICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QgPSBhc0NTU1J1bGVMaXN0
KENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShuZXdTdHlsZVNoZWV0KS5nZXQoKSk7Ci0gICAgY29sbGVj
dEZsYXRSdWxlcyhydWxlTGlzdCwgJnJ1bGVzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBz
aXplID0gcnVsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0eWxlUnVsZVJh
bmdlTWFwOjppdGVyYXRvciBpdCA9IHJ1bGVSYW5nZU1hcC5maW5kKHJ1bGVzLmF0KGkpLT5zdHls
ZVJ1bGUoKSk7Ci0gICAgICAgIGlmIChpdCAhPSBydWxlUmFuZ2VNYXAuZW5kKCkpIHsKLSAgICAg
ICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoaXQtPnNlY29uZC5nZXQoKSwgbV9wYXJz
ZWRTdHlsZVNoZWV0LT50ZXh0KCkpOwotICAgICAgICAgICAgcmFuZ2VzVmVjdG9yLT5hcHBlbmQo
aXQtPnNlY29uZCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQ1NTUGFyc2VyIHAobV9wYWdlU3R5
bGVTaGVldC0+Y29udGVudHMoKS0+cGFyc2VyQ29udGV4dCgpLm1vZGUpOworICAgIE93blB0cjxQ
YXJzZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhPiB0YXJnZXRSYW5nZXNUcmVlKGFkb3B0UHRyKG5l
dyBQYXJzZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhKSk7CisgICAgcC5wYXJzZVNoZWV0KG5ld1N0
eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCAwLCB0YXJnZXRSYW5n
ZXNUcmVlLmdldCgpKTsKIAotICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0U291cmNlRGF0YShy
YW5nZXNWZWN0b3IucmVsZWFzZSgpKTsKKyAgICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNldFNvdXJj
ZURhdGEodGFyZ2V0UmFuZ2VzVHJlZS5yZWxlYXNlKCkpOwogICAgIHJldHVybiBtX3BhcnNlZFN0
eWxlU2hlZXQtPmhhc1NvdXJjZURhdGEoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0
OjplbnN1cmVGbGF0UnVsZXMoKSBjb25zdAordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1
cmVSdWxlVHJlZSgpCiB7CiAgICAgLy8gV2UgYXJlIGZpbmUgd2l0aCByZWRvaW5nIHRoaXMgZm9y
IGVtcHR5IHN0eWxlc2hlZXRzIGFzIHRoaXMgd2lsbCBydW4gZmFzdC4KLSAgICBpZiAobV9mbGF0
UnVsZXMuaXNFbXB0eSgpKQotICAgICAgICBjb2xsZWN0RmxhdFJ1bGVzKGFzQ1NTUnVsZUxpc3Qo
cGFnZVN0eWxlU2hlZXQoKSksICZtX2ZsYXRSdWxlcyk7CisgICAgaWYgKG1fcnVsZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIEluc3BlY3RvclJ1bGVUcmVlQnVpbGRlciBidWlsZGVyKHRoaXMsICZt
X3J1bGVzKTsKKyAgICAgICAgUnVsZVZpc2l0b3I6OmZvclJ1bGVzKGFzQ1NTUnVsZUxpc3QobV9w
YWdlU3R5bGVTaGVldC5nZXQoKSksIGJ1aWxkZXIpOworICAgIH0KIH0KIAogYm9vbCBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNv
bnN0IFN0cmluZyYgdGV4dCkKQEAgLTExNTcsOCArMTQwNSw4IEBAIGJvb2wgSW5zcGVjdG9yU3R5
bGVTaGVldDo6c3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKLSAgICB1bnNpZ25l
ZCBib2R5U3RhcnQgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdl
LnN0YXJ0OwotICAgIHVuc2lnbmVkIGJvZHlFbmQgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURh
dGEtPnN0eWxlQm9keVJhbmdlLmVuZDsKKyAgICB1bnNpZ25lZCBib2R5U3RhcnQgPSBzb3VyY2VE
YXRhLT5ydWxlQm9keVJhbmdlLnN0YXJ0OworICAgIHVuc2lnbmVkIGJvZHlFbmQgPSBzb3VyY2VE
YXRhLT5ydWxlQm9keVJhbmdlLmVuZDsKICAgICBBU1NFUlQoYm9keVN0YXJ0IDw9IGJvZHlFbmQp
OwogCiAgICAgU3RyaW5nIHRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKQEAgLTEx
NjksMzAgKzE0MTcsMjcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VGV4
dFdpdGhDaGFuZ2VkU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotSW5zcGVjdG9yQ1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUlkKENTU1N0
eWxlUnVsZSogcnVsZSkgY29uc3QKK0luc3BlY3RvckNTU0lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJ1bGVJZChDU1NSdWxlKiBydWxlKQogewotICAgIHJldHVybiBydWxlT3JTdHlsZUlkKHJ1bGUt
PnN0eWxlKCkpOworICAgIHJldHVybiBmaW5kUnVsZUlkKHJ1bGUsIHJ1bGVUcmVlKCkpOwogfQog
Ci12b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBwYWdlU3R5bGUpCisvLyBzdGF0aWMKK0luc3BlY3RvckNTU0lkIEluc3BlY3RvclN0
eWxlU2hlZXQ6OmZpbmRSdWxlSWQoQ1NTUnVsZSogcnVsZSwgSW5zcGVjdG9yUnVsZUxpc3QqIHJ1
bGVMaXN0KQogewotICAgIGlmIChtX2lzUmV2YWxpZGF0aW5nKQotICAgICAgICByZXR1cm47Cisg
ICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBydWxlTGlzdC0+c2l6ZSgpOyBpIDwgc2l6ZTsg
KytpKSB7CisgICAgICAgIGlmIChydWxlTGlzdC0+YXQoaSktPmNzc1J1bGUoKSA9PSBydWxlKQor
ICAgICAgICAgICAgcmV0dXJuIHJ1bGVMaXN0LT5hdChpKS0+aWQoKTsKIAotICAgIG1faXNSZXZh
bGlkYXRpbmcgPSB0cnVlOwotICAgIGVuc3VyZUZsYXRSdWxlcygpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIHNpemUgPSBtX2ZsYXRSdWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgQ1NTU3R5bGVSdWxlKiBwYXJzZWRSdWxlID0gbV9mbGF0UnVsZXMuYXQoaSk7Ci0gICAg
ICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpID09IHBhZ2VTdHlsZSkgewotICAgICAgICAgICAg
aWYgKHBhcnNlZFJ1bGUtPnN0eWxlUnVsZSgpLT5wcm9wZXJ0aWVzKCktPmFzVGV4dCgpICE9IHBh
Z2VTdHlsZS0+Y3NzVGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGRpc2Fi
bGVkIHByb3BlcnRpZXMgZm9yIHRoZSBpbnZhbGlkIHN0eWxlIGhlcmUuCi0gICAgICAgICAgICAg
ICAgbV9pbnNwZWN0b3JTdHlsZXMucmVtb3ZlKHBhZ2VTdHlsZSk7Ci0gICAgICAgICAgICAgICAg
c2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFnZVN0eWxlLT5jc3NUZXh0KCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEluc3BlY3RvclJ1bGVMaXN0KiBjaGls
ZFJ1bGVMaXN0ID0gcnVsZUxpc3QtPmF0KGkpLT5jaGlsZFJ1bGVMaXN0KCk7CisgICAgICAgIGlm
IChjaGlsZFJ1bGVMaXN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JDU1NJZCBpZCA9IGZpbmRS
dWxlSWQocnVsZSwgY2hpbGRSdWxlTGlzdCk7CisgICAgICAgICAgICBpZiAoIWlkLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaWQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9p
c1JldmFsaWRhdGluZyA9IGZhbHNlOworCisgICAgcmV0dXJuIEluc3BlY3RvckNTU0lkKCk7CiB9
CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6b3JpZ2luYWxTdHlsZVNoZWV0VGV4dChTdHJp
bmcqIHJlc3VsdCkgY29uc3QKQEAgLTEyMzcsODMgKzE0ODIsMjcgQEAgYm9vbCBJbnNwZWN0b3JT
dHlsZVNoZWV0OjppbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5Rm9y
UnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0
OjphcHBlbmRUb1J1bGVBcnJheShJbnNwZWN0b3JSdWxlTGlzdCogcnVsZUxpc3QsIFJlZlB0cjxB
cnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+JiByZXN1bHQpCiB7Ci0gICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+IHJlc3VsdCA9
IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRlKCk7
Ci0gICAgaWYgKCFydWxlTGlzdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci0K
LSAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJlZlJ1bGVMaXN0ID0gcnVsZUxpc3Q7Ci0gICAgVmVj
dG9yPENTU1N0eWxlUnVsZSo+IHJ1bGVzOwotICAgIGNvbGxlY3RGbGF0UnVsZXMocmVmUnVsZUxp
c3QsICZydWxlcyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JSdWxlKHJ1bGVzLmF0KGkpKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENT
U1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0VGV4dCkK
LXsKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gcnVs
ZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIHVuc2lnbmVkIHNpemUg
PSBwcm9wZXJ0eURhdGEuc2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0
eWxlQm9keVJhbmdlLnN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3R5bGVT
aGVldFRleHQuY2hhcmFjdGVycygpOwotICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogbmV4dERh
dGEgPSAmKHByb3BlcnR5RGF0YS5hdCgwKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIGN1cnJlbnREYXRh
ID0gbmV4dERhdGE7Ci0gICAgICAgIG5leHREYXRhID0gaSA8IHNpemUgLSAxID8gJihwcm9wZXJ0
eURhdGEuYXQoaSArIDEpKSA6IDA7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRP
aykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdl
LmVuZCA+IDAgJiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVu
ZCAtIDFdID09ICc7JykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVuc2lnbmVk
IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0OwotICAgICAgICBpZiAoIW5leHREYXRhKQotICAgICAg
ICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5lbmQgLSAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9w
ZXJ0eUVuZEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBuZXh0RGF0YS0+cmFuZ2Uuc3RhcnQg
LSAxOwotCi0gICAgICAgIHdoaWxlIChpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3Byb3BlcnR5RW5k
SW5TdHlsZVNoZWV0XSkpCi0gICAgICAgICAgICAtLXByb3BlcnR5RW5kSW5TdHlsZVNoZWV0Owot
Ci0gICAgICAgIC8vIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IHBvaW50cyBhdCB0aGUgbGFzdCBw
cm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KLSAgICAgICAgdW5zaWduZWQgbmV3UHJvcGVydHlFbmQg
PSBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHN0eWxlU3RhcnQgKyAxOyAvLyBFeGNsdXNpdmUg
b2YgdGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0ZXIuCi0gICAgICAgIGlmIChjdXJyZW50
RGF0YS0+cmFuZ2UuZW5kICE9IG5ld1Byb3BlcnR5RW5kKSB7Ci0gICAgICAgICAgICBjdXJyZW50
RGF0YS0+cmFuZ2UuZW5kID0gbmV3UHJvcGVydHlFbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2
YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIGN1cnJlbnREYXRhLT5yYW5nZS5z
dGFydCArIGN1cnJlbnREYXRhLT5uYW1lLmxlbmd0aCgpOwotICAgICAgICAgICAgd2hpbGUgKHZh
bHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBjaGFyYWN0
ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdICE9ICc6JykKLSAgICAgICAgICAgICAgICArK3Zh
bHVlU3RhcnRJblN0eWxlU2hlZXQ7Ci0gICAgICAgICAgICBpZiAodmFsdWVTdGFydEluU3R5bGVT
aGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0KQotICAgICAgICAgICAgICAgICsrdmFsdWVT
dGFydEluU3R5bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0aGUgJzonLgotICAgICAgICAgICAgd2hp
bGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBp
c0hUTUxTcGFjZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdKSkKLSAgICAgICAg
ICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7Ci0gICAgICAgICAgICAvLyBOZWVkIHRv
IGV4Y2x1ZGUgdGhlIHRyYWlsaW5nICc7JyBmcm9tIHRoZSBwcm9wZXJ0eSB2YWx1ZS4KLSAgICAg
ICAgICAgIGN1cnJlbnREYXRhLT52YWx1ZSA9IHN0eWxlU2hlZXRUZXh0LnN1YnN0cmluZyh2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0LCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHZhbHVlU3RhcnRJ
blN0eWxlU2hlZXQgKyAoY2hhcmFjdGVyc1twcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0gPT0gJzsn
ID8gMCA6IDEpKTsKLSAgICAgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBy
dWxlTGlzdC0+c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JSdWxlPiYgcnVsZSA9IHJ1bGVMaXN0LT5hdChpKTsKKyAgICAgICAgaWYgKHJ1bGUtPnR5cGUo
KSA9PSBJbnNwZWN0b3JSdWxlOjpTVFlMRV9SVUxFKQorICAgICAgICAgICAgcmVzdWx0LT5hZGRJ
dGVtKGJ1aWxkT2JqZWN0Rm9yUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlTGlz
dC0+YXQoaSktPmNzc1J1bGUoKSkpKTsKKyAgICAgICAgZWxzZSBpZiAocnVsZS0+Y2FuSGF2ZUNo
aWxkUnVsZXMoKSkKKyAgICAgICAgICAgIGFwcGVuZFRvUnVsZUFycmF5KHJ1bGUtPmNoaWxkUnVs
ZUxpc3QoKSwgcmVzdWx0KTsKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6
Y29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCwgVmVjdG9y
PENTU1N0eWxlUnVsZSo+KiByZXN1bHQpCitQYXNzUmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpD
U1M6OkNTU1J1bGU+ID4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRUcmVlRm9yUnVsZUxpc3Qo
KQogewotICAgIGlmICghcnVsZUxpc3QpCi0gICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8QXJy
YXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiByZXN1bHQgPSBBcnJheTxUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRlKCk7CisgICAgSW5zcGVjdG9yUnVsZUxpc3QqIHJ1bGVM
aXN0ID0gcnVsZVRyZWUoKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBydWxl
TGlzdC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgQ1NTUnVsZSogcnVsZSA9
IHJ1bGVMaXN0LT5pdGVtKGkpOwotICAgICAgICBDU1NTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9IElu
c3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShydWxlKTsKLSAgICAgICAgaWYgKHN0eWxl
UnVsZSkKLSAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHN0eWxlUnVsZSk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjaGlsZFJ1bGVMaXN0ID0gYXND
U1NSdWxlTGlzdChydWxlKTsKLSAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVMaXN0KQotICAgICAg
ICAgICAgICAgIGNvbGxlY3RGbGF0UnVsZXMoY2hpbGRSdWxlTGlzdCwgcmVzdWx0KTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICAvLyBGSVhNRTogVGhpcyByZWN1cnNpb24gaXMgaGVyZSBvbmx5IGZv
ciB0aGUgdHJhbnNpdGlvbmFsIHBlcmlvZCwgd2hlbiB3ZSBzdG9yZSB0aGUgZW50aXJlIHJ1bGUg
dHJlZQorICAgIC8vIGJ1dCBwcm92aWRlIGEgZmxhdCBydWxlIGxpc3QgZm9yIHN0eWxlc2hlZXRz
IGluIHRoZSBwcm90b2NvbC4gT25jZSBkb25lLCB3ZSdsbCBuZWVkIHRvIG9ubHkgdHJhdmVyc2UK
KyAgICAvLyB0aGUgbV9ydWxlcyBsaXN0LCBhbmQgYnVpbGRPYmplY3RGb3JSdWxlKCkgd2lsbCBi
dWlsZCBhbGwgY2hpbGQgcnVsZXMgcmVjdXJzaXZlbHkgZm9yIHVzLgorICAgIGFwcGVuZFRvUnVs
ZUFycmF5KHJ1bGVMaXN0LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
fQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwg
VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIExpc3RlbmVy
KiBsaXN0ZW5lcikKQEAgLTEzMjgsNyArMTUxNyw3IEBAIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBh
CiAgICAgLCBtX2lzU3R5bGVUZXh0VmFsaWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVu
dCk7Ci0gICAgbV9pbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVj
dG9yQ1NTSWQoaWQsIDApLCBpbmxpbmVTdHlsZSgpLCB0aGlzKTsKKyAgICBtX2luc3BlY3RvclN0
eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KEluc3BlY3RvckNTU0lk
Ojpmb3JJbmxpbmVTdHlsZShpZCksIGlubGluZVN0eWxlKCksIHRoaXMpOwogICAgIG1fc3R5bGVU
ZXh0ID0gbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IG1fZWxlbWVudC0+Z2V0QXR0cmli
dXRlKCJzdHlsZSIpLnN0cmluZygpIDogU3RyaW5nKCk7CiB9CiAKQEAgLTEzMzYsNyArMTUyNSw3
IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpkaWRNb2RpZnlFbGVt
ZW50QXR0cmlidXRlKCkKIHsKICAgICBtX2lzU3R5bGVUZXh0VmFsaWQgPSBmYWxzZTsKICAgICBp
ZiAobV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSAmJiBtX2VsZW1lbnQtPnN0eWxlKCkgIT0g
bV9pbnNwZWN0b3JTdHlsZS0+Y3NzU3R5bGUoKSkKLSAgICAgICAgbV9pbnNwZWN0b3JTdHlsZSA9
IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoaWQoKSwgMCksIGlubGluZVN0
eWxlKCksIHRoaXMpOworICAgICAgICBtX2luc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6
OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KEluc3BlY3RvckNTU0lkOjpmb3JJbmxpbmVTdHlsZShpZCgp
KSwgaW5saW5lU3R5bGUoKSwgdGhpcyk7CiAgICAgbV9ydWxlU291cmNlRGF0YS5jbGVhcigpOwog
fQogCkBAIC0xMzg0LDE5ICsxNTczLDE3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQogICAgIGlmIChtX3J1bGVTb3VyY2VE
YXRhKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fcnVsZVNvdXJjZURhdGEgPSBDU1NS
dWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoJnNvdXJjZURhdGEpOworICAgIG1fcnVsZVNv
dXJjZURhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKENTU1J1bGVTb3VyY2VEYXRhOjpT
VFlMRV9SVUxFKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyht
X3J1bGVTb3VyY2VEYXRhKTsKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIG1fcnVsZVNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YSA9IHNvdXJjZURhdGEu
cmVsZWFzZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclN0
eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Omluc3BlY3RvclN0eWxlRm9y
SWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKQogewotICAgIEFTU0VSVF9VTlVTRUQoaWQsICFp
ZC5vcmRpbmFsKCkpOworICAgIEFTU0VSVF9VTlVTRUQoaWQsICFpZC5wYXRoQXQoMCkpOwogICAg
IHJldHVybiBtX2luc3BlY3RvclN0eWxlOwogfQogCkBAIC0xNDEwLDE0ICsxNTk3LDE0IEBAIGNv
bnN0IFN0cmluZyYgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjplbGVtZW50U3R5
bGVUZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0eWxl
Iikuc3RyaW5nKCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
OjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiogcmVz
dWx0KSBjb25zdAorYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmdldFN0
eWxlQXR0cmlidXRlUmFuZ2VzKFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mIHJlc3VsdCkgY29u
c3QKIHsKICAgICBpZiAoIW1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGlmIChtX3N0eWxlVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
KCpyZXN1bHQpLT5zdHlsZUJvZHlSYW5nZS5zdGFydCA9IDA7Ci0gICAgICAgICgqcmVzdWx0KS0+
c3R5bGVCb2R5UmFuZ2UuZW5kID0gMDsKKyAgICAgICAgcmVzdWx0LT5ydWxlQm9keVJhbmdlLnN0
YXJ0ID0gMDsKKyAgICAgICAgcmVzdWx0LT5ydWxlQm9keVJhbmdlLmVuZCA9IDA7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggMDNjYWI2NzdkMjI0M2M3ZDVjNDY1MDMwNDI4MWRkNjky
YzE3Yzk4Ny4uNjZlNzg2MGQ4YmY0YmYxMmI3ZjBiYTY2MGI4MmU3NmE3YzI4ZmM5MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC00MCw5
ICs0MCwxMSBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogY2xhc3MgUGFyc2VkU3R5bGVT
aGVldDsKK3N0cnVjdCBSdWxlTGlzdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBD
U1NSdWxlOwogY2xhc3MgQ1NTUnVsZUxpc3Q7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwog
Y2xhc3MgQ1NTU3R5bGVSdWxlOwpAQCAtNTAsMTUgKzUyLDMyIEBAIGNsYXNzIENTU1N0eWxlU2hl
ZXQ7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBJbnNwZWN0b3JQYWdl
QWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JSdWxlOwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsK
IGNsYXNzIE5vZGU7CitjbGFzcyBSdWxlVmlzaXRvcjsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPElu
c3BlY3RvclJ1bGU+ID4gSW5zcGVjdG9yUnVsZUxpc3Q7CiAKIGNsYXNzIEluc3BlY3RvckNTU0lk
IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgSW5zcGVjdG9yQ1NTSWQgZm9ySW5saW5lU3R5bGUoY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQpCisgICAgeworICAgICAgICBWZWN0b3I8aW50PiBwYXRo
OworICAgICAgICBwYXRoLmFwcGVuZCgwKTsKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvckNTU0lk
KHN0eWxlU2hlZXRJZCwgcGF0aCk7CisgICAgfQorCisgICAgc3RhdGljIEluc3BlY3RvckNTU0lk
IGZvclBhcmVudFBhdGgoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFZlY3Rvcjxp
bnQ+JiBwYXJlbnRQYXRoLCBpbnQgaW5kZXgpCisgICAgeworICAgICAgICBWZWN0b3I8aW50PiBw
YXRoKHBhcmVudFBhdGgpOworICAgICAgICBwYXRoLmFwcGVuZChpbmRleCk7CisgICAgICAgIHJl
dHVybiBJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0SWQsIHBhdGgpOworICAgIH0KKwogICAgIElu
c3BlY3RvckNTU0lkKCkgeyB9CiAKICAgICBleHBsaWNpdCBJbnNwZWN0b3JDU1NJZChSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKQEAgLTY2LDIxICs4NSwzNSBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmICghdmFsdWUtPmdldFN0cmluZygic3R5bGVTaGVldElkIiwgJm1fc3R5bGVTaGVldElk
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gb3JkaW5hbFZhbHVlID0gdmFsdWUtPmdldCgib3JkaW5hbCIpOwotICAgICAgICBp
ZiAoIW9yZGluYWxWYWx1ZSB8fCAhb3JkaW5hbFZhbHVlLT5hc051bWJlcigmbV9vcmRpbmFsKSkK
KyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbmRleFZhbHVlcyA9IHZhbHVlLT5nZXRB
cnJheSgicGF0aCIpOworICAgICAgICBpZiAoIWluZGV4VmFsdWVzKSB7CiAgICAgICAgICAgICBt
X3N0eWxlU2hlZXRJZCA9ICIiOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFZhbHVlcy0+bGVuZ3RoKCk7ICsraSkg
eworICAgICAgICAgICAgaW50IGluZGV4OworICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlcy0+
Z2V0KGkpLT5hc051bWJlcigmaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgbV9zdHlsZVNoZWV0
SWQgPSAiIjsKKyAgICAgICAgICAgICAgICBtX3BhdGguY2xlYXIoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BhdGguYXBwZW5kKGluZGV4
KTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIEluc3BlY3RvckNTU0lkKGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCB1bnNpZ25lZCBvcmRpbmFsKQorICAgIEluc3BlY3RvckNTU0lkKGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBWZWN0b3I8aW50PiYgcGF0aCkKICAgICAgICAgOiBtX3N0
eWxlU2hlZXRJZChzdHlsZVNoZWV0SWQpCi0gICAgICAgICwgbV9vcmRpbmFsKG9yZGluYWwpCisg
ICAgICAgICwgbV9wYXRoKHBhdGgpCiAgICAgewogICAgIH0KIAogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldElkLmlzRW1wdHkoKTsgfQogCiAgICAgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRJZDsgfQot
ICAgIHVuc2lnbmVkIG9yZGluYWwoKSBjb25zdCB7IHJldHVybiBtX29yZGluYWw7IH0KKyAgICBp
bnQgcGF0aEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IEFTU0VSVChpbmRleCA8IG1fcGF0aC5z
aXplKCkpOyByZXR1cm4gbV9wYXRoLmF0KGluZGV4KTsgfQorICAgIGludCBsYXN0UGF0aENvbXBv
bmVudCgpIGNvbnN0IHsgQVNTRVJUKG1fcGF0aC5zaXplKCkgPiAwKTsgcmV0dXJuIG1fcGF0aC5s
YXN0KCk7IH0KKyAgICBzaXplX3QgcGF0aExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5z
aXplKCk7IH0KIAogICAgIC8vIElEIHR5cGUgaXMgZWl0aGVyIFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1N0eWxlSWQgb3IgVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZUlkLgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElEPgpAQCAtODksMTUgKzEyMiwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChpc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAorICAgICAgICBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PGludD4gPiBwYXJlbnRDaGFpbiA9IFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+Ojpj
cmVhdGUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhdGguc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBwYXJlbnRDaGFpbi0+YWRkSXRlbShzdGF0aWNfY2FzdDxpbnQ+KG1f
cGF0aC5hdChpKSkpOworCiAgICAgICAgIFJlZlB0cjxJRD4gcmVzdWx0ID0gSUQ6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAuc2V0U3R5bGVTaGVldElkKG1fc3R5bGVTaGVldElkKQotICAgICAgICAg
ICAgLnNldE9yZGluYWwobV9vcmRpbmFsKTsKKyAgICAgICAgICAgIC5zZXRQYXRoKHBhcmVudENo
YWluKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgfQogCiBwcml2YXRl
OgogICAgIFN0cmluZyBtX3N0eWxlU2hlZXRJZDsKLSAgICB1bnNpZ25lZCBtX29yZGluYWw7Cisg
ICAgVmVjdG9yPGludD4gbV9wYXRoOwogfTsKIAogc3RydWN0IEluc3BlY3RvclN0eWxlUHJvcGVy
dHkgewpAQCAtMTMxLDcgKzE2OCw3IEBAIHN0cnVjdCBJbnNwZWN0b3JTdHlsZVByb3BlcnR5IHsK
IAogY2xhc3MgSW5zcGVjdG9yU3R5bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JTdHls
ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBjcmVh
dGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxlSWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNs
YXJhdGlvbj4gc3R5bGUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBjcmVhdGVXaXRoU3R5bGVTaGVl
dChjb25zdCBJbnNwZWN0b3JDU1NJZCYsIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4s
IEluc3BlY3RvclN0eWxlU2hlZXQqKTsKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZSgpOwog
CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlLmdldCgpOyB9CkBAIC0xNjEsNiArMTk4LDg4IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBi
b29sIG1fZm9ybWF0QWNxdWlyZWQ7CiB9OwogCitjbGFzcyBJbnNwZWN0b3JSdWxlIDogcHVibGlj
IFJlZkNvdW50ZWQ8SW5zcGVjdG9yUnVsZT4geworcHVibGljOgorICAgIGVudW0gVHlwZSB7Cisg
ICAgICAgIFVOS05PV05fUlVMRSwKKyAgICAgICAgU1RZTEVfUlVMRSwKKyAgICAgICAgSU1QT1JU
X1JVTEUsCisgICAgICAgIE1FRElBX1JVTEUsCisgICAgICAgIEZPTlRfRkFDRV9SVUxFLAorICAg
ICAgICBQQUdFX1JVTEUsCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
clJ1bGU+IGNyZWF0ZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIENTU1J1bGUqIHJ1bGUsIElu
c3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclJ1bGUoaWQsIHJ1bGUsIHBhcmVudFN0eWxlU2hlZXQp
KTsKKyAgICB9CisKKyAgICBjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faWQ7CisgICAgfQorCisgICAgVHlwZSB0eXBlKCkgY29uc3Q7CisKKyAgICBD
U1NSdWxlKiBjc3NSdWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3J1bGUuZ2V0
KCk7CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGUqIHN0eWxlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3N0eWxlLmdldCgpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kQ2hp
bGQoUGFzc1JlZlB0cjxJbnNwZWN0b3JSdWxlPiBjaGlsZFJ1bGUpCisgICAgeworICAgICAgICBB
U1NFUlQodHlwZSgpID09IE1FRElBX1JVTEUpOworICAgICAgICBtX2NoaWxkUnVsZXMtPmFwcGVu
ZChjaGlsZFJ1bGUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHN0eWxlUnVsZUNvdW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgIGNhc2UgSU1QT1JU
X1JVTEU6CisgICAgICAgIGNhc2UgU1RZTEVfUlVMRToKKyAgICAgICAgY2FzZSBQQUdFX1JVTEU6
CisgICAgICAgIGNhc2UgRk9OVF9GQUNFX1JVTEU6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgY2FzZSBNRURJQV9SVUxFOiB7CisgICAgICAgICAgICBpZiAoIW1fY2hpbGRSdWxlcykK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbV9jaGlsZFJ1bGVzLT5z
aXplKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
UnVsZT4mIHJ1bGUgPSBtX2NoaWxkUnVsZXMtPmF0KGkpOworICAgICAgICAgICAgICAgIGlmIChy
dWxlKQorICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBydWxlLT5zdHlsZVJ1bGVDb3VudCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgICB9Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGJvb2wgY2FuSGF2ZUNoaWxkUnVsZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEhbV9jaGlsZFJ1bGVzOworICAgIH0KKworICAgIEluc3BlY3RvclJ1bGVMaXN0KiBjaGls
ZFJ1bGVMaXN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NoaWxkUnVsZXMuZ2V0KCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEluc3BlY3RvclJ1bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQm
LCBDU1NSdWxlKiwgSW5zcGVjdG9yU3R5bGVTaGVldCopOworCisgICAgSW5zcGVjdG9yQ1NTSWQg
bV9pZDsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gbV9ydWxlOworICAgIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZT4gbV9zdHlsZTsKKyAgICBtdXRhYmxlIE93blB0cjxJbnNwZWN0b3JSdWxlTGlzdD4gbV9j
aGlsZFJ1bGVzOworfTsKKwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldCA6IHB1YmxpYyBSZWZD
b3VudGVkPEluc3BlY3RvclN0eWxlU2hlZXQ+IHsKIHB1YmxpYzoKICAgICBjbGFzcyBMaXN0ZW5l
ciB7CkBAIC0xOTcsMjEgKzMxNiwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJikgY29uc3Q7CiAgICAg
dm9pZCBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKIAotICAgIEluc3BlY3RvckNTU0lkIHJ1bGVJ
ZChDU1NTdHlsZVJ1bGUqKSBjb25zdDsKLSAgICBJbnNwZWN0b3JDU1NJZCBzdHlsZUlkKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVybiBydWxlT3JTdHlsZUlkKHN0eWxl
KTsgfQorICAgIEluc3BlY3RvckNTU0lkIHJ1bGVJZChDU1NSdWxlKik7CisgICAgSW5zcGVjdG9y
Q1NTSWQgc3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgeyByZXR1cm4gcnVsZU9y
U3R5bGVJZChzdHlsZSk7IH0KIAogcHJvdGVjdGVkOgogICAgIEluc3BlY3RvclN0eWxlU2hlZXQo
SW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHls
ZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgVHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdp
bjo6RW51bSwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKIAogICAgIGJv
b2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9IFR5cGVCdWlsZGVyOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJfYWdlbnQgJiYgbV9vcmlnaW4gIT0gVHlwZUJ1aWxkZXI6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcjsgfQotICAgIEluc3BlY3RvckNTU0lkIHJ1bGVP
clN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OworICAgIEluc3BlY3Rv
ckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwogICAgIHZpcnR1YWwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKikgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgdmly
dHVhbCBWZWN0b3I8aW50PiBydWxlUGF0aEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwog
ICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRhUmVhZHkoKTsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVj
dG9yQ1NTSWQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQ
dHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9y
Z2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpOworICAgIHZpcnR1
YWwgdm9pZCByZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4mKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlv
biopOwogCiAgICAgLy8gQWxzbyBhY2Nlc3NlZCBieSBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5
bGUuCiAgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiwg
Y29uc3QgU3RyaW5nJik7CkBAIC0yMTksMTcgKzMzOCwyMiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JTdHlsZTsKIAotICAgIHN0YXRpYyB2b2lkIGZp
eFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRUZXh0KTsKLSAgICBzdGF0aWMgdm9pZCBjb2xsZWN0RmxhdFJ1
bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+LCBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4qIHJlc3Vs
dCk7CisgICAgc3RhdGljIEluc3BlY3RvckNTU0lkIGZpbmRSdWxlSWQoQ1NTUnVsZSosIEluc3Bl
Y3RvclJ1bGVMaXN0Kik7CisgICAgc3RhdGljIGJvb2wgZm9yUnVsZXMoUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4sIFJ1bGVWaXNpdG9yJik7CisgICAgdm9pZCBmaWxsUnVsZUxpc3QoQ1NTUnVsZUxp
c3QqLCBJbnNwZWN0b3JSdWxlTGlzdCosIFZlY3RvcjxpbnQ+Jik7CiAgICAgYm9vbCBlbnN1cmVU
ZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVTb3VyY2VEYXRhKCk7Ci0gICAgdm9pZCBlbnN1
cmVGbGF0UnVsZXMoKSBjb25zdDsKKyAgICB2b2lkIGVuc3VyZVJ1bGVUcmVlKCk7CisgICAgSW5z
cGVjdG9yUnVsZUxpc3QqIHJ1bGVUcmVlKCkgeyBlbnN1cmVSdWxlVHJlZSgpOyByZXR1cm4gJm1f
cnVsZXM7IH0KKyAgICBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0
YUZvcihDU1NSdWxlKik7CisgICAgYm9vbCBydWxlUGF0aEJ5U3R5bGVJbnRlcm5hbChDU1NTdHls
ZURlY2xhcmF0aW9uKiwgSW5zcGVjdG9yUnVsZUxpc3QqLCBWZWN0b3I8aW50PiYpOwogICAgIGJv
b2wgc3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBj
b25zdCBTdHJpbmcmIG5ld1N0eWxlVGV4dCwgU3RyaW5nKiByZXN1bHQpOwotICAgIHZvaWQgcmV2
YWxpZGF0ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIHJldmFsaWRhdGVT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgSW5zcGVjdG9yUnVsZUxpc3QqKTsKICAgICBib29s
IG9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wg
cmVzb3VyY2VTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgYm9vbCBp
bmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBidWlsZEFy
cmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqKTsKKyAgICB2b2lkIGFwcGVuZFRvUnVsZUFycmF5
KEluc3BlY3RvclJ1bGVMaXN0KiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NSdWxlPiA+Jik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBidWlsZFRyZWVGb3JSdWxlTGlzdCgpOwogCiAg
ICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBTdHJpbmcgbV9pZDsKQEAg
LTIzOSw3ICszNjMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1JldmFsaWRhdGluZzsKICAg
ICBQYXJzZWRTdHlsZVNoZWV0KiBtX3BhcnNlZFN0eWxlU2hlZXQ7CiAgICAgSW5zcGVjdG9yU3R5
bGVNYXAgbV9pbnNwZWN0b3JTdHlsZXM7Ci0gICAgbXV0YWJsZSBWZWN0b3I8Q1NTU3R5bGVSdWxl
Kj4gbV9mbGF0UnVsZXM7CisgICAgbXV0YWJsZSBJbnNwZWN0b3JSdWxlTGlzdCBtX3J1bGVzOwog
ICAgIExpc3RlbmVyKiBtX2xpc3RlbmVyOwogfTsKIApAQCAtMjQ5LDE3ICszNzMsMTcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkaWRNb2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiAgICAgdmlydHVh
bCBib29sIGdldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0
IHsgQVNTRVJUX1VOVVNFRChpZCwgIWlkLm9yZGluYWwoKSk7IHJldHVybiBpbmxpbmVTdHlsZSgp
OyB9CisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IElu
c3BlY3RvckNTU0lkJiBpZCkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKGlkLCAhaWQucGF0aEF0KDAp
KTsgcmV0dXJuIGlubGluZVN0eWxlKCk7IH0KIAogcHJvdGVjdGVkOgogICAgIEluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcm
IGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+LCBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpFbnVtLCBMaXN0ZW5lciopOwogCiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1
bWVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxl
U291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyBBU1NFUlRf
VU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJj
ZURhdGE7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiopIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKSB7IEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOyBy
ZXR1cm4gbV9ydWxlU291cmNlRGF0YTsgfQorICAgIHZpcnR1YWwgVmVjdG9yPGludD4gcnVsZVBh
dGhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSB7IFZlY3RvcjxpbnQ+IHBhdGg7IHBhdGgu
YXBwZW5kKDApOyByZXR1cm4gcGF0aDsgfQogICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWRE
YXRhUmVhZHkoKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3Bl
Y3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+KSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+
JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIGZvcmdldEluc3BlY3RvclN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qKSB7IH0KIAogICAgIC8vIEFsc28gYWNjZXNzZWQgYnkgZnJpZW5kIGNsYXNzIElu
c3BlY3RvclN0eWxlLgpAQCAtMjY4LDcgKzM5Miw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAg
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUoKSBjb25zdDsKICAgICBjb25zdCBT
dHJpbmcmIGVsZW1lbnRTdHlsZVRleHQoKSBjb25zdDsKLSAgICBib29sIGdldFN0eWxlQXR0cmli
dXRlUmFuZ2VzKFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiByZXN1bHQpIGNvbnN0OworICAg
IGJvb2wgZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiYg
cmVzdWx0KSBjb25zdDsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBtX3J1bGVTb3VyY2VEYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146272</attachid>
            <date>2012-06-07 06:19:20 -0700</date>
            <delta_ts>2012-06-07 07:18:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88420-20120607171918.patch</filename>
            <type>text/plain</type>
            <size>51299</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY1MWEyMDIyNDY5YTFj
ZmUwNzFhOTZmNmMwZmIyOTg4NDhhOTBmNi4uMWJlY2VhMGU4YzUwMzJmMGRlNjU5MjZmZTAyOTg1
MmNmYWVkZjZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA2LTA3ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUHJvdmlkZSBzb3VyY2UgZGF0YSBmb3IgYWxsIGtub3duIHJ1bGUgdHlwZXMgaW4gQ1NT
UGFyc2VyLCBleGNlcHQgImtleWZyYW1lIiBhbmQgInJlZ2lvbiIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGVyZSBpcyBu
byBjbGllbnQtdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuIEV4aXN0aW5nIEluc3BlY3RvciB0ZXN0
cyB3aWxsIGJlIG1vZGlmaWVkCisgICAgICAgIHRvIHRlc3QgdGhlIG5ldyBkYXRhIHByb3ZpZGVk
LCBhbG9uZyB3aXRoIHRoZSBuZWNlc3NhcnkgSW5zcGVjdG9yIHBsdW1iaW5nLgorCisgICAgICAg
ICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gpOiBDaGVjayBmb3IgbWVkaWFR
dWVyaWVzKCkgdmFsaWRpdHkgYmVmb3JlIHJlYXR0YWNoaW5nLgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOiBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgYmVsb3csIHRoZSBtZXRob2Qg
Y2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgZXh0ZW5zaW9uIG9mIHRoZQorICAgICAgICBzb3Vy
Y2UtYmFzZWQgQ1NTIG1vZGVsIHByb3ZpZGVkIGJ5IHRoZSBwYXJzZXIuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OkNTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNldHVwUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTaGVldCk6
IEZpbGwgYSB0cmVlIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBkYXRhIGVudHJpZXMuCisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOiBBY2NlcHQgYSBDU1NSdWxl
U291cmNlRGF0YSBmb3IgZmlsbGluZywgc2luY2UgaXQgbm93IGNvbnRhaW5zCisgICAgICAgIHRo
ZSByZWxhdGVkIHN0eWxlIHNvdXJjZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6Y3JlYXRlSW1wb3J0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0
ZU1lZGlhUnVsZSk6IENyZWF0ZSBDU1NNZWRpYVJ1bGUgZXZlbiBpZiBtZWRpYSBhbmQgcnVsZXMg
YXJlIGVtcHR5LAorICAgICAgICB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggTW96aWxsYS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkTmV3UnVsZVRvU291cmNlVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dXBkYXRlVG9wUnVs
ZUJvZHlFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjcmVhdGVSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyk6IFByb2Nlc3MgaW52YWxpZCBDU1MgcHJvcGVy
dGllcyB0byBwcm92aWRlIGNvcnJlY3Qgc291cmNlIGNvZGUgZGF0YSBmb3IgdGhlbS4KKyAgICAg
ICAgVGhpcyB3YXMgbW92ZWQgZnJvbSBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAoYXMgdGhpcyBt
ZXRob2QgYWN0dWFsbHkgYmVsb25ncyBpbiB0aGUgcGFyc2VyKS4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6bWFya0F0UnVsZUhlYWRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6bWFya1J1bGVIZWFkZXJFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjptYXJrUnVsZUJvZHlTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtS
dWxlQm9keUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVu
ZCk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAoQ1NTUGFyc2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cmVzZXRSdWxlSGVhZGVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwb3BSdWxlQm9keVJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cmVzZXRQcm9wZXJ0eVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cG9wUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjppc0V4
dHJhY3RpbmdTb3VyY2VEYXRhKToKKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRh
Lmg6IEV4dGVuZCB0aGUgbW9kZWwgdG8gaGFuZGxlIG1vcmUgdHlwZXMgb2YgcnVsZXMgYW5kIHRo
ZWlyIGNvbnRhaW5tZW50cy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChDU1NSdWxlU291cmNlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YTo6Q1NTUnVsZVNvdXJjZURhdGEpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDogRm9sbG93IHRoZSBD
U1NQYXJzZXIgQVBJIGNoYW5nZXMgYnV0IHJldGFpbiB0aGUgc3RvcmVkIENTUyBydWxlcyBzdHJ1
Y3R1cmUuCisgICAgICAgIChQYXJzZWRTdHlsZVNoZWV0Ojpzb3VyY2VEYXRhKToKKyAgICAgICAg
KFBhcnNlZFN0eWxlU2hlZXQpOgorICAgICAgICAoZmxhdHRlblNvdXJjZURhdGEpOiBGbGF0dGVu
IHRoZSBydWxlIHRyZWUgdG8gcmV0YWluIHRoZSBleGlzdGluZyBydWxlLWhhbmRsaW5nIGNvZGUg
aW50YWN0LgorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldDo6c2V0U291cmNlRGF0YSk6CisgICAg
ICAgIChQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmVuc3VyZVBh
cnNlZERhdGFSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGU6OmdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgorICAgICAgICAoSW5zcGVjdG9yU3R5bGVTaGVldCk6
CisgICAgICAgIChJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUpOgorCiAyMDEyLTA2
LTA3ICBBcnBpdGEgQmFodWd1bmEgIDxhcnBpdGFiYWh1Z3VuYUBnbWFpbC5jb20+CiAKICAgICAg
ICAgSW5zZXJ0VW5vcmRlcmVkTGlzdCBhbmQgSW5zZXJ0T3JkZXJlZExpc3QgKGV4ZWNDb21tYW5k
KSBkbyBub3QgcmVtb3ZlIGJ1bGxldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CmluZGV4IDllZGRj
MTdhMTA5YTQ1YTVhMGI5M2QwZWJmMDhkNWQ5NTA2YTM1YjkuLjc5YTIzMjZkNmM4NzFiMDhlNTI1
Njk1MDE3ZjAyOGQ0YTQ3NDBhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQpAQCAtMzgyLDYg
KzM4Miw4IEBAIGNoYXJzZXQ6CiAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1Bh
cnNlcio+KHBhcnNlcik7CiAgICAgIGlmIChwLT5tX3N0eWxlU2hlZXQpCiAgICAgICAgICBwLT5t
X3N0eWxlU2hlZXQtPnBhcnNlclNldEVuY29kaW5nRnJvbUNoYXJzZXRSdWxlKCQzKTsKKyAgICAg
aWYgKHAtPmlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSAmJiBwLT5tX2N1cnJlbnRSdWxlRGF0YVN0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgIHAtPm1fcnVsZVNvdXJjZURhdGFSZXN1bHQtPmFwcGVu
ZChDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bigpKTsKICAgICAgJCQgPSAwOwogICB9
CiAgIHwgQ0hBUlNFVF9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CkBAIC00MTAsMTUgKzQxMiwy
NSBAQCBydWxlX2xpc3Q6CiAgOwogCiB2YWxpZF9ydWxlOgotICAgIGJlZm9yZV9ydWxlc2V0IHJ1
bGVzZXQgeworICAgIGJlZm9yZV9zdHlsZV9ydWxlIHJ1bGVzZXQgeworICAgICAgICAkJCA9ICQy
OworICAgIH0KKyAgfCBiZWZvcmVfbWVkaWFfcnVsZSBtZWRpYSB7CisgICAgICAgICQkID0gJDI7
CisgICAgfQorICB8IGJlZm9yZV9wYWdlX3J1bGUgcGFnZSB7CisgICAgICAgICQkID0gJDI7Cisg
ICAgfQorICB8IGJlZm9yZV9mb250X2ZhY2VfcnVsZSBmb250X2ZhY2UgeworICAgICAgICAkJCA9
ICQyOworICAgIH0KKyAgfCBiZWZvcmVfa2V5ZnJhbWVzX3J1bGUga2V5ZnJhbWVzIHsKICAgICAg
ICAgJCQgPSAkMjsKICAgICB9Ci0gIHwgbWVkaWEKLSAgfCBwYWdlCi0gIHwgZm9udF9mYWNlCi0g
IHwga2V5ZnJhbWVzCiAgIHwgbmFtZXNwYWNlCi0gIHwgaW1wb3J0CisgIHwgYmVmb3JlX2ltcG9y
dF9ydWxlIGltcG9ydCB7CisgICAgICAgICQkID0gJDI7CisgICAgfQogICB8IHJlZ2lvbgogICA7
CiAKQEAgLTQ0NCwxMCArNDU2LDE4IEBAIGJsb2NrX3J1bGVfbGlzdDoKICAgOwogCiBibG9ja192
YWxpZF9ydWxlOgotICAgIHJ1bGVzZXQKLSAgfCBwYWdlCi0gIHwgZm9udF9mYWNlCi0gIHwga2V5
ZnJhbWVzCisgICAgYmVmb3JlX3N0eWxlX3J1bGUgcnVsZXNldCB7CisgICAgICAgICQkID0gJDI7
CisgICAgfQorICB8IGJlZm9yZV9wYWdlX3J1bGUgcGFnZSB7CisgICAgICAgICQkID0gJDI7Cisg
ICAgfQorICB8IGJlZm9yZV9mb250X2ZhY2VfcnVsZSBmb250X2ZhY2UgeworICAgICAgICAkJCA9
ICQyOworICAgIH0KKyAgfCBiZWZvcmVfa2V5ZnJhbWVzX3J1bGUga2V5ZnJhbWVzIHsKKyAgICAg
ICAgJCQgPSAkMjsKKyAgICB9CiAgIDsKIAogYmxvY2tfcnVsZToKQEAgLTQ1NSwyNiArNDc1LDQw
IEBAIGJsb2NrX3J1bGU6CiAgIHwgaW52YWxpZF9ydWxlCiAgIHwgaW52YWxpZF9hdAogICB8IG5h
bWVzcGFjZQotICB8IGltcG9ydAotICB8IG1lZGlhCisgIHwgYmVmb3JlX2ltcG9ydF9ydWxlIGlt
cG9ydCB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9yZV9tZWRpYV9ydWxlIG1l
ZGlhIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CiAgIDsKIAorYXRfaW1wb3J0X2hlYWRlcl9l
bmRfbWF5YmVfc3BhY2U6CisgICAgbWF5YmVfc3BhY2UgeworICAgICAgICBDU1NQYXJzZXIqIHAg
PSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBwLT5tYXJrUnVsZUhl
YWRlckVuZCgpOworICAgICAgICBwLT5tYXJrUnVsZUJvZHlTdGFydCgpOworICAgIH0KKyAgICA7
CiAKIGltcG9ydDoKLSAgICBJTVBPUlRfU1lNIG1heWJlX3NwYWNlIHN0cmluZ19vcl91cmkgbWF5
YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCAnOycgeworICAgIElNUE9SVF9TWU0gYXRfaW1wb3J0
X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9t
ZWRpYV9saXN0ICc7JyB7CiAgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKS0+Y3JlYXRlSW1wb3J0UnVsZSgkMywgJDUpOwogICAgIH0KLSAgfCBJTVBPUlRfU1lNIG1h
eWJlX3NwYWNlIHN0cmluZ19vcl91cmkgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCBUT0tF
Tl9FT0YgeworICB8IElNUE9SVF9TWU0gYXRfaW1wb3J0X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ug
c3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0IFRPS0VOX0VPRiB7CiAg
ICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlSW1wb3J0
UnVsZSgkMywgJDUpOwogICAgIH0KLSAgfCBJTVBPUlRfU1lNIG1heWJlX3NwYWNlIHN0cmluZ19v
cl91cmkgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCBpbnZhbGlkX2Jsb2NrIHsKKyAgfCBJ
TVBPUlRfU1lNIGF0X2ltcG9ydF9oZWFkZXJfZW5kX21heWJlX3NwYWNlIHN0cmluZ19vcl91cmkg
bWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCBpbnZhbGlkX2Jsb2NrIHsKICAgICAgICAgJCQg
PSAwOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0
YSgpOwogICAgIH0KICAgfCBJTVBPUlRfU1lNIGVycm9yICc7JyB7CiAgICAgICAgICQkID0gMDsK
KyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsK
ICAgICB9CiAgIHwgSU1QT1JUX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKICAgICAgICAgJCQg
PSAwOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0
YSgpOwogICAgIH0KICAgOwogCkBAIC01OTksMTUgKzYzMywzNiBAQCBtZWRpYV9saXN0OgogICAg
IH0KICAgICA7CiAKK2F0X3J1bGVfYm9keV9zdGFydDoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAg
ICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAg
ICAgIHAtPm1hcmtSdWxlQm9keVN0YXJ0KCk7CisgICAgfQorICAgIDsKKworYXRfbm9uX2RlY2xh
cmF0aW9uX2JvZHlfc3RhcnQ6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBDU1NQYXJzZXIq
IHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBwLT5tYXJrUnVs
ZUJvZHlTdGFydChmYWxzZSk7CisgICAgfQorICAgIDsKKworYXRfbWVkaWFfaGVhZGVyX2VuZF9t
YXliZV9zcGFjZToKKyAgICBtYXliZV9zcGFjZSB7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1Bh
cnNlcio+KHBhcnNlciktPm1hcmtSdWxlSGVhZGVyRW5kKCk7CisgICAgfQorICAgIDsKKwogbWVk
aWE6Ci0gICAgTUVESUFfU1lNIG1heWJlX3NwYWNlIG1lZGlhX2xpc3QgJ3snIG1heWJlX3NwYWNl
IGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKLSAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxD
U1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUoJDMsICQ2KTsKKyAgICBNRURJQV9T
WU0gbWF5YmVfc3BhY2UgbWVkaWFfbGlzdCBhdF9ydWxlX2hlYWRlcl9lbmQgJ3snIGF0X25vbl9k
ZWNsYXJhdGlvbl9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Js
b2NrIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVh
dGVNZWRpYVJ1bGUoJDMsICQ4KTsKICAgICB9Ci0gICAgfCBNRURJQV9TWU0gbWF5YmVfc3BhY2Ug
J3snIG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKLSAgICAgICAgJCQg
PSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUoMCwgJDUp
OworICAgIHwgTUVESUFfU1lNIGF0X21lZGlhX2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UgJ3snIGF0
X25vbl9kZWNsYXJhdGlvbl9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBz
YXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
LT5jcmVhdGVNZWRpYVJ1bGUoMCwgJDYpOwogICAgIH0KLSAgICB8IE1FRElBX1NZTSBtYXliZV9z
cGFjZSAnOycgeworICAgIHwgTUVESUFfU1lNIGF0X21lZGlhX2hlYWRlcl9lbmRfbWF5YmVfc3Bh
Y2UgJzsnIHsKICAgICAgICAgJCQgPSAwOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIq
PihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KICAgICA7CiAKQEAgLTYxOCw5ICs2NzMs
OSBAQCBtZWRpdW06CiAgIDsKIAoga2V5ZnJhbWVzOgotICAgIFdFQktJVF9LRVlGUkFNRVNfU1lN
IG1heWJlX3NwYWNlIGtleWZyYW1lX25hbWUgbWF5YmVfc3BhY2UgJ3snIG1heWJlX3NwYWNlIGtl
eWZyYW1lc19ydWxlICd9JyB7Ci0gICAgICAgICQkID0gJDc7Ci0gICAgICAgICQ3LT5zZXROYW1l
KCQzKTsKKyAgICBXRUJLSVRfS0VZRlJBTUVTX1NZTSBtYXliZV9zcGFjZSBrZXlmcmFtZV9uYW1l
IG1heWJlX3NwYWNlIGF0X3J1bGVfaGVhZGVyX2VuZCAneycgYXRfbm9uX2RlY2xhcmF0aW9uX2Jv
ZHlfc3RhcnQgbWF5YmVfc3BhY2Uga2V5ZnJhbWVzX3J1bGUgJ30nIHsKKyAgICAgICAgJCQgPSAk
OTsKKyAgICAgICAgJDktPnNldE5hbWUoJDMpOwogICAgIH0KICAgICA7CiAgIApAQCAtNjM1LDYg
KzY5MCw5IEBAIGtleWZyYW1lc19ydWxlOgogICAgICAgICAkJCA9ICQxOwogICAgICAgICBpZiAo
JDIpCiAgICAgICAgICAgICAkJC0+cGFyc2VyQXBwZW5kS2V5ZnJhbWUoJDIpOworICAgICAgICBD
U1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBp
ZiAocC0+aXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICAgICAgcC0+dXBkYXRlVG9w
UnVsZUJvZHlFbmQoKTsKICAgICB9CiAgICAgOwogCkBAIC02NzMsOCArNzMxLDggQEAga2V5Ogog
ICAgIDsKIAogcGFnZToKLSAgICBQQUdFX1NZTSBtYXliZV9zcGFjZSBwYWdlX3NlbGVjdG9yIG1h
eWJlX3NwYWNlCi0gICAgJ3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9uc19hbmRfbWFyZ2lucyBj
bG9zaW5nX2JyYWNlIHsKKyAgICBQQUdFX1NZTSBtYXliZV9zcGFjZSBwYWdlX3NlbGVjdG9yIG1h
eWJlX3NwYWNlIGF0X3J1bGVfaGVhZGVyX2VuZAorICAgICd7JyBhdF9ydWxlX2JvZHlfc3RhcnQg
bWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uc19hbmRfbWFyZ2lucyBj
bG9zaW5nX2JyYWNlIHsKICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyKj4ocGFyc2VyKTsKICAgICAgICAgaWYgKCQzKQogICAgICAgICAgICAgJCQgPSBwLT5jcmVh
dGVQYWdlUnVsZShwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkMykpOwpAQCAtNjgzLDEzICs3NDEs
MTYgQEAgcGFnZToKICAgICAgICAgICAgIHAtPmNsZWFyUHJvcGVydGllcygpOwogICAgICAgICAg
ICAgLy8gQWxzbyBjbGVhciBtYXJnaW4gYXQtcnVsZXMgaGVyZSBvbmNlIHdlIGZ1bGx5IGltcGxl
bWVudCBtYXJnaW4gYXQtcnVsZXMgcGFyc2luZy4KICAgICAgICAgICAgICQkID0gMDsKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgfCBQQUdFX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKICAg
ICAgICQkID0gMDsKKyAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1
bGVEYXRhKCk7CiAgICAgfQogICAgIHwgUEFHRV9TWU0gZXJyb3IgJzsnIHsKICAgICAgICQkID0g
MDsKKyAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7
CiAgICAgfQogICAgIDsKIApAQCAtNzg1LDE1ICs4NDYsMTcgQEAgbWFyZ2luX3N5bSA6CiAgICAg
OwogCiBmb250X2ZhY2U6Ci0gICAgRk9OVF9GQUNFX1NZTSBtYXliZV9zcGFjZQotICAgICd7JyBt
YXliZV9zcGFjZSBkZWNsYXJhdGlvbl9saXN0ICd9JyAgbWF5YmVfc3BhY2UgeworICAgIEZPTlRf
RkFDRV9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kIG1heWJlX3NwYWNlCisgICAgJ3snIGF0X3J1bGVf
Ym9keV9zdGFydCBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlz
dCAnfScgIG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIq
PihwYXJzZXIpLT5jcmVhdGVGb250RmFjZVJ1bGUoKTsKICAgICB9CiAgICAgfCBGT05UX0ZBQ0Vf
U1lNIGVycm9yIGludmFsaWRfYmxvY2sgewogICAgICAgJCQgPSAwOworICAgICAgc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAgICB9CiAgICAgfCBGT05U
X0ZBQ0VfU1lNIGVycm9yICc7JyB7CiAgICAgICAkJCA9IDA7CisgICAgICBzdGF0aWNfY2FzdDxD
U1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KIDsKIApAQCAtODQwLDIy
ICs5MDMsNTcgQEAgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uOgogICAgIH0KICAgOwog
Ci1iZWZvcmVfcnVsZXNldDoKK2JlZm9yZV9zdHlsZV9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsK
KyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsK
KyAgICAgICAgcC0+bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KCk7CisgICAgfQorICA7CisKK2Jl
Zm9yZV9tZWRpYV9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgQ1NTUGFyc2VyKiBw
ID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKKyAgICAgICAgcC0+bWFya0F0UnVs
ZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpNRURJQV9SVUxFKTsKKyAgICB9CisgIDsK
KworYmVmb3JlX2ltcG9ydF9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgQ1NTUGFy
c2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKKyAgICAgICAgcC0+bWFy
a0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpJTVBPUlRfUlVMRSk7CisgICAg
fQorICA7CisKK2JlZm9yZV9mb250X2ZhY2VfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAg
ICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAg
ICAgIHAtPm1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6Rk9OVF9GQUNF
X1JVTEUpOworICAgIH0KKyAgOworCitiZWZvcmVfcGFnZV9ydWxlOgorICAgIC8qIGVtcHR5ICov
IHsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2Vy
KTsKKyAgICAgICAgcC0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpQ
QUdFX1JVTEUpOworICAgIH0KKyAgOworCitiZWZvcmVfa2V5ZnJhbWVzX3J1bGU6CiAgICAgLyog
ZW1wdHkgKi8gewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIq
PihwYXJzZXIpOwotICAgICAgICBwLT5tYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKKyAgICAgICAg
cC0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpLRVlGUkFNRVNfUlVM
RSk7CiAgICAgfQogICA7CiAKLWJlZm9yZV9ydWxlX29wZW5pbmdfYnJhY2U6CithdF9ydWxlX2hl
YWRlcl9lbmQ6CiAgICAgLyogZW1wdHkgKi8gewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwotICAgICAgICBwLT5tYXJrU2VsZWN0b3JMaXN0
RW5kKCk7CisgICAgICAgIHAtPm1hcmtSdWxlSGVhZGVyRW5kKCk7CiAgICAgfQogICA7CiAKIHJ1
bGVzZXQ6Ci0gICAgc2VsZWN0b3JfbGlzdCBiZWZvcmVfcnVsZV9vcGVuaW5nX2JyYWNlICd7JyBt
YXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2Jy
YWNlIHsKKyAgICBzZWxlY3Rvcl9saXN0IGF0X3J1bGVfaGVhZGVyX2VuZCAneycgbWF5YmVfc3Bh
Y2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7CiAg
ICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CiAg
ICAgICAgICQkID0gcC0+Y3JlYXRlU3R5bGVSdWxlKCQxKTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NNZWRpYVJ1bGUuY3BwCmluZGV4IDZkYjMyMGMyNzBkOGY4YWNlZTdkZjMzZDNhMTdhM2UzYzI3
NjYzODYuLjU1YmJhYTVmZGEyNTYwMWE3NGU4NTM0YWNkZWM5Zjc3MmEwNzE4YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBDU1NNZWRp
YVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKiBydWxlKQogewogICAgIEFTU0VSVChydWxl
KTsKICAgICBtX21lZGlhUnVsZSA9IHJ1bGU7Ci0gICAgaWYgKG1fbWVkaWFDU1NPTVdyYXBwZXIp
CisgICAgaWYgKG1fbWVkaWFDU1NPTVdyYXBwZXIgJiYgbV9tZWRpYVJ1bGUtPm1lZGlhUXVlcmll
cygpKQogICAgICAgICBtX21lZGlhQ1NTT01XcmFwcGVyLT5yZWF0dGFjaChtX21lZGlhUnVsZS0+
bWVkaWFRdWVyaWVzKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkUnVs
ZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVyc1tpXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggOTczMzQyZDA5MDgw
OTk3OWZiOTBlNjAxOTRlNmI5Y2Y2NjYxODAxMy4uOTc3OWUxYjllZTZjYmE4OTZiODM5MDhiMGFh
ZDEwNzIyMWRhNmVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTIzNiwxMSArMjM2
LDkgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4
dCkKICAgICAsIG1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZShmYWxzZSkKICAgICAsIG1f
ZGVmYXVsdE5hbWVzcGFjZShzdGFyQXRvbSkKICAgICAsIG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0
aW9uKGZhbHNlKQotICAgICwgbV9zZWxlY3Rvckxpc3RSYW5nZSgwLCAwKQotICAgICwgbV9ydWxl
Qm9keVJhbmdlKDAsIDApCisgICAgLCBtX2hlYWRlclJhbmdlKDAsIDApCiAgICAgLCBtX3Byb3Bl
cnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQotICAgICwgbV9ydWxlUmFuZ2VNYXAoMCkKLSAg
ICAsIG1fY3VycmVudFJ1bGVEYXRhKDApCisgICAgLCBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KDAp
CiAgICAgLCBtX3BhcnNpbmdNb2RlKE5vcm1hbE1vZGUpCiAgICAgLCBtX2N1cnJlbnRDaGFyYWN0
ZXIoMCkKICAgICAsIG1fdG9rZW5TdGFydCgwKQpAQCAtMjg1LDYgKzI4Myw3IEBAIHZvaWQgQ1NT
UGFyc2VyU3RyaW5nOjpsb3dlcigpCiAKIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25z
dCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyKiBzdWZmaXgp
CiB7CisgICAgbV9wYXJzZWRUZXh0ID0gc3RyaW5nOwogICAgIGludCBsZW5ndGggPSBzdHJpbmcu
bGVuZ3RoKCkgKyBzdHJsZW4ocHJlZml4KSArIHN0cmxlbihzdWZmaXgpICsgMTsKIAogICAgIG1f
ZGF0YVN0YXJ0ID0gYWRvcHRBcnJheVB0cihuZXcgVUNoYXJbbGVuZ3RoXSk7CkBAIC0zMDEsMjQg
KzMwMCwxOSBAQCB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4
LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhcgogICAgIG1fZGF0YVN0YXJ0W2xlbmd0
aCAtIDFdID0gMDsKIAogICAgIG1fY3VycmVudENoYXJhY3RlciA9IG1fdG9rZW5TdGFydCA9IG1f
ZGF0YVN0YXJ0LmdldCgpOwotICAgIHJlc2V0UnVsZUJvZHlNYXJrcygpOwogfQogCi12b2lkIENT
U1BhcnNlcjo6cGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBTdHJp
bmcmIHN0cmluZywgaW50IHN0YXJ0TGluZU51bWJlciwgU3R5bGVSdWxlUmFuZ2VNYXAqIHJ1bGVS
YW5nZU1hcCkKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyog
c2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBWZWN0b3I8
UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+KiBydWxlU291cmNlRGF0YVJlc3VsdCkKIHsKICAg
ICBzZXRTdHlsZVNoZWV0KHNoZWV0KTsKICAgICBtX2RlZmF1bHROYW1lc3BhY2UgPSBzdGFyQXRv
bTsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgotICAgIG1fcnVsZVJhbmdlTWFwID0g
cnVsZVJhbmdlTWFwOwotICAgIGlmIChydWxlUmFuZ2VNYXApIHsKLSAgICAgICAgbV9jdXJyZW50
UnVsZURhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fY3VycmVu
dFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgp
OwotICAgIH0KKyAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0ID0gcnVsZVNvdXJjZURhdGFSZXN1
bHQ7CiAKICAgICBtX2xpbmVOdW1iZXIgPSBzdGFydExpbmVOdW1iZXI7CiAgICAgc2V0dXBQYXJz
ZXIoIiIsIHN0cmluZywgIiIpOwogICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgbV9ydWxlUmFu
Z2VNYXAgPSAwOwotICAgIG1fY3VycmVudFJ1bGVEYXRhID0gMDsKKyAgICBtX3J1bGVTb3VyY2VE
YXRhUmVzdWx0ID0gMDsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmNsZWFyKCk7CiAgICAg
bV9ydWxlID0gMDsKIH0KIApAQCAtMTExOSwxNiArMTExMywxNyBAQCB2b2lkIENTU1BhcnNlcjo6
cGFyc2VTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTU2VsZWN0b3JMaXN0JiBzZWxl
Y3RvckxpcwogICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9IDA7CiB9CiAKLWJv
b2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0
aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHN0
eWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKK2Jv
b2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0
aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
cnVsZVNvdXJjZURhdGEsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7
CiAgICAgLy8gTGVuZ3RoIG9mIHRoZSAiQC13ZWJraXQtZGVjbHN7IiBwcmVmaXguCiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDE1OwogCiAgICAgc2V0U3R5bGVTaGVl
dChjb250ZXh0U3R5bGVTaGVldCk7CiAKLSAgICBpZiAoc3R5bGVTb3VyY2VEYXRhKSB7Ci0gICAg
ICAgIG1fY3VycmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAg
ICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VE
YXRhOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VE
YXRhUmVmID0gcnVsZVNvdXJjZURhdGE7CisgICAgaWYgKHJ1bGVTb3VyY2VEYXRhUmVmKSB7Cisg
ICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2suYXBwZW5kKHJ1bGVTb3VyY2VEYXRhUmVmKTsK
KyAgICAgICAgbV9ydWxlQm9keVJhbmdlU3RhY2suYXBwZW5kKFNvdXJjZVJhbmdlKCkpOwogICAg
ICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IHRydWU7CiAgICAgfQogCkBAIC0xMTQ1
LDE5ICsxMTQwLDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJv
cGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0CiAgICAgICAgIGNsZWFyUHJv
cGVydGllcygpOwogICAgIH0KIAotICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YSkgewotICAgICAg
ICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFy
dCA9IDA7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxl
Qm9keVJhbmdlLmVuZCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8Q1NT
UHJvcGVydHlTb3VyY2VEYXRhPjo6aXRlcmF0b3IgaXQgPSBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5
bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYmVnaW4oKSwgZW5kSXQgPSBtX2N1cnJlbnRSdWxl
RGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuZW5kKCk7IGl0ICE9IGVuZEl0OyAr
K2l0KSB7Ci0gICAgICAgICAgICAoKml0KS5yYW5nZS5zdGFydCAtPSBwcmVmaXhMZW5ndGg7Ci0g
ICAgICAgICAgICAoKml0KS5yYW5nZS5lbmQgLT0gcHJlZml4TGVuZ3RoOwotICAgICAgICB9Ci0g
ICAgfQorICAgIGlmIChydWxlU291cmNlRGF0YVJlZikgeworICAgICAgICAgIHJ1bGVTb3VyY2VE
YXRhUmVmLT5ydWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKKyAgICAgICAgICBydWxlU291cmNlRGF0
YVJlZi0+cnVsZUJvZHlSYW5nZS5lbmQgPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgICAgICAgZm9y
IChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPjo6aXRlcmF0b3IgaXQgPSBydWxlU291cmNl
RGF0YVJlZi0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYmVnaW4oKSwgZW5kSXQgPSBy
dWxlU291cmNlRGF0YVJlZi0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuZW5kKCk7IGl0
ICE9IGVuZEl0OyArK2l0KSB7CisgICAgICAgICAgICAgIGl0LT5yYW5nZS5zdGFydCAtPSBwcmVm
aXhMZW5ndGg7CisgICAgICAgICAgICAgIGl0LT5yYW5nZS5lbmQgLT0gcHJlZml4TGVuZ3RoOwor
ICAgICAgICAgIH0KIAotICAgIGlmIChzdHlsZVNvdXJjZURhdGEpIHsKLSAgICAgICAgKnN0eWxl
U291cmNlRGF0YSA9IG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEucmVsZWFzZSgp
OwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IDA7CiAgICAgICAgIG1faW5TdHlsZVJ1bGVP
ckRlY2xhcmF0aW9uID0gZmFsc2U7CisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2suY2xl
YXIoKTsKKyAgICAgICAgbV9ydWxlQm9keVJhbmdlU3RhY2suY2xlYXIoKTsKICAgICB9CiAgICAg
cmV0dXJuIG9rOwogfQpAQCAtOTA5MCwxNyArOTA4MywzOCBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQ
YXJzZXI6OmNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiB1cmwsIE1lZGlh
UXVlcgogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBydWxl
ID0gU3R5bGVSdWxlSW1wb3J0OjpjcmVhdGUodXJsLCBtZWRpYSk7CiAgICAgU3R5bGVSdWxlSW1w
b3J0KiByZXN1bHQgPSBydWxlLmdldCgpOworICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRh
KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmlzRW1wdHkoKSk7
CisgICAgICAgIG1hcmtSdWxlQm9keUVuZCgpOworICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgIGN1cnJlbnRS
dWxlRGF0YS0+cnVsZUJvZHlSYW5nZSA9IG1fcnVsZUJvZHlSYW5nZVN0YWNrLmxhc3QoKTsKKyAg
ICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsK
KyAgICAgICAgcmVzZXRSdWxlSGVhZGVyUmFuZ2UoKTsKKyAgICAgICAgcG9wUnVsZUJvZHlSYW5n
ZSgpOworICAgIH0KICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVN
ZWRpYVJ1bGUoTWVkaWFRdWVyeVNldCogbWVkaWEsIFJ1bGVMaXN0KiBydWxlcykKIHsKLSAgICBp
ZiAoIW1lZGlhIHx8ICFydWxlcykKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9hbGxvd0ltcG9y
dFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwotICAgIFJlZlB0
cjxTdHlsZVJ1bGVNZWRpYT4gcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEsICpy
dWxlcyk7CisgICAgUmVmUHRyPFN0eWxlUnVsZU1lZGlhPiBydWxlOworICAgIGlmIChydWxlcykK
KyAgICAgICAgcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEsICpydWxlcyk7Cisg
ICAgZWxzZSB7CisgICAgICAgIFJ1bGVMaXN0IGVtcHR5UnVsZXM7CisgICAgICAgIHJ1bGUgPSBT
dHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCBlbXB0eVJ1bGVzKTsKKyAgICB9CiAgICAgU3R5
bGVSdWxlTWVkaWEqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgaWYgKGlzRXh0cmFjdGluZ1Nv
dXJjZURhdGEoKSkgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2suaXNF
bXB0eSgpKTsKKyAgICAgICAgbWFya1J1bGVCb2R5RW5kKCk7CisgICAgICAgIFJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gY3VycmVudFJ1bGVEYXRhID0gcG9wUnVsZURhdGEoKTsKKyAgICAgICAg
Y3VycmVudFJ1bGVEYXRhLT5ydWxlQm9keVJhbmdlID0gbV9ydWxlQm9keVJhbmdlU3RhY2subGFz
dCgpOworICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKGN1cnJlbnRSdWxlRGF0YS5yZWxl
YXNlKCkpOworICAgICAgICBwb3BSdWxlQm9keVJhbmdlKCk7CisgICAgfQogICAgIG1fcGFyc2Vk
UnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
OTExNCwxMSArOTEyOCw2MSBAQCBDU1NQYXJzZXI6OlJ1bGVMaXN0KiBDU1NQYXJzZXI6OmNyZWF0
ZVJ1bGVMaXN0KCkKICAgICByZXR1cm4gbGlzdFB0cjsKIH0KIAordm9pZCBDU1NQYXJzZXI6OmFk
ZE5ld1J1bGVUb1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZSkK
K3sKKyAgICAvLyBQcmVjb25kaXRpb246IChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpLgorICAg
IGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ydWxlU291
cmNlRGF0YVJlc3VsdC0+YXBwZW5kKHJ1bGUpOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50
UnVsZURhdGFTdGFjay5sYXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCit2b2lk
IENTU1BhcnNlcjo6dXBkYXRlVG9wUnVsZUJvZHlFbmQoKQoreworICAgIC8vIFByZWNvbmRpdGlv
bjogKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkuCisgICAgQ1NTUnVsZVNvdXJjZURhdGEqIGRh
dGE7CisgICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2suaXNFbXB0eSgpKQorICAgICAgICBk
YXRhID0gbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+aXNFbXB0eSgpID8gMCA6IG1fcnVsZVNvdXJj
ZURhdGFSZXN1bHQtPmxhc3QoKS5nZXQoKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGEgPSBtX2N1
cnJlbnRSdWxlRGF0YVN0YWNrLmxhc3QoKS0+Y2hpbGRSdWxlcy5pc0VtcHR5KCkgPyAwIDogbV9j
dXJyZW50UnVsZURhdGFTdGFjay5sYXN0KCktPmNoaWxkUnVsZXMubGFzdCgpLmdldCgpOworCisg
ICAgQVNTRVJUKGRhdGEpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGRh
dGEtPnJ1bGVCb2R5UmFuZ2UuZW5kID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7
Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjpwb3BSdWxlQm9keVJhbmdlKCkKK3sKKyAgICBpZiAobV9y
dWxlU291cmNlRGF0YVJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIW1fcnVsZUJvZHlSYW5nZVN0
YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIG1fcnVsZUJvZHlSYW5nZVN0YWNrLnJlbW92ZUxhc3Qo
KTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IENTU1BhcnNlcjo6
cG9wUnVsZURhdGEoKQoreworICAgIGlmICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2suaXNFbXB0
eSgpKTsKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGRhdGEgPSBtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrLmxhc3QoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLnJlbW92ZUxhc3Qo
KTsKKyAgICByZXR1cm4gZGF0YS5yZWxlYXNlKCk7Cit9CisKIFN0eWxlUnVsZUtleWZyYW1lcyog
Q1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNSdWxlKCkKIHsKICAgICBtX2FsbG93SW1wb3J0UnVs
ZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CiAgICAgUmVmUHRyPFN0
eWxlUnVsZUtleWZyYW1lcz4gcnVsZSA9IFN0eWxlUnVsZUtleWZyYW1lczo6Y3JlYXRlKCk7CiAg
ICAgU3R5bGVSdWxlS2V5ZnJhbWVzKiBydWxlUHRyID0gcnVsZS5nZXQoKTsKKyAgICBpZiAoaXNF
eHRyYWN0aW5nU291cmNlRGF0YSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURh
dGFTdGFjay5pc0VtcHR5KCkpOworICAgICAgICBtYXJrUnVsZUJvZHlFbmQoKTsKKyAgICAgICAg
UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEgPSBwb3BSdWxlRGF0YSgp
OworICAgICAgICBjdXJyZW50UnVsZURhdGEtPnJ1bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFu
Z2VTdGFjay5sYXN0KCk7CisgICAgICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoY3VycmVudFJ1
bGVEYXRhLnJlbGVhc2UoKSk7CisgICAgfQogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUu
cmVsZWFzZSgpKTsKICAgICByZXR1cm4gcnVsZVB0cjsKIH0KQEAgLTkxMzYsMTggKzkyMDAsMTkg
QEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPE93blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2UKICAgICAgICAgcnVsZS0+c2V0UHJvcGVydGllcyhj
cmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwogICAgICAgICByZXN1bHQgPSBydWxlLmdldCgpOwog
ICAgICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7Ci0gICAgICAgIGlm
IChtX3J1bGVSYW5nZU1hcCkgewotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudFJ1bGVEYXRh
KTsKLSAgICAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxl
Qm9keVJhbmdlID0gbV9ydWxlQm9keVJhbmdlOwotICAgICAgICAgICAgbV9jdXJyZW50UnVsZURh
dGEtPnNlbGVjdG9yTGlzdFJhbmdlID0gbV9zZWxlY3Rvckxpc3RSYW5nZTsKLSAgICAgICAgICAg
IG1fcnVsZVJhbmdlTWFwLT5zZXQocmVzdWx0LCBtX2N1cnJlbnRSdWxlRGF0YS5yZWxlYXNlKCkp
OwotICAgICAgICAgICAgbV9jdXJyZW50UnVsZURhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0g
Q1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKGlzRXh0cmFjdGluZ1Nv
dXJjZURhdGEoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGN1cnJl
bnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgICAgICBjdXJyZW50UnVsZURhdGEt
PnJ1bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5sYXN0KCk7CisgICAgICAgICAg
ICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKGN1cnJlbnRSdWxlRGF0YS5nZXQoKSk7CisgICAg
ICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKGN1cnJlbnRSdWxlRGF0YS5yZWxlYXNlKCkp
OwogICAgICAgICAgICAgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24gPSBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KLSAgICByZXNldFNlbGVjdG9yTGlzdE1hcmtzKCk7Ci0gICAgcmVzZXRSdWxl
Qm9keU1hcmtzKCk7CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkgeworICAgICAg
ICByZXNldFJ1bGVIZWFkZXJSYW5nZSgpOworICAgICAgICBwb3BSdWxlQm9keVJhbmdlKCk7Cisg
ICAgfQogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05
MTcyLDYgKzkyMzcsMTUgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFj
ZVJ1bGUoKQogICAgIHJ1bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgp
KTsKICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICBTdHlsZVJ1bGVGb250RmFjZSogcmVzdWx0
ID0gcnVsZS5nZXQoKTsKKyAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKSB7CisgICAg
ICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5KCkpOworICAgICAgICBt
YXJrUnVsZUJvZHlFbmQoKTsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjdXJy
ZW50UnVsZURhdGEgPSBwb3BSdWxlRGF0YSgpOworICAgICAgICBjdXJyZW50UnVsZURhdGEtPnJ1
bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5sYXN0KCk7CisgICAgICAgIGZpeFVu
cGFyc2VkUHJvcGVydHlSYW5nZXMoY3VycmVudFJ1bGVEYXRhLmdldCgpKTsKKyAgICAgICAgYWRk
TmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsKKyAgICAgICAg
cG9wUnVsZUJvZHlSYW5nZSgpOworICAgIH0KICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxl
LnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkyNTEsNiArOTMyNSwxNSBA
QCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKFBhc3NPd25QdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlYwogICAgICAgICBydWxlLT5wYXJzZXJBZG9wdFNlbGVj
dG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKICAgICAgICAgcnVsZS0+c2V0UHJvcGVydGllcyhj
cmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwogICAgICAgICBwYWdlUnVsZSA9IHJ1bGUuZ2V0KCk7
CisgICAgICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5KCkpOworICAgICAgICAgICAgbWFy
a1J1bGVCb2R5RW5kKCk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGN1
cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgICAgICBjdXJyZW50UnVsZURh
dGEtPnJ1bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5sYXN0KCk7CisgICAgICAg
ICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKGN1cnJlbnRSdWxlRGF0YS5nZXQoKSk7Cisg
ICAgICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKGN1cnJlbnRSdWxlRGF0YS5yZWxlYXNl
KCkpOworICAgICAgICAgICAgcG9wUnVsZUJvZHlSYW5nZSgpOworICAgICAgICB9CiAgICAgICAg
IG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICB9CiAgICAgY2xlYXJQ
cm9wZXJ0aWVzKCk7CkBAIC05Mjc0LDYgKzkzNTcsOCBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJz
ZXI6OmNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiog
cgogCiAgICAgU3R5bGVSdWxlUmVnaW9uKiByZXN1bHQgPSByZWdpb25SdWxlLmdldCgpOwogICAg
IG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJlZ2lvblJ1bGUucmVsZWFzZSgpKTsKKyAgICBpZiAoaXNF
eHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKENT
U1J1bGVTb3VyY2VEYXRhOjpjcmVhdGVVbmtub3duKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTkzNTMsMTUgKzk0MzgsNzQgQEAgdm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RNZWRp
YUxpbmUoTWVkaWFRdWVyeVNldCogbWVkaWEpCiAgICAgbWVkaWEtPnNldExhc3RMaW5lKG1fbGlu
ZU51bWJlcik7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQor
dm9pZCBDU1NQYXJzZXI6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURh
dGEqIHJ1bGVEYXRhKQogewotICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3Rva2Vu
U3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBpZiAoIXJ1bGVEYXRhLT5zdHlsZVNvdXJj
ZURhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRh
PiYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRh
OworICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eURhdGEuc2l6ZSgpOworICAgIGlmICghc2l6
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRh
LT5ydWxlQm9keVJhbmdlLnN0YXJ0OworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbV9w
YXJzZWRUZXh0LmNoYXJhY3RlcnMoKTsKKyAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIG5leHRE
YXRhID0gJihwcm9wZXJ0eURhdGEuYXQoMCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKiBjdXJyZW50RGF0
YSA9IG5leHREYXRhOworICAgICAgICBuZXh0RGF0YSA9IGkgPCBzaXplIC0gMSA/ICYocHJvcGVy
dHlEYXRhLmF0KGkgKyAxKSkgOiAwOworCisgICAgICAgIGlmIChjdXJyZW50RGF0YS0+cGFyc2Vk
T2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5yYW5n
ZS5lbmQgPiAwICYmIGNoYXJhY3RlcnNbc3R5bGVTdGFydCArIGN1cnJlbnREYXRhLT5yYW5nZS5l
bmQgLSAxXSA9PSAnOycpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldDsKKyAgICAgICAgaWYgKCFuZXh0RGF0YSkKKyAgICAg
ICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gcnVsZURhdGEtPnJ1bGVCb2R5UmFuZ2Uu
ZW5kIC0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hl
ZXQgPSBzdHlsZVN0YXJ0ICsgbmV4dERhdGEtPnJhbmdlLnN0YXJ0IC0gMTsKKworICAgICAgICB3
aGlsZSAoaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1twcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0pKQor
ICAgICAgICAgICAgLS1wcm9wZXJ0eUVuZEluU3R5bGVTaGVldDsKKworICAgICAgICAvLyBwcm9w
ZXJ0eUVuZEluU3R5bGVTaGVldCBwb2ludHMgYXQgdGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFy
YWN0ZXIuCisgICAgICAgIHVuc2lnbmVkIG5ld1Byb3BlcnR5RW5kID0gcHJvcGVydHlFbmRJblN0
eWxlU2hlZXQgLSBzdHlsZVN0YXJ0ICsgMTsgLy8gRXhjbHVzaXZlIG9mIHRoZSBsYXN0IHByb3Bl
cnR5IHRleHQgY2hhcmFjdGVyLgorICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCAh
PSBuZXdQcm9wZXJ0eUVuZCkgeworICAgICAgICAgICAgY3VycmVudERhdGEtPnJhbmdlLmVuZCA9
IG5ld1Byb3BlcnR5RW5kOworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWVTdGFydEluU3R5bGVT
aGVldCA9IHN0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2Uuc3RhcnQgKyBjdXJyZW50RGF0
YS0+bmFtZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0SW5TdHlsZVNo
ZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgJiYgY2hhcmFjdGVyc1t2YWx1ZVN0YXJ0SW5T
dHlsZVNoZWV0XSAhPSAnOicpCisgICAgICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNo
ZWV0OworICAgICAgICAgICAgaWYgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVu
ZEluU3R5bGVTaGVldCkKKyAgICAgICAgICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7
IC8vIFNoaWZ0IHBhc3QgdGhlICc6Jy4KKyAgICAgICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0SW5T
dHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgJiYgaXNIVE1MU3BhY2UoY2hhcmFj
dGVyc1t2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSkpCisgICAgICAgICAgICAgICAgKyt2YWx1ZVN0
YXJ0SW5TdHlsZVNoZWV0OworICAgICAgICAgICAgLy8gTmVlZCB0byBleGNsdWRlIHRoZSB0cmFp
bGluZyAnOycgZnJvbSB0aGUgcHJvcGVydHkgdmFsdWUuCisgICAgICAgICAgICBjdXJyZW50RGF0
YS0+dmFsdWUgPSBtX3BhcnNlZFRleHQuc3Vic3RyaW5nKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQs
IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gdmFsdWVTdGFydEluU3R5bGVTaGVldCArIChjaGFy
YWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNoZWV0XSA9PSAnOycgPyAwIDogMSkpOworICAgICAg
ICB9CisgICAgfQogfQogCi12b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdEVuZCgpCit2
b2lkIENTU1BhcnNlcjo6bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KCkKIHsKLSAgICBpZiAoIW1f
Y3VycmVudFJ1bGVEYXRhKQorICAgIGlmICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKICAgICAg
ICAgcmV0dXJuOworICAgIG1faGVhZGVyUmFuZ2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2Rh
dGFTdGFydC5nZXQoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmFwcGVuZChDU1NSdWxl
U291cmNlRGF0YTo6Y3JlYXRlKENTU1J1bGVTb3VyY2VEYXRhOjpTVFlMRV9SVUxFKSk7Cit9CisK
K3ZvaWQgQ1NTUGFyc2VyOjptYXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6
OlR5cGUgcnVsZVR5cGUpCit7CisgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAg
ICAgICByZXR1cm47CisgICAgbV9oZWFkZXJSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1f
ZGF0YVN0YXJ0LmdldCgpOworICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2suYXBwZW5kKENTU1J1
bGVTb3VyY2VEYXRhOjpjcmVhdGUocnVsZVR5cGUpKTsKK30KKwordm9pZCBDU1NQYXJzZXI6Om1h
cmtSdWxlSGVhZGVyRW5kKCkKK3sKKyAgICBpZiAoIW1fcnVsZVNvdXJjZURhdGFSZXN1bHQpCisg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2suaXNFbXB0
eSgpKTsKICAgICBVQ2hhciogbGlzdEVuZCA9IG1fdG9rZW5TdGFydDsKICAgICB3aGlsZSAobGlz
dEVuZCA+IG1fZGF0YVN0YXJ0LmdldCgpICsgMSkgewogICAgICAgICBpZiAoaXNIVE1MU3BhY2Uo
KihsaXN0RW5kIC0gMSkpKQpAQCAtOTM2OSwyNCArOTUxMywyOSBAQCB2b2lkIENTU1BhcnNlcjo6
bWFya1NlbGVjdG9yTGlzdEVuZCgpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFTdGFy
dC5nZXQoKTsKKyAgICBtX2hlYWRlclJhbmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFTdGFydC5n
ZXQoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmxhc3QoKS0+cnVsZUhlYWRlclJhbmdl
ID0gbV9oZWFkZXJSYW5nZTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0
KCkKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydChib29sIGlzRGVjbGFyYXRpb24p
CiB7CisgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAgICAgICByZXR1cm47CiAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiAg
ICAgaWYgKCptX3Rva2VuU3RhcnQgPT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0
aGUgcnVsZSBib2R5IG9wZW5pbmcgYnJhY2UuCi0gICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlS
YW5nZS5zdGFydCkKLSAgICAgICAgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gb2Zmc2V0OwotICAg
IG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICBtX3J1bGVCb2R5UmFuZ2VT
dGFjay5hcHBlbmQoU291cmNlUmFuZ2UoKSk7CisgICAgbV9ydWxlQm9keVJhbmdlU3RhY2subGFz
dCgpLnN0YXJ0ID0gb2Zmc2V0OworICAgIGlmIChpc0RlY2xhcmF0aW9uKQorICAgICAgICBtX2lu
U3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IHRydWU7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJr
UnVsZUJvZHlFbmQoKQogeworICAgIGlmICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0
YXJ0LmdldCgpOwotICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2UuZW5kKQotICAgICAg
ICBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0OworICAgIG1fcnVsZUJvZHlSYW5nZVN0YWNr
Lmxhc3QoKS5lbmQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlT
dGFydCgpCkBAIC05NDA0LDcgKzk1NTMsNyBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5
RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQogICAgIGlm
ICgqbV90b2tlblN0YXJ0ID09ICc7JykgLy8gSW5jbHVkZSBzZW1pY29sb24gaW50byB0aGUgcHJv
cGVydHkgdGV4dC4KICAgICAgICAgKytvZmZzZXQ7CiAgICAgbV9wcm9wZXJ0eVJhbmdlLmVuZCA9
IG9mZnNldDsKLSAgICBpZiAobV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ICE9IFVJTlRfTUFYICYmIG1f
Y3VycmVudFJ1bGVEYXRhKSB7CisgICAgaWYgKG1fcHJvcGVydHlSYW5nZS5zdGFydCAhPSBVSU5U
X01BWCAmJiAhbV9jdXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
VGhpcyBzdHVmZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIHN0eWxlIGRhdGEgcmV0cmlldmFs
IGlzIHJlcXVlc3RlZCBieSBjbGllbnQuCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHN0YXJ0ID0g
bV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OwogICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmQgPSBtX3By
b3BlcnR5UmFuZ2UuZW5kOwpAQCAtOTQxOCwxMCArOTU2NywxMSBAQCB2b2lkIENTU1BhcnNlcjo6
bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFy
c2VkKQogICAgICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3RyaW5nLmxlZnQoY29sb25JbmRl
eCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5U3Ry
aW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkpLnN0
cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMgcmVsYXRp
dmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KLSAgICAgICAgbV9jdXJyZW50UnVs
ZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFwcGVuZCgKLSAgICAgICAgICAg
IENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1lLCB2YWx1ZSwgaXNJbXBvcnRhbnRGb3VuZCwgaXNQ
cm9wZXJ0eVBhcnNlZCwgU291cmNlUmFuZ2Uoc3RhcnQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQs
IGVuZCAtIG1fcnVsZUJvZHlSYW5nZS5zdGFydCkpKTsKKyAgICAgICAgU291cmNlUmFuZ2UmIHRv
cFJ1bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2VTdGFjay5sYXN0KCk7CisgICAgICAgIG1f
Y3VycmVudFJ1bGVEYXRhU3RhY2subGFzdCgpLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0
YS5hcHBlbmQoCisgICAgICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUs
IGlzSW1wb3J0YW50Rm91bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0g
dG9wUnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kIC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCkpKTsK
ICAgICB9Ci0gICAgcmVzZXRQcm9wZXJ0eU1hcmtzKCk7CisgICAgcmVzZXRQcm9wZXJ0eVJhbmdl
KCk7CiB9CiAKIHN0YXRpYyBDU1NQcm9wZXJ0eUlEIGNzc1Byb3BlcnR5SUQoY29uc3QgVUNoYXIq
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4
IDdjNWE2MjM3NzQ4ZmYyN2M5NTVmNzNhNWIzNDAwNWIwYzhlMjczNjEuLjI3MjhmMTA0OTk5MjBj
M2ZlYWVjNDNkM2FjZDFjMWE1OTY3ODcwZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTcw
LDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgfkNTU1BhcnNlcigpOwogCi0gICAgdm9pZCBwYXJz
ZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYsIGludCBzdGFydExpbmVO
dW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogPSAwKTsKKyAgICB2b2lkIHBhcnNlU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9
IDAsIFJ1bGVTb3VyY2VEYXRhTGlzdCogPSAwKTsKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJh
c2U+IHBhcnNlUnVsZShTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmKTsKICAgICBQ
YXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNlS2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRDb250
ZW50cyosIGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBib29sIHBhcnNlVmFsdWUoU3R5bGVQ
cm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50
LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVudHMqKTsKQEAgLTc4LDcgKzc4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBib29sIHBhcnNlU3lzdGVtQ29sb3IoUkdCQTMyJiBjb2xvciwg
Y29uc3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0aXZlKGludCBpZGVudCwg
Q1NTUGFyc2VyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0
eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiwgU3R5bGVT
aGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgYm9vbCBwYXJzZURlY2xhcmF0
aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPENTU1J1bGVT
b3VyY2VEYXRhPiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAg
UGFzc093blB0cjxNZWRpYVF1ZXJ5PiBwYXJzZU1lZGlhUXVlcnkoY29uc3QgU3RyaW5nJik7CiAK
ICAgICB2b2lkIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
LCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKTsKQEAgLTMxMSwyMCArMzEx
LDI4IEBAIHB1YmxpYzoKIAogICAgIC8vIHRva2VuaXplciBtZXRob2RzIGFuZCBkYXRhCiAgICAg
Ym9vbCBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbjsKLSAgICBTb3VyY2VSYW5nZSBtX3NlbGVj
dG9yTGlzdFJhbmdlOwotICAgIFNvdXJjZVJhbmdlIG1fcnVsZUJvZHlSYW5nZTsKKyAgICBTdHJp
bmcgbV9wYXJzZWRUZXh0OworICAgIFNvdXJjZVJhbmdlIG1faGVhZGVyUmFuZ2U7CiAgICAgU291
cmNlUmFuZ2UgbV9wcm9wZXJ0eVJhbmdlOwotICAgIFN0eWxlUnVsZVJhbmdlTWFwKiBtX3J1bGVS
YW5nZU1hcDsKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1fY3VycmVudFJ1bGVEYXRh
OwotICAgIHZvaWQgbWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7Ci0gICAgdm9pZCBtYXJrU2VsZWN0
b3JMaXN0RW5kKCk7Ci0gICAgdm9pZCBtYXJrUnVsZUJvZHlTdGFydCgpOworICAgIFZlY3RvcjxT
b3VyY2VSYW5nZT4gbV9ydWxlQm9keVJhbmdlU3RhY2s7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gPiBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrOworICAgIFZlY3RvcjxSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4qIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQ7CisKKyAgICB2
b2lkIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEqKTsKKyAgICB2
b2lkIG1hcmtTdHlsZVJ1bGVIZWFkZXJTdGFydCgpOworICAgIHZvaWQgbWFya0F0UnVsZUhlYWRl
clN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpUeXBlKTsKKyAgICB2b2lkIG1hcmtSdWxlSGVhZGVy
RW5kKCk7CisgICAgdm9pZCBtYXJrUnVsZUJvZHlTdGFydChib29sIGlzRGVjbGFyYXRpb24gPSB0
cnVlKTsKICAgICB2b2lkIG1hcmtSdWxlQm9keUVuZCgpOwogICAgIHZvaWQgbWFya1Byb3BlcnR5
U3RhcnQoKTsKICAgICB2b2lkIG1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQs
IGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCk7Ci0gICAgdm9pZCByZXNldFNlbGVjdG9yTGlzdE1hcmtz
KCkgeyBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0gbV9zZWxlY3Rvckxpc3RSYW5nZS5lbmQg
PSAwOyB9Ci0gICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlSYW5nZS5z
dGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9Ci0gICAgdm9pZCByZXNldFByb3BlcnR5
TWFya3MoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBV
SU5UX01BWDsgfQorICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNlVHJlZShQYXNzUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPik7CisgICAgdm9pZCB1cGRhdGVUb3BSdWxlQm9keUVuZCgpOworICAg
IHZvaWQgcmVzZXRSdWxlSGVhZGVyUmFuZ2UoKSB7IG1faGVhZGVyUmFuZ2Uuc3RhcnQgPSBtX2hl
YWRlclJhbmdlLmVuZCA9IDA7IH0KKyAgICB2b2lkIHBvcFJ1bGVCb2R5UmFuZ2UoKTsKKyAgICB2
b2lkIHJlc2V0UHJvcGVydHlSYW5nZSgpIHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9w
ZXJ0eVJhbmdlLmVuZCA9IFVJTlRfTUFYOyB9CisgICAgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gcG9wUnVsZURhdGEoKTsKKyAgICBib29sIGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSBj
b25zdCB7IHJldHVybiAhIW1fcnVsZVNvdXJjZURhdGFSZXN1bHQ7IH0KICAgICBpbnQgbGV4KHZv
aWQqIHl5bHZhbCk7CiAgICAgaW50IHRva2VuKCkgeyByZXR1cm4gbV90b2tlbjsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKaW5kZXggNTgwM2Y5NGIxYzJm
YTc1MWU5ZTU2ZTEwMjUyY2JkYjY0MGUxNWUyNC4uMDlkZTlmZWYzOTZhNmY2MzY2Y2ZlZWUwNGZj
M2VmMjZiM2Q0Y2U3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5
U291cmNlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURh
dGEuaApAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFN0
eWxlUnVsZTsKK2NsYXNzIFN0eWxlUnVsZUJhc2U7CiAKIHN0cnVjdCBTb3VyY2VSYW5nZSB7CiAg
ICAgU291cmNlUmFuZ2UoKTsKQEAgLTc4LDIyICs3OCw1NSBAQCBzdHJ1Y3QgQ1NTU3R5bGVTb3Vy
Y2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTU3R5bGVTb3VyY2VEYXRhPiB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTb3VyY2VEYXRhKCkpOwogICAgIH0KIAotICAg
IC8vIFJhbmdlIG9mIHRoZSBzdHlsZSB0ZXh0IGluIHRoZSBlbmNsb3Npbmcgc291cmNlLgotICAg
IFNvdXJjZVJhbmdlIHN0eWxlQm9keVJhbmdlOwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJj
ZURhdGE+IHByb3BlcnR5RGF0YTsKIH07CiAKK2NsYXNzIENTU1J1bGVTb3VyY2VEYXRhOwordHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+IFJ1bGVTb3VyY2VEYXRhTGlz
dDsKKwogc3RydWN0IENTU1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTUnVs
ZVNvdXJjZURhdGE+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
Y3JlYXRlKCkKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBVTktOT1dOX1JVTEUsCisgICAgICAg
IFNUWUxFX1JVTEUsCisgICAgICAgIENIQVJTRVRfUlVMRSwKKyAgICAgICAgSU1QT1JUX1JVTEUs
CisgICAgICAgIE1FRElBX1JVTEUsCisgICAgICAgIEZPTlRfRkFDRV9SVUxFLAorICAgICAgICBQ
QUdFX1JVTEUsCisgICAgICAgIEtFWUZSQU1FU19SVUxFCisgICAgfTsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0YSh0eXBlKSk7CisgICAg
fQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZVVua25v
d24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0YShVTktO
T1dOX1JVTEUpKTsKICAgICB9CiAKKyAgICBDU1NSdWxlU291cmNlRGF0YShUeXBlIHR5cGUpCisg
ICAgICAgIDogdHlwZSh0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gU1RZTEVfUlVM
RSB8fCB0eXBlID09IEZPTlRfRkFDRV9SVUxFIHx8IHR5cGUgPT0gUEFHRV9SVUxFKQorICAgICAg
ICAgICAgc3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAg
ICB9CisKKyAgICBUeXBlIHR5cGU7CisKICAgICAvLyBSYW5nZSBvZiB0aGUgc2VsZWN0b3IgbGlz
dCBpbiB0aGUgZW5jbG9zaW5nIHNvdXJjZS4KLSAgICBTb3VyY2VSYW5nZSBzZWxlY3Rvckxpc3RS
YW5nZTsKKyAgICBTb3VyY2VSYW5nZSBydWxlSGVhZGVyUmFuZ2U7CisKKyAgICAvLyBSYW5nZSBv
ZiB0aGUgcnVsZSBib2R5IChlLmcuIHN0eWxlIHRleHQgZm9yIHN0eWxlIHJ1bGVzKSBpbiB0aGUg
ZW5jbG9zaW5nIHNvdXJjZS4KKyAgICBTb3VyY2VSYW5nZSBydWxlQm9keVJhbmdlOworCisgICAg
Ly8gT25seSBmb3IgQ1NTU3R5bGVSdWxlcywgQ1NTRm9udEZhY2VSdWxlcywgYW5kIENTU1BhZ2VS
dWxlcy4KICAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURhdGE7CisK
KyAgICAvLyBPbmx5IGZvciBDU1NNZWRpYVJ1bGVzLgorICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCBj
aGlsZFJ1bGVzOwogfTsKLXR5cGVkZWYgSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+ID4gU3R5bGVSdWxlUmFuZ2VNYXA7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCmluZGV4IDQ0OThhZGMxNGY3MTIxOTA2ZmIyYmU2MDY5MDViZTAyN2M1YjUwMzEuLjVlZWI4
MzI2YWZlNDFlNDNhZTUxNDY2NmE1ZTM5ZDczZjg1MjI2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKICNpbmNsdWRl
ICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2lu
Y2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKQEAgLTYwLDIwICs2MSwyMSBAQAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgV2ViQ29yZTo6VHlwZUJ1
aWxkZXI6OkFycmF5OwordXNpbmcgV2ViQ29yZTo6UnVsZVNvdXJjZURhdGFMaXN0OwordXNpbmcg
V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE7CiAKIGNsYXNzIFBhcnNlZFN0eWxlU2hlZXQgewog
cHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNl
RGF0YT4gPiBTb3VyY2VEYXRhOwogICAgIFBhcnNlZFN0eWxlU2hlZXQoKTsKIAogICAgIFdlYkNv
cmU6OkNTU1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3BhcnNl
ck91dHB1dDsgfQogICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dDsgfQogICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpOwogICAgIGJvb2wgaGFz
VGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGV4dDsgfQotICAgIFNvdXJjZURhdGEqIHNvdXJj
ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGEuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dFNvdXJjZURhdGEoUGFzc093blB0cjxTb3VyY2VEYXRhPiBzb3VyY2VEYXRhKTsKKyAgICBSdWxl
U291cmNlRGF0YUxpc3QqIHNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGEu
Z2V0KCk7IH0KKyAgICB2b2lkIHNldFNvdXJjZURhdGEoUGFzc093blB0cjxSdWxlU291cmNlRGF0
YUxpc3Q+KTsKICAgICBib29sIGhhc1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZURhdGE7IH0KLSAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3Vy
Y2VEYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhQXQodW5zaWduZWQpIGNvbnN0OwogCiBw
cml2YXRlOgogCkBAIC04MSw3ICs4Myw3IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6Q1NTU3R5
bGVTaGVldCogbV9wYXJzZXJPdXRwdXQ7CiAgICAgU3RyaW5nIG1fdGV4dDsKICAgICBib29sIG1f
aGFzVGV4dDsKLSAgICBPd25QdHI8U291cmNlRGF0YT4gbV9zb3VyY2VEYXRhOworICAgIE93blB0
cjxSdWxlU291cmNlRGF0YUxpc3Q+IG1fc291cmNlRGF0YTsKIH07CiAKIFBhcnNlZFN0eWxlU2hl
ZXQ6OlBhcnNlZFN0eWxlU2hlZXQoKQpAQCAtOTcsMTIgKzk5LDMzIEBAIHZvaWQgUGFyc2VkU3R5
bGVTaGVldDo6c2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgc2V0U291cmNlRGF0YShu
dWxscHRyKTsKIH0KIAotdm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKFBhc3NP
d25QdHI8U291cmNlRGF0YT4gc291cmNlRGF0YSkKK3N0YXRpYyB2b2lkIGZsYXR0ZW5Tb3VyY2VE
YXRhKFJ1bGVTb3VyY2VEYXRhTGlzdCogZGF0YUxpc3QsIFJ1bGVTb3VyY2VEYXRhTGlzdCogdGFy
Z2V0KQogewotICAgIG1fc291cmNlRGF0YSA9IHNvdXJjZURhdGE7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBkYXRhTGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiYgZGF0YSA9IGRhdGFMaXN0LT5hdChpKTsKKyAgICAgICAgaWYgKGRhdGEt
PnR5cGUgPT0gQ1NTUnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpCisgICAgICAgICAgICB0YXJn
ZXQtPmFwcGVuZChkYXRhKTsKKyAgICAgICAgZWxzZSBpZiAoZGF0YS0+dHlwZSA9PSBDU1NSdWxl
U291cmNlRGF0YTo6TUVESUFfUlVMRSkKKyAgICAgICAgICAgIGZsYXR0ZW5Tb3VyY2VEYXRhKCZk
YXRhLT5jaGlsZFJ1bGVzLCB0YXJnZXQpOworICAgIH0KK30KKwordm9pZCBQYXJzZWRTdHlsZVNo
ZWV0OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBzb3VyY2VE
YXRhKQoreworICAgIGlmICghc291cmNlRGF0YSkgeworICAgICAgICBtX3NvdXJjZURhdGEuY2xl
YXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc291cmNlRGF0YSA9IGFkb3B0
UHRyKG5ldyBSdWxlU291cmNlRGF0YUxpc3QoKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBh
IHRlbXBvcmFyeSBzb2x1dGlvbiB0byByZXRhaW4gdGhlIG9yaWdpbmFsIGZsYXQgc291cmNlRGF0
YSBzdHJ1Y3R1cmUKKyAgICAvLyBjb250YWluaW5nIG9ubHkgc3R5bGUgcnVsZXMsIGV2ZW4gdGhv
dWdoIENTU1BhcnNlciBub3cgcHJvdmlkZXMgdGhlIGZ1bGwgcnVsZSBzb3VyY2UgZGF0YSB0cmVl
LgorICAgIC8vIE5vcm1hbGx5LCB3ZSBzaG91bGQganVzdCBhc3NpZ24gbV9zb3VyY2VEYXRhID0g
c291cmNlRGF0YTsKKyAgICBmbGF0dGVuU291cmNlRGF0YShzb3VyY2VEYXRhLmdldCgpLCBtX3Nv
dXJjZURhdGEuZ2V0KCkpOwogfQogCi1SZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+
IFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
CitQYXNzUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0
OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlmICghaGFz
U291cmNlRGF0YSgpIHx8IGluZGV4ID49IG1fc291cmNlRGF0YS0+c2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTI3MSw3ICsyOTQsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbgogCiAg
ICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gbV9wYXJlbnRTdHlsZVNo
ZWV0ID8gbV9wYXJlbnRTdHlsZVNoZWV0LT5ydWxlU291cmNlRGF0YUZvcihtX3N0eWxlLmdldCgp
KSA6IDA7CiAgICAgaWYgKHNvdXJjZURhdGEpCi0gICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVp
bGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlKSk7CisgICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVj
dChzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KQEAgLTMxNCwxMCArMzM3LDEwIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFBy
b3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVRleHQsCiAK
ICAgICBpZiAocHJvcGVydHlUZXh0LnN0cmlwV2hpdGVTcGFjZSgpLmxlbmd0aCgpKSB7CiAgICAg
ICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wTXV0YWJsZVN0eWxlID0gU3R5bGVQcm9w
ZXJ0eVNldDo6Y3JlYXRlKCk7Ci0gICAgICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHNv
dXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRl
KENTU1J1bGVTb3VyY2VEYXRhOjpTVFlMRV9SVUxFKTsKICAgICAgICAgQ1NTUGFyc2VyIHAoQ1NT
U3RyaWN0TW9kZSk7Ci0gICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxl
LmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFtZSArICI6IG5vbmUi
LCAmc291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5jb250ZW50cygpKTsK
LSAgICAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHNv
dXJjZURhdGEtPnByb3BlcnR5RGF0YTsKKyAgICAgICAgcC5wYXJzZURlY2xhcmF0aW9uKHRlbXBN
dXRhYmxlU3R5bGUuZ2V0KCksIHByb3BlcnR5VGV4dCArICIgIiArIGJvZ3VzUHJvcGVydHlOYW1l
ICsgIjogbm9uZSIsIHNvdXJjZURhdGEsIG1fc3R5bGUtPnBhcmVudFN0eWxlU2hlZXQoKS0+Y29u
dGVudHMoKSk7CisgICAgICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0
eURhdGEgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKICAgICAg
ICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnR5RGF0YS5zaXplKCk7CiAKICAgICAg
ICAgLy8gQXQgbGVhc3Qgb25lIHByb3BlcnR5ICsgdGhlIGJvZ3VzIHByb3BlcnR5IGFkZGVkIGp1
c3QgYWJvdmUgc2hvdWxkIGJlIHByZXNlbnQuCkBAIC0zNTUsNyArMzc4LDcgQEAgYm9vbCBJbnNw
ZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcm
IHByb3BlcnR5VGV4dCwKICAgICAgICAgKm9sZFRleHQgPSBhbGxQcm9wZXJ0aWVzLmF0KGluZGV4
KS5yYXdUZXh0OwogICAgICAgICBlZGl0b3IucmVwbGFjZVByb3BlcnR5KGluZGV4LCBwcm9wZXJ0
eVRleHQpOwogICAgIH0gZWxzZQotICAgICAgICBlZGl0b3IuaW5zZXJ0UHJvcGVydHkoaW5kZXgs
IHByb3BlcnR5VGV4dCwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5n
ZS5sZW5ndGgoKSk7CisgICAgICAgIGVkaXRvci5pbnNlcnRQcm9wZXJ0eShpbmRleCwgcHJvcGVy
dHlUZXh0LCBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlLmxlbmd0aCgpKTsKIAogICAgIHJldHVy
biBhcHBseVN0eWxlVGV4dChlZGl0b3Iuc3R5bGVUZXh0KCkpOwogfQpAQCAtNDEzLDcgKzQzNiw3
IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QK
ICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNvdXJjZVJh
bmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJh
bmdlOworICAgIFNvdXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5ydWxlQm9keVJh
bmdlOwogICAgICpyZXN1bHQgPSBzdHlsZVNoZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0
YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTc3MSw3ICs3OTQsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVT
ZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIGNvbnN0IFN0cmluZwogICAgIH0KIAog
ICAgIFN0cmluZyBzaGVldFRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKLSAgICBz
aGVldFRleHQucmVwbGFjZShzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCwgc291
cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kIC0gc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0
UmFuZ2Uuc3RhcnQsIHNlbGVjdG9yKTsKKyAgICBzaGVldFRleHQucmVwbGFjZShzb3VyY2VEYXRh
LT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZS5sZW5n
dGgoKSwgc2VsZWN0b3IpOwogICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0VGV4dChzaGVldFRl
eHQpOwogICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
ODMwLDcgKzg1Myw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZGVsZXRlUnVsZShjb25z
dCBJbnNwZWN0b3JDU1NJZCYgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgfQogCiAgICAgU3Ry
aW5nIHNoZWV0VGV4dCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpOwotICAgIHNoZWV0VGV4
dC5yZW1vdmUoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEt
PnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kIC0gc291cmNlRGF0YS0+c2VsZWN0
b3JMaXN0UmFuZ2Uuc3RhcnQgKyAxKTsKKyAgICBzaGVldFRleHQucmVtb3ZlKHNvdXJjZURhdGEt
PnJ1bGVIZWFkZXJSYW5nZS5zdGFydCwgc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5lbmQgLSBz
b3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQgKyAxKTsKICAgICBtX3BhcnNlZFN0eWxl
U2hlZXQtPnNldFRleHQoc2hlZXRUZXh0KTsKICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkxMSwxMiArOTM0LDggQEAgUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1
bGUoQ1MKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYg
KGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJj
ZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7Ci0gICAgaWYgKHNvdXJjZURhdGEpIHsKLSAgICAgICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiBzZWxlY3RvclJhbmdlID0gVHlw
ZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0U3Rh
cnQoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQpCi0gICAgICAgICAgICAuc2V0
RW5kKHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0U2VsZWN0b3JSYW5nZShzZWxlY3RvclJhbmdlLnJlbGVhc2UoKSk7Ci0gICAgfQorICAgIGlm
IChzb3VyY2VEYXRhKQorICAgICAgICByZXN1bHQtPnNldFNlbGVjdG9yUmFuZ2UoYnVpbGRTb3Vy
Y2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2UpKTsKIAogICAgIFJlZlB0
cjxBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4gPiBtZWRpYUFycmF5ID0gQXJyYXk8
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+OjpjcmVhdGUoKTsKIApAQCAtOTQ4LDcgKzk2Nyw3
IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoCiAgICAgICAgIFN0cmluZyBzaGVldFRleHQ7CiAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGdldFRleHQoJnNoZWV0VGV4dCk7CiAgICAgICAgIGlmIChz
dWNjZXNzKSB7Ci0gICAgICAgICAgICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291
cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZTsKKyAgICAgICAgICAgIGNv
bnN0IFNvdXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlOwog
ICAgICAgICAgICAgcmVzdWx0LT5zZXRDc3NUZXh0KHNoZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJh
bmdlLnN0YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KSk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMDk4LDIyICsxMTE3LDkgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpl
bnN1cmVTb3VyY2VEYXRhKCkKIAogICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IG5ld1N0
eWxlU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNlciBw
KENTU1N0cmljdE1vZGUpOwotICAgIFN0eWxlUnVsZVJhbmdlTWFwIHJ1bGVSYW5nZU1hcDsKLSAg
ICBwLnBhcnNlU2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgbV9wYXJzZWRTdHlsZVNoZWV0LT50
ZXh0KCksIDAsICZydWxlUmFuZ2VNYXApOwotICAgIE93blB0cjxQYXJzZWRTdHlsZVNoZWV0OjpT
b3VyY2VEYXRhPiByYW5nZXNWZWN0b3IoYWRvcHRQdHIobmV3IFBhcnNlZFN0eWxlU2hlZXQ6OlNv
dXJjZURhdGEpKTsKLQotICAgIFZlY3RvcjxDU1NTdHlsZVJ1bGUqPiBydWxlczsKLSAgICBSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0ID0gYXNDU1NSdWxlTGlzdChDU1NTdHlsZVNoZWV0Ojpj
cmVhdGUobmV3U3R5bGVTaGVldCkuZ2V0KCkpOwotICAgIGNvbGxlY3RGbGF0UnVsZXMocnVsZUxp
c3QsICZydWxlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHJ1bGVzLnNpemUo
KTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBTdHlsZVJ1bGVSYW5nZU1hcDo6aXRlcmF0b3Ig
aXQgPSBydWxlUmFuZ2VNYXAuZmluZChydWxlcy5hdChpKS0+c3R5bGVSdWxlKCkpOwotICAgICAg
ICBpZiAoaXQgIT0gcnVsZVJhbmdlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICBmaXhVbnBhcnNl
ZFByb3BlcnR5UmFuZ2VzKGl0LT5zZWNvbmQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4
dCgpKTsKLSAgICAgICAgICAgIHJhbmdlc1ZlY3Rvci0+YXBwZW5kKGl0LT5zZWNvbmQpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRTb3VyY2VEYXRhKHJh
bmdlc1ZlY3Rvci5yZWxlYXNlKCkpOworICAgIE93blB0cjxSdWxlU291cmNlRGF0YUxpc3Q+IHJ1
bGVTb3VyY2VEYXRhUmVzdWx0ID0gYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VEYXRhTGlzdCgpKTsK
KyAgICBwLnBhcnNlU2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgbV9wYXJzZWRTdHlsZVNoZWV0
LT50ZXh0KCksIDAsIHJ1bGVTb3VyY2VEYXRhUmVzdWx0LmdldCgpKTsKKyAgICBtX3BhcnNlZFN0
eWxlU2hlZXQtPnNldFNvdXJjZURhdGEocnVsZVNvdXJjZURhdGFSZXN1bHQucmVsZWFzZSgpKTsK
ICAgICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNTb3VyY2VEYXRhKCk7CiB9CiAKQEAg
LTExNTcsOCArMTE2Myw4IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRl
eHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IHJ1
bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKLSAgICB1bnNpZ25lZCBib2R5U3RhcnQgPSBzb3VyY2VE
YXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0OwotICAgIHVuc2lnbmVk
IGJvZHlFbmQgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVu
ZDsKKyAgICB1bnNpZ25lZCBib2R5U3RhcnQgPSBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlLnN0
YXJ0OworICAgIHVuc2lnbmVkIGJvZHlFbmQgPSBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlLmVu
ZDsKICAgICBBU1NFUlQoYm9keVN0YXJ0IDw9IGJvZHlFbmQpOwogCiAgICAgU3RyaW5nIHRleHQg
PSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKQEAgLTEyNTMsNTEgKzEyNTksNiBAQCBQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+IElu
c3BlY3RvclN0eWxlU2hlZXQ6OgogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi12
b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVs
ZVNvdXJjZURhdGEqIHJ1bGVEYXRhLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRUZXh0KQotewot
ICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBydWxlRGF0
YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHBy
b3BlcnR5RGF0YS5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB1bnNpZ25lZCBzdHlsZVN0YXJ0ID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVC
b2R5UmFuZ2Uuc3RhcnQ7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHlsZVNoZWV0
VGV4dC5jaGFyYWN0ZXJzKCk7Ci0gICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKiBuZXh0RGF0YSA9
ICYocHJvcGVydHlEYXRhLmF0KDApKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogY3VycmVudERhdGEgPSBu
ZXh0RGF0YTsKLSAgICAgICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAtIDEgPyAmKHByb3BlcnR5RGF0
YS5hdChpICsgMSkpIDogMDsKLQotICAgICAgICBpZiAoY3VycmVudERhdGEtPnBhcnNlZE9rKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFuZ2UuZW5k
ID4gMCAmJiBjaGFyYWN0ZXJzW3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2UuZW5kIC0g
MV0gPT0gJzsnKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdW5zaWduZWQgcHJv
cGVydHlFbmRJblN0eWxlU2hlZXQ7Ci0gICAgICAgIGlmICghbmV4dERhdGEpCi0gICAgICAgICAg
ICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0
eWxlQm9keVJhbmdlLmVuZCAtIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByb3BlcnR5
RW5kSW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHREYXRhLT5yYW5nZS5zdGFydCAtIDE7
Ci0KLSAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0
eWxlU2hlZXRdKSkKLSAgICAgICAgICAgIC0tcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7Ci0KLSAg
ICAgICAgLy8gcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgcG9pbnRzIGF0IHRoZSBsYXN0IHByb3Bl
cnR5IHRleHQgY2hhcmFjdGVyLgotICAgICAgICB1bnNpZ25lZCBuZXdQcm9wZXJ0eUVuZCA9IHBy
b3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gc3R5bGVTdGFydCArIDE7IC8vIEV4Y2x1c2l2ZSBvZiB0
aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KLSAgICAgICAgaWYgKGN1cnJlbnREYXRh
LT5yYW5nZS5lbmQgIT0gbmV3UHJvcGVydHlFbmQpIHsKLSAgICAgICAgICAgIGN1cnJlbnREYXRh
LT5yYW5nZS5lbmQgPSBuZXdQcm9wZXJ0eUVuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVl
U3RhcnRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLnN0YXJ0
ICsgY3VycmVudERhdGEtPm5hbWUubGVuZ3RoKCk7Ci0gICAgICAgICAgICB3aGlsZSAodmFsdWVT
dGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGNoYXJhY3RlcnNb
dmFsdWVTdGFydEluU3R5bGVTaGVldF0gIT0gJzonKQotICAgICAgICAgICAgICAgICsrdmFsdWVT
dGFydEluU3R5bGVTaGVldDsKLSAgICAgICAgICAgIGlmICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0
IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQpCi0gICAgICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0
SW5TdHlsZVNoZWV0OyAvLyBTaGlmdCBwYXN0IHRoZSAnOicuCi0gICAgICAgICAgICB3aGlsZSAo
dmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGlzSFRN
TFNwYWNlKGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0pKQotICAgICAgICAgICAg
ICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gZXhj
bHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhlIHByb3BlcnR5IHZhbHVlLgotICAgICAgICAg
ICAgY3VycmVudERhdGEtPnZhbHVlID0gc3R5bGVTaGVldFRleHQuc3Vic3RyaW5nKHZhbHVlU3Rh
cnRJblN0eWxlU2hlZXQsIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gdmFsdWVTdGFydEluU3R5
bGVTaGVldCArIChjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNoZWV0XSA9PSAnOycgPyAw
IDogMSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmNvbGxlY3RGbGF0UnVsZXMoUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QsIFZlY3Rv
cjxDU1NTdHlsZVJ1bGUqPiogcmVzdWx0KQogewogICAgIGlmICghcnVsZUxpc3QpCkBAIC0xMzg0
LDEzICsxMzQ1LDExIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpl
bnN1cmVQYXJzZWREYXRhUmVhZHkoKQogICAgIGlmIChtX3J1bGVTb3VyY2VEYXRhKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fcnVsZVNvdXJjZURhdGEgPSBDU1NSdWxlU291cmNlRGF0
YTo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9
IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZ2V0U3R5
bGVBdHRyaWJ1dGVSYW5nZXMoJnNvdXJjZURhdGEpOworICAgIG1fcnVsZVNvdXJjZURhdGEgPSBD
U1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKENTU1J1bGVTb3VyY2VEYXRhOjpTVFlMRV9SVUxFKTsK
KyAgICBib29sIHN1Y2Nlc3MgPSBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhtX3J1bGVTb3VyY2VE
YXRhKTsKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1f
cnVsZVNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YSA9IHNvdXJjZURhdGEucmVsZWFzZSgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDEwLDE0ICsxMzY5LDE0IEBAIGNvbnN0IFN0cmlu
ZyYgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjplbGVtZW50U3R5bGVUZXh0KCkg
Y29uc3QKICAgICByZXR1cm4gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0eWxlIikuc3RyaW5n
KCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpnZXRTdHls
ZUF0dHJpYnV0ZVJhbmdlcyhSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiogcmVzdWx0KSBjb25z
dAorYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmdldFN0eWxlQXR0cmli
dXRlUmFuZ2VzKFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mIHJlc3VsdCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChtX3N0eWxlVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgKCpyZXN1bHQp
LT5zdHlsZUJvZHlSYW5nZS5zdGFydCA9IDA7Ci0gICAgICAgICgqcmVzdWx0KS0+c3R5bGVCb2R5
UmFuZ2UuZW5kID0gMDsKKyAgICAgICAgcmVzdWx0LT5ydWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsK
KyAgICAgICAgcmVzdWx0LT5ydWxlQm9keVJhbmdlLmVuZCA9IDA7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmgKaW5kZXggMDNjYWI2NzdkMjI0M2M3ZDVjNDY1MDMwNDI4MWRkNjkyYzE3Yzk4Ny4u
M2NlMzc1NWY3MDc5ZTFhMzMwMmIzYjEwNzI4ZGUxNDBlMzU1Mjg5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC0yMTksNyArMjE5LDYg
QEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yU3R5bGU7
CiAKLSAgICBzdGF0aWMgdm9pZCBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1bGVTb3Vy
Y2VEYXRhKiBydWxlRGF0YSwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0VGV4dCk7CiAgICAgc3Rh
dGljIHZvaWQgY29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiwgVmVjdG9y
PENTU1N0eWxlUnVsZSo+KiByZXN1bHQpOwogICAgIGJvb2wgZW5zdXJlVGV4dCgpIGNvbnN0Owog
ICAgIGJvb2wgZW5zdXJlU291cmNlRGF0YSgpOwpAQCAtMjY4LDcgKzI2Nyw3IEBAIHByb3RlY3Rl
ZDoKIHByaXZhdGU6CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUoKSBjb25z
dDsKICAgICBjb25zdCBTdHJpbmcmIGVsZW1lbnRTdHlsZVRleHQoKSBjb25zdDsKLSAgICBib29s
IGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiByZXN1
bHQpIGNvbnN0OworICAgIGJvb2wgZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiYgcmVzdWx0KSBjb25zdDsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2Vs
ZW1lbnQ7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBtX3J1bGVTb3VyY2VEYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146286</attachid>
            <date>2012-06-07 07:18:57 -0700</date>
            <delta_ts>2012-06-07 09:49:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88420-20120607181855.patch</filename>
            <type>text/plain</type>
            <size>50391</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY1MWEyMDIyNDY5YTFj
ZmUwNzFhOTZmNmMwZmIyOTg4NDhhOTBmNi4uNTk5YzgzOWZiNGIyMWFhNzUwMmJlMjA4OGU2YTU1
ZjM2M2VhZjUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEyLTA2LTA3ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUHJvdmlkZSBzb3VyY2UgZGF0YSBmb3IgYWxsIGtub3duIHJ1bGUgdHlwZXMgaW4gQ1NT
UGFyc2VyLCBleGNlcHQgImtleWZyYW1lIiBhbmQgInJlZ2lvbiIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGVyZSBpcyBu
byBjbGllbnQtdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuIEV4aXN0aW5nIEluc3BlY3RvciB0ZXN0
cyB3aWxsIGJlIG1vZGlmaWVkCisgICAgICAgIHRvIHRlc3QgdGhlIG5ldyBkYXRhIHByb3ZpZGVk
LCBhbG9uZyB3aXRoIHRoZSBuZWNlc3NhcnkgSW5zcGVjdG9yIHBsdW1iaW5nLgorCisgICAgICAg
ICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gpOiBDaGVjayBmb3IgbWVkaWFR
dWVyaWVzKCkgdmFsaWRpdHkgYmVmb3JlIHJlYXR0YWNoaW5nLgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOiBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgYmVsb3csIHRoZSBtZXRob2Qg
Y2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgZXh0ZW5zaW9uIG9mIHRoZQorICAgICAgICBzb3Vy
Y2UtYmFzZWQgQ1NTIG1vZGVsIHByb3ZpZGVkIGJ5IHRoZSBwYXJzZXIuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OkNTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNldHVwUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTaGVldCk6
IEZpbGwgYSB0cmVlIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBkYXRhIGVudHJpZXMuCisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOiBBY2NlcHQgYSBDU1NSdWxl
U291cmNlRGF0YSBmb3IgZmlsbGluZywgc2luY2UgaXQgbm93IGNvbnRhaW5zCisgICAgICAgIHRo
ZSByZWxhdGVkIHN0eWxlIHNvdXJjZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6Y3JlYXRlSW1wb3J0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0
ZU1lZGlhUnVsZSk6IENyZWF0ZSBDU1NNZWRpYVJ1bGUgZXZlbiBpZiBtZWRpYSBhbmQgcnVsZXMg
YXJlIGVtcHR5LAorICAgICAgICB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggTW96aWxsYS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkTmV3UnVsZVRvU291cmNlVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dXBkYXRlVG9wUnVs
ZUJvZHlFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjcmVhdGVSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyk6IFByb2Nlc3MgaW52YWxpZCBDU1MgcHJvcGVy
dGllcyB0byBwcm92aWRlIGNvcnJlY3Qgc291cmNlIGNvZGUgZGF0YSBmb3IgdGhlbS4KKyAgICAg
ICAgVGhpcyB3YXMgbW92ZWQgZnJvbSBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAoYXMgdGhpcyBt
ZXRob2QgYWN0dWFsbHkgYmVsb25ncyBpbiB0aGUgcGFyc2VyKS4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6bWFya0F0UnVsZUhlYWRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6bWFya1J1bGVIZWFkZXJFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjptYXJrUnVsZUJvZHlTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtS
dWxlQm9keUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVu
ZCk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAoQ1NTUGFyc2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cmVzZXRSdWxlSGVhZGVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldFByb3BlcnR5UmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwb3BSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmlzRXh0cmFjdGluZ1NvdXJjZURhdGEpOgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaDogRXh0ZW5kIHRoZSBtb2RlbCB0byBoYW5kbGUgbW9yZSB0eXBlcyBvZiBydWxl
cyBhbmQgdGhlaXIgY29udGFpbm1lbnRzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKENTU1J1bGVTb3Vy
Y2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGVVbmtu
b3duKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpDU1NSdWxlU291cmNl
RGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOiBGb2xs
b3cgdGhlIENTU1BhcnNlciBBUEkgY2hhbmdlcyBidXQgcmV0YWluIHRoZSBzdG9yZWQgQ1NTIHJ1
bGVzIHN0cnVjdHVyZS4KKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnNvdXJjZURhdGEpOgor
ICAgICAgICAoUGFyc2VkU3R5bGVTaGVldCk6CisgICAgICAgIChmbGF0dGVuU291cmNlRGF0YSk6
IEZsYXR0ZW4gdGhlIHJ1bGUgdHJlZSB0byByZXRhaW4gdGhlIGV4aXN0aW5nIHJ1bGUtaGFuZGxp
bmcgY29kZSBpbnRhY3QuCisgICAgICAgIChQYXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRh
KToKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpkZWxldGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6
ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0Lmg6CisgICAgICAgIChJbnNwZWN0b3JTdHls
ZVNoZWV0KToKKyAgICAgICAgKEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSk6CisK
IDIwMTItMDYtMDcgIEFycGl0YSBCYWh1Z3VuYSAgPGFycGl0YWJhaHVndW5hQGdtYWlsLmNvbT4K
IAogICAgICAgICBJbnNlcnRVbm9yZGVyZWRMaXN0IGFuZCBJbnNlcnRPcmRlcmVkTGlzdCAoZXhl
Y0NvbW1hbmQpIGRvIG5vdCByZW1vdmUgYnVsbGV0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5k
ZXggOWVkZGMxN2ExMDlhNDVhNWEwYjkzZDBlYmYwOGQ1ZDk1MDZhMzViOS4uNzlhMjMyNmQ2Yzg3
MWIwOGU1MjU2OTUwMTdmMDI4ZDRhNDc0MGE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBA
IC0zODIsNiArMzgyLDggQEAgY2hhcnNldDoKICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKICAgICAgaWYgKHAtPm1fc3R5bGVTaGVldCkKICAgICAg
ICAgIHAtPm1fc3R5bGVTaGVldC0+cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUoJDMp
OworICAgICBpZiAocC0+aXNFeHRyYWN0aW5nU291cmNlRGF0YSgpICYmIHAtPm1fY3VycmVudFJ1
bGVEYXRhU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgcC0+bV9ydWxlU291cmNlRGF0YVJlc3Vs
dC0+YXBwZW5kKENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGVVbmtub3duKCkpOwogICAgICAkJCA9
IDA7CiAgIH0KICAgfCBDSEFSU0VUX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKQEAgLTQxMCwx
NSArNDEyLDI1IEBAIHJ1bGVfbGlzdDoKICA7CiAKIHZhbGlkX3J1bGU6Ci0gICAgYmVmb3JlX3J1
bGVzZXQgcnVsZXNldCB7CisgICAgYmVmb3JlX3N0eWxlX3J1bGUgcnVsZXNldCB7CisgICAgICAg
ICQkID0gJDI7CisgICAgfQorICB8IGJlZm9yZV9tZWRpYV9ydWxlIG1lZGlhIHsKKyAgICAgICAg
JCQgPSAkMjsKKyAgICB9CisgIHwgYmVmb3JlX3BhZ2VfcnVsZSBwYWdlIHsKKyAgICAgICAgJCQg
PSAkMjsKKyAgICB9CisgIHwgYmVmb3JlX2ZvbnRfZmFjZV9ydWxlIGZvbnRfZmFjZSB7CisgICAg
ICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9yZV9rZXlmcmFtZXNfcnVsZSBrZXlmcmFtZXMg
ewogICAgICAgICAkJCA9ICQyOwogICAgIH0KLSAgfCBtZWRpYQotICB8IHBhZ2UKLSAgfCBmb250
X2ZhY2UKLSAgfCBrZXlmcmFtZXMKICAgfCBuYW1lc3BhY2UKLSAgfCBpbXBvcnQKKyAgfCBiZWZv
cmVfaW1wb3J0X3J1bGUgaW1wb3J0IHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CiAgIHwgcmVn
aW9uCiAgIDsKIApAQCAtNDQ0LDEwICs0NTYsMTggQEAgYmxvY2tfcnVsZV9saXN0OgogICA7CiAK
IGJsb2NrX3ZhbGlkX3J1bGU6Ci0gICAgcnVsZXNldAotICB8IHBhZ2UKLSAgfCBmb250X2ZhY2UK
LSAgfCBrZXlmcmFtZXMKKyAgICBiZWZvcmVfc3R5bGVfcnVsZSBydWxlc2V0IHsKKyAgICAgICAg
JCQgPSAkMjsKKyAgICB9CisgIHwgYmVmb3JlX3BhZ2VfcnVsZSBwYWdlIHsKKyAgICAgICAgJCQg
PSAkMjsKKyAgICB9CisgIHwgYmVmb3JlX2ZvbnRfZmFjZV9ydWxlIGZvbnRfZmFjZSB7CisgICAg
ICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9yZV9rZXlmcmFtZXNfcnVsZSBrZXlmcmFtZXMg
eworICAgICAgICAkJCA9ICQyOworICAgIH0KICAgOwogCiBibG9ja19ydWxlOgpAQCAtNDU1LDI2
ICs0NzUsNDAgQEAgYmxvY2tfcnVsZToKICAgfCBpbnZhbGlkX3J1bGUKICAgfCBpbnZhbGlkX2F0
CiAgIHwgbmFtZXNwYWNlCi0gIHwgaW1wb3J0Ci0gIHwgbWVkaWEKKyAgfCBiZWZvcmVfaW1wb3J0
X3J1bGUgaW1wb3J0IHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgIHwgYmVmb3JlX21lZGlh
X3J1bGUgbWVkaWEgeworICAgICAgICAkJCA9ICQyOworICAgIH0KICAgOwogCithdF9pbXBvcnRf
aGVhZGVyX2VuZF9tYXliZV9zcGFjZToKKyAgICBtYXliZV9zcGFjZSB7CisgICAgICAgIENTU1Bh
cnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1h
cmtSdWxlSGVhZGVyRW5kKCk7CisgICAgICAgIHAtPm1hcmtSdWxlQm9keVN0YXJ0KCk7CisgICAg
fQorICAgIDsKIAogaW1wb3J0OgotICAgIElNUE9SVF9TWU0gbWF5YmVfc3BhY2Ugc3RyaW5nX29y
X3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0ICc7JyB7CisgICAgSU1QT1JUX1NZTSBh
dF9pbXBvcnRfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNl
IG1heWJlX21lZGlhX2xpc3QgJzsnIHsKICAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIqPihwYXJzZXIpLT5jcmVhdGVJbXBvcnRSdWxlKCQzLCAkNSk7CiAgICAgfQotICB8IElNUE9S
VF9TWU0gbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9s
aXN0IFRPS0VOX0VPRiB7CisgIHwgSU1QT1JUX1NZTSBhdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXli
ZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX2xpc3QgVE9LRU5f
RU9GIHsKICAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVh
dGVJbXBvcnRSdWxlKCQzLCAkNSk7CiAgICAgfQotICB8IElNUE9SVF9TWU0gbWF5YmVfc3BhY2Ug
c3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0IGludmFsaWRfYmxvY2sg
eworICB8IElNUE9SVF9TWU0gYXRfaW1wb3J0X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ugc3RyaW5n
X29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0IGludmFsaWRfYmxvY2sgewogICAg
ICAgICAkJCA9IDA7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBv
cFJ1bGVEYXRhKCk7CiAgICAgfQogICB8IElNUE9SVF9TWU0gZXJyb3IgJzsnIHsKICAgICAgICAg
JCQgPSAwOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxl
RGF0YSgpOwogICAgIH0KICAgfCBJTVBPUlRfU1lNIGVycm9yIGludmFsaWRfYmxvY2sgewogICAg
ICAgICAkJCA9IDA7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBv
cFJ1bGVEYXRhKCk7CiAgICAgfQogICA7CiAKQEAgLTU5OSwxNSArNjMzLDM2IEBAIG1lZGlhX2xp
c3Q6CiAgICAgfQogICAgIDsKIAorYXRfcnVsZV9ib2R5X3N0YXJ0OgorICAgIC8qIGVtcHR5ICov
IHsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2Vy
KTsKKyAgICAgICAgcC0+bWFya1J1bGVCb2R5U3RhcnQoKTsKKyAgICB9CisgICAgOworCithdF9u
b25fZGVjbGFyYXRpb25fYm9keV9zdGFydDoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIENT
U1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAt
Pm1hcmtSdWxlQm9keVN0YXJ0KGZhbHNlKTsKKyAgICB9CisgICAgOworCithdF9tZWRpYV9oZWFk
ZXJfZW5kX21heWJlX3NwYWNlOgorICAgIG1heWJlX3NwYWNlIHsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+bWFya1J1bGVIZWFkZXJFbmQoKTsKKyAgICB9CisgICAg
OworCiBtZWRpYToKLSAgICBNRURJQV9TWU0gbWF5YmVfc3BhY2UgbWVkaWFfbGlzdCAneycgbWF5
YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgewotICAgICAgICAkJCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZU1lZGlhUnVsZSgkMywgJDYpOworICAg
IE1FRElBX1NZTSBtYXliZV9zcGFjZSBtZWRpYV9saXN0IGF0X3J1bGVfaGVhZGVyX2VuZCAneycg
YXRfbm9uX2RlY2xhcmF0aW9uX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0
IHNhdmVfYmxvY2sgeworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNl
ciktPmNyZWF0ZU1lZGlhUnVsZSgkMywgJDgpOwogICAgIH0KLSAgICB8IE1FRElBX1NZTSBtYXli
ZV9zcGFjZSAneycgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgewotICAg
ICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZU1lZGlhUnVs
ZSgwLCAkNSk7CisgICAgfCBNRURJQV9TWU0gYXRfbWVkaWFfaGVhZGVyX2VuZF9tYXliZV9zcGFj
ZSAneycgYXRfbm9uX2RlY2xhcmF0aW9uX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVs
ZV9saXN0IHNhdmVfYmxvY2sgeworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+
KHBhcnNlciktPmNyZWF0ZU1lZGlhUnVsZSgwLCAkNik7CiAgICAgfQotICAgIHwgTUVESUFfU1lN
IG1heWJlX3NwYWNlICc7JyB7CisgICAgfCBNRURJQV9TWU0gYXRfbWVkaWFfaGVhZGVyX2VuZF9t
YXliZV9zcGFjZSAnOycgewogICAgICAgICAkJCA9IDA7CisgICAgICAgIHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogICAgIDsKIApAQCAtNjE4
LDkgKzY3Myw5IEBAIG1lZGl1bToKICAgOwogCiBrZXlmcmFtZXM6Ci0gICAgV0VCS0lUX0tFWUZS
QU1FU19TWU0gbWF5YmVfc3BhY2Uga2V5ZnJhbWVfbmFtZSBtYXliZV9zcGFjZSAneycgbWF5YmVf
c3BhY2Uga2V5ZnJhbWVzX3J1bGUgJ30nIHsKLSAgICAgICAgJCQgPSAkNzsKLSAgICAgICAgJDct
PnNldE5hbWUoJDMpOworICAgIFdFQktJVF9LRVlGUkFNRVNfU1lNIG1heWJlX3NwYWNlIGtleWZy
YW1lX25hbWUgbWF5YmVfc3BhY2UgYXRfcnVsZV9oZWFkZXJfZW5kICd7JyBhdF9ub25fZGVjbGFy
YXRpb25fYm9keV9zdGFydCBtYXliZV9zcGFjZSBrZXlmcmFtZXNfcnVsZSAnfScgeworICAgICAg
ICAkJCA9ICQ5OworICAgICAgICAkOS0+c2V0TmFtZSgkMyk7CiAgICAgfQogICAgIDsKICAgCkBA
IC02MzUsNiArNjkwLDkgQEAga2V5ZnJhbWVzX3J1bGU6CiAgICAgICAgICQkID0gJDE7CiAgICAg
ICAgIGlmICgkMikKICAgICAgICAgICAgICQkLT5wYXJzZXJBcHBlbmRLZXlmcmFtZSgkMik7Cisg
ICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7Cisg
ICAgICAgIGlmIChwLT5pc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCisgICAgICAgICAgICBwLT51
cGRhdGVUb3BSdWxlQm9keUVuZCgpOwogICAgIH0KICAgICA7CiAKQEAgLTY3Myw4ICs3MzEsOCBA
QCBrZXk6CiAgICAgOwogCiBwYWdlOgotICAgIFBBR0VfU1lNIG1heWJlX3NwYWNlIHBhZ2Vfc2Vs
ZWN0b3IgbWF5YmVfc3BhY2UKLSAgICAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25zX2FuZF9t
YXJnaW5zIGNsb3NpbmdfYnJhY2UgeworICAgIFBBR0VfU1lNIG1heWJlX3NwYWNlIHBhZ2Vfc2Vs
ZWN0b3IgbWF5YmVfc3BhY2UgYXRfcnVsZV9oZWFkZXJfZW5kCisgICAgJ3snIGF0X3J1bGVfYm9k
eV9zdGFydCBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25zX2FuZF9t
YXJnaW5zIGNsb3NpbmdfYnJhY2UgewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICBpZiAoJDMpCiAgICAgICAgICAgICAkJCA9
IHAtPmNyZWF0ZVBhZ2VSdWxlKHAtPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQzKSk7CkBAIC02ODMs
MTMgKzc0MSwxNiBAQCBwYWdlOgogICAgICAgICAgICAgcC0+Y2xlYXJQcm9wZXJ0aWVzKCk7CiAg
ICAgICAgICAgICAvLyBBbHNvIGNsZWFyIG1hcmdpbiBhdC1ydWxlcyBoZXJlIG9uY2Ugd2UgZnVs
bHkgaW1wbGVtZW50IG1hcmdpbiBhdC1ydWxlcyBwYXJzaW5nLgogICAgICAgICAgICAgJCQgPSAw
OworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURh
dGEoKTsKICAgICAgICAgfQogICAgIH0KICAgICB8IFBBR0VfU1lNIGVycm9yIGludmFsaWRfYmxv
Y2sgewogICAgICAgJCQgPSAwOworICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2Vy
KS0+cG9wUnVsZURhdGEoKTsKICAgICB9CiAgICAgfCBQQUdFX1NZTSBlcnJvciAnOycgewogICAg
ICAgJCQgPSAwOworICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVs
ZURhdGEoKTsKICAgICB9CiAgICAgOwogCkBAIC03ODUsMTUgKzg0NiwxNyBAQCBtYXJnaW5fc3lt
IDoKICAgICA7CiAKIGZvbnRfZmFjZToKLSAgICBGT05UX0ZBQ0VfU1lNIG1heWJlX3NwYWNlCi0g
ICAgJ3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9uX2xpc3QgJ30nICBtYXliZV9zcGFjZSB7Cisg
ICAgRk9OVF9GQUNFX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmQgbWF5YmVfc3BhY2UKKyAgICAneycg
YXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJh
dGlvbl9saXN0ICd9JyAgbWF5YmVfc3BhY2UgewogICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZvbnRGYWNlUnVsZSgpOwogICAgIH0KICAgICB8IEZP
TlRfRkFDRV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CiAgICAgICAkJCA9IDA7CisgICAgICBz
dGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KICAg
ICB8IEZPTlRfRkFDRV9TWU0gZXJyb3IgJzsnIHsKICAgICAgICQkID0gMDsKKyAgICAgIHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogOwogCkBA
IC04NDAsMjIgKzkwMyw1NyBAQCBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb246CiAgICAg
fQogICA7CiAKLWJlZm9yZV9ydWxlc2V0OgorYmVmb3JlX3N0eWxlX3J1bGU6CisgICAgLyogZW1w
dHkgKi8geworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihw
YXJzZXIpOworICAgICAgICBwLT5tYXJrU3R5bGVSdWxlSGVhZGVyU3RhcnQoKTsKKyAgICB9Cisg
IDsKKworYmVmb3JlX21lZGlhX3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBDU1NQ
YXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBwLT5t
YXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6Ok1FRElBX1JVTEUpOworICAg
IH0KKyAgOworCitiZWZvcmVfaW1wb3J0X3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAg
ICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAg
ICBwLT5tYXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OklNUE9SVF9SVUxF
KTsKKyAgICB9CisgIDsKKworYmVmb3JlX2ZvbnRfZmFjZV9ydWxlOgorICAgIC8qIGVtcHR5ICov
IHsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2Vy
KTsKKyAgICAgICAgcC0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpG
T05UX0ZBQ0VfUlVMRSk7CisgICAgfQorICA7CisKK2JlZm9yZV9wYWdlX3J1bGU6CisgICAgLyog
ZW1wdHkgKi8geworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIq
PihwYXJzZXIpOworICAgICAgICBwLT5tYXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJj
ZURhdGE6OlBBR0VfUlVMRSk7CisgICAgfQorICA7CisKK2JlZm9yZV9rZXlmcmFtZXNfcnVsZToK
ICAgICAvKiBlbXB0eSAqLyB7CiAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlcik7Ci0gICAgICAgIHAtPm1hcmtTZWxlY3Rvckxpc3RTdGFydCgpOwor
ICAgICAgICBwLT5tYXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OktFWUZS
QU1FU19SVUxFKTsKICAgICB9CiAgIDsKIAotYmVmb3JlX3J1bGVfb3BlbmluZ19icmFjZToKK2F0
X3J1bGVfaGVhZGVyX2VuZDoKICAgICAvKiBlbXB0eSAqLyB7CiAgICAgICAgIENTU1BhcnNlciog
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7Ci0gICAgICAgIHAtPm1hcmtTZWxl
Y3Rvckxpc3RFbmQoKTsKKyAgICAgICAgcC0+bWFya1J1bGVIZWFkZXJFbmQoKTsKICAgICB9CiAg
IDsKIAogcnVsZXNldDoKLSAgICBzZWxlY3Rvcl9saXN0IGJlZm9yZV9ydWxlX29wZW5pbmdfYnJh
Y2UgJ3snIG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNs
b3NpbmdfYnJhY2UgeworICAgIHNlbGVjdG9yX2xpc3QgYXRfcnVsZV9oZWFkZXJfZW5kICd7JyBt
YXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2Jy
YWNlIHsKICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKTsKICAgICAgICAgJCQgPSBwLT5jcmVhdGVTdHlsZVJ1bGUoJDEpOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKaW5kZXggNmRiMzIwYzI3MGQ4ZjhhY2VlN2RmMzNkM2Ex
N2EzZTNjMjc2NjM4Ni4uNTViYmFhNWZkYTI1NjAxYTc0ZTg1MzRhY2RlYzlmNzcyYTA3MThjMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lk
IENTU01lZGlhUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlTWVkaWEqIHJ1bGUpCiB7CiAgICAgQVNT
RVJUKHJ1bGUpOwogICAgIG1fbWVkaWFSdWxlID0gcnVsZTsKLSAgICBpZiAobV9tZWRpYUNTU09N
V3JhcHBlcikKKyAgICBpZiAobV9tZWRpYUNTU09NV3JhcHBlciAmJiBtX21lZGlhUnVsZS0+bWVk
aWFRdWVyaWVzKCkpCiAgICAgICAgIG1fbWVkaWFDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1fbWVk
aWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Y2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9jaGls
ZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA5NzMz
NDJkMDkwODA5OTc5ZmI5MGU2MDE5NGU2YjljZjY2NjE4MDEzLi42YzNlOGEyOTRiZTJkMjMxZGQw
NDg0MGYwMWRkYmE5ZmJhOTdlMjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMjM2
LDExICsyMzYsOSBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBjb250ZXh0KQogICAgICwgbV9oYWRTeW50YWN0aWNhbGx5VmFsaWRDU1NSdWxlKGZhbHNlKQog
ICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQogICAgICwgbV9pblN0eWxlUnVsZU9y
RGVjbGFyYXRpb24oZmFsc2UpCi0gICAgLCBtX3NlbGVjdG9yTGlzdFJhbmdlKDAsIDApCi0gICAg
LCBtX3J1bGVCb2R5UmFuZ2UoMCwgMCkKKyAgICAsIG1faGVhZGVyUmFuZ2UoMCwgMCkKICAgICAs
IG1fcHJvcGVydHlSYW5nZShVSU5UX01BWCwgVUlOVF9NQVgpCi0gICAgLCBtX3J1bGVSYW5nZU1h
cCgwKQotICAgICwgbV9jdXJyZW50UnVsZURhdGEoMCkKKyAgICAsIG1fcnVsZVNvdXJjZURhdGFS
ZXN1bHQoMCkKICAgICAsIG1fcGFyc2luZ01vZGUoTm9ybWFsTW9kZSkKICAgICAsIG1fY3VycmVu
dENoYXJhY3RlcigwKQogICAgICwgbV90b2tlblN0YXJ0KDApCkBAIC0yODUsNiArMjgzLDcgQEAg
dm9pZCBDU1NQYXJzZXJTdHJpbmc6Omxvd2VyKCkKIAogdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFy
c2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIq
IHN1ZmZpeCkKIHsKKyAgICBtX3BhcnNlZFRleHQgPSBzdHJpbmc7CiAgICAgaW50IGxlbmd0aCA9
IHN0cmluZy5sZW5ndGgoKSArIHN0cmxlbihwcmVmaXgpICsgc3RybGVuKHN1ZmZpeCkgKyAxOwog
CiAgICAgbV9kYXRhU3RhcnQgPSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltsZW5ndGhdKTsKQEAg
LTMwMSwyNCArMzAwLDE5IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFy
KiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyCiAgICAgbV9kYXRhU3Rh
cnRbbGVuZ3RoIC0gMV0gPSAwOwogCiAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gbV90b2tlblN0
YXJ0ID0gbV9kYXRhU3RhcnQuZ2V0KCk7Ci0gICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CiB9CiAK
LXZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBpbnQgc3RhcnRMaW5lTnVtYmVyLCBTdHlsZVJ1bGVSYW5nZU1h
cCogcnVsZVJhbmdlTWFwKQordm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoU3R5bGVTaGVldENv
bnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydExpbmVOdW1iZXIs
IFJ1bGVTb3VyY2VEYXRhTGlzdCogcnVsZVNvdXJjZURhdGFSZXN1bHQpCiB7CiAgICAgc2V0U3R5
bGVTaGVldChzaGVldCk7CiAgICAgbV9kZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJl
c2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KLSAgICBtX3J1bGVSYW5nZU1hcCA9IHJ1bGVSYW5n
ZU1hcDsKLSAgICBpZiAocnVsZVJhbmdlTWFwKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRh
ID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0
YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKLSAgICB9
CisgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdCA9IHJ1bGVTb3VyY2VEYXRhUmVzdWx0OwogCiAg
ICAgbV9saW5lTnVtYmVyID0gc3RhcnRMaW5lTnVtYmVyOwogICAgIHNldHVwUGFyc2VyKCIiLCBz
dHJpbmcsICIiKTsKICAgICBjc3N5eXBhcnNlKHRoaXMpOwotICAgIG1fcnVsZVJhbmdlTWFwID0g
MDsKLSAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IDA7CisgICAgbV9ydWxlU291cmNlRGF0YVJlc3Vs
dCA9IDA7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5jbGVhcigpOwogICAgIG1fcnVsZSA9
IDA7CiB9CiAKQEAgLTExMTksMTYgKzExMTMsMTYgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2Vs
ZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXMK
ICAgICBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgPSAwOwogfQogCi1ib29sIENTU1Bh
cnNlcjo6cGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiBzdHlsZVNvdXJj
ZURhdGEsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENTU1Bh
cnNlcjo6cGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3Vy
Y2VEYXRhLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIC8v
IExlbmd0aCBvZiB0aGUgIkAtd2Via2l0LWRlY2xzeyIgcHJlZml4LgogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSAxNTsKIAogICAgIHNldFN0eWxlU2hlZXQoY29udGV4
dFN0eWxlU2hlZXQpOwogCi0gICAgaWYgKHN0eWxlU291cmNlRGF0YSkgewotICAgICAgICBtX2N1
cnJlbnRSdWxlRGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKLSAgICAgICAgbV9j
dXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YVJlZiA9
IHJ1bGVTb3VyY2VEYXRhOworICAgIGlmIChydWxlU291cmNlRGF0YVJlZikgeworICAgICAgICBt
X2N1cnJlbnRSdWxlRGF0YVN0YWNrLmFwcGVuZChydWxlU291cmNlRGF0YVJlZik7CiAgICAgICAg
IG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gdHJ1ZTsKICAgICB9CiAKQEAgLTExNDUsMTkg
KzExMzksMTYgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0
eVNldCogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3QKICAgICAgICAgY2xlYXJQcm9wZXJ0
aWVzKCk7CiAgICAgfQogCi0gICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhKSB7Ci0gICAgICAgIG1f
Y3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0ID0g
MDsKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5
UmFuZ2UuZW5kID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9w
ZXJ0eVNvdXJjZURhdGE+OjppdGVyYXRvciBpdCA9IG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNv
dXJjZURhdGEtPnByb3BlcnR5RGF0YS5iZWdpbigpLCBlbmRJdCA9IG1fY3VycmVudFJ1bGVEYXRh
LT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5lbmQoKTsgaXQgIT0gZW5kSXQ7ICsraXQp
IHsKLSAgICAgICAgICAgICgqaXQpLnJhbmdlLnN0YXJ0IC09IHByZWZpeExlbmd0aDsKLSAgICAg
ICAgICAgICgqaXQpLnJhbmdlLmVuZCAtPSBwcmVmaXhMZW5ndGg7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgaWYgKHJ1bGVTb3VyY2VEYXRhUmVmKSB7CisgICAgICAgICAgcnVsZVNvdXJjZURhdGFS
ZWYtPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAgICAgICAgIHJ1bGVTb3VyY2VEYXRhUmVm
LT5ydWxlQm9keVJhbmdlLmVuZCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgICBmb3IgKFZl
Y3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+OjppdGVyYXRvciBpdCA9IHJ1bGVTb3VyY2VEYXRh
UmVmLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5iZWdpbigpLCBlbmRJdCA9IHJ1bGVT
b3VyY2VEYXRhUmVmLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5lbmQoKTsgaXQgIT0g
ZW5kSXQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgaXQtPnJhbmdlLnN0YXJ0IC09IHByZWZpeExl
bmd0aDsKKyAgICAgICAgICAgICAgaXQtPnJhbmdlLmVuZCAtPSBwcmVmaXhMZW5ndGg7CisgICAg
ICAgICAgfQogCi0gICAgaWYgKHN0eWxlU291cmNlRGF0YSkgewotICAgICAgICAqc3R5bGVTb3Vy
Y2VEYXRhID0gbV9jdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS5yZWxlYXNlKCk7Ci0g
ICAgICAgIG1fY3VycmVudFJ1bGVEYXRhID0gMDsKICAgICAgICAgbV9pblN0eWxlUnVsZU9yRGVj
bGFyYXRpb24gPSBmYWxzZTsKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5jbGVhcigp
OwogICAgIH0KICAgICByZXR1cm4gb2s7CiB9CkBAIC05MDkwLDE3ICs5MDgxLDM0IEBAIFN0eWxl
UnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJp
bmcmIHVybCwgTWVkaWFRdWVyCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxTdHlsZVJ1
bGVJbXBvcnQ+IHJ1bGUgPSBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZSh1cmwsIG1lZGlhKTsKICAg
ICBTdHlsZVJ1bGVJbXBvcnQqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgaWYgKGlzRXh0cmFj
dGluZ1NvdXJjZURhdGEoKSkgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3Rh
Y2suaXNFbXB0eSgpKTsKKyAgICAgICAgbWFya1J1bGVCb2R5RW5kKCk7CisgICAgICAgIFJlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gY3VycmVudFJ1bGVEYXRhID0gcG9wUnVsZURhdGEoKTsKKyAg
ICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsK
KyAgICAgICAgcmVzZXRSdWxlSGVhZGVyUmFuZ2UoKTsKKyAgICB9CiAgICAgbV9wYXJzZWRSdWxl
cy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFN0eWxl
UnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKE1lZGlhUXVlcnlTZXQqIG1lZGlh
LCBSdWxlTGlzdCogcnVsZXMpCiB7Ci0gICAgaWYgKCFtZWRpYSB8fCAhcnVsZXMpCi0gICAgICAg
IHJldHVybiAwOwogICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNs
YXJhdGlvbnMgPSBmYWxzZTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlTWVkaWE+IHJ1bGUgPSBTdHls
ZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCAqcnVsZXMpOworICAgIFJlZlB0cjxTdHlsZVJ1bGVN
ZWRpYT4gcnVsZTsKKyAgICBpZiAocnVsZXMpCisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVNZWRp
YTo6Y3JlYXRlKG1lZGlhLCAqcnVsZXMpOworICAgIGVsc2UgeworICAgICAgICBSdWxlTGlzdCBl
bXB0eVJ1bGVzOworICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShtZWRpYSwg
ZW1wdHlSdWxlcyk7CisgICAgfQogICAgIFN0eWxlUnVsZU1lZGlhKiByZXN1bHQgPSBydWxlLmdl
dCgpOworICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJU
KCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIG1hcmtSdWxlQm9k
eUVuZCgpOworICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0
YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoY3VycmVu
dFJ1bGVEYXRhLnJlbGVhc2UoKSk7CisgICAgfQogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1
bGUucmVsZWFzZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTExNCwxMSArOTEyMiw1
MiBAQCBDU1NQYXJzZXI6OlJ1bGVMaXN0KiBDU1NQYXJzZXI6OmNyZWF0ZVJ1bGVMaXN0KCkKICAg
ICByZXR1cm4gbGlzdFB0cjsKIH0KIAordm9pZCBDU1NQYXJzZXI6OmFkZE5ld1J1bGVUb1NvdXJj
ZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZSkKK3sKKyAgICAvLyBQcmVj
b25kaXRpb246IChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpLgorICAgIGlmIChtX2N1cnJlbnRS
dWxlRGF0YVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+
YXBwZW5kKHJ1bGUpOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5s
YXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOworfQorCit2b2lkIENTU1BhcnNlcjo6dXBk
YXRlVG9wUnVsZUJvZHlFbmQoKQoreworICAgIC8vIFByZWNvbmRpdGlvbjogKGlzRXh0cmFjdGlu
Z1NvdXJjZURhdGEoKSkuCisgICAgQ1NTUnVsZVNvdXJjZURhdGEqIGRhdGE7CisgICAgaWYgKG1f
Y3VycmVudFJ1bGVEYXRhU3RhY2suaXNFbXB0eSgpKQorICAgICAgICBkYXRhID0gbV9ydWxlU291
cmNlRGF0YVJlc3VsdC0+aXNFbXB0eSgpID8gMCA6IG1fcnVsZVNvdXJjZURhdGFSZXN1bHQtPmxh
c3QoKS5nZXQoKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGEgPSBtX2N1cnJlbnRSdWxlRGF0YVN0
YWNrLmxhc3QoKS0+Y2hpbGRSdWxlcy5pc0VtcHR5KCkgPyAwIDogbV9jdXJyZW50UnVsZURhdGFT
dGFjay5sYXN0KCktPmNoaWxkUnVsZXMubGFzdCgpLmdldCgpOworCisgICAgQVNTRVJUKGRhdGEp
OworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGRhdGEtPnJ1bGVCb2R5UmFu
Z2UuZW5kID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7Cit9CisKK1Bhc3NSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IENTU1BhcnNlcjo6cG9wUnVsZURhdGEoKQoreworICAgIGlm
ICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NF
UlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2suaXNFbXB0eSgpKTsKKyAgICBSZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+IGRhdGEgPSBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmxhc3QoKTsKKyAgICBt
X2N1cnJlbnRSdWxlRGF0YVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gZGF0YS5yZWxl
YXNlKCk7Cit9CisKIFN0eWxlUnVsZUtleWZyYW1lcyogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFt
ZXNSdWxlKCkKIHsKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVj
bGFyYXRpb25zID0gZmFsc2U7CiAgICAgUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSA9
IFN0eWxlUnVsZUtleWZyYW1lczo6Y3JlYXRlKCk7CiAgICAgU3R5bGVSdWxlS2V5ZnJhbWVzKiBy
dWxlUHRyID0gcnVsZS5nZXQoKTsKKyAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKSB7
CisgICAgICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5KCkpOworICAg
ICAgICBtYXJrUnVsZUJvZHlFbmQoKTsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRh
PiBjdXJyZW50UnVsZURhdGEgPSBwb3BSdWxlRGF0YSgpOworICAgICAgICBhZGROZXdSdWxlVG9T
b3VyY2VUcmVlKGN1cnJlbnRSdWxlRGF0YS5yZWxlYXNlKCkpOworICAgIH0KICAgICBtX3BhcnNl
ZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJ1bGVQdHI7CiB9CkBA
IC05MTM2LDE4ICs5MTg1LDE2IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlU3R5
bGVSdWxlKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlCiAgICAgICAgIHJ1
bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgpKTsKICAgICAgICAgcmVz
dWx0ID0gcnVsZS5nZXQoKTsKICAgICAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxl
YXNlKCkpOwotICAgICAgICBpZiAobV9ydWxlUmFuZ2VNYXApIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX2N1cnJlbnRSdWxlRGF0YSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5
bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZSA9IG1fcnVsZUJvZHlSYW5nZTsKLSAgICAgICAg
ICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZSA9IG1fc2VsZWN0b3JMaXN0
UmFuZ2U7Ci0gICAgICAgICAgICBtX3J1bGVSYW5nZU1hcC0+c2V0KHJlc3VsdCwgbV9jdXJyZW50
UnVsZURhdGEucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhID0gQ1NT
UnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICAgICAgbV9jdXJyZW50UnVsZURhdGEt
PnN0eWxlU291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CisgICAgICAg
IGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9j
dXJyZW50UnVsZURhdGFTdGFjay5pc0VtcHR5KCkpOworICAgICAgICAgICAgUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEgPSBwb3BSdWxlRGF0YSgpOworICAgICAgICAg
ICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhjdXJyZW50UnVsZURhdGEuZ2V0KCkpOworICAg
ICAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgp
KTsKICAgICAgICAgICAgIG1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpOwotICAgIHJlc2V0UnVs
ZUJvZHlNYXJrcygpOworICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCisgICAgICAg
IHJlc2V0UnVsZUhlYWRlclJhbmdlKCk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTkxNzIsNiArOTIxOSwxMyBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQ
YXJzZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSgpCiAgICAgcnVsZS0+c2V0UHJvcGVydGllcyhjcmVh
dGVTdHlsZVByb3BlcnR5U2V0KCkpOwogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIFN0eWxl
UnVsZUZvbnRGYWNlKiByZXN1bHQgPSBydWxlLmdldCgpOworICAgIGlmIChpc0V4dHJhY3RpbmdT
b3VyY2VEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmlz
RW1wdHkoKSk7CisgICAgICAgIG1hcmtSdWxlQm9keUVuZCgpOworICAgICAgICBSZWZQdHI8Q1NT
UnVsZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAg
IGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoY3VycmVudFJ1bGVEYXRhLmdldCgpKTsKKyAgICAg
ICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsKKyAg
ICB9CiAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CkBAIC05MjUxLDYgKzkzMDUsMTMgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFy
c2VyOjpjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2Vs
ZWMKICAgICAgICAgcnVsZS0+cGFyc2VyQWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvclZlY3Rv
cik7CiAgICAgICAgIHJ1bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgp
KTsKICAgICAgICAgcGFnZVJ1bGUgPSBydWxlLmdldCgpOworICAgICAgICBpZiAoaXNFeHRyYWN0
aW5nU291cmNlRGF0YSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRh
U3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIG1hcmtSdWxlQm9keUVuZCgpOworICAgICAg
ICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEgPSBwb3BSdWxl
RGF0YSgpOworICAgICAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhjdXJyZW50UnVs
ZURhdGEuZ2V0KCkpOworICAgICAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50
UnVsZURhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgfQogICAgICAgICBtX3BhcnNlZFJ1bGVzLmFw
cGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgfQogICAgIGNsZWFyUHJvcGVydGllcygpOwpAQCAt
OTI3NCw2ICs5MzM1LDggQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVSZWdpb25S
dWxlKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHIKIAogICAgIFN0eWxlUnVs
ZVJlZ2lvbiogcmVzdWx0ID0gcmVnaW9uUnVsZS5nZXQoKTsKICAgICBtX3BhcnNlZFJ1bGVzLmFw
cGVuZChyZWdpb25SdWxlLnJlbGVhc2UoKSk7CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURh
dGEoKSkKKyAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShDU1NSdWxlU291cmNlRGF0YTo6
Y3JlYXRlVW5rbm93bigpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05MzUzLDE1ICs5
NDE2LDc0IEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhUXVlcnlT
ZXQqIG1lZGlhKQogICAgIG1lZGlhLT5zZXRMYXN0TGluZShtX2xpbmVOdW1iZXIpOwogfQogCi12
b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdFN0YXJ0KCkKK3ZvaWQgQ1NTUGFyc2VyOjpm
aXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSkKIHsK
LSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3Rh
cnQuZ2V0KCk7CisgICAgaWYgKCFydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhKQorICAgICAgICBy
ZXR1cm47CisgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9
IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKKyAgICB1bnNpZ25lZCBz
aXplID0gcHJvcGVydHlEYXRhLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIHVuc2lnbmVkIHN0eWxlU3RhcnQgPSBydWxlRGF0YS0+cnVsZUJvZHlSYW5nZS5z
dGFydDsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG1fcGFyc2VkVGV4dC5jaGFyYWN0
ZXJzKCk7CisgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKiBuZXh0RGF0YSA9ICYocHJvcGVydHlE
YXRhLmF0KDApKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogY3VycmVudERhdGEgPSBuZXh0RGF0YTsKKyAg
ICAgICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAtIDEgPyAmKHByb3BlcnR5RGF0YS5hdChpICsgMSkp
IDogMDsKKworICAgICAgICBpZiAoY3VycmVudERhdGEtPnBhcnNlZE9rKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFuZ2UuZW5kID4gMCAmJiBjaGFy
YWN0ZXJzW3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2UuZW5kIC0gMV0gPT0gJzsnKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdW5zaWduZWQgcHJvcGVydHlFbmRJblN0
eWxlU2hlZXQ7CisgICAgICAgIGlmICghbmV4dERhdGEpCisgICAgICAgICAgICBwcm9wZXJ0eUVu
ZEluU3R5bGVTaGVldCA9IHJ1bGVEYXRhLT5ydWxlQm9keVJhbmdlLmVuZCAtIDE7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCAr
IG5leHREYXRhLT5yYW5nZS5zdGFydCAtIDE7CisKKyAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNl
KGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxlU2hlZXRdKSkKKyAgICAgICAgICAgIC0tcHJv
cGVydHlFbmRJblN0eWxlU2hlZXQ7CisKKyAgICAgICAgLy8gcHJvcGVydHlFbmRJblN0eWxlU2hl
ZXQgcG9pbnRzIGF0IHRoZSBsYXN0IHByb3BlcnR5IHRleHQgY2hhcmFjdGVyLgorICAgICAgICB1
bnNpZ25lZCBuZXdQcm9wZXJ0eUVuZCA9IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IC0gc3R5bGVT
dGFydCArIDE7IC8vIEV4Y2x1c2l2ZSBvZiB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rl
ci4KKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgIT0gbmV3UHJvcGVydHlFbmQp
IHsKKyAgICAgICAgICAgIGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgPSBuZXdQcm9wZXJ0eUVuZDsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0
ICsgY3VycmVudERhdGEtPnJhbmdlLnN0YXJ0ICsgY3VycmVudERhdGEtPm5hbWUubGVuZ3RoKCk7
CisgICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5k
SW5TdHlsZVNoZWV0ICYmIGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0gIT0gJzon
KQorICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKKyAgICAgICAgICAg
IGlmICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQpCisg
ICAgICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0OyAvLyBTaGlmdCBwYXN0IHRo
ZSAnOicuCisgICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3Bl
cnR5RW5kSW5TdHlsZVNoZWV0ICYmIGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbdmFsdWVTdGFydElu
U3R5bGVTaGVldF0pKQorICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsK
KyAgICAgICAgICAgIC8vIE5lZWQgdG8gZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhl
IHByb3BlcnR5IHZhbHVlLgorICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVlID0gbV9wYXJz
ZWRUZXh0LnN1YnN0cmluZyh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0LCBwcm9wZXJ0eUVuZEluU3R5
bGVTaGVldCAtIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgKyAoY2hhcmFjdGVyc1twcm9wZXJ0eUVu
ZEluU3R5bGVTaGVldF0gPT0gJzsnID8gMCA6IDEpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBDU1NQYXJzZXI6Om1hcmtTdHlsZVJ1bGVIZWFkZXJTdGFydCgpCit7CisgICAgaWYgKCFt
X3J1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAgICAgICByZXR1cm47CisgICAgbV9oZWFkZXJSYW5n
ZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOworICAgIG1fY3VycmVu
dFJ1bGVEYXRhU3RhY2suYXBwZW5kKENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoQ1NTUnVsZVNv
dXJjZURhdGE6OlNUWUxFX1JVTEUpKTsKK30KKwordm9pZCBDU1NQYXJzZXI6Om1hcmtBdFJ1bGVI
ZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6VHlwZSBydWxlVHlwZSkKK3sKKyAgICBpZiAo
IW1fcnVsZVNvdXJjZURhdGFSZXN1bHQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hlYWRlclJh
bmdlLnN0YXJ0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CisgICAgbV9jdXJy
ZW50UnVsZURhdGFTdGFjay5hcHBlbmQoQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShydWxlVHlw
ZSkpOwogfQogCi12b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdEVuZCgpCit2b2lkIENT
U1BhcnNlcjo6bWFya1J1bGVIZWFkZXJFbmQoKQogewotICAgIGlmICghbV9jdXJyZW50UnVsZURh
dGEpCisgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQogICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmlzRW1wdHkoKSk7CiAgICAgVUNoYXIq
IGxpc3RFbmQgPSBtX3Rva2VuU3RhcnQ7CiAgICAgd2hpbGUgKGxpc3RFbmQgPiBtX2RhdGFTdGFy
dC5nZXQoKSArIDEpIHsKICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCoobGlzdEVuZCAtIDEpKSkK
QEAgLTkzNjksMjQgKzk0OTEsMzAgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RF
bmQoKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV9zZWxl
Y3Rvckxpc3RSYW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhU3RhcnQuZ2V0KCk7CisgICAgbV9o
ZWFkZXJSYW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhU3RhcnQuZ2V0KCk7CisgICAgbV9jdXJy
ZW50UnVsZURhdGFTdGFjay5sYXN0KCktPnJ1bGVIZWFkZXJSYW5nZSA9IG1faGVhZGVyUmFuZ2U7
CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCit2b2lkIENTU1BhcnNl
cjo6bWFya1J1bGVCb2R5U3RhcnQoYm9vbCBpc0RlY2xhcmF0aW9uKQogeworICAgIGlmICghbV9y
dWxlU291cmNlRGF0YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIG9mZnNl
dCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogICAgIGlmICgqbV90b2tlblN0
YXJ0ID09ICd7JykKICAgICAgICAgKytvZmZzZXQ7IC8vIFNraXAgdGhlIHJ1bGUgYm9keSBvcGVu
aW5nIGJyYWNlLgotICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpCi0gICAg
ICAgIG1fcnVsZUJvZHlSYW5nZS5zdGFydCA9IG9mZnNldDsKLSAgICBtX2luU3R5bGVSdWxlT3JE
ZWNsYXJhdGlvbiA9IHRydWU7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmlz
RW1wdHkoKSk7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5sYXN0KCktPnJ1bGVCb2R5UmFu
Z2Uuc3RhcnQgPSBvZmZzZXQ7CisgICAgaWYgKGlzRGVjbGFyYXRpb24pCisgICAgICAgIG1faW5T
dHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gdHJ1ZTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtS
dWxlQm9keUVuZCgpCiB7CisgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAgICAg
ICByZXR1cm47CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3Rh
cnQuZ2V0KCk7Ci0gICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5lbmQpCi0gICAgICAg
IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSBvZmZzZXQ7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrLmlzRW1wdHkoKSk7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5sYXN0KCkt
PnJ1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1By
b3BlcnR5U3RhcnQoKQpAQCAtOTQwNCw3ICs5NTMyLDcgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQ
cm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkK
ICAgICBpZiAoKm1fdG9rZW5TdGFydCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGludG8g
dGhlIHByb3BlcnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwogICAgIG1fcHJvcGVydHlSYW5n
ZS5lbmQgPSBvZmZzZXQ7Ci0gICAgaWYgKG1fcHJvcGVydHlSYW5nZS5zdGFydCAhPSBVSU5UX01B
WCAmJiBtX2N1cnJlbnRSdWxlRGF0YSkgeworICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQg
IT0gVUlOVF9NQVggJiYgIW1fY3VycmVudFJ1bGVEYXRhU3RhY2suaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIFRoaXMgc3R1ZmYgaXMgb25seSBleGVjdXRlZCB3aGVuIHRoZSBzdHlsZSBkYXRhIHJl
dHJpZXZhbCBpcyByZXF1ZXN0ZWQgYnkgY2xpZW50LgogICAgICAgICBjb25zdCB1bnNpZ25lZCBz
dGFydCA9IG1fcHJvcGVydHlSYW5nZS5zdGFydDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgZW5k
ID0gbV9wcm9wZXJ0eVJhbmdlLmVuZDsKQEAgLTk0MTgsMTAgKzk1NDYsMTEgQEAgdm9pZCBDU1NQ
YXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9w
ZXJ0eVBhcnNlZCkKICAgICAgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KGNv
bG9uSW5kZXgpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBwcm9w
ZXJ0eVN0cmluZy5zdWJzdHJpbmcoY29sb25JbmRleCArIDEsIHByb3BlcnR5U3RyaW5nLmxlbmd0
aCgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHJhbmdlIGlz
IHJlbGF0aXZlIHRvIHRoZSBkZWNsYXJhdGlvbiBzdGFydCBvZmZzZXQuCi0gICAgICAgIG1fY3Vy
cmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoCi0gICAg
ICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91
bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdl
LnN0YXJ0LCBlbmQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CisgICAgICAgIFNvdXJjZVJh
bmdlJiB0b3BSdWxlQm9keVJhbmdlID0gbV9jdXJyZW50UnVsZURhdGFTdGFjay5sYXN0KCktPnJ1
bGVCb2R5UmFuZ2U7CisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2subGFzdCgpLT5zdHls
ZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoCisgICAgICAgICAgICBDU1NQcm9wZXJ0
eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQsIGlzUHJvcGVydHlQYXJz
ZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kIC0gdG9w
UnVsZUJvZHlSYW5nZS5zdGFydCkpKTsKICAgICB9Ci0gICAgcmVzZXRQcm9wZXJ0eU1hcmtzKCk7
CisgICAgcmVzZXRQcm9wZXJ0eVJhbmdlKCk7CiB9CiAKIHN0YXRpYyBDU1NQcm9wZXJ0eUlEIGNz
c1Byb3BlcnR5SUQoY29uc3QgVUNoYXIqIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDdjNWE2MjM3NzQ4ZmYyN2M5NTVmNzNhNWIzNDAwNWIw
YzhlMjczNjEuLjkzNzljODZhMjlmMzNiNTQxMGI2MWZmNWIyMmRhYjRjNGFkMGY0OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogCiAgICAgfkNTU1Bh
cnNlcigpOwogCi0gICAgdm9pZCBwYXJzZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0
IFN0cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIgPSAwLCBTdHlsZVJ1bGVSYW5nZU1hcCogPSAw
KTsKKyAgICB2b2lkIHBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5n
JiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFJ1bGVTb3VyY2VEYXRhTGlzdCogPSAwKTsKICAg
ICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHBhcnNlUnVsZShTdHlsZVNoZWV0Q29udGVudHMq
LCBjb25zdCBTdHJpbmcmKTsKICAgICBQYXNzUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IHBhcnNlS2V5
ZnJhbWVSdWxlKFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRp
YyBib29sIHBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0
IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0Q29udGVu
dHMqKTsKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHBhcnNlU3lz
dGVtQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBB
dG9taWNTdHJpbmcmKTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZh
bGlkUHJpbWl0aXZlKGludCBpZGVudCwgQ1NTUGFyc2VyVmFsdWUqKTsKLSAgICBib29sIHBhcnNl
RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NT
dHlsZVNvdXJjZURhdGE+KiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7
CisgICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBjb25zdCBTdHJp
bmcmLCBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiwgU3R5bGVTaGVldENvbnRlbnRzKiBj
b250ZXh0U3R5bGVTaGVldCk7CiAgICAgUGFzc093blB0cjxNZWRpYVF1ZXJ5PiBwYXJzZU1lZGlh
UXVlcnkoY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+LCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCA9
IGZhbHNlKTsKQEAgLTMxMSwyMCArMzExLDI2IEBAIHB1YmxpYzoKIAogICAgIC8vIHRva2VuaXpl
ciBtZXRob2RzIGFuZCBkYXRhCiAgICAgYm9vbCBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbjsK
LSAgICBTb3VyY2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOwotICAgIFNvdXJjZVJhbmdlIG1f
cnVsZUJvZHlSYW5nZTsKKyAgICBTdHJpbmcgbV9wYXJzZWRUZXh0OworICAgIFNvdXJjZVJhbmdl
IG1faGVhZGVyUmFuZ2U7CiAgICAgU291cmNlUmFuZ2UgbV9wcm9wZXJ0eVJhbmdlOwotICAgIFN0
eWxlUnVsZVJhbmdlTWFwKiBtX3J1bGVSYW5nZU1hcDsKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IG1fY3VycmVudFJ1bGVEYXRhOwotICAgIHZvaWQgbWFya1NlbGVjdG9yTGlzdFN0YXJ0
KCk7Ci0gICAgdm9pZCBtYXJrU2VsZWN0b3JMaXN0RW5kKCk7Ci0gICAgdm9pZCBtYXJrUnVsZUJv
ZHlTdGFydCgpOworICAgIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4gbV9jdXJy
ZW50UnVsZURhdGFTdGFjazsKKyAgICBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+
KiBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0OworCisgICAgdm9pZCBmaXhVbnBhcnNlZFByb3BlcnR5
UmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRhKik7CisgICAgdm9pZCBtYXJrU3R5bGVSdWxlSGVhZGVy
U3RhcnQoKTsKKyAgICB2b2lkIG1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0
YTo6VHlwZSk7CisgICAgdm9pZCBtYXJrUnVsZUhlYWRlckVuZCgpOworICAgIHZvaWQgbWFya1J1
bGVCb2R5U3RhcnQoYm9vbCBpc0RlY2xhcmF0aW9uID0gdHJ1ZSk7CiAgICAgdm9pZCBtYXJrUnVs
ZUJvZHlFbmQoKTsKICAgICB2b2lkIG1hcmtQcm9wZXJ0eVN0YXJ0KCk7CiAgICAgdm9pZCBtYXJr
UHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQp
OwotICAgIHZvaWQgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpIHsgbV9zZWxlY3Rvckxpc3RSYW5n
ZS5zdGFydCA9IG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gMDsgfQotICAgIHZvaWQgcmVzZXRS
dWxlQm9keU1hcmtzKCkgeyBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBtX3J1bGVCb2R5UmFuZ2Uu
ZW5kID0gMDsgfQotICAgIHZvaWQgcmVzZXRQcm9wZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFu
Z2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0KKyAgICB2b2lkIGFk
ZE5ld1J1bGVUb1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4pOworICAg
IHZvaWQgdXBkYXRlVG9wUnVsZUJvZHlFbmQoKTsKKyAgICB2b2lkIHJlc2V0UnVsZUhlYWRlclJh
bmdlKCkgeyBtX2hlYWRlclJhbmdlLnN0YXJ0ID0gbV9oZWFkZXJSYW5nZS5lbmQgPSAwOyB9Cisg
ICAgdm9pZCByZXNldFByb3BlcnR5UmFuZ2UoKSB7IG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IG1f
cHJvcGVydHlSYW5nZS5lbmQgPSBVSU5UX01BWDsgfQorICAgIFBhc3NSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHBvcFJ1bGVEYXRhKCk7CisgICAgYm9vbCBpc0V4dHJhY3RpbmdTb3VyY2VEYXRh
KCkgY29uc3QgeyByZXR1cm4gISFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0OyB9CiAgICAgaW50IGxl
eCh2b2lkKiB5eWx2YWwpOwogICAgIGludCB0b2tlbigpIHsgcmV0dXJuIG1fdG9rZW47IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCmluZGV4IDU4MDNmOTRi
MWMyZmE3NTFlOWU1NmUxMDI1MmNiZGI2NDBlMTVlMjQuLjA5ZGU5ZmVmMzk2YTZmNjM2NmNmZWVl
MDRmYzNlZjI2YjNkNGNlNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eVNvdXJjZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhLmgKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBTdHlsZVJ1bGU7CitjbGFzcyBTdHlsZVJ1bGVCYXNlOwogCiBzdHJ1Y3QgU291cmNlUmFuZ2Ug
ewogICAgIFNvdXJjZVJhbmdlKCk7CkBAIC03OCwyMiArNzgsNTUgQEAgc3RydWN0IENTU1N0eWxl
U291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1N0eWxlU291cmNlRGF0YT4gewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU291cmNlRGF0YSgpKTsKICAgICB9CiAK
LSAgICAvLyBSYW5nZSBvZiB0aGUgc3R5bGUgdGV4dCBpbiB0aGUgZW5jbG9zaW5nIHNvdXJjZS4K
LSAgICBTb3VyY2VSYW5nZSBzdHlsZUJvZHlSYW5nZTsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHlT
b3VyY2VEYXRhPiBwcm9wZXJ0eURhdGE7CiB9OwogCitjbGFzcyBDU1NSdWxlU291cmNlRGF0YTsK
K3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gPiBSdWxlU291cmNlRGF0
YUxpc3Q7CisKIHN0cnVjdCBDU1NSdWxlU291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENT
U1J1bGVTb3VyY2VEYXRhPiB7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURh
dGE+IGNyZWF0ZSgpCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVU5LTk9XTl9SVUxFLAorICAg
ICAgICBTVFlMRV9SVUxFLAorICAgICAgICBDSEFSU0VUX1JVTEUsCisgICAgICAgIElNUE9SVF9S
VUxFLAorICAgICAgICBNRURJQV9SVUxFLAorICAgICAgICBGT05UX0ZBQ0VfUlVMRSwKKyAgICAg
ICAgUEFHRV9SVUxFLAorICAgICAgICBLRVlGUkFNRVNfUlVMRQorICAgIH07CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3JlYXRlKFR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUnVsZVNvdXJjZURhdGEodHlwZSkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGVV
bmtub3duKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUnVsZVNvdXJj
ZURhdGEoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUnVsZVNvdXJjZURhdGEo
VU5LTk9XTl9SVUxFKSk7CiAgICAgfQogCisgICAgQ1NTUnVsZVNvdXJjZURhdGEoVHlwZSB0eXBl
KQorICAgICAgICA6IHR5cGUodHlwZSkKKyAgICB7CisgICAgICAgIGlmICh0eXBlID09IFNUWUxF
X1JVTEUgfHwgdHlwZSA9PSBGT05UX0ZBQ0VfUlVMRSB8fCB0eXBlID09IFBBR0VfUlVMRSkKKyAg
ICAgICAgICAgIHN0eWxlU291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7
CisgICAgfQorCisgICAgVHlwZSB0eXBlOworCiAgICAgLy8gUmFuZ2Ugb2YgdGhlIHNlbGVjdG9y
IGxpc3QgaW4gdGhlIGVuY2xvc2luZyBzb3VyY2UuCi0gICAgU291cmNlUmFuZ2Ugc2VsZWN0b3JM
aXN0UmFuZ2U7CisgICAgU291cmNlUmFuZ2UgcnVsZUhlYWRlclJhbmdlOworCisgICAgLy8gUmFu
Z2Ugb2YgdGhlIHJ1bGUgYm9keSAoZS5nLiBzdHlsZSB0ZXh0IGZvciBzdHlsZSBydWxlcykgaW4g
dGhlIGVuY2xvc2luZyBzb3VyY2UuCisgICAgU291cmNlUmFuZ2UgcnVsZUJvZHlSYW5nZTsKKwor
ICAgIC8vIE9ubHkgZm9yIENTU1N0eWxlUnVsZXMsIENTU0ZvbnRGYWNlUnVsZXMsIGFuZCBDU1NQ
YWdlUnVsZXMuCiAgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc3R5bGVTb3VyY2VEYXRh
OworCisgICAgLy8gT25seSBmb3IgQ1NTTWVkaWFSdWxlcy4KKyAgICBSdWxlU291cmNlRGF0YUxp
c3QgY2hpbGRSdWxlczsKIH07Ci10eXBlZGVmIEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiA+IFN0eWxlUnVsZVJhbmdlTWFwOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNwcAppbmRleCA0NDk4YWRjMTRmNzEyMTkwNmZiMmJlNjA2OTA1YmUwMjdjNWI1MDMxLi41
ZWViODMyNmFmZTQxZTQzYWU1MTQ2NjZhNWUzOWQ3M2Y4NTIyNjg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC01MCw2ICs1MCw3
IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIK
ICNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgiCkBAIC02MCwyMCArNjEsMjEgQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIFdlYkNvcmU6OlR5
cGVCdWlsZGVyOjpBcnJheTsKK3VzaW5nIFdlYkNvcmU6OlJ1bGVTb3VyY2VEYXRhTGlzdDsKK3Vz
aW5nIFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOwogCiBjbGFzcyBQYXJzZWRTdHlsZVNoZWV0
IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNv
dXJjZURhdGE+ID4gU291cmNlRGF0YTsKICAgICBQYXJzZWRTdHlsZVNoZWV0KCk7CiAKICAgICBX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBjc3NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9w
YXJzZXJPdXRwdXQ7IH0KICAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBt
X3RleHQ7IH0KICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKICAgICBib29s
IGhhc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2hhc1RleHQ7IH0KLSAgICBTb3VyY2VEYXRhKiBz
b3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhLmdldCgpOyB9Ci0gICAgdm9p
ZCBzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8U291cmNlRGF0YT4gc291cmNlRGF0YSk7CisgICAg
UnVsZVNvdXJjZURhdGFMaXN0KiBzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VE
YXRhLmdldCgpOyB9CisgICAgdm9pZCBzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVsZVNvdXJj
ZURhdGFMaXN0Pik7CiAgICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VEYXRhOyB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBydWxl
U291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkKSBjb25zdDsK
IAogcHJpdmF0ZToKIApAQCAtODEsNyArODMsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkNT
U1N0eWxlU2hlZXQqIG1fcGFyc2VyT3V0cHV0OwogICAgIFN0cmluZyBtX3RleHQ7CiAgICAgYm9v
bCBtX2hhc1RleHQ7Ci0gICAgT3duUHRyPFNvdXJjZURhdGE+IG1fc291cmNlRGF0YTsKKyAgICBP
d25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBtX3NvdXJjZURhdGE7CiB9OwogCiBQYXJzZWRTdHls
ZVNoZWV0OjpQYXJzZWRTdHlsZVNoZWV0KCkKQEAgLTk3LDEyICs5OSwzMyBAQCB2b2lkIFBhcnNl
ZFN0eWxlU2hlZXQ6OnNldFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHNldFNvdXJjZURh
dGEobnVsbHB0cik7CiB9CiAKLXZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0U291cmNlRGF0YShQ
YXNzT3duUHRyPFNvdXJjZURhdGE+IHNvdXJjZURhdGEpCitzdGF0aWMgdm9pZCBmbGF0dGVuU291
cmNlRGF0YShSdWxlU291cmNlRGF0YUxpc3QqIGRhdGFMaXN0LCBSdWxlU291cmNlRGF0YUxpc3Qq
IHRhcmdldCkKIHsKLSAgICBtX3NvdXJjZURhdGEgPSBzb3VyY2VEYXRhOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZGF0YUxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxD
U1NSdWxlU291cmNlRGF0YT4mIGRhdGEgPSBkYXRhTGlzdC0+YXQoaSk7CisgICAgICAgIGlmIChk
YXRhLT50eXBlID09IENTU1J1bGVTb3VyY2VEYXRhOjpTVFlMRV9SVUxFKQorICAgICAgICAgICAg
dGFyZ2V0LT5hcHBlbmQoZGF0YSk7CisgICAgICAgIGVsc2UgaWYgKGRhdGEtPnR5cGUgPT0gQ1NT
UnVsZVNvdXJjZURhdGE6Ok1FRElBX1JVTEUpCisgICAgICAgICAgICBmbGF0dGVuU291cmNlRGF0
YSgmZGF0YS0+Y2hpbGRSdWxlcywgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgUGFyc2VkU3R5
bGVTaGVldDo6c2V0U291cmNlRGF0YShQYXNzT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gc291
cmNlRGF0YSkKK3sKKyAgICBpZiAoIXNvdXJjZURhdGEpIHsKKyAgICAgICAgbV9zb3VyY2VEYXRh
LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NvdXJjZURhdGEgPSBh
ZG9wdFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpOworCisgICAgLy8gRklYTUU6IFRoaXMg
aXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdG8gcmV0YWluIHRoZSBvcmlnaW5hbCBmbGF0IHNvdXJj
ZURhdGEgc3RydWN0dXJlCisgICAgLy8gY29udGFpbmluZyBvbmx5IHN0eWxlIHJ1bGVzLCBldmVu
IHRob3VnaCBDU1NQYXJzZXIgbm93IHByb3ZpZGVzIHRoZSBmdWxsIHJ1bGUgc291cmNlIGRhdGEg
dHJlZS4KKyAgICAvLyBOb3JtYWxseSwgd2Ugc2hvdWxkIGp1c3QgYXNzaWduIG1fc291cmNlRGF0
YSA9IHNvdXJjZURhdGE7CisgICAgZmxhdHRlblNvdXJjZURhdGEoc291cmNlRGF0YS5nZXQoKSwg
bV9zb3VyY2VEYXRhLmdldCgpKTsKIH0KIAotUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VE
YXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBj
b25zdAorUGFzc1JlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2VkU3R5bGVT
aGVldDo6cnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBpZiAo
IWhhc1NvdXJjZURhdGEoKSB8fCBpbmRleCA+PSBtX3NvdXJjZURhdGEtPnNpemUoKSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0yNzEsNyArMjk0LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb24K
IAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IG1fcGFyZW50U3R5
bGVTaGVldCA/IG1fcGFyZW50U3R5bGVTaGVldC0+cnVsZVNvdXJjZURhdGFGb3IobV9zdHlsZS5n
ZXQoKSkgOiAwOwogICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdl
KGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHls
ZUJvZHlSYW5nZSkpOworICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291cmNlUmFuZ2VP
YmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CiB9CkBAIC0zMTQsMTAgKzMzNywxMCBAQCBib29sIEluc3BlY3RvclN0eWxlOjpz
ZXRQcm9wZXJ0eVRleHQodW5zaWduZWQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlUZXh0
LAogCiAgICAgaWYgKHByb3BlcnR5VGV4dC5zdHJpcFdoaXRlU3BhY2UoKS5sZW5ndGgoKSkgewog
ICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gdGVtcE11dGFibGVTdHlsZSA9IFN0eWxl
UHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwotICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRh
PiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNy
ZWF0ZShDU1NSdWxlU291cmNlRGF0YTo6U1RZTEVfUlVMRSk7CiAgICAgICAgIENTU1BhcnNlciBw
KENTU1N0cmljdE1vZGUpOwotICAgICAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcE11dGFibGVT
dHlsZS5nZXQoKSwgcHJvcGVydHlUZXh0ICsgIiAiICsgYm9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBu
b25lIiwgJnNvdXJjZURhdGEsIG1fc3R5bGUtPnBhcmVudFN0eWxlU2hlZXQoKS0+Y29udGVudHMo
KSk7Ci0gICAgICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEg
PSBzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0
ZW1wTXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5
TmFtZSArICI6IG5vbmUiLCBzb3VyY2VEYXRhLCBtX3N0eWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkt
PmNvbnRlbnRzKCkpOworICAgICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJv
cGVydHlEYXRhID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CiAg
ICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0eURhdGEuc2l6ZSgpOwogCiAg
ICAgICAgIC8vIEF0IGxlYXN0IG9uZSBwcm9wZXJ0eSArIHRoZSBib2d1cyBwcm9wZXJ0eSBhZGRl
ZCBqdXN0IGFib3ZlIHNob3VsZCBiZSBwcmVzZW50LgpAQCAtMzU1LDcgKzM3OCw3IEBAIGJvb2wg
SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eVRleHQsCiAgICAgICAgICpvbGRUZXh0ID0gYWxsUHJvcGVydGllcy5hdChp
bmRleCkucmF3VGV4dDsKICAgICAgICAgZWRpdG9yLnJlcGxhY2VQcm9wZXJ0eShpbmRleCwgcHJv
cGVydHlUZXh0KTsKICAgICB9IGVsc2UKLSAgICAgICAgZWRpdG9yLmluc2VydFByb3BlcnR5KGlu
ZGV4LCBwcm9wZXJ0eVRleHQsIHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5
UmFuZ2UubGVuZ3RoKCkpOworICAgICAgICBlZGl0b3IuaW5zZXJ0UHJvcGVydHkoaW5kZXgsIHBy
b3BlcnR5VGV4dCwgc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5sZW5ndGgoKSk7CiAKICAgICBy
ZXR1cm4gYXBwbHlTdHlsZVRleHQoZWRpdG9yLnN0eWxlVGV4dCgpKTsKIH0KQEAgLTQxMyw3ICs0
MzYsNyBAQCBib29sIEluc3BlY3RvclN0eWxlOjpzdHlsZVRleHQoU3RyaW5nKiByZXN1bHQpIGNv
bnN0CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTb3Vy
Y2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJv
ZHlSYW5nZTsKKyAgICBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+cnVsZUJv
ZHlSYW5nZTsKICAgICAqcmVzdWx0ID0gc3R5bGVTaGVldFRleHQuc3Vic3RyaW5nKGJvZHlSYW5n
ZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC03NzEsNyArNzk0LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRS
dWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBjb25zdCBTdHJpbmcKICAgICB9
CiAKICAgICBTdHJpbmcgc2hlZXRUZXh0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7Ci0g
ICAgc2hlZXRUZXh0LnJlcGxhY2Uoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQs
IHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCAtIHNvdXJjZURhdGEtPnNlbGVjdG9y
TGlzdFJhbmdlLnN0YXJ0LCBzZWxlY3Rvcik7CisgICAgc2hlZXRUZXh0LnJlcGxhY2Uoc291cmNl
RGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0LCBzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2Uu
bGVuZ3RoKCksIHNlbGVjdG9yKTsKICAgICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNldFRleHQoc2hl
ZXRUZXh0KTsKICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTgzMCw3ICs4NTMsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIH0KIAogICAg
IFN0cmluZyBzaGVldFRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKLSAgICBzaGVl
dFRleHQucmVtb3ZlKHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0LCBzb3VyY2VE
YXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCAtIHNvdXJjZURhdGEtPnNl
bGVjdG9yTGlzdFJhbmdlLnN0YXJ0ICsgMSk7CisgICAgc2hlZXRUZXh0LnJlbW92ZShzb3VyY2VE
YXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5k
IC0gc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0ICsgMSk7CiAgICAgbV9wYXJzZWRT
dHlsZVNoZWV0LT5zZXRUZXh0KHNoZWV0VGV4dCk7CiAgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2Vk
KCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05MTEsMTIgKzkzNCw4IEBAIFBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RG
b3JSdWxlKENTCiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOwogICAg
IGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVT
b3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOwotICAgIGlmIChzb3VyY2VEYXRhKSB7Ci0gICAg
ICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4gc2VsZWN0b3JSYW5nZSA9
IFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNl
dFN0YXJ0KHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0KQotICAgICAgICAgICAg
LnNldEVuZChzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOwotICAgICAgICByZXN1
bHQtPnNldFNlbGVjdG9yUmFuZ2Uoc2VsZWN0b3JSYW5nZS5yZWxlYXNlKCkpOwotICAgIH0KKyAg
ICBpZiAoc291cmNlRGF0YSkKKyAgICAgICAgcmVzdWx0LT5zZXRTZWxlY3RvclJhbmdlKGJ1aWxk
U291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlKSk7CiAKICAgICBS
ZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+ID4gbWVkaWFBcnJheSA9IEFy
cmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPjo6Y3JlYXRlKCk7CiAKQEAgLTk0OCw3ICs5
NjcsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKAogICAgICAgICBTdHJpbmcgc2hlZXRUZXh0
OwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBnZXRUZXh0KCZzaGVldFRleHQpOwogICAgICAgICBp
ZiAoc3VjY2VzcykgewotICAgICAgICAgICAgY29uc3QgU291cmNlUmFuZ2UmIGJvZHlSYW5nZSA9
IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2U7CisgICAgICAgICAg
ICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+cnVsZUJvZHlSYW5n
ZTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0Q3NzVGV4dChzaGVldFRleHQuc3Vic3RyaW5nKGJv
ZHlSYW5nZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCkpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTA5OCwyMiArMTExNyw5IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6ZW5zdXJlU291cmNlRGF0YSgpCiAKICAgICBSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBu
ZXdTdHlsZVNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKTsKICAgICBDU1NQYXJz
ZXIgcChDU1NTdHJpY3RNb2RlKTsKLSAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7
Ci0gICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVl
dC0+dGV4dCgpLCAwLCAmcnVsZVJhbmdlTWFwKTsKLSAgICBPd25QdHI8UGFyc2VkU3R5bGVTaGVl
dDo6U291cmNlRGF0YT4gcmFuZ2VzVmVjdG9yKGFkb3B0UHRyKG5ldyBQYXJzZWRTdHlsZVNoZWV0
OjpTb3VyY2VEYXRhKSk7Ci0KLSAgICBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4gcnVsZXM7Ci0gICAg
UmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3QoQ1NTU3R5bGVTaGVl
dDo6Y3JlYXRlKG5ld1N0eWxlU2hlZXQpLmdldCgpKTsKLSAgICBjb2xsZWN0RmxhdFJ1bGVzKHJ1
bGVMaXN0LCAmcnVsZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBydWxlcy5z
aXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXA6Oml0ZXJh
dG9yIGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZXMuYXQoaSktPnN0eWxlUnVsZSgpKTsKLSAg
ICAgICAgaWYgKGl0ICE9IHJ1bGVSYW5nZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgZml4VW5w
YXJzZWRQcm9wZXJ0eVJhbmdlcyhpdC0+c2Vjb25kLmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQt
PnRleHQoKSk7Ci0gICAgICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVuZChpdC0+c2Vjb25kKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0U291cmNlRGF0
YShyYW5nZXNWZWN0b3IucmVsZWFzZSgpKTsKKyAgICBPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0
PiBydWxlU291cmNlRGF0YVJlc3VsdCA9IGFkb3B0UHRyKG5ldyBSdWxlU291cmNlRGF0YUxpc3Qo
KSk7CisgICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVT
aGVldC0+dGV4dCgpLCAwLCBydWxlU291cmNlRGF0YVJlc3VsdC5nZXQoKSk7CisgICAgbV9wYXJz
ZWRTdHlsZVNoZWV0LT5zZXRTb3VyY2VEYXRhKHJ1bGVTb3VyY2VEYXRhUmVzdWx0LnJlbGVhc2Uo
KSk7CiAgICAgcmV0dXJuIG1fcGFyc2VkU3R5bGVTaGVldC0+aGFzU291cmNlRGF0YSgpOwogfQog
CkBAIC0xMTU3LDggKzExNjMsOCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hl
ZXRUZXh0V2l0aENoYW5nZWRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEg
PSBydWxlU291cmNlRGF0YUZvcihzdHlsZSk7Ci0gICAgdW5zaWduZWQgYm9keVN0YXJ0ID0gc291
cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydDsKLSAgICB1bnNp
Z25lZCBib2R5RW5kID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5n
ZS5lbmQ7CisgICAgdW5zaWduZWQgYm9keVN0YXJ0ID0gc291cmNlRGF0YS0+cnVsZUJvZHlSYW5n
ZS5zdGFydDsKKyAgICB1bnNpZ25lZCBib2R5RW5kID0gc291cmNlRGF0YS0+cnVsZUJvZHlSYW5n
ZS5lbmQ7CiAgICAgQVNTRVJUKGJvZHlTdGFydCA8PSBib2R5RW5kKTsKIAogICAgIFN0cmluZyB0
ZXh0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7CkBAIC0xMjUzLDUxICsxMjU5LDYgQEAg
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4g
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjoKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENT
U1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0VGV4dCkK
LXsKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gcnVs
ZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwotICAgIHVuc2lnbmVkIHNpemUg
PSBwcm9wZXJ0eURhdGEuc2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0
eWxlQm9keVJhbmdlLnN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3R5bGVT
aGVldFRleHQuY2hhcmFjdGVycygpOwotICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogbmV4dERh
dGEgPSAmKHByb3BlcnR5RGF0YS5hdCgwKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIGN1cnJlbnREYXRh
ID0gbmV4dERhdGE7Ci0gICAgICAgIG5leHREYXRhID0gaSA8IHNpemUgLSAxID8gJihwcm9wZXJ0
eURhdGEuYXQoaSArIDEpKSA6IDA7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRP
aykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdl
LmVuZCA+IDAgJiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVu
ZCAtIDFdID09ICc7JykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHVuc2lnbmVk
IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0OwotICAgICAgICBpZiAoIW5leHREYXRhKQotICAgICAg
ICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5lbmQgLSAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9w
ZXJ0eUVuZEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBuZXh0RGF0YS0+cmFuZ2Uuc3RhcnQg
LSAxOwotCi0gICAgICAgIHdoaWxlIChpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3Byb3BlcnR5RW5k
SW5TdHlsZVNoZWV0XSkpCi0gICAgICAgICAgICAtLXByb3BlcnR5RW5kSW5TdHlsZVNoZWV0Owot
Ci0gICAgICAgIC8vIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IHBvaW50cyBhdCB0aGUgbGFzdCBw
cm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KLSAgICAgICAgdW5zaWduZWQgbmV3UHJvcGVydHlFbmQg
PSBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHN0eWxlU3RhcnQgKyAxOyAvLyBFeGNsdXNpdmUg
b2YgdGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0ZXIuCi0gICAgICAgIGlmIChjdXJyZW50
RGF0YS0+cmFuZ2UuZW5kICE9IG5ld1Byb3BlcnR5RW5kKSB7Ci0gICAgICAgICAgICBjdXJyZW50
RGF0YS0+cmFuZ2UuZW5kID0gbmV3UHJvcGVydHlFbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCB2
YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIGN1cnJlbnREYXRhLT5yYW5nZS5z
dGFydCArIGN1cnJlbnREYXRhLT5uYW1lLmxlbmd0aCgpOwotICAgICAgICAgICAgd2hpbGUgKHZh
bHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBjaGFyYWN0
ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdICE9ICc6JykKLSAgICAgICAgICAgICAgICArK3Zh
bHVlU3RhcnRJblN0eWxlU2hlZXQ7Ci0gICAgICAgICAgICBpZiAodmFsdWVTdGFydEluU3R5bGVT
aGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0KQotICAgICAgICAgICAgICAgICsrdmFsdWVT
dGFydEluU3R5bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0aGUgJzonLgotICAgICAgICAgICAgd2hp
bGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBp
c0hUTUxTcGFjZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdKSkKLSAgICAgICAg
ICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7Ci0gICAgICAgICAgICAvLyBOZWVkIHRv
IGV4Y2x1ZGUgdGhlIHRyYWlsaW5nICc7JyBmcm9tIHRoZSBwcm9wZXJ0eSB2YWx1ZS4KLSAgICAg
ICAgICAgIGN1cnJlbnREYXRhLT52YWx1ZSA9IHN0eWxlU2hlZXRUZXh0LnN1YnN0cmluZyh2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0LCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHZhbHVlU3RhcnRJ
blN0eWxlU2hlZXQgKyAoY2hhcmFjdGVyc1twcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0gPT0gJzsn
ID8gMCA6IDEpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBJbnNwZWN0b3JTdHlsZVNo
ZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0LCBW
ZWN0b3I8Q1NTU3R5bGVSdWxlKj4qIHJlc3VsdCkKIHsKICAgICBpZiAoIXJ1bGVMaXN0KQpAQCAt
MTM4NCwxMyArMTM0NSwxMSBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKICAgICBpZiAobV9ydWxlU291cmNlRGF0YSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3J1bGVTb3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJj
ZURhdGE6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHNvdXJjZURh
dGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIGJvb2wgc3VjY2VzcyA9IGdl
dFN0eWxlQXR0cmlidXRlUmFuZ2VzKCZzb3VyY2VEYXRhKTsKKyAgICBtX3J1bGVTb3VyY2VEYXRh
ID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShDU1NSdWxlU291cmNlRGF0YTo6U1RZTEVfUlVM
RSk7CisgICAgYm9vbCBzdWNjZXNzID0gZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMobV9ydWxlU291
cmNlRGF0YSk7CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBtX3J1bGVTb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEgPSBzb3VyY2VEYXRhLnJlbGVhc2Uo
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQxMCwxNCArMTM2OSwxNCBAQCBjb25zdCBT
dHJpbmcmIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZWxlbWVudFN0eWxlVGV4
dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJzdHlsZSIpLnN0
cmluZygpOwogfQogCi1ib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0
U3R5bGVBdHRyaWJ1dGVSYW5nZXMoUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCkg
Y29uc3QKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0
dHJpYnV0ZVJhbmdlcyhSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+JiByZXN1bHQpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAobV9zdHlsZVRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICgqcmVz
dWx0KS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOwotICAgICAgICAoKnJlc3VsdCktPnN0eWxl
Qm9keVJhbmdlLmVuZCA9IDA7CisgICAgICAgIHJlc3VsdC0+cnVsZUJvZHlSYW5nZS5zdGFydCA9
IDA7CisgICAgICAgIHJlc3VsdC0+cnVsZUJvZHlSYW5nZS5lbmQgPSAwOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5oCmluZGV4IDAzY2FiNjc3ZDIyNDNjN2Q1YzQ2NTAzMDQyODFkZDY5MmMxN2M5
ODcuLjNjZTM3NTVmNzA3OWUxYTMzMDJiM2IxMDcyOGRlMTQwZTM1NTI4OTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAtMjE5LDcgKzIx
OSw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEluc3BlY3RvclN0
eWxlOwogCi0gICAgc3RhdGljIHZvaWQgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxl
U291cmNlRGF0YSogcnVsZURhdGEsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldFRleHQpOwogICAg
IHN0YXRpYyB2b2lkIGNvbGxlY3RGbGF0UnVsZXMoUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4sIFZl
Y3RvcjxDU1NTdHlsZVJ1bGUqPiogcmVzdWx0KTsKICAgICBib29sIGVuc3VyZVRleHQoKSBjb25z
dDsKICAgICBib29sIGVuc3VyZVNvdXJjZURhdGEoKTsKQEAgLTI2OCw3ICsyNjcsNyBAQCBwcm90
ZWN0ZWQ6CiBwcml2YXRlOgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlKCkg
Y29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiBlbGVtZW50U3R5bGVUZXh0KCkgY29uc3Q7Ci0gICAg
Ym9vbCBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiog
cmVzdWx0KSBjb25zdDsKKyAgICBib29sIGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKFJlZlB0cjxD
U1NSdWxlU291cmNlRGF0YT4mIHJlc3VsdCkgY29uc3Q7CiAKICAgICBSZWZQdHI8RWxlbWVudD4g
bV9lbGVtZW50OwogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gbV9ydWxlU291cmNlRGF0
YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146312</attachid>
            <date>2012-06-07 09:49:17 -0700</date>
            <delta_ts>2012-06-08 04:23:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88420-20120607204915.patch</filename>
            <type>text/plain</type>
            <size>51089</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY1MWEyMDIyNDY5YTFj
ZmUwNzFhOTZmNmMwZmIyOTg4NDhhOTBmNi4uNTk5YzgzOWZiNGIyMWFhNzUwMmJlMjA4OGU2YTU1
ZjM2M2VhZjUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEyLTA2LTA3ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUHJvdmlkZSBzb3VyY2UgZGF0YSBmb3IgYWxsIGtub3duIHJ1bGUgdHlwZXMgaW4gQ1NT
UGFyc2VyLCBleGNlcHQgImtleWZyYW1lIiBhbmQgInJlZ2lvbiIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGVyZSBpcyBu
byBjbGllbnQtdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuIEV4aXN0aW5nIEluc3BlY3RvciB0ZXN0
cyB3aWxsIGJlIG1vZGlmaWVkCisgICAgICAgIHRvIHRlc3QgdGhlIG5ldyBkYXRhIHByb3ZpZGVk
LCBhbG9uZyB3aXRoIHRoZSBuZWNlc3NhcnkgSW5zcGVjdG9yIHBsdW1iaW5nLgorCisgICAgICAg
ICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gpOiBDaGVjayBmb3IgbWVkaWFR
dWVyaWVzKCkgdmFsaWRpdHkgYmVmb3JlIHJlYXR0YWNoaW5nLgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOiBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgYmVsb3csIHRoZSBtZXRob2Qg
Y2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgZXh0ZW5zaW9uIG9mIHRoZQorICAgICAgICBzb3Vy
Y2UtYmFzZWQgQ1NTIG1vZGVsIHByb3ZpZGVkIGJ5IHRoZSBwYXJzZXIuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OkNTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNldHVwUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTaGVldCk6
IEZpbGwgYSB0cmVlIHJhdGhlciB0aGFuIGEgbGlzdCBvZiBkYXRhIGVudHJpZXMuCisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24pOiBBY2NlcHQgYSBDU1NSdWxl
U291cmNlRGF0YSBmb3IgZmlsbGluZywgc2luY2UgaXQgbm93IGNvbnRhaW5zCisgICAgICAgIHRo
ZSByZWxhdGVkIHN0eWxlIHNvdXJjZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6Y3JlYXRlSW1wb3J0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0
ZU1lZGlhUnVsZSk6IENyZWF0ZSBDU1NNZWRpYVJ1bGUgZXZlbiBpZiBtZWRpYSBhbmQgcnVsZXMg
YXJlIGVtcHR5LAorICAgICAgICB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggTW96aWxsYS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkTmV3UnVsZVRvU291cmNlVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dXBkYXRlVG9wUnVs
ZUJvZHlFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjcmVhdGVSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyk6IFByb2Nlc3MgaW52YWxpZCBDU1MgcHJvcGVy
dGllcyB0byBwcm92aWRlIGNvcnJlY3Qgc291cmNlIGNvZGUgZGF0YSBmb3IgdGhlbS4KKyAgICAg
ICAgVGhpcyB3YXMgbW92ZWQgZnJvbSBJbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCAoYXMgdGhpcyBt
ZXRob2QgYWN0dWFsbHkgYmVsb25ncyBpbiB0aGUgcGFyc2VyKS4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6bWFya0F0UnVsZUhlYWRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6bWFya1J1bGVIZWFkZXJFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjptYXJrUnVsZUJvZHlTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtS
dWxlQm9keUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVu
ZCk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAoQ1NTUGFyc2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cmVzZXRSdWxlSGVhZGVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldFByb3BlcnR5UmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwb3BSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmlzRXh0cmFjdGluZ1NvdXJjZURhdGEpOgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaDogRXh0ZW5kIHRoZSBtb2RlbCB0byBoYW5kbGUgbW9yZSB0eXBlcyBvZiBydWxl
cyBhbmQgdGhlaXIgY29udGFpbm1lbnRzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKENTU1J1bGVTb3Vy
Y2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGVVbmtu
b3duKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpDU1NSdWxlU291cmNl
RGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOiBGb2xs
b3cgdGhlIENTU1BhcnNlciBBUEkgY2hhbmdlcyBidXQgcmV0YWluIHRoZSBzdG9yZWQgQ1NTIHJ1
bGVzIHN0cnVjdHVyZS4KKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnNvdXJjZURhdGEpOgor
ICAgICAgICAoUGFyc2VkU3R5bGVTaGVldCk6CisgICAgICAgIChmbGF0dGVuU291cmNlRGF0YSk6
IEZsYXR0ZW4gdGhlIHJ1bGUgdHJlZSB0byByZXRhaW4gdGhlIGV4aXN0aW5nIHJ1bGUtaGFuZGxp
bmcgY29kZSBpbnRhY3QuCisgICAgICAgIChQYXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRh
KToKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpkZWxldGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6
ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0Lmg6CisgICAgICAgIChJbnNwZWN0b3JTdHls
ZVNoZWV0KToKKyAgICAgICAgKEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSk6CisK
IDIwMTItMDYtMDcgIEFycGl0YSBCYWh1Z3VuYSAgPGFycGl0YWJhaHVndW5hQGdtYWlsLmNvbT4K
IAogICAgICAgICBJbnNlcnRVbm9yZGVyZWRMaXN0IGFuZCBJbnNlcnRPcmRlcmVkTGlzdCAoZXhl
Y0NvbW1hbmQpIGRvIG5vdCByZW1vdmUgYnVsbGV0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5k
ZXggOWVkZGMxN2ExMDlhNDVhNWEwYjkzZDBlYmYwOGQ1ZDk1MDZhMzViOS4uYjM5YjA3ZmQzOGMx
Yjg3N2U4ZGY3MTFlNzI4ZWJiMDA2ZTM3MjBjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBA
IC0zODIsNiArMzgyLDggQEAgY2hhcnNldDoKICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKICAgICAgaWYgKHAtPm1fc3R5bGVTaGVldCkKICAgICAg
ICAgIHAtPm1fc3R5bGVTaGVldC0+cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUoJDMp
OworICAgICBpZiAocC0+aXNFeHRyYWN0aW5nU291cmNlRGF0YSgpICYmIHAtPm1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmlzRW1wdHkoKSAmJiBwLT5tX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAg
ICAgICAgcC0+bV9ydWxlU291cmNlRGF0YVJlc3VsdC0+YXBwZW5kKENTU1J1bGVTb3VyY2VEYXRh
OjpjcmVhdGVVbmtub3duKCkpOwogICAgICAkJCA9IDA7CiAgIH0KICAgfCBDSEFSU0VUX1NZTSBl
cnJvciBpbnZhbGlkX2Jsb2NrIHsKQEAgLTQxMCwxNSArNDEyLDI1IEBAIHJ1bGVfbGlzdDoKICA7
CiAKIHZhbGlkX3J1bGU6Ci0gICAgYmVmb3JlX3J1bGVzZXQgcnVsZXNldCB7CisgICAgYmVmb3Jl
X3N0eWxlX3J1bGUgcnVsZXNldCB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICB8IGJlZm9y
ZV9tZWRpYV9ydWxlIG1lZGlhIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgIHwgYmVmb3Jl
X3BhZ2VfcnVsZSBwYWdlIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgIHwgYmVmb3JlX2Zv
bnRfZmFjZV9ydWxlIGZvbnRfZmFjZSB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICB8IGJl
Zm9yZV9rZXlmcmFtZXNfcnVsZSBrZXlmcmFtZXMgewogICAgICAgICAkJCA9ICQyOwogICAgIH0K
LSAgfCBtZWRpYQotICB8IHBhZ2UKLSAgfCBmb250X2ZhY2UKLSAgfCBrZXlmcmFtZXMKICAgfCBu
YW1lc3BhY2UKLSAgfCBpbXBvcnQKKyAgfCBiZWZvcmVfaW1wb3J0X3J1bGUgaW1wb3J0IHsKKyAg
ICAgICAgJCQgPSAkMjsKKyAgICB9CiAgIHwgcmVnaW9uCiAgIDsKIApAQCAtNDQ0LDEwICs0NTYs
MTggQEAgYmxvY2tfcnVsZV9saXN0OgogICA7CiAKIGJsb2NrX3ZhbGlkX3J1bGU6Ci0gICAgcnVs
ZXNldAotICB8IHBhZ2UKLSAgfCBmb250X2ZhY2UKLSAgfCBrZXlmcmFtZXMKKyAgICBiZWZvcmVf
c3R5bGVfcnVsZSBydWxlc2V0IHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgIHwgYmVmb3Jl
X3BhZ2VfcnVsZSBwYWdlIHsKKyAgICAgICAgJCQgPSAkMjsKKyAgICB9CisgIHwgYmVmb3JlX2Zv
bnRfZmFjZV9ydWxlIGZvbnRfZmFjZSB7CisgICAgICAgICQkID0gJDI7CisgICAgfQorICB8IGJl
Zm9yZV9rZXlmcmFtZXNfcnVsZSBrZXlmcmFtZXMgeworICAgICAgICAkJCA9ICQyOworICAgIH0K
ICAgOwogCiBibG9ja19ydWxlOgpAQCAtNDU1LDI2ICs0NzUsNDAgQEAgYmxvY2tfcnVsZToKICAg
fCBpbnZhbGlkX3J1bGUKICAgfCBpbnZhbGlkX2F0CiAgIHwgbmFtZXNwYWNlCi0gIHwgaW1wb3J0
Ci0gIHwgbWVkaWEKKyAgfCBiZWZvcmVfaW1wb3J0X3J1bGUgaW1wb3J0IHsKKyAgICAgICAgJCQg
PSAkMjsKKyAgICB9CisgIHwgYmVmb3JlX21lZGlhX3J1bGUgbWVkaWEgeworICAgICAgICAkJCA9
ICQyOworICAgIH0KICAgOwogCithdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXliZV9zcGFjZToKKyAg
ICBtYXliZV9zcGFjZSB7CisgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1Bh
cnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtSdWxlSGVhZGVyRW5kKCk7CisgICAgICAg
IHAtPm1hcmtSdWxlQm9keVN0YXJ0KCk7CisgICAgfQorICAgIDsKIAogaW1wb3J0OgotICAgIElN
UE9SVF9TWU0gbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRp
YV9saXN0ICc7JyB7CisgICAgSU1QT1JUX1NZTSBhdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXliZV9z
cGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX2xpc3QgJzsnIHsKICAg
ICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVJbXBvcnRS
dWxlKCQzLCAkNSk7CiAgICAgfQotICB8IElNUE9SVF9TWU0gbWF5YmVfc3BhY2Ugc3RyaW5nX29y
X3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0IFRPS0VOX0VPRiB7CisgIHwgSU1QT1JU
X1NZTSBhdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJl
X3NwYWNlIG1heWJlX21lZGlhX2xpc3QgVE9LRU5fRU9GIHsKICAgICAgICAgJCQgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVJbXBvcnRSdWxlKCQzLCAkNSk7CiAgICAg
fQotICB8IElNUE9SVF9TWU0gbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBt
YXliZV9tZWRpYV9saXN0IGludmFsaWRfYmxvY2sgeworICB8IElNUE9SVF9TWU0gYXRfaW1wb3J0
X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9t
ZWRpYV9saXN0IGludmFsaWRfYmxvY2sgewogICAgICAgICAkJCA9IDA7CisgICAgICAgIHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogICB8IElN
UE9SVF9TWU0gZXJyb3IgJzsnIHsKICAgICAgICAgJCQgPSAwOworICAgICAgICBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KICAgfCBJTVBPUlRf
U1lNIGVycm9yIGludmFsaWRfYmxvY2sgewogICAgICAgICAkJCA9IDA7CisgICAgICAgIHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogICA7CiAK
QEAgLTU5OSwxNSArNjMzLDI4IEBAIG1lZGlhX2xpc3Q6CiAgICAgfQogICAgIDsKIAorYXRfcnVs
ZV9ib2R5X3N0YXJ0OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKS0+bWFya1J1bGVCb2R5U3RhcnQoKTsKKyAgICB9CisgICAgOworCith
dF9tZWRpYV9oZWFkZXJfZW5kX21heWJlX3NwYWNlOgorICAgIG1heWJlX3NwYWNlIHsKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+bWFya1J1bGVIZWFkZXJFbmQoKTsK
KyAgICB9CisgICAgOworCiBtZWRpYToKLSAgICBNRURJQV9TWU0gbWF5YmVfc3BhY2UgbWVkaWFf
bGlzdCAneycgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgewotICAgICAg
ICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZU1lZGlhUnVsZSgk
MywgJDYpOworICAgIE1FRElBX1NZTSBtYXliZV9zcGFjZSBtZWRpYV9saXN0IGF0X3J1bGVfaGVh
ZGVyX2VuZCAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlz
dCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpLT5jcmVhdGVNZWRpYVJ1bGUoJDMsICQ4KTsKICAgICB9Ci0gICAgfCBNRURJQV9TWU0gbWF5
YmVfc3BhY2UgJ3snIG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKLSAg
ICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1
bGUoMCwgJDUpOworICAgIHwgTUVESUFfU1lNIGF0X21lZGlhX2hlYWRlcl9lbmRfbWF5YmVfc3Bh
Y2UgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9ja19ydWxlX2xpc3Qgc2F2
ZV9ibG9jayB7CisgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+
Y3JlYXRlTWVkaWFSdWxlKDAsICQ2KTsKICAgICB9Ci0gICAgfCBNRURJQV9TWU0gbWF5YmVfc3Bh
Y2UgJzsnIHsKKyAgICB8IE1FRElBX1NZTSBhdF9tZWRpYV9oZWFkZXJfZW5kX21heWJlX3NwYWNl
ICc7JyB7CiAgICAgICAgICQkID0gMDsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAgICB9CiAgICAgOwogCkBAIC02MTgsOSArNjY1LDkg
QEAgbWVkaXVtOgogICA7CiAKIGtleWZyYW1lczoKLSAgICBXRUJLSVRfS0VZRlJBTUVTX1NZTSBt
YXliZV9zcGFjZSBrZXlmcmFtZV9uYW1lIG1heWJlX3NwYWNlICd7JyBtYXliZV9zcGFjZSBrZXlm
cmFtZXNfcnVsZSAnfScgewotICAgICAgICAkJCA9ICQ3OwotICAgICAgICAkNy0+c2V0TmFtZSgk
Myk7CisgICAgV0VCS0lUX0tFWUZSQU1FU19TWU0gbWF5YmVfc3BhY2Uga2V5ZnJhbWVfbmFtZSBt
YXliZV9zcGFjZSBhdF9ydWxlX2hlYWRlcl9lbmQgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXli
ZV9zcGFjZSBrZXlmcmFtZXNfcnVsZSAnfScgeworICAgICAgICAkJCA9ICQ5OworICAgICAgICAk
OS0+c2V0TmFtZSgkMyk7CiAgICAgfQogICAgIDsKICAgCkBAIC02MzUsNiArNjgyLDkgQEAga2V5
ZnJhbWVzX3J1bGU6CiAgICAgICAgICQkID0gJDE7CiAgICAgICAgIGlmICgkMikKICAgICAgICAg
ICAgICQkLT5wYXJzZXJBcHBlbmRLZXlmcmFtZSgkMik7CisgICAgICAgIENTU1BhcnNlciogcCA9
IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIGlmIChwLT5pc0V4dHJh
Y3RpbmdTb3VyY2VEYXRhKCkpCisgICAgICAgICAgICBwLT51cGRhdGVUb3BSdWxlQm9keUVuZCgp
OwogICAgIH0KICAgICA7CiAKQEAgLTY3Myw4ICs3MjMsOCBAQCBrZXk6CiAgICAgOwogCiBwYWdl
OgotICAgIFBBR0VfU1lNIG1heWJlX3NwYWNlIHBhZ2Vfc2VsZWN0b3IgbWF5YmVfc3BhY2UKLSAg
ICAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25zX2FuZF9tYXJnaW5zIGNsb3NpbmdfYnJhY2Ug
eworICAgIFBBR0VfU1lNIG1heWJlX3NwYWNlIHBhZ2Vfc2VsZWN0b3IgbWF5YmVfc3BhY2UgYXRf
cnVsZV9oZWFkZXJfZW5kCisgICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZV9i
ZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25zX2FuZF9tYXJnaW5zIGNsb3NpbmdfYnJhY2Ug
ewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
OwogICAgICAgICBpZiAoJDMpCiAgICAgICAgICAgICAkJCA9IHAtPmNyZWF0ZVBhZ2VSdWxlKHAt
PnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQzKSk7CkBAIC02ODMsMTMgKzczMywxNiBAQCBwYWdlOgog
ICAgICAgICAgICAgcC0+Y2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICAvLyBBbHNvIGNs
ZWFyIG1hcmdpbiBhdC1ydWxlcyBoZXJlIG9uY2Ugd2UgZnVsbHkgaW1wbGVtZW50IG1hcmdpbiBh
dC1ydWxlcyBwYXJzaW5nLgogICAgICAgICAgICAgJCQgPSAwOworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAgICAgICAgfQogICAg
IH0KICAgICB8IFBBR0VfU1lNIGVycm9yIGludmFsaWRfYmxvY2sgewogICAgICAgJCQgPSAwOwor
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAg
ICB9CiAgICAgfCBQQUdFX1NZTSBlcnJvciAnOycgewogICAgICAgJCQgPSAwOworICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAgICB9CiAgICAg
OwogCkBAIC03ODUsMTUgKzgzOCwxNyBAQCBtYXJnaW5fc3ltIDoKICAgICA7CiAKIGZvbnRfZmFj
ZToKLSAgICBGT05UX0ZBQ0VfU1lNIG1heWJlX3NwYWNlCi0gICAgJ3snIG1heWJlX3NwYWNlIGRl
Y2xhcmF0aW9uX2xpc3QgJ30nICBtYXliZV9zcGFjZSB7CisgICAgRk9OVF9GQUNFX1NZTSBhdF9y
dWxlX2hlYWRlcl9lbmQgbWF5YmVfc3BhY2UKKyAgICAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1h
eWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0ICd9JyAgbWF5YmVf
c3BhY2UgewogICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNy
ZWF0ZUZvbnRGYWNlUnVsZSgpOwogICAgIH0KICAgICB8IEZPTlRfRkFDRV9TWU0gZXJyb3IgaW52
YWxpZF9ibG9jayB7CiAgICAgICAkJCA9IDA7CisgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIq
PihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KICAgICB8IEZPTlRfRkFDRV9TWU0gZXJy
b3IgJzsnIHsKICAgICAgICQkID0gMDsKKyAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBh
cnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogOwogCkBAIC04MzUsMjcgKzg5MCw1NCBAQCB1
bmFyeV9vcGVyYXRvcjoKIAogbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uOgogICAgIG1h
eWJlX3NwYWNlIHsKLSAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2Vy
Kj4ocGFyc2VyKTsKLSAgICAgICAgcC0+bWFya1Byb3BlcnR5U3RhcnQoKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+bWFya1Byb3BlcnR5U3RhcnQoKTsKICAgICB9
CiAgIDsKIAotYmVmb3JlX3J1bGVzZXQ6CitiZWZvcmVfc3R5bGVfcnVsZToKICAgICAvKiBlbXB0
eSAqLyB7Ci0gICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBh
cnNlcik7Ci0gICAgICAgIHAtPm1hcmtTZWxlY3Rvckxpc3RTdGFydCgpOworICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrU3R5bGVSdWxlSGVhZGVyU3RhcnQoKTsK
ICAgICB9CiAgIDsKIAotYmVmb3JlX3J1bGVfb3BlbmluZ19icmFjZToKK2JlZm9yZV9tZWRpYV9y
dWxlOgogICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAgICAgcC0+bWFya1NlbGVjdG9yTGlzdEVuZCgp
OworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrQXRSdWxlSGVh
ZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6Ok1FRElBX1JVTEUpOworICAgIH0KKyAgOworCiti
ZWZvcmVfaW1wb3J0X3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJj
ZURhdGE6OklNUE9SVF9SVUxFKTsKKyAgICB9CisgIDsKKworYmVmb3JlX2ZvbnRfZmFjZV9ydWxl
OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKS0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpGT05UX0ZBQ0Vf
UlVMRSk7CisgICAgfQorICA7CisKK2JlZm9yZV9wYWdlX3J1bGU6CisgICAgLyogZW1wdHkgKi8g
eworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrQXRSdWxlSGVh
ZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OlBBR0VfUlVMRSk7CisgICAgfQorICA7CisKK2Jl
Zm9yZV9rZXlmcmFtZXNfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIHN0YXRpY19j
YXN0PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NSdWxlU291
cmNlRGF0YTo6S0VZRlJBTUVTX1JVTEUpOworICAgIH0KKyAgOworCithdF9ydWxlX2hlYWRlcl9l
bmQ6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihw
YXJzZXIpLT5tYXJrUnVsZUhlYWRlckVuZCgpOwogICAgIH0KICAgOwogCiBydWxlc2V0OgotICAg
IHNlbGVjdG9yX2xpc3QgYmVmb3JlX3J1bGVfb3BlbmluZ19icmFjZSAneycgbWF5YmVfc3BhY2Vf
YmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7CisgICAg
c2VsZWN0b3JfbGlzdCBhdF9ydWxlX2hlYWRlcl9lbmQgJ3snIG1heWJlX3NwYWNlX2JlZm9yZV9k
ZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgewogICAgICAgICBDU1NQ
YXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICAkJCA9
IHAtPmNyZWF0ZVN0eWxlUnVsZSgkMSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU01lZGlhUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxl
LmNwcAppbmRleCA2ZGIzMjBjMjcwZDhmOGFjZWU3ZGYzM2QzYTE3YTNlM2MyNzY2Mzg2Li41NWJi
YWE1ZmRhMjU2MDFhNzRlODUzNGFjZGVjOWY3NzJhMDcxOGMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
TWVkaWFSdWxlLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgQ1NTTWVkaWFSdWxlOjpyZWF0
dGFjaChTdHlsZVJ1bGVNZWRpYSogcnVsZSkKIHsKICAgICBBU1NFUlQocnVsZSk7CiAgICAgbV9t
ZWRpYVJ1bGUgPSBydWxlOwotICAgIGlmIChtX21lZGlhQ1NTT01XcmFwcGVyKQorICAgIGlmICht
X21lZGlhQ1NTT01XcmFwcGVyICYmIG1fbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSkKICAgICAg
ICAgbV9tZWRpYUNTU09NV3JhcHBlci0+cmVhdHRhY2gobV9tZWRpYVJ1bGUtPm1lZGlhUXVlcmll
cygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBw
ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNb
aV0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDk3MzM0MmQwOTA4MDk5NzlmYjkwZTYw
MTk0ZTZiOWNmNjY2MTgwMTMuLjVlZWI4YmU5Y2Y2MDQ3ZTBlZjQxNmFiMTk4OWU3MzJkZmIyOTMy
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0yMzUsMTIgKzIzNSwxMCBAQCBDU1NQ
YXJzZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAgICwg
bV9oYXNGb250RmFjZU9ubHlWYWx1ZXMoZmFsc2UpCiAgICAgLCBtX2hhZFN5bnRhY3RpY2FsbHlW
YWxpZENTU1J1bGUoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHROYW1lc3BhY2Uoc3RhckF0b20pCi0g
ICAgLCBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbihmYWxzZSkKLSAgICAsIG1fc2VsZWN0b3JM
aXN0UmFuZ2UoMCwgMCkKLSAgICAsIG1fcnVsZUJvZHlSYW5nZSgwLCAwKQorICAgICwgbV9wYXJz
ZWRUZXh0KDApCisgICAgLCBtX2hlYWRlclJhbmdlKDAsIDApCiAgICAgLCBtX3Byb3BlcnR5UmFu
Z2UoVUlOVF9NQVgsIFVJTlRfTUFYKQotICAgICwgbV9ydWxlUmFuZ2VNYXAoMCkKLSAgICAsIG1f
Y3VycmVudFJ1bGVEYXRhKDApCisgICAgLCBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KDApCiAgICAg
LCBtX3BhcnNpbmdNb2RlKE5vcm1hbE1vZGUpCiAgICAgLCBtX2N1cnJlbnRDaGFyYWN0ZXIoMCkK
ICAgICAsIG1fdG9rZW5TdGFydCgwKQpAQCAtMjg1LDYgKzI4Myw3IEBAIHZvaWQgQ1NTUGFyc2Vy
U3RyaW5nOjpsb3dlcigpCiAKIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFy
KiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyKiBzdWZmaXgpCiB7Cisg
ICAgbV9wYXJzZWRUZXh0ID0gJnN0cmluZzsKICAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0
aCgpICsgc3RybGVuKHByZWZpeCkgKyBzdHJsZW4oc3VmZml4KSArIDE7CiAKICAgICBtX2RhdGFT
dGFydCA9IGFkb3B0QXJyYXlQdHIobmV3IFVDaGFyW2xlbmd0aF0pOwpAQCAtMzAxLDI0ICszMDAs
MjEgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIKICAgICBtX2RhdGFTdGFydFtsZW5ndGggLSAx
XSA9IDA7CiAKICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX3Rva2VuU3RhcnQgPSBtX2RhdGFT
dGFydC5nZXQoKTsKLSAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKIH0KIAotdm9pZCBDU1NQYXJz
ZXI6OnBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGludCBzdGFydExpbmVOdW1iZXIsIFN0eWxlUnVsZVJhbmdlTWFwKiBydWxlUmFuZ2VN
YXApCit2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0
LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0TGluZU51bWJlciwgUnVsZVNvdXJjZURh
dGFMaXN0KiBydWxlU291cmNlRGF0YVJlc3VsdCkKIHsKICAgICBzZXRTdHlsZVNoZWV0KHNoZWV0
KTsKICAgICBtX2RlZmF1bHROYW1lc3BhY2UgPSBzdGFyQXRvbTsgLy8gUmVzZXQgdGhlIGRlZmF1
bHQgbmFtZXNwYWNlLgotICAgIG1fcnVsZVJhbmdlTWFwID0gcnVsZVJhbmdlTWFwOwotICAgIGlm
IChydWxlUmFuZ2VNYXApIHsKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGEgPSBDU1NSdWxlU291
cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJj
ZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIH0KKyAgICBpZiAocnVs
ZVNvdXJjZURhdGFSZXN1bHQpCisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2sgPSBhZG9w
dFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpOworICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1
bHQgPSBydWxlU291cmNlRGF0YVJlc3VsdDsKIAogICAgIG1fbGluZU51bWJlciA9IHN0YXJ0TGlu
ZU51bWJlcjsKICAgICBzZXR1cFBhcnNlcigiIiwgc3RyaW5nLCAiIik7CiAgICAgY3NzeXlwYXJz
ZSh0aGlzKTsKLSAgICBtX3J1bGVSYW5nZU1hcCA9IDA7Ci0gICAgbV9jdXJyZW50UnVsZURhdGEg
PSAwOworICAgIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQgPSAwOworICAgIG1fY3VycmVudFJ1bGVE
YXRhU3RhY2suY2xlYXIoKTsKICAgICBtX3J1bGUgPSAwOwogfQogCkBAIC0xMTE5LDE3ICsxMTE1
LDE3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzCiAgICAgbV9zZWxlY3Rvckxpc3RGb3JQYXJz
ZVNlbGVjdG9yID0gMDsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5
bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBSZWZQdHI8
Q1NTU3R5bGVTb3VyY2VEYXRhPiogc3R5bGVTb3VyY2VEYXRhLCBTdHlsZVNoZWV0Q29udGVudHMq
IGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5
bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBQYXNzUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRz
KiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICAvLyBMZW5ndGggb2YgdGhlICJALXdlYmtpdC1k
ZWNsc3siIHByZWZpeC4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJlZml4TGVuZ3RoID0g
MTU7CiAKICAgICBzZXRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKIAotICAgIGlmIChz
dHlsZVNvdXJjZURhdGEpIHsKLSAgICAgICAgbV9jdXJyZW50UnVsZURhdGEgPSBDU1NSdWxlU291
cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJj
ZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBtX2luU3R5bGVS
dWxlT3JEZWNsYXJhdGlvbiA9IHRydWU7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBy
dWxlU291cmNlRGF0YVJlZiA9IHJ1bGVTb3VyY2VEYXRhOworICAgIGlmIChydWxlU291cmNlRGF0
YVJlZikgeworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrID0gYWRvcHRQdHIobmV3IFJ1
bGVTb3VyY2VEYXRhTGlzdCgpKTsKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+YXBw
ZW5kKHJ1bGVTb3VyY2VEYXRhUmVmKTsKICAgICB9CiAKICAgICBzZXR1cFBhcnNlcigiQC13ZWJr
aXQtZGVjbHN7Iiwgc3RyaW5nLCAifSAiKTsKQEAgLTExNDUsMTkgKzExNDEsMTUgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24s
IGNvbnN0IFN0cmluZyYgc3QKICAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgfQogCi0g
ICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhKSB7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5z
dHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKLSAgICAgICAgbV9jdXJy
ZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kID0gc3RyaW5n
Lmxlbmd0aCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpp
dGVyYXRvciBpdCA9IG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5
RGF0YS5iZWdpbigpLCBlbmRJdCA9IG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEt
PnByb3BlcnR5RGF0YS5lbmQoKTsgaXQgIT0gZW5kSXQ7ICsraXQpIHsKLSAgICAgICAgICAgICgq
aXQpLnJhbmdlLnN0YXJ0IC09IHByZWZpeExlbmd0aDsKLSAgICAgICAgICAgICgqaXQpLnJhbmdl
LmVuZCAtPSBwcmVmaXhMZW5ndGg7CisgICAgaWYgKHJ1bGVTb3VyY2VEYXRhUmVmKSB7CisgICAg
ICAgIHJ1bGVTb3VyY2VEYXRhUmVmLT5ydWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKKyAgICAgICAg
cnVsZVNvdXJjZURhdGFSZWYtPnJ1bGVCb2R5UmFuZ2UuZW5kID0gc3RyaW5nLmxlbmd0aCgpOwor
ICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+OjppdGVyYXRvciBpdCA9
IHJ1bGVTb3VyY2VEYXRhUmVmLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5iZWdpbigp
LCBlbmRJdCA9IHJ1bGVTb3VyY2VEYXRhUmVmLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0
YS5lbmQoKTsgaXQgIT0gZW5kSXQ7ICsraXQpIHsKKyAgICAgICAgICAgIGl0LT5yYW5nZS5zdGFy
dCAtPSBwcmVmaXhMZW5ndGg7CisgICAgICAgICAgICBpdC0+cmFuZ2UuZW5kIC09IHByZWZpeExl
bmd0aDsKICAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChzdHlsZVNvdXJjZURhdGEpIHsKLSAg
ICAgICAgKnN0eWxlU291cmNlRGF0YSA9IG1fY3VycmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURh
dGEucmVsZWFzZSgpOwotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IDA7Ci0gICAgICAgIG1f
aW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uID0gZmFsc2U7CisgICAgICAgIG1fY3VycmVudFJ1bGVE
YXRhU3RhY2suY2xlYXIoKTsKICAgICB9CiAgICAgcmV0dXJuIG9rOwogfQpAQCAtOTA5MCwxNyAr
OTA4MiwzNCBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUltcG9ydFJ1bGUoY29u
c3QgQ1NTUGFyc2VyU3RyaW5nJiB1cmwsIE1lZGlhUXVlcgogICAgICAgICByZXR1cm4gMDsKICAg
ICBSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBydWxlID0gU3R5bGVSdWxlSW1wb3J0OjpjcmVhdGUo
dXJsLCBtZWRpYSk7CiAgICAgU3R5bGVSdWxlSW1wb3J0KiByZXN1bHQgPSBydWxlLmdldCgpOwor
ICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2N1
cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpOworICAgICAgICBtYXJrUnVsZUJvZHlFbmQo
KTsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEgPSBw
b3BSdWxlRGF0YSgpOworICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKGN1cnJlbnRSdWxl
RGF0YS5yZWxlYXNlKCkpOworICAgICAgICByZXNldFJ1bGVIZWFkZXJSYW5nZSgpOworICAgIH0K
ICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVNZWRpYVJ1bGUoTWVk
aWFRdWVyeVNldCogbWVkaWEsIFJ1bGVMaXN0KiBydWxlcykKIHsKLSAgICBpZiAoIW1lZGlhIHx8
ICFydWxlcykKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9h
bGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwotICAgIFJlZlB0cjxTdHlsZVJ1bGVN
ZWRpYT4gcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEsICpydWxlcyk7CisgICAg
UmVmUHRyPFN0eWxlUnVsZU1lZGlhPiBydWxlOworICAgIGlmIChydWxlcykKKyAgICAgICAgcnVs
ZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEsICpydWxlcyk7CisgICAgZWxzZSB7Cisg
ICAgICAgIFJ1bGVMaXN0IGVtcHR5UnVsZXM7CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVNZWRp
YTo6Y3JlYXRlKG1lZGlhLCBlbXB0eVJ1bGVzKTsKKyAgICB9CiAgICAgU3R5bGVSdWxlTWVkaWEq
IHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkg
eworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7Cisg
ICAgICAgIG1hcmtSdWxlQm9keUVuZCgpOworICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURh
dGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgIGFkZE5ld1J1bGVU
b1NvdXJjZVRyZWUoY3VycmVudFJ1bGVEYXRhLnJlbGVhc2UoKSk7CisgICAgfQogICAgIG1fcGFy
c2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpA
QCAtOTExNCwxMSArOTEyMyw1NiBAQCBDU1NQYXJzZXI6OlJ1bGVMaXN0KiBDU1NQYXJzZXI6OmNy
ZWF0ZVJ1bGVMaXN0KCkKICAgICByZXR1cm4gbGlzdFB0cjsKIH0KIAordm9pZCBDU1NQYXJzZXI6
OmFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVs
ZSkKK3sKKyAgICAvLyBQcmVjb25kaXRpb246IChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpLgor
ICAgIGlmICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpCisgICAgICAgIG1fcnVsZVNvdXJj
ZURhdGFSZXN1bHQtPmFwcGVuZChydWxlKTsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmxhc3QoKS0+Y2hpbGRSdWxlcy5hcHBlbmQocnVsZSk7Cit9CisKK3ZvaWQg
Q1NTUGFyc2VyOjp1cGRhdGVUb3BSdWxlQm9keUVuZCgpCit7CisgICAgLy8gUHJlY29uZGl0aW9u
OiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKS4KKyAgICBpZiAoIW1fcnVsZVNvdXJjZURhdGFS
ZXN1bHQpCisgICAgICAgIHJldHVybjsKKyAgICBDU1NSdWxlU291cmNlRGF0YSogZGF0YTsKKyAg
ICBpZiAobV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKQorICAgICAgICBkYXRhID0g
bV9ydWxlU291cmNlRGF0YVJlc3VsdC0+aXNFbXB0eSgpID8gMCA6IG1fcnVsZVNvdXJjZURhdGFS
ZXN1bHQtPmxhc3QoKS5nZXQoKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGEgPSBtX2N1cnJlbnRS
dWxlRGF0YVN0YWNrLT5sYXN0KCktPmNoaWxkUnVsZXMuaXNFbXB0eSgpID8gMCA6IG1fY3VycmVu
dFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+Y2hpbGRSdWxlcy5sYXN0KCkuZ2V0KCk7CisKKyAgICBB
U1NFUlQoZGF0YSk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm47CisgICAgZGF0YS0+
cnVsZUJvZHlSYW5nZS5lbmQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKK30K
KworUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gQ1NTUGFyc2VyOjpwb3BSdWxlRGF0YSgp
Cit7CisgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGRhdGEgPSBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5s
YXN0KCk7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+cmVtb3ZlTGFzdCgpOworICAgIHJl
dHVybiBkYXRhLnJlbGVhc2UoKTsKK30KKwogU3R5bGVSdWxlS2V5ZnJhbWVzKiBDU1NQYXJzZXI6
OmNyZWF0ZUtleWZyYW1lc1J1bGUoKQogewogICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxs
b3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKICAgICBSZWZQdHI8U3R5bGVSdWxlS2V5
ZnJhbWVzPiBydWxlID0gU3R5bGVSdWxlS2V5ZnJhbWVzOjpjcmVhdGUoKTsKICAgICBTdHlsZVJ1
bGVLZXlmcmFtZXMqIHJ1bGVQdHIgPSBydWxlLmdldCgpOworICAgIGlmIChpc0V4dHJhY3RpbmdT
b3VyY2VEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5p
c0VtcHR5KCkpOworICAgICAgICBtYXJrUnVsZUJvZHlFbmQoKTsKKyAgICAgICAgUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEgPSBwb3BSdWxlRGF0YSgpOworICAgICAg
ICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKGN1cnJlbnRSdWxlRGF0YS5yZWxlYXNlKCkpOworICAg
IH0KICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJu
IHJ1bGVQdHI7CiB9CkBAIC05MTM2LDE4ICs5MTkwLDE1IEBAIFN0eWxlUnVsZUJhc2UqIENTU1Bh
cnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4q
IHNlCiAgICAgICAgIHJ1bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgp
KTsKICAgICAgICAgcmVzdWx0ID0gcnVsZS5nZXQoKTsKICAgICAgICAgbV9wYXJzZWRSdWxlcy5h
cHBlbmQocnVsZS5yZWxlYXNlKCkpOwotICAgICAgICBpZiAobV9ydWxlUmFuZ2VNYXApIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRSdWxlRGF0YSk7Ci0gICAgICAgICAgICBtX2N1cnJl
bnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZSA9IG1fcnVsZUJvZHlS
YW5nZTsKLSAgICAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZSA9
IG1fc2VsZWN0b3JMaXN0UmFuZ2U7Ci0gICAgICAgICAgICBtX3J1bGVSYW5nZU1hcC0+c2V0KHJl
c3VsdCwgbV9jdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIG1fY3VycmVu
dFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICAgICAgbV9j
dXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJlc2V0U2VsZWN0b3JMaXN0TWFya3MoKTsKLSAgICByZXNl
dFJ1bGVCb2R5TWFya3MoKTsKKyAgICAgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkg
eworICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkp
OworICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEg
PSBwb3BSdWxlRGF0YSgpOworICAgICAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhj
dXJyZW50UnVsZURhdGEuZ2V0KCkpOworICAgICAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJl
ZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
aXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXNldFJ1bGVIZWFkZXJSYW5nZSgp
OwogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05MTcy
LDYgKzkyMjMsMTMgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1
bGUoKQogICAgIHJ1bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgpKTsK
ICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICBTdHlsZVJ1bGVGb250RmFjZSogcmVzdWx0ID0g
cnVsZS5nZXQoKTsKKyAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKSB7CisgICAgICAg
IEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKKyAgICAgICAgbWFy
a1J1bGVCb2R5RW5kKCk7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3VycmVu
dFJ1bGVEYXRhID0gcG9wUnVsZURhdGEoKTsKKyAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJh
bmdlcyhjdXJyZW50UnVsZURhdGEuZ2V0KCkpOworICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VU
cmVlKGN1cnJlbnRSdWxlRGF0YS5yZWxlYXNlKCkpOworICAgIH0KICAgICBtX3BhcnNlZFJ1bGVz
LmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTkyNTEs
NiArOTMwOSwxMyBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKFBh
c3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlYwogICAgICAgICBydWxlLT5wYXJz
ZXJBZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKICAgICAgICAgcnVsZS0+c2V0
UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwogICAgICAgICBwYWdlUnVsZSA9
IHJ1bGUuZ2V0KCk7CisgICAgICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgIG1hcmtSdWxlQm9keUVuZCgpOworICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVT
b3VyY2VEYXRhPiBjdXJyZW50UnVsZURhdGEgPSBwb3BSdWxlRGF0YSgpOworICAgICAgICAgICAg
Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhjdXJyZW50UnVsZURhdGEuZ2V0KCkpOworICAgICAg
ICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsK
KyAgICAgICAgfQogICAgICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7
CiAgICAgfQogICAgIGNsZWFyUHJvcGVydGllcygpOwpAQCAtOTI3NCw2ICs5MzM5LDggQEAgU3R5
bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVSZWdpb25SdWxlKFZlY3RvcjxPd25QdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+ID4qIHIKIAogICAgIFN0eWxlUnVsZVJlZ2lvbiogcmVzdWx0ID0gcmVn
aW9uUnVsZS5nZXQoKTsKICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChyZWdpb25SdWxlLnJlbGVh
c2UoKSk7CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKKyAgICAgICAgYWRkTmV3
UnVsZVRvU291cmNlVHJlZShDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bigpKTsKIAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05MzUzLDE1ICs5NDIwLDc0IEBAIHZvaWQgQ1NTUGFy
c2VyOjp1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhUXVlcnlTZXQqIG1lZGlhKQogICAgIG1lZGlh
LT5zZXRMYXN0TGluZShtX2xpbmVOdW1iZXIpOwogfQogCi12b2lkIENTU1BhcnNlcjo6bWFya1Nl
bGVjdG9yTGlzdFN0YXJ0KCkKK3ZvaWQgQ1NTUGFyc2VyOjpmaXhVbnBhcnNlZFByb3BlcnR5UmFu
Z2VzKENTU1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSkKK3sKKyAgICBpZiAoIXJ1bGVEYXRhLT5z
dHlsZVNvdXJjZURhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHlT
b3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJv
cGVydHlEYXRhOworICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eURhdGEuc2l6ZSgpOworICAg
IGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgc3R5bGVTdGFydCA9
IHJ1bGVEYXRhLT5ydWxlQm9keVJhbmdlLnN0YXJ0OworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzID0gbV9wYXJzZWRUZXh0LT5jaGFyYWN0ZXJzKCk7CisgICAgQ1NTUHJvcGVydHlTb3VyY2VE
YXRhKiBuZXh0RGF0YSA9ICYocHJvcGVydHlEYXRhLmF0KDApKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSog
Y3VycmVudERhdGEgPSBuZXh0RGF0YTsKKyAgICAgICAgbmV4dERhdGEgPSBpIDwgc2l6ZSAtIDEg
PyAmKHByb3BlcnR5RGF0YS5hdChpICsgMSkpIDogMDsKKworICAgICAgICBpZiAoY3VycmVudERh
dGEtPnBhcnNlZE9rKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChjdXJyZW50
RGF0YS0+cmFuZ2UuZW5kID4gMCAmJiBjaGFyYWN0ZXJzW3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0
YS0+cmFuZ2UuZW5kIC0gMV0gPT0gJzsnKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgdW5zaWduZWQgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7CisgICAgICAgIGlmICghbmV4dERh
dGEpCisgICAgICAgICAgICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHJ1bGVEYXRhLT5ydWxl
Qm9keVJhbmdlLmVuZCAtIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5RW5k
SW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHREYXRhLT5yYW5nZS5zdGFydCAtIDE7CisK
KyAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxl
U2hlZXRdKSkKKyAgICAgICAgICAgIC0tcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7CisKKyAgICAg
ICAgLy8gcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgcG9pbnRzIGF0IHRoZSBsYXN0IHByb3BlcnR5
IHRleHQgY2hhcmFjdGVyLgorICAgICAgICB1bnNpZ25lZCBuZXdQcm9wZXJ0eUVuZCA9IHByb3Bl
cnR5RW5kSW5TdHlsZVNoZWV0IC0gc3R5bGVTdGFydCArIDE7IC8vIEV4Y2x1c2l2ZSBvZiB0aGUg
bGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5y
YW5nZS5lbmQgIT0gbmV3UHJvcGVydHlFbmQpIHsKKyAgICAgICAgICAgIGN1cnJlbnREYXRhLT5y
YW5nZS5lbmQgPSBuZXdQcm9wZXJ0eUVuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlU3Rh
cnRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLnN0YXJ0ICsg
Y3VycmVudERhdGEtPm5hbWUubGVuZ3RoKCk7CisgICAgICAgICAgICB3aGlsZSAodmFsdWVTdGFy
dEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGNoYXJhY3RlcnNbdmFs
dWVTdGFydEluU3R5bGVTaGVldF0gIT0gJzonKQorICAgICAgICAgICAgICAgICsrdmFsdWVTdGFy
dEluU3R5bGVTaGVldDsKKyAgICAgICAgICAgIGlmICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwg
cHJvcGVydHlFbmRJblN0eWxlU2hlZXQpCisgICAgICAgICAgICAgICAgKyt2YWx1ZVN0YXJ0SW5T
dHlsZVNoZWV0OyAvLyBTaGlmdCBwYXN0IHRoZSAnOicuCisgICAgICAgICAgICB3aGlsZSAodmFs
dWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIGlzSFRNTFNw
YWNlKGNoYXJhY3RlcnNbdmFsdWVTdGFydEluU3R5bGVTaGVldF0pKQorICAgICAgICAgICAgICAg
ICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gZXhjbHVk
ZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhlIHByb3BlcnR5IHZhbHVlLgorICAgICAgICAgICAg
Y3VycmVudERhdGEtPnZhbHVlID0gbV9wYXJzZWRUZXh0LT5zdWJzdHJpbmcodmFsdWVTdGFydElu
U3R5bGVTaGVldCwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgLSB2YWx1ZVN0YXJ0SW5TdHlsZVNo
ZWV0ICsgKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxlU2hlZXRdID09ICc7JyA/IDAgOiAx
KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrU3R5bGVSdWxl
SGVhZGVyU3RhcnQoKQoreworICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9oZWFkZXJSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1f
ZGF0YVN0YXJ0LmdldCgpOworICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChDU1NS
dWxlU291cmNlRGF0YTo6Y3JlYXRlKENTU1J1bGVTb3VyY2VEYXRhOjpTVFlMRV9SVUxFKSk7Cit9
CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURh
dGE6OlR5cGUgcnVsZVR5cGUpCiB7Ci0gICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCA9IG1f
dG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOworICAgIGlmICghaXNFeHRyYWN0aW5nU291
cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9oZWFkZXJSYW5nZS5zdGFydCA9IG1f
dG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOworICAgIG1fY3VycmVudFJ1bGVEYXRhU3Rh
Y2stPmFwcGVuZChDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKHJ1bGVUeXBlKSk7CiB9CiAKLXZv
aWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKK3ZvaWQgQ1NTUGFyc2VyOjptYXJr
UnVsZUhlYWRlckVuZCgpCiB7Ci0gICAgaWYgKCFtX2N1cnJlbnRSdWxlRGF0YSkKKyAgICBpZiAo
IWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCgh
bV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKICAgICBVQ2hhciogbGlzdEVuZCA9
IG1fdG9rZW5TdGFydDsKICAgICB3aGlsZSAobGlzdEVuZCA+IG1fZGF0YVN0YXJ0LmdldCgpICsg
MSkgewogICAgICAgICBpZiAoaXNIVE1MU3BhY2UoKihsaXN0RW5kIC0gMSkpKQpAQCAtOTM2OSw0
MiArOTQ5NSw1MiBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdEVuZCgpCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBtX3NlbGVjdG9yTGlzdFJh
bmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBtX2hlYWRlclJhbmdl
LmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLT5sYXN0KCktPnJ1bGVIZWFkZXJSYW5nZSA9IG1faGVhZGVyUmFuZ2U7CiB9CiAKIHZv
aWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCiB7CisgICAgaWYgKCFpc0V4dHJhY3Rp
bmdTb3VyY2VEYXRhKCkpCisgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBt
X3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKICAgICBpZiAoKm1fdG9rZW5TdGFydCA9
PSAneycpCiAgICAgICAgICsrb2Zmc2V0OyAvLyBTa2lwIHRoZSBydWxlIGJvZHkgb3BlbmluZyBi
cmFjZS4KLSAgICBpZiAob2Zmc2V0ID4gbV9ydWxlQm9keVJhbmdlLnN0YXJ0KQotICAgICAgICBt
X3J1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBvZmZzZXQ7Ci0gICAgbV9pblN0eWxlUnVsZU9yRGVjbGFy
YXRpb24gPSB0cnVlOworICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0
eSgpKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVCb2R5UmFuZ2Uu
c3RhcnQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQog
eworICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CiAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7Ci0g
ICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5lbmQpCi0gICAgICAgIG1fcnVsZUJvZHlS
YW5nZS5lbmQgPSBvZmZzZXQ7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5p
c0VtcHR5KCkpOworICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUJvZHlS
YW5nZS5lbmQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlTdGFy
dCgpCiB7Ci0gICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKKyAgICBpZiAoIWlz
RXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJl
bnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkgfHwgIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxh
c3QoKS0+c3R5bGVTb3VyY2VEYXRhKQogICAgICAgICByZXR1cm47CisKICAgICBtX3Byb3BlcnR5
UmFuZ2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKIH0KIAogdm9p
ZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wg
aXNQcm9wZXJ0eVBhcnNlZCkKIHsKLSAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9u
KQorICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSB8fCAhbV9jdXJyZW50UnVs
ZURhdGFTdGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURhdGEpCiAgICAgICAgIHJldHVybjsKKwog
ICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwog
ICAgIGlmICgqbV90b2tlblN0YXJ0ID09ICc7JykgLy8gSW5jbHVkZSBzZW1pY29sb24gaW50byB0
aGUgcHJvcGVydHkgdGV4dC4KICAgICAgICAgKytvZmZzZXQ7CiAgICAgbV9wcm9wZXJ0eVJhbmdl
LmVuZCA9IG9mZnNldDsKLSAgICBpZiAobV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ICE9IFVJTlRfTUFY
ICYmIG1fY3VycmVudFJ1bGVEYXRhKSB7CisgICAgaWYgKG1fcHJvcGVydHlSYW5nZS5zdGFydCAh
PSBVSU5UX01BWCAmJiAhbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIFRoaXMgc3R1ZmYgaXMgb25seSBleGVjdXRlZCB3aGVuIHRoZSBzdHlsZSBkYXRhIHJl
dHJpZXZhbCBpcyByZXF1ZXN0ZWQgYnkgY2xpZW50LgogICAgICAgICBjb25zdCB1bnNpZ25lZCBz
dGFydCA9IG1fcHJvcGVydHlSYW5nZS5zdGFydDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgZW5k
ID0gbV9wcm9wZXJ0eVJhbmdlLmVuZDsKQEAgLTk0MTgsMTAgKzk1NTQsMTEgQEAgdm9pZCBDU1NQ
YXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9w
ZXJ0eVBhcnNlZCkKICAgICAgICAgU3RyaW5nIG5hbWUgPSBwcm9wZXJ0eVN0cmluZy5sZWZ0KGNv
bG9uSW5kZXgpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBwcm9w
ZXJ0eVN0cmluZy5zdWJzdHJpbmcoY29sb25JbmRleCArIDEsIHByb3BlcnR5U3RyaW5nLmxlbmd0
aCgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHJhbmdlIGlz
IHJlbGF0aXZlIHRvIHRoZSBkZWNsYXJhdGlvbiBzdGFydCBvZmZzZXQuCi0gICAgICAgIG1fY3Vy
cmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoCi0gICAg
ICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91
bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdl
LnN0YXJ0LCBlbmQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CisgICAgICAgIFNvdXJjZVJh
bmdlJiB0b3BSdWxlQm9keVJhbmdlID0gbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5y
dWxlQm9keVJhbmdlOworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnN0
eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFwcGVuZCgKKyAgICAgICAgICAgIENTU1Byb3Bl
cnR5U291cmNlRGF0YShuYW1lLCB2YWx1ZSwgaXNJbXBvcnRhbnRGb3VuZCwgaXNQcm9wZXJ0eVBh
cnNlZCwgU291cmNlUmFuZ2Uoc3RhcnQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0LCBlbmQgLSB0
b3BSdWxlQm9keVJhbmdlLnN0YXJ0KSkpOwogICAgIH0KLSAgICByZXNldFByb3BlcnR5TWFya3Mo
KTsKKyAgICByZXNldFByb3BlcnR5UmFuZ2UoKTsKIH0KIAogc3RhdGljIENTU1Byb3BlcnR5SUQg
Y3NzUHJvcGVydHlJRChjb25zdCBVQ2hhciogcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBsZW5ndGgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggN2M1YTYyMzc3NDhmZjI3Yzk1NWY3M2E1YjM0MDA1
YjBjOGUyNzM2MS4uNzRlMjRjMTY4N2RlMzMwY2UxODViMzZiN2VlNGI0YWE2MzJhYzRjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAKICAgICB+Q1NT
UGFyc2VyKCk7CiAKLSAgICB2b2lkIHBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29u
c3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlciA9IDAsIFN0eWxlUnVsZVJhbmdlTWFwKiA9
IDApOworICAgIHZvaWQgcGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJp
bmcmLCBpbnQgc3RhcnRMaW5lTnVtYmVyID0gMCwgUnVsZVNvdXJjZURhdGFMaXN0KiA9IDApOwog
ICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcGFyc2VSdWxlKFN0eWxlU2hlZXRDb250ZW50
cyosIGNvbnN0IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFtZT4gcGFyc2VL
ZXlmcmFtZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3RyaW5nJik7CiAgICAgc3Rh
dGljIGJvb2wgcGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUsIFN0eWxlU2hlZXRDb250
ZW50cyopOwpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcGFyc2VT
eXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBEb2N1bWVudCopOwogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyc2VGb250RmFjZVZhbHVlKGNvbnN0
IEF0b21pY1N0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
VmFsaWRQcmltaXRpdmUoaW50IGlkZW50LCBDU1NQYXJzZXJWYWx1ZSopOwotICAgIGJvb2wgcGFy
c2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPENT
U1N0eWxlU291cmNlRGF0YT4qLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0
KTsKKyAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0
cmluZyYsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+LCBTdHlsZVNoZWV0Q29udGVudHMq
IGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVk
aWFRdWVyeShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgYWRkUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4sIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0
ID0gZmFsc2UpOwpAQCAtMzEwLDIxICszMTAsMjYgQEAgcHVibGljOgogICAgIEF0b21pY1N0cmlu
ZyBtX2RlZmF1bHROYW1lc3BhY2U7CiAKICAgICAvLyB0b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0
YQotICAgIGJvb2wgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb247Ci0gICAgU291cmNlUmFuZ2Ug
bV9zZWxlY3Rvckxpc3RSYW5nZTsKLSAgICBTb3VyY2VSYW5nZSBtX3J1bGVCb2R5UmFuZ2U7Cisg
ICAgY29uc3QgU3RyaW5nKiBtX3BhcnNlZFRleHQ7CisgICAgU291cmNlUmFuZ2UgbV9oZWFkZXJS
YW5nZTsKICAgICBTb3VyY2VSYW5nZSBtX3Byb3BlcnR5UmFuZ2U7Ci0gICAgU3R5bGVSdWxlUmFu
Z2VNYXAqIG1fcnVsZVJhbmdlTWFwOwotICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gbV9j
dXJyZW50UnVsZURhdGE7Ci0gICAgdm9pZCBtYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKLSAgICB2
b2lkIG1hcmtTZWxlY3Rvckxpc3RFbmQoKTsKKyAgICBPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0
PiBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrOworICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogbV9ydWxl
U291cmNlRGF0YVJlc3VsdDsKKworICAgIHZvaWQgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhD
U1NSdWxlU291cmNlRGF0YSopOworICAgIHZvaWQgbWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KCk7
CisgICAgdm9pZCBtYXJrQXRSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OlR5cGUp
OworICAgIHZvaWQgbWFya1J1bGVIZWFkZXJFbmQoKTsKICAgICB2b2lkIG1hcmtSdWxlQm9keVN0
YXJ0KCk7CiAgICAgdm9pZCBtYXJrUnVsZUJvZHlFbmQoKTsKICAgICB2b2lkIG1hcmtQcm9wZXJ0
eVN0YXJ0KCk7CiAgICAgdm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5k
LCBib29sIGlzUHJvcGVydHlQYXJzZWQpOwotICAgIHZvaWQgcmVzZXRTZWxlY3Rvckxpc3RNYXJr
cygpIHsgbV9zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCA9IG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5k
ID0gMDsgfQotICAgIHZvaWQgcmVzZXRSdWxlQm9keU1hcmtzKCkgeyBtX3J1bGVCb2R5UmFuZ2Uu
c3RhcnQgPSBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gMDsgfQotICAgIHZvaWQgcmVzZXRQcm9wZXJ0
eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kID0g
VUlOVF9NQVg7IH0KKyAgICB2b2lkIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxD
U1NSdWxlU291cmNlRGF0YT4pOworICAgIHZvaWQgdXBkYXRlVG9wUnVsZUJvZHlFbmQoKTsKKyAg
ICB2b2lkIHJlc2V0UnVsZUhlYWRlclJhbmdlKCkgeyBtX2hlYWRlclJhbmdlLnN0YXJ0ID0gbV9o
ZWFkZXJSYW5nZS5lbmQgPSAwOyB9CisgICAgdm9pZCByZXNldFByb3BlcnR5UmFuZ2UoKSB7IG1f
cHJvcGVydHlSYW5nZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBVSU5UX01BWDsgfQor
ICAgIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHBvcFJ1bGVEYXRhKCk7CisgICAgYm9v
bCBpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gISFtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrOyB9CiAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOwogICAgIGludCB0b2tlbigp
IHsgcmV0dXJuIG1fdG9rZW47IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1Byb3BlcnR5U291cmNlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291
cmNlRGF0YS5oCmluZGV4IDU4MDNmOTRiMWMyZmE3NTFlOWU1NmUxMDI1MmNiZGI2NDBlMTVlMjQu
LjA5ZGU5ZmVmMzk2YTZmNjM2NmNmZWVlMDRmYzNlZjI2YjNkNGNlNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTdHlsZVJ1bGU7CitjbGFzcyBTdHlsZVJ1bGVCYXNl
OwogCiBzdHJ1Y3QgU291cmNlUmFuZ2UgewogICAgIFNvdXJjZVJhbmdlKCk7CkBAIC03OCwyMiAr
NzgsNTUgQEAgc3RydWN0IENTU1N0eWxlU291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENT
U1N0eWxlU291cmNlRGF0YT4gewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxl
U291cmNlRGF0YSgpKTsKICAgICB9CiAKLSAgICAvLyBSYW5nZSBvZiB0aGUgc3R5bGUgdGV4dCBp
biB0aGUgZW5jbG9zaW5nIHNvdXJjZS4KLSAgICBTb3VyY2VSYW5nZSBzdHlsZUJvZHlSYW5nZTsK
ICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiBwcm9wZXJ0eURhdGE7CiB9OwogCitj
bGFzcyBDU1NSdWxlU291cmNlRGF0YTsKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxDU1NSdWxlU291
cmNlRGF0YT4gPiBSdWxlU291cmNlRGF0YUxpc3Q7CisKIHN0cnVjdCBDU1NSdWxlU291cmNlRGF0
YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRhPiB7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZSgpCisgICAgZW51bSBUeXBlIHsKKyAg
ICAgICAgVU5LTk9XTl9SVUxFLAorICAgICAgICBTVFlMRV9SVUxFLAorICAgICAgICBDSEFSU0VU
X1JVTEUsCisgICAgICAgIElNUE9SVF9SVUxFLAorICAgICAgICBNRURJQV9SVUxFLAorICAgICAg
ICBGT05UX0ZBQ0VfUlVMRSwKKyAgICAgICAgUEFHRV9SVUxFLAorICAgICAgICBLRVlGUkFNRVNf
UlVMRQorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
Y3JlYXRlKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NT
UnVsZVNvdXJjZURhdGEodHlwZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBjcmVhdGVVbmtub3duKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTUnVsZVNvdXJjZURhdGEoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTUnVsZVNvdXJjZURhdGEoVU5LTk9XTl9SVUxFKSk7CiAgICAgfQogCisgICAgQ1NT
UnVsZVNvdXJjZURhdGEoVHlwZSB0eXBlKQorICAgICAgICA6IHR5cGUodHlwZSkKKyAgICB7Cisg
ICAgICAgIGlmICh0eXBlID09IFNUWUxFX1JVTEUgfHwgdHlwZSA9PSBGT05UX0ZBQ0VfUlVMRSB8
fCB0eXBlID09IFBBR0VfUlVMRSkKKyAgICAgICAgICAgIHN0eWxlU291cmNlRGF0YSA9IENTU1N0
eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CisgICAgfQorCisgICAgVHlwZSB0eXBlOworCiAgICAg
Ly8gUmFuZ2Ugb2YgdGhlIHNlbGVjdG9yIGxpc3QgaW4gdGhlIGVuY2xvc2luZyBzb3VyY2UuCi0g
ICAgU291cmNlUmFuZ2Ugc2VsZWN0b3JMaXN0UmFuZ2U7CisgICAgU291cmNlUmFuZ2UgcnVsZUhl
YWRlclJhbmdlOworCisgICAgLy8gUmFuZ2Ugb2YgdGhlIHJ1bGUgYm9keSAoZS5nLiBzdHlsZSB0
ZXh0IGZvciBzdHlsZSBydWxlcykgaW4gdGhlIGVuY2xvc2luZyBzb3VyY2UuCisgICAgU291cmNl
UmFuZ2UgcnVsZUJvZHlSYW5nZTsKKworICAgIC8vIE9ubHkgZm9yIENTU1N0eWxlUnVsZXMsIENT
U0ZvbnRGYWNlUnVsZXMsIGFuZCBDU1NQYWdlUnVsZXMuCiAgICAgUmVmUHRyPENTU1N0eWxlU291
cmNlRGF0YT4gc3R5bGVTb3VyY2VEYXRhOworCisgICAgLy8gT25seSBmb3IgQ1NTTWVkaWFSdWxl
cy4KKyAgICBSdWxlU291cmNlRGF0YUxpc3QgY2hpbGRSdWxlczsKIH07Ci10eXBlZGVmIEhhc2hN
YXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+IFN0eWxlUnVsZVJhbmdl
TWFwOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCA0NDk4YWRjMTRmNzEyMTkwNmZi
MmJlNjA2OTA1YmUwMjdjNWI1MDMxLi4zY2Q5MTUwZjYzMDliYTBjOWE4Yjg5NmYzMjg4NGM5N2Rm
Mjc4MzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
U3R5bGVSdWxlSW1wb3J0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmgiCkBAIC02MCwyMCArNjEsMjEgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKIHVzaW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpBcnJheTsKK3VzaW5nIFdlYkNvcmU6
OlJ1bGVTb3VyY2VEYXRhTGlzdDsKK3VzaW5nIFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOwog
CiBjbGFzcyBQYXJzZWRTdHlsZVNoZWV0IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+ID4gU291cmNlRGF0YTsKICAgICBQYXJz
ZWRTdHlsZVNoZWV0KCk7CiAKICAgICBXZWJDb3JlOjpDU1NTdHlsZVNoZWV0KiBjc3NTdHlsZVNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXJPdXRwdXQ7IH0KICAgICBjb25zdCBTdHJpbmcm
IHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KICAgICB2b2lkIHNldFRleHQoY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKICAgICBib29sIGhhc1RleHQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Rl
eHQ7IH0KLSAgICBTb3VyY2VEYXRhKiBzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VEYXRhLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8U291cmNl
RGF0YT4gc291cmNlRGF0YSk7CisgICAgUnVsZVNvdXJjZURhdGFMaXN0KiBzb3VyY2VEYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhLmdldCgpOyB9CisgICAgdm9pZCBzZXRTb3VyY2VE
YXRhKFBhc3NPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0Pik7CiAgICAgYm9vbCBoYXNTb3VyY2VE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhOyB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OkNTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNl
RGF0YUF0KHVuc2lnbmVkKSBjb25zdDsKIAogcHJpdmF0ZToKIApAQCAtODEsNyArODMsNyBAQCBw
cml2YXRlOgogICAgIFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqIG1fcGFyc2VyT3V0cHV0OwogICAg
IFN0cmluZyBtX3RleHQ7CiAgICAgYm9vbCBtX2hhc1RleHQ7Ci0gICAgT3duUHRyPFNvdXJjZURh
dGE+IG1fc291cmNlRGF0YTsKKyAgICBPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBtX3NvdXJj
ZURhdGE7CiB9OwogCiBQYXJzZWRTdHlsZVNoZWV0OjpQYXJzZWRTdHlsZVNoZWV0KCkKQEAgLTk3
LDEyICs5OSwzMyBAQCB2b2lkIFBhcnNlZFN0eWxlU2hlZXQ6OnNldFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0KQogICAgIHNldFNvdXJjZURhdGEobnVsbHB0cik7CiB9CiAKLXZvaWQgUGFyc2VkU3R5
bGVTaGVldDo6c2V0U291cmNlRGF0YShQYXNzT3duUHRyPFNvdXJjZURhdGE+IHNvdXJjZURhdGEp
CitzdGF0aWMgdm9pZCBmbGF0dGVuU291cmNlRGF0YShSdWxlU291cmNlRGF0YUxpc3QqIGRhdGFM
aXN0LCBSdWxlU291cmNlRGF0YUxpc3QqIHRhcmdldCkKIHsKLSAgICBtX3NvdXJjZURhdGEgPSBz
b3VyY2VEYXRhOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YUxpc3QtPnNpemUoKTsg
KytpKSB7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mIGRhdGEgPSBkYXRhTGlz
dC0+YXQoaSk7CisgICAgICAgIGlmIChkYXRhLT50eXBlID09IENTU1J1bGVTb3VyY2VEYXRhOjpT
VFlMRV9SVUxFKQorICAgICAgICAgICAgdGFyZ2V0LT5hcHBlbmQoZGF0YSk7CisgICAgICAgIGVs
c2UgaWYgKGRhdGEtPnR5cGUgPT0gQ1NTUnVsZVNvdXJjZURhdGE6Ok1FRElBX1JVTEUpCisgICAg
ICAgICAgICBmbGF0dGVuU291cmNlRGF0YSgmZGF0YS0+Y2hpbGRSdWxlcywgdGFyZ2V0KTsKKyAg
ICB9Cit9CisKK3ZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0U291cmNlRGF0YShQYXNzT3duUHRy
PFJ1bGVTb3VyY2VEYXRhTGlzdD4gc291cmNlRGF0YSkKK3sKKyAgICBpZiAoIXNvdXJjZURhdGEp
IHsKKyAgICAgICAgbV9zb3VyY2VEYXRhLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3NvdXJjZURhdGEgPSBhZG9wdFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkp
OworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdG8gcmV0YWlu
IHRoZSBvcmlnaW5hbCBmbGF0IHNvdXJjZURhdGEgc3RydWN0dXJlCisgICAgLy8gY29udGFpbmlu
ZyBvbmx5IHN0eWxlIHJ1bGVzLCBldmVuIHRob3VnaCBDU1NQYXJzZXIgbm93IHByb3ZpZGVzIHRo
ZSBmdWxsIHJ1bGUgc291cmNlIGRhdGEgdHJlZS4KKyAgICAvLyBOb3JtYWxseSwgd2Ugc2hvdWxk
IGp1c3QgYXNzaWduIG1fc291cmNlRGF0YSA9IHNvdXJjZURhdGE7CisgICAgZmxhdHRlblNvdXJj
ZURhdGEoc291cmNlRGF0YS5nZXQoKSwgbV9zb3VyY2VEYXRhLmdldCgpKTsKIH0KIAotUmVmUHRy
PFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNl
RGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorUGFzc1JlZlB0cjxXZWJDb3JlOjpDU1NSdWxl
U291cmNlRGF0YT4gUGFyc2VkU3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKIHsKICAgICBpZiAoIWhhc1NvdXJjZURhdGEoKSB8fCBpbmRleCA+PSBtX3Nv
dXJjZURhdGEtPnNpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzEsNyArMjk0LDcgQEAg
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb24KIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IG1fcGFyZW50U3R5bGVTaGVldCA/IG1fcGFyZW50U3R5bGVTaGVldC0+cnVs
ZVNvdXJjZURhdGFGb3IobV9zdHlsZS5nZXQoKSkgOiAwOwogICAgIGlmIChzb3VyY2VEYXRhKQot
ICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0
YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZSkpOworICAgICAgICByZXN1bHQtPnNl
dFJhbmdlKGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSkp
OwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CkBAIC0zMTQsMTAgKzMzNywxMCBA
QCBib29sIEluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQodW5zaWduZWQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgcHJvcGVydHlUZXh0LAogCiAgICAgaWYgKHByb3BlcnR5VGV4dC5zdHJpcFdo
aXRlU3BhY2UoKS5sZW5ndGgoKSkgewogICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
dGVtcE11dGFibGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwotICAgICAgICBS
ZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRh
OjpjcmVhdGUoKTsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRh
ID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShDU1NSdWxlU291cmNlRGF0YTo6U1RZTEVfUlVM
RSk7CiAgICAgICAgIENTU1BhcnNlciBwKENTU1N0cmljdE1vZGUpOwotICAgICAgICBwLnBhcnNl
RGVjbGFyYXRpb24odGVtcE11dGFibGVTdHlsZS5nZXQoKSwgcHJvcGVydHlUZXh0ICsgIiAiICsg
Ym9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBub25lIiwgJnNvdXJjZURhdGEsIG1fc3R5bGUtPnBhcmVu
dFN0eWxlU2hlZXQoKS0+Y29udGVudHMoKSk7Ci0gICAgICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNv
dXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAg
ICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRl
eHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFtZSArICI6IG5vbmUiLCBzb3VyY2VEYXRhLCBtX3N0
eWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmNvbnRlbnRzKCkpOworICAgICAgICBWZWN0b3I8Q1NT
UHJvcGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gc291cmNlRGF0YS0+c3R5bGVTb3Vy
Y2VEYXRhLT5wcm9wZXJ0eURhdGE7CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBw
cm9wZXJ0eURhdGEuc2l6ZSgpOwogCiAgICAgICAgIC8vIEF0IGxlYXN0IG9uZSBwcm9wZXJ0eSAr
IHRoZSBib2d1cyBwcm9wZXJ0eSBhZGRlZCBqdXN0IGFib3ZlIHNob3VsZCBiZSBwcmVzZW50LgpA
QCAtMzU1LDcgKzM3OCw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1
bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVRleHQsCiAgICAgICAgICpvbGRU
ZXh0ID0gYWxsUHJvcGVydGllcy5hdChpbmRleCkucmF3VGV4dDsKICAgICAgICAgZWRpdG9yLnJl
cGxhY2VQcm9wZXJ0eShpbmRleCwgcHJvcGVydHlUZXh0KTsKICAgICB9IGVsc2UKLSAgICAgICAg
ZWRpdG9yLmluc2VydFByb3BlcnR5KGluZGV4LCBwcm9wZXJ0eVRleHQsIHNvdXJjZURhdGEtPnN0
eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UubGVuZ3RoKCkpOworICAgICAgICBlZGl0b3Iu
aW5zZXJ0UHJvcGVydHkoaW5kZXgsIHByb3BlcnR5VGV4dCwgc291cmNlRGF0YS0+cnVsZUJvZHlS
YW5nZS5sZW5ndGgoKSk7CiAKICAgICByZXR1cm4gYXBwbHlTdHlsZVRleHQoZWRpdG9yLnN0eWxl
VGV4dCgpKTsKIH0KQEAgLTQxMyw3ICs0MzYsNyBAQCBib29sIEluc3BlY3RvclN0eWxlOjpzdHls
ZVRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+
c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZTsKKyAgICBTb3VyY2VSYW5nZSYgYm9keVJh
bmdlID0gc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZTsKICAgICAqcmVzdWx0ID0gc3R5bGVTaGVl
dFRleHQuc3Vic3RyaW5nKGJvZHlSYW5nZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJvZHlSYW5n
ZS5zdGFydCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03NzEsNyArNzk0LDcgQEAgYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQm
IGlkLCBjb25zdCBTdHJpbmcKICAgICB9CiAKICAgICBTdHJpbmcgc2hlZXRUZXh0ID0gbV9wYXJz
ZWRTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgc2hlZXRUZXh0LnJlcGxhY2Uoc291cmNlRGF0YS0+
c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVu
ZCAtIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0LCBzZWxlY3Rvcik7CisgICAg
c2hlZXRUZXh0LnJlcGxhY2Uoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0LCBzb3Vy
Y2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2UubGVuZ3RoKCksIHNlbGVjdG9yKTsKICAgICBtX3BhcnNl
ZFN0eWxlU2hlZXQtPnNldFRleHQoc2hlZXRUZXh0KTsKICAgICBmaXJlU3R5bGVTaGVldENoYW5n
ZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgzMCw3ICs4NTMsNyBAQCBib29sIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBFeGNlcHRp
b25Db2RlJiBlYwogICAgIH0KIAogICAgIFN0cmluZyBzaGVldFRleHQgPSBtX3BhcnNlZFN0eWxl
U2hlZXQtPnRleHQoKTsKLSAgICBzaGVldFRleHQucmVtb3ZlKHNvdXJjZURhdGEtPnNlbGVjdG9y
TGlzdFJhbmdlLnN0YXJ0LCBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJh
bmdlLmVuZCAtIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ICsgMSk7CisgICAg
c2hlZXRUZXh0LnJlbW92ZShzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQsIHNvdXJj
ZURhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5kIC0gc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0
YXJ0ICsgMSk7CiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHNoZWV0VGV4dCk7CiAg
ICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05MTEsMTIg
KzkzNCw4IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTCiAgICAgUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiBzb3VyY2VEYXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAg
ICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOwotICAg
IGlmIChzb3VyY2VEYXRhKSB7Ci0gICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3Vy
Y2VSYW5nZT4gc2VsZWN0b3JSYW5nZSA9IFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlOjpj
cmVhdGUoKQotICAgICAgICAgICAgLnNldFN0YXJ0KHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJh
bmdlLnN0YXJ0KQotICAgICAgICAgICAgLnNldEVuZChzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RS
YW5nZS5lbmQpOwotICAgICAgICByZXN1bHQtPnNldFNlbGVjdG9yUmFuZ2Uoc2VsZWN0b3JSYW5n
ZS5yZWxlYXNlKCkpOwotICAgIH0KKyAgICBpZiAoc291cmNlRGF0YSkKKyAgICAgICAgcmVzdWx0
LT5zZXRTZWxlY3RvclJhbmdlKGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVs
ZUhlYWRlclJhbmdlKSk7CiAKICAgICBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
TWVkaWE+ID4gbWVkaWFBcnJheSA9IEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPjo6
Y3JlYXRlKCk7CiAKQEAgLTk0OCw3ICs5NjcsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpD
U1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKAog
ICAgICAgICBTdHJpbmcgc2hlZXRUZXh0OwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBnZXRUZXh0
KCZzaGVldFRleHQpOwogICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAgICAgY29uc3Qg
U291cmNlUmFuZ2UmIGJvZHlSYW5nZSA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2U7CisgICAgICAgICAgICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0g
c291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0Q3NzVGV4
dChzaGVldFRleHQuc3Vic3RyaW5nKGJvZHlSYW5nZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJv
ZHlSYW5nZS5zdGFydCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA5OCwyMiArMTExNyw5IEBA
IGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlU291cmNlRGF0YSgpCiAKICAgICBSZWZQ
dHI8U3R5bGVTaGVldENvbnRlbnRzPiBuZXdTdHlsZVNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRz
OjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXIgcChDU1NTdHJpY3RNb2RlKTsKLSAgICBTdHlsZVJ1
bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7Ci0gICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQu
Z2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCAwLCAmcnVsZVJhbmdlTWFwKTsKLSAg
ICBPd25QdHI8UGFyc2VkU3R5bGVTaGVldDo6U291cmNlRGF0YT4gcmFuZ2VzVmVjdG9yKGFkb3B0
UHRyKG5ldyBQYXJzZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhKSk7Ci0KLSAgICBWZWN0b3I8Q1NT
U3R5bGVSdWxlKj4gcnVsZXM7Ci0gICAgUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCA9IGFz
Q1NTUnVsZUxpc3QoQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKG5ld1N0eWxlU2hlZXQpLmdldCgpKTsK
LSAgICBjb2xsZWN0RmxhdFJ1bGVzKHJ1bGVMaXN0LCAmcnVsZXMpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIHNpemUgPSBydWxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
U3R5bGVSdWxlUmFuZ2VNYXA6Oml0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZXMu
YXQoaSktPnN0eWxlUnVsZSgpKTsKLSAgICAgICAgaWYgKGl0ICE9IHJ1bGVSYW5nZU1hcC5lbmQo
KSkgewotICAgICAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhpdC0+c2Vjb25kLmdl
dCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSk7Ci0gICAgICAgICAgICByYW5nZXNWZWN0
b3ItPmFwcGVuZChpdC0+c2Vjb25kKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGFyc2Vk
U3R5bGVTaGVldC0+c2V0U291cmNlRGF0YShyYW5nZXNWZWN0b3IucmVsZWFzZSgpKTsKKyAgICBP
d25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBydWxlU291cmNlRGF0YVJlc3VsdCA9IGFkb3B0UHRy
KG5ldyBSdWxlU291cmNlRGF0YUxpc3QoKSk7CisgICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hl
ZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCAwLCBydWxlU291cmNlRGF0YVJl
c3VsdC5nZXQoKSk7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRTb3VyY2VEYXRhKHJ1bGVT
b3VyY2VEYXRhUmVzdWx0LnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIG1fcGFyc2VkU3R5bGVTaGVl
dC0+aGFzU291cmNlRGF0YSgpOwogfQogCkBAIC0xMTU3LDggKzExNjMsOCBAQCBib29sIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZShDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihzdHlsZSk7Ci0gICAg
dW5zaWduZWQgYm9keVN0YXJ0ID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJv
ZHlSYW5nZS5zdGFydDsKLSAgICB1bnNpZ25lZCBib2R5RW5kID0gc291cmNlRGF0YS0+c3R5bGVT
b3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQ7CisgICAgdW5zaWduZWQgYm9keVN0YXJ0ID0g
c291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5zdGFydDsKKyAgICB1bnNpZ25lZCBib2R5RW5kID0g
c291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5lbmQ7CiAgICAgQVNTRVJUKGJvZHlTdGFydCA8PSBi
b2R5RW5kKTsKIAogICAgIFN0cmluZyB0ZXh0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7
CkBAIC0xMjUzLDUxICsxMjU5LDYgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjoKICAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhV
bnBhcnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSwgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0VGV4dCkKLXsKLSAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VE
YXRhPiYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlE
YXRhOwotICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eURhdGEuc2l6ZSgpOwotICAgIGlmICgh
c2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVE
YXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0OwotICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gc3R5bGVTaGVldFRleHQuY2hhcmFjdGVycygpOwotICAgIENTU1By
b3BlcnR5U291cmNlRGF0YSogbmV4dERhdGEgPSAmKHByb3BlcnR5RGF0YS5hdCgwKSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBDU1NQcm9wZXJ0
eVNvdXJjZURhdGEqIGN1cnJlbnREYXRhID0gbmV4dERhdGE7Ci0gICAgICAgIG5leHREYXRhID0g
aSA8IHNpemUgLSAxID8gJihwcm9wZXJ0eURhdGEuYXQoaSArIDEpKSA6IDA7Ci0KLSAgICAgICAg
aWYgKGN1cnJlbnREYXRhLT5wYXJzZWRPaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCA+IDAgJiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0
ICsgY3VycmVudERhdGEtPnJhbmdlLmVuZCAtIDFdID09ICc7JykKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIHVuc2lnbmVkIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0OwotICAgICAg
ICBpZiAoIW5leHREYXRhKQotICAgICAgICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBy
dWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQgLSAxOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQg
KyBuZXh0RGF0YS0+cmFuZ2Uuc3RhcnQgLSAxOwotCi0gICAgICAgIHdoaWxlIChpc0hUTUxTcGFj
ZShjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHlsZVNoZWV0XSkpCi0gICAgICAgICAgICAtLXBy
b3BlcnR5RW5kSW5TdHlsZVNoZWV0OwotCi0gICAgICAgIC8vIHByb3BlcnR5RW5kSW5TdHlsZVNo
ZWV0IHBvaW50cyBhdCB0aGUgbGFzdCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KLSAgICAgICAg
dW5zaWduZWQgbmV3UHJvcGVydHlFbmQgPSBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAtIHN0eWxl
U3RhcnQgKyAxOyAvLyBFeGNsdXNpdmUgb2YgdGhlIGxhc3QgcHJvcGVydHkgdGV4dCBjaGFyYWN0
ZXIuCi0gICAgICAgIGlmIChjdXJyZW50RGF0YS0+cmFuZ2UuZW5kICE9IG5ld1Byb3BlcnR5RW5k
KSB7Ci0gICAgICAgICAgICBjdXJyZW50RGF0YS0+cmFuZ2UuZW5kID0gbmV3UHJvcGVydHlFbmQ7
Ci0gICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFy
dCArIGN1cnJlbnREYXRhLT5yYW5nZS5zdGFydCArIGN1cnJlbnREYXRhLT5uYW1lLmxlbmd0aCgp
OwotICAgICAgICAgICAgd2hpbGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVu
ZEluU3R5bGVTaGVldCAmJiBjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdICE9ICc6
JykKLSAgICAgICAgICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7Ci0gICAgICAgICAg
ICBpZiAodmFsdWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0KQot
ICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0
aGUgJzonLgotICAgICAgICAgICAgd2hpbGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9w
ZXJ0eUVuZEluU3R5bGVTaGVldCAmJiBpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJ
blN0eWxlU2hlZXRdKSkKLSAgICAgICAgICAgICAgICArK3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7
Ci0gICAgICAgICAgICAvLyBOZWVkIHRvIGV4Y2x1ZGUgdGhlIHRyYWlsaW5nICc7JyBmcm9tIHRo
ZSBwcm9wZXJ0eSB2YWx1ZS4KLSAgICAgICAgICAgIGN1cnJlbnREYXRhLT52YWx1ZSA9IHN0eWxl
U2hlZXRUZXh0LnN1YnN0cmluZyh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0LCBwcm9wZXJ0eUVuZElu
U3R5bGVTaGVldCAtIHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgKyAoY2hhcmFjdGVyc1twcm9wZXJ0
eUVuZEluU3R5bGVTaGVldF0gPT0gJzsnID8gMCA6IDEpKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQogdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8
Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0LCBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4qIHJlc3VsdCkKIHsK
ICAgICBpZiAoIXJ1bGVMaXN0KQpAQCAtMTM4NCwxMyArMTM0NSwxMSBAQCBib29sIEluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKICAgICBp
ZiAobV9ydWxlU291cmNlRGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3J1bGVT
b3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxDU1NT
dHlsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgp
OwotICAgIGJvb2wgc3VjY2VzcyA9IGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKCZzb3VyY2VEYXRh
KTsKKyAgICBtX3J1bGVTb3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShDU1NS
dWxlU291cmNlRGF0YTo6U1RZTEVfUlVMRSk7CisgICAgYm9vbCBzdWNjZXNzID0gZ2V0U3R5bGVB
dHRyaWJ1dGVSYW5nZXMobV9ydWxlU291cmNlRGF0YS5nZXQoKSk7CiAgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3J1bGVTb3VyY2VEYXRhLT5zdHlsZVNv
dXJjZURhdGEgPSBzb3VyY2VEYXRhLnJlbGVhc2UoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTQxMCwxNCArMTM2OSwxNCBAQCBjb25zdCBTdHJpbmcmIEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZTo6ZWxlbWVudFN0eWxlVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZWxl
bWVudC0+Z2V0QXR0cmlidXRlKCJzdHlsZSIpLnN0cmluZygpOwogfQogCi1ib29sIEluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoUmVmUHRy
PENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhDU1NSdWxlU291cmNl
RGF0YSogcmVzdWx0KSBjb25zdAogewogICAgIGlmICghbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fc3R5bGVUZXh0LmlzRW1w
dHkoKSkgewotICAgICAgICAoKnJlc3VsdCktPnN0eWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKLSAg
ICAgICAgKCpyZXN1bHQpLT5zdHlsZUJvZHlSYW5nZS5lbmQgPSAwOworICAgICAgICByZXN1bHQt
PnJ1bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAgICAgICByZXN1bHQtPnJ1bGVCb2R5UmFuZ2Uu
ZW5kID0gMDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCAwM2NhYjY3N2QyMjQzYzdk
NWM0NjUwMzA0MjgxZGQ2OTJjMTdjOTg3Li40NzlmODM2MWJkYjFiMTZhN2ViNDUyZDYwNWRlOWZk
NjgxMmNkMWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmgKQEAgLTIxOSw3ICsyMTksNiBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBJbnNwZWN0b3JTdHlsZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpeFVucGFyc2Vk
UHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhLCBjb25zdCBTdHJpbmcm
IHN0eWxlU2hlZXRUZXh0KTsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0RmxhdFJ1bGVzKFBhc3NS
ZWZQdHI8Q1NTUnVsZUxpc3Q+LCBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4qIHJlc3VsdCk7CiAgICAg
Ym9vbCBlbnN1cmVUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVTb3VyY2VEYXRhKCk7CkBA
IC0yNjgsNyArMjY3LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBDU1NTdHlsZURlY2xh
cmF0aW9uKiBpbmxpbmVTdHlsZSgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgZWxlbWVudFN0
eWxlVGV4dCgpIGNvbnN0OwotICAgIGJvb2wgZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoUmVmUHRy
PENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCkgY29uc3Q7CisgICAgYm9vbCBnZXRTdHlsZUF0
dHJpYnV0ZVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSogcmVzdWx0KSBjb25zdDsKIAogICAgIFJl
ZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBt
X3J1bGVTb3VyY2VEYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149281</attachid>
            <date>2012-06-25 06:32:32 -0700</date>
            <delta_ts>2012-06-25 09:05:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88420-20120625173231.patch</filename>
            <type>text/plain</type>
            <size>42310</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBjMTUwZjY2NDg0ZGQw
ZWQzZjg4YThhNzNjOTQyZDYwNWUwZWE3ZC4uNGIyMDE1ZGE2NjZhYWRjMGRhMTVjYmE2NGFlMmZm
MjEwODIxYjRhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc0IEBACiAyMDEyLTA2LTI1ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUHJvdmlkZSBzb3VyY2UgZGF0YSBmb3IgYWxsIGtub3duIHJ1bGUgdHlwZXMgaW4gQ1NT
UGFyc2VyLCBleGNlcHQgImtleWZyYW1lIiBhbmQgInJlZ2lvbiIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGVyZSBpcyBu
byBjbGllbnQtdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuIEV4aXN0aW5nIEluc3BlY3RvciB0ZXN0
cyB3aWxsIGJlIG1vZGlmaWVkCisgICAgICAgIHRvIHRlc3QgdGhlIG5ldyBkYXRhIHByb3ZpZGVk
LCBhbG9uZyB3aXRoIHRoZSBuZWNlc3NhcnkgSW5zcGVjdG9yIHBsdW1iaW5nLgorCisgICAgICAg
ICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gpOiBDaGVjayBmb3IgbWVkaWFR
dWVyaWVzKCkgdmFsaWRpdHkgYmVmb3JlIHJlYXR0YWNoaW5nLgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOiBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgYmVsb3csIHRoZSBtZXRob2Qg
Y2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgZXh0ZW5zaW9uIG9mIHRoZQorICAgICAgICBzb3Vy
Y2UtYmFzZWQgQ1NTIG1vZGVsIHByb3ZpZGVkIGJ5IHRoZSBwYXJzZXIuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OkNTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNldHVwUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJh
dGlvbik6IEFjY2VwdCBhIENTU1J1bGVTb3VyY2VEYXRhIGZvciBmaWxsaW5nLCBzaW5jZSBpdCBu
b3cgY29udGFpbnMKKyAgICAgICAgdGhlIHJlbGF0ZWQgc3R5bGUgc291cmNlIHJhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKTogQ3JlYXRlIENTU01lZGlhUnVsZSBl
dmVuIGlmIG1lZGlhIGFuZCBydWxlcyBhcmUgZW1wdHksCisgICAgICAgIHdoaWNoIGlzIGNvbnNp
c3RlbnQgd2l0aCBNb3ppbGxhLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGROZXdS
dWxlVG9Tb3VyY2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjp1cGRhdGVUb3BSdWxlQm9keUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OmNyZWF0ZUtleWZyYW1lc1J1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpjcmVhdGVTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVG
b250RmFjZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVJlZ2lvblJ1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya0F0UnVsZUhlYWRlclN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVIZWFkZXJFbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
Om1hcmtQcm9wZXJ0eVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1By
b3BlcnR5RW5kKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChDU1NQYXJz
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldFJ1bGVIZWFkZXJSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnJlc2V0UHJvcGVydHlSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6aXNFeHRyYWN0aW5nU291cmNlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1By
b3BlcnR5U291cmNlRGF0YS5oOiBFeHRlbmQgdGhlIG1vZGVsIHRvIGhhbmRsZSBtb3JlIHR5cGVz
IG9mIHJ1bGVzIGFuZCB0aGVpciBjb250YWlubWVudHMuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUpOgorICAgICAgICAoQ1NT
UnVsZVNvdXJjZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE6OmNy
ZWF0ZVVua25vd24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE6OkNTU1J1
bGVTb3VyY2VEYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHA6IEZvbGxvdyB0aGUgQ1NTUGFyc2VyIEFQSSBjaGFuZ2VzIGJ1dCByZXRhaW4gdGhlIHN0b3Jl
ZCBDU1MgcnVsZXMgc3RydWN0dXJlLgorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldDo6c291cmNl
RGF0YSk6CisgICAgICAgIChQYXJzZWRTdHlsZVNoZWV0KToKKyAgICAgICAgKGZsYXR0ZW5Tb3Vy
Y2VEYXRhKTogRmxhdHRlbiB0aGUgcnVsZSB0cmVlIHRvIHJldGFpbiB0aGUgZXhpc3RpbmcgcnVs
ZS1oYW5kbGluZyBjb2RlIGludGFjdC4KKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnNldFNv
dXJjZURhdGEpOgorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFBdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzdHlsZVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UnVsZVNlbGVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlU291cmNlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VGV4dFdpdGhDaGFu
Z2VkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKworMjAxMi0wNi0yNSAg
QWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFtTdHlsZXNdIENhbm5vdCB2aXN1YWxseSBzZXQgY2FyZXQgYmVmb3JlIHRoZSBm
aXJzdCBDU1MgcHJvcGVydHkgbmFtZSBjaGFyYWN0ZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5ODY5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55Cmlu
ZGV4IDdhZGNjMzdiY2MzZWEwOTIyY2ViYmFlYzlhNDFhY2EwMjUzMDg5ZTQuLjJmOTg0NmI0NzNl
YmE2YmYxZThlNjJhMDI0NWNjZDY2YTMyOWFiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQpA
QCAtMzg3LDYgKzM4Nyw4IEBAIGNoYXJzZXQ6CiAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19j
YXN0PENTU1BhcnNlcio+KHBhcnNlcik7CiAgICAgIGlmIChwLT5tX3N0eWxlU2hlZXQpCiAgICAg
ICAgICBwLT5tX3N0eWxlU2hlZXQtPnBhcnNlclNldEVuY29kaW5nRnJvbUNoYXJzZXRSdWxlKCQz
KTsKKyAgICAgaWYgKHAtPmlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSAmJiBwLT5tX2N1cnJlbnRS
dWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkgJiYgcC0+bV9ydWxlU291cmNlRGF0YVJlc3VsdCkKKyAg
ICAgICAgIHAtPm1fcnVsZVNvdXJjZURhdGFSZXN1bHQtPmFwcGVuZChDU1NSdWxlU291cmNlRGF0
YTo6Y3JlYXRlVW5rbm93bigpKTsKICAgICAgJCQgPSAwOwogICB9CiAgIHwgQ0hBUlNFVF9TWU0g
ZXJyb3IgaW52YWxpZF9ibG9jayB7CkBAIC00NjIsMjIgKzQ2NCwzOCBAQCBibG9ja19ydWxlOgog
ICB8IG1lZGlhCiAgIDsKIAorYXRfaW1wb3J0X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2U6CisgICAg
bWF5YmVfc3BhY2UgeworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIqPihwYXJzZXIpOworICAgICAgICBwLT5tYXJrUnVsZUhlYWRlckVuZCgpOworICAgICAgICBw
LT5tYXJrUnVsZUJvZHlTdGFydCgpOworICAgIH0KKyAgICA7CisKK2JlZm9yZV9pbXBvcnRfcnVs
ZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBh
cnNlciktPm1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6SU1QT1JUX1JV
TEUpOworICAgIH0KKyAgOwogCiBpbXBvcnQ6Ci0gICAgSU1QT1JUX1NZTSBtYXliZV9zcGFjZSBz
dHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX2xpc3QgJzsnIHsKLSAgICAgICAg
JCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVJbXBvcnRSdWxlKCQz
LCAkNSk7CisgICAgYmVmb3JlX2ltcG9ydF9ydWxlIElNUE9SVF9TWU0gYXRfaW1wb3J0X2hlYWRl
cl9lbmRfbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9s
aXN0ICc7JyB7CisgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+
Y3JlYXRlSW1wb3J0UnVsZSgkNCwgJDYpOwogICAgIH0KLSAgfCBJTVBPUlRfU1lNIG1heWJlX3Nw
YWNlIHN0cmluZ19vcl91cmkgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCBUT0tFTl9FT0Yg
ewotICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUlt
cG9ydFJ1bGUoJDMsICQ1KTsKKyAgfCBiZWZvcmVfaW1wb3J0X3J1bGUgSU1QT1JUX1NZTSBhdF9p
bXBvcnRfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIG1h
eWJlX21lZGlhX2xpc3QgVE9LRU5fRU9GIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQ
YXJzZXIqPihwYXJzZXIpLT5jcmVhdGVJbXBvcnRSdWxlKCQ0LCAkNik7CiAgICAgfQotICB8IElN
UE9SVF9TWU0gbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRp
YV9saXN0IGludmFsaWRfYmxvY2sgeworICB8IGJlZm9yZV9pbXBvcnRfcnVsZSBJTVBPUlRfU1lN
IGF0X2ltcG9ydF9oZWFkZXJfZW5kX21heWJlX3NwYWNlIHN0cmluZ19vcl91cmkgbWF5YmVfc3Bh
Y2UgbWF5YmVfbWVkaWFfbGlzdCBpbnZhbGlkX2Jsb2NrIHsKICAgICAgICAgJCQgPSAwOworICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAg
IH0KLSAgfCBJTVBPUlRfU1lNIGVycm9yICc7JyB7CisgIHwgYmVmb3JlX2ltcG9ydF9ydWxlIElN
UE9SVF9TWU0gZXJyb3IgJzsnIHsKICAgICAgICAgJCQgPSAwOworICAgICAgICBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KLSAgfCBJTVBPUlRf
U1lNIGVycm9yIGludmFsaWRfYmxvY2sgeworICB8IGJlZm9yZV9pbXBvcnRfcnVsZSBJTVBPUlRf
U1lNIGVycm9yIGludmFsaWRfYmxvY2sgewogICAgICAgICAkJCA9IDA7CisgICAgICAgIHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogICA7CiAK
QEAgLTYwMiwxNSArNjIwLDM0IEBAIG1lZGlhX2xpc3Q6CiAgICAgfQogICAgIDsKIAorYXRfcnVs
ZV9ib2R5X3N0YXJ0OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKS0+bWFya1J1bGVCb2R5U3RhcnQoKTsKKyAgICB9CisgICAgOworCiti
ZWZvcmVfbWVkaWFfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIHN0YXRpY19jYXN0
PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNl
RGF0YTo6TUVESUFfUlVMRSk7CisgICAgfQorICA7CisKK2F0X21lZGlhX2hlYWRlcl9lbmRfbWF5
YmVfc3BhY2U6CisgICAgbWF5YmVfc3BhY2UgeworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIqPihwYXJzZXIpLT5tYXJrUnVsZUhlYWRlckVuZCgpOworICAgIH0KKyAgICA7CisKIG1lZGlh
OgotICAgIE1FRElBX1NZTSBtYXliZV9zcGFjZSBtZWRpYV9saXN0ICd7JyBtYXliZV9zcGFjZSBi
bG9ja19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7Ci0gICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlTWVkaWFSdWxlKCQzLCAkNik7CisgICAgYmVmb3JlX21l
ZGlhX3J1bGUgTUVESUFfU1lNIG1heWJlX3NwYWNlIG1lZGlhX2xpc3QgYXRfcnVsZV9oZWFkZXJf
ZW5kICd7JyBhdF9ydWxlX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNh
dmVfYmxvY2sgeworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcikt
PmNyZWF0ZU1lZGlhUnVsZSgkNCwgJDkpOwogICAgIH0KLSAgICB8IE1FRElBX1NZTSBtYXliZV9z
cGFjZSAneycgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgewotICAgICAg
ICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZU1lZGlhUnVsZSgw
LCAkNSk7CisgICAgfCBiZWZvcmVfbWVkaWFfcnVsZSBNRURJQV9TWU0gYXRfbWVkaWFfaGVhZGVy
X2VuZF9tYXliZV9zcGFjZSAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2Nr
X3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUoMCwgJDcpOwogICAgIH0KLSAgICB8IE1FRElB
X1NZTSBtYXliZV9zcGFjZSAnOycgeworICAgIHwgYmVmb3JlX21lZGlhX3J1bGUgTUVESUFfU1lN
IGF0X21lZGlhX2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UgJzsnIHsKICAgICAgICAgJCQgPSAwOwor
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwog
ICAgIH0KICAgICA7CiAKQEAgLTYyMCwxMCArNjU3LDE2IEBAIG1lZGl1bToKICAgfQogICA7CiAK
K2JlZm9yZV9rZXlmcmFtZXNfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NSdWxl
U291cmNlRGF0YTo6S0VZRlJBTUVTX1JVTEUpOworICAgIH0KKyAgOworCiBrZXlmcmFtZXM6Ci0g
ICAgV0VCS0lUX0tFWUZSQU1FU19TWU0gbWF5YmVfc3BhY2Uga2V5ZnJhbWVfbmFtZSBtYXliZV9z
cGFjZSAneycgbWF5YmVfc3BhY2Uga2V5ZnJhbWVzX3J1bGUgJ30nIHsKLSAgICAgICAgJCQgPSAk
NzsKLSAgICAgICAgJDctPnNldE5hbWUoJDMpOworICAgIGJlZm9yZV9rZXlmcmFtZXNfcnVsZSBX
RUJLSVRfS0VZRlJBTUVTX1NZTSBtYXliZV9zcGFjZSBrZXlmcmFtZV9uYW1lIGF0X3J1bGVfaGVh
ZGVyX2VuZCBtYXliZV9zcGFjZSAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGtl
eWZyYW1lc19ydWxlICd9JyB7CisgICAgICAgICQkID0gJDEwOworICAgICAgICAkMTAtPnNldE5h
bWUoJDQpOwogICAgIH0KICAgICA7CiAgIApAQCAtNjM4LDYgKzY4MSw5IEBAIGtleWZyYW1lc19y
dWxlOgogICAgICAgICAkJCA9ICQxOwogICAgICAgICBpZiAoJDIpCiAgICAgICAgICAgICAkJC0+
cGFyc2VyQXBwZW5kS2V5ZnJhbWUoJDIpOworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBpZiAocC0+aXNFeHRyYWN0aW5nU291
cmNlRGF0YSgpKQorICAgICAgICAgICAgcC0+dXBkYXRlVG9wUnVsZUJvZHlFbmQoKTsKICAgICB9
CiAgICAgOwogCkBAIC02NzUsMjMgKzcyMSwzMiBAQCBrZXk6CiAgICAgfQogICAgIDsKIAorYmVm
b3JlX3BhZ2VfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlciktPm1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0
YTo6UEFHRV9SVUxFKTsKKyAgICB9CisgIDsKKwogcGFnZToKLSAgICBQQUdFX1NZTSBtYXliZV9z
cGFjZSBwYWdlX3NlbGVjdG9yIG1heWJlX3NwYWNlCi0gICAgJ3snIG1heWJlX3NwYWNlIGRlY2xh
cmF0aW9uc19hbmRfbWFyZ2lucyBjbG9zaW5nX2JyYWNlIHsKKyAgICBiZWZvcmVfcGFnZV9ydWxl
IFBBR0VfU1lNIG1heWJlX3NwYWNlIHBhZ2Vfc2VsZWN0b3IgYXRfcnVsZV9oZWFkZXJfZW5kIG1h
eWJlX3NwYWNlCisgICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZV9iZWZvcmVf
ZGVjbGFyYXRpb24gZGVjbGFyYXRpb25zX2FuZF9tYXJnaW5zIGNsb3NpbmdfYnJhY2UgewogICAg
ICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwotICAg
ICAgICBpZiAoJDMpCi0gICAgICAgICAgICAkJCA9IHAtPmNyZWF0ZVBhZ2VSdWxlKHAtPnNpbmtG
bG9hdGluZ1NlbGVjdG9yKCQzKSk7CisgICAgICAgIGlmICgkNCkKKyAgICAgICAgICAgICQkID0g
cC0+Y3JlYXRlUGFnZVJ1bGUocC0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDQpKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAvLyBDbGVhciBwcm9wZXJ0aWVzIGluIHRoZSBpbnZhbGlkIEBw
YWdlIHJ1bGUuCiAgICAgICAgICAgICBwLT5jbGVhclByb3BlcnRpZXMoKTsKICAgICAgICAgICAg
IC8vIEFsc28gY2xlYXIgbWFyZ2luIGF0LXJ1bGVzIGhlcmUgb25jZSB3ZSBmdWxseSBpbXBsZW1l
bnQgbWFyZ2luIGF0LXJ1bGVzIHBhcnNpbmcuCiAgICAgICAgICAgICAkJCA9IDA7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAg
ICAgICB9CiAgICAgfQotICAgIHwgUEFHRV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CisgICAg
fCBiZWZvcmVfcGFnZV9ydWxlIFBBR0VfU1lNIGVycm9yIGludmFsaWRfYmxvY2sgeworICAgICAg
c3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAgICAgICQk
ID0gMDsKICAgICB9Ci0gICAgfCBQQUdFX1NZTSBlcnJvciAnOycgeworICAgIHwgYmVmb3JlX3Bh
Z2VfcnVsZSBQQUdFX1NZTSBlcnJvciAnOycgeworICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2Vy
Kj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAgICAgICQkID0gMDsKICAgICB9CiAgICAgOwpA
QCAtNzg3LDE2ICs4NDIsMjQgQEAgbWFyZ2luX3N5bSA6CiAgICAgfQogICAgIDsKIAorYmVmb3Jl
X2ZvbnRfZmFjZV9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTUGFyc2VyKj4ocGFyc2VyKS0+bWFya0F0UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VE
YXRhOjpGT05UX0ZBQ0VfUlVMRSk7CisgICAgfQorICA7CisKIGZvbnRfZmFjZToKLSAgICBGT05U
X0ZBQ0VfU1lNIG1heWJlX3NwYWNlCi0gICAgJ3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9uX2xp
c3QgJ30nICBtYXliZV9zcGFjZSB7CisgICAgYmVmb3JlX2ZvbnRfZmFjZV9ydWxlIEZPTlRfRkFD
RV9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kIG1heWJlX3NwYWNlCisgICAgJ3snIGF0X3J1bGVfYm9k
eV9zdGFydCBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCAn
fScgIG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihw
YXJzZXIpLT5jcmVhdGVGb250RmFjZVJ1bGUoKTsKICAgICB9Ci0gICAgfCBGT05UX0ZBQ0VfU1lN
IGVycm9yIGludmFsaWRfYmxvY2sgeworICAgIHwgYmVmb3JlX2ZvbnRfZmFjZV9ydWxlIEZPTlRf
RkFDRV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CiAgICAgICAkJCA9IDA7CisgICAgICBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KLSAgICB8
IEZPTlRfRkFDRV9TWU0gZXJyb3IgJzsnIHsKKyAgICB8IGJlZm9yZV9mb250X2ZhY2VfcnVsZSBG
T05UX0ZBQ0VfU1lNIGVycm9yICc7JyB7CiAgICAgICAkJCA9IDA7CisgICAgICBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgIH0KIDsKIApAQCAtODM4
LDI3ICs5MDEsMjQgQEAgdW5hcnlfb3BlcmF0b3I6CiAKIG1heWJlX3NwYWNlX2JlZm9yZV9kZWNs
YXJhdGlvbjoKICAgICBtYXliZV9zcGFjZSB7Ci0gICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7Ci0gICAgICAgIHAtPm1hcmtQcm9wZXJ0eVN0YXJ0
KCk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtQcm9wZXJ0
eVN0YXJ0KCk7CiAgICAgfQogICA7CiAKIGJlZm9yZV9zZWxlY3Rvcl9saXN0OgogICAgIC8qIGVt
cHR5ICovIHsKLSAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKTsKLSAgICAgICAgcC0+bWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7CisgICAgICAgIHN0
YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtTdHlsZVJ1bGVIZWFkZXJTdGFydCgp
OwogICAgIH0KICAgOwogCi1iZWZvcmVfcnVsZV9vcGVuaW5nX2JyYWNlOgorYXRfcnVsZV9oZWFk
ZXJfZW5kOgogICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGlj
X2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAgICAgcC0+bWFya1NlbGVjdG9yTGlzdEVu
ZCgpOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrUnVsZUhl
YWRlckVuZCgpOwogICAgIH0KICAgOwogCiBydWxlc2V0OgotICAgIGJlZm9yZV9zZWxlY3Rvcl9s
aXN0IHNlbGVjdG9yX2xpc3QgYmVmb3JlX3J1bGVfb3BlbmluZ19icmFjZSAneycgbWF5YmVfc3Bh
Y2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7Cisg
ICAgYmVmb3JlX3NlbGVjdG9yX2xpc3Qgc2VsZWN0b3JfbGlzdCBhdF9ydWxlX2hlYWRlcl9lbmQg
J3snIG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3Np
bmdfYnJhY2UgewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIq
PihwYXJzZXIpOwogICAgICAgICAkJCA9IHAtPmNyZWF0ZVN0eWxlUnVsZSgkMik7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAppbmRleCA2ZGIzMjBjMjcwZDhmOGFjZWU3ZGYz
M2QzYTE3YTNlM2MyNzY2Mzg2Li41NWJiYWE1ZmRhMjU2MDFhNzRlODUzNGFjZGVjOWY3NzJhMDcx
OGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBA
IHZvaWQgQ1NTTWVkaWFSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVNZWRpYSogcnVsZSkKIHsKICAg
ICBBU1NFUlQocnVsZSk7CiAgICAgbV9tZWRpYVJ1bGUgPSBydWxlOwotICAgIGlmIChtX21lZGlh
Q1NTT01XcmFwcGVyKQorICAgIGlmIChtX21lZGlhQ1NTT01XcmFwcGVyICYmIG1fbWVkaWFSdWxl
LT5tZWRpYVF1ZXJpZXMoKSkKICAgICAgICAgbV9tZWRpYUNTU09NV3JhcHBlci0+cmVhdHRhY2go
bV9tZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICht
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4
IDYzNjU4Y2JmZThhMmE2NjdhMmY1MDlkZWZhMTk5YmQ2ZTI2MmVlMjQuLjNlMzU2Yzc1YzNkMDUx
OWUzNmY2OTQ0NmJiZWNlYmFlYTBiMWY4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBA
IC0yNDgsOSArMjQ4LDggQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYgY29udGV4dCkKICAgICAsIG1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZShmYWxz
ZSkKICAgICAsIG1fZGVmYXVsdE5hbWVzcGFjZShzdGFyQXRvbSkKICAgICAsIG1fcGFyc2VkVGV4
dFByZWZpeExlbmd0aCgwKQotICAgICwgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24oZmFsc2Up
Ci0gICAgLCBtX3NlbGVjdG9yTGlzdFJhbmdlKDAsIDApCiAgICAgLCBtX3J1bGVCb2R5UmFuZ2Uo
MCwgMCkKKyAgICAsIG1faGVhZGVyUmFuZ2UoMCwgMCkKICAgICAsIG1fcHJvcGVydHlSYW5nZShV
SU5UX01BWCwgVUlOVF9NQVgpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KDApCiAgICAg
LCBtX3BhcnNpbmdNb2RlKE5vcm1hbE1vZGUpCkBAIC0zMTQsNyArMzEzLDYgQEAgdm9pZCBDU1NQ
YXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGNvbnN0IGNoYXIKICAgICBtX2RhdGFTdGFydFtsZW5ndGggLSAxXSA9IDA7CiAKICAgICBt
X2N1cnJlbnRDaGFyYWN0ZXIgPSBtX3Rva2VuU3RhcnQgPSBtX2RhdGFTdGFydC5nZXQoKTsKLSAg
ICByZXNldFJ1bGVCb2R5TWFya3MoKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFy
dExpbmVOdW1iZXIsIFJ1bGVTb3VyY2VEYXRhTGlzdCogcnVsZVNvdXJjZURhdGFSZXN1bHQpCkBA
IC0xMTQ4LDIwICsxMTQ2LDE3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzCiAgICAgbV9zZWxl
Y3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0gMDsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNl
RGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBQYXNzUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gcHJwU3R5bGVTb3VyY2VEYXRh
LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0
YSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCkKIHsKICAgICAvLyBMZW5n
dGggb2YgdGhlICJALXdlYmtpdC1kZWNsc3siIHByZWZpeC4KICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgcHJlZml4TGVuZ3RoID0gMTU7CiAKICAgICBzZXRTdHlsZVNoZWV0KGNvbnRleHRTdHls
ZVNoZWV0KTsKIAotICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHN0eWxlU291cmNlRGF0
YSA9IHBycFN0eWxlU291cmNlRGF0YTsKLSAgICBpZiAoc3R5bGVTb3VyY2VEYXRhKSB7CisgICAg
UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YVJlZiA9IHJ1bGVTb3VyY2VE
YXRhOworICAgIGlmIChydWxlU291cmNlRGF0YVJlZikgewogICAgICAgICBtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrID0gYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VEYXRhTGlzdCgpKTsKLSAgICAgICAg
UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBkYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0
ZSgpOwotICAgICAgICBkYXRhLT5zdHlsZVNvdXJjZURhdGEgPSBzdHlsZVNvdXJjZURhdGE7Ci0g
ICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChkYXRhKTsKLSAgICAgICAgbV9p
blN0eWxlUnVsZU9yRGVjbGFyYXRpb24gPSB0cnVlOworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLT5hcHBlbmQocnVsZVNvdXJjZURhdGFSZWYpOwogICAgIH0KIAogICAgIHNldHVwUGFy
c2VyKCJALXdlYmtpdC1kZWNsc3siLCBzdHJpbmcsICJ9ICIpOwpAQCAtMTE3NywyMCArMTE3Miwx
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiBk
ZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdAogICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsK
ICAgICB9CiAKLSAgICBpZiAoc3R5bGVTb3VyY2VEYXRhKSB7Ci0gICAgICAgIEFTU0VSVCghbV9j
dXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKLSAgICAgICAgQ1NTUnVsZVNvdXJjZURh
dGEqIHJ1bGVEYXRhID0gbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLmdldCgpOwotICAg
ICAgICBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCA9IDA7
Ci0gICAgICAgIHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCA9
IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBydWxl
RGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuc2l6ZSgpOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RGF0YSA9IHJ1
bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hdChpKTsKKyAgICBpZiAocnVs
ZVNvdXJjZURhdGFSZWYpIHsKKyAgICAgICAgcnVsZVNvdXJjZURhdGFSZWYtPnJ1bGVCb2R5UmFu
Z2Uuc3RhcnQgPSAwOworICAgICAgICBydWxlU291cmNlRGF0YVJlZi0+cnVsZUJvZHlSYW5nZS5l
bmQgPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0g
cnVsZVNvdXJjZURhdGFSZWYtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLnNpemUoKTsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9w
ZXJ0eURhdGEgPSBydWxlU291cmNlRGF0YVJlZi0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURh
dGEuYXQoaSk7CiAgICAgICAgICAgICBwcm9wZXJ0eURhdGEucmFuZ2Uuc3RhcnQgLT0gcHJlZml4
TGVuZ3RoOwogICAgICAgICAgICAgcHJvcGVydHlEYXRhLnJhbmdlLmVuZCAtPSBwcmVmaXhMZW5n
dGg7CiAgICAgICAgIH0KLSAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhydWxlRGF0
YSk7CiAKKyAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhydWxlU291cmNlRGF0YVJl
Zi5nZXQoKSk7CiAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2suY2xlYXIoKTsKLSAgICAg
ICAgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24gPSBmYWxzZTsKICAgICB9CiAKICAgICByZXR1
cm4gb2s7CkBAIC05Mjk0LDE3ICs5Mjg2LDM0IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6
Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHVybCwgTWVkaWFRdWVyCiAg
ICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IHJ1bGUgPSBTdHls
ZVJ1bGVJbXBvcnQ6OmNyZWF0ZSh1cmwsIG1lZGlhKTsKICAgICBTdHlsZVJ1bGVJbXBvcnQqIHJl
c3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkgewor
ICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7CisgICAg
ICAgIG1hcmtSdWxlQm9keUVuZCgpOworICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+
IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgIGFkZE5ld1J1bGVUb1Nv
dXJjZVRyZWUoY3VycmVudFJ1bGVEYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIHJlc2V0UnVsZUhl
YWRlclJhbmdlKCk7CisgICAgfQogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFz
ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6
OmNyZWF0ZU1lZGlhUnVsZShNZWRpYVF1ZXJ5U2V0KiBtZWRpYSwgUnVsZUxpc3QqIHJ1bGVzKQog
ewotICAgIGlmICghbWVkaWEgfHwgIXJ1bGVzKQotICAgICAgICByZXR1cm4gMDsKICAgICBtX2Fs
bG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPFN0eWxlUnVsZU1lZGlhPiBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZSht
ZWRpYSwgKnJ1bGVzKTsKKyAgICBSZWZQdHI8U3R5bGVSdWxlTWVkaWE+IHJ1bGU7CisgICAgaWYg
KHJ1bGVzKQorICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNyZWF0ZShtZWRpYSwgKnJ1
bGVzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUnVsZUxpc3QgZW1wdHlSdWxlczsKKyAgICAgICAg
cnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEsIGVtcHR5UnVsZXMpOworICAgIH0K
ICAgICBTdHlsZVJ1bGVNZWRpYSogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBpZiAoaXNFeHRy
YWN0aW5nU291cmNlRGF0YSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFT
dGFjay0+aXNFbXB0eSgpKTsKKyAgICAgICAgbWFya1J1bGVCb2R5RW5kKCk7CisgICAgICAgIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3VycmVudFJ1bGVEYXRhID0gcG9wUnVsZURhdGEoKTsK
KyAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgp
KTsKKyAgICB9CiAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC05MzIzLDkgKzkzMzIsMjcgQEAgdm9pZCBDU1NQYXJzZXI6
OmFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVs
ZSkKICAgICAvLyBQcmVjb25kaXRpb246IChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpLgogICAg
IGlmICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKICAgICAgICAgcmV0dXJuOworICAgIGlmICht
X2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpCisgICAgICAgIG1fcnVsZVNvdXJjZURh
dGFSZXN1bHQtPmFwcGVuZChydWxlKTsKKyAgICBlbHNlCisgICAgICAgIG1fY3VycmVudFJ1bGVE
YXRhU3RhY2stPmxhc3QoKS0+Y2hpbGRSdWxlcy5hcHBlbmQocnVsZSk7Cit9CiAKLSAgICAvLyBG
SVhNRTogVGhpcyB0ZW1wb3JhcmlseSBidWlsZHMgYSBmbGF0IHN0eWxlIHJ1bGUgZGF0YSBsaXN0
LCB0byBhdm9pZCB0aGUgY2xpZW50IGNvZGUgYnJlYWthZ2UuCi0gICAgbV9ydWxlU291cmNlRGF0
YVJlc3VsdC0+YXBwZW5kKHJ1bGUpOwordm9pZCBDU1NQYXJzZXI6OnVwZGF0ZVRvcFJ1bGVCb2R5
RW5kKCkKK3sKKyAgICAvLyBQcmVjb25kaXRpb246IChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkp
LgorICAgIGlmICghbV9ydWxlU291cmNlRGF0YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworICAg
IENTU1J1bGVTb3VyY2VEYXRhKiBkYXRhOworICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNr
LT5pc0VtcHR5KCkpCisgICAgICAgIGRhdGEgPSBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0LT5pc0Vt
cHR5KCkgPyAwIDogbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+bGFzdCgpLmdldCgpOworICAgIGVs
c2UKKyAgICAgICAgZGF0YSA9IG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+Y2hpbGRS
dWxlcy5pc0VtcHR5KCkgPyAwIDogbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5jaGls
ZFJ1bGVzLmxhc3QoKS5nZXQoKTsKKworICAgIEFTU0VSVChkYXRhKTsKKyAgICBpZiAoIWRhdGEp
CisgICAgICAgIHJldHVybjsKKyAgICBkYXRhLT5ydWxlQm9keVJhbmdlLmVuZCA9IG1fdG9rZW5T
dGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKCkKQEAgLTkzNDQsNiArOTM3MSwxMiBAQCBTdHls
ZVJ1bGVLZXlmcmFtZXMqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZSgpCiAgICAgbV9h
bGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwog
ICAgIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFtZXM+IHJ1bGUgPSBTdHlsZVJ1bGVLZXlmcmFtZXM6
OmNyZWF0ZSgpOwogICAgIFN0eWxlUnVsZUtleWZyYW1lcyogcnVsZVB0ciA9IHJ1bGUuZ2V0KCk7
CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkgeworICAgICAgICBBU1NFUlQoIW1f
Y3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSk7CisgICAgICAgIG1hcmtSdWxlQm9keUVu
ZCgpOworICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9
IHBvcFJ1bGVEYXRhKCk7CisgICAgICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoY3VycmVudFJ1
bGVEYXRhLnJlbGVhc2UoKSk7CisgICAgfQogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUu
cmVsZWFzZSgpKTsKICAgICByZXR1cm4gcnVsZVB0cjsKIH0KQEAgLTkzNjMsMTcgKzkzOTYsMTIg
QEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPE93blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2UKICAgICAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQo
cnVsZS5yZWxlYXNlKCkpOwogICAgICAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKSB7
CiAgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9
IHBvcFJ1bGVEYXRhKCk7Ci0gICAgICAgICAgICBjdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNl
RGF0YS0+c3R5bGVCb2R5UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2U7Ci0gICAgICAgICAgICBjdXJy
ZW50UnVsZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlID0gbV9zZWxlY3Rvckxpc3RSYW5nZTsKICAg
ICAgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoY3VycmVudFJ1bGVEYXRhLmdldCgp
KTsKICAgICAgICAgICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoY3VycmVudFJ1bGVEYXRhLnJl
bGVhc2UoKSk7Ci0gICAgICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IGZhbHNl
OwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsK
LSAgICAgICAgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpOwotICAgICAgICByZXNldFJ1bGVCb2R5
TWFya3MoKTsKLSAgICB9CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKKyAgICAg
ICAgcmVzZXRSdWxlSGVhZGVyUmFuZ2UoKTsKICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtOTM5OCw2ICs5NDI2LDEzIEBAIFN0eWxlUnVsZUJhc2UqIENT
U1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICBydWxlLT5zZXRQcm9wZXJ0aWVzKGNy
ZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgU3R5
bGVSdWxlRm9udEZhY2UqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgaWYgKGlzRXh0cmFjdGlu
Z1NvdXJjZURhdGEoKSkgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2st
PmlzRW1wdHkoKSk7CisgICAgICAgIG1hcmtSdWxlQm9keUVuZCgpOworICAgICAgICBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7CisgICAg
ICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoY3VycmVudFJ1bGVEYXRhLmdldCgpKTsKKyAg
ICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShjdXJyZW50UnVsZURhdGEucmVsZWFzZSgpKTsK
KyAgICB9CiAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkBAIC05NDc3LDYgKzk1MTIsMTMgQEAgU3R5bGVSdWxlQmFzZSogQ1NT
UGFyc2VyOjpjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdl
U2VsZWMKICAgICAgICAgcnVsZS0+cGFyc2VyQWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvclZl
Y3Rvcik7CiAgICAgICAgIHJ1bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNl
dCgpKTsKICAgICAgICAgcGFnZVJ1bGUgPSBydWxlLmdldCgpOworICAgICAgICBpZiAoaXNFeHRy
YWN0aW5nU291cmNlRGF0YSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVE
YXRhU3RhY2stPmlzRW1wdHkoKSk7CisgICAgICAgICAgICBtYXJrUnVsZUJvZHlFbmQoKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3VycmVudFJ1bGVEYXRhID0gcG9w
UnVsZURhdGEoKTsKKyAgICAgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoY3VycmVu
dFJ1bGVEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoY3Vy
cmVudFJ1bGVEYXRhLnJlbGVhc2UoKSk7CisgICAgICAgIH0KICAgICAgICAgbV9wYXJzZWRSdWxl
cy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgIH0KICAgICBjbGVhclByb3BlcnRpZXMoKTsK
QEAgLTk1MDAsNiArOTU0Miw4IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlUmVn
aW9uUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiByCiAKICAgICBTdHls
ZVJ1bGVSZWdpb24qIHJlc3VsdCA9IHJlZ2lvblJ1bGUuZ2V0KCk7CiAgICAgbV9wYXJzZWRSdWxl
cy5hcHBlbmQocmVnaW9uUnVsZS5yZWxlYXNlKCkpOworICAgIGlmIChpc0V4dHJhY3RpbmdTb3Vy
Y2VEYXRhKCkpCisgICAgICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoQ1NTUnVsZVNvdXJjZURh
dGE6OmNyZWF0ZVVua25vd24oKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtOTU4MSwx
MiArOTYyNSwxNCBAQCB2b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdE1lZGlhTGluZShNZWRpYVF1
ZXJ5U2V0KiBtZWRpYSkKIAogdm9pZCBDU1NQYXJzZXI6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5n
ZXMoQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhKQogeworICAgIGlmICghcnVsZURhdGEtPnN0
eWxlU291cmNlRGF0YSkKKyAgICAgICAgcmV0dXJuOwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNv
dXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9w
ZXJ0eURhdGE7CiAgICAgdW5zaWduZWQgc2l6ZSA9IHByb3BlcnR5RGF0YS5zaXplKCk7CiAgICAg
aWYgKCFzaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBzdHlsZVN0YXJ0ID0g
cnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQ7CisgICAgdW5z
aWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLT5ydWxlQm9keVJhbmdlLnN0YXJ0OwogICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbV9kYXRhU3RhcnQuZ2V0KCkgKyBtX3BhcnNlZFRleHRQ
cmVmaXhMZW5ndGg7CiAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKiBuZXh0RGF0YSA9ICYocHJv
cGVydHlEYXRhLmF0KDApKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CkBAIC05NjAwLDcgKzk2NDYsNyBAQCB2b2lkIENTU1BhcnNlcjo6Zml4VW5wYXJzZWRQcm9w
ZXJ0eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSogcnVsZURhdGEpCiAKICAgICAgICAgdW5zaWdu
ZWQgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQ7CiAgICAgICAgIGlmICghbmV4dERhdGEpCi0gICAg
ICAgICAgICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURh
dGEtPnN0eWxlQm9keVJhbmdlLmVuZCAtIDE7CisgICAgICAgICAgICBwcm9wZXJ0eUVuZEluU3R5
bGVTaGVldCA9IHJ1bGVEYXRhLT5ydWxlQm9keVJhbmdlLmVuZCAtIDE7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHRE
YXRhLT5yYW5nZS5zdGFydCAtIDE7CiAKQEAgLTk2MjQsMTcgKzk2NzAsMjcgQEAgdm9pZCBDU1NQ
YXJzZXI6OmZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVE
YXRhKQogICAgIH0KIH0KIAotdm9pZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RTdGFydCgp
Cit2b2lkIENTU1BhcnNlcjo6bWFya1N0eWxlUnVsZUhlYWRlclN0YXJ0KCkKIHsKICAgICBpZiAo
IWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fc2VsZWN0
b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAg
ICBtX2hlYWRlclJhbmdlLnN0YXJ0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7
CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+YXBwZW5kKENTU1J1bGVTb3VyY2VEYXRhOjpj
cmVhdGUoQ1NTUnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpKTsKIH0KIAotdm9pZCBDU1NQYXJz
ZXI6Om1hcmtTZWxlY3Rvckxpc3RFbmQoKQordm9pZCBDU1NQYXJzZXI6Om1hcmtBdFJ1bGVIZWFk
ZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6VHlwZSBydWxlVHlwZSkKIHsKICAgICBpZiAoIWlz
RXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKICAgICAgICAgcmV0dXJuOworICAgIG1faGVhZGVyUmFu
Z2Uuc3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKKyAgICBtX2N1cnJl
bnRSdWxlRGF0YVN0YWNrLT5hcHBlbmQoQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShydWxlVHlw
ZSkpOworfQorCit2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVIZWFkZXJFbmQoKQoreworICAgIGlm
ICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
KCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpOwogICAgIFVDaGFyKiBsaXN0RW5k
ID0gbV90b2tlblN0YXJ0OwogICAgIHdoaWxlIChsaXN0RW5kID4gbV9kYXRhU3RhcnQuZ2V0KCkg
KyAxKSB7CiAgICAgICAgIGlmIChpc0hUTUxTcGFjZSgqKGxpc3RFbmQgLSAxKSkpCkBAIC05NjQy
LDEwICs5Njk4LDggQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RFbmQoKQogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgbV9zZWxlY3Rvckxpc3RS
YW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhU3RhcnQuZ2V0KCk7Ci0gICAgUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiBkYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIGRh
dGEtPnN0eWxlU291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAg
bV9jdXJyZW50UnVsZURhdGFTdGFjay0+YXBwZW5kKGRhdGEpOworICAgIG1faGVhZGVyUmFuZ2Uu
ZW5kID0gbGlzdEVuZCAtIG1fZGF0YVN0YXJ0LmdldCgpOworICAgIG1fY3VycmVudFJ1bGVEYXRh
U3RhY2stPmxhc3QoKS0+cnVsZUhlYWRlclJhbmdlID0gbV9oZWFkZXJSYW5nZTsKIH0KIAogdm9p
ZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKQEAgLTk2NTUsOSArOTcwOSw4IEBAIHZv
aWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
bV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiAgICAgaWYgKCptX3Rva2VuU3RhcnQg
PT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcg
YnJhY2UuCi0gICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5zdGFydCkKLSAgICAgICAg
bV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gb2Zmc2V0OwotICAgIG1faW5TdHlsZVJ1bGVPckRlY2xh
cmF0aW9uID0gdHJ1ZTsKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1w
dHkoKSk7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxlQm9keVJhbmdl
LnN0YXJ0ID0gb2Zmc2V0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5kKCkK
QEAgLTk2NjUsMjAgKzk3MTgsMjUgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgp
CiAgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKLSAg
ICBpZiAob2Zmc2V0ID4gbV9ydWxlQm9keVJhbmdlLmVuZCkKLSAgICAgICAgbV9ydWxlQm9keVJh
bmdlLmVuZCA9IG9mZnNldDsKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlz
RW1wdHkoKSk7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxlQm9keVJh
bmdlLmVuZCA9IG9mZnNldDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eVN0YXJ0
KCkKIHsKLSAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uKQorICAgIGlmICghaXNF
eHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fY3VycmVu
dFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSB8fCAhbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFz
dCgpLT5zdHlsZVNvdXJjZURhdGEpCiAgICAgICAgIHJldHVybjsKKwogICAgIG1fcHJvcGVydHlS
YW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiB2b2lk
IENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBp
c1Byb3BlcnR5UGFyc2VkKQogewotICAgIGlmICghbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24p
CisgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAobV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpIHx8ICFtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrLT5sYXN0KCktPnN0eWxlU291cmNlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CkBA
IC05Njk5LDggKzk3NTcsOSBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wg
aXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQogICAgICAgICBTdHJpbmcg
bmFtZSA9IHByb3BlcnR5U3RyaW5nLmxlZnQoY29sb25JbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7
CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5U3RyaW5nLnN1YnN0cmluZyhjb2xvbklu
ZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAg
ICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMgcmVsYXRpdmUgdG8gdGhlIGRlY2xhcmF0aW9u
IHN0YXJ0IG9mZnNldC4KKyAgICAgICAgU291cmNlUmFuZ2UmIHRvcFJ1bGVCb2R5UmFuZ2UgPSBt
X2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVCb2R5UmFuZ2U7CiAgICAgICAgIG1f
Y3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURh
dGEuYXBwZW5kKAotICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKG5hbWUsIHZhbHVl
LCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5UGFyc2VkLCBTb3VyY2VSYW5nZShzdGFydCAt
IG1fcnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kIC0gbV9ydWxlQm9keVJhbmdlLnN0YXJ0KSkpOwor
ICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKG5hbWUsIHZhbHVlLCBpc0ltcG9ydGFu
dEZvdW5kLCBpc1Byb3BlcnR5UGFyc2VkLCBTb3VyY2VSYW5nZShzdGFydCAtIHRvcFJ1bGVCb2R5
UmFuZ2Uuc3RhcnQsIGVuZCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiAgICAgfQogICAg
IHJlc2V0UHJvcGVydHlSYW5nZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDYyNWUx
ZTA4MWM4N2UyMzM2YTQyODlkYzA4ZjEyN2M2NTAxMTA1NGIuLmU0MWYwMjQ4MDY0MGYyZThlODZk
ODkwODczOGYyNzE5M2Y4Yzk4ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTc4LDcgKzc4
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHBhcnNlU3lzdGVtQ29sb3IoUkdCQTMyJiBj
b2xvciwgY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NWYWx1ZUxpc3Q+IHBhcnNlRm9udEZhY2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAg
ICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0aXZlKGludCBp
ZGVudCwgQ1NTUGFyc2VyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oU3R5bGVQ
cm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRh
PiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CisgICAgYm9vbCBwYXJz
ZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5bGVTaGVl
dCk7CiAgICAgUGFzc093blB0cjxNZWRpYVF1ZXJ5PiBwYXJzZU1lZGlhUXVlcnkoY29uc3QgU3Ry
aW5nJik7CiAKICAgICB2b2lkIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+LCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKTsKQEAgLTMy
MSwyNyArMzIxLDI0IEBAIHB1YmxpYzoKIAogICAgIC8vIHRva2VuaXplciBtZXRob2RzIGFuZCBk
YXRhCiAgICAgc2l6ZV90IG1fcGFyc2VkVGV4dFByZWZpeExlbmd0aDsKLSAgICBib29sIG1faW5T
dHlsZVJ1bGVPckRlY2xhcmF0aW9uOwotICAgIFNvdXJjZVJhbmdlIG1fc2VsZWN0b3JMaXN0UmFu
Z2U7CiAgICAgU291cmNlUmFuZ2UgbV9ydWxlQm9keVJhbmdlOworICAgIFNvdXJjZVJhbmdlIG1f
aGVhZGVyUmFuZ2U7CiAgICAgU291cmNlUmFuZ2UgbV9wcm9wZXJ0eVJhbmdlOwogICAgIE93blB0
cjxSdWxlU291cmNlRGF0YUxpc3Q+IG1fY3VycmVudFJ1bGVEYXRhU3RhY2s7CiAgICAgUnVsZVNv
dXJjZURhdGFMaXN0KiBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0OwogCiAgICAgdm9pZCBmaXhVbnBh
cnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRhKik7CiAgICAgdm9pZCBtYXJrU3R5
bGVSdWxlSGVhZGVyU3RhcnQoKTsKKyAgICB2b2lkIG1hcmtBdFJ1bGVIZWFkZXJTdGFydChDU1NS
dWxlU291cmNlRGF0YTo6VHlwZSk7CiAgICAgdm9pZCBtYXJrUnVsZUhlYWRlckVuZCgpOwotCi0g
ICAgdm9pZCBtYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKLSAgICB2b2lkIG1hcmtTZWxlY3Rvckxp
c3RFbmQoKTsKICAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiAgICAgdm9pZCBtYXJrUnVs
ZUJvZHlFbmQoKTsKICAgICB2b2lkIG1hcmtQcm9wZXJ0eVN0YXJ0KCk7CiAgICAgdm9pZCBtYXJr
UHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQp
OwogICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNlVHJlZShQYXNzUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPik7CiAgICAgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcG9wUnVsZURhdGEo
KTsKLSAgICB2b2lkIHJlc2V0U2VsZWN0b3JMaXN0TWFya3MoKSB7IG1fc2VsZWN0b3JMaXN0UmFu
Z2Uuc3RhcnQgPSBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IDA7IH0KLSAgICB2b2lkIHJlc2V0
UnVsZUJvZHlNYXJrcygpIHsgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gbV9ydWxlQm9keVJhbmdl
LmVuZCA9IDA7IH0KKyAgICB2b2lkIHVwZGF0ZVRvcFJ1bGVCb2R5RW5kKCk7CisgICAgdm9pZCBy
ZXNldFJ1bGVIZWFkZXJSYW5nZSgpIHsgbV9oZWFkZXJSYW5nZS5zdGFydCA9IG1faGVhZGVyUmFu
Z2UuZW5kID0gMDsgfQogICAgIHZvaWQgcmVzZXRQcm9wZXJ0eVJhbmdlKCkgeyBtX3Byb3BlcnR5
UmFuZ2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0KICAgICBib29s
IGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiAhIW1fY3VycmVudFJ1bGVE
YXRhU3RhY2s7IH0KICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKaW5kZXggYmE2NzZlZTMzOGRjYzI5MzJhOGIxZTRk
M2RkNGE3MjI5ODkyMWYxYS4uNjllZTk0ZGEwNzU4N2RiZmI4YjEzOTZkMmZiMWVkOGYyNGIyZmMz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtNDAs
NyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFN0eWxlUnVsZTsKK2Ns
YXNzIFN0eWxlUnVsZUJhc2U7CiAKIHN0cnVjdCBTb3VyY2VSYW5nZSB7CiAgICAgU291cmNlUmFu
Z2UoKTsKQEAgLTc4LDggKzc4LDYgQEAgc3RydWN0IENTU1N0eWxlU291cmNlRGF0YSA6IHB1Ymxp
YyBSZWZDb3VudGVkPENTU1N0eWxlU291cmNlRGF0YT4gewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENTU1N0eWxlU291cmNlRGF0YSgpKTsKICAgICB9CiAKLSAgICAvLyBSYW5nZSBvZiB0
aGUgc3R5bGUgdGV4dCBpbiB0aGUgZW5jbG9zaW5nIHNvdXJjZS4KLSAgICBTb3VyY2VSYW5nZSBz
dHlsZUJvZHlSYW5nZTsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiBwcm9wZXJ0
eURhdGE7CiB9OwogCkBAIC04NywxNiArODUsNDggQEAgc3RydWN0IENTU1J1bGVTb3VyY2VEYXRh
OwogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+IFJ1bGVTb3VyY2VE
YXRhTGlzdDsKIAogc3RydWN0IENTU1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8
Q1NTUnVsZVNvdXJjZURhdGE+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gY3JlYXRlKCkKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBVTktOT1dOX1JVTEUsCisg
ICAgICAgIFNUWUxFX1JVTEUsCisgICAgICAgIENIQVJTRVRfUlVMRSwKKyAgICAgICAgSU1QT1JU
X1JVTEUsCisgICAgICAgIE1FRElBX1JVTEUsCisgICAgICAgIEZPTlRfRkFDRV9SVUxFLAorICAg
ICAgICBQQUdFX1JVTEUsCisgICAgICAgIEtFWUZSQU1FU19SVUxFCisgICAgfTsKKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0eXBlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0YSh0eXBlKSk7CiAgICAg
fQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZVVua25v
d24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0
YShVTktOT1dOX1JVTEUpKTsKKyAgICB9CisKKyAgICBDU1NSdWxlU291cmNlRGF0YShUeXBlIHR5
cGUpCisgICAgICAgIDogdHlwZSh0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gU1RZ
TEVfUlVMRSB8fCB0eXBlID09IEZPTlRfRkFDRV9SVUxFIHx8IHR5cGUgPT0gUEFHRV9SVUxFKQor
ICAgICAgICAgICAgc3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUo
KTsKKyAgICB9CisKKyAgICBUeXBlIHR5cGU7CisKICAgICAvLyBSYW5nZSBvZiB0aGUgc2VsZWN0
b3IgbGlzdCBpbiB0aGUgZW5jbG9zaW5nIHNvdXJjZS4KLSAgICBTb3VyY2VSYW5nZSBzZWxlY3Rv
ckxpc3RSYW5nZTsKKyAgICBTb3VyY2VSYW5nZSBydWxlSGVhZGVyUmFuZ2U7CisKKyAgICAvLyBS
YW5nZSBvZiB0aGUgcnVsZSBib2R5IChlLmcuIHN0eWxlIHRleHQgZm9yIHN0eWxlIHJ1bGVzKSBp
biB0aGUgZW5jbG9zaW5nIHNvdXJjZS4KKyAgICBTb3VyY2VSYW5nZSBydWxlQm9keVJhbmdlOwor
CisgICAgLy8gT25seSBmb3IgQ1NTU3R5bGVSdWxlcywgQ1NTRm9udEZhY2VSdWxlcywgYW5kIENT
U1BhZ2VSdWxlcy4KICAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURh
dGE7CisKKyAgICAvLyBPbmx5IGZvciBDU1NNZWRpYVJ1bGVzLgorICAgIFJ1bGVTb3VyY2VEYXRh
TGlzdCBjaGlsZFJ1bGVzOwogfTsKLXR5cGVkZWYgSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+ID4gU3R5bGVSdWxlUmFuZ2VNYXA7CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCmluZGV4IGE2ZmYwZGJmOGMyYWVjYWE1YTBlOTA0NDRiNzc4N2Y4YmUzNzk2NGQu
LjNjZDkxNTBmNjMwOWJhMGM5YThiODk2ZjMyODg0Yzk3ZGYyNzgzNjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTUwLDYgKzUw
LDcgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKICNp
bmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5o
IgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKQEAgLTYxLDYgKzYyLDcgQEAK
IAogdXNpbmcgV2ViQ29yZTo6VHlwZUJ1aWxkZXI6OkFycmF5OwogdXNpbmcgV2ViQ29yZTo6UnVs
ZVNvdXJjZURhdGFMaXN0OwordXNpbmcgV2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE7CiAKIGNs
YXNzIFBhcnNlZFN0eWxlU2hlZXQgewogcHVibGljOgpAQCAtNzMsNyArNzUsNyBAQCBwdWJsaWM6
CiAgICAgUnVsZVNvdXJjZURhdGFMaXN0KiBzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2VEYXRhLmdldCgpOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVs
ZVNvdXJjZURhdGFMaXN0Pik7CiAgICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VEYXRhOyB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRh
PiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkKSBj
b25zdDsKIAogcHJpdmF0ZToKIApAQCAtOTcsMTIgKzk5LDMzIEBAIHZvaWQgUGFyc2VkU3R5bGVT
aGVldDo6c2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgc2V0U291cmNlRGF0YShudWxs
cHRyKTsKIH0KIAorc3RhdGljIHZvaWQgZmxhdHRlblNvdXJjZURhdGEoUnVsZVNvdXJjZURhdGFM
aXN0KiBkYXRhTGlzdCwgUnVsZVNvdXJjZURhdGFMaXN0KiB0YXJnZXQpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkYXRhTGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiYgZGF0YSA9IGRhdGFMaXN0LT5hdChpKTsKKyAgICAgICAgaWYg
KGRhdGEtPnR5cGUgPT0gQ1NTUnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpCisgICAgICAgICAg
ICB0YXJnZXQtPmFwcGVuZChkYXRhKTsKKyAgICAgICAgZWxzZSBpZiAoZGF0YS0+dHlwZSA9PSBD
U1NSdWxlU291cmNlRGF0YTo6TUVESUFfUlVMRSkKKyAgICAgICAgICAgIGZsYXR0ZW5Tb3VyY2VE
YXRhKCZkYXRhLT5jaGlsZFJ1bGVzLCB0YXJnZXQpOworICAgIH0KK30KKwogdm9pZCBQYXJzZWRT
dHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBz
b3VyY2VEYXRhKQogewotICAgIG1fc291cmNlRGF0YSA9IHNvdXJjZURhdGE7CisgICAgaWYgKCFz
b3VyY2VEYXRhKSB7CisgICAgICAgIG1fc291cmNlRGF0YS5jbGVhcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9zb3VyY2VEYXRhID0gYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VE
YXRhTGlzdCgpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9u
IHRvIHJldGFpbiB0aGUgb3JpZ2luYWwgZmxhdCBzb3VyY2VEYXRhIHN0cnVjdHVyZQorICAgIC8v
IGNvbnRhaW5pbmcgb25seSBzdHlsZSBydWxlcywgZXZlbiB0aG91Z2ggQ1NTUGFyc2VyIG5vdyBw
cm92aWRlcyB0aGUgZnVsbCBydWxlIHNvdXJjZSBkYXRhIHRyZWUuCisgICAgLy8gTm9ybWFsbHks
IHdlIHNob3VsZCBqdXN0IGFzc2lnbiBtX3NvdXJjZURhdGEgPSBzb3VyY2VEYXRhOworICAgIGZs
YXR0ZW5Tb3VyY2VEYXRhKHNvdXJjZURhdGEuZ2V0KCksIG1fc291cmNlRGF0YS5nZXQoKSk7CiB9
CiAKLVJlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2VkU3R5bGVTaGVldDo6
cnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK1Bhc3NSZWZQdHI8V2ViQ29y
ZTo6Q1NTUnVsZVNvdXJjZURhdGE+IFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNTb3VyY2VEYXRhKCkgfHwgaW5k
ZXggPj0gbV9zb3VyY2VEYXRhLT5zaXplKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjcxLDcg
KzI5NCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
clN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uCiAKICAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGEgPSBtX3BhcmVudFN0eWxlU2hlZXQgPyBtX3BhcmVudFN0eWxl
U2hlZXQtPnJ1bGVTb3VyY2VEYXRhRm9yKG1fc3R5bGUuZ2V0KCkpIDogMDsKICAgICBpZiAoc291
cmNlRGF0YSkKLSAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0
KHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UpKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVC
b2R5UmFuZ2UpKTsKIAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQpAQCAtMzE0LDEw
ICszMzcsMTAgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVuc2lnbmVk
IGluZGV4LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VGV4dCwKIAogICAgIGlmIChwcm9wZXJ0eVRl
eHQuc3RyaXBXaGl0ZVNwYWNlKCkubGVuZ3RoKCkpIHsKICAgICAgICAgUmVmUHRyPFN0eWxlUHJv
cGVydHlTZXQ+IHRlbXBNdXRhYmxlU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsK
LSAgICAgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENTU1N0eWxl
U291cmNlRGF0YTo6Y3JlYXRlKCk7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoQ1NTUnVsZVNvdXJjZURhdGE6
OlNUWUxFX1JVTEUpOwogICAgICAgICBDU1NQYXJzZXIgcChDU1NTdHJpY3RNb2RlKTsKICAgICAg
ICAgcC5wYXJzZURlY2xhcmF0aW9uKHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCksIHByb3BlcnR5VGV4
dCArICIgIiArIGJvZ3VzUHJvcGVydHlOYW1lICsgIjogbm9uZSIsIHNvdXJjZURhdGEsIG1fc3R5
bGUtPnBhcmVudFN0eWxlU2hlZXQoKS0+Y29udGVudHMoKSk7Ci0gICAgICAgIFZlY3RvcjxDU1NQ
cm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5wcm9wZXJ0eURh
dGE7CisgICAgICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEg
PSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKICAgICAgICAgdW5z
aWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnR5RGF0YS5zaXplKCk7CiAKICAgICAgICAgLy8g
QXQgbGVhc3Qgb25lIHByb3BlcnR5ICsgdGhlIGJvZ3VzIHByb3BlcnR5IGFkZGVkIGp1c3QgYWJv
dmUgc2hvdWxkIGJlIHByZXNlbnQuCkBAIC0zNTUsNyArMzc4LDcgQEAgYm9vbCBJbnNwZWN0b3JT
dHlsZTo6c2V0UHJvcGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHByb3Bl
cnR5VGV4dCwKICAgICAgICAgKm9sZFRleHQgPSBhbGxQcm9wZXJ0aWVzLmF0KGluZGV4KS5yYXdU
ZXh0OwogICAgICAgICBlZGl0b3IucmVwbGFjZVByb3BlcnR5KGluZGV4LCBwcm9wZXJ0eVRleHQp
OwogICAgIH0gZWxzZQotICAgICAgICBlZGl0b3IuaW5zZXJ0UHJvcGVydHkoaW5kZXgsIHByb3Bl
cnR5VGV4dCwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5sZW5n
dGgoKSk7CisgICAgICAgIGVkaXRvci5pbnNlcnRQcm9wZXJ0eShpbmRleCwgcHJvcGVydHlUZXh0
LCBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBhcHBs
eVN0eWxlVGV4dChlZGl0b3Iuc3R5bGVUZXh0KCkpOwogfQpAQCAtNDEzLDcgKzQzNiw3IEBAIGJv
b2wgSW5zcGVjdG9yU3R5bGU6OnN0eWxlVGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICBp
ZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNvdXJjZVJhbmdlJiBi
b2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlOwor
ICAgIFNvdXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlOwog
ICAgICpyZXN1bHQgPSBzdHlsZVNoZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0YXJ0LCBi
b2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTc3MSw3ICs3OTQsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVTZWxlY3Rv
cihjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIGNvbnN0IFN0cmluZwogICAgIH0KIAogICAgIFN0
cmluZyBzaGVldFRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKLSAgICBzaGVldFRl
eHQucmVwbGFjZShzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCwgc291cmNlRGF0
YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kIC0gc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uu
c3RhcnQsIHNlbGVjdG9yKTsKKyAgICBzaGVldFRleHQucmVwbGFjZShzb3VyY2VEYXRhLT5ydWxl
SGVhZGVyUmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZS5sZW5ndGgoKSwg
c2VsZWN0b3IpOwogICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0VGV4dChzaGVldFRleHQpOwog
ICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtODMwLDcg
Kzg1Myw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZGVsZXRlUnVsZShjb25zdCBJbnNw
ZWN0b3JDU1NJZCYgaWQsIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgfQogCiAgICAgU3RyaW5nIHNo
ZWV0VGV4dCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpOwotICAgIHNoZWV0VGV4dC5yZW1v
dmUoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnN0eWxl
U291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kIC0gc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0
UmFuZ2Uuc3RhcnQgKyAxKTsKKyAgICBzaGVldFRleHQucmVtb3ZlKHNvdXJjZURhdGEtPnJ1bGVI
ZWFkZXJSYW5nZS5zdGFydCwgc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5lbmQgLSBzb3VyY2VE
YXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQgKyAxKTsKICAgICBtX3BhcnNlZFN0eWxlU2hlZXQt
PnNldFRleHQoc2hlZXRUZXh0KTsKICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTkxMSwxMiArOTM0LDggQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1MK
ICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3Vy
ZVBhcnNlZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFG
b3IocnVsZS0+c3R5bGUoKSk7Ci0gICAgaWYgKHNvdXJjZURhdGEpIHsKLSAgICAgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiBzZWxlY3RvclJhbmdlID0gVHlwZUJ1aWxk
ZXI6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0U3RhcnQoc291
cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQpCi0gICAgICAgICAgICAuc2V0RW5kKHNv
dXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U2Vs
ZWN0b3JSYW5nZShzZWxlY3RvclJhbmdlLnJlbGVhc2UoKSk7Ci0gICAgfQorICAgIGlmIChzb3Vy
Y2VEYXRhKQorICAgICAgICByZXN1bHQtPnNldFNlbGVjdG9yUmFuZ2UoYnVpbGRTb3VyY2VSYW5n
ZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2UpKTsKIAogICAgIFJlZlB0cjxBcnJh
eTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4gPiBtZWRpYUFycmF5ID0gQXJyYXk8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTTWVkaWE+OjpjcmVhdGUoKTsKIApAQCAtOTQ4LDcgKzk2Nyw3IEBAIFBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoCiAgICAgICAgIFN0cmluZyBzaGVldFRleHQ7CiAgICAgICAg
IGJvb2wgc3VjY2VzcyA9IGdldFRleHQoJnNoZWV0VGV4dCk7CiAgICAgICAgIGlmIChzdWNjZXNz
KSB7Ci0gICAgICAgICAgICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0
YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZTsKKyAgICAgICAgICAgIGNvbnN0IFNv
dXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlOwogICAgICAg
ICAgICAgcmVzdWx0LT5zZXRDc3NUZXh0KHNoZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0
YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KSk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMDk4LDkgKzExMTcsOSBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNv
dXJjZURhdGEoKQogCiAgICAgUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gbmV3U3R5bGVTaGVl
dCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFyc2VyIHAoQ1NTU3Ry
aWN0TW9kZSk7Ci0gICAgT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gcmFuZ2VzVmVjdG9yKGFk
b3B0UHRyKG5ldyBSdWxlU291cmNlRGF0YUxpc3QoKSkpOwotICAgIHAucGFyc2VTaGVldChuZXdT
dHlsZVNoZWV0LmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSwgMCwgcmFuZ2VzVmVj
dG9yLmdldCgpKTsKLSAgICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNldFNvdXJjZURhdGEocmFuZ2Vz
VmVjdG9yLnJlbGVhc2UoKSk7CisgICAgT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gcnVsZVNv
dXJjZURhdGFSZXN1bHQgPSBhZG9wdFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpOworICAg
IHAucGFyc2VTaGVldChuZXdTdHlsZVNoZWV0LmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRl
eHQoKSwgMCwgcnVsZVNvdXJjZURhdGFSZXN1bHQuZ2V0KCkpOworICAgIG1fcGFyc2VkU3R5bGVT
aGVldC0+c2V0U291cmNlRGF0YShydWxlU291cmNlRGF0YVJlc3VsdC5yZWxlYXNlKCkpOwogICAg
IHJldHVybiBtX3BhcnNlZFN0eWxlU2hlZXQtPmhhc1NvdXJjZURhdGEoKTsKIH0KIApAQCAtMTE0
NCw4ICsxMTYzLDggQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VGV4dFdp
dGhDaGFuZ2VkU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3QKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gcnVsZVNv
dXJjZURhdGFGb3Ioc3R5bGUpOwotICAgIHVuc2lnbmVkIGJvZHlTdGFydCA9IHNvdXJjZURhdGEt
PnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQ7Ci0gICAgdW5zaWduZWQgYm9k
eUVuZCA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kOwor
ICAgIHVuc2lnbmVkIGJvZHlTdGFydCA9IHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQ7
CisgICAgdW5zaWduZWQgYm9keUVuZCA9IHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5kOwog
ICAgIEFTU0VSVChib2R5U3RhcnQgPD0gYm9keUVuZCk7CiAKICAgICBTdHJpbmcgdGV4dCA9IG1f
cGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpOwpAQCAtMTMyNiwxMyArMTM0NSwxMSBAQCBib29sIElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkK
ICAgICBpZiAobV9ydWxlU291cmNlRGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBt
X3J1bGVTb3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIFJlZlB0
cjxDU1NTdHlsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNy
ZWF0ZSgpOwotICAgIGJvb2wgc3VjY2VzcyA9IGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKCZzb3Vy
Y2VEYXRhKTsKKyAgICBtX3J1bGVTb3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0
ZShDU1NSdWxlU291cmNlRGF0YTo6U1RZTEVfUlVMRSk7CisgICAgYm9vbCBzdWNjZXNzID0gZ2V0
U3R5bGVBdHRyaWJ1dGVSYW5nZXMobV9ydWxlU291cmNlRGF0YS5nZXQoKSk7CiAgICAgaWYgKCFz
dWNjZXNzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3J1bGVTb3VyY2VEYXRhLT5z
dHlsZVNvdXJjZURhdGEgPSBzb3VyY2VEYXRhLnJlbGVhc2UoKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMTM1MiwyMCArMTM2OSwyMCBAQCBjb25zdCBTdHJpbmcmIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZTo6ZWxlbWVudFN0eWxlVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJzdHlsZSIpLnN0cmluZygpOwogfQogCi1ib29sIElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMo
UmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhDU1NSdWxl
U291cmNlRGF0YSogcmVzdWx0KSBjb25zdAogewogICAgIGlmICghbV9lbGVtZW50LT5pc1N0eWxl
ZEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fc3R5bGVUZXh0
LmlzRW1wdHkoKSkgewotICAgICAgICAoKnJlc3VsdCktPnN0eWxlQm9keVJhbmdlLnN0YXJ0ID0g
MDsKLSAgICAgICAgKCpyZXN1bHQpLT5zdHlsZUJvZHlSYW5nZS5lbmQgPSAwOworICAgICAgICBy
ZXN1bHQtPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAgICAgICByZXN1bHQtPnJ1bGVCb2R5
UmFuZ2UuZW5kID0gMDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgUmVmUHRy
PFN0eWxlUHJvcGVydHlTZXQ+IHRlbXBEZWNsYXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6OmNy
ZWF0ZSgpOwogICAgIENTU1BhcnNlciBwKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgcC5w
YXJzZURlY2xhcmF0aW9uKHRlbXBEZWNsYXJhdGlvbi5nZXQoKSwgbV9zdHlsZVRleHQsICpyZXN1
bHQsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmNvbnRlbnRzKCkpOwor
ICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5bGVUZXh0
LCByZXN1bHQsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmNvbnRlbnRz
KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA1NTU1NmFiZGNiMWU3OTkwNzhlOWNkNzI2MWVj
YWIwZjFiMWEyNzhiLi4wYWY5ZjNjNWExYjgyMzJhMTg3MjA2YTQyY2FkYTEyYTdmNzBiZDI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAg
LTI3Miw3ICsyNzIsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIENTU1N0eWxlRGVjbGFy
YXRpb24qIGlubGluZVN0eWxlKCkgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiBlbGVtZW50U3R5
bGVUZXh0KCkgY29uc3Q7Ci0gICAgYm9vbCBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhSZWZQdHI8
Q1NTU3R5bGVTb3VyY2VEYXRhPiogcmVzdWx0KSBjb25zdDsKKyAgICBib29sIGdldFN0eWxlQXR0
cmlidXRlUmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRhKiByZXN1bHQpIGNvbnN0OwogCiAgICAgUmVm
UHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1f
cnVsZVNvdXJjZURhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149301</attachid>
            <date>2012-06-25 09:05:55 -0700</date>
            <delta_ts>2012-06-29 04:08:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88420-20120625200554.patch</filename>
            <type>text/plain</type>
            <size>41149</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBjMTUwZjY2NDg0ZGQw
ZWQzZjg4YThhNzNjOTQyZDYwNWUwZWE3ZC4uOGExYmYzNjk4ZTg1NzY1NjczZWMxNTM0M2U2OTNm
Y2U1NjkxMjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDczIEBACiAyMDEyLTA2LTI1ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUHJvdmlkZSBzb3VyY2UgZGF0YSBmb3IgYWxsIGtub3duIHJ1bGUgdHlwZXMgaW4gQ1NT
UGFyc2VyLCBleGNlcHQgImtleWZyYW1lIiBhbmQgInJlZ2lvbiIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGVyZSBpcyBu
byBjbGllbnQtdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuIEV4aXN0aW5nIEluc3BlY3RvciB0ZXN0
cyB3aWxsIGJlIG1vZGlmaWVkCisgICAgICAgIHRvIHRlc3QgdGhlIG5ldyBkYXRhIHByb3ZpZGVk
LCBhbG9uZyB3aXRoIHRoZSBuZWNlc3NhcnkgSW5zcGVjdG9yIHBsdW1iaW5nLgorCisgICAgICAg
ICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gpOiBDaGVjayBmb3IgbWVkaWFR
dWVyaWVzKCkgdmFsaWRpdHkgYmVmb3JlIHJlYXR0YWNoaW5nLgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOiBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgYmVsb3csIHRoZSBtZXRob2Qg
Y2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgZXh0ZW5zaW9uIG9mIHRoZQorICAgICAgICBzb3Vy
Y2UtYmFzZWQgQ1NTIG1vZGVsIHByb3ZpZGVkIGJ5IHRoZSBwYXJzZXIuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OkNTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNldHVwUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJh
dGlvbik6IEFjY2VwdCBhIENTU1J1bGVTb3VyY2VEYXRhIGZvciBmaWxsaW5nLCBzaW5jZSBpdCBu
b3cgY29udGFpbnMKKyAgICAgICAgdGhlIHJlbGF0ZWQgc3R5bGUgc291cmNlIHJhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKTogQ3JlYXRlIENTU01lZGlhUnVsZSBl
dmVuIGlmIG1lZGlhIGFuZCBydWxlcyBhcmUgZW1wdHksCisgICAgICAgIHdoaWNoIGlzIGNvbnNp
c3RlbnQgd2l0aCBNb3ppbGxhLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwcm9jZXNz
QW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6YWRkTmV3UnVsZVRvU291cmNlVHJlZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dXBkYXRlVG9wUnVsZUJvZHlFbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6Y3JlYXRlUGFnZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVS
ZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Zml4VW5wYXJzZWRQcm9w
ZXJ0eVJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxlSGVhZGVy
U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUnVsZUhlYWRlckVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjptYXJrUHJvcGVydHlFbmQpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAg
ICAgICAgKENTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnJlc2V0UHJv
cGVydHlSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6aXNFeHRyYWN0aW5nU291cmNlRGF0YSk6Cisg
ICAgICAgICogY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oOiBFeHRlbmQgdGhlIG1vZGVsIHRv
IGhhbmRsZSBtb3JlIHR5cGVzIG9mIHJ1bGVzIGFuZCB0aGVpciBjb250YWlubWVudHMuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpjcmVh
dGUpOgorICAgICAgICAoQ1NTUnVsZVNvdXJjZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UnVsZVNvdXJjZURhdGE6OmNyZWF0ZVVua25vd24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVs
ZVNvdXJjZURhdGE6OkNTU1J1bGVTb3VyY2VEYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5jcHA6IEZvbGxvdyB0aGUgQ1NTUGFyc2VyIEFQSSBjaGFuZ2VzIGJ1
dCByZXRhaW4gdGhlIGZsYXQgc3RvcmVkIENTUyBydWxlcyBzdHJ1Y3R1cmUuCisgICAgICAgIChQ
YXJzZWRTdHlsZVNoZWV0Ojpzb3VyY2VEYXRhKToKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQp
OgorICAgICAgICAoZmxhdHRlblNvdXJjZURhdGEpOiBGbGF0dGVuIHRoZSBydWxlIHRyZWUgdG8g
cmV0YWluIHRoZSBleGlzdGluZyBydWxlLWhhbmRsaW5nIGNvZGUgaW50YWN0LgorICAgICAgICAo
UGFyc2VkU3R5bGVTaGVldDo6c2V0U291cmNlRGF0YSk6CisgICAgICAgIChQYXJzZWRTdHlsZVNo
ZWV0OjpydWxlU291cmNlRGF0YUF0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
OjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnN0
eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxl
U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZGVsZXRl
UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVj
dEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojpl
bnN1cmVTb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6
OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmdldFN0
eWxlQXR0cmlidXRlUmFuZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oOgorCisyMDEyLTA2LTI1ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1
bS5vcmc+CisKICAgICAgICAgV2ViIEluc3BlY3RvcjogW1N0eWxlc10gQ2Fubm90IHZpc3VhbGx5
IHNldCBjYXJldCBiZWZvcmUgdGhlIGZpcnN0IENTUyBwcm9wZXJ0eSBuYW1lIGNoYXJhY3Rlcgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk4NjkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggN2FkY2MzN2JjYzNlYTA5MjJjZWJiYWVjOWE0MWFj
YTAyNTMwODllNC4uMzczY2E0YjcxZjIxNzUxNjJlNzFmM2EzYjcwNzM4M2U0ZTZjZTg5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC0zODcsNiArMzg3LDggQEAgY2hhcnNldDoKICAgICAg
Q1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKICAgICAgaWYg
KHAtPm1fc3R5bGVTaGVldCkKICAgICAgICAgIHAtPm1fc3R5bGVTaGVldC0+cGFyc2VyU2V0RW5j
b2RpbmdGcm9tQ2hhcnNldFJ1bGUoJDMpOworICAgICBpZiAocC0+aXNFeHRyYWN0aW5nU291cmNl
RGF0YSgpICYmIHAtPm1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSAmJiBwLT5tX3J1
bGVTb3VyY2VEYXRhUmVzdWx0KQorICAgICAgICAgcC0+YWRkTmV3UnVsZVRvU291cmNlVHJlZShD
U1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlVW5rbm93bigpKTsKICAgICAgJCQgPSAwOwogICB9CiAg
IHwgQ0hBUlNFVF9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CkBAIC00NjIsMjIgKzQ2NCwzOCBA
QCBibG9ja19ydWxlOgogICB8IG1lZGlhCiAgIDsKIAorYXRfaW1wb3J0X2hlYWRlcl9lbmRfbWF5
YmVfc3BhY2U6CisgICAgbWF5YmVfc3BhY2UgeworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBwLT5tYXJrUnVsZUhlYWRlckVu
ZCgpOworICAgICAgICBwLT5tYXJrUnVsZUJvZHlTdGFydCgpOworICAgIH0KKyAgICA7CisKK2Jl
Zm9yZV9pbXBvcnRfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIHN0YXRpY19jYXN0
PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURh
dGE6OklNUE9SVF9SVUxFKTsKKyAgICB9CisgIDsKIAogaW1wb3J0OgotICAgIElNUE9SVF9TWU0g
bWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0ICc7
JyB7Ci0gICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRl
SW1wb3J0UnVsZSgkMywgJDUpOworICAgIGJlZm9yZV9pbXBvcnRfcnVsZSBJTVBPUlRfU1lNIGF0
X2ltcG9ydF9oZWFkZXJfZW5kX21heWJlX3NwYWNlIHN0cmluZ19vcl91cmkgbWF5YmVfc3BhY2Ug
bWF5YmVfbWVkaWFfbGlzdCAnOycgeworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNl
cio+KHBhcnNlciktPmNyZWF0ZUltcG9ydFJ1bGUoJDQsICQ2KTsKICAgICB9Ci0gIHwgSU1QT1JU
X1NZTSBtYXliZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX2xp
c3QgVE9LRU5fRU9GIHsKLSAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJz
ZXIpLT5jcmVhdGVJbXBvcnRSdWxlKCQzLCAkNSk7CisgIHwgYmVmb3JlX2ltcG9ydF9ydWxlIElN
UE9SVF9TWU0gYXRfaW1wb3J0X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBt
YXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0IFRPS0VOX0VPRiB7CisgICAgICAgICQkID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlSW1wb3J0UnVsZSgkNCwgJDYpOwog
ICAgIH0KLSAgfCBJTVBPUlRfU1lNIG1heWJlX3NwYWNlIHN0cmluZ19vcl91cmkgbWF5YmVfc3Bh
Y2UgbWF5YmVfbWVkaWFfbGlzdCBpbnZhbGlkX2Jsb2NrIHsKKyAgfCBiZWZvcmVfaW1wb3J0X3J1
bGUgSU1QT1JUX1NZTSBhdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSBzdHJpbmdfb3Jf
dXJpIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX2xpc3QgaW52YWxpZF9ibG9jayB7CiAgICAgICAg
ICQkID0gMDsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVs
ZURhdGEoKTsKICAgICB9Ci0gIHwgSU1QT1JUX1NZTSBlcnJvciAnOycgeworICB8IGJlZm9yZV9p
bXBvcnRfcnVsZSBJTVBPUlRfU1lNIGVycm9yICc7JyB7CiAgICAgICAgICQkID0gMDsKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAgICB9
Ci0gIHwgSU1QT1JUX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKKyAgfCBiZWZvcmVfaW1wb3J0
X3J1bGUgSU1QT1JUX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKICAgICAgICAgJCQgPSAwOwor
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwog
ICAgIH0KICAgOwogCkBAIC02MDIsMTUgKzYyMCwzNCBAQCBtZWRpYV9saXN0OgogICAgIH0KICAg
ICA7CiAKK2F0X3J1bGVfYm9keV9zdGFydDoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIHN0
YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtSdWxlQm9keVN0YXJ0KCk7CisgICAg
fQorICAgIDsKKworYmVmb3JlX21lZGlhX3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrUnVsZUhlYWRlclN0YXJ0KENT
U1J1bGVTb3VyY2VEYXRhOjpNRURJQV9SVUxFKTsKKyAgICB9CisgIDsKKworYXRfbWVkaWFfaGVh
ZGVyX2VuZF9tYXliZV9zcGFjZToKKyAgICBtYXliZV9zcGFjZSB7CisgICAgICAgIHN0YXRpY19j
YXN0PENTU1BhcnNlcio+KHBhcnNlciktPm1hcmtSdWxlSGVhZGVyRW5kKCk7CisgICAgfQorICAg
IDsKKwogbWVkaWE6Ci0gICAgTUVESUFfU1lNIG1heWJlX3NwYWNlIG1lZGlhX2xpc3QgJ3snIG1h
eWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKLSAgICAgICAgJCQgPSBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUoJDMsICQ2KTsKKyAg
ICBiZWZvcmVfbWVkaWFfcnVsZSBNRURJQV9TWU0gbWF5YmVfc3BhY2UgbWVkaWFfbGlzdCBhdF9y
dWxlX2hlYWRlcl9lbmQgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9ja19y
dWxlX2xpc3Qgc2F2ZV9ibG9jayB7CisgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2Vy
Kj4ocGFyc2VyKS0+Y3JlYXRlTWVkaWFSdWxlKCQ0LCAkOSk7CiAgICAgfQotICAgIHwgTUVESUFf
U1lNIG1heWJlX3NwYWNlICd7JyBtYXliZV9zcGFjZSBibG9ja19ydWxlX2xpc3Qgc2F2ZV9ibG9j
ayB7Ci0gICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRl
TWVkaWFSdWxlKDAsICQ1KTsKKyAgICB8IGJlZm9yZV9tZWRpYV9ydWxlIE1FRElBX1NZTSBhdF9t
ZWRpYV9oZWFkZXJfZW5kX21heWJlX3NwYWNlICd7JyBhdF9ydWxlX2JvZHlfc3RhcnQgbWF5YmVf
c3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgeworICAgICAgICAkJCA9IHN0YXRpY19j
YXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZU1lZGlhUnVsZSgwLCAkNyk7CiAgICAgfQot
ICAgIHwgTUVESUFfU1lNIG1heWJlX3NwYWNlICc7JyB7CisgICAgfCBiZWZvcmVfbWVkaWFfcnVs
ZSBNRURJQV9TWU0gYXRfbWVkaWFfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAnOycgewogICAgICAg
ICAkJCA9IDA7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1
bGVEYXRhKCk7CiAgICAgfQogICAgIDsKIApAQCAtNjIwLDEwICs2NTcsMTcgQEAgbWVkaXVtOgog
ICB9CiAgIDsKIAorYmVmb3JlX2tleWZyYW1lc19ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+bWFya1J1bGVIZWFkZXJTdGFy
dChDU1NSdWxlU291cmNlRGF0YTo6S0VZRlJBTUVTX1JVTEUpOworICAgIH0KKyAgOworCiBrZXlm
cmFtZXM6Ci0gICAgV0VCS0lUX0tFWUZSQU1FU19TWU0gbWF5YmVfc3BhY2Uga2V5ZnJhbWVfbmFt
ZSBtYXliZV9zcGFjZSAneycgbWF5YmVfc3BhY2Uga2V5ZnJhbWVzX3J1bGUgJ30nIHsKLSAgICAg
ICAgJCQgPSAkNzsKLSAgICAgICAgJDctPnNldE5hbWUoJDMpOworICAgIGJlZm9yZV9rZXlmcmFt
ZXNfcnVsZSBXRUJLSVRfS0VZRlJBTUVTX1NZTSBtYXliZV9zcGFjZSBrZXlmcmFtZV9uYW1lIGF0
X3J1bGVfaGVhZGVyX2VuZCBtYXliZV9zcGFjZSAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJl
X3NwYWNlIGtleWZyYW1lc19ydWxlICd9JyB7CisgICAgICAgICQkID0gJDEwOworICAgICAgICAk
MTAtPnNldE5hbWUoJDQpOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
LT51cGRhdGVUb3BSdWxlQm9keUVuZCgpOwogICAgIH0KICAgICA7CiAgIApAQCAtNjc1LDIzICs3
MTksMzIgQEAga2V5OgogICAgIH0KICAgICA7CiAKK2JlZm9yZV9wYWdlX3J1bGU6CisgICAgLyog
ZW1wdHkgKi8geworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJr
UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpQQUdFX1JVTEUpOworICAgIH0KKyAg
OworCiBwYWdlOgotICAgIFBBR0VfU1lNIG1heWJlX3NwYWNlIHBhZ2Vfc2VsZWN0b3IgbWF5YmVf
c3BhY2UKLSAgICAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25zX2FuZF9tYXJnaW5zIGNsb3Np
bmdfYnJhY2UgeworICAgIGJlZm9yZV9wYWdlX3J1bGUgUEFHRV9TWU0gbWF5YmVfc3BhY2UgcGFn
ZV9zZWxlY3RvciBhdF9ydWxlX2hlYWRlcl9lbmQgbWF5YmVfc3BhY2UKKyAgICAneycgYXRfcnVs
ZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbnNf
YW5kX21hcmdpbnMgY2xvc2luZ19icmFjZSB7CiAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7Ci0gICAgICAgIGlmICgkMykKLSAgICAgICAgICAg
ICQkID0gcC0+Y3JlYXRlUGFnZVJ1bGUocC0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDMpKTsKKyAg
ICAgICAgaWYgKCQ0KQorICAgICAgICAgICAgJCQgPSBwLT5jcmVhdGVQYWdlUnVsZShwLT5zaW5r
RmxvYXRpbmdTZWxlY3RvcigkNCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIENs
ZWFyIHByb3BlcnRpZXMgaW4gdGhlIGludmFsaWQgQHBhZ2UgcnVsZS4KICAgICAgICAgICAgIHAt
PmNsZWFyUHJvcGVydGllcygpOwogICAgICAgICAgICAgLy8gQWxzbyBjbGVhciBtYXJnaW4gYXQt
cnVsZXMgaGVyZSBvbmNlIHdlIGZ1bGx5IGltcGxlbWVudCBtYXJnaW4gYXQtcnVsZXMgcGFyc2lu
Zy4KICAgICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNl
cio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgfCBQQUdF
X1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKKyAgICB8IGJlZm9yZV9wYWdlX3J1bGUgUEFHRV9T
WU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CisgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihw
YXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgICAgJCQgPSAwOwogICAgIH0KLSAgICB8IFBBR0Vf
U1lNIGVycm9yICc7JyB7CisgICAgfCBiZWZvcmVfcGFnZV9ydWxlIFBBR0VfU1lNIGVycm9yICc7
JyB7CisgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgp
OwogICAgICAgJCQgPSAwOwogICAgIH0KICAgICA7CkBAIC03ODcsMTYgKzg0MCwyNCBAQCBtYXJn
aW5fc3ltIDoKICAgICB9CiAgICAgOwogCitiZWZvcmVfZm9udF9mYWNlX3J1bGU6CisgICAgLyog
ZW1wdHkgKi8geworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJr
UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpGT05UX0ZBQ0VfUlVMRSk7CisgICAg
fQorICA7CisKIGZvbnRfZmFjZToKLSAgICBGT05UX0ZBQ0VfU1lNIG1heWJlX3NwYWNlCi0gICAg
J3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9uX2xpc3QgJ30nICBtYXliZV9zcGFjZSB7CisgICAg
YmVmb3JlX2ZvbnRfZmFjZV9ydWxlIEZPTlRfRkFDRV9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kIG1h
eWJlX3NwYWNlCisgICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZV9iZWZvcmVf
ZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCAnfScgIG1heWJlX3NwYWNlIHsKICAgICAgICAg
JCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVGb250RmFjZVJ1bGUo
KTsKICAgICB9Ci0gICAgfCBGT05UX0ZBQ0VfU1lNIGVycm9yIGludmFsaWRfYmxvY2sgeworICAg
IHwgYmVmb3JlX2ZvbnRfZmFjZV9ydWxlIEZPTlRfRkFDRV9TWU0gZXJyb3IgaW52YWxpZF9ibG9j
ayB7CiAgICAgICAkJCA9IDA7CisgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
LT5wb3BSdWxlRGF0YSgpOwogICAgIH0KLSAgICB8IEZPTlRfRkFDRV9TWU0gZXJyb3IgJzsnIHsK
KyAgICB8IGJlZm9yZV9mb250X2ZhY2VfcnVsZSBGT05UX0ZBQ0VfU1lNIGVycm9yICc7JyB7CiAg
ICAgICAkJCA9IDA7CisgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BS
dWxlRGF0YSgpOwogICAgIH0KIDsKIApAQCAtODM4LDI3ICs4OTksMjQgQEAgdW5hcnlfb3BlcmF0
b3I6CiAKIG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbjoKICAgICBtYXliZV9zcGFjZSB7
Ci0gICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7
Ci0gICAgICAgIHAtPm1hcmtQcm9wZXJ0eVN0YXJ0KCk7CisgICAgICAgIHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlciktPm1hcmtQcm9wZXJ0eVN0YXJ0KCk7CiAgICAgfQogICA7CiAKIGJl
Zm9yZV9zZWxlY3Rvcl9saXN0OgogICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgQ1NTUGFyc2Vy
KiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAgICAgcC0+bWFya1Nl
bGVjdG9yTGlzdFN0YXJ0KCk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNl
ciktPm1hcmtSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpOwog
ICAgIH0KICAgOwogCi1iZWZvcmVfcnVsZV9vcGVuaW5nX2JyYWNlOgorYXRfcnVsZV9oZWFkZXJf
ZW5kOgogICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKLSAgICAgICAgcC0+bWFya1NlbGVjdG9yTGlzdEVuZCgp
OworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrUnVsZUhlYWRl
ckVuZCgpOwogICAgIH0KICAgOwogCiBydWxlc2V0OgotICAgIGJlZm9yZV9zZWxlY3Rvcl9saXN0
IHNlbGVjdG9yX2xpc3QgYmVmb3JlX3J1bGVfb3BlbmluZ19icmFjZSAneycgbWF5YmVfc3BhY2Vf
YmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7CisgICAg
YmVmb3JlX3NlbGVjdG9yX2xpc3Qgc2VsZWN0b3JfbGlzdCBhdF9ydWxlX2hlYWRlcl9lbmQgJ3sn
IG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3Npbmdf
YnJhY2UgewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihw
YXJzZXIpOwogICAgICAgICAkJCA9IHAtPmNyZWF0ZVN0eWxlUnVsZSgkMik7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAppbmRleCA2ZGIzMjBjMjcwZDhmOGFjZWU3ZGYzM2Qz
YTE3YTNlM2MyNzY2Mzg2Li41NWJiYWE1ZmRhMjU2MDFhNzRlODUzNGFjZGVjOWY3NzJhMDcxOGMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZv
aWQgQ1NTTWVkaWFSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVNZWRpYSogcnVsZSkKIHsKICAgICBB
U1NFUlQocnVsZSk7CiAgICAgbV9tZWRpYVJ1bGUgPSBydWxlOwotICAgIGlmIChtX21lZGlhQ1NT
T01XcmFwcGVyKQorICAgIGlmIChtX21lZGlhQ1NTT01XcmFwcGVyICYmIG1fbWVkaWFSdWxlLT5t
ZWRpYVF1ZXJpZXMoKSkKICAgICAgICAgbV9tZWRpYUNTU09NV3JhcHBlci0+cmVhdHRhY2gobV9t
ZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2No
aWxkUnVsZUNTU09NV3JhcHBlcnNbaV0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDYz
NjU4Y2JmZThhMmE2NjdhMmY1MDlkZWZhMTk5YmQ2ZTI2MmVlMjQuLjY5YTg2ODZiYzYyNzI2NGFh
Yjg3ZjliNjAxYTlmNmU5Y2M3MWI4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0y
NDgsOSArMjQ4LDYgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYgY29udGV4dCkKICAgICAsIG1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZShmYWxzZSkK
ICAgICAsIG1fZGVmYXVsdE5hbWVzcGFjZShzdGFyQXRvbSkKICAgICAsIG1fcGFyc2VkVGV4dFBy
ZWZpeExlbmd0aCgwKQotICAgICwgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24oZmFsc2UpCi0g
ICAgLCBtX3NlbGVjdG9yTGlzdFJhbmdlKDAsIDApCi0gICAgLCBtX3J1bGVCb2R5UmFuZ2UoMCwg
MCkKICAgICAsIG1fcHJvcGVydHlSYW5nZShVSU5UX01BWCwgVUlOVF9NQVgpCiAgICAgLCBtX3J1
bGVTb3VyY2VEYXRhUmVzdWx0KDApCiAgICAgLCBtX3BhcnNpbmdNb2RlKE5vcm1hbE1vZGUpCkBA
IC0zMTQsNyArMzExLDYgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIq
IHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIKICAgICBtX2RhdGFTdGFy
dFtsZW5ndGggLSAxXSA9IDA7CiAKICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBtX3Rva2VuU3Rh
cnQgPSBtX2RhdGFTdGFydC5nZXQoKTsKLSAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKIH0KIAog
dm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydExpbmVOdW1iZXIsIFJ1bGVTb3VyY2VEYXRhTGlz
dCogcnVsZVNvdXJjZURhdGFSZXN1bHQpCkBAIC0xMTQ4LDIwICsxMTQ0LDE3IEBAIHZvaWQgQ1NT
UGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NTZWxlY3Rvckxp
c3QmIHNlbGVjdG9yTGlzCiAgICAgbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0gMDsK
IH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCog
ZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBQYXNzUmVmUHRyPENTU1N0eWxlU291
cmNlRGF0YT4gcHJwU3R5bGVTb3VyY2VEYXRhLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRT
dHlsZVNoZWV0KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0
eVNldCogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBQYXNzUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiBwcnBSdWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250
ZXh0U3R5bGVTaGVldCkKIHsKICAgICAvLyBMZW5ndGggb2YgdGhlICJALXdlYmtpdC1kZWNsc3si
IHByZWZpeC4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJlZml4TGVuZ3RoID0gMTU7CiAK
ICAgICBzZXRTdHlsZVNoZWV0KGNvbnRleHRTdHlsZVNoZWV0KTsKIAotICAgIFJlZlB0cjxDU1NT
dHlsZVNvdXJjZURhdGE+IHN0eWxlU291cmNlRGF0YSA9IHBycFN0eWxlU291cmNlRGF0YTsKLSAg
ICBpZiAoc3R5bGVTb3VyY2VEYXRhKSB7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBy
dWxlU291cmNlRGF0YSA9IHBycFJ1bGVTb3VyY2VEYXRhOworICAgIGlmIChydWxlU291cmNlRGF0
YSkgewogICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrID0gYWRvcHRQdHIobmV3IFJ1bGVT
b3VyY2VEYXRhTGlzdCgpKTsKLSAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBkYXRh
ID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgICAgICBkYXRhLT5zdHlsZVNvdXJj
ZURhdGEgPSBzdHlsZVNvdXJjZURhdGE7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2st
PmFwcGVuZChkYXRhKTsKLSAgICAgICAgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24gPSB0cnVl
OworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5hcHBlbmQocnVsZVNvdXJjZURhdGEp
OwogICAgIH0KIAogICAgIHNldHVwUGFyc2VyKCJALXdlYmtpdC1kZWNsc3siLCBzdHJpbmcsICJ9
ICIpOwpAQCAtMTE3NywyMCArMTE3MCwxOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJh
dGlvbihTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdAogICAg
ICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICB9CiAKLSAgICBpZiAoc3R5bGVTb3VyY2VEYXRh
KSB7Ci0gICAgICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsK
LSAgICAgICAgQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhID0gbV9jdXJyZW50UnVsZURhdGFT
dGFjay0+bGFzdCgpLmdldCgpOwotICAgICAgICBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5z
dHlsZUJvZHlSYW5nZS5zdGFydCA9IDA7Ci0gICAgICAgIHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURh
dGEtPnN0eWxlQm9keVJhbmdlLmVuZCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSBydWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURh
dGEuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBDU1NQcm9wZXJ0eVNvdXJj
ZURhdGEmIHByb3BlcnR5RGF0YSA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5
RGF0YS5hdChpKTsKKyAgICBpZiAocnVsZVNvdXJjZURhdGEpIHsKKyAgICAgICAgQVNTRVJUKG1f
Y3VycmVudFJ1bGVEYXRhU3RhY2stPnNpemUoKSA9PSAxKTsKKyAgICAgICAgcnVsZVNvdXJjZURh
dGEtPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAgICAgICBydWxlU291cmNlRGF0YS0+cnVs
ZUJvZHlSYW5nZS5lbmQgPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBzaXplID0gcnVsZVNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRh
LnNpemUoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VE
YXRhJiBwcm9wZXJ0eURhdGEgPSBydWxlU291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9w
ZXJ0eURhdGEuYXQoaSk7CiAgICAgICAgICAgICBwcm9wZXJ0eURhdGEucmFuZ2Uuc3RhcnQgLT0g
cHJlZml4TGVuZ3RoOwogICAgICAgICAgICAgcHJvcGVydHlEYXRhLnJhbmdlLmVuZCAtPSBwcmVm
aXhMZW5ndGg7CiAgICAgICAgIH0KLSAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhy
dWxlRGF0YSk7CiAKKyAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhydWxlU291cmNl
RGF0YS5nZXQoKSk7CiAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2suY2xlYXIoKTsKLSAg
ICAgICAgbV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24gPSBmYWxzZTsKICAgICB9CiAKICAgICBy
ZXR1cm4gb2s7CkBAIC05Mjk1LDE3ICs5Mjg2LDIzIEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNl
cjo6Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHVybCwgTWVkaWFRdWVy
CiAgICAgUmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gcnVsZSA9IFN0eWxlUnVsZUltcG9ydDo6Y3Jl
YXRlKHVybCwgbWVkaWEpOwogICAgIFN0eWxlUnVsZUltcG9ydCogcmVzdWx0ID0gcnVsZS5nZXQo
KTsKICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcHJvY2Vz
c0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKE1lZGlhUXVl
cnlTZXQqIG1lZGlhLCBSdWxlTGlzdCogcnVsZXMpCiB7Ci0gICAgaWYgKCFtZWRpYSB8fCAhcnVs
ZXMpCi0gICAgICAgIHJldHVybiAwOwogICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dO
YW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBSZWZQdHI8U3R5bGVSdWxlTWVkaWE+
IHJ1bGUgPSBTdHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCAqcnVsZXMpOworICAgIFJlZlB0
cjxTdHlsZVJ1bGVNZWRpYT4gcnVsZTsKKyAgICBpZiAocnVsZXMpCisgICAgICAgIHJ1bGUgPSBT
dHlsZVJ1bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCAqcnVsZXMpOworICAgIGVsc2UgeworICAgICAg
ICBSdWxlTGlzdCBlbXB0eVJ1bGVzOworICAgICAgICBydWxlID0gU3R5bGVSdWxlTWVkaWE6OmNy
ZWF0ZShtZWRpYSwgZW1wdHlSdWxlcyk7CisgICAgfQogICAgIFN0eWxlUnVsZU1lZGlhKiByZXN1
bHQgPSBydWxlLmdldCgpOwogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgp
KTsKKyAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTMxOCwxNCArOTMxNSw0MSBAQCBDU1NQYXJzZXI6OlJ1
bGVMaXN0KiBDU1NQYXJzZXI6OmNyZWF0ZVJ1bGVMaXN0KCkKICAgICByZXR1cm4gbGlzdFB0cjsK
IH0KIAordm9pZCBDU1NQYXJzZXI6OnByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZO
ZWVkZWQoKQoreworICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgbWFya1J1bGVCb2R5RW5kKCk7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBydWxlID0gcG9wUnVsZURhdGEoKTsKKyAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2Vz
KHJ1bGUuZ2V0KCkpOworICAgIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUocnVsZS5yZWxlYXNlKCkp
OworfQorCiB2b2lkIENTU1BhcnNlcjo6YWRkTmV3UnVsZVRvU291cmNlVHJlZShQYXNzUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiBydWxlKQogewogICAgIC8vIFByZWNvbmRpdGlvbjogKGlzRXh0
cmFjdGluZ1NvdXJjZURhdGEoKSkuCiAgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQog
ICAgICAgICByZXR1cm47CisgICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHko
KSkKKyAgICAgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+YXBwZW5kKHJ1bGUpOworICAgIGVs
c2UKKyAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5jaGlsZFJ1bGVzLmFw
cGVuZChydWxlKTsKK30KKwordm9pZCBDU1NQYXJzZXI6OnVwZGF0ZVRvcFJ1bGVCb2R5RW5kKCkK
K3sKKyAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSB8fCAhbV9ydWxlU291cmNlRGF0
YVJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworICAgIENTU1J1bGVTb3VyY2VEYXRhKiBkYXRhOwor
ICAgIGlmIChtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpCisgICAgICAgIGRhdGEg
PSBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0LT5pc0VtcHR5KCkgPyAwIDogbV9ydWxlU291cmNlRGF0
YVJlc3VsdC0+bGFzdCgpLmdldCgpOworICAgIGVsc2UKKyAgICAgICAgZGF0YSA9IG1fY3VycmVu
dFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+Y2hpbGRSdWxlcy5pc0VtcHR5KCkgPyAwIDogbV9jdXJy
ZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5jaGlsZFJ1bGVzLmxhc3QoKS5nZXQoKTsKIAotICAg
IC8vIEZJWE1FOiBUaGlzIHRlbXBvcmFyaWx5IGJ1aWxkcyBhIGZsYXQgc3R5bGUgcnVsZSBkYXRh
IGxpc3QsIHRvIGF2b2lkIHRoZSBjbGllbnQgY29kZSBicmVha2FnZS4KLSAgICBtX3J1bGVTb3Vy
Y2VEYXRhUmVzdWx0LT5hcHBlbmQocnVsZSk7CisgICAgQVNTRVJUKGRhdGEpOworICAgIGlmICgh
ZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGRhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5kID0gbV90
b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IENTU1BhcnNlcjo6cG9wUnVsZURhdGEoKQpAQCAtOTM0NSwxMyArOTM2OSwxMyBA
QCBTdHlsZVJ1bGVLZXlmcmFtZXMqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZSgpCiAg
ICAgUmVmUHRyPFN0eWxlUnVsZUtleWZyYW1lcz4gcnVsZSA9IFN0eWxlUnVsZUtleWZyYW1lczo6
Y3JlYXRlKCk7CiAgICAgU3R5bGVSdWxlS2V5ZnJhbWVzKiBydWxlUHRyID0gcnVsZS5nZXQoKTsK
ICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcHJvY2Vzc0Fu
ZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwogICAgIHJldHVybiBydWxlUHRyOwog
fQogCiBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3du
UHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvcnMpCiB7CiAgICAgU3R5bGVSdWxlKiBy
ZXN1bHQgPSAwOwotICAgIG1hcmtSdWxlQm9keUVuZCgpOwogICAgIGlmIChzZWxlY3RvcnMpIHsK
ICAgICAgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9u
cyA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8U3R5bGVSdWxlPiBydWxlID0gU3R5bGVSdWxlOjpj
cmVhdGUobV9sYXN0U2VsZWN0b3JMaW5lTnVtYmVyKTsKQEAgLTkzNjEsMTggKzkzODUsNyBAQCBT
dHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3duUHRyPENT
U1BhcnNlclNlbGVjdG9yPiA+KiBzZQogICAgICAgICBydWxlLT5zZXRQcm9wZXJ0aWVzKGNyZWF0
ZVN0eWxlUHJvcGVydHlTZXQoKSk7CiAgICAgICAgIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CiAgICAg
ICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKLSAgICAgICAgaWYgKGlz
RXh0cmFjdGluZ1NvdXJjZURhdGEoKSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiBjdXJyZW50UnVsZURhdGEgPSBwb3BSdWxlRGF0YSgpOwotICAgICAgICAgICAgY3Vy
cmVudFJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlID0gbV9ydWxlQm9k
eVJhbmdlOwotICAgICAgICAgICAgY3VycmVudFJ1bGVEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZSA9
IG1fc2VsZWN0b3JMaXN0UmFuZ2U7Ci0gICAgICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFu
Z2VzKGN1cnJlbnRSdWxlRGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBhZGROZXdSdWxlVG9Tb3Vy
Y2VUcmVlKGN1cnJlbnRSdWxlRGF0YS5yZWxlYXNlKCkpOwotICAgICAgICAgICAgbV9pblN0eWxl
UnVsZU9yRGVjbGFyYXRpb24gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaXNF
eHRyYWN0aW5nU291cmNlRGF0YSgpKSB7Ci0gICAgICAgIHJlc2V0U2VsZWN0b3JMaXN0TWFya3Mo
KTsKLSAgICAgICAgcmVzZXRSdWxlQm9keU1hcmtzKCk7CisgICAgICAgIHByb2Nlc3NBbmRBZGRO
ZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKICAgICB9CiAgICAgY2xlYXJQcm9wZXJ0aWVz
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTkzOTksNiArOTQxMiw3IEBAIFN0eWxlUnVsZUJh
c2UqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICBjbGVhclByb3BlcnRpZXMo
KTsKICAgICBTdHlsZVJ1bGVGb250RmFjZSogcmVzdWx0ID0gcnVsZS5nZXQoKTsKICAgICBtX3Bh
cnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcHJvY2Vzc0FuZEFkZE5ld1J1
bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTk0
NzgsNiArOTQ5Miw3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUo
UGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjCiAgICAgICAgIHJ1bGUtPnNl
dFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgpKTsKICAgICAgICAgcGFnZVJ1bGUg
PSBydWxlLmdldCgpOwogICAgICAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2Uo
KSk7CisgICAgICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsK
ICAgICB9CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHBhZ2VSdWxlOwpAQCAt
OTUwMCw2ICs5NTE1LDggQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVSZWdpb25S
dWxlKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHIKIAogICAgIFN0eWxlUnVs
ZVJlZ2lvbiogcmVzdWx0ID0gcmVnaW9uUnVsZS5nZXQoKTsKICAgICBtX3BhcnNlZFJ1bGVzLmFw
cGVuZChyZWdpb25SdWxlLnJlbGVhc2UoKSk7CisgICAgaWYgKGlzRXh0cmFjdGluZ1NvdXJjZURh
dGEoKSkKKyAgICAgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShDU1NSdWxlU291cmNlRGF0YTo6
Y3JlYXRlVW5rbm93bigpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC05NTgxLDEyICs5
NTk4LDE0IEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhUXVlcnlT
ZXQqIG1lZGlhKQogCiB2b2lkIENTU1BhcnNlcjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhD
U1NSdWxlU291cmNlRGF0YSogcnVsZURhdGEpCiB7CisgICAgaWYgKCFydWxlRGF0YS0+c3R5bGVT
b3VyY2VEYXRhKQorICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNl
RGF0YT4mIHByb3BlcnR5RGF0YSA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5
RGF0YTsKICAgICB1bnNpZ25lZCBzaXplID0gcHJvcGVydHlEYXRhLnNpemUoKTsKICAgICBpZiAo
IXNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIHN0eWxlU3RhcnQgPSBydWxl
RGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydDsKKyAgICB1bnNpZ25l
ZCBzdHlsZVN0YXJ0ID0gcnVsZURhdGEtPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQ7CiAgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSBtX2RhdGFTdGFydC5nZXQoKSArIG1fcGFyc2VkVGV4dFByZWZp
eExlbmd0aDsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIG5leHREYXRhID0gJihwcm9wZXJ0
eURhdGEuYXQoMCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
QEAgLTk2MDAsNyArOTYxOSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpmaXhVbnBhcnNlZFByb3BlcnR5
UmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSkKIAogICAgICAgICB1bnNpZ25lZCBw
cm9wZXJ0eUVuZEluU3R5bGVTaGVldDsKICAgICAgICAgaWYgKCFuZXh0RGF0YSkKLSAgICAgICAg
ICAgIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+
c3R5bGVCb2R5UmFuZ2UuZW5kIC0gMTsKKyAgICAgICAgICAgIHByb3BlcnR5RW5kSW5TdHlsZVNo
ZWV0ID0gcnVsZURhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5kIC0gMTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBzdHlsZVN0YXJ0ICsgbmV4dERhdGEt
PnJhbmdlLnN0YXJ0IC0gMTsKIApAQCAtOTYyNCwxNyArOTY0MywyMCBAQCB2b2lkIENTU1BhcnNl
cjo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSogcnVsZURhdGEp
CiAgICAgfQogfQogCi12b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdFN0YXJ0KCkKK3Zv
aWQgQ1NTUGFyc2VyOjptYXJrUnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpUeXBl
IHJ1bGVUeXBlKQogewogICAgIGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgbV9zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAt
IG1fZGF0YVN0YXJ0LmdldCgpOworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gZGF0YSA9
IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUocnVsZVR5cGUpOworICAgIGRhdGEtPnJ1bGVIZWFk
ZXJSYW5nZS5zdGFydCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOworICAgIG1f
Y3VycmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChkYXRhLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQg
Q1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrUnVs
ZUhlYWRlckVuZCgpCiB7CiAgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCiAgICAg
ICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHko
KSk7CiAgICAgVUNoYXIqIGxpc3RFbmQgPSBtX3Rva2VuU3RhcnQ7CiAgICAgd2hpbGUgKGxpc3RF
bmQgPiBtX2RhdGFTdGFydC5nZXQoKSArIDEpIHsKICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKCoo
bGlzdEVuZCAtIDEpKSkKQEAgLTk2NDIsMTAgKzk2NjQsNyBAQCB2b2lkIENTU1BhcnNlcjo6bWFy
a1NlbGVjdG9yTGlzdEVuZCgpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RFbmQgLSBtX2RhdGFTdGFydC5n
ZXQoKTsKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGRhdGEgPSBDU1NSdWxlU291cmNl
RGF0YTo6Y3JlYXRlKCk7Ci0gICAgZGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3Vy
Y2VEYXRhOjpjcmVhdGUoKTsKLSAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5hcHBlbmQoZGF0
YSk7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxlSGVhZGVyUmFuZ2Uu
ZW5kID0gbGlzdEVuZCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6
bWFya1J1bGVCb2R5U3RhcnQoKQpAQCAtOTY1NSwzMCArOTY3NCwzMyBAQCB2b2lkIENTU1BhcnNl
cjo6bWFya1J1bGVCb2R5U3RhcnQoKQogICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFy
dCAtIG1fZGF0YVN0YXJ0LmdldCgpOwogICAgIGlmICgqbV90b2tlblN0YXJ0ID09ICd7JykKICAg
ICAgICAgKytvZmZzZXQ7IC8vIFNraXAgdGhlIHJ1bGUgYm9keSBvcGVuaW5nIGJyYWNlLgotICAg
IGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpCi0gICAgICAgIG1fcnVsZUJvZHlS
YW5nZS5zdGFydCA9IG9mZnNldDsKLSAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IHRy
dWU7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkpOworICAg
IG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUJvZHlSYW5nZS5zdGFydCA9IG9m
ZnNldDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7Ci0gICAgaWYg
KCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBQcmVj
b25kaXRpb246ICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQogICAgIHVuc2lnbmVkIG9mZnNl
dCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwotICAgIGlmIChvZmZzZXQgPiBt
X3J1bGVCb2R5UmFuZ2UuZW5kKQotICAgICAgICBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0
OworICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBt
X2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0
OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQogewotICAgIGlmICgh
bV9pblN0eWxlUnVsZU9yRGVjbGFyYXRpb24pCisgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VE
YXRhKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9jdXJyZW50UnVsZURhdGFTdGFjay0+
aXNFbXB0eSgpIHx8ICFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnN0eWxlU291cmNl
RGF0YSkKICAgICAgICAgcmV0dXJuOworCiAgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV90
b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJr
UHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQp
CiB7Ci0gICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKKyAgICBpZiAoIWlzRXh0
cmFjdGluZ1NvdXJjZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRS
dWxlRGF0YVN0YWNrLT5pc0VtcHR5KCkgfHwgIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3Qo
KS0+c3R5bGVTb3VyY2VEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKQEAgLTk2OTksOCArOTcyMSw5
IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5k
LCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiAgICAgICAgIFN0cmluZyBuYW1lID0gcHJvcGVydHlT
dHJpbmcubGVmdChjb2xvbkluZGV4KS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgU3RyaW5n
IHZhbHVlID0gcHJvcGVydHlTdHJpbmcuc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxLCBwcm9wZXJ0
eVN0cmluZy5sZW5ndGgoKSkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIC8vIFRoZSBwcm9w
ZXJ0eSByYW5nZSBpcyByZWxhdGl2ZSB0byB0aGUgZGVjbGFyYXRpb24gc3RhcnQgb2Zmc2V0Lgor
ICAgICAgICBTb3VyY2VSYW5nZSYgdG9wUnVsZUJvZHlSYW5nZSA9IG1fY3VycmVudFJ1bGVEYXRh
U3RhY2stPmxhc3QoKS0+cnVsZUJvZHlSYW5nZTsKICAgICAgICAgbV9jdXJyZW50UnVsZURhdGFT
dGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoCi0gICAg
ICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91
bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdl
LnN0YXJ0LCBlbmQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CisgICAgICAgICAgICBDU1NQ
cm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQsIGlzUHJvcGVy
dHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCwgZW5k
IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCkpKTsKICAgICB9CiAgICAgcmVzZXRQcm9wZXJ0eVJh
bmdlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggNjI1ZTFlMDgxYzg3ZTIzMzZhNDI4
OWRjMDhmMTI3YzY1MDExMDU0Yi4uNDcyMTQ4NDM1MjYyYjY5M2FhYzAzMjYzZmRiNTI0MmVmYWM3
MTFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgcGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJp
bmcmLCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFy
c2VGb250RmFjZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBhcnNlVmFsaWRQcmltaXRpdmUoaW50IGlkZW50LCBDU1NQYXJzZXJW
YWx1ZSopOwotICAgIGJvb2wgcGFyc2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiwgY29u
c3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+LCBTdHlsZVNoZWV0Q29u
dGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29sIHBhcnNlRGVjbGFyYXRpb24oU3R5
bGVQcm9wZXJ0eVNldCosIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURh
dGE+LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBQYXNzT3du
UHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmKTsKIAogICAgIHZv
aWQgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4sIGJvb2wg
aW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwpAQCAtMzIxLDI3ICszMjEsMjEgQEAg
cHVibGljOgogCiAgICAgLy8gdG9rZW5pemVyIG1ldGhvZHMgYW5kIGRhdGEKICAgICBzaXplX3Qg
bV9wYXJzZWRUZXh0UHJlZml4TGVuZ3RoOwotICAgIGJvb2wgbV9pblN0eWxlUnVsZU9yRGVjbGFy
YXRpb247Ci0gICAgU291cmNlUmFuZ2UgbV9zZWxlY3Rvckxpc3RSYW5nZTsKLSAgICBTb3VyY2VS
YW5nZSBtX3J1bGVCb2R5UmFuZ2U7CiAgICAgU291cmNlUmFuZ2UgbV9wcm9wZXJ0eVJhbmdlOwog
ICAgIE93blB0cjxSdWxlU291cmNlRGF0YUxpc3Q+IG1fY3VycmVudFJ1bGVEYXRhU3RhY2s7CiAg
ICAgUnVsZVNvdXJjZURhdGFMaXN0KiBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0OwogCiAgICAgdm9p
ZCBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRhKik7Ci0gICAgdm9p
ZCBtYXJrU3R5bGVSdWxlSGVhZGVyU3RhcnQoKTsKKyAgICB2b2lkIG1hcmtSdWxlSGVhZGVyU3Rh
cnQoQ1NTUnVsZVNvdXJjZURhdGE6OlR5cGUpOwogICAgIHZvaWQgbWFya1J1bGVIZWFkZXJFbmQo
KTsKLQotICAgIHZvaWQgbWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7Ci0gICAgdm9pZCBtYXJrU2Vs
ZWN0b3JMaXN0RW5kKCk7CiAgICAgdm9pZCBtYXJrUnVsZUJvZHlTdGFydCgpOwogICAgIHZvaWQg
bWFya1J1bGVCb2R5RW5kKCk7CiAgICAgdm9pZCBtYXJrUHJvcGVydHlTdGFydCgpOwogICAgIHZv
aWQgbWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5
UGFyc2VkKTsKKyAgICB2b2lkIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVk
ZWQoKTsKICAgICB2b2lkIGFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxl
U291cmNlRGF0YT4pOwogICAgIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHBvcFJ1bGVE
YXRhKCk7Ci0gICAgdm9pZCByZXNldFNlbGVjdG9yTGlzdE1hcmtzKCkgeyBtX3NlbGVjdG9yTGlz
dFJhbmdlLnN0YXJ0ID0gbV9zZWxlY3Rvckxpc3RSYW5nZS5lbmQgPSAwOyB9Ci0gICAgdm9pZCBy
ZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlSYW5nZS5zdGFydCA9IG1fcnVsZUJvZHlS
YW5nZS5lbmQgPSAwOyB9CisgICAgdm9pZCB1cGRhdGVUb3BSdWxlQm9keUVuZCgpOwogICAgIHZv
aWQgcmVzZXRQcm9wZXJ0eVJhbmdlKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3Bl
cnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0KICAgICBib29sIGlzRXh0cmFjdGluZ1NvdXJjZURh
dGEoKSBjb25zdCB7IHJldHVybiAhIW1fY3VycmVudFJ1bGVEYXRhU3RhY2s7IH0KICAgICBpbnQg
bGV4KHZvaWQqIHl5bHZhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VE
YXRhLmgKaW5kZXggYmE2NzZlZTMzOGRjYzI5MzJhOGIxZTRkM2RkNGE3MjI5ODkyMWYxYS4uNjll
ZTk0ZGEwNzU4N2RiZmI4YjEzOTZkMmZiMWVkOGYyNGIyZmMzOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFN0eWxlUnVsZTsKK2NsYXNzIFN0eWxlUnVsZUJhc2U7CiAK
IHN0cnVjdCBTb3VyY2VSYW5nZSB7CiAgICAgU291cmNlUmFuZ2UoKTsKQEAgLTc4LDggKzc4LDYg
QEAgc3RydWN0IENTU1N0eWxlU291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1N0eWxl
U291cmNlRGF0YT4gewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU291cmNl
RGF0YSgpKTsKICAgICB9CiAKLSAgICAvLyBSYW5nZSBvZiB0aGUgc3R5bGUgdGV4dCBpbiB0aGUg
ZW5jbG9zaW5nIHNvdXJjZS4KLSAgICBTb3VyY2VSYW5nZSBzdHlsZUJvZHlSYW5nZTsKICAgICBW
ZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiBwcm9wZXJ0eURhdGE7CiB9OwogCkBAIC04Nywx
NiArODUsNDggQEAgc3RydWN0IENTU1J1bGVTb3VyY2VEYXRhOwogdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+IFJ1bGVTb3VyY2VEYXRhTGlzdDsKIAogc3RydWN0IENT
U1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTUnVsZVNvdXJjZURhdGE+IHsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3JlYXRlKCkKKyAgICBl
bnVtIFR5cGUgeworICAgICAgICBVTktOT1dOX1JVTEUsCisgICAgICAgIFNUWUxFX1JVTEUsCisg
ICAgICAgIENIQVJTRVRfUlVMRSwKKyAgICAgICAgSU1QT1JUX1JVTEUsCisgICAgICAgIE1FRElB
X1JVTEUsCisgICAgICAgIEZPTlRfRkFDRV9SVUxFLAorICAgICAgICBQQUdFX1JVTEUsCisgICAg
ICAgIEtFWUZSQU1FU19SVUxFCisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDU1NSdWxlU291cmNlRGF0YSh0eXBlKSk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZVVua25vd24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlU291cmNlRGF0YShVTktOT1dOX1JVTEUpKTsKKyAg
ICB9CisKKyAgICBDU1NSdWxlU291cmNlRGF0YShUeXBlIHR5cGUpCisgICAgICAgIDogdHlwZSh0
eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gU1RZTEVfUlVMRSB8fCB0eXBlID09IEZP
TlRfRkFDRV9SVUxFIHx8IHR5cGUgPT0gUEFHRV9SVUxFKQorICAgICAgICAgICAgc3R5bGVTb3Vy
Y2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICB9CisKKyAgICBUeXBl
IHR5cGU7CisKICAgICAvLyBSYW5nZSBvZiB0aGUgc2VsZWN0b3IgbGlzdCBpbiB0aGUgZW5jbG9z
aW5nIHNvdXJjZS4KLSAgICBTb3VyY2VSYW5nZSBzZWxlY3Rvckxpc3RSYW5nZTsKKyAgICBTb3Vy
Y2VSYW5nZSBydWxlSGVhZGVyUmFuZ2U7CisKKyAgICAvLyBSYW5nZSBvZiB0aGUgcnVsZSBib2R5
IChlLmcuIHN0eWxlIHRleHQgZm9yIHN0eWxlIHJ1bGVzKSBpbiB0aGUgZW5jbG9zaW5nIHNvdXJj
ZS4KKyAgICBTb3VyY2VSYW5nZSBydWxlQm9keVJhbmdlOworCisgICAgLy8gT25seSBmb3IgQ1NT
U3R5bGVSdWxlcywgQ1NTRm9udEZhY2VSdWxlcywgYW5kIENTU1BhZ2VSdWxlcy4KICAgICBSZWZQ
dHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURhdGE7CisKKyAgICAvLyBPbmx5IGZv
ciBDU1NNZWRpYVJ1bGVzLgorICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCBjaGlsZFJ1bGVzOwogfTsK
LXR5cGVkZWYgSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4g
U3R5bGVSdWxlUmFuZ2VNYXA7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IGE2ZmYw
ZGJmOGMyYWVjYWE1YTBlOTA0NDRiNzc4N2Y4YmUzNzk2NGQuLjNjZDkxNTBmNjMwOWJhMGM5YThi
ODk2ZjMyODg0Yzk3ZGYyNzgzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUu
aCIKKyNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29u
dGVudHMuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIldlYktpdENT
U0tleWZyYW1lc1J1bGUuaCIKQEAgLTYxLDYgKzYyLDcgQEAKIAogdXNpbmcgV2ViQ29yZTo6VHlw
ZUJ1aWxkZXI6OkFycmF5OwogdXNpbmcgV2ViQ29yZTo6UnVsZVNvdXJjZURhdGFMaXN0OwordXNp
bmcgV2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE7CiAKIGNsYXNzIFBhcnNlZFN0eWxlU2hlZXQg
ewogcHVibGljOgpAQCAtNzMsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgUnVsZVNvdXJjZURhdGFM
aXN0KiBzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhLmdldCgpOyB9CiAg
ICAgdm9pZCBzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0Pik7CiAg
ICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhOyB9Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3Vy
Y2VEYXRhPiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkKSBjb25zdDsKIAogcHJpdmF0ZToKIApA
QCAtOTcsMTIgKzk5LDMzIEBAIHZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0VGV4dChjb25zdCBT
dHJpbmcmIHRleHQpCiAgICAgc2V0U291cmNlRGF0YShudWxscHRyKTsKIH0KIAorc3RhdGljIHZv
aWQgZmxhdHRlblNvdXJjZURhdGEoUnVsZVNvdXJjZURhdGFMaXN0KiBkYXRhTGlzdCwgUnVsZVNv
dXJjZURhdGFMaXN0KiB0YXJnZXQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRh
TGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiYg
ZGF0YSA9IGRhdGFMaXN0LT5hdChpKTsKKyAgICAgICAgaWYgKGRhdGEtPnR5cGUgPT0gQ1NTUnVs
ZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpCisgICAgICAgICAgICB0YXJnZXQtPmFwcGVuZChkYXRh
KTsKKyAgICAgICAgZWxzZSBpZiAoZGF0YS0+dHlwZSA9PSBDU1NSdWxlU291cmNlRGF0YTo6TUVE
SUFfUlVMRSkKKyAgICAgICAgICAgIGZsYXR0ZW5Tb3VyY2VEYXRhKCZkYXRhLT5jaGlsZFJ1bGVz
LCB0YXJnZXQpOworICAgIH0KK30KKwogdm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VE
YXRhKFBhc3NPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBzb3VyY2VEYXRhKQogewotICAgIG1f
c291cmNlRGF0YSA9IHNvdXJjZURhdGE7CisgICAgaWYgKCFzb3VyY2VEYXRhKSB7CisgICAgICAg
IG1fc291cmNlRGF0YS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9z
b3VyY2VEYXRhID0gYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VEYXRhTGlzdCgpKTsKKworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHRvIHJldGFpbiB0aGUgb3JpZ2lu
YWwgZmxhdCBzb3VyY2VEYXRhIHN0cnVjdHVyZQorICAgIC8vIGNvbnRhaW5pbmcgb25seSBzdHls
ZSBydWxlcywgZXZlbiB0aG91Z2ggQ1NTUGFyc2VyIG5vdyBwcm92aWRlcyB0aGUgZnVsbCBydWxl
IHNvdXJjZSBkYXRhIHRyZWUuCisgICAgLy8gTm9ybWFsbHksIHdlIHNob3VsZCBqdXN0IGFzc2ln
biBtX3NvdXJjZURhdGEgPSBzb3VyY2VEYXRhOworICAgIGZsYXR0ZW5Tb3VyY2VEYXRhKHNvdXJj
ZURhdGEuZ2V0KCksIG1fc291cmNlRGF0YS5nZXQoKSk7CiB9CiAKLVJlZlB0cjxXZWJDb3JlOjpD
U1NSdWxlU291cmNlRGF0YT4gUGFyc2VkU3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFBdCh1bnNp
Z25lZCBpbmRleCkgY29uc3QKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+
IFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
CiB7CiAgICAgaWYgKCFoYXNTb3VyY2VEYXRhKCkgfHwgaW5kZXggPj0gbV9zb3VyY2VEYXRhLT5z
aXplKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjcxLDcgKzI5NCw3IEBAIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZv
clN0eWxlKCkgY29uCiAKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEg
PSBtX3BhcmVudFN0eWxlU2hlZXQgPyBtX3BhcmVudFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRh
Rm9yKG1fc3R5bGUuZ2V0KCkpIDogMDsKICAgICBpZiAoc291cmNlRGF0YSkKLSAgICAgICAgcmVz
dWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnN0eWxlU291
cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShidWls
ZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UpKTsKIAogICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQpAQCAtMzE0LDEwICszMzcsMTAgQEAgYm9vbCBJbnNw
ZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcm
IHByb3BlcnR5VGV4dCwKIAogICAgIGlmIChwcm9wZXJ0eVRleHQuc3RyaXBXaGl0ZVNwYWNlKCku
bGVuZ3RoKCkpIHsKICAgICAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHRlbXBNdXRhYmxl
U3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoKTsKLSAgICAgICAgUmVmUHRyPENTU1N0
eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7
CisgICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENTU1J1bGVT
b3VyY2VEYXRhOjpjcmVhdGUoQ1NTUnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpOwogICAgICAg
ICBDU1NQYXJzZXIgcChDU1NTdHJpY3RNb2RlKTsKICAgICAgICAgcC5wYXJzZURlY2xhcmF0aW9u
KHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCksIHByb3BlcnR5VGV4dCArICIgIiArIGJvZ3VzUHJvcGVy
dHlOYW1lICsgIjogbm9uZSIsIHNvdXJjZURhdGEsIG1fc3R5bGUtPnBhcmVudFN0eWxlU2hlZXQo
KS0+Y29udGVudHMoKSk7Ci0gICAgICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBw
cm9wZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAgICAgIFZlY3RvcjxD
U1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5zdHlsZVNv
dXJjZURhdGEtPnByb3BlcnR5RGF0YTsKICAgICAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9
IHByb3BlcnR5RGF0YS5zaXplKCk7CiAKICAgICAgICAgLy8gQXQgbGVhc3Qgb25lIHByb3BlcnR5
ICsgdGhlIGJvZ3VzIHByb3BlcnR5IGFkZGVkIGp1c3QgYWJvdmUgc2hvdWxkIGJlIHByZXNlbnQu
CkBAIC0zNTUsNyArMzc4LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0
KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VGV4dCwKICAgICAgICAgKm9s
ZFRleHQgPSBhbGxQcm9wZXJ0aWVzLmF0KGluZGV4KS5yYXdUZXh0OwogICAgICAgICBlZGl0b3Iu
cmVwbGFjZVByb3BlcnR5KGluZGV4LCBwcm9wZXJ0eVRleHQpOwogICAgIH0gZWxzZQotICAgICAg
ICBlZGl0b3IuaW5zZXJ0UHJvcGVydHkoaW5kZXgsIHByb3BlcnR5VGV4dCwgc291cmNlRGF0YS0+
c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5sZW5ndGgoKSk7CisgICAgICAgIGVkaXRv
ci5pbnNlcnRQcm9wZXJ0eShpbmRleCwgcHJvcGVydHlUZXh0LCBzb3VyY2VEYXRhLT5ydWxlQm9k
eVJhbmdlLmxlbmd0aCgpKTsKIAogICAgIHJldHVybiBhcHBseVN0eWxlVGV4dChlZGl0b3Iuc3R5
bGVUZXh0KCkpOwogfQpAQCAtNDEzLDcgKzQzNiw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnN0
eWxlVGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFNvdXJjZVJhbmdlJiBib2R5UmFuZ2UgPSBzb3VyY2VEYXRh
LT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlOworICAgIFNvdXJjZVJhbmdlJiBib2R5
UmFuZ2UgPSBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlOwogICAgICpyZXN1bHQgPSBzdHlsZVNo
ZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0YXJ0LCBib2R5UmFuZ2UuZW5kIC0gYm9keVJh
bmdlLnN0YXJ0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTc3MSw3ICs3OTQsNyBAQCBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDU1NJ
ZCYgaWQsIGNvbnN0IFN0cmluZwogICAgIH0KIAogICAgIFN0cmluZyBzaGVldFRleHQgPSBtX3Bh
cnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKLSAgICBzaGVldFRleHQucmVwbGFjZShzb3VyY2VEYXRh
LT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uu
ZW5kIC0gc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQsIHNlbGVjdG9yKTsKKyAg
ICBzaGVldFRleHQucmVwbGFjZShzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQsIHNv
dXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZS5sZW5ndGgoKSwgc2VsZWN0b3IpOwogICAgIG1fcGFy
c2VkU3R5bGVTaGVldC0+c2V0VGV4dChzaGVldFRleHQpOwogICAgIGZpcmVTdHlsZVNoZWV0Q2hh
bmdlZCgpOwogICAgIHJldHVybiB0cnVlOwpAQCAtODMwLDcgKzg1Myw3IEBAIGJvb2wgSW5zcGVj
dG9yU3R5bGVTaGVldDo6ZGVsZXRlUnVsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIEV4Y2Vw
dGlvbkNvZGUmIGVjCiAgICAgfQogCiAgICAgU3RyaW5nIHNoZWV0VGV4dCA9IG1fcGFyc2VkU3R5
bGVTaGVldC0+dGV4dCgpOwotICAgIHNoZWV0VGV4dC5yZW1vdmUoc291cmNlRGF0YS0+c2VsZWN0
b3JMaXN0UmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5
UmFuZ2UuZW5kIC0gc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgKyAxKTsKKyAg
ICBzaGVldFRleHQucmVtb3ZlKHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZS5zdGFydCwgc291
cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5lbmQgLSBzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2Uu
c3RhcnQgKyAxKTsKICAgICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNldFRleHQoc2hlZXRUZXh0KTsK
ICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkxMSwx
MiArOTM0LDggQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1MKICAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQog
ICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7Ci0g
ICAgaWYgKHNvdXJjZURhdGEpIHsKLSAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNv
dXJjZVJhbmdlPiBzZWxlY3RvclJhbmdlID0gVHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U6
OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0U3RhcnQoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0
UmFuZ2Uuc3RhcnQpCi0gICAgICAgICAgICAuc2V0RW5kKHNvdXJjZURhdGEtPnNlbGVjdG9yTGlz
dFJhbmdlLmVuZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U2VsZWN0b3JSYW5nZShzZWxlY3RvclJh
bmdlLnJlbGVhc2UoKSk7Ci0gICAgfQorICAgIGlmIChzb3VyY2VEYXRhKQorICAgICAgICByZXN1
bHQtPnNldFNlbGVjdG9yUmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5y
dWxlSGVhZGVyUmFuZ2UpKTsKIAogICAgIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NNZWRpYT4gPiBtZWRpYUFycmF5ID0gQXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+
OjpjcmVhdGUoKTsKIApAQCAtOTQ4LDcgKzk2Nyw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUo
CiAgICAgICAgIFN0cmluZyBzaGVldFRleHQ7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGdldFRl
eHQoJnNoZWV0VGV4dCk7CiAgICAgICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgICAgICBjb25z
dCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5z
dHlsZUJvZHlSYW5nZTsKKyAgICAgICAgICAgIGNvbnN0IFNvdXJjZVJhbmdlJiBib2R5UmFuZ2Ug
PSBzb3VyY2VEYXRhLT5ydWxlQm9keVJhbmdlOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRDc3NU
ZXh0KHNoZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0YXJ0LCBib2R5UmFuZ2UuZW5kIC0g
Ym9keVJhbmdlLnN0YXJ0KSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDk4LDkgKzExMTcsOSBA
QCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEoKQogCiAgICAgUmVm
UHRyPFN0eWxlU2hlZXRDb250ZW50cz4gbmV3U3R5bGVTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50
czo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFyc2VyIHAoQ1NTU3RyaWN0TW9kZSk7Ci0gICAgT3duUHRy
PFJ1bGVTb3VyY2VEYXRhTGlzdD4gcmFuZ2VzVmVjdG9yKGFkb3B0UHRyKG5ldyBSdWxlU291cmNl
RGF0YUxpc3QoKSkpOwotICAgIHAucGFyc2VTaGVldChuZXdTdHlsZVNoZWV0LmdldCgpLCBtX3Bh
cnNlZFN0eWxlU2hlZXQtPnRleHQoKSwgMCwgcmFuZ2VzVmVjdG9yLmdldCgpKTsKLSAgICBtX3Bh
cnNlZFN0eWxlU2hlZXQtPnNldFNvdXJjZURhdGEocmFuZ2VzVmVjdG9yLnJlbGVhc2UoKSk7Cisg
ICAgT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gcnVsZVNvdXJjZURhdGFSZXN1bHQgPSBhZG9w
dFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpOworICAgIHAucGFyc2VTaGVldChuZXdTdHls
ZVNoZWV0LmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSwgMCwgcnVsZVNvdXJjZURh
dGFSZXN1bHQuZ2V0KCkpOworICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0U291cmNlRGF0YShy
dWxlU291cmNlRGF0YVJlc3VsdC5yZWxlYXNlKCkpOwogICAgIHJldHVybiBtX3BhcnNlZFN0eWxl
U2hlZXQtPmhhc1NvdXJjZURhdGEoKTsKIH0KIApAQCAtMTE0NCw4ICsxMTYzLDggQEAgYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGUpOwot
ICAgIHVuc2lnbmVkIGJvZHlTdGFydCA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2Uuc3RhcnQ7Ci0gICAgdW5zaWduZWQgYm9keUVuZCA9IHNvdXJjZURhdGEtPnN0
eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kOworICAgIHVuc2lnbmVkIGJvZHlTdGFy
dCA9IHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2Uuc3RhcnQ7CisgICAgdW5zaWduZWQgYm9keUVu
ZCA9IHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5kOwogICAgIEFTU0VSVChib2R5U3RhcnQg
PD0gYm9keUVuZCk7CiAKICAgICBTdHJpbmcgdGV4dCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4
dCgpOwpAQCAtMTMyNiwxMyArMTM0NSwxMSBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKICAgICBpZiAobV9ydWxlU291cmNl
RGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBtX3J1bGVTb3VyY2VEYXRhID0gQ1NT
UnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+
IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIGJvb2wgc3Vj
Y2VzcyA9IGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKCZzb3VyY2VEYXRhKTsKKyAgICBtX3J1bGVT
b3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShDU1NSdWxlU291cmNlRGF0YTo6
U1RZTEVfUlVMRSk7CisgICAgYm9vbCBzdWNjZXNzID0gZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMo
bV9ydWxlU291cmNlRGF0YS5nZXQoKSk7CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBtX3J1bGVTb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEgPSBzb3Vy
Y2VEYXRhLnJlbGVhc2UoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM1MiwyMCArMTM2
OSwyMCBAQCBjb25zdCBTdHJpbmcmIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6
ZWxlbWVudFN0eWxlVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZWxlbWVudC0+Z2V0QXR0cmli
dXRlKCJzdHlsZSIpLnN0cmluZygpOwogfQogCi1ib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6Z2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoUmVmUHRyPENTU1N0eWxlU291cmNl
RGF0YT4qIHJlc3VsdCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSogcmVzdWx0KSBj
b25zdAogewogICAgIGlmICghbV9lbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fc3R5bGVUZXh0LmlzRW1wdHkoKSkgewotICAgICAg
ICAoKnJlc3VsdCktPnN0eWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKLSAgICAgICAgKCpyZXN1bHQp
LT5zdHlsZUJvZHlSYW5nZS5lbmQgPSAwOworICAgICAgICByZXN1bHQtPnJ1bGVCb2R5UmFuZ2Uu
c3RhcnQgPSAwOworICAgICAgICByZXN1bHQtPnJ1bGVCb2R5UmFuZ2UuZW5kID0gMDsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHRl
bXBEZWNsYXJhdGlvbiA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNl
ciBwKG1fZWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0gICAgcC5wYXJzZURlY2xhcmF0aW9uKHRlbXBE
ZWNsYXJhdGlvbi5nZXQoKSwgbV9zdHlsZVRleHQsICpyZXN1bHQsIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+ZWxlbWVudFNoZWV0KCktPmNvbnRlbnRzKCkpOworICAgIHAucGFyc2VEZWNsYXJhdGlv
bih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5bGVUZXh0LCByZXN1bHQsIG1fZWxlbWVudC0+
ZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmNvbnRlbnRzKCkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
aAppbmRleCA1NTU1NmFiZGNiMWU3OTkwNzhlOWNkNzI2MWVjYWIwZjFiMWEyNzhiLi4wYWY5ZjNj
NWExYjgyMzJhMTg3MjA2YTQyY2FkYTEyYTdmNzBiZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTI3Miw3ICsyNzIsNyBAQCBwcm90
ZWN0ZWQ6CiBwcml2YXRlOgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGlubGluZVN0eWxlKCkg
Y29uc3Q7CiAgICAgY29uc3QgU3RyaW5nJiBlbGVtZW50U3R5bGVUZXh0KCkgY29uc3Q7Ci0gICAg
Ym9vbCBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiog
cmVzdWx0KSBjb25zdDsKKyAgICBib29sIGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKENTU1J1bGVT
b3VyY2VEYXRhKiByZXN1bHQpIGNvbnN0OwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVu
dDsKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1fcnVsZVNvdXJjZURhdGE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150133</attachid>
            <date>2012-06-29 04:08:56 -0700</date>
            <delta_ts>2012-06-29 04:45:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88420-20120629150855.patch</filename>
            <type>text/plain</type>
            <size>40385</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzk5MGQ5MmRiZTUzMWJh
YjBhNGU0YWU0ODk5YjJhMmI4NDFmMDc4Mi4uZWZlMzk3ZjM4NTVlNDFhZTdhZWZhNjQ5YTVkMTQ1
ODhkZmUwNzAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTA2LTI1ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUHJvdmlkZSBzb3VyY2UgZGF0YSBmb3IgYWxsIGtub3duIHJ1bGUgdHlwZXMgaW4gQ1NT
UGFyc2VyLCBleGNlcHQgImtleWZyYW1lIiBhbmQgInJlZ2lvbiIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDIwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGVyZSBpcyBu
byBjbGllbnQtdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2UuIEV4aXN0aW5nIEluc3BlY3RvciB0ZXN0
cyB3aWxsIGJlIG1vZGlmaWVkCisgICAgICAgIHRvIHRlc3QgdGhlIG5ldyBkYXRhIHByb3ZpZGVk
LCBhbG9uZyB3aXRoIHRoZSBuZWNlc3NhcnkgSW5zcGVjdG9yIHBsdW1iaW5nLgorCisgICAgICAg
ICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gpOiBDaGVjayBmb3IgbWVkaWFR
dWVyaWVzKCkgdmFsaWRpdHkgYmVmb3JlIHJlYXR0YWNoaW5nLgorICAgICAgICAqIGNzcy9DU1NQ
YXJzZXIuY3BwOiBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgYmVsb3csIHRoZSBtZXRob2Qg
Y2hhbmdlcyBhcmUgcmVsYXRlZCB0byB0aGUgZXh0ZW5zaW9uIG9mIHRoZQorICAgICAgICBzb3Vy
Y2UtYmFzZWQgQ1NTIG1vZGVsIHByb3ZpZGVkIGJ5IHRoZSBwYXJzZXIuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OkNTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNldHVwUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJh
dGlvbik6IEFjY2VwdCBhIENTU1J1bGVTb3VyY2VEYXRhIGZvciBmaWxsaW5nLCBzaW5jZSBpdCBu
b3cgY29udGFpbnMKKyAgICAgICAgdGhlIHJlbGF0ZWQgc3R5bGUgc291cmNlIHJhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlTWVkaWFSdWxlKTogQ3JlYXRlIENTU01lZGlhUnVsZSBl
dmVuIGlmIG1lZGlhIGFuZCBydWxlcyBhcmUgZW1wdHksCisgICAgICAgIHdoaWNoIGlzIGNvbnNp
c3RlbnQgd2l0aCBNb3ppbGxhLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwcm9jZXNz
QW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGROZXdSdWxlVG9Tb3VyY2VUcmVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OmNyZWF0ZVBhZ2VSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3Jl
YXRlUmVnaW9uUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmZpeFVucGFyc2Vk
UHJvcGVydHlSYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUnVsZUhl
YWRlclN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1J1bGVIZWFkZXJF
bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6
CisgICAgICAgIChDU1NQYXJzZXIpOgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNvdXJjZURh
dGEuaDogRXh0ZW5kIHRoZSBtb2RlbCB0byBoYW5kbGUgbW9yZSB0eXBlcyBvZiBydWxlcyBhbmQg
dGhlaXIgY29udGFpbm1lbnRzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVT
b3VyY2VEYXRhOjpjcmVhdGVVbmtub3duKToKKyAgICAgICAgKENTU1J1bGVTb3VyY2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhOjpDU1NSdWxlU291cmNlRGF0YSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOiBGb2xsb3cgdGhl
IENTU1BhcnNlciBBUEkgY2hhbmdlcyBidXQgcmV0YWluIHRoZSBmbGF0IHN0b3JlZCBDU1MgcnVs
ZXMgc3RydWN0dXJlLgorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldCk6CisgICAgICAgIChmbGF0
dGVuU291cmNlRGF0YSk6IEZsYXR0ZW4gdGhlIHJ1bGUgdHJlZSB0byByZXRhaW4gdGhlIGV4aXN0
aW5nIHJ1bGUtaGFuZGxpbmcgY29kZSBpbnRhY3QuCisgICAgICAgIChQYXJzZWRTdHlsZVNoZWV0
OjpzZXRTb3VyY2VEYXRhKToKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VE
YXRhQXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9y
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFJ1bGVTZWxlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpkZWxldGVSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHRX
aXRoQ2hhbmdlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZTo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0U3R5bGVBdHRyaWJ1dGVSYW5n
ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0Lmg6CisKIDIwMTIt
MDYtMjggIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVc2UgZmxvYXRpbmcga2V5ZnJhbWUgcnVsZSBsaXN0IHdoZW4gcGFyc2luZyBALXdlYmtpdC1r
ZXlmcmFtZXMgYW5kIGFsbG93IGFicnVwdCBydWxlIHRlcm1pbmF0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YW1tYXIueQppbmRleCA1Yjg2NzUzMzFhNDIxMmI0ZjdmZjE1ODUwYzVlZjhiZjVkM2E2NGUyLi44
MjdhYmVkNGExZmJlOWNjNTdkNzE4NDUwNWI0YTE1NjAzOGU2NmE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFtbWFyLnkKQEAgLTM4Nyw2ICszODcsOCBAQCBjaGFyc2V0OgogICAgICBDU1NQYXJzZXIqIHAg
PSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICBpZiAocC0+bV9zdHlsZVNo
ZWV0KQogICAgICAgICAgcC0+bV9zdHlsZVNoZWV0LT5wYXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFy
c2V0UnVsZSgkMyk7CisgICAgIGlmIChwLT5pc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkgJiYgcC0+
bV9jdXJyZW50UnVsZURhdGFTdGFjay0+aXNFbXB0eSgpICYmIHAtPm1fcnVsZVNvdXJjZURhdGFS
ZXN1bHQpCisgICAgICAgICBwLT5hZGROZXdSdWxlVG9Tb3VyY2VUcmVlKENTU1J1bGVTb3VyY2VE
YXRhOjpjcmVhdGVVbmtub3duKCkpOwogICAgICAkJCA9IDA7CiAgIH0KICAgfCBDSEFSU0VUX1NZ
TSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKQEAgLTQ2MiwyMiArNDY0LDM4IEBAIGJsb2NrX3J1bGU6
CiAgIHwgbWVkaWEKICAgOwogCithdF9pbXBvcnRfaGVhZGVyX2VuZF9tYXliZV9zcGFjZToKKyAg
ICBtYXliZV9zcGFjZSB7CisgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1Bh
cnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtSdWxlSGVhZGVyRW5kKCk7CisgICAgICAg
IHAtPm1hcmtSdWxlQm9keVN0YXJ0KCk7CisgICAgfQorICAgIDsKKworYmVmb3JlX2ltcG9ydF9y
dWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKS0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6SU1QT1JUX1JV
TEUpOworICAgIH0KKyAgICA7CiAKIGltcG9ydDoKLSAgICBJTVBPUlRfU1lNIG1heWJlX3NwYWNl
IHN0cmluZ19vcl91cmkgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfbGlzdCAnOycgewotICAgICAg
ICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUltcG9ydFJ1bGUo
JDMsICQ1KTsKKyAgICBiZWZvcmVfaW1wb3J0X3J1bGUgSU1QT1JUX1NZTSBhdF9pbXBvcnRfaGVh
ZGVyX2VuZF9tYXliZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIG1heWJlX21lZGlh
X2xpc3QgJzsnIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
LT5jcmVhdGVJbXBvcnRSdWxlKCQ0LCAkNik7CiAgICAgfQotICB8IElNUE9SVF9TWU0gbWF5YmVf
c3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV9saXN0IFRPS0VOX0VP
RiB7Ci0gICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRl
SW1wb3J0UnVsZSgkMywgJDUpOworICB8IGJlZm9yZV9pbXBvcnRfcnVsZSBJTVBPUlRfU1lNIGF0
X2ltcG9ydF9oZWFkZXJfZW5kX21heWJlX3NwYWNlIHN0cmluZ19vcl91cmkgbWF5YmVfc3BhY2Ug
bWF5YmVfbWVkaWFfbGlzdCBUT0tFTl9FT0YgeworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUltcG9ydFJ1bGUoJDQsICQ2KTsKICAgICB9Ci0gIHwg
SU1QT1JUX1NZTSBtYXliZV9zcGFjZSBzdHJpbmdfb3JfdXJpIG1heWJlX3NwYWNlIG1heWJlX21l
ZGlhX2xpc3QgaW52YWxpZF9ibG9jayB7CisgIHwgYmVmb3JlX2ltcG9ydF9ydWxlIElNUE9SVF9T
WU0gYXRfaW1wb3J0X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ugc3RyaW5nX29yX3VyaSBtYXliZV9z
cGFjZSBtYXliZV9tZWRpYV9saXN0IGludmFsaWRfYmxvY2sgewogICAgICAgICAkJCA9IDA7Cisg
ICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAg
ICAgfQotICB8IElNUE9SVF9TWU0gZXJyb3IgJzsnIHsKKyAgfCBiZWZvcmVfaW1wb3J0X3J1bGUg
SU1QT1JUX1NZTSBlcnJvciAnOycgewogICAgICAgICAkJCA9IDA7CisgICAgICAgIHN0YXRpY19j
YXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQotICB8IElNUE9S
VF9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CisgIHwgYmVmb3JlX2ltcG9ydF9ydWxlIElNUE9S
VF9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CiAgICAgICAgICQkID0gMDsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+cG9wUnVsZURhdGEoKTsKICAgICB9CiAgIDsK
IApAQCAtNjAyLDE1ICs2MjAsMzQgQEAgbWVkaWFfbGlzdDoKICAgICB9CiAgICAgOwogCithdF9y
dWxlX2JvZHlfc3RhcnQ6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrUnVsZUJvZHlTdGFydCgpOworICAgIH0KKyAgICA7CisK
K2JlZm9yZV9tZWRpYV9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNl
RGF0YTo6TUVESUFfUlVMRSk7CisgICAgfQorICAgIDsKKworYXRfcnVsZV9oZWFkZXJfZW5kX21h
eWJlX3NwYWNlOgorICAgIG1heWJlX3NwYWNlIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyKj4ocGFyc2VyKS0+bWFya1J1bGVIZWFkZXJFbmQoKTsKKyAgICB9CisgICAgOworCiBtZWRp
YToKLSAgICBNRURJQV9TWU0gbWF5YmVfc3BhY2UgbWVkaWFfbGlzdCAneycgbWF5YmVfc3BhY2Ug
YmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgewotICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZU1lZGlhUnVsZSgkMywgJDYpOworICAgIGJlZm9yZV9t
ZWRpYV9ydWxlIE1FRElBX1NZTSBtYXliZV9zcGFjZSBtZWRpYV9saXN0IGF0X3J1bGVfaGVhZGVy
X2VuZCAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBz
YXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
LT5jcmVhdGVNZWRpYVJ1bGUoJDQsICQ5KTsKICAgICB9Ci0gICAgfCBNRURJQV9TWU0gbWF5YmVf
c3BhY2UgJ3snIG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKLSAgICAg
ICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUo
MCwgJDUpOworICAgIHwgYmVmb3JlX21lZGlhX3J1bGUgTUVESUFfU1lNIGF0X3J1bGVfaGVhZGVy
X2VuZF9tYXliZV9zcGFjZSAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2Nr
X3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIqPihwYXJzZXIpLT5jcmVhdGVNZWRpYVJ1bGUoMCwgJDcpOwogICAgIH0KLSAgICB8IE1FRElB
X1NZTSBtYXliZV9zcGFjZSAnOycgeworICAgIHwgYmVmb3JlX21lZGlhX3J1bGUgTUVESUFfU1lN
IGF0X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAnOycgewogICAgICAgICAkJCA9IDA7Cisg
ICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAg
ICAgfQogICAgIDsKIApAQCAtNjIwLDkgKzY1NywxNSBAQCBtZWRpdW06CiAgIH0KICAgOwogCiti
ZWZvcmVfa2V5ZnJhbWVzX3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tYXJrUnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3Vy
Y2VEYXRhOjpLRVlGUkFNRVNfUlVMRSk7CisgICAgfQorICAgIDsKKwoga2V5ZnJhbWVzOgotICAg
IFdFQktJVF9LRVlGUkFNRVNfU1lNIG1heWJlX3NwYWNlIGtleWZyYW1lX25hbWUgbWF5YmVfc3Bh
Y2UgJ3snIG1heWJlX3NwYWNlIGtleWZyYW1lc19ydWxlIGNsb3NpbmdfYnJhY2UgewotICAgICAg
ICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUtleWZyYW1lc1J1
bGUoJDMsIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnNpbmtGbG9hdGluZ0tleWZy
YW1lVmVjdG9yKCQ3KSk7CisgICAgYmVmb3JlX2tleWZyYW1lc19ydWxlIFdFQktJVF9LRVlGUkFN
RVNfU1lNIG1heWJlX3NwYWNlIGtleWZyYW1lX25hbWUgYXRfcnVsZV9oZWFkZXJfZW5kX21heWJl
X3NwYWNlICd7JyBhdF9ydWxlX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2Uga2V5ZnJhbWVzX3J1bGUg
Y2xvc2luZ19icmFjZSB7CisgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKS0+Y3JlYXRlS2V5ZnJhbWVzUnVsZSgkNCwgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKS0+c2lua0Zsb2F0aW5nS2V5ZnJhbWVWZWN0b3IoJDkpKTsKICAgICB9CiAgICAgOwogICAK
QEAgLTY3NCwyMyArNzE3LDMyIEBAIGtleToKICAgICB9CiAgICAgOwogCitiZWZvcmVfcGFnZV9y
dWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKS0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6UEFHRV9SVUxF
KTsKKyAgICB9CisgICAgOworCiBwYWdlOgotICAgIFBBR0VfU1lNIG1heWJlX3NwYWNlIHBhZ2Vf
c2VsZWN0b3IgbWF5YmVfc3BhY2UKLSAgICAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25zX2Fu
ZF9tYXJnaW5zIGNsb3NpbmdfYnJhY2UgeworICAgIGJlZm9yZV9wYWdlX3J1bGUgUEFHRV9TWU0g
bWF5YmVfc3BhY2UgcGFnZV9zZWxlY3RvciBhdF9ydWxlX2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UK
KyAgICAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlv
biBkZWNsYXJhdGlvbnNfYW5kX21hcmdpbnMgY2xvc2luZ19icmFjZSB7CiAgICAgICAgIENTU1Bh
cnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7Ci0gICAgICAgIGlmICgk
MykKLSAgICAgICAgICAgICQkID0gcC0+Y3JlYXRlUGFnZVJ1bGUocC0+c2lua0Zsb2F0aW5nU2Vs
ZWN0b3IoJDMpKTsKKyAgICAgICAgaWYgKCQ0KQorICAgICAgICAgICAgJCQgPSBwLT5jcmVhdGVQ
YWdlUnVsZShwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkNCkpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIC8vIENsZWFyIHByb3BlcnRpZXMgaW4gdGhlIGludmFsaWQgQHBhZ2UgcnVsZS4K
ICAgICAgICAgICAgIHAtPmNsZWFyUHJvcGVydGllcygpOwogICAgICAgICAgICAgLy8gQWxzbyBj
bGVhciBtYXJnaW4gYXQtcnVsZXMgaGVyZSBvbmNlIHdlIGZ1bGx5IGltcGxlbWVudCBtYXJnaW4g
YXQtcnVsZXMgcGFyc2luZy4KICAgICAgICAgICAgICQkID0gMDsKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgfCBQQUdFX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrIHsKKyAgICB8IGJlZm9yZV9w
YWdlX3J1bGUgUEFHRV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jayB7CisgICAgICBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIqPihwYXJzZXIpLT5wb3BSdWxlRGF0YSgpOwogICAgICAgJCQgPSAwOwogICAg
IH0KLSAgICB8IFBBR0VfU1lNIGVycm9yICc7JyB7CisgICAgfCBiZWZvcmVfcGFnZV9ydWxlIFBB
R0VfU1lNIGVycm9yICc7JyB7CisgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIp
LT5wb3BSdWxlRGF0YSgpOwogICAgICAgJCQgPSAwOwogICAgIH0KICAgICA7CkBAIC03ODYsMTYg
KzgzOCwyNCBAQCBtYXJnaW5fc3ltIDoKICAgICB9CiAgICAgOwogCitiZWZvcmVfZm9udF9mYWNl
X3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBzdGF0aWNfY2FzdDxDU1NQYXJzZXIq
PihwYXJzZXIpLT5tYXJrUnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpGT05UX0ZB
Q0VfUlVMRSk7CisgICAgfQorICAgIDsKKwogZm9udF9mYWNlOgotICAgIEZPTlRfRkFDRV9TWU0g
bWF5YmVfc3BhY2UKLSAgICAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5n
X2JyYWNlIHsKKyAgICBiZWZvcmVfZm9udF9mYWNlX3J1bGUgRk9OVF9GQUNFX1NZTSBhdF9ydWxl
X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UKKyAgICAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJl
X3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3NpbmdfYnJhY2Ug
ewogICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUZv
bnRGYWNlUnVsZSgpOwogICAgIH0KLSAgICB8IEZPTlRfRkFDRV9TWU0gZXJyb3IgaW52YWxpZF9i
bG9jayB7CisgICAgfCBiZWZvcmVfZm9udF9mYWNlX3J1bGUgRk9OVF9GQUNFX1NZTSBlcnJvciBp
bnZhbGlkX2Jsb2NrIHsKICAgICAgICQkID0gMDsKKyAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNl
cio+KHBhcnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQotICAgIHwgRk9OVF9GQUNFX1NZTSBl
cnJvciAnOycgeworICAgIHwgYmVmb3JlX2ZvbnRfZmFjZV9ydWxlIEZPTlRfRkFDRV9TWU0gZXJy
b3IgJzsnIHsKICAgICAgICQkID0gMDsKKyAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBh
cnNlciktPnBvcFJ1bGVEYXRhKCk7CiAgICAgfQogOwogCkBAIC04MzcsMjcgKzg5NywyNCBAQCB1
bmFyeV9vcGVyYXRvcjoKIAogbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uOgogICAgIG1h
eWJlX3NwYWNlIHsKLSAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2Vy
Kj4ocGFyc2VyKTsKLSAgICAgICAgcC0+bWFya1Byb3BlcnR5U3RhcnQoKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+bWFya1Byb3BlcnR5U3RhcnQoKTsKICAgICB9
CiAgIDsKIAogYmVmb3JlX3NlbGVjdG9yX2xpc3Q6CiAgICAgLyogZW1wdHkgKi8gewotICAgICAg
ICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwotICAgICAg
ICBwLT5tYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyKj4ocGFyc2VyKS0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6U1RZ
TEVfUlVMRSk7CiAgICAgfQogICA7CiAKLWJlZm9yZV9ydWxlX29wZW5pbmdfYnJhY2U6CithdF9y
dWxlX2hlYWRlcl9lbmQ6CiAgICAgLyogZW1wdHkgKi8gewotICAgICAgICBDU1NQYXJzZXIqIHAg
PSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwotICAgICAgICBwLT5tYXJrU2VsZWN0
b3JMaXN0RW5kKCk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPm1h
cmtSdWxlSGVhZGVyRW5kKCk7CiAgICAgfQogICA7CiAKIHJ1bGVzZXQ6Ci0gICAgYmVmb3JlX3Nl
bGVjdG9yX2xpc3Qgc2VsZWN0b3JfbGlzdCBiZWZvcmVfcnVsZV9vcGVuaW5nX2JyYWNlICd7JyBt
YXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2Jy
YWNlIHsKKyAgICBiZWZvcmVfc2VsZWN0b3JfbGlzdCBzZWxlY3Rvcl9saXN0IGF0X3J1bGVfaGVh
ZGVyX2VuZCAneycgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xp
c3QgY2xvc2luZ19icmFjZSB7CiAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlcik7CiAgICAgICAgICQkID0gcC0+Y3JlYXRlU3R5bGVSdWxlKCQyKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCmluZGV4IDZkYjMyMGMyNzBkOGY4
YWNlZTdkZjMzZDNhMTdhM2UzYzI3NjYzODYuLjU1YmJhYTVmZGEyNTYwMWE3NGU4NTM0YWNkZWM5
Zjc3MmEwNzE4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCkBAIC0xNjYsNyAr
MTY2LDcgQEAgdm9pZCBDU1NNZWRpYVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKiBydWxl
KQogewogICAgIEFTU0VSVChydWxlKTsKICAgICBtX21lZGlhUnVsZSA9IHJ1bGU7Ci0gICAgaWYg
KG1fbWVkaWFDU1NPTVdyYXBwZXIpCisgICAgaWYgKG1fbWVkaWFDU1NPTVdyYXBwZXIgJiYgbV9t
ZWRpYVJ1bGUtPm1lZGlhUXVlcmllcygpKQogICAgICAgICBtX21lZGlhQ1NTT01XcmFwcGVyLT5y
ZWF0dGFjaChtX21lZGlhUnVsZS0+bWVkaWFRdWVyaWVzKCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAKaW5kZXggMzBhNzRmMmJkODI4MmI2MjQ1NGNjZjlmMDQ3NWEzOGY0M2RmM2ZmZi4uYmExYzY1
ODkyNzYxYmUzMjk2ZjhhMzI0MTJkNzI4MjRmZDEyOGU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKQEAgLTI1MSw5ICsyNTEsNiBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAgICwgbV9oYWRTeW50YWN0aWNhbGx5VmFsaWRDU1NS
dWxlKGZhbHNlKQogICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQogICAgICwgbV9w
YXJzZWRUZXh0UHJlZml4TGVuZ3RoKDApCi0gICAgLCBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlv
bihmYWxzZSkKLSAgICAsIG1fc2VsZWN0b3JMaXN0UmFuZ2UoMCwgMCkKLSAgICAsIG1fcnVsZUJv
ZHlSYW5nZSgwLCAwKQogICAgICwgbV9wcm9wZXJ0eVJhbmdlKFVJTlRfTUFYLCBVSU5UX01BWCkK
ICAgICAsIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQoMCkKICAgICAsIG1fcGFyc2luZ01vZGUoTm9y
bWFsTW9kZSkKQEAgLTMxNyw3ICszMTQsNiBAQCB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIo
Y29uc3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhcgogICAg
IG1fZGF0YVN0YXJ0W2xlbmd0aCAtIDFdID0gMDsKIAogICAgIG1fY3VycmVudENoYXJhY3RlciA9
IG1fdG9rZW5TdGFydCA9IG1fZGF0YVN0YXJ0LmdldCgpOwotICAgIHJlc2V0UnVsZUJvZHlNYXJr
cygpOwogfQogCiB2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMq
IHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgaW50IHN0YXJ0TGluZU51bWJlciwgUnVsZVNv
dXJjZURhdGFMaXN0KiBydWxlU291cmNlRGF0YVJlc3VsdCkKQEAgLTEyMjEsMjAgKzEyMTcsMTcg
QEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENT
U1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXMKICAgICBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2Vs
ZWN0b3IgPSAwOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihTdHlsZVBy
b3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIFBhc3NSZWZQdHI8
Q1NTU3R5bGVTb3VyY2VEYXRhPiBwcnBTdHlsZVNvdXJjZURhdGEsIFN0eWxlU2hlZXRDb250ZW50
cyogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihT
dHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIFBhc3NS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHBycFJ1bGVTb3VyY2VEYXRhLCBTdHlsZVNoZWV0Q29u
dGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIC8vIExlbmd0aCBvZiB0aGUgIkAtd2Vi
a2l0LWRlY2xzeyIgcHJlZml4LgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcmVmaXhMZW5n
dGggPSAxNTsKIAogICAgIHNldFN0eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQpOwogCi0gICAg
UmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc3R5bGVTb3VyY2VEYXRhID0gcHJwU3R5bGVTb3Vy
Y2VEYXRhOwotICAgIGlmIChzdHlsZVNvdXJjZURhdGEpIHsKKyAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhID0gcHJwUnVsZVNvdXJjZURhdGE7CisgICAgaWYgKHJ1
bGVTb3VyY2VEYXRhKSB7CiAgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2sgPSBhZG9wdFB0
cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpOwotICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IGRhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIGRhdGEt
PnN0eWxlU291cmNlRGF0YSA9IHN0eWxlU291cmNlRGF0YTsKLSAgICAgICAgbV9jdXJyZW50UnVs
ZURhdGFTdGFjay0+YXBwZW5kKGRhdGEpOwotICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJh
dGlvbiA9IHRydWU7CisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChydWxl
U291cmNlRGF0YSk7CiAgICAgfQogCiAgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LWRlY2xzeyIs
IHN0cmluZywgIn0gIik7CkBAIC0xMjUwLDIwICsxMjQzLDE4IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJp
bmcmIHN0CiAgICAgICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIH0KIAotICAgIGlmIChzdHls
ZVNvdXJjZURhdGEpIHsKLSAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5p
c0VtcHR5KCkpOwotICAgICAgICBDU1NSdWxlU291cmNlRGF0YSogcnVsZURhdGEgPSBtX2N1cnJl
bnRSdWxlRGF0YVN0YWNrLT5sYXN0KCkuZ2V0KCk7Ci0gICAgICAgIHJ1bGVEYXRhLT5zdHlsZVNv
dXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKLSAgICAgICAgcnVsZURhdGEtPnN0
eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kID0gc3RyaW5nLmxlbmd0aCgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEt
PnByb3BlcnR5RGF0YS5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIENTU1By
b3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0
YS0+cHJvcGVydHlEYXRhLmF0KGkpOworICAgIGlmIChydWxlU291cmNlRGF0YSkgeworICAgICAg
ICBBU1NFUlQobV9jdXJyZW50UnVsZURhdGFTdGFjay0+c2l6ZSgpID09IDEpOworICAgICAgICBy
dWxlU291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5zdGFydCA9IDA7CisgICAgICAgIHJ1bGVTb3Vy
Y2VEYXRhLT5ydWxlQm9keVJhbmdlLmVuZCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDAsIHNpemUgPSBydWxlU291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5w
cm9wZXJ0eURhdGEuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBDU1NQcm9w
ZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RGF0YSA9IHJ1bGVTb3VyY2VEYXRhLT5zdHlsZVNvdXJj
ZURhdGEtPnByb3BlcnR5RGF0YS5hdChpKTsKICAgICAgICAgICAgIHByb3BlcnR5RGF0YS5yYW5n
ZS5zdGFydCAtPSBwcmVmaXhMZW5ndGg7CiAgICAgICAgICAgICBwcm9wZXJ0eURhdGEucmFuZ2Uu
ZW5kIC09IHByZWZpeExlbmd0aDsKICAgICAgICAgfQotICAgICAgICBmaXhVbnBhcnNlZFByb3Bl
cnR5UmFuZ2VzKHJ1bGVEYXRhKTsKIAorICAgICAgICBmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2Vz
KHJ1bGVTb3VyY2VEYXRhLmdldCgpKTsKICAgICAgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay5j
bGVhcigpOwotICAgICAgICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IGZhbHNlOwogICAg
IH0KIAogICAgIHJldHVybiBvazsKQEAgLTk0MDEsMTcgKzkzOTIsMjMgQEAgU3R5bGVSdWxlQmFz
ZSogQ1NTUGFyc2VyOjpjcmVhdGVJbXBvcnRSdWxlKGNvbnN0IENTU1BhcnNlclN0cmluZyYgdXJs
LCBNZWRpYVF1ZXIKICAgICBSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiBydWxlID0gU3R5bGVSdWxl
SW1wb3J0OjpjcmVhdGUodXJsLCBtZWRpYSk7CiAgICAgU3R5bGVSdWxlSW1wb3J0KiByZXN1bHQg
PSBydWxlLmdldCgpOwogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsK
KyAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVNZWRpYVJ1
bGUoTWVkaWFRdWVyeVNldCogbWVkaWEsIFJ1bGVMaXN0KiBydWxlcykKIHsKLSAgICBpZiAoIW1l
ZGlhIHx8ICFydWxlcykKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgbV9hbGxvd0ltcG9ydFJ1bGVz
ID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwotICAgIFJlZlB0cjxTdHls
ZVJ1bGVNZWRpYT4gcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEsICpydWxlcyk7
CisgICAgUmVmUHRyPFN0eWxlUnVsZU1lZGlhPiBydWxlOworICAgIGlmIChydWxlcykKKyAgICAg
ICAgcnVsZSA9IFN0eWxlUnVsZU1lZGlhOjpjcmVhdGUobWVkaWEsICpydWxlcyk7CisgICAgZWxz
ZSB7CisgICAgICAgIFJ1bGVMaXN0IGVtcHR5UnVsZXM7CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1
bGVNZWRpYTo6Y3JlYXRlKG1lZGlhLCBlbXB0eVJ1bGVzKTsKKyAgICB9CiAgICAgU3R5bGVSdWxl
TWVkaWEqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CiAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVs
ZS5yZWxlYXNlKCkpOworICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVk
ZWQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC05NDI0LDE0ICs5NDIxLDI1IEBAIENT
U1BhcnNlcjo6UnVsZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlUnVsZUxpc3QoKQogICAgIHJldHVy
biBsaXN0UHRyOwogfQogCit2b2lkIENTU1BhcnNlcjo6cHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1Nv
dXJjZVRyZWVJZk5lZWRlZCgpCit7CisgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtYXJrUnVsZUJvZHlFbmQoKTsKKyAgICBSZWZQdHI8Q1NT
UnVsZVNvdXJjZURhdGE+IHJ1bGUgPSBwb3BSdWxlRGF0YSgpOworICAgIGZpeFVucGFyc2VkUHJv
cGVydHlSYW5nZXMocnVsZS5nZXQoKSk7CisgICAgYWRkTmV3UnVsZVRvU291cmNlVHJlZShydWxl
LnJlbGVhc2UoKSk7Cit9CisKIHZvaWQgQ1NTUGFyc2VyOjphZGROZXdSdWxlVG9Tb3VyY2VUcmVl
KFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGUpCiB7CiAgICAgLy8gUHJlY29uZGl0
aW9uOiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKS4KICAgICBpZiAoIW1fcnVsZVNvdXJjZURh
dGFSZXN1bHQpCiAgICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHRlbXBvcmFy
aWx5IGJ1aWxkcyBhIGZsYXQgc3R5bGUgcnVsZSBkYXRhIGxpc3QsIHRvIGF2b2lkIHRoZSBjbGll
bnQgY29kZSBicmVha2FnZS4KLSAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0LT5hcHBlbmQocnVs
ZSk7CisgICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSkKKyAgICAgICAg
bV9ydWxlU291cmNlRGF0YVJlc3VsdC0+YXBwZW5kKHJ1bGUpOworICAgIGVsc2UKKyAgICAgICAg
bV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5jaGlsZFJ1bGVzLmFwcGVuZChydWxlKTsK
IH0KIAogUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gQ1NTUGFyc2VyOjpwb3BSdWxlRGF0
YSgpCkBAIC05NDU1LDEzICs5NDYzLDEzIEBAIFN0eWxlUnVsZUtleWZyYW1lcyogQ1NTUGFyc2Vy
OjpjcmVhdGVLZXlmcmFtZXNSdWxlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0CiAgICAg
cnVsZS0+c2V0TmFtZShuYW1lKTsKICAgICBTdHlsZVJ1bGVLZXlmcmFtZXMqIHJ1bGVQdHIgPSBy
dWxlLmdldCgpOwogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAg
ICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CiAgICAgcmV0dXJu
IHJ1bGVQdHI7CiB9CiAKIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxl
KFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9ycykKIHsKICAgICBT
dHlsZVJ1bGUqIHJlc3VsdCA9IDA7Ci0gICAgbWFya1J1bGVCb2R5RW5kKCk7CiAgICAgaWYgKHNl
bGVjdG9ycykgewogICAgICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNl
RGVjbGFyYXRpb25zID0gZmFsc2U7CiAgICAgICAgIFJlZlB0cjxTdHlsZVJ1bGU+IHJ1bGUgPSBT
dHlsZVJ1bGU6OmNyZWF0ZShtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIpOwpAQCAtOTQ3MSwxOCAr
OTQ3OSw3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3Rv
cjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlCiAgICAgICAgIHJ1bGUtPnNldFByb3Bl
cnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgpKTsKICAgICAgICAgcmVzdWx0ID0gcnVsZS5n
ZXQoKTsKICAgICAgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwotICAg
ICAgICBpZiAoaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IGN1cnJlbnRSdWxlRGF0YSA9IHBvcFJ1bGVEYXRhKCk7Ci0gICAg
ICAgICAgICBjdXJyZW50UnVsZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Ug
PSBtX3J1bGVCb2R5UmFuZ2U7Ci0gICAgICAgICAgICBjdXJyZW50UnVsZURhdGEtPnNlbGVjdG9y
TGlzdFJhbmdlID0gbV9zZWxlY3Rvckxpc3RSYW5nZTsKLSAgICAgICAgICAgIGZpeFVucGFyc2Vk
UHJvcGVydHlSYW5nZXMoY3VycmVudFJ1bGVEYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGFkZE5l
d1J1bGVUb1NvdXJjZVRyZWUoY3VycmVudFJ1bGVEYXRhLnJlbGVhc2UoKSk7Ci0gICAgICAgICAg
ICBtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmIChpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpIHsKLSAgICAgICAgcmVzZXRTZWxlY3Rv
ckxpc3RNYXJrcygpOwotICAgICAgICByZXNldFJ1bGVCb2R5TWFya3MoKTsKKyAgICAgICAgcHJv
Y2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOwogICAgIH0KICAgICBjbGVh
clByb3BlcnRpZXMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTUwOSw2ICs5NTA2LDcgQEAg
U3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQogICAgIGNsZWFy
UHJvcGVydGllcygpOwogICAgIFN0eWxlUnVsZUZvbnRGYWNlKiByZXN1bHQgPSBydWxlLmdldCgp
OwogICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAgICBwcm9jZXNz
QW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtOTU4OCw2ICs5NTg2LDcgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVh
dGVQYWdlUnVsZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWMKICAgICAg
ICAgcnVsZS0+c2V0UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwogICAgICAg
ICBwYWdlUnVsZSA9IHJ1bGUuZ2V0KCk7CiAgICAgICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1
bGUucmVsZWFzZSgpKTsKKyAgICAgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJ
Zk5lZWRlZCgpOwogICAgIH0KICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICByZXR1cm4gcGFn
ZVJ1bGU7CkBAIC05NjEwLDYgKzk2MDksOCBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNy
ZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogcgogCiAg
ICAgU3R5bGVSdWxlUmVnaW9uKiByZXN1bHQgPSByZWdpb25SdWxlLmdldCgpOwogICAgIG1fcGFy
c2VkUnVsZXMuYXBwZW5kKHJlZ2lvblJ1bGUucmVsZWFzZSgpKTsKKyAgICBpZiAoaXNFeHRyYWN0
aW5nU291cmNlRGF0YSgpKQorICAgICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKENTU1J1bGVT
b3VyY2VEYXRhOjpjcmVhdGVVbmtub3duKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTk2OTEsMTIgKzk2OTIsMTQgQEAgdm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RNZWRpYUxpbmUo
TWVkaWFRdWVyeVNldCogbWVkaWEpCiAKIHZvaWQgQ1NTUGFyc2VyOjpmaXhVbnBhcnNlZFByb3Bl
cnR5UmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRhKiBydWxlRGF0YSkKIHsKKyAgICBpZiAoIXJ1bGVE
YXRhLT5zdHlsZVNvdXJjZURhdGEpCisgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8Q1NTUHJv
cGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gcnVsZURhdGEtPnN0eWxlU291cmNlRGF0
YS0+cHJvcGVydHlEYXRhOwogICAgIHVuc2lnbmVkIHNpemUgPSBwcm9wZXJ0eURhdGEuc2l6ZSgp
OwogICAgIGlmICghc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdW5zaWduZWQgc3R5bGVT
dGFydCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0Owor
ICAgIHVuc2lnbmVkIHN0eWxlU3RhcnQgPSBydWxlRGF0YS0+cnVsZUJvZHlSYW5nZS5zdGFydDsK
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG1fZGF0YVN0YXJ0LmdldCgpICsgbV9wYXJz
ZWRUZXh0UHJlZml4TGVuZ3RoOwogICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogbmV4dERhdGEg
PSAmKHByb3BlcnR5RGF0YS5hdCgwKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewpAQCAtOTcxMCw3ICs5NzEzLDcgQEAgdm9pZCBDU1NQYXJzZXI6OmZpeFVucGFy
c2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVEYXRhKQogCiAgICAgICAg
IHVuc2lnbmVkIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0OwogICAgICAgICBpZiAoIW5leHREYXRh
KQotICAgICAgICAgICAgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS0+c3R5bGVT
b3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQgLSAxOworICAgICAgICAgICAgcHJvcGVydHlF
bmRJblN0eWxlU2hlZXQgPSBydWxlRGF0YS0+cnVsZUJvZHlSYW5nZS5lbmQgLSAxOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQg
KyBuZXh0RGF0YS0+cmFuZ2Uuc3RhcnQgLSAxOwogCkBAIC05NzM0LDE3ICs5NzM3LDIwIEBAIHZv
aWQgQ1NTUGFyc2VyOjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKENTU1J1bGVTb3VyY2VEYXRh
KiBydWxlRGF0YSkKICAgICB9CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0
U3RhcnQoKQordm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJj
ZURhdGE6OlR5cGUgcnVsZVR5cGUpCiB7CiAgICAgaWYgKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRh
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0gbV90
b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBkYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZShydWxlVHlwZSk7CisgICAgZGF0
YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0
KCk7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+YXBwZW5kKGRhdGEucmVsZWFzZSgpKTsK
IH0KIAotdm9pZCBDU1NQYXJzZXI6Om1hcmtTZWxlY3Rvckxpc3RFbmQoKQordm9pZCBDU1NQYXJz
ZXI6Om1hcmtSdWxlSGVhZGVyRW5kKCkKIHsKICAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURh
dGEoKSkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9jdXJyZW50UnVsZURhdGFTdGFj
ay0+aXNFbXB0eSgpKTsKICAgICBVQ2hhciogbGlzdEVuZCA9IG1fdG9rZW5TdGFydDsKICAgICB3
aGlsZSAobGlzdEVuZCA+IG1fZGF0YVN0YXJ0LmdldCgpICsgMSkgewogICAgICAgICBpZiAoaXNI
VE1MU3BhY2UoKihsaXN0RW5kIC0gMSkpKQpAQCAtOTc1MiwxMCArOTc1OCw3IEBAIHZvaWQgQ1NT
UGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gbGlzdEVuZCAtIG1f
ZGF0YVN0YXJ0LmdldCgpOwotICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gZGF0YSA9IENT
U1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKLSAgICBkYXRhLT5zdHlsZVNvdXJjZURhdGEgPSBD
U1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2st
PmFwcGVuZChkYXRhKTsKKyAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnJ1bGVI
ZWFkZXJSYW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiB9CiAKIHZvaWQg
Q1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCkBAIC05NzY1LDMwICs5NzY4LDMzIEBAIHZv
aWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
bV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7CiAgICAgaWYgKCptX3Rva2VuU3RhcnQg
PT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcg
YnJhY2UuCi0gICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5zdGFydCkKLSAgICAgICAg
bV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gb2Zmc2V0OwotICAgIG1faW5TdHlsZVJ1bGVPckRlY2xh
cmF0aW9uID0gdHJ1ZTsKKyAgICBBU1NFUlQoIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1w
dHkoKSk7CisgICAgbV9jdXJyZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxlQm9keVJhbmdl
LnN0YXJ0ID0gb2Zmc2V0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVCb2R5RW5kKCkK
IHsKLSAgICBpZiAoIWlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIC8vIFByZWNvbmRpdGlvbjogKCFpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkpCiAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gbV90b2tlblN0YXJ0IC0gbV9kYXRhU3RhcnQuZ2V0KCk7Ci0gICAgaWYg
KG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5lbmQpCi0gICAgICAgIG1fcnVsZUJvZHlSYW5nZS5l
bmQgPSBvZmZzZXQ7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5pc0VtcHR5
KCkpOworICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+cnVsZUJvZHlSYW5nZS5l
bmQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlTdGFydCgpCiB7
Ci0gICAgaWYgKCFtX2luU3R5bGVSdWxlT3JEZWNsYXJhdGlvbikKKyAgICBpZiAoIWlzRXh0cmFj
dGluZ1NvdXJjZURhdGEoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2N1cnJlbnRSdWxl
RGF0YVN0YWNrLT5pc0VtcHR5KCkgfHwgIW1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmxhc3QoKS0+
c3R5bGVTb3VyY2VEYXRhKQogICAgICAgICByZXR1cm47CisKICAgICBtX3Byb3BlcnR5UmFuZ2Uu
c3RhcnQgPSBtX3Rva2VuU3RhcnQgLSBtX2RhdGFTdGFydC5nZXQoKTsKIH0KIAogdm9pZCBDU1NQ
YXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9w
ZXJ0eVBhcnNlZCkKIHsKLSAgICBpZiAoIW1faW5TdHlsZVJ1bGVPckRlY2xhcmF0aW9uKQorICAg
IGlmICghaXNFeHRyYWN0aW5nU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSB8fCAhbV9jdXJyZW50UnVsZURhdGFT
dGFjay0+bGFzdCgpLT5zdHlsZVNvdXJjZURhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVu
c2lnbmVkIG9mZnNldCA9IG1fdG9rZW5TdGFydCAtIG1fZGF0YVN0YXJ0LmdldCgpOwpAQCAtOTgw
OSw4ICs5ODE1LDkgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1w
b3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkKICAgICAgICAgU3RyaW5nIG5hbWUg
PSBwcm9wZXJ0eVN0cmluZy5sZWZ0KGNvbG9uSW5kZXgpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAg
ICAgICBTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0eVN0cmluZy5zdWJzdHJpbmcoY29sb25JbmRleCAr
IDEsIHByb3BlcnR5U3RyaW5nLmxlbmd0aCgpKS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAg
Ly8gVGhlIHByb3BlcnR5IHJhbmdlIGlzIHJlbGF0aXZlIHRvIHRoZSBkZWNsYXJhdGlvbiBzdGFy
dCBvZmZzZXQuCisgICAgICAgIFNvdXJjZVJhbmdlJiB0b3BSdWxlQm9keVJhbmdlID0gbV9jdXJy
ZW50UnVsZURhdGFTdGFjay0+bGFzdCgpLT5ydWxlQm9keVJhbmdlOwogICAgICAgICBtX2N1cnJl
bnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFw
cGVuZCgKLSAgICAgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1lLCB2YWx1ZSwgaXNJ
bXBvcnRhbnRGb3VuZCwgaXNQcm9wZXJ0eVBhcnNlZCwgU291cmNlUmFuZ2Uoc3RhcnQgLSBtX3J1
bGVCb2R5UmFuZ2Uuc3RhcnQsIGVuZCAtIG1fcnVsZUJvZHlSYW5nZS5zdGFydCkpKTsKKyAgICAg
ICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1lLCB2YWx1ZSwgaXNJbXBvcnRhbnRGb3Vu
ZCwgaXNQcm9wZXJ0eVBhcnNlZCwgU291cmNlUmFuZ2Uoc3RhcnQgLSB0b3BSdWxlQm9keVJhbmdl
LnN0YXJ0LCBlbmQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0KSkpOwogICAgIH0KICAgICByZXNl
dFByb3BlcnR5UmFuZ2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBmODlhOWZkYzY4
NjlhMGY3ZWEzMTBjMjQzZGRhMTJmNDBlNGM5OWY5Li4xNGE5OGUxZTM3MjE2NTMyNWU2ZjlkMWM5
YWRiOGI4NmQwZDk1MDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC03OCw3ICs3OCw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3RlbUNvbG9yKFJHQkEzMiYgY29sb3Is
IGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShpbnQgaWRlbnQs
IENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVy
dHlTZXQqLCBjb25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4sIFN0
eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOworICAgIGJvb2wgcGFyc2VEZWNs
YXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiwgY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4sIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwog
ICAgIFBhc3NPd25QdHI8TWVkaWFRdWVyeT4gcGFyc2VNZWRpYVF1ZXJ5KGNvbnN0IFN0cmluZyYp
OwogCiAgICAgdm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQgPSBmYWxzZSk7CkBAIC0zMjQsMjcg
KzMyNCwyMCBAQCBwdWJsaWM6CiAKICAgICAvLyB0b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0YQog
ICAgIHNpemVfdCBtX3BhcnNlZFRleHRQcmVmaXhMZW5ndGg7Ci0gICAgYm9vbCBtX2luU3R5bGVS
dWxlT3JEZWNsYXJhdGlvbjsKLSAgICBTb3VyY2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOwot
ICAgIFNvdXJjZVJhbmdlIG1fcnVsZUJvZHlSYW5nZTsKICAgICBTb3VyY2VSYW5nZSBtX3Byb3Bl
cnR5UmFuZ2U7CiAgICAgT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gbV9jdXJyZW50UnVsZURh
dGFTdGFjazsKICAgICBSdWxlU291cmNlRGF0YUxpc3QqIG1fcnVsZVNvdXJjZURhdGFSZXN1bHQ7
CiAKICAgICB2b2lkIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEq
KTsKLSAgICB2b2lkIG1hcmtTdHlsZVJ1bGVIZWFkZXJTdGFydCgpOworICAgIHZvaWQgbWFya1J1
bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6VHlwZSk7CiAgICAgdm9pZCBtYXJrUnVs
ZUhlYWRlckVuZCgpOwotCi0gICAgdm9pZCBtYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKLSAgICB2
b2lkIG1hcmtTZWxlY3Rvckxpc3RFbmQoKTsKICAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0KCk7
CiAgICAgdm9pZCBtYXJrUnVsZUJvZHlFbmQoKTsKICAgICB2b2lkIG1hcmtQcm9wZXJ0eVN0YXJ0
KCk7CiAgICAgdm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29s
IGlzUHJvcGVydHlQYXJzZWQpOworICAgIHZvaWQgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJj
ZVRyZWVJZk5lZWRlZCgpOwogICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNlVHJlZShQYXNzUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPik7CiAgICAgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gcG9wUnVsZURhdGEoKTsKLSAgICB2b2lkIHJlc2V0U2VsZWN0b3JMaXN0TWFya3MoKSB7IG1f
c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IDA7IH0K
LSAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0g
bV9ydWxlQm9keVJhbmdlLmVuZCA9IDA7IH0KICAgICB2b2lkIHJlc2V0UHJvcGVydHlSYW5nZSgp
IHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLmVuZCA9IFVJTlRfTUFY
OyB9CiAgICAgYm9vbCBpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gISFt
X2N1cnJlbnRSdWxlRGF0YVN0YWNrOyB9CiAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCmluZGV4IGJhNjc2ZWUzMzhk
Y2MyOTMyYThiMWU0ZDNkZDRhNzIyOTg5MjFmMWEuLjY5ZWU5NGRhMDc1ODdkYmZiOGIxMzk2ZDJm
YjFlZDhmMjRiMmZjMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eVNvdXJjZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VE
YXRhLmgKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBT
dHlsZVJ1bGU7CitjbGFzcyBTdHlsZVJ1bGVCYXNlOwogCiBzdHJ1Y3QgU291cmNlUmFuZ2Ugewog
ICAgIFNvdXJjZVJhbmdlKCk7CkBAIC03OCw4ICs3OCw2IEBAIHN0cnVjdCBDU1NTdHlsZVNvdXJj
ZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NTdHlsZVNvdXJjZURhdGE+IHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNvdXJjZURhdGEoKSk7CiAgICAgfQogCi0gICAg
Ly8gUmFuZ2Ugb2YgdGhlIHN0eWxlIHRleHQgaW4gdGhlIGVuY2xvc2luZyBzb3VyY2UuCi0gICAg
U291cmNlUmFuZ2Ugc3R5bGVCb2R5UmFuZ2U7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNl
RGF0YT4gcHJvcGVydHlEYXRhOwogfTsKIApAQCAtODcsMTYgKzg1LDQ4IEBAIHN0cnVjdCBDU1NS
dWxlU291cmNlRGF0YTsKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
PiBSdWxlU291cmNlRGF0YUxpc3Q7CiAKIHN0cnVjdCBDU1NSdWxlU291cmNlRGF0YSA6IHB1Ymxp
YyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRhPiB7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZSgpCisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVU5L
Tk9XTl9SVUxFLAorICAgICAgICBTVFlMRV9SVUxFLAorICAgICAgICBDSEFSU0VUX1JVTEUsCisg
ICAgICAgIElNUE9SVF9SVUxFLAorICAgICAgICBNRURJQV9SVUxFLAorICAgICAgICBGT05UX0ZB
Q0VfUlVMRSwKKyAgICAgICAgUEFHRV9SVUxFLAorICAgICAgICBLRVlGUkFNRVNfUlVMRQorICAg
IH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3JlYXRlKFR5
cGUgdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUnVsZVNvdXJj
ZURhdGEoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUnVsZVNvdXJjZURhdGEo
dHlwZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRh
PiBjcmVhdGVVbmtub3duKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NT
UnVsZVNvdXJjZURhdGEoVU5LTk9XTl9SVUxFKSk7CisgICAgfQorCisgICAgQ1NTUnVsZVNvdXJj
ZURhdGEoVHlwZSB0eXBlKQorICAgICAgICA6IHR5cGUodHlwZSkKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlID09IFNUWUxFX1JVTEUgfHwgdHlwZSA9PSBGT05UX0ZBQ0VfUlVMRSB8fCB0eXBlID09
IFBBR0VfUlVMRSkKKyAgICAgICAgICAgIHN0eWxlU291cmNlRGF0YSA9IENTU1N0eWxlU291cmNl
RGF0YTo6Y3JlYXRlKCk7CisgICAgfQorCisgICAgVHlwZSB0eXBlOworCiAgICAgLy8gUmFuZ2Ug
b2YgdGhlIHNlbGVjdG9yIGxpc3QgaW4gdGhlIGVuY2xvc2luZyBzb3VyY2UuCi0gICAgU291cmNl
UmFuZ2Ugc2VsZWN0b3JMaXN0UmFuZ2U7CisgICAgU291cmNlUmFuZ2UgcnVsZUhlYWRlclJhbmdl
OworCisgICAgLy8gUmFuZ2Ugb2YgdGhlIHJ1bGUgYm9keSAoZS5nLiBzdHlsZSB0ZXh0IGZvciBz
dHlsZSBydWxlcykgaW4gdGhlIGVuY2xvc2luZyBzb3VyY2UuCisgICAgU291cmNlUmFuZ2UgcnVs
ZUJvZHlSYW5nZTsKKworICAgIC8vIE9ubHkgZm9yIENTU1N0eWxlUnVsZXMsIENTU0ZvbnRGYWNl
UnVsZXMsIGFuZCBDU1NQYWdlUnVsZXMuCiAgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4g
c3R5bGVTb3VyY2VEYXRhOworCisgICAgLy8gT25seSBmb3IgQ1NTTWVkaWFSdWxlcy4KKyAgICBS
dWxlU291cmNlRGF0YUxpc3QgY2hpbGRSdWxlczsKIH07Ci10eXBlZGVmIEhhc2hNYXA8U3R5bGVS
dWxlKiwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+IFN0eWxlUnVsZVJhbmdlTWFwOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCBhNmZmMGRiZjhjMmFlY2FhNWEwZTkwNDQ0Yjc3
ODdmOGJlMzc5NjRkLi4zY2Q5MTUwZjYzMDliYTBjOWE4Yjg5NmYzMjg4NGM5N2RmMjc4MzY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3Bw
CkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTdHls
ZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiU3R5bGVSdWxl
SW1wb3J0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiU3R5
bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgiCkBAIC02
MSw2ICs2Miw3IEBACiAKIHVzaW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpBcnJheTsKIHVzaW5n
IFdlYkNvcmU6OlJ1bGVTb3VyY2VEYXRhTGlzdDsKK3VzaW5nIFdlYkNvcmU6OkNTU1J1bGVTb3Vy
Y2VEYXRhOwogCiBjbGFzcyBQYXJzZWRTdHlsZVNoZWV0IHsKIHB1YmxpYzoKQEAgLTczLDcgKzc1
LDcgQEAgcHVibGljOgogICAgIFJ1bGVTb3VyY2VEYXRhTGlzdCogc291cmNlRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlRGF0YS5nZXQoKTsgfQogICAgIHZvaWQgc2V0U291cmNlRGF0YShQ
YXNzT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4pOwogICAgIGJvb2wgaGFzU291cmNlRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRGF0YTsgfQotICAgIFJlZlB0cjxXZWJDb3JlOjpDU1NS
dWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Cisg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFB
dCh1bnNpZ25lZCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTk3LDEyICs5OSwzMyBAQCB2b2lk
IFBhcnNlZFN0eWxlU2hlZXQ6OnNldFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHNldFNv
dXJjZURhdGEobnVsbHB0cik7CiB9CiAKK3N0YXRpYyB2b2lkIGZsYXR0ZW5Tb3VyY2VEYXRhKFJ1
bGVTb3VyY2VEYXRhTGlzdCogZGF0YUxpc3QsIFJ1bGVTb3VyY2VEYXRhTGlzdCogdGFyZ2V0KQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YUxpc3QtPnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mIGRhdGEgPSBkYXRhTGlzdC0+YXQoaSk7
CisgICAgICAgIGlmIChkYXRhLT50eXBlID09IENTU1J1bGVTb3VyY2VEYXRhOjpTVFlMRV9SVUxF
KQorICAgICAgICAgICAgdGFyZ2V0LT5hcHBlbmQoZGF0YSk7CisgICAgICAgIGVsc2UgaWYgKGRh
dGEtPnR5cGUgPT0gQ1NTUnVsZVNvdXJjZURhdGE6Ok1FRElBX1JVTEUpCisgICAgICAgICAgICBm
bGF0dGVuU291cmNlRGF0YSgmZGF0YS0+Y2hpbGRSdWxlcywgdGFyZ2V0KTsKKyAgICB9Cit9CisK
IHZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0U291cmNlRGF0YShQYXNzT3duUHRyPFJ1bGVTb3Vy
Y2VEYXRhTGlzdD4gc291cmNlRGF0YSkKIHsKLSAgICBtX3NvdXJjZURhdGEgPSBzb3VyY2VEYXRh
OworICAgIGlmICghc291cmNlRGF0YSkgeworICAgICAgICBtX3NvdXJjZURhdGEuY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc291cmNlRGF0YSA9IGFkb3B0UHRyKG5l
dyBSdWxlU291cmNlRGF0YUxpc3QoKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBv
cmFyeSBzb2x1dGlvbiB0byByZXRhaW4gdGhlIG9yaWdpbmFsIGZsYXQgc291cmNlRGF0YSBzdHJ1
Y3R1cmUKKyAgICAvLyBjb250YWluaW5nIG9ubHkgc3R5bGUgcnVsZXMsIGV2ZW4gdGhvdWdoIENT
U1BhcnNlciBub3cgcHJvdmlkZXMgdGhlIGZ1bGwgcnVsZSBzb3VyY2UgZGF0YSB0cmVlLgorICAg
IC8vIE5vcm1hbGx5LCB3ZSBzaG91bGQganVzdCBhc3NpZ24gbV9zb3VyY2VEYXRhID0gc291cmNl
RGF0YTsKKyAgICBmbGF0dGVuU291cmNlRGF0YShzb3VyY2VEYXRhLmdldCgpLCBtX3NvdXJjZURh
dGEuZ2V0KCkpOwogfQogCi1SZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IFBhcnNl
ZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CitQYXNz
UmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpydWxl
U291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIGlmICghaGFzU291cmNl
RGF0YSgpIHx8IGluZGV4ID49IG1fc291cmNlRGF0YS0+c2l6ZSgpKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTI3MSw3ICsyOTQsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0
eWxlPiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbgogCiAgICAgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gbV9wYXJlbnRTdHlsZVNoZWV0ID8g
bV9wYXJlbnRTdHlsZVNoZWV0LT5ydWxlU291cmNlRGF0YUZvcihtX3N0eWxlLmdldCgpKSA6IDA7
CiAgICAgaWYgKHNvdXJjZURhdGEpCi0gICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3Vy
Y2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdl
KSk7CisgICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3Vy
Y2VEYXRhLT5ydWxlQm9keVJhbmdlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
IH0KQEAgLTMxNCwxMCArMzM3LDEwIEBAIGJvb2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5
VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVRleHQsCiAKICAgICBp
ZiAocHJvcGVydHlUZXh0LnN0cmlwV2hpdGVTcGFjZSgpLmxlbmd0aCgpKSB7CiAgICAgICAgIFJl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wTXV0YWJsZVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNl
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHNvdXJjZURh
dGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOworICAgICAgICBSZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKENTU1J1
bGVTb3VyY2VEYXRhOjpTVFlMRV9SVUxFKTsKICAgICAgICAgQ1NTUGFyc2VyIHAoQ1NTU3RyaWN0
TW9kZSk7CiAgICAgICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxlLmdldCgp
LCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1c1Byb3BlcnR5TmFtZSArICI6IG5vbmUiLCBzb3Vy
Y2VEYXRhLCBtX3N0eWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmNvbnRlbnRzKCkpOwotICAgICAg
ICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJvcGVydHlEYXRhID0gc291cmNlRGF0
YS0+cHJvcGVydHlEYXRhOworICAgICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYg
cHJvcGVydHlEYXRhID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7
CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0eURhdGEuc2l6ZSgpOwog
CiAgICAgICAgIC8vIEF0IGxlYXN0IG9uZSBwcm9wZXJ0eSArIHRoZSBib2d1cyBwcm9wZXJ0eSBh
ZGRlZCBqdXN0IGFib3ZlIHNob3VsZCBiZSBwcmVzZW50LgpAQCAtMzU1LDcgKzM3OCw3IEBAIGJv
b2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eVRleHQsCiAgICAgICAgICpvbGRUZXh0ID0gYWxsUHJvcGVydGllcy5h
dChpbmRleCkucmF3VGV4dDsKICAgICAgICAgZWRpdG9yLnJlcGxhY2VQcm9wZXJ0eShpbmRleCwg
cHJvcGVydHlUZXh0KTsKICAgICB9IGVsc2UKLSAgICAgICAgZWRpdG9yLmluc2VydFByb3BlcnR5
KGluZGV4LCBwcm9wZXJ0eVRleHQsIHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVC
b2R5UmFuZ2UubGVuZ3RoKCkpOworICAgICAgICBlZGl0b3IuaW5zZXJ0UHJvcGVydHkoaW5kZXgs
IHByb3BlcnR5VGV4dCwgc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZS5sZW5ndGgoKSk7CiAKICAg
ICByZXR1cm4gYXBwbHlTdHlsZVRleHQoZWRpdG9yLnN0eWxlVGV4dCgpKTsKIH0KQEAgLTQxMyw3
ICs0MzYsNyBAQCBib29sIEluc3BlY3RvclN0eWxlOjpzdHlsZVRleHQoU3RyaW5nKiByZXN1bHQp
IGNvbnN0CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBT
b3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHls
ZUJvZHlSYW5nZTsKKyAgICBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+cnVs
ZUJvZHlSYW5nZTsKICAgICAqcmVzdWx0ID0gc3R5bGVTaGVldFRleHQuc3Vic3RyaW5nKGJvZHlS
YW5nZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC03NzEsNyArNzk0LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpz
ZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBjb25zdCBTdHJpbmcKICAg
ICB9CiAKICAgICBTdHJpbmcgc2hlZXRUZXh0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7
Ci0gICAgc2hlZXRUZXh0LnJlcGxhY2Uoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3Rh
cnQsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCAtIHNvdXJjZURhdGEtPnNlbGVj
dG9yTGlzdFJhbmdlLnN0YXJ0LCBzZWxlY3Rvcik7CisgICAgc2hlZXRUZXh0LnJlcGxhY2Uoc291
cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0LCBzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFu
Z2UubGVuZ3RoKCksIHNlbGVjdG9yKTsKICAgICBtX3BhcnNlZFN0eWxlU2hlZXQtPnNldFRleHQo
c2hlZXRUZXh0KTsKICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTgzMCw3ICs4NTMsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmRlbGV0ZVJ1
bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIH0KIAog
ICAgIFN0cmluZyBzaGVldFRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKLSAgICBz
aGVldFRleHQucmVtb3ZlKHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0LCBzb3Vy
Y2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCAtIHNvdXJjZURhdGEt
PnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ICsgMSk7CisgICAgc2hlZXRUZXh0LnJlbW92ZShzb3Vy
Y2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2Uu
ZW5kIC0gc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0ICsgMSk7CiAgICAgbV9wYXJz
ZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHNoZWV0VGV4dCk7CiAgICAgZmlyZVN0eWxlU2hlZXRDaGFu
Z2VkKCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05MTEsMTIgKzkzNCw4IEBAIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKENTCiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOwog
ICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAgc291cmNlRGF0YSA9IHJ1
bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOwotICAgIGlmIChzb3VyY2VEYXRhKSB7Ci0g
ICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4gc2VsZWN0b3JSYW5n
ZSA9IFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQotICAgICAgICAgICAg
LnNldFN0YXJ0KHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0KQotICAgICAgICAg
ICAgLnNldEVuZChzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOwotICAgICAgICBy
ZXN1bHQtPnNldFNlbGVjdG9yUmFuZ2Uoc2VsZWN0b3JSYW5nZS5yZWxlYXNlKCkpOwotICAgIH0K
KyAgICBpZiAoc291cmNlRGF0YSkKKyAgICAgICAgcmVzdWx0LT5zZXRTZWxlY3RvclJhbmdlKGJ1
aWxkU291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlKSk7CiAKICAg
ICBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+ID4gbWVkaWFBcnJheSA9
IEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPjo6Y3JlYXRlKCk7CiAKQEAgLTk0OCw3
ICs5NjcsNyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKAogICAgICAgICBTdHJpbmcgc2hlZXRU
ZXh0OwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBnZXRUZXh0KCZzaGVldFRleHQpOwogICAgICAg
ICBpZiAoc3VjY2VzcykgewotICAgICAgICAgICAgY29uc3QgU291cmNlUmFuZ2UmIGJvZHlSYW5n
ZSA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2U7CisgICAgICAg
ICAgICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291cmNlRGF0YS0+cnVsZUJvZHlS
YW5nZTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0Q3NzVGV4dChzaGVldFRleHQuc3Vic3RyaW5n
KGJvZHlSYW5nZS5zdGFydCwgYm9keVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCkpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTA5OCw5ICsxMTE3LDkgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjplbnN1cmVTb3VyY2VEYXRhKCkKIAogICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+
IG5ld1N0eWxlU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSgpOwogICAgIENTU1Bh
cnNlciBwKENTU1N0cmljdE1vZGUpOwotICAgIE93blB0cjxSdWxlU291cmNlRGF0YUxpc3Q+IHJh
bmdlc1ZlY3RvcihhZG9wdFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpKTsKLSAgICBwLnBh
cnNlU2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCks
IDAsIHJhbmdlc1ZlY3Rvci5nZXQoKSk7Ci0gICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRTb3Vy
Y2VEYXRhKHJhbmdlc1ZlY3Rvci5yZWxlYXNlKCkpOworICAgIE93blB0cjxSdWxlU291cmNlRGF0
YUxpc3Q+IHJ1bGVTb3VyY2VEYXRhUmVzdWx0ID0gYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VEYXRh
TGlzdCgpKTsKKyAgICBwLnBhcnNlU2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgbV9wYXJzZWRT
dHlsZVNoZWV0LT50ZXh0KCksIDAsIHJ1bGVTb3VyY2VEYXRhUmVzdWx0LmdldCgpKTsKKyAgICBt
X3BhcnNlZFN0eWxlU2hlZXQtPnNldFNvdXJjZURhdGEocnVsZVNvdXJjZURhdGFSZXN1bHQucmVs
ZWFzZSgpKTsKICAgICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNTb3VyY2VEYXRhKCk7
CiB9CiAKQEAgLTExNDQsOCArMTE2Myw4IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5
bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNl
RGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKLSAgICB1bnNpZ25lZCBib2R5U3RhcnQg
PSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0OwotICAg
IHVuc2lnbmVkIGJvZHlFbmQgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlLmVuZDsKKyAgICB1bnNpZ25lZCBib2R5U3RhcnQgPSBzb3VyY2VEYXRhLT5ydWxlQm9k
eVJhbmdlLnN0YXJ0OworICAgIHVuc2lnbmVkIGJvZHlFbmQgPSBzb3VyY2VEYXRhLT5ydWxlQm9k
eVJhbmdlLmVuZDsKICAgICBBU1NFUlQoYm9keVN0YXJ0IDw9IGJvZHlFbmQpOwogCiAgICAgU3Ry
aW5nIHRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKQEAgLTEzMjYsMTMgKzEzNDUs
MTEgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmVuc3VyZVBhcnNl
ZERhdGFSZWFkeSgpCiAgICAgaWYgKG1fcnVsZVNvdXJjZURhdGEpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgbV9ydWxlU291cmNlRGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUo
KTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVT
b3VyY2VEYXRhOjpjcmVhdGUoKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBnZXRTdHlsZUF0dHJpYnV0
ZVJhbmdlcygmc291cmNlRGF0YSk7CisgICAgbV9ydWxlU291cmNlRGF0YSA9IENTU1J1bGVTb3Vy
Y2VEYXRhOjpjcmVhdGUoQ1NTUnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpOworICAgIGJvb2wg
c3VjY2VzcyA9IGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKG1fcnVsZVNvdXJjZURhdGEuZ2V0KCkp
OwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9ydWxl
U291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gc291cmNlRGF0YS5yZWxlYXNlKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzNTIsMjAgKzEzNjksMjAgQEAgY29uc3QgU3RyaW5nJiBJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmVsZW1lbnRTdHlsZVRleHQoKSBjb25z
dAogICAgIHJldHVybiBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZSgic3R5bGUiKS5zdHJpbmcoKTsK
IH0KIAotYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmdldFN0eWxlQXR0
cmlidXRlUmFuZ2VzKFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiByZXN1bHQpIGNvbnN0Citi
b29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0U3R5bGVBdHRyaWJ1dGVS
YW5nZXMoQ1NTUnVsZVNvdXJjZURhdGEqIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoIW1fZWxl
bWVudC0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChtX3N0eWxlVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgKCpyZXN1bHQpLT5zdHlsZUJvZHlS
YW5nZS5zdGFydCA9IDA7Ci0gICAgICAgICgqcmVzdWx0KS0+c3R5bGVCb2R5UmFuZ2UuZW5kID0g
MDsKKyAgICAgICAgcmVzdWx0LT5ydWxlQm9keVJhbmdlLnN0YXJ0ID0gMDsKKyAgICAgICAgcmVz
dWx0LT5ydWxlQm9keVJhbmdlLmVuZCA9IDA7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wRGVjbGFyYXRpb24gPSBTdHlsZVBy
b3BlcnR5U2V0OjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXIgcChtX2VsZW1lbnQtPmRvY3VtZW50
KCkpOwotICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIG1fc3R5
bGVUZXh0LCAqcmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5j
b250ZW50cygpKTsKKyAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgp
LCBtX3N0eWxlVGV4dCwgcmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVl
dCgpLT5jb250ZW50cygpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggNTU1NTZhYmRjYjFlNzk5
MDc4ZTljZDcyNjFlY2FiMGYxYjFhMjc4Yi4uMGFmOWYzYzVhMWI4MjMyYTE4NzIwNmE0MmNhZGEx
MmE3ZjcwYmQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5oCkBAIC0yNzIsNyArMjcyLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBD
U1NTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZSgpIGNvbnN0OwogICAgIGNvbnN0IFN0cmlu
ZyYgZWxlbWVudFN0eWxlVGV4dCgpIGNvbnN0OwotICAgIGJvb2wgZ2V0U3R5bGVBdHRyaWJ1dGVS
YW5nZXMoUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCkgY29uc3Q7CisgICAgYm9v
bCBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhDU1NSdWxlU291cmNlRGF0YSogcmVzdWx0KSBjb25z
dDsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAgUmVmUHRyPENTU1J1bGVT
b3VyY2VEYXRhPiBtX3J1bGVTb3VyY2VEYXRhOwo=
</data>
<flag name="review"
          id="158325"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>