<?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>137190</bug_id>
          
          <creation_ts>2014-09-28 00:33:59 -0700</creation_ts>
          <short_desc>Web Inspector: InspectorValues should use references for out parameters</short_desc>
          <delta_ts>2014-09-29 20:30:57 -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</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037760</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-09-28 00:33:59 -0700</bug_when>
    <thetext>We never check for null, so...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037761</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-09-28 00:34:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/18480915&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037795</commentid>
    <comment_count>2</comment_count>
      <attachid>238822</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-09-28 14:40:11 -0700</bug_when>
    <thetext>Created attachment 238822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037796</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-28 14:41:48 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038026</commentid>
    <comment_count>4</comment_count>
      <attachid>238822</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-09-29 13:15:43 -0700</bug_when>
    <thetext>Comment on attachment 238822
Patch

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

r=me

&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:229
&gt; +    static bool asInteger(InspectorValue&amp; value, int&amp; output) { return value.asInteger(output); }
&gt; +    static bool asDouble(InspectorValue&amp; value, double&amp; output) { return value.asDouble(output); }
&gt; +    static bool asString(InspectorValue&amp; value, String&amp; output) { return value.asString(output); }
&gt; +    static bool asBoolean(InspectorValue&amp; value, bool&amp; output) { return value.asBoolean(output); }
&gt; +    static bool asObject(InspectorValue&amp; value, RefPtr&lt;InspectorObject&gt;&amp; output) { return value.asObject(output); }
&gt; +    static bool asArray(InspectorValue&amp; value, RefPtr&lt;InspectorArray&gt;&amp; output) { return value.asArray(output); }

Nit: &quot;const&quot; InspectorValue&amp; value

&gt; Source/JavaScriptCore/inspector/InspectorValues.cpp:334
&gt; +        output = &quot;&quot;;

Nit: We should use String() or emptyString() instead of &quot;&quot;.

&gt; Source/JavaScriptCore/inspector/InspectorValues.cpp:684
&gt; +            output.append(trueString, 4);

I think we can change all of these append(const char*, unsigned) into appendLiteral(const char*). Which will have the compiler computer the length and call append(const char*, unsigned) for us. But that could be done separately.

&gt; Source/JavaScriptCore/inspector/InspectorValues.cpp:765
&gt; +    return result;

Nit: .release()

&gt; Source/JavaScriptCore/inspector/InspectorValues.cpp:776
&gt; +    return result;

Nit: .release()

&gt; Source/JavaScriptCore/inspector/InspectorValues.h:87
&gt; +    static bool parseJSON(const String&amp; jsonInput, RefPtr&lt;InspectorValue&gt;&amp; output);

I liked the original parseJSON just fine. This seems fine though. Do you see an advantage?

&gt; Source/WebCore/inspector/InspectorIndexedDBAgent.cpp:340
&gt;      if (type == number) {
&gt;          double number;
&gt; -        if (!key-&gt;getDouble(&quot;number&quot;, &amp;number))
&gt; +        if (!key-&gt;getDouble(&quot;number&quot;, number))

I don&apos;t like the shadowing of variables.

outer scope: NeverDestroyed&lt;const String&gt; number(ASCIILiteral(&quot;number&quot;));
inner scope: double number;

But you are not changing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038055</commentid>
    <comment_count>5</comment_count>
      <attachid>238822</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-09-29 14:16:03 -0700</bug_when>
    <thetext>Comment on attachment 238822
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/InspectorValues.cpp:334
&gt;&gt; +        output = &quot;&quot;;
&gt; 
&gt; Nit: We should use String() or emptyString() instead of &quot;&quot;.

OK. (My next plan was to make ErrorString everywhere a reference, but this would of course completely clash with this patch)

&gt;&gt; Source/JavaScriptCore/inspector/InspectorValues.cpp:684
&gt;&gt; +            output.append(trueString, 4);
&gt; 
&gt; I think we can change all of these append(const char*, unsigned) into appendLiteral(const char*). Which will have the compiler computer the length and call append(const char*, unsigned) for us. But that could be done separately.

had never thought of it, but sure!

&gt;&gt; Source/JavaScriptCore/inspector/InspectorValues.h:87
&gt;&gt; +    static bool parseJSON(const String&amp; jsonInput, RefPtr&lt;InspectorValue&gt;&amp; output);
&gt; 
&gt; I liked the original parseJSON just fine. This seems fine though. Do you see an advantage?

I prefer the slightly more cumbersome outparam approach, because it forces callers to handle parse failure (or look suspicious not doing so).  This patch standardizes on that pattern (for object and array casts/gets, too).

&gt;&gt; Source/WebCore/inspector/InspectorIndexedDBAgent.cpp:340
&gt;&gt; +        if (!key-&gt;getDouble(&quot;number&quot;, number))
&gt; 
&gt; I don&apos;t like the shadowing of variables.
&gt; 
&gt; outer scope: NeverDestroyed&lt;const String&gt; number(ASCIILiteral(&quot;number&quot;));
&gt; inner scope: double number;
&gt; 
&gt; But you are not changing this.

yuck, i&apos;ll rename the literals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038140</commentid>
    <comment_count>6</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-09-29 20:30:57 -0700</bug_when>
    <thetext>Committed r174094: &lt;http://trac.webkit.org/changeset/174094&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238822</attachid>
            <date>2014-09-28 14:40:11 -0700</date>
            <delta_ts>2014-09-29 14:16:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137190-20140928143949.patch</filename>
            <type>text/plain</type>
            <size>84269</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NzE1ODY4YmRmZjkzZTNmYmRmNmRiOTA4MDBkNzgxZjc1MmIxZDBmLi4wZGVkZDlhYjIyOTg0NWFm
ZmM1NDlkNDIyNjNhM2FmZDhjYzAwYzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MiBAQAorMjAxNC0wOS0yOCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW5zcGVjdG9yVmFsdWVzIHNob3VsZCB1
c2UgcmVmZXJlbmNlcyBmb3Igb3V0IHBhcmFtZXRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzE5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSByZWZlcmVuY2VzIGZvciBvdXQgcGFyYW1ldGVy
cyBpbiBhc1R5cGUoKSBhbmQgZ2V0VHlwZSgpIG1ldGhvZHMuCisgICAgICAgIEFsc28gY29udmVy
dCB0byByZWZlcmVuY2VzIGluIHNvbWUgbWlzY2VsbGFuZW91cyBjb2RlIHdoZXJlIHdlIGRvbid0
CisgICAgICAgIGV4cGVjdCBvciBoYW5kbGUgbnVsbCB2YWx1ZXMuCisKKyAgICAgICAgUmVtb3Zl
IHZhcmlhbnRzIG9mIGFzT2JqZWN0KCkgYW5kIGFzQXJyYXkoKSB0aGF0IHJldHVybiBhIG51bGxh
YmxlIFJlZlB0ci4KKyAgICAgICAgTm93LCBjbGllbnQgY29kZSBpcyBmb3JjZWQgdG8gdXNlIG91
dCBwYXJhbWV0ZXJzIGFuZCBjaGVjayBmb3IgY2FzdCBmYWlsdXJlLgorCisgICAgICAgIElyb24g
b3V0IGNvbnRyb2wgZmxvdyBpbiBzb21lIGZ1bmN0aW9ucyBhbmQgZml4IHNvbWUgc3R5bGUgaXNz
dWVzLgorCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAg
KEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAg
IChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0KToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0QmFzZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0
QmFzZTo6bWFrZUV2YWxDYWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpp
bmplY3RlZFNjcmlwdEZvck9iamVjdElkKTogU2ltcGxpZnkgY29udHJvbCBmbG93LgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaCk6CisgICAgICAg
IChJbnNwZWN0b3I6OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpBc01l
dGhvZEJyaWRnZXM6OmFzSW50ZWdlcik6CisgICAgICAgIChJbnNwZWN0b3I6OkFzTWV0aG9kQnJp
ZGdlczo6YXNEb3VibGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJyaWRnZXM6OmFz
U3RyaW5nKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4p
OgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0KToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc0FycmF5KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6QXJyYXk8VD4+OjpydW50aW1lQ2FzdCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpBcnJh
eTxUPj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcDogVXNlIG1vcmUgYnktcmVmZXJlbmNlIG91dCBwYXJhbWV0ZXJz
LiBBZGQgbW9yZSBzcGFjaW5nLgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6
YXNCb29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6OmFzRG91Ymxl
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdlcik6CisgICAg
ICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjphc1N0cmluZyk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlOjphc1ZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU6OmFzQXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6cGFyc2VK
U09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6OnRvSlNPTlN0cmluZyk6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04pOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jvb2xlYW4pOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0RvdWJsZSk6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzSW50ZWdlcik6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvclN0cmluZzo6YXNTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0
b3JTdHJpbmc6OndyaXRlSlNPTik6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dEJhc2U6OmFzT2JqZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFz
ZTo6b3BlbkFjY2Vzc29ycyk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJh
c2U6OmdldEJvb2xlYW4pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNl
OjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpn
ZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpnZXRB
cnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNP
Tik6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6YXNBcnJheSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5QmFzZTo6d3JpdGVKU09OKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2wpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlV
cmwpOgorICAgICAgICAoSW5zcGVjdG9yOjpwYXJzZUxvY2F0aW9uKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludCk6CisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbik6Cisg
ICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5
cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAg
ICAoUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9l
bnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1w
bGF0ZXMucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiByZXBsYXkv
RW5jb2RlZFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjphc09iamVjdCk6
CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6YXNBcnJheSk6CisgICAgICAgIChKU0M6OkVu
Y29kZWRWYWx1ZTo6Y29udmVydFRvPGJvb2w+KToKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVl
Ojpjb252ZXJ0VG88ZG91YmxlPik6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6Y29udmVy
dFRvPGZsb2F0Pik6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6Y29udmVydFRvPGludDMy
X3Q+KToKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjpjb252ZXJ0VG88aW50NjRfdD4pOgor
ICAgICAgICAoSlNDOjpFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzx1aW50MzJfdD4pOgorICAgICAg
ICAoSlNDOjpFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzx1aW50NjRfdD4pOgorICAgICAgICAoSlND
OjpFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxTdHJpbmc+KToKKwogMjAxNC0wOS0yNiAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgZnVuY3Rpb24uYXJn
dW1lbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggM2NkMjY3YmE3YTQwMjc1MzFkMjQ3MDEyNzQzNDk4OTMwODk4
NWYwMi4uNjZjOTBjNzJjN2IwZmE5OWI2ZjcwMzc1ODRjYmQzYmVhZjZhNGYwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTA5LTI4ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53
YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbnNwZWN0b3JWYWx1ZXMg
c2hvdWxkIHVzZSByZWZlcmVuY2VzIGZvciBvdXQgcGFyYW1ldGVycworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTkwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgc29tZSBjYWxsIHNpdGVz
IHRvIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGNhc3Qgc3VjY2VzcywgYW5kIHNpbXBsaWZ5CisgICAg
ICAgIHNvbWUgZXhjZXB0aW9uYWwgY29udHJvbCBmbG93cy4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIG5vIGJlaGF2aW9yIGNoYW5nZWQuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29tbWFuZExp
bmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJSG9zdDo6aW5z
cGVjdEltcGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlUHNldWRvQ2xhc3NNYXNrKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbmZpZ0NvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cGVy
Zm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6aW5uZXJIaWdobGlnaHRRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDogVXNlIE5ldmVyRGVzdHJveWVkIGluc3RlYWQgb2YgREVQ
UkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50Ojpk
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JSZXBsYXlBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6cmVwbGF5VG9Qb3NpdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291
cmNlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6
d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVy
dGllcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpJbnNwZWN0b3JDU1NJZCk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wRnJvbUNvbnNvbGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisKIDIwMTQtMDktMjcgIEJlbmph
bWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhaW5pbmcgbXVs
dGlwbGUgOm50aC1jaGlsZCgpIGRvZXMgbm90IHdvcmsgcHJvcGVybHkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggMjUxODdm
YjRhYmU5NDBlMDQxZTcyYjhlZjJhODEzZThiNjdkOWE4YS4uOTY2OWNlMTg5YWZmMDcxZWJiMzAx
MGM3ZjVkZDg1MGE5NmRiODM0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmCiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKICAg
ICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsKICAgICBpZiAoIXJlc3VsdFZhbHVl
IHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok9iamVjdCkg
ewotICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAg
ICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCplcnJvclN0cmluZykpCiAgICAgICAgICAg
ICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0xNzIsOCArMTcyLDExIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjCiAgICAgaWYgKGhhZEV4Y2VwdGlvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByYXdSZXN1bHQgPSByLnRvSW5zcGVjdG9yVmFsdWUo
c2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmF3
UmVzdWx0KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3Q7CisgICAg
Ym9vbCBjYXN0U3VjY2VlZGVkID0gci50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpLT5h
c09iamVjdChyZXN1bHRPYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwg
Y2FzdFN1Y2NlZWRlZCk7CisKKyAgICByZXR1cm4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3Qp
OwogfQogCiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdGFibGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjb2x1bW5zKSBjb25z
dApAQCAtMTkyLDggKzE5NSwxMSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZQogICAgIGlmICho
YWRFeGNlcHRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmF3UmVzdWx0ID0gci50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkp
LT5hc09iamVjdCgpOwotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJhd1Jlc3VsdCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0T2JqZWN0OworICAgIGJvb2wgY2FzdFN1Y2Nl
ZWRlZCA9IHIudG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSgpKS0+YXNPYmplY3QocmVzdWx0
T2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQp
OworCisgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKIH0KIAogRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHQ6OmZpbmRPYmplY3RCeUlkKGNvbnN0IFN0
cmluZyYgb2JqZWN0SWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKaW5kZXggNzdiOGU5YjU1NDkzZjhmZTVj
NTIzNDIwOTc4YmI1OTU5NDU3NDc5NS4uNDlhMTFiZjliNmNhNGQ1YTIyMGEwODhjODg5NDcyMmIy
N2ZkMzI5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRCYXNlLmNwcApAQCAtMTI0LDI1ICsxMjQsMjUgQEAgdm9pZCBJbmplY3Rl
ZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIERlcHJl
Y2F0ZWQ6OlNjcmkKICAgICB9CiAKICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5zcGVjdG9y
VmFsdWU6OlR5cGU6OlN0cmluZykgewotICAgICAgICByZXN1bHQtPmFzU3RyaW5nKGVycm9yU3Ry
aW5nKTsKKyAgICAgICAgcmVzdWx0LT5hc1N0cmluZygqZXJyb3JTdHJpbmcpOwogICAgICAgICBB
U1NFUlQoZXJyb3JTdHJpbmctPmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdFBhaXIgPSByZXN1bHQtPmFzT2JqZWN0
KCk7Ci0gICAgaWYgKCFyZXN1bHRQYWlyKSB7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0UGFpcjsKKyAgICBpZiAoIXJlc3VsdC0+YXNPYmplY3QocmVzdWx0UGFpcikpIHsKICAg
ICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvcjogcmVzdWx0
IGlzIG5vdCBhbiBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iaiA9IHJlc3VsdFBhaXItPmdldE9iamVjdChBU0NJ
SUxpdGVyYWwoInJlc3VsdCIpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRP
YmplY3QgPSByZXN1bHRQYWlyLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSk7CiAg
ICAgYm9vbCB3YXNUaHJvd25WYWwgPSBmYWxzZTsKLSAgICBpZiAoIXJlc3VsdE9iaiB8fCAhcmVz
dWx0UGFpci0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoIndhc1Rocm93biIpLCAmd2FzVGhyb3du
VmFsKSkgeworICAgIGlmICghcmVzdWx0T2JqZWN0IHx8ICFyZXN1bHRQYWlyLT5nZXRCb29sZWFu
KEFTQ0lJTGl0ZXJhbCgid2FzVGhyb3duIiksIHdhc1Rocm93blZhbCkpIHsKICAgICAgICAgKmVy
cm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IGlzIG5vdCBh
IHBhaXIgb2YgdmFsdWUgYW5kIHdhc1Rocm93biBmbGFnIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAqb2JqZWN0UmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqKTsKKyAgICAqb2JqZWN0UmVz
dWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVu
dGltZUNhc3QocmVzdWx0T2JqZWN0KTsKICAgICAqd2FzVGhyb3duID0gd2FzVGhyb3duVmFsOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0TWFuYWdlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0TWFuYWdlci5jcHAKaW5kZXggYWRjY2NmYzY1MWVmNjBhYzgxMzU4OTM3OTg0NGZk
ZDBlMmU1M2UzNS4uOWE5MDE4YmRkODI5MTdhMzliMzA5NTNmMGY4NzQxODMyZjMxOTBmZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcApAQCAtOTQsMTUgKzk0LDE5IEBAIGludCBJbmplY3RlZFNjcmlwdE1h
bmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkKIAogSW5q
ZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBwYXJzZWRPYmplY3RJZCA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04ob2JqZWN0SWQpOwot
ICAgIGlmIChwYXJzZWRPYmplY3RJZCAmJiBwYXJzZWRPYmplY3RJZC0+dHlwZSgpID09IEluc3Bl
Y3RvclZhbHVlOjpUeXBlOjpPYmplY3QpIHsKLSAgICAgICAgbG9uZyBpbmplY3RlZFNjcmlwdElk
ID0gMDsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyc2VkT2JqZWN0SWQtPmFzT2JqZWN0KCkt
PmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpbmplY3RlZFNjcmlwdElkIiksICZpbmplY3RlZFNj
cmlwdElkKTsKLSAgICAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4gbV9pZFRv
SW5qZWN0ZWRTY3JpcHQuZ2V0KGluamVjdGVkU2NyaXB0SWQpOwotICAgIH0KKyAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE9iamVjdElkOworICAgIGlmICghSW5zcGVjdG9yVmFsdWU6
OnBhcnNlSlNPTihvYmplY3RJZCwgcGFyc2VkT2JqZWN0SWQpKQorICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKIAotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdDsKKyAgICBpZiAoIXBhcnNlZE9iamVjdElk
LT5hc09iamVjdChyZXN1bHRPYmplY3QpKQorICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQo
KTsKKworICAgIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCA9IDA7CisgICAgaWYgKCFyZXN1bHRPYmpl
Y3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpbmplY3RlZFNjcmlwdElkIiksIGluamVjdGVk
U2NyaXB0SWQpKQorICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKKworICAgIHJldHVy
biBtX2lkVG9JbmplY3RlZFNjcmlwdC5nZXQoaW5qZWN0ZWRTY3JpcHRJZCk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpkaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5jcHAKaW5kZXggYWYxYjhlNTNkNTJkODI4MjcxZjNmNjdiZDY4OWIxMzM4
YTljNjZlMS4uOWFiMjQ5MTQ5ZmJhM2EyYTA5MjQ3NjJmNDk0MmI2MTFmZDFkMDk4NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKQEAgLTc4LDE0ICs3OCwxNCBAQCB2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAg
ICAgUmVmPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAg
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpw
YXJzZUpTT04obWVzc2FnZSk7Ci0gICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7CisgICAgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlOworICAgIGlmICghSW5zcGVjdG9yVmFsdWU6
OnBhcnNlSlNPTihtZXNzYWdlLCBwYXJzZWRNZXNzYWdlKSkgewogICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKG51bGxwdHIsIFBhcnNlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTWVzc2FnZSBtdXN0
IGJlIGluIEpTT04gZm9ybWF0IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2Jq
ZWN0KCk7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVzc2FnZU9iamVjdDsKKyAgICBpZiAoIXBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KG1l
c3NhZ2VPYmplY3QpKSB7CiAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IobnVsbHB0ciwgSW52
YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9i
amVjdCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogICAgIH0KIAogICAgIGxvbmcgY2FsbElkID0gMDsKLSAgICBpZiAoIWNhbGxJZFZhbHVlLT5h
c0ludGVnZXIoJmNhbGxJZCkpIHsKKyAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc0ludGVnZXIoY2Fs
bElkKSkgewogICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIsIEludmFsaWRSZXF1
ZXN0LCBBU0NJSUxpdGVyYWwoIlRoZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRl
Z2VyIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKICAgICB9CiAKICAgICBTdHJpbmcgbWV0aG9kOwotICAgIGlmICghbWV0aG9kVmFsdWUtPmFz
U3RyaW5nKCZtZXRob2QpKSB7CisgICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcobWV0aG9k
KSkgewogICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0
LCBBU0NJSUxpdGVyYWwoIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3Ry
aW5nIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyogY29uc3QgY2FsbElkLCBDCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblZhbHVlVHlw
ZSwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBEZWZhdWx0VmFsdWVUeXBlPgotc3RhdGlj
IFJldHVyblZhbHVlVHlwZSBnZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9ycywgRGVmYXVsdFZhbHVlVHlwZSBkZWZhdWx0VmFsdWUsIGJvb2wgKCphc01l
dGhvZCkoSW5zcGVjdG9yVmFsdWUqLCBWYWx1ZVR5cGUqKSwgY29uc3QgY2hhciogdHlwZU5hbWUp
CitzdGF0aWMgUmV0dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzLCBEZWZhdWx0VmFsdWVUeXBlIGRlZmF1bHRWYWx1ZSwgYm9v
bCAoKmFzTWV0aG9kKShJbnNwZWN0b3JWYWx1ZSYsIFZhbHVlVHlwZSYpLCBjb25zdCBjaGFyKiB0
eXBlTmFtZSkKIHsKICAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOwogCkBAIC0yMDksNyArMjA5
LDcgQEAgc3RhdGljIFJldHVyblZhbHVlVHlwZSBnZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG4KICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAg
IH0KIAotICAgIGlmICghYXNNZXRob2QodmFsdWVJdGVyYXRvci0+dmFsdWUuZ2V0KCksICZ2YWx1
ZSkpIHsKKyAgICBpZiAoIWFzTWV0aG9kKCp2YWx1ZUl0ZXJhdG9yLT52YWx1ZSwgdmFsdWUpKSB7
CiAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJh
bWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgdHlwZU5hbWUpKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KQEAgLTIy
MSwxMiArMjIxLDEyIEBAIHN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVydHlWYWx1ZShJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuCiB9CiAKIHN0cnVjdCBBc01l
dGhvZEJyaWRnZXMgewotICAgIHN0YXRpYyBib29sIGFzSW50ZWdlcihJbnNwZWN0b3JWYWx1ZSog
dmFsdWUsIGludCogb3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNJbnRlZ2VyKG91dHB1dCk7IH0K
LSAgICBzdGF0aWMgYm9vbCBhc0RvdWJsZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUsIGRvdWJsZSog
b3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNEb3VibGUob3V0cHV0KTsgfQotICAgIHN0YXRpYyBi
b29sIGFzU3RyaW5nKEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgU3RyaW5nKiBvdXRwdXQpIHsgcmV0
dXJuIHZhbHVlLT5hc1N0cmluZyhvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wgYXNCb29sZWFu
KEluc3BlY3RvclZhbHVlKiB2YWx1ZSwgYm9vbCogb3V0cHV0KSB7IHJldHVybiB2YWx1ZS0+YXNC
b29sZWFuKG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc09iamVjdChJbnNwZWN0b3JWYWx1
ZSogdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVl
LT5hc09iamVjdChvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wgYXNBcnJheShJbnNwZWN0b3JW
YWx1ZSogdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG91dHB1dCkgeyByZXR1cm4gdmFs
dWUtPmFzQXJyYXkob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzSW50ZWdlcihJbnNwZWN0
b3JWYWx1ZSYgdmFsdWUsIGludCYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc0ludGVnZXIob3V0
cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzRG91YmxlKEluc3BlY3RvclZhbHVlJiB2YWx1ZSwg
ZG91YmxlJiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLmFzRG91YmxlKG91dHB1dCk7IH0KKyAgICBz
dGF0aWMgYm9vbCBhc1N0cmluZyhJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIFN0cmluZyYgb3V0cHV0
KSB7IHJldHVybiB2YWx1ZS5hc1N0cmluZyhvdXRwdXQpOyB9CisgICAgc3RhdGljIGJvb2wgYXNC
b29sZWFuKEluc3BlY3RvclZhbHVlJiB2YWx1ZSwgYm9vbCYgb3V0cHV0KSB7IHJldHVybiB2YWx1
ZS5hc0Jvb2xlYW4ob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzT2JqZWN0KEluc3BlY3Rv
clZhbHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIG91dHB1dCkgeyByZXR1cm4g
dmFsdWUuYXNPYmplY3Qob3V0cHV0KTsgfQorICAgIHN0YXRpYyBib29sIGFzQXJyYXkoSW5zcGVj
dG9yVmFsdWUmIHZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBvdXRwdXQpIHsgcmV0dXJu
IHZhbHVlLmFzQXJyYXkob3V0cHV0KTsgfQogfTsKIAogaW50IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmgKaW5kZXggYWEyMGE2YWYzNjRiMTYyM2E3MDkwZWRlODExOTNhYWI1Mzc0
OGM5NC4uMTQzZGVmODU3OWFjNDYwNjVlOTVmZDliMTI4NzE1MzNhYjA5YjM0MSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmgKQEAgLTIxNCw4ICsyMTQsOCBAQCBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6QXJyYXk8VD4+IHsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGltZUNh
c3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OwotICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+
YXNBcnJheSgmYXJyYXkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMp
OworICAgICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJh
eS5nZXQoKSk7CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRApAQCAtMjI3LDggKzIyNyw4IEBA
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpBcnJheTxUPj4gewogICAgIHN0YXRpYyB2
b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wg
Y2FzdFJlcyA9IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
Y2FzdFJlcywgY2FzdFJlcyk7CisgICAgICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5h
c0FycmF5KGFycmF5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5n
dGgoKTsgaSsrKQogICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoYXJyYXktPmdldChpKS5nZXQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGIyMDM5
NjE2YjU2M2MyMzFiZmU2ZmZiMWM4OWY0YTUwZDU0NDQ5ZjkuLmM2ZWE0OTJkZTU2ZjE1Nzk0NzEz
MWRjNDdiYjlmNjM0MDFjNzRjMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNjMsOCArNjQsMTAg
QEAgY29uc3QgY2hhciogY29uc3QgZmFsc2VTdHJpbmcgPSAiZmFsc2UiOwogYm9vbCBwYXJzZUNv
bnN0VG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hh
cioqIHRva2VuRW5kLCBjb25zdCBjaGFyKiB0b2tlbikKIHsKICAgICB3aGlsZSAoc3RhcnQgPCBl
bmQgJiYgKnRva2VuICE9ICdcMCcgJiYgKnN0YXJ0KysgPT0gKnRva2VuKyspIHsgfQorCiAgICAg
aWYgKCp0b2tlbiAhPSAnXDAnKQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAqdG9rZW5F
bmQgPSBzdGFydDsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTczLDE2ICs3NiwyMCBAQCBib29s
IHJlYWRJbnQoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hh
cioqIHRva2VuRW5kLCBib29sCiB7CiAgICAgaWYgKHN0YXJ0ID09IGVuZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgYm9vbCBoYXZlTGVhZGluZ1plcm8gPSAnMCcgPT0gKnN0YXJ0Owog
ICAgIGludCBsZW5ndGggPSAwOwogICAgIHdoaWxlIChzdGFydCA8IGVuZCAmJiAnMCcgPD0gKnN0
YXJ0ICYmICpzdGFydCA8PSAnOScpIHsKICAgICAgICAgKytzdGFydDsKICAgICAgICAgKytsZW5n
dGg7CiAgICAgfQorCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIGlmICghY2FuSGF2ZUxlYWRpbmdaZXJvcyAmJiBsZW5ndGggPiAxICYmIGhhdmVMZWFkaW5n
WmVybykKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgKnRva2VuRW5kID0gc3RhcnQ7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC05MywxMiArMTAwLDE0IEBAIGJvb2wgcGFyc2VOdW1iZXJU
b2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiog
dG9rZW5FCiAgICAgLy8gQWNjb3JkaW5nICAgdG8gUkZDNDYyNywgYSB2YWxpZCBudW1iZXIgaXM6
IFttaW51c10gaW50IFtmcmFjXSBbZXhwXQogICAgIGlmIChzdGFydCA9PSBlbmQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIFVDaGFyIGMgPSAqc3RhcnQ7CiAgICAgaWYgKCctJyA9PSBj
KQogICAgICAgICArK3N0YXJ0OwogCiAgICAgaWYgKCFyZWFkSW50KHN0YXJ0LCBlbmQsICZzdGFy
dCwgZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoc3RhcnQgPT0gZW5k
KSB7CiAgICAgICAgICp0b2tlbkVuZCA9IHN0YXJ0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTE0MCwxMSArMTQ5LDEzIEBAIGJvb2wgcmVhZEhleERpZ2l0cyhjb25zdCBVQ2hhciogc3RhcnQs
IGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQsCiB7CiAgICAgaWYgKGVu
ZCAtIHN0YXJ0IDwgZGlnaXRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGRpZ2l0czsgKytpKSB7CiAgICAgICAgIFVDaGFyIGMgPSAqc3RhcnQrKzsK
ICAgICAgICAgaWYgKCEoKCcwJyA8PSBjICYmIGMgPD0gJzknKSB8fCAoJ2EnIDw9IGMgJiYgYyA8
PSAnZicpIHx8ICgnQScgPD0gYyAmJiBjIDw9ICdGJykpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KKwogICAgICp0b2tlbkVuZCA9IHN0YXJ0OwogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtMTgzLDYgKzE5NCw3IEBAIGJvb2wgcGFyc2VTdHJpbmdUb2tlbihjb25zdCBVQ2hhciog
c3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KKwogICAgIHJldHVybiBmYWxzZTsKIH0K
IApAQCAtMjQ2LDYgKzI1OCw3IEBAIFRva2VuIHBhcnNlVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0
LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuU3RhcnQsCiAgICAgICAgICAg
ICByZXR1cm4gU1RSSU5HOwogICAgICAgICBicmVhazsKICAgICB9CisKICAgICByZXR1cm4gSU5W
QUxJRF9UT0tFTjsKIH0KIApAQCAtMjU3LDE2ICsyNzAsMTcgQEAgaW5saW5lIGludCBoZXhUb0lu
dChVQ2hhciBjKQogICAgICAgICByZXR1cm4gYyAtICdBJyArIDEwOwogICAgIGlmICgnYScgPD0g
YyAmJiBjIDw9ICdmJykKICAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKKwogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCi1ib29sIGRlY29kZVN0cmluZyhj
b25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZ0J1aWxkZXIqIG91dHB1
dCkKK2Jvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVu
ZCwgU3RyaW5nQnVpbGRlciYgb3V0cHV0KQogewogICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewog
ICAgICAgICBVQ2hhciBjID0gKnN0YXJ0Kys7CiAgICAgICAgIGlmICgnXFwnICE9IGMpIHsKLSAg
ICAgICAgICAgIG91dHB1dC0+YXBwZW5kKGMpOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChj
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGMgPSAqc3RhcnQr
KzsKQEAgLTMwOCwyNCArMzIyLDI4IEBAIGJvb2wgZGVjb2RlU3RyaW5nKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nQnVpbGRlciogb3V0cHV0KQogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIG91
dHB1dC0+YXBwZW5kKGMpOworICAgICAgICBvdXRwdXQuYXBwZW5kKGMpOwogICAgIH0KKwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIGRlY29kZVN0cmluZyhjb25zdCBVQ2hhciogc3RhcnQs
IGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyogb3V0cHV0KQorYm9vbCBkZWNvZGVTdHJpbmcoY29u
c3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIG91dHB1dCkKIHsKICAg
ICBpZiAoc3RhcnQgPT0gZW5kKSB7Ci0gICAgICAgICpvdXRwdXQgPSAiIjsKKyAgICAgICAgb3V0
cHV0ID0gIiI7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKwogICAgIGlmIChzdGFydCA+
IGVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgU3RyaW5nQnVpbGRlciBidWZmZXI7
CiAgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eShlbmQgLSBzdGFydCk7Ci0gICAgaWYgKCFkZWNv
ZGVTdHJpbmcoc3RhcnQsIGVuZCwgJmJ1ZmZlcikpCisgICAgaWYgKCFkZWNvZGVTdHJpbmcoc3Rh
cnQsIGVuZCwgYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICpvdXRwdXQgPSBi
dWZmZXIudG9TdHJpbmcoKTsKKworICAgIG91dHB1dCA9IGJ1ZmZlci50b1N0cmluZygpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0zNjAsNyArMzc4LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQs
IGNvbnMKICAgICB9CiAgICAgY2FzZSBTVFJJTkc6IHsKICAgICAgICAgU3RyaW5nIHZhbHVlOwot
ICAgICAgICBib29sIG9rID0gZGVjb2RlU3RyaW5nKHRva2VuU3RhcnQgKyAxLCB0b2tlbkVuZCAt
IDEsICZ2YWx1ZSk7CisgICAgICAgIGJvb2wgb2sgPSBkZWNvZGVTdHJpbmcodG9rZW5TdGFydCAr
IDEsIHRva2VuRW5kIC0gMSwgdmFsdWUpOwogICAgICAgICBpZiAoIW9rKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJlc3VsdCA9IEluc3BlY3RvclN0cmluZzo6Y3JlYXRl
KHZhbHVlKTsKQEAgLTQwMiw3ICs0MjAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBi
dWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29ucwogICAg
ICAgICAgICAgaWYgKHRva2VuICE9IFNUUklORykKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgICAgIFN0cmluZyBrZXk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZVN0
cmluZyh0b2tlblN0YXJ0ICsgMSwgdG9rZW5FbmQgLSAxLCAma2V5KSkKKyAgICAgICAgICAgIGlm
ICghZGVjb2RlU3RyaW5nKHRva2VuU3RhcnQgKyAxLCB0b2tlbkVuZCAtIDEsIGtleSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5k
OwogCkBAIC00NDQsMjUgKzQ2MiwyNSBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBidWls
ZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29ucwogICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1pbmxpbmUgYm9vbCBlc2NhcGVDaGFyKFVDaGFy
IGMsIFN0cmluZ0J1aWxkZXIqIGRzdCkKK2lubGluZSBib29sIGVzY2FwZUNoYXIoVUNoYXIgYywg
U3RyaW5nQnVpbGRlciYgZHN0KQogewogICAgIHN3aXRjaCAoYykgewotICAgIGNhc2UgJ1xiJzog
ZHN0LT5hcHBlbmQoIlxcYiIsIDIpOyBicmVhazsKLSAgICBjYXNlICdcZic6IGRzdC0+YXBwZW5k
KCJcXGYiLCAyKTsgYnJlYWs7Ci0gICAgY2FzZSAnXG4nOiBkc3QtPmFwcGVuZCgiXFxuIiwgMik7
IGJyZWFrOwotICAgIGNhc2UgJ1xyJzogZHN0LT5hcHBlbmQoIlxcciIsIDIpOyBicmVhazsKLSAg
ICBjYXNlICdcdCc6IGRzdC0+YXBwZW5kKCJcXHQiLCAyKTsgYnJlYWs7Ci0gICAgY2FzZSAnXFwn
OiBkc3QtPmFwcGVuZCgiXFxcXCIsIDIpOyBicmVhazsKLSAgICBjYXNlICciJzogZHN0LT5hcHBl
bmQoIlxcXCIiLCAyKTsgYnJlYWs7CisgICAgY2FzZSAnXGInOiBkc3QuYXBwZW5kKCJcXGIiLCAy
KTsgYnJlYWs7CisgICAgY2FzZSAnXGYnOiBkc3QuYXBwZW5kKCJcXGYiLCAyKTsgYnJlYWs7Cisg
ICAgY2FzZSAnXG4nOiBkc3QuYXBwZW5kKCJcXG4iLCAyKTsgYnJlYWs7CisgICAgY2FzZSAnXHIn
OiBkc3QuYXBwZW5kKCJcXHIiLCAyKTsgYnJlYWs7CisgICAgY2FzZSAnXHQnOiBkc3QuYXBwZW5k
KCJcXHQiLCAyKTsgYnJlYWs7CisgICAgY2FzZSAnXFwnOiBkc3QuYXBwZW5kKCJcXFxcIiwgMik7
IGJyZWFrOworICAgIGNhc2UgJyInOiBkc3QuYXBwZW5kKCJcXFwiIiwgMik7IGJyZWFrOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWlubGluZSB2b2lkIGRvdWJsZVF1b3RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCBT
dHJpbmdCdWlsZGVyKiBkc3QpCitpbmxpbmUgdm9pZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBT
dHJpbmcmIHN0ciwgU3RyaW5nQnVpbGRlciYgZHN0KQogewotICAgIGRzdC0+YXBwZW5kKCciJyk7
CisgICAgZHN0LmFwcGVuZCgnIicpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHIu
bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBVQ2hhciBjID0gc3RyW2ldOwogICAgICAgICBpZiAo
IWVzY2FwZUNoYXIoYywgZHN0KSkgewpAQCAtNDcwLDIwMyArNDg4LDIwNiBAQCBpbmxpbmUgdm9p
ZCBkb3VibGVRdW90ZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0ciwgU3RyaW5nQnVpbGRlciogZHN0
KQogICAgICAgICAgICAgICAgIC8vIDEuIEVzY2FwaW5nIDwsID4gdG8gcHJldmVudCBzY3JpcHQg
ZXhlY3V0aW9uLgogICAgICAgICAgICAgICAgIC8vIDIuIFRlY2huaWNhbGx5LCB3ZSBjb3VsZCBh
bHNvIHBhc3MgdGhyb3VnaCBjID4gMTI2IGFzIFVURjgsIGJ1dCB0aGlzCiAgICAgICAgICAgICAg
ICAgLy8gICAgaXMgYWxzbyBvcHRpb25hbC4gIEl0IHdvdWxkIGFsc28gYmUgYSBwYWluIHRvIGlt
cGxlbWVudCBoZXJlLgotICAgICAgICAgICAgICAgIGRzdC0+YXBwZW5kKFN0cmluZzo6Zm9ybWF0
KCJcXHUlMDRYIiwgYykpOworICAgICAgICAgICAgICAgIGRzdC5hcHBlbmQoU3RyaW5nOjpmb3Jt
YXQoIlxcdSUwNFgiLCBjKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBk
c3QtPmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICBkc3QuYXBwZW5kKGMpOwogICAgICAgICB9
CiAgICAgfQotICAgIGRzdC0+YXBwZW5kKCciJyk7CisgICAgZHN0LmFwcGVuZCgnIicpOwogfQog
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNCb29s
ZWFuKGJvb2wqKSBjb25zdAorYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNCb29sZWFuKGJvb2wmKSBj
b25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNE
b3VibGUoZG91YmxlKikgY29uc3QKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFzRG91YmxlKGRvdWJs
ZSYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvclZhbHVl
Ojphc0RvdWJsZShmbG9hdCopIGNvbnN0Citib29sIEluc3BlY3RvclZhbHVlOjphc0RvdWJsZShm
bG9hdCYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvclZh
bHVlOjphc0ludGVnZXIoaW50KikgY29uc3QKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFzSW50ZWdl
cihpbnQmKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JW
YWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkKikgY29uc3QKK2Jvb2wgSW5zcGVjdG9yVmFsdWU6OmFz
SW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IEluc3BlY3RvclZhbHVlOjphc0ludGVnZXIobG9uZyopIGNvbnN0Citib29sIEluc3BlY3RvclZh
bHVlOjphc0ludGVnZXIobG9uZyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIEluc3BlY3RvclZhbHVlOjphc0ludGVnZXIobG9uZyBsb25nKikgY29uc3QKK2Jvb2wgSW5z
cGVjdG9yVmFsdWU6OmFzSW50ZWdlcihsb25nIGxvbmcmKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcq
KSBjb25zdAorYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmKSBj
b25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNJ
bnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyopIGNvbnN0Citib29sIEluc3BlY3RvclZhbHVlOjph
c0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzU3RyaW5nKFN0cmluZyopIGNvbnN0Citib29s
IEluc3BlY3RvclZhbHVlOjphc1N0cmluZyhTdHJpbmcmKSBjb25zdAogewogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNWYWx1ZShSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+KiBvdXRwdXQpCitib29sIEluc3BlY3RvclZhbHVlOjphc1ZhbHVlKFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4mIG91dHB1dCkKIHsKLSAgICAqb3V0cHV0ID0gdGhpczsKKyAgICBvdXRwdXQg
PSB0aGlzOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluc3BlY3RvclZhbHVlOjphc09i
amVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiopCitib29sIEluc3BlY3RvclZhbHVlOjphc09i
amVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEluc3BlY3RvclZhbHVlOjphc0FycmF5KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qKQor
Ym9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNBcnJheShSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JikKIHsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JWYWx1ZTo6YXNPYmplY3QoKQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1QYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JWYWx1ZTo6YXNBcnJheSgpCi17Ci0gICAg
cmV0dXJuIG51bGxwdHI7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQorYm9vbCBJbnNwZWN0b3JWYWx1
ZTo6cGFyc2VKU09OKGNvbnN0IFN0cmluZyYganNvbklucHV0LCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+JiBvdXRwdXQpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2hvbGUgZmlsZSBzaG91bGQganVz
dCB1c2UgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIFVDaGFyL2xlbmd0aCBhbmQgYXZvaWQgdXBjb252
ZXJ0aW5nLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbikudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhqc29uSW5w
dXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IGNo
YXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHN0YXJ0ICsganNvbi5sZW5ndGgoKTsK
KyAgICBjb25zdCBVQ2hhciogZW5kID0gc3RhcnQgKyBqc29uSW5wdXQubGVuZ3RoKCk7CiAgICAg
Y29uc3QgVUNoYXIqIHRva2VuRW5kOwotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUg
PSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgMCk7Ci0gICAgaWYgKCF2YWx1ZSB8
fCB0b2tlbkVuZCAhPSBlbmQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiB2
YWx1ZS5yZWxlYXNlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQgPSBidWls
ZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgMCk7CisgICAgaWYgKCFyZXN1bHQgfHwgdG9r
ZW5FbmQgIT0gZW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBvdXRwdXQgPSByZXN1
bHQucmVsZWFzZSgpOworICAgIHJldHVybiB0cnVlOwogfQogCiBTdHJpbmcgSW5zcGVjdG9yVmFs
dWU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAg
ICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSg1MTIpOwotICAgIHdyaXRlSlNPTigmcmVzdWx0KTsK
KyAgICB3cml0ZUpTT04ocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQp
IGNvbnN0Cit2b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0
cHV0KSBjb25zdAogewogICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6TnVsbCk7Ci0gICAgb3V0
cHV0LT5hcHBlbmQobnVsbFN0cmluZywgNCk7CisKKyAgICBvdXRwdXQuYXBwZW5kKG51bGxTdHJp
bmcsIDQpOwogfQogCi1ib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbGVhbihib29sKiBv
dXRwdXQpIGNvbnN0Citib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbGVhbihib29sJiBv
dXRwdXQpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpCb29sZWFuKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgKm91dHB1dCA9IG1fYm9vbFZhbHVlOworCisgICAgb3V0cHV0
ID0gbV9ib29sZWFuVmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6YXNEb3VibGUoZG91YmxlKiBvdXRwdXQpIGNvbnN0Citib29sIEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYgb3V0cHV0KSBjb25zdAogewogICAgIGlmICh0
eXBlKCkgIT0gVHlwZTo6RG91YmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKm91dHB1
dCA9IG1fZG91YmxlVmFsdWU7CisKKyAgICBvdXRwdXQgPSBtX2RvdWJsZVZhbHVlOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzRG91YmxlKGZsb2F0
KiBvdXRwdXQpIGNvbnN0Citib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzRG91YmxlKGZsb2F0
JiBvdXRwdXQpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZG91
YmxlVmFsdWUpOworCisgICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZG91YmxlVmFs
dWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFz
SW50ZWdlcihpbnQqIG91dHB1dCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNJ
bnRlZ2VyKGludCYgb3V0cHV0KSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50
ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PGludD4obV9kb3VibGVWYWx1ZSk7CisKKyAgICBvdXRw
dXQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCogb3V0cHV0
KSBjb25zdAorYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0ludGVnZXIodW5zaWduZWQmIG91
dHB1dCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgp
ICE9IFR5cGU6OkRvdWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICpvdXRwdXQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9kb3VibGVWYWx1ZSk7CisKKyAgICBvdXRwdXQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcqIG91dHB1dCkgY29uc3QK
K2Jvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcmIG91dHB1dCkgY29uc3QK
IHsKICAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRv
dWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxs
b25nPihtX2RvdWJsZVZhbHVlKTsKKworICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGxvbmc+KG1f
ZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzSW50ZWdlcihsb25nIGxvbmcqIG91dHB1dCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAogewogICAgIGlm
ICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
bV9kb3VibGVWYWx1ZSk7CisKKyAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1f
ZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0Citib29sIEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nJiBvdXRwdXQpIGNvbnN0CiB7
CiAgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3Vi
bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4obV9kb3VibGVWYWx1ZSk7CisKKyAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRw
dXQpIGNvbnN0Citib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBs
b25nIGxvbmcmIG91dHB1dCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVn
ZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICpvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fZG91YmxlVmFsdWUp
OworCisgICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX2RvdWJs
ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVl
Ojp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JC
YXNpY1ZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAogewogICAg
IEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6Qm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZTo6RG91Ymxl
IHx8IHR5cGUoKSA9PSBUeXBlOjpJbnRlZ2VyKTsKKwogICAgIGlmICh0eXBlKCkgPT0gVHlwZTo6
Qm9vbGVhbikgewotICAgICAgICBpZiAobV9ib29sVmFsdWUpCi0gICAgICAgICAgICBvdXRwdXQt
PmFwcGVuZCh0cnVlU3RyaW5nLCA0KTsKKyAgICAgICAgaWYgKG1fYm9vbGVhblZhbHVlKQorICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZCh0cnVlU3RyaW5nLCA0KTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgb3V0cHV0LT5hcHBlbmQoZmFsc2VTdHJpbmcsIDUpOworICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZChmYWxzZVN0cmluZywgNSk7CiAgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gVHlw
ZTo6RG91YmxlIHx8IHR5cGUoKSA9PSBUeXBlOjpJbnRlZ2VyKSB7CiAgICAgICAgIE51bWJlclRv
TFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZShtX2RvdWJs
ZVZhbHVlKSkgewotICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0cmluZywgNCk7Cisg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKG51bGxTdHJpbmcsIDQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIERlY2ltYWxOdW1iZXIgZGVjaW1hbCA9IG1fZG91Ymxl
VmFsdWU7CkBAIC02NzUsMjMgKzY5NiwyMyBAQCB2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6Ondy
aXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiAgICAgICAgICAgICAvLyBOb3Qg
ZW5vdWdoIHJvb20gZm9yIGRlY2ltYWwuIFVzZSBleHBvbmVudGlhbCBmb3JtYXQuCiAgICAgICAg
ICAgICBpZiAoZGVjaW1hbC5idWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlhbCgpID4gV1RG
OjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkgewogICAgICAgICAgICAgICAgIC8vIEZhbGxi
YWNrIGZvciBhbiBhYm5vcm1hbCBjYXNlIGlmIGl0J3MgdG9vIGxpdHRsZSBldmVuIGZvciBleHBv
bmVudGlhbC4KLSAgICAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCgiTmFOIiwgMyk7CisgICAg
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiTmFOIiwgMyk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuZ3RoID0gZGVjaW1hbC50b1N0cmlu
Z0V4cG9uZW50aWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGVuZ3RoID0gZGVjaW1hbC50b1N0cmluZ0RlY2lt
YWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICAgICAgb3V0
cHV0LT5hcHBlbmQoYnVmZmVyLCBsZW5ndGgpOworICAgICAgICBvdXRwdXQuYXBwZW5kKGJ1ZmZl
ciwgbGVuZ3RoKTsKICAgICB9CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyhT
dHJpbmcqIG91dHB1dCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyhTdHJp
bmcmIG91dHB1dCkgY29uc3QKIHsKLSAgICAqb3V0cHV0ID0gbV9zdHJpbmdWYWx1ZTsKKyAgICBv
dXRwdXQgPSBtX3N0cmluZ1ZhbHVlOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3Bl
Y3RvclN0cmluZzo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKK3ZvaWQg
SW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAog
ewogICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6U3RyaW5nKTsKICAgICBkb3VibGVRdW90ZVN0
cmluZyhtX3N0cmluZ1ZhbHVlLCBvdXRwdXQpOwpAQCAtNzAxLDMzICs3MjIsMzEgQEAgSW5zcGVj
dG9yT2JqZWN0QmFzZTo6fkluc3BlY3Rvck9iamVjdEJhc2UoKQogewogfQogCi1ib29sIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OmFzT2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRwdXQp
Citib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmFzT2JqZWN0KFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiBvdXRwdXQpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvck9iamVj
dCkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdEJhc2UpLCBjYW5ub3RfY2FzdCk7Ci0gICAgKm91
dHB1dCA9IHN0YXRpY19jYXN0PEluc3BlY3Rvck9iamVjdCo+KHRoaXMpOwotICAgIHJldHVybiB0
cnVlOwotfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6YXNPYmplY3QoKQotewotICAgIHJldHVybiBvcGVuQWNjZXNzb3JzKCk7CisgICAgb3V0cHV0
ID0gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yT2JqZWN0Kj4odGhpcyk7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIEluc3BlY3Rvck9iamVjdCogSW5zcGVjdG9yT2JqZWN0QmFzZTo6b3BlbkFjY2Vzc29y
cygpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvck9iamVjdCkgPT0gc2l6
ZW9mKEluc3BlY3Rvck9iamVjdEJhc2UpLCBjYW5ub3RfY2FzdCk7CisKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SW5zcGVjdG9yT2JqZWN0Kj4odGhpcyk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIG91dHB1dCkgY29u
c3QKK2Jvb2wgSW5zcGVjdG9yT2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wmIG91dHB1dCkgY29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlID0gZ2V0KG5hbWUpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIHJldHVybiB2YWx1ZS0+YXNCb29sZWFuKG91dHB1dCk7CiB9CiAKLWJvb2wgSW5zcGVj
dG9yT2JqZWN0QmFzZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nKiBvdXRw
dXQpIGNvbnN0Citib29sIEluc3BlY3Rvck9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJp
bmcmIG5hbWUsIFN0cmluZyYgb3V0cHV0KSBjb25zdAogewogICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CiAgICAgaWYgKCF2YWx1ZSkKQEAgLTc0MCw3ICs3NTks
MTAgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rvck9iamVjdEJhc2U6Omdl
dE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGMKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSA9IGdldChuYW1lKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7CisKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQ7CisgICAgdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9y
T2JqZWN0QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtNzQ4LDcg
Kzc3MCwxMCBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JPYmplY3RCYXNl
OjpnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbgogICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiB2YWx1ZS0+YXNBcnJheSgpOworCisgICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiByZXN1bHQ7CisgICAgdmFsdWUtPmFzQXJyYXkocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0
b3JPYmplY3RCYXNlOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtNzcwLDE5ICs3
OTUsMTkgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBu
YW1lKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAordm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAogewotICAgIG91dHB1dC0+YXBwZW5k
KCd7Jyk7CisgICAgb3V0cHV0LmFwcGVuZCgneycpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9vcmRlci5zaXplKCk7ICsraSkgewogICAgICAgICBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fZGF0YS5maW5kKG1fb3JkZXJbaV0pOwogICAgICAgICBBU1NFUlQoaXQgIT0g
bV9kYXRhLmVuZCgpKTsKICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICBvdXRwdXQtPmFwcGVu
ZCgnLCcpOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwogICAgICAgICBkb3VibGVR
dW90ZVN0cmluZyhpdC0+a2V5LCBvdXRwdXQpOwotICAgICAgICBvdXRwdXQtPmFwcGVuZCgnOicp
OworICAgICAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7CiAgICAgICAgIGl0LT52YWx1ZS0+d3JpdGVK
U09OKG91dHB1dCk7CiAgICAgfQotICAgIG91dHB1dC0+YXBwZW5kKCd9Jyk7CisgICAgb3V0cHV0
LmFwcGVuZCgnfScpOwogfQogCiBJbnNwZWN0b3JPYmplY3RCYXNlOjpJbnNwZWN0b3JPYmplY3RC
YXNlKCkKQEAgLTc5NiwyOCArODIxLDIyIEBAIEluc3BlY3RvckFycmF5QmFzZTo6fkluc3BlY3Rv
ckFycmF5QmFzZSgpCiB7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQXJyYXlCYXNlOjphc0FycmF5KFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIG91dHB1dCkKK2Jvb2wgSW5zcGVjdG9yQXJyYXlCYXNlOjph
c0FycmF5KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIG91dHB1dCkKIHsKICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoSW5zcGVjdG9yQXJyYXlCYXNlKSA9PSBzaXplb2YoSW5zcGVjdG9yQXJyYXkp
LCBjYW5ub3RfY2FzdCk7Ci0gICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5
Kj4odGhpcyk7CisgICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXkqPih0aGlz
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5z
cGVjdG9yQXJyYXlCYXNlOjphc0FycmF5KCkKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
SW5zcGVjdG9yQXJyYXlCYXNlKSA9PSBzaXplb2YoSW5zcGVjdG9yQXJyYXkpLCBjYW5ub3RfY2Fz
dCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5Kj4odGhpcyk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQXJyYXlCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0
KSBjb25zdAordm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVy
JiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgb3V0cHV0LT5hcHBlbmQoJ1snKTsKKyAgICBvdXRwdXQu
YXBwZW5kKCdbJyk7CiAgICAgZm9yIChWZWN0b3I8UmVmUHRyPEluc3BlY3RvclZhbHVlPj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhLmJlZ2luKCk7IGl0ICE9IG1fZGF0YS5lbmQoKTsgKytp
dCkgewogICAgICAgICBpZiAoaXQgIT0gbV9kYXRhLmJlZ2luKCkpCi0gICAgICAgICAgICBvdXRw
dXQtPmFwcGVuZCgnLCcpOworICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwogICAgICAg
ICAoKml0KS0+d3JpdGVKU09OKG91dHB1dCk7CiAgICAgfQotICAgIG91dHB1dC0+YXBwZW5kKCdd
Jyk7CisgICAgb3V0cHV0LmFwcGVuZCgnXScpOwogfQogCiBJbnNwZWN0b3JBcnJheUJhc2U6Oklu
c3BlY3RvckFycmF5QmFzZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCBkMzBlOWIzZjNkNGZhZWFmNTYxYjE1YWQ5YTM4MTg0
MGFjMzgwODE3Li45NDM1ZmE1MjhiODQyNGZkMGQyMDIzOThhYjg5ZTFjZGViZTJiOTYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtNjksMjYgKzcwLDI0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNOdWxs
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51bGw7IH0KIAotICAgIHZpcnR1YWwg
Ym9vbCBhc0Jvb2xlYW4oYm9vbCogb3V0cHV0KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNJ
bnRlZ2VyKGludCogb3V0cHV0KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKHVu
c2lnbmVkKiBvdXRwdXQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIobG9uZyog
b3V0cHV0KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGxvbmcgbG9uZyogb3V0
cHV0KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcqIG91
dHB1dCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nIGxv
bmcqIG91dHB1dCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGFzRG91YmxlKGRvdWJsZSogb3V0
cHV0KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXNEb3VibGUoZmxvYXQqIG91dHB1dCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGFzU3RyaW5nKFN0cmluZyogb3V0cHV0KSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgYXNWYWx1ZShSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBvdXRwdXQpOwot
ICAgIHZpcnR1YWwgYm9vbCBhc09iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0cHV0
KTsKLSAgICB2aXJ0dWFsIGJvb2wgYXNBcnJheShSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBvdXRw
dXQpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFzT2JqZWN0KCk7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBhc0FycmF5KCk7Ci0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VKU09OKGNvbnN0IFN0cmlu
ZyYganNvbik7CisgICAgdmlydHVhbCBib29sIGFzQm9vbGVhbihib29sJikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGFzSW50ZWdlcihpbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNJ
bnRlZ2VyKHVuc2lnbmVkJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzSW50ZWdlcihsb25n
JikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzSW50ZWdlcihsb25nIGxvbmcmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBhc0RvdWJsZShkb3VibGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNE
b3VibGUoZmxvYXQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgYXNTdHJpbmcoU3RyaW5nJikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzVmFsdWUoUmVmUHRyPEluc3BlY3RvclZhbHVlPiYp
OworICAgIHZpcnR1YWwgYm9vbCBhc09iamVjdChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYpOwor
ICAgIHZpcnR1YWwgYm9vbCBhc0FycmF5KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mKTsKKworICAg
IHN0YXRpYyBib29sIHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb25JbnB1dCwgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiYgb3V0cHV0KTsKIAogICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNv
bnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgSW5zcGVjdG9yVmFsdWUoVHlwZSB0eXBl
KSA6IG1fdHlwZSh0eXBlKSB7IH0KQEAgLTEwNCwyNCArMTAzLDI0IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUoaW50KTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JCYXNpY1ZhbHVlPiBjcmVhdGUoZG91YmxlKTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xlYW4oYm9vbCogb3V0cHV0KSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdCBvdmVycmlkZTsKICAgICAv
LyBOdW1iZXJzIGZyb20gdGhlIGZyb250ZW5kIGFyZSBhbHdheXMgcGFyc2VkIGFzIGRvdWJsZXMs
IHNvIHdlIGFsbG93CiAgICAgLy8gY2xpZW50cyB0byBjb252ZXJ0IHRvIGludGVncmFsIHZhbHVl
cyB3aXRoIHRoaXMgZnVuY3Rpb24uCi0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcihpbnQqIG91
dHB1dCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25l
ZCogb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYXNJbnRlZ2VyKGxv
bmcqIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFzSW50ZWdlcihs
b25nIGxvbmcqIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGFzSW50
ZWdlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
Ym9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgYm9vbCBhc0RvdWJsZShkb3VibGUqIG91dHB1dCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIGFzRG91YmxlKGZsb2F0KiBvdXRwdXQpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCBhc0ludGVnZXIoaW50JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBhc0ludGVnZXIobG9uZyYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBhc0ludGVnZXIobG9uZyBsb25nJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGJvb2wgYXNEb3VibGUoZG91YmxlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIGFzRG91YmxlKGZsb2F0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0
IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUo
Ym9vbCB2YWx1ZSkKICAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpCb29sZWFuKQotICAg
ICAgICAsIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KKyAgICAgICAgLCBtX2Jvb2xlYW5WYWx1ZSh2
YWx1ZSkgeyB9CiAKICAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGludCB2YWx1ZSkK
ICAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpJbnRlZ2VyKQpAQCAtMTMyLDcgKzEzMSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9kb3VibGVWYWx1ZSh2YWx1ZSkgeyB9CiAKICAgICB1
bmlvbiB7Ci0gICAgICAgIGJvb2wgbV9ib29sVmFsdWU7CisgICAgICAgIGJvb2wgbV9ib29sZWFu
VmFsdWU7CiAgICAgICAgIGRvdWJsZSBtX2RvdWJsZVZhbHVlOwogICAgIH07CiB9OwpAQCAtMTQy
LDkgKzE0MSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHJp
bmc+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JTdHJpbmc+IGNyZWF0ZShjb25zdCBjaGFyKik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXNTdHJp
bmcoU3RyaW5nKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBhc1N0
cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRl
OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQpAQCAtMTY2LDEzICsxNjUsMTIgQEAgcHVibGljOgogICAgIHR5cGVkZWYgRGljdGlv
bmFyeTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgdHlwZWRlZiBEaWN0aW9uYXJ5Ojpjb25zdF9p
dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGFzT2JqZWN0KCkgb3ZlcnJpZGU7CiAgICAgSW5zcGVjdG9yT2JqZWN0KiBvcGVu
QWNjZXNzb3JzKCk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JPYmplY3RC
YXNlKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXNPYmplY3QoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIG91dHB1dCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGFzT2JqZWN0KFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBvdXRwdXQpIG92ZXJyaWRlOwogCiAgICAgLy8gRklYTUU6IHVzZSB0
ZW1wbGF0ZXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBzZXQqKCkgbWV0aG9k
cy4KICAgICB2b2lkIHNldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKTsKQEAgLTE4
NywxNSArMTg1LDE1IEBAIHByb3RlY3RlZDoKICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogdXNlIHRlbXBsYXRlcyB0byBy
ZWR1Y2UgdGhlIGFtb3VudCBvZiBkdXBsaWNhdGVkIGdldCooKSBtZXRob2RzLgotICAgIGJvb2wg
Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIG91dHB1dCkgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBUKiBv
dXRwdXQpIGNvbnN0CisgICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCYgb3V0cHV0KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldERvdWJsZShj
b25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKICAgICB7CiAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7CiAgICAgICAgIGlmICghdmFsdWUp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWx1ZS0+YXNEb3Vi
bGUob3V0cHV0KTsKICAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRJbnRlZ2Vy
KGNvbnN0IFN0cmluZyYgbmFtZSwgVCogb3V0cHV0KSBjb25zdAorICAgIHRlbXBsYXRlPGNsYXNz
IFQ+IGJvb2wgZ2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QK
ICAgICB7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQobmFtZSk7
CiAgICAgICAgIGlmICghdmFsdWUpCkBAIC0yMDMsMTQgKzIwMSwxNCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHJldHVybiB2YWx1ZS0+YXNJbnRlZ2VyKG91dHB1dCk7CiAgICAgfQogCi0gICAgYm9v
bCBnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcqIG91dHB1dCkgY29uc3Q7Cisg
ICAgYm9vbCBnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29u
c3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gZ2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAKICAgICB2b2lkIHJlbW92ZShjb25z
dCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWls
ZGVyKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04o
U3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGl0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJl
dHVybiBtX2RhdGEuZW5kKCk7IH0KQEAgLTI2NCwxNCArMjYyLDEyIEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+Pjo6aXRlcmF0b3IgaXRlcmF0b3I7
CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclZhbHVlPj46OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBhc0FycmF5KCkgb3ZlcnJpZGU7Ci0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2RhdGEuc2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5JbnNw
ZWN0b3JBcnJheUJhc2UoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBhc0FycmF5KFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIG91dHB1dCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGFzQXJyYXko
UmVmUHRyPEluc3BlY3RvckFycmF5PiYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBwdXNoQm9vbGVh
bihib29sKTsKICAgICB2b2lkIHB1c2hJbnRlZ2VyKGludCk7CkBAIC0yODMsNyArMjc5LDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KHNpemVfdCBp
bmRleCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1
dCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWls
ZGVyJiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX2RhdGEuYmVnaW4oKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fZGF0
YS5lbmQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAwYWRlMzRl
NjAzMWZjMjJjYzEyNDgxMjg0NjQ0ZTIyMTk5YTQ3ZjI0Li5mN2I4YmQyYTBiM2I4NWVjMmM4NTc2
YmE2YjIzYmNjNWVhYmMxNTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApA
QCAtMjA4LDEzICsyMDgsMTMgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3Bv
aW50QWN0aW9uc0Zyb21Qcm90b2NvbChFcnJvclN0cmluZyogZXJyb3JTdHIKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYWN0aW9uc0xlbmd0aDsgKytpKSB7CiAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBhY3Rpb25zLT5nZXQoaSk7CiAgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3QoJm9i
amVjdCkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkgewogICAgICAg
ICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJCcmVha3BvaW50QWN0aW9uIG9mIGlu
Y29ycmVjdCB0eXBlLCBleHBlY3RlZCBvYmplY3QiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyB0eXBlU3RyaW5nOwotICAgICAgICBpZiAo
IW9iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidHlwZSIpLCAmdHlwZVN0cmluZykpIHsK
KyAgICAgICAgaWYgKCFvYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInR5cGUiKSwgdHlw
ZVN0cmluZykpIHsKICAgICAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQnJl
YWtwb2ludEFjdGlvbiBoYWQgdHlwZSBtaXNzaW5nIik7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTIyOCwxMCArMjI4LDEwIEBAIGJvb2wgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2woRXJyb3JTdHJpbmcqIGVycm9y
U3RyCiAgICAgICAgIC8vIFNwZWNpZnlpbmcgYW4gaWRlbnRpZmllciBpcyBvcHRpb25hbC4gVGhl
eSBhcmUgdXNlZCB0byBjb3JyZWxhdGUgcHJvYmUgc2FtcGxlcwogICAgICAgICAvLyBpbiB0aGUg
ZnJvbnRlbmQgYWNyb3NzIG11bHRpcGxlIGJhY2tlbmQgcHJvYmUgYWN0aW9ucyBhbmQgc2VncmVn
YXRlIG9iamVjdCBncm91cHMuCiAgICAgICAgIGludCBpZGVudGlmaWVyID0gMDsKLSAgICAgICAg
b2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgJmlkZW50aWZpZXIpOworICAg
ICAgICBvYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCBpZGVudGlmaWVyKTsK
IAogICAgICAgICBTdHJpbmcgZGF0YTsKLSAgICAgICAgb2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJkYXRhIiksICZkYXRhKTsKKyAgICAgICAgb2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJkYXRhIiksIGRhdGEpOwogCiAgICAgICAgIHJlc3VsdC0+YXBwZW5kKFNjcmlwdEJy
ZWFrcG9pbnRBY3Rpb24odHlwZSwgaWRlbnRpZmllciwgZGF0YSkpOwogICAgIH0KQEAgLTI2MSw4
ICsyNjEsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVy
bChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBsaQogICAgIGJvb2wgYXV0b0NvbnRpbnVl
ID0gZmFsc2U7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhY3Rpb25zOwogICAgIGlmIChv
cHRpb25zKSB7Ci0gICAgICAgICgqb3B0aW9ucyktPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNv
bmRpdGlvbiIpLCAmY29uZGl0aW9uKTsKLSAgICAgICAgKCpvcHRpb25zKS0+Z2V0Qm9vbGVhbihB
U0NJSUxpdGVyYWwoImF1dG9Db250aW51ZSIpLCAmYXV0b0NvbnRpbnVlKTsKKyAgICAgICAgKCpv
cHRpb25zKS0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9uIiksIGNvbmRpdGlvbik7
CisgICAgICAgICgqb3B0aW9ucyktPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29udGlu
dWUiKSwgYXV0b0NvbnRpbnVlKTsKICAgICAgICAgYWN0aW9ucyA9ICgqb3B0aW9ucyktPmdldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYWN0aW9ucyIpKTsKICAgICB9CiAKQEAgLTI4NSwxOCArMjg1LDE4
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgaW50IGxpCiAgICAgKm91dEJyZWFrcG9pbnRJZGVudGlmaWVy
ID0gYnJlYWtwb2ludElkZW50aWZpZXI7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24o
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBJbnNwZWN0b3JPYmplY3QqIGxvY2F0aW9uLCBKU0M6
OlNvdXJjZUlEKiBzb3VyY2VJRCwgdW5zaWduZWQqIGxpbmVOdW1iZXIsIHVuc2lnbmVkKiBjb2x1
bW5OdW1iZXIpCitzdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgSW5zcGVjdG9yT2JqZWN0JiBsb2NhdGlvbiwgSlNDOjpTb3VyY2VJRCYgc291cmNlSUQs
IHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNpZ25lZCYgY29sdW1uTnVtYmVyKQogewogICAgIFN0
cmluZyBzY3JpcHRJRFN0cjsKLSAgICBpZiAoIWxvY2F0aW9uLT5nZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJzY3JpcHRJZCIpLCAmc2NyaXB0SURTdHIpIHx8ICFsb2NhdGlvbi0+Z2V0SW50ZWdlcihB
U0NJSUxpdGVyYWwoImxpbmVOdW1iZXIiKSwgbGluZU51bWJlcikpIHsKLSAgICAgICAgKnNvdXJj
ZUlEID0gSlNDOjpub1NvdXJjZUlEOworICAgIGlmICghbG9jYXRpb24uZ2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgic2NyaXB0SWQiKSwgc2NyaXB0SURTdHIpIHx8ICFsb2NhdGlvbi5nZXRJbnRlZ2Vy
KEFTQ0lJTGl0ZXJhbCgibGluZU51bWJlciIpLCBsaW5lTnVtYmVyKSkgeworICAgICAgICBzb3Vy
Y2VJRCA9IEpTQzo6bm9Tb3VyY2VJRDsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRl
cmFsKCJzY3JpcHRJZCBhbmQgbGluZU51bWJlciBhcmUgcmVxdWlyZWQuIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAqc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0
cigpOwotICAgICpjb2x1bW5OdW1iZXIgPSAwOwotICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2VyKEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTnVtYmVyIiksIGNvbHVtbk51bWJlcik7CisgICAgc291cmNlSUQg
PSBzY3JpcHRJRFN0ci50b0ludFB0cigpOworICAgIGNvbHVtbk51bWJlciA9IDA7CisgICAgbG9j
YXRpb24uZ2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvbHVtbk51bWJlciIpLCBjb2x1bW5OdW1i
ZXIpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zMDUsMTUgKzMwNSwxNSBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBjb25zdCBSZWZQdAogICAgIEpTQzo6U291cmNlSUQgc291cmNlSUQ7CiAgICAgdW5zaWdu
ZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXI7Ci0gICAgaWYgKCFwYXJz
ZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbi5nZXQoKSwgJnNvdXJjZUlELCAmbGluZU51
bWJlciwgJmNvbHVtbk51bWJlcikpCisgICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5n
LCAqbG9jYXRpb24sIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBTdHJpbmcgY29uZGl0aW9uID0gZW1wdHlTdHJpbmcoKTsKICAgICBi
b29sIGF1dG9Db250aW51ZSA9IGZhbHNlOwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYWN0
aW9uczsKICAgICBpZiAob3B0aW9ucykgewotICAgICAgICAoKm9wdGlvbnMpLT5nZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJjb25kaXRpb24iKSwgJmNvbmRpdGlvbik7Ci0gICAgICAgICgqb3B0aW9u
cyktPmdldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJhdXRvQ29udGludWUiKSwgJmF1dG9Db250aW51
ZSk7CisgICAgICAgICgqb3B0aW9ucyktPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlv
biIpLCBjb25kaXRpb24pOworICAgICAgICAoKm9wdGlvbnMpLT5nZXRCb29sZWFuKEFTQ0lJTGl0
ZXJhbCgiYXV0b0NvbnRpbnVlIiksIGF1dG9Db250aW51ZSk7CiAgICAgICAgIGFjdGlvbnMgPSAo
Km9wdGlvbnMpLT5nZXRBcnJheShBU0NJSUxpdGVyYWwoImFjdGlvbnMiKSk7CiAgICAgfQogCkBA
IC0zNjAsNyArMzYwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRv
TG9jYXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdAogICAgIEpTQzo6U291cmNl
SUQgc291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1
bW5OdW1iZXI7Ci0gICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbi5n
ZXQoKSwgJnNvdXJjZUlELCAmbGluZU51bWJlciwgJmNvbHVtbk51bWJlcikpCisgICAgaWYgKCFw
YXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCAqbG9jYXRpb24sIHNvdXJjZUlELCBsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBTY3JpcHRCcmVha3BvaW50
IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCAiIiwgZmFsc2UpOwpAQCAtNTkz
LDE4ICs1OTMsMjIgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJj
ZShKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBTY3JpcHQKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yIChhdXRvIGl0ID0gbV9qYXZhU2NyaXB0QnJlYWtwb2ludHMuYmVnaW4oKSwgZW5k
ID0gbV9qYXZhU2NyaXB0QnJlYWtwb2ludHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0ID0gaXQtPnZhbHVl
LT5hc09iamVjdCgpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50
T2JqZWN0OworICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNPYmplY3QoYnJlYWtwb2ludE9iamVj
dCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgYm9vbCBpc1JlZ2V4OwotICAgICAg
ICBicmVha3BvaW50T2JqZWN0LT5nZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgiaXNSZWdleCIpLCAm
aXNSZWdleCk7CisgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldEJvb2xlYW4oQVNDSUlMaXRl
cmFsKCJpc1JlZ2V4IiksIGlzUmVnZXgpOwogICAgICAgICBTdHJpbmcgdXJsOwotICAgICAgICBi
cmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ1cmwiKSwgJnVybCk7Cisg
ICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInVybCIpLCB1
cmwpOwogICAgICAgICBpZiAoIW1hdGNoZXMoc2NyaXB0VVJMLCB1cmwsIGlzUmVnZXgpKQogICAg
ICAgICAgICAgY29udGludWU7CisKICAgICAgICAgU2NyaXB0QnJlYWtwb2ludCBicmVha3BvaW50
OwotICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgibGlu
ZU51bWJlciIpLCAmYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKLSAgICAgICAgYnJlYWtwb2ludE9i
amVjdC0+Z2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvbHVtbk51bWJlciIpLCAmYnJlYWtwb2lu
dC5jb2x1bW5OdW1iZXIpOwotICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJjb25kaXRpb24iKSwgJmJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICAgICAg
YnJlYWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoImF1dG9Db250aW51ZSIp
LCAmYnJlYWtwb2ludC5hdXRvQ29udGludWUpOworICAgICAgICBicmVha3BvaW50T2JqZWN0LT5n
ZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgibGluZU51bWJlciIpLCBicmVha3BvaW50LmxpbmVOdW1i
ZXIpOworICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgi
Y29sdW1uTnVtYmVyIiksIGJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKKyAgICAgICAgYnJlYWtw
b2ludE9iamVjdC0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uZGl0aW9uIiksIGJyZWFrcG9p
bnQuY29uZGl0aW9uKTsKKyAgICAgICAgYnJlYWtwb2ludE9iamVjdC0+Z2V0Qm9vbGVhbihBU0NJ
SUxpdGVyYWwoImF1dG9Db250aW51ZSIpLCBicmVha3BvaW50LmF1dG9Db250aW51ZSk7CiAgICAg
ICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFjdGlvbnMgPSBicmVha3BvaW50T2JqZWN0LT5nZXRBcnJheShBU0NJSUxpdGVyYWwoImFj
dGlvbnMiKSk7CiAgICAgICAgIGlmICghYnJlYWtwb2ludEFjdGlvbnNGcm9tUHJvdG9jb2woJmVy
cm9yU3RyaW5nLCBhY3Rpb25zLCAmYnJlYWtwb2ludC5hY3Rpb25zKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggMjYzOWYyNzgyN2UzMzBiOTgyMzRiNzE0NTQ4M2IyMzg1
YTU4ZTU0NC4uOTc0NmQzYTM1YzY5OTVjZjhjNzhjY2NiZTdmYmZkM2EwMjIwNzg4MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhF
cnJvclN0cmluZyogZXIKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy0+bGVu
Z3RoKCk7IGkrKykgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4g
dmFsdWUgPSBsb2NhdGlvbnMtPmdldChpKTsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbG9jYXRpb247Ci0gICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KCZsb2NhdGlvbikpIHsK
KyAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3QobG9jYXRpb24pKSB7CiAgICAgICAgICAgICAq
ZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkFycmF5IG9mIFR5cGVMb2NhdGlvbiBvYmplY3Rz
IGhhcyBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdCBoYXZlIHR5cGUgb2YgVHlwZUxvY2F0aW9uLiIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yMjEsOSArMjIxLDkgQEAgdm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zm
c2V0cyhFcnJvclN0cmluZyogZXIKICAgICAgICAgaW50IGRlc2NyaXB0b3I7CiAgICAgICAgIFN0
cmluZyBzb3VyY2VJREFzU3RyaW5nOwogICAgICAgICBpbnQgZGl2b3Q7Ci0gICAgICAgIGxvY2F0
aW9uLT5nZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgidHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciIp
LCAmZGVzY3JpcHRvcik7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJzb3VyY2VJRCIpLCAmc291cmNlSURBc1N0cmluZyk7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJ
bnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiZGl2b3QiKSwgJmRpdm90KTsKKyAgICAgICAgbG9jYXRpb24t
PmdldEludGVnZXIoQVNDSUlMaXRlcmFsKCJ0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yIiksIGRl
c2NyaXB0b3IpOworICAgICAgICBsb2NhdGlvbi0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic291
cmNlSUQiKSwgc291cmNlSURBc1N0cmluZyk7CisgICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2Vy
KEFTQ0lJTGl0ZXJhbCgiZGl2b3QiKSwgZGl2b3QpOwogCiAgICAgICAgIGJvb2wgb2theTsKICAg
ICAgICAgVHlwZUxvY2F0aW9uKiB0eXBlTG9jYXRpb24gPSB2bS50eXBlUHJvZmlsZXIoKS0+Zmlu
ZExvY2F0aW9uKGRpdm90LCBzb3VyY2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwg
c3RhdGljX2Nhc3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvcikpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weQppbmRleCA0YjdlOTMzYzM4YjY2ZGU4ODFhYTYwMDliNGI4
MTMwY2NlYzNjMjNjLi5lMzI0MDU4MjA3YmE3NzJhOTE5NGY0NTA4NWQwMjU0NWQ5MDNlODBiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtMTI2LDggKzEyNiw4IEBAIGNsYXNzIFByb3Rv
Y29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoR2VuZXJhdG9yLnByb3Rv
Y29sX3R5cGVfc3RyaW5nX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiIiJ7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0
OwotICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKLSAgICBBU1NF
UlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOyIiIikKKyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOyIiIikKICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHJlcXVp
cmVkX21lbWJlcnM6CiAgICAgICAgICAgICBhcmdzID0gewogICAgICAgICAgICAgICAgICdtZW1i
ZXJOYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCkBAIC0xNzIsMTEgKzE3MiwxMSBAQCBj
bGFzcyBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAg
ICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCiAgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCAlcyhJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgR2Vu
ZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmpl
Y3RfZGVjbGFyYXRpb24pKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBTdHJpbmcgczsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBib29s
IGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBBU1NFUlQoY2FzdF9yZXMpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFN0cmlu
ZyByZXN1bHQ7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
QVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCiAKLSAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcg
fHwgJy5qb2luKFsncyA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51
bV9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9
ICcgfHwgJy5qb2luKFsncmVzdWx0ID09ICIlcyInICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1
ZSBpbiBlbnVtX21lbWJlci50eXBlLmVudW1fdmFsdWVzKCldKQogICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRfY29uZGl0aW9uKQogICAgICAgICBsaW5lcy5h
cHBlbmQoJ30nKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVEJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IGYx
ZGVlMzU2ODc2ZDE5OGViNGQwNjQ5OGMwZDVhY2QxMzBhOGY4MWEuLjg0M2E0OTI5Mzc1ZDM5MTdm
OGFhMzY2YmE4NTRmZjE4ODU1MTViN2QgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weQpAQCAtMjUzLDE0ICsyNTMsMTQgQEAgJHtjb25zdHJ1Y3RvckV4YW1wbGV9
CiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKICIiIlBhc3NSZWZQdHI8JHtvYmpl
Y3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RSZXMgPSB2YWx1
ZS0+YXNPYmplY3QoJm9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVz
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsKKyAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKKyAgICBBU1NFUlRf
VU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShvYmplY3QuZ2V0KCkpOworICAgIEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CiAjZW5kaWYgIC8vICFB
U1NFUlRfRElTQUJMRUQKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkg
PT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9i
bGVtKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSo+KG9iamVjdC5nZXQoKSkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CiB9CiAiIiIKICkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKaW5kZXggZDEzMTkwODNiNTJmZTdlOWVmYjY0MTE2
MzRhNmRhMmQ4ZmVhOTgzYy4uYTE4OWJiOTM1NGIzZDQ0NDk3ZmJlZmYxNTZhOWU4YTEwYmE2ZjU3
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTYyMCwxMCArNjIw
LDEwIEBAIFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQogewotICAgIFN0cmluZyBzOwotICAgIGJvb2wgY2Fz
dF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpOwotICAgIEFTU0VSVChjYXN0X3Jlcyk7Ci0gICAg
QVNTRVJUKHMgPT0gIkR1Y2tzIiB8fCBzID09ICJIZW5zIiB8fCBzID09ICJDcm93cyIgfHwgcyA9
PSAiRmxhbWluZ29zIik7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBib29sIGNhc3RTdWNjZWVk
ZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKKyAgICBBU1NFUlQoY2FzdFN1Y2NlZWRlZCk7
CisgICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8IHJlc3VsdCA9PSAiSGVucyIgfHwgcmVz
dWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFtaW5nb3MiKTsKIH0KICNlbmRpZiAvLyAh
QVNTRVJUX0RJU0FCTEVECiAKQEAgLTYzMSw4ICs2MzEsOCBAQCB2b2lkIEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFz
RXhwZQogdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWUqIHZhbHVlKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsK
LSAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7Ci0gICAgQVNTRVJU
X1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1
ZS0+YXNPYmplY3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOwogICAgIHsKICAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBz
dHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSk7CiAgICAgICAg
IEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CkBAIC02NjcsMTQgKzY2NywxNCBA
QCB2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRp
bmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeAogCiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVj
dCgmb2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcmVzdWx0OworICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOworICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqZWN0LmdldCgpKTsKKyAgICBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CiAjZW5kaWYgIC8vICFBU1NFUlRfRElT
QUJMRUQKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3Rh
dGljX2Nhc3Q8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7
CiB9CiAKIApAQCAtNjgyLDggKzY4Miw4IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6CiB2b2lk
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0
MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
IHZhbHVlKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICBib29s
IGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChj
YXN0UmVzLCBjYXN0UmVzKTsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmpl
Y3Qob2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVk
ZWQpOwogCiAgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CkBAIC03MDIs
OCArNzAyLDggQEAgdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0UKIHZvaWQgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCiB7CiAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVl
LT5hc09iamVjdCgmb2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMp
OworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOworICAg
IEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAKICAgICBpbnQg
Zm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOwogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmNwcAppbmRleCA4NjNmNWI0MWM1MWEyMzEyYmZkOWYzMjRl
MGM0MjhhZTQyZDZmNDJhLi5jNzFkYmM2MzllYmYzMDBhMDY2YTQxMTI5NzIzNzZmNTZjODhkN2Y1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuY3BwCkBA
IC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IEVuY29kZWRWYWx1ZTo6YXNPYmplY3QoKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSBtX3ZhbHVlLT5hc09iamVjdCgm
cmVzdWx0KTsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSBtX3ZhbHVlLT5hc09iamVjdChyZXN1
bHQpOwogICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAK
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKQEAgLTQ5LDcgKzQ5LDcgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEVuY29kZWRWYWx1ZTo6YXNPYmplY3QoKQogUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gRW5jb2RlZFZhbHVlOjphc0FycmF5KCkKIHsKICAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHJlc3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSBtX3ZhbHVlLT5h
c0FycmF5KCZyZXN1bHQpOworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFzQXJy
YXkocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVk
ZWQpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CkBAIC0xMDMsNyArMTAzLDcgQEAg
dGVtcGxhdGU8PiBFbmNvZGVkVmFsdWUgU2NhbGFyRW5jb2RpbmdUcmFpdHM8dWludDY0X3Q+Ojpl
bmNvZGVWYWx1ZShjb25zdCB1aW50NjQKIHRlbXBsYXRlPD4gYm9vbCBFbmNvZGVkVmFsdWU6OmNv
bnZlcnRUbzxib29sPigpCiB7CiAgICAgYm9vbCByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2Vl
ZGVkID0gbV92YWx1ZS0+YXNCb29sZWFuKCZyZXN1bHQpOworICAgIGJvb2wgY2FzdFN1Y2NlZWRl
ZCA9IG1fdmFsdWUtPmFzQm9vbGVhbihyZXN1bHQpOwogICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1
Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTEyLDcg
KzExMiw3IEBAIHRlbXBsYXRlPD4gYm9vbCBFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxib29sPigp
CiB0ZW1wbGF0ZTw+IGRvdWJsZSBFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxkb3VibGU+KCkKIHsK
ICAgICBkb3VibGUgcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFz
RG91YmxlKCZyZXN1bHQpOworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFzRG91
YmxlKHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2Vl
ZGVkKTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMjEsNyArMTIxLDcgQEAgdGVtcGxhdGU8
PiBkb3VibGUgRW5jb2RlZFZhbHVlOjpjb252ZXJ0VG88ZG91YmxlPigpCiB0ZW1wbGF0ZTw+IGZs
b2F0IEVuY29kZWRWYWx1ZTo6Y29udmVydFRvPGZsb2F0PigpCiB7CiAgICAgZmxvYXQgcmVzdWx0
OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFzRG91YmxlKCZyZXN1bHQpOwor
ICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFzRG91YmxlKHJlc3VsdCk7CiAgICAg
QVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAogICAgIHJldHVy
biByZXN1bHQ7CkBAIC0xMzAsNyArMTMwLDcgQEAgdGVtcGxhdGU8PiBmbG9hdCBFbmNvZGVkVmFs
dWU6OmNvbnZlcnRUbzxmbG9hdD4oKQogdGVtcGxhdGU8PiBpbnQzMl90IEVuY29kZWRWYWx1ZTo6
Y29udmVydFRvPGludDMyX3Q+KCkKIHsKICAgICBpbnQzMl90IHJlc3VsdDsKLSAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSBtX3ZhbHVlLT5hc0ludGVnZXIoJnJlc3VsdCk7CisgICAgYm9vbCBjYXN0
U3VjY2VlZGVkID0gbV92YWx1ZS0+YXNJbnRlZ2VyKHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xMzksNyArMTM5LDcgQEAgdGVtcGxhdGU8PiBpbnQzMl90IEVuY29kZWRWYWx1ZTo6Y29udmVy
dFRvPGludDMyX3Q+KCkKIHRlbXBsYXRlPD4gaW50NjRfdCBFbmNvZGVkVmFsdWU6OmNvbnZlcnRU
bzxpbnQ2NF90PigpCiB7CiAgICAgaW50NjRfdCByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2Vl
ZGVkID0gbV92YWx1ZS0+YXNJbnRlZ2VyKCZyZXN1bHQpOworICAgIGJvb2wgY2FzdFN1Y2NlZWRl
ZCA9IG1fdmFsdWUtPmFzSW50ZWdlcihyZXN1bHQpOwogICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1
Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDcg
KzE0OCw3IEBAIHRlbXBsYXRlPD4gaW50NjRfdCBFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxpbnQ2
NF90PigpCiB0ZW1wbGF0ZTw+IHVpbnQzMl90IEVuY29kZWRWYWx1ZTo6Y29udmVydFRvPHVpbnQz
Ml90PigpCiB7CiAgICAgdWludDMyX3QgcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9
IG1fdmFsdWUtPmFzSW50ZWdlcigmcmVzdWx0KTsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSBt
X3ZhbHVlLT5hc0ludGVnZXIocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVk
ZWQsIGNhc3RTdWNjZWVkZWQpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1Nyw3ICsxNTcs
NyBAQCB0ZW1wbGF0ZTw+IHVpbnQzMl90IEVuY29kZWRWYWx1ZTo6Y29udmVydFRvPHVpbnQzMl90
PigpCiB0ZW1wbGF0ZTw+IHVpbnQ2NF90IEVuY29kZWRWYWx1ZTo6Y29udmVydFRvPHVpbnQ2NF90
PigpCiB7CiAgICAgdWludDY0X3QgcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1f
dmFsdWUtPmFzSW50ZWdlcigmcmVzdWx0KTsKKyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSBtX3Zh
bHVlLT5hc0ludGVnZXIocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQs
IGNhc3RTdWNjZWVkZWQpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE2Niw3ICsxNjYsNyBA
QCB0ZW1wbGF0ZTw+IHVpbnQ2NF90IEVuY29kZWRWYWx1ZTo6Y29udmVydFRvPHVpbnQ2NF90Pigp
CiB0ZW1wbGF0ZTw+IFN0cmluZyBFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxTdHJpbmc+KCkKIHsK
ICAgICBTdHJpbmcgcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFz
U3RyaW5nKCZyZXN1bHQpOworICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFzU3Ry
aW5nKHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2Vl
ZGVkKTsKIAogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IDQ1MDA4OTYxZDFiMDQzM2ZlMDBmMmZkZjZi
NWFhOGZmZjRjMmZkYmQuLjI0OGIwMDg0MGFlZjRhMDk5N2UzYjJjYzJhYjBiZWNiZGQ3ZjI0NmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3Bw
CkBAIC05NCwxMCArOTQsMTUgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmRpc2Nvbm5lY3Qo
KQogCiB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBoaW50cykKIHsK
LSAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZW1vdGVPYmplY3QgPSBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVD
YXN0KG9iamVjdCk7Ci0gICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3QocmVtb3RlT2Jq
ZWN0LCBoaW50cy0+YXNPYmplY3QoKSk7Ci0gICAgfQorICAgIGlmICghbV9pbnNwZWN0b3JBZ2Vu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGludHNP
YmplY3Q7CisgICAgaWYgKCFoaW50cy0+YXNPYmplY3QoaGludHNPYmplY3QpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiByZW1vdGVPYmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KG9iamVjdCk7CisgICAgbV9pbnNw
ZWN0b3JBZ2VudC0+aW5zcGVjdChyZW1vdGVPYmplY3QucmVsZWFzZSgpLCBoaW50c09iamVjdC5y
ZWxlYXNlKCkpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRMaXN0ZW5l
cnNJbXBsKE5vZGUqIG5vZGUsIFZlY3RvcjxFdmVudExpc3RlbmVySW5mbz4mIGxpc3RlbmVyc0Fy
cmF5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAK
aW5kZXggMmM3M2RiOWZkNGJlY2RhNDQ0ZGU5ZjNiODAzNzg3NmFhMjhhNzM3Yi4uNzQ5MTdjMzcz
ZWEyNzEzZTNiNDQyMTNkNmMwMmZhZTcyMzczZWJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKEluc3BlY3RvckFycmF5KiBwc2V1ZG9DbGFz
c0FycmF5KQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHNldWRvQ2xhc3NBcnJheS0+bGVu
Z3RoKCk7ICsraSkgewogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBzZXVkb0NsYXNz
VmFsdWUgPSBwc2V1ZG9DbGFzc0FycmF5LT5nZXQoaSk7CiAgICAgICAgIFN0cmluZyBwc2V1ZG9D
bGFzczsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmco
JnBzZXVkb0NsYXNzKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+
YXNTdHJpbmcocHNldWRvQ2xhc3MpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgaWYgKHBzZXVkb0NsYXNzID09IGFjdGl2ZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDNhM2RlMzBi
M2VkZDc4NTU5NjEyNGRjMThiNzNiMjFhNzA4MTMxYjguLmRhMDEzZWVkZjlkMTNhNDg5NjM5YTIy
N2FmZWIwNGI0NWNjYmQ1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcApAQCAtMTExLDIzICsxMTEsMTkgQEAgdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRp
YyBjb25zdCBVQ2hhciBlbGxpcHNpc1VDaGFyW10gPSB7IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMg
Q29sb3IgcGFyc2VDb2xvcihjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogY29sb3JPYmpl
Y3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gY29sb3JPYmplY3QpCiB7Ci0gICAgaWYgKCFjb2xvck9iamVjdCB8fCAhKCpjb2xvck9i
amVjdCkpCisgICAgaWYgKCFjb2xvck9iamVjdCkKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFu
c3BhcmVudDsKIAogICAgIGludCByOwogICAgIGludCBnOwogICAgIGludCBiOwotICAgIGJvb2wg
c3VjY2VzcyA9ICgqY29sb3JPYmplY3QpLT5nZXRJbnRlZ2VyKCJyIiwgJnIpOwotICAgIHN1Y2Nl
c3MgfD0gKCpjb2xvck9iamVjdCktPmdldEludGVnZXIoImciLCAmZyk7Ci0gICAgc3VjY2VzcyB8
PSAoKmNvbG9yT2JqZWN0KS0+Z2V0SW50ZWdlcigiYiIsICZiKTsKLSAgICBpZiAoIXN1Y2Nlc3Mp
CisgICAgaWYgKCFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiciIsIHIpIHx8ICFjb2xvck9iamVj
dC0+Z2V0SW50ZWdlcigiZyIsIGcpIHx8ICFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiYiIsIGIp
KQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwogCiAgICAgZG91YmxlIGE7Ci0g
ICAgc3VjY2VzcyA9ICgqY29sb3JPYmplY3QpLT5nZXREb3VibGUoImEiLCAmYSk7Ci0gICAgaWYg
KCFzdWNjZXNzKQorICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJsZSgiYSIsIGEpKQogICAg
ICAgICByZXR1cm4gQ29sb3IociwgZywgYik7CiAKICAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUg
WzAuLjFdIHJhbmdlLgpAQCAtMTQyLDcgKzEzOCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBjb2xvck9iamVjdCkKIHN0YXRpYyBDb2xv
ciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBJbnNwZWN0b3JPYmpl
Y3QqIGNvbmZpZ09iamVjdCkKIHsKICAgICBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBj
b2xvck9iamVjdCA9IGNvbmZpZ09iamVjdC0+Z2V0T2JqZWN0KGZpZWxkTmFtZSk7Ci0gICAgcmV0
dXJuIHBhcnNlQ29sb3IoJmNvbG9yT2JqZWN0KTsKKyAgICByZXR1cm4gcGFyc2VDb2xvcihjb2xv
ck9iamVjdCk7CiB9CiAKIHN0YXRpYyBib29sIHBhcnNlUXVhZChjb25zdCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKQEAgLTE1NCw3ICsxNTAsNyBA
QCBzdGF0aWMgYm9vbCBwYXJzZVF1YWQoY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgcXVh
ZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCiAgICAgaWYgKHF1YWRBcnJheS0+bGVuZ3RoKCkgIT0g
Y29vcmRpbmF0ZXNJblF1YWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvb3JkaW5hdGVzSW5RdWFkOyArK2kpIHsKLSAgICAgICAgaWYgKCFxdWFk
QXJyYXktPmdldChpKS0+YXNEb3VibGUoY29vcmRpbmF0ZXMgKyBpKSkKKyAgICAgICAgaWYgKCFx
dWFkQXJyYXktPmdldChpKS0+YXNEb3VibGUoKihjb29yZGluYXRlcyArIGkpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcXVhZC0+c2V0UDEoRmxvYXRQb2ludChjb29y
ZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pKTsKQEAgLTg5OSw3ICs4OTUsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB3aAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGludCBub2RlSWQgPSAwOwotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUt
PmFzSW50ZWdlcigmbm9kZUlkKSkgeworICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFzSW50
ZWdlcihub2RlSWQpKSB7CiAgICAgICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gIkludmFsaWQg
bm9kZUlkcyBpdGVtIHR5cGUuIEV4cGVjdGluZyBpbnRlZ2VyIHR5cGVzLiI7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMTA0NSw3ICsxMDQxLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENv
bmZpZ0Zyb21JbnNwZWN0b3IKIAogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gc3RkOjptYWtl
X3VuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7CiAgICAgYm9vbCBzaG93SW5mbyA9IGZhbHNlOyAv
LyBEZWZhdWx0OiBmYWxzZSAoZG8gbm90IHNob3cgYSB0b29sdGlwKS4KLSAgICBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgJnNob3dJbmZvKTsKKyAgICBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgc2hvd0luZm8p
OwogICAgIGhpZ2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBzaG93SW5mbzsKICAgICBoaWdobGln
aHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdo
bGlnaHRJbnNwZWN0b3JPYmplY3QpOwogICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxp
bmUgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKQEAgLTEwNzksOCArMTA3NSw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodFF1YWQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8
SW5zCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlx
dWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNv
bG9yLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogb3V0bGluZUNvbG9yLCBjb25zdCBi
b29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBz
dGQ6Om1ha2VfdW5pcXVlPEhpZ2hsaWdodENvbmZpZz4oKTsKLSAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yKTsKLSAgICBoaWdobGlnaHRDb25maWctPmNvbnRl
bnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOworICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudCA9IHBhcnNlQ29sb3IoKmNvbG9yKTsKKyAgICBoaWdobGlnaHRDb25maWctPmNv
bnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcigqb3V0bGluZUNvbG9yKTsKICAgICBoaWdobGlnaHRD
b25maWctPnVzZVBhZ2VDb29yZGluYXRlcyA9IHVzZVBhZ2VDb29yZGluYXRlcyA/ICp1c2VQYWdl
Q29vcmRpbmF0ZXMgOiBmYWxzZTsKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodFF1YWQoV1RGOjpt
b3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KQEAgLTExMDcsMTggKzExMDMsMTQgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnN0IFJlZlB0cjxJbnMKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9k
ZSwgKmhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodEZyYW1lKAotICAgIEVycm9yU3RyaW5nKiwKLSAgICBjb25zdCBTdHJpbmcmIGZyYW1lSWQs
Ci0gICAgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLAotICAgIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBvdXRsaW5lQ29sb3IpCit2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGNvbG9yLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0Piogb3V0bGluZUNvbG9yKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZUFn
ZW50LT5mcmFtZUZvcklkKGZyYW1lSWQpOwogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+b3duZXJF
bGVtZW50KCkpIHsKICAgICAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBzdGQ6Om1ha2VfdW5p
cXVlPEhpZ2hsaWdodENvbmZpZz4oKTsKICAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93SW5m
byA9IHRydWU7IC8vIEFsd2F5cyBzaG93IHRvb2x0aXBzIGZvciBmcmFtZXMuCi0gICAgICAgIGhp
Z2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwotICAgICAgICBoaWdo
bGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOwor
ICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKCpjb2xvcik7Cisg
ICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKCpvdXRs
aW5lQ29sb3IpOwogICAgICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUoZnJhbWUtPm93bmVy
RWxlbWVudCgpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4IDA0
YzQ5OTRjNjcyOWNjNGRlZjc0ZGUzYTA1MzdiM2QxOTU2ZjJjYjUuLjJlODdiZTA1NWVlZDkwMWE5
M2FkMTUzZDEyYWZjMTNiODM0NTlmMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC0xODYsOSArMTg2LDkgQEAg
UGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpmaW5kU3Rv
cmFnZUFyZWEoRXJyb3JTdHJpbmcqIGUKIHsKICAgICBTdHJpbmcgc2VjdXJpdHlPcmlnaW47CiAg
ICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IGZhbHNlOwotICAgIGJvb2wgc3VjY2VzcyA9IHN0b3Jh
Z2VJZC0+Z2V0U3RyaW5nKCJzZWN1cml0eU9yaWdpbiIsICZzZWN1cml0eU9yaWdpbik7CisgICAg
Ym9vbCBzdWNjZXNzID0gc3RvcmFnZUlkLT5nZXRTdHJpbmcoInNlY3VyaXR5T3JpZ2luIiwgc2Vj
dXJpdHlPcmlnaW4pOwogICAgIGlmIChzdWNjZXNzKQotICAgICAgICBzdWNjZXNzID0gc3RvcmFn
ZUlkLT5nZXRCb29sZWFuKCJpc0xvY2FsU3RvcmFnZSIsICZpc0xvY2FsU3RvcmFnZSk7CisgICAg
ICAgIHN1Y2Nlc3MgPSBzdG9yYWdlSWQtPmdldEJvb2xlYW4oImlzTG9jYWxTdG9yYWdlIiwgaXNM
b2NhbFN0b3JhZ2UpOwogICAgIGlmICghc3VjY2VzcykgewogICAgICAgICBpZiAoZXJyb3JTdHJp
bmcpCiAgICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSAiSW52YWxpZCBzdG9yYWdlSWQgZm9ybWF0
IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuY3BwCmluZGV4IDBhZTZiZWVhM2ZhZjM2MmFiYTVmYjViNDU5NDllOGVlODVhZTk4NzAu
LjlkMjdiNjMwNGQzNGMxMWY2MmRlZWJlNTgzZjM4NmU0NDRjYTM5YjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAt
NjUsNiArNjUsNyBAQAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oPgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuaD4KICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTsKQEAgLTMyNiwyNyArMzI3LDI3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gaWRi
S2V5RnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3JPYmplY3QqIGtleSkKICAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXk7CiAKICAgICBTdHJpbmcgdHlwZTsKLSAgICBpZiAoIWtleS0+Z2V0U3Ry
aW5nKCJ0eXBlIiwgJnR5cGUpKQorICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInR5cGUiLCB0eXBl
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBudW1iZXIsIChBU0NJSUxpdGVyYWwoIm51bWJlciIpKSk7Ci0gICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc3RyaW5nLCAoQVNDSUlMaXRl
cmFsKCJzdHJpbmciKSkpOwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIGRhdGUsIChBU0NJSUxpdGVyYWwoImRhdGUiKSkpOwotICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIGFycmF5LCAoQVNDSUlMaXRlcmFsKCJhcnJheSIpKSk7Cisg
ICAgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBudW1iZXIoQVNDSUlMaXRlcmFsKCJudW1i
ZXIiKSk7CisgICAgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzdHJpbmcoQVNDSUlMaXRl
cmFsKCJzdHJpbmciKSk7CisgICAgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBkYXRlKEFT
Q0lJTGl0ZXJhbCgiZGF0ZSIpKTsKKyAgICBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGFy
cmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKSk7CiAKICAgICBpZiAodHlwZSA9PSBudW1iZXIpIHsK
ICAgICAgICAgZG91YmxlIG51bWJlcjsKLSAgICAgICAgaWYgKCFrZXktPmdldERvdWJsZSgibnVt
YmVyIiwgJm51bWJlcikpCisgICAgICAgIGlmICgha2V5LT5nZXREb3VibGUoIm51bWJlciIsIG51
bWJlcikpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaWRiS2V5ID0gSURC
S2V5OjpjcmVhdGVOdW1iZXIobnVtYmVyKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gc3RyaW5n
KSB7CiAgICAgICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgICAgIGlmICgha2V5LT5nZXRTdHJpbmco
InN0cmluZyIsICZzdHJpbmcpKQorICAgICAgICBpZiAoIWtleS0+Z2V0U3RyaW5nKCJzdHJpbmci
LCBzdHJpbmcpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlkYktleSA9
IElEQktleTo6Y3JlYXRlU3RyaW5nKHN0cmluZyk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IGRh
dGUpIHsKICAgICAgICAgZG91YmxlIGRhdGU7Ci0gICAgICAgIGlmICgha2V5LT5nZXREb3VibGUo
ImRhdGUiLCAmZGF0ZSkpCisgICAgICAgIGlmICgha2V5LT5nZXREb3VibGUoImRhdGUiLCBkYXRl
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZGJLZXkgPSBJREJLZXk6
OmNyZWF0ZURhdGUoZGF0ZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IGFycmF5KSB7CkBAIC0z
NTUsNyArMzU2LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVj
dG9yT2JqZWN0KEluc3BlY3Rvck9iamVjdCoga2V5KQogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlID0gYXJyYXktPmdldChpKTsKICAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KCZv
YmplY3QpKQorICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGtleUFycmF5LmFwcGVuZChp
ZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KG9iamVjdC5nZXQoKSkpOwogICAgICAgICB9CkBAIC0z
NzksMTIgKzM4MCwxMiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFu
Z2VGcm9tS2V5UmFuZ2UoSW5zcGVjdG9yT2JqZWN0KiBrZXlSYW5nZQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIGJvb2wgbG93ZXJPcGVuOwotICAgIGlmICgha2V5UmFuZ2UtPmdldEJv
b2xlYW4oImxvd2VyT3BlbiIsICZsb3dlck9wZW4pKQorICAgIGlmICgha2V5UmFuZ2UtPmdldEJv
b2xlYW4oImxvd2VyT3BlbiIsIGxvd2VyT3BlbikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIElEQktleVJhbmdlOjpMb3dlckJvdW5kVHlwZSBsb3dlckJvdW5kVHlwZSA9IGxvd2VyT3Bl
biA/IElEQktleVJhbmdlOjpMb3dlckJvdW5kT3BlbiA6IElEQktleVJhbmdlOjpMb3dlckJvdW5k
Q2xvc2VkOwogCiAgICAgYm9vbCB1cHBlck9wZW47Ci0gICAgaWYgKCFrZXlSYW5nZS0+Z2V0Qm9v
bGVhbigidXBwZXJPcGVuIiwgJnVwcGVyT3BlbikpCisgICAgaWYgKCFrZXlSYW5nZS0+Z2V0Qm9v
bGVhbigidXBwZXJPcGVuIiwgdXBwZXJPcGVuKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgSURCS2V5UmFuZ2U6OlVwcGVyQm91bmRUeXBlIHVwcGVyQm91bmRUeXBlID0gdXBwZXJPcGVu
ID8gSURCS2V5UmFuZ2U6OlVwcGVyQm91bmRPcGVuIDogSURCS2V5UmFuZ2U6OlVwcGVyQm91bmRD
bG9zZWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKaW5kZXggZWI4YTQ5MjJiYTkyZTdiZjM1YjA2MGM1YWRlMGY1MzQ3OGE4M2E2NS4uZjdj
NWIxODA0NGZlNjQ1Zjc2OGEzMTM2NTBlYWQ4MTM3MjE4YWVhOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTczOSw3ICs3MzksNyBA
QCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZy
YW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcgogICAgIGlmIChtX3NjcmlwdHNUb0V2YWx1YXRlT25M
b2FkKSB7CiAgICAgICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogKm1fc2NyaXB0c1RvRXZh
bHVhdGVPbkxvYWQpIHsKICAgICAgICAgICAgIFN0cmluZyBzY3JpcHRUZXh0OwotICAgICAgICAg
ICAgaWYgKGtleVZhbHVlUGFpci52YWx1ZS0+YXNTdHJpbmcoJnNjcmlwdFRleHQpKQorICAgICAg
ICAgICAgaWYgKGtleVZhbHVlUGFpci52YWx1ZS0+YXNTdHJpbmcoc2NyaXB0VGV4dCkpCiAgICAg
ICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLmV4ZWN1dGVTY3JpcHQoc2NyaXB0VGV4dCk7CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVwbGF5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clJlcGxheUFnZW50LmNwcAppbmRleCBlYzRhNGJhMjRiNjg3Y2Y0ZjY5MDU1M2I0YmQzMDM0YTY3
MzY5NDg4Li5mMDhmYjgyN2Q0OGUxZTgyYjBiOGVkYTNkOWY5NjMyNmI0MWU0YjkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAKQEAg
LTM0MCwxMiArMzQwLDEyIEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJp
bmcoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6
cmVwbGF5VG9Qb3NpdGlvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiBwb3NpdGlvbk9iamVjdCwgYm9vbCBmYXN0UmVwbGF5KQogewogICAg
IFJlcGxheVBvc2l0aW9uIHBvc2l0aW9uOwotICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldElu
dGVnZXIoQVNDSUlMaXRlcmFsKCJzZWdtZW50T2Zmc2V0IiksICZwb3NpdGlvbi5zZWdtZW50T2Zm
c2V0KSkgeworICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFs
KCJzZWdtZW50T2Zmc2V0IiksIHBvc2l0aW9uLnNlZ21lbnRPZmZzZXQpKSB7CiAgICAgICAgICpl
cnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ291bGRuJ3QgZGVjb2RlIFJlcGxheVBvc2l0aW9u
IHNlZ21lbnQgb2Zmc2V0IHByb3ZpZGVkIHRvIFJlcGxheUFnZW50LnJlcGxheVRvUG9zaXRpb24u
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXBvc2l0aW9uT2JqZWN0LT5n
ZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaW5wdXRPZmZzZXQiKSwgJnBvc2l0aW9uLmlucHV0T2Zm
c2V0KSkgeworICAgIGlmICghcG9zaXRpb25PYmplY3QtPmdldEludGVnZXIoQVNDSUlMaXRlcmFs
KCJpbnB1dE9mZnNldCIpLCBwb3NpdGlvbi5pbnB1dE9mZnNldCkpIHsKICAgICAgICAgKmVycm9y
U3RyaW5nID0gQVNDSUlMaXRlcmFsKCJDb3VsZG4ndCBkZWNvZGUgUmVwbGF5UG9zaXRpb24gaW5w
dXQgb2Zmc2V0IHByb3ZpZGVkIHRvIFJlcGxheUFnZW50LnJlcGxheVRvUG9zaXRpb24uIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggOTA3ODFhMjczZGRkODExNjA0YzY3NDM2
M2E0YWFjMGE1YTFjNzE4NS4uMGZhZjQ1ZWI5Zjc5YTQ0YmYwMmUzZjUxMmZkMGVmMWNkNzgwZTg5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmNwcApAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAg
ICAgICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9leHRyYVJlcXVl
c3RIZWFkZXJzLT5lbmQoKTsKICAgICAgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9leHRyYVJlcXVlc3RIZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgICAgIGlmIChpdC0+dmFs
dWUtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5hc1N0cmlu
Zyh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQt
PmtleSwgdmFsdWUpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDcyMWFiZTMyZGQ5NDVmNDNhZmY5
ZDNhZDNjZDNmNzJmMjNhZTc3MjAuLjJkYTkxZDEyYmQxYzBiYTRlNmQzMjAxNjBjOWM1ZTlhZTU0
MjM4NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKQEAgLTU3Miw4ICs1NzIsOCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aQogICAg
ICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eT4+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJl
dmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKGNhbm9uaWNhbFByb3BlcnR5TmFtZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9w
ZXJ0eS5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5wYXJz
ZWRPaykgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzUHJpb3JpdHkgPSBh
Y3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5OjpQcmlvcml0eSwgJnByZXZpb3VzUHJpb3JpdHkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdWNjZXNzU3RhdHVzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmcoSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzLCAmcHJldmlvdXNTdGF0
dXMpOworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzUHJpb3JpdHkgPSBhY3Rp
dmVJdC0+dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5OjpQcmlvcml0eSwgcHJldmlvdXNQcmlvcml0eSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHN1Y2Nlc3NTdGF0dXMgPSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXMsIHByZXZpb3VzU3RhdHVzKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzU3RhdHVzICYmIHByZXZpb3VzU3Rh
dHVzICE9ICJpbmFjdGl2ZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJv
cGVydHlFbnRyeS5pbXBvcnRhbnQgfHwgIXN1Y2Nlc3NQcmlvcml0eSkgLy8gUHJpb3JpdHkgbm90
IHNldCA9PSAibm90IGltcG9ydGFudCIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwpAQCAtNTg0LDcgKzU4NCw3IEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxl
V2l0aFByb3BlcnRpCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXZpb3VzUGFyc2Vk
T2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBhY3RpdmVJdC0+dmFs
dWUtPmdldEJvb2xlYW4oSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFy
c2VkT2ssICZwcmV2aW91c1BhcnNlZE9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgcHJldmlvdXNQYXJzZWRPayk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmgKaW5kZXggNDViNGNkMmQ2NDgxMGY2NmQwOTYxMzQxNzQxYTcyMTA1ODMzMDIxNy4u
YzFmYWQwOTU2MjM0ZmI5YjkwNTM0NjJhZmMwZjQ0NmMyYjY5MDAwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC02NSwxMSArNjUsMTEg
QEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmdl
dFN0cmluZygic3R5bGVTaGVldElkIiwgJm1fc3R5bGVTaGVldElkKSkKKyAgICAgICAgaWYgKCF2
YWx1ZS0+Z2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBtX3N0eWxlU2hlZXRJZCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiBvcmRpbmFsVmFsdWUgPSB2YWx1ZS0+Z2V0KCJvcmRpbmFsIik7Ci0gICAgICAg
IGlmICghb3JkaW5hbFZhbHVlIHx8ICFvcmRpbmFsVmFsdWUtPmFzSW50ZWdlcigmbV9vcmRpbmFs
KSkKKyAgICAgICAgaWYgKCFvcmRpbmFsVmFsdWUgfHwgIW9yZGluYWxWYWx1ZS0+YXNJbnRlZ2Vy
KG1fb3JkaW5hbCkpCiAgICAgICAgICAgICBtX3N0eWxlU2hlZXRJZCA9ICIiOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwCmluZGV4IDgwN2RkMjg2NWU3ZGE4ODRlYzkyM2IzYWEzYmY1M2IzMzAzZDY3NjIuLjk2MzRj
NmFkNDc0ZjBkMGI0N2Q4Mzg4Y2NlMTM0MjQ0ODllZWI1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKQEAgLTE4NCw3ICsx
ODQsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0RnJvbUNvbnNvbGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZwogICAgIGlmICghdGl0bGUuaXNFbXB0eSgp
KSB7CiAgICAgICAgIGZvciAoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkIDogbV9w
ZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzKSB7CiAgICAgICAgICAgICBTdHJpbmcgcmVjb3Jk
VGl0bGU7Ci0gICAgICAgICAgICByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
dGl0bGUiKSwgJnJlY29yZFRpdGxlKTsKKyAgICAgICAgICAgIHJlY29yZC5kYXRhLT5nZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJ0aXRsZSIpLCByZWNvcmRUaXRsZSk7CiAgICAgICAgICAgICBpZiAo
cmVjb3JkVGl0bGUgPT0gdGl0bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC0yMDYsNyArMjA2LDcgQEAgUGFzc1JlZlB0cjxKU0M6OlByb2ZpbGU+IEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6OkV4ZWNTdGF0ZSoKICAgICAgICAgY29u
c3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkID0gbV9wZW5kaW5nQ29uc29sZVByb2ZpbGVS
ZWNvcmRzW2ldOwogCiAgICAgICAgIFN0cmluZyByZWNvcmRUaXRsZTsKLSAgICAgICAgcmVjb3Jk
LmRhdGEtPmdldFN0cmluZyhBU0NJSUxpdGVyYWwoInRpdGxlIiksICZyZWNvcmRUaXRsZSk7Cisg
ICAgICAgIHJlY29yZC5kYXRhLT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0aXRsZSIpLCByZWNv
cmRUaXRsZSk7CiAKICAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSB8fCByZWNvcmRUaXRsZSA9
PSB0aXRsZSkgewogICAgICAgICAgICAgUmVmUHRyPEpTQzo6UHJvZmlsZT4gcHJvZmlsZSA9IHN0
b3BQcm9maWxpbmcoZXhlYywgdGl0bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvcldvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggODU3M2Q4NmFjNDVmYTMxNGUxYWIzNGQy
ODhhMGVhMzc5MzEwYTBlOS4uNTkzMWNhZWZiMDg2NjRhY2ZlNzZlZGU4NmJkMWZmMWRmZjNjN2Zk
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvcldvcmtlckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyQWdl
bnQuY3BwCkBAIC04MiwxNCArODIsMTYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIC8vIFdv
cmtlckdsb2JhbFNjb3BlUHJveHk6OlBhZ2VJbnNwZWN0b3IgaW1wbGVtZW50YXRpb24KLSAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpIG92ZXJyaWRlCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlU3RyaW5nKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVz
c2FnZSk7Ci0gICAgICAgIGlmICghdmFsdWUpCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcGFyc2VkTWVzc2FnZTsKKyAgICAgICAgaWYgKCFJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09O
KG1lc3NhZ2VTdHJpbmcsIHBhcnNlZE1lc3NhZ2UpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gdmFsdWUtPmFzT2Jq
ZWN0KCk7Ci0gICAgICAgIGlmICghbWVzc2FnZU9iamVjdCkKKworICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0OworICAgICAgICBpZiAoIXBhcnNlZE1lc3NhZ2Ut
PmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaXNwYXRjaE1lc3NhZ2VGcm9tV29ya2VyKG1faWQsIG1l
c3NhZ2VPYmplY3QpOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="263545"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>