<?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>73899</bug_id>
          
          <creation_ts>2011-12-06 02:56:56 -0800</creation_ts>
          <short_desc>[V8] Multiple VMs: refactor SerializedScriptValue.</short_desc>
          <delta_ts>2014-12-16 00:48:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>donggwan.kim</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>515765</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-12-06 02:56:56 -0800</bug_when>
    <thetext>Extract v8 specific object traverse/construct to dedicated classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515766</commentid>
    <comment_count>1</comment_count>
      <attachid>118014</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-12-06 02:59:09 -0800</bug_when>
    <thetext>Created attachment 118014
[DRAFT]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516145</commentid>
    <comment_count>2</comment_count>
      <attachid>118014</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-12-06 12:20:00 -0800</bug_when>
    <thetext>Comment on attachment 118014
[DRAFT]

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

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1437
&gt; +    bool readImageData(ScriptValueDeserializer&amp; deserializer)

I cant think of any time in WebKit that we pass around a non-pod object by reference.  I guess RefPtr&lt;&gt;, but that&apos;s a template.  Although I suspect the compiler might do the right thing with virtual disapatch, since &amp; isn&apos;t that different from *, I doubt this is kosher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055935</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-12-16 00:48:13 -0800</bug_when>
    <thetext>Closing some V8-related work items.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118014</attachid>
            <date>2011-12-06 02:59:09 -0800</date>
            <delta_ts>2011-12-06 12:20:00 -0800</delta_ts>
            <desc>[DRAFT]</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>51631</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YmI5ZjliLi4xNDIwYmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODEg
QEAKKzIwMTEtMTItMDYgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW1Y4XSBNdWx0aXBsZSBWTXM6IHJlZmFjdG9yIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcz
ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0
cmFjdCB2OCBzcGVjaWZpYyBvYmplY3QgdHJhdmVyc2UvY29uc3RydWN0IHRvIGRlZGljYXRlZCBj
bGFzc2VzLgorCisgICAgICAgICogYmluZGluZ3MvcHVibGljL1NjcmlwdFZhbHVlRGVzZXJpYWxp
emVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWVEZXNlcmlhbGl6ZXI6
On5TY3JpcHRWYWx1ZURlc2VyaWFsaXplcik6CisgICAgICAgICogYmluZGluZ3MvcHVibGljL1Nj
cmlwdFZhbHVlU2VyaWFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZh
bHVlU2VyaWFsaXplcjo6flNjcmlwdFZhbHVlU2VyaWFsaXplcik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4T2Jq
ZWN0TWFwOjpSZWFkZXI6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6
OlJlYWRlcjo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6UmVhZGVyOjpp
c0VvZik6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6UmVhZGVyOjpyZWFkU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpSZWFkZXI6OnJlYWRTdHJpbmdPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlJlYWRlcjo6cmVhZEludDMyKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpSZWFkZXI6OnJlYWRVaW50MzIpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlJlYWRlcjo6cmVhZERhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VjhPYmplY3RNYXA6OlJlYWRlcjo6cmVhZE51bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpWOE9iamVjdE1hcDo6UmVhZGVyOjpyZWFkTnVtYmVyT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlY4T2JqZWN0TWFwOjpSZWFkZXI6OnJlYWRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhPYmplY3RNYXA6OlJlYWRlcjo6cmVhZEFycmF5QnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4T2JqZWN0TWFwOjpSZWFkZXI6OnJlYWRBcnJheUJ1ZmZlclZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlJlYWRlcjo6cmVhZFJlZ0V4cCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOE9iamVjdE1hcDo6UmVhZGVyOjpyZWFkQmxvYik6CisgICAgICAgIChXZWJDb3Jl
OjpWOE9iamVjdE1hcDo6UmVhZGVyOjpyZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9i
amVjdE1hcDo6UmVhZGVyOjpyZWFkRmlsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmpl
Y3RNYXA6OlY4RGVzZXJpYWxpemVyOjpWOERlc2VyaWFsaXplcik6CisgICAgICAgIChXZWJDb3Jl
OjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4T2JqZWN0TWFwOjpWOERlc2VyaWFsaXplcjo6bmV3T2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpWOERlc2VyaWFsaXplcjo6dHJ5R2V0T2JqZWN0RnJvbU9i
amVjdFJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlh
bGl6ZXI6OnRyeUdldFRyYW5zZmVycmVkTWVzc2FnZVBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxpemVyOjpvYmplY3RSZWZlcmVuY2VDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OmFkZFJlZmVyZW5jZUZv
clRvcCk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OnB1
c2hVbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxp
emVyOjpwdXNoTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlh
bGl6ZXI6OnB1c2hUcnVlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpWOERlc2Vy
aWFsaXplcjo6cHVzaFRydWVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6
OlY4RGVzZXJpYWxpemVyOjpwdXNoRmFsc2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RN
YXA6OlY4RGVzZXJpYWxpemVyOjpwdXNoRmFsc2VPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxpemVyOjpwdXNoU2NyaXB0U3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpWOERlc2VyaWFsaXplcjo6cHVzaFNjcmlwdFN0cmluZ09i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OnB1
c2hJbnQzMik6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6
OnB1c2hVSW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxp
emVyOjpwdXNoRGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlh
bGl6ZXI6OnB1c2hOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVz
ZXJpYWxpemVyOjpwdXNoTnVtYmVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0
TWFwOjpWOERlc2VyaWFsaXplcjo6cHVzaEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmpl
Y3RNYXA6OlY4RGVzZXJpYWxpemVyOjpwdXNoRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9i
amVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OnB1c2hGaWxlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OnB1c2hJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxpemVyOjpwdXNoQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxpemVyOjpwdXNoUmVnRXhwKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpWOERlc2VyaWFsaXplcjo6cHVzaE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OnB1c2hTcGFy
c2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6
OnB1c2hJbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVzZXJp
YWxpemVyOjpwdXNoVWludDhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6
VjhEZXNlcmlhbGl6ZXI6OnB1c2hJbnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2Jq
ZWN0TWFwOjpWOERlc2VyaWFsaXplcjo6cHVzaFVpbnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNv
cmU6OlY4T2JqZWN0TWFwOjpWOERlc2VyaWFsaXplcjo6cHVzaEludDMyQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxpemVyOjpwdXNoVWludDMyQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxpemVyOjpwdXNoRmxv
YXQzMkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpWOERlc2VyaWFsaXpl
cjo6cHVzaEZsb2F0NjRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhE
ZXNlcmlhbGl6ZXI6OnB1c2hEYXRhVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1h
cDo6VjhEZXNlcmlhbGl6ZXI6OnB1c2hBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpW
OE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OnB1c2hUeXBlZEFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OlY4T2JqZWN0TWFwOjpWOERlc2VyaWFsaXplcjo6aW5pdGlhbGl6ZU9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OnB1c2gpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlY4RGVzZXJpYWxpemVyOjpwb3BWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6VjhEZXNlcmlhbGl6ZXI6OmVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisKIDIwMTEtMTAtMzEgIEpl
cmVteSBBcHRob3JwICA8amVyZW15YUBnb29nbGUuY29tPgogCiAgICAgICAgIEZpeCBhIGNyYXNo
IHJlbGF0aW5nIHRvIGFub255bW91cyBibG9jayBtZXJnaW5nIGluCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9wdWJsaWMvU2NyaXB0VmFsdWVEZXNlcmlhbGl6ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3B1YmxpYy9TY3JpcHRWYWx1ZURlc2VyaWFsaXplci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDg5MjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9wdWJsaWMvU2NyaXB0VmFsdWVEZXNlcmlhbGl6
ZXIuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRWYWx1ZURlc2VyaWFsaXplcl9oCisj
ZGVmaW5lIFNjcmlwdFZhbHVlRGVzZXJpYWxpemVyX2gKKworI2luY2x1ZGUgPHN0ZGludC5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQXJyYXlCdWZmZXI7CitjbGFzcyBCbG9iOworY2xhc3MgRmlsZTsKK2NsYXNzIEZpbGVMaXN0
OworY2xhc3MgSW1hZ2VEYXRhOworCitjbGFzcyBTY3JpcHRWYWx1ZURlc2VyaWFsaXplciB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+U2NyaXB0VmFsdWVEZXNlcmlhbGl6ZXIoKSB7IH0KKworICAg
IHZpcnR1YWwgdWludDMyX3Qgb2JqZWN0UmVmZXJlbmNlQ291bnQoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFkZFJlZmVyZW5jZUZvclRvcCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdHJ5R2V0
T2JqZWN0RnJvbU9iamVjdFJlZmVyZW5jZSh1aW50MzJfdCByZWZlcmVuY2UpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgdHJ5R2V0VHJhbnNmZXJyZWRNZXNzYWdlUG9ydCh1aW50MzJfdCBpbmRleCkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBuZXdBcnJheSh1aW50MzJfdCBsZW5ndGgpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgbmV3T2JqZWN0KCkgPSAwOworCisgICAgdmlydHVhbCBib29sIHB1c2hV
bmRlZmluZWQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1c2hOdWxsKCkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBwdXNoVHJ1ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaFRydWVPYmpl
Y3QoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1c2hGYWxzZSgpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgcHVzaEZhbHNlT2JqZWN0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXNoU2NyaXB0
U3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEsIHVpbnQzMl90IGxlbmd0aCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBwdXNoU2NyaXB0U3RyaW5nT2JqZWN0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBw
dXNoSW50MzIoaW50MzJfdCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXNoVUludDMyKHVpbnQz
Ml90KSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1c2hEYXRlKGRvdWJsZSBudW1iZXJWYWx1ZSkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXNoTnVtYmVyKGRvdWJsZSkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBwdXNoTnVtYmVyT2JqZWN0KGRvdWJsZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBw
dXNoQmxvYihQYXNzUmVmUHRyPEJsb2I+KSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1c2hGaWxl
KFBhc3NSZWZQdHI8RmlsZT4pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaEZpbGVMaXN0KFBh
c3NSZWZQdHI8RmlsZUxpc3Q+KSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1c2hJbWFnZURhdGEo
UGFzc1JlZlB0cjxJbWFnZURhdGE+KSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1c2hBcnJheSh1
aW50MzJfdCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaFJlZ0V4cCh1aW50MzJf
dCBmbGFncykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXNoT2JqZWN0KHVpbnQzMl90IG51bVBy
b3BlcnRpZXMpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaFNwYXJzZUFycmF5KHVpbnQzMl90
IG51bVByb3BlcnRpZXMsIHVpbnQzMl90IGxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBw
dXNoSW50OEFycmF5KHVpbnQzMl90IGJ5dGVPZmZzZXQsIHVpbnQzMl90IGJ5dGVMZW5ndGgpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaFVpbnQ4QXJyYXkodWludDMyX3QgYnl0ZU9mZnNldCwg
dWludDMyX3QgYnl0ZUxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXNoSW50MTZBcnJh
eSh1aW50MzJfdCBieXRlT2Zmc2V0LCB1aW50MzJfdCBieXRlTGVuZ3RoKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHB1c2hVaW50MTZBcnJheSh1aW50MzJfdCBieXRlT2Zmc2V0LCB1aW50MzJfdCBi
eXRlTGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1c2hJbnQzMkFycmF5KHVpbnQzMl90
IGJ5dGVPZmZzZXQsIHVpbnQzMl90IGJ5dGVMZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
cHVzaFVpbnQzMkFycmF5KHVpbnQzMl90IGJ5dGVPZmZzZXQsIHVpbnQzMl90IGJ5dGVMZW5ndGgp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaEZsb2F0MzJBcnJheSh1aW50MzJfdCBieXRlT2Zm
c2V0LCB1aW50MzJfdCBieXRlTGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1c2hGbG9h
dDY0QXJyYXkodWludDMyX3QgYnl0ZU9mZnNldCwgdWludDMyX3QgYnl0ZUxlbmd0aCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBwdXNoRGF0YVZpZXcodWludDMyX3QgYnl0ZU9mZnNldCwgdWludDMy
X3QgYnl0ZUxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXNoQXJyYXlCdWZmZXIoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4pID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFNjcmlwdFZhbHVlRGVzZXJpYWxpemVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3B1YmxpYy9TY3JpcHRWYWx1ZVNlcmlhbGl6ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3B1YmxpYy9TY3JpcHRWYWx1ZVNlcmlhbGl6ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWI0ZmNkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvcHVibGljL1NjcmlwdFZhbHVlU2VyaWFsaXplci5oCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNjcmlwdFZhbHVlU2VyaWFsaXplcl9oCisjZGVmaW5lIFNj
cmlwdFZhbHVlU2VyaWFsaXplcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Ny
aXB0VmFsdWVXcml0ZXI7CisKK2NsYXNzIFNjcmlwdFZhbHVlU2VyaWFsaXplciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+U2NyaXB0VmFsdWVTZXJpYWxpemVyKCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2VyaWFsaXplKFNjcmlwdFZhbHVlV3JpdGVyKikgPSAwOworfTsKKworY2xhc3MgU2Ny
aXB0VmFsdWVXcml0ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCB3cml0ZU51bGwoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpID0gMDsKKworICAgIC8vIEZJWE1FOiBzdXBwb3J0IG90aGVyIHR5cGVzLgorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0VmFsdWVTZXJpYWxpemVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCmluZGV4IDQyYTM3MDguLmQyMDU4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNDcsNiArNDcs
OCBAQAogI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKICNpbmNsdWRlICJJbnQ4QXJyYXkuaCIKICNp
bmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlRGVzZXJpYWxpemVy
LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWVTZXJpYWxpemVyLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCiAjaW5jbHVkZSAiVWludDE2QXJyYXkuaCIKICNpbmNsdWRlICJVaW50MzJBcnJh
eS5oIgpAQCAtMjY3LDcgKzI2OSw3IEBAIHByaXZhdGU6CiAKIC8vIFdyaXRlciBpcyByZXNwb25z
aWJsZSBmb3Igc2VyaWFsaXppbmcgcHJpbWl0aXZlIHR5cGVzIGFuZCBzdG9yaW5nCiAvLyBpbmZv
cm1hdGlvbiB1c2VkIHRvIHJlY29uc3RydWN0IGNvbXBvc2l0ZSB0eXBlcy4KLWNsYXNzIFdyaXRl
ciB7CitjbGFzcyBXcml0ZXIgOiBwdWJsaWMgU2NyaXB0VmFsdWVXcml0ZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFdyaXRlcik7CiBwdWJsaWM6CiAgICAgV3JpdGVyKCkKQEAgLTExMDcs
MjMgKzExMDksNiBAQCBTZXJpYWxpemVyOjpTdGF0ZUJhc2UqIFNlcmlhbGl6ZXI6OmRvU2VyaWFs
aXplKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgU3RhdAogICAgIHJldHVybiAwOwogfQog
Ci0vLyBJbnRlcmZhY2UgdXNlZCBieSBSZWFkZXIgdG8gY3JlYXRlIG9iamVjdHMgb2YgY29tcG9z
aXRlIHR5cGVzLgotY2xhc3MgQ29tcG9zaXRlQ3JlYXRvciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+Q29tcG9zaXRlQ3JlYXRvcigpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGNvbnN1bWVUb3BP
ZlN0YWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiopID0gMDsKLSAgICB2aXJ0dWFsIHVpbnQzMl90
IG9iamVjdFJlZmVyZW5jZUNvdW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXNoT2JqZWN0
UmVmZXJlbmNlKGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgdHJ5R2V0T2JqZWN0RnJvbU9iamVjdFJlZmVyZW5jZSh1aW50MzJfdCByZWZlcmVuY2Us
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgdHJ5R2V0VHJh
bnNmZXJyZWRNZXNzYWdlUG9ydCh1aW50MzJfdCBpbmRleCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBuZXdBcnJheSh1aW50MzJfdCBsZW5ndGgpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgbmV3T2JqZWN0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjb21w
bGV0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KikgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBjb21wbGV0ZU9iamVjdCh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4qKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNvbXBsZXRlU3Bh
cnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWludDMyX3QgbGVuZ3RoLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4qKSA9IDA7Ci19OwotCiAvLyBSZWFkZXIgaXMgcmVzcG9uc2libGUgZm9y
IGRlc2VyaWFsaXppbmcgcHJpbWl0aXZlIHR5cGVzIGFuZAogLy8gcmVzdG9yaW5nIGluZm9ybWF0
aW9uIGFib3V0IHNhdmVkIG9iamVjdHMgb2YgY29tcG9zaXRlIHR5cGVzLgogY2xhc3MgUmVhZGVy
IHsKQEAgLTExMzcsMTk0ICsxMTIyLDE5NyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChsZW5n
dGggPj0gMCk7CiAgICAgfQogCi0gICAgYm9vbCBpc0VvZigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb24gPj0gbV9sZW5ndGg7IH0KKyAgICB1aW50MzJfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV92ZXJzaW9uOyB9CiAKLSAgICBib29sIHJlYWQodjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2
YWx1ZSwgQ29tcG9zaXRlQ3JlYXRvciYgY3JlYXRvcikKKyAgICBib29sIHJlYWQoU2NyaXB0VmFs
dWVEZXNlcmlhbGl6ZXImIGRlc2VyaWFsaXplcikKICAgICB7Ci0gICAgICAgIFNlcmlhbGl6YXRp
b25UYWcgdGFnOwotICAgICAgICBpZiAoIXJlYWRUYWcoJnRhZykpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUmVmZXJlbmNl
Q291bnRUYWc6IHsKLSAgICAgICAgICAgIGlmIChtX3ZlcnNpb24gPD0gMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB1aW50MzJfdCByZWZlcmVuY2VUYWJsZVNp
emU7Ci0gICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmcmVmZXJlbmNlVGFibGVTaXplKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIHRl
c3QgZmFpbHMsIHRoZW4gdGhlIHNlcmlhbGl6ZXIgYW5kIGRlc2VyaWFsaXplciBkaXNhZ3JlZSBh
Ym91dCB0aGUgYXNzaWdubWVudAotICAgICAgICAgICAgLy8gb2Ygb2JqZWN0IHJlZmVyZW5jZSBJ
RHMuIE9uIHRoZSBkZXNlcmlhbGl6YXRpb24gc2lkZSwgdGhpcyBtZWFucyB0aGVyZSBhcmUgdG9v
IG1hbnkgb3IgdG9vIGZldwotICAgICAgICAgICAgLy8gY2FsbHMgdG8gcHVzaE9iamVjdFJlZmVy
ZW5jZS4KLSAgICAgICAgICAgIGlmIChyZWZlcmVuY2VUYWJsZVNpemUgIT0gY3JlYXRvci5vYmpl
Y3RSZWZlcmVuY2VDb3VudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW52YWxpZFRhZzoK
KyAgICAgICAgaWYgKCFyZWFkVmVyc2lvbihtX3ZlcnNpb24pIHx8IG1fdmVyc2lvbiA+IHdpcmVG
b3JtYXRWZXJzaW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIFBh
ZGRpbmdUYWc6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBVbmRlZmlu
ZWRUYWc6Ci0gICAgICAgICAgICAqdmFsdWUgPSB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBOdWxsVGFnOgotICAgICAgICAgICAgKnZhbHVlID0gdjg6
Ok51bGwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRydWVUYWc6Ci0gICAg
ICAgICAgICAqdmFsdWUgPSB2ODo6VHJ1ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRmFsc2VUYWc6Ci0gICAgICAgICAgICAqdmFsdWUgPSB2ODo6RmFsc2UoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRydWVPYmplY3RUYWc6Ci0gICAgICAgICAgICAq
dmFsdWUgPSB2ODo6Qm9vbGVhbk9iamVjdDo6TmV3KHRydWUpOwotICAgICAgICAgICAgY3JlYXRv
ci5wdXNoT2JqZWN0UmVmZXJlbmNlKCp2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBGYWxzZU9iamVjdFRhZzoKLSAgICAgICAgICAgICp2YWx1ZSA9IHY4OjpCb29sZWFu
T2JqZWN0OjpOZXcoZmFsc2UpOwotICAgICAgICAgICAgY3JlYXRvci5wdXNoT2JqZWN0UmVmZXJl
bmNlKCp2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJpbmdUYWc6
Ci0gICAgICAgICAgICBpZiAoIXJlYWRTdHJpbmcodmFsdWUpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0cmluZ09iamVj
dFRhZzoKLSAgICAgICAgICAgIGlmICghcmVhZFN0cmluZ09iamVjdCh2YWx1ZSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY3JlYXRvci5wdXNoT2JqZWN0UmVm
ZXJlbmNlKCp2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQzMlRh
ZzoKLSAgICAgICAgICAgIGlmICghcmVhZEludDMyKHZhbHVlKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVaW50MzJUYWc6
Ci0gICAgICAgICAgICBpZiAoIXJlYWRVaW50MzIodmFsdWUpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERhdGVUYWc6Ci0g
ICAgICAgICAgICBpZiAoIXJlYWREYXRlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBjcmVhdG9yLnB1c2hPYmplY3RSZWZlcmVuY2UoKnZhbHVlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE51bWJlclRhZzoKLSAgICAgICAgICAg
IGlmICghcmVhZE51bWJlcih2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTnVtYmVyT2JqZWN0VGFnOgotICAgICAg
ICAgICAgaWYgKCFyZWFkTnVtYmVyT2JqZWN0KHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBjcmVhdG9yLnB1c2hPYmplY3RSZWZlcmVuY2UoKnZhbHVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJsb2JUYWc6Ci0gICAgICAgICAg
ICBpZiAoIXJlYWRCbG9iKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBjcmVhdG9yLnB1c2hPYmplY3RSZWZlcmVuY2UoKnZhbHVlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbGVUYWc6Ci0gICAgICAgICAgICBpZiAoIXJlYWRG
aWxlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBj
cmVhdG9yLnB1c2hPYmplY3RSZWZlcmVuY2UoKnZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEZpbGVMaXN0VGFnOgotICAgICAgICAgICAgaWYgKCFyZWFkRmlsZUxpc3Qo
dmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNyZWF0
b3IucHVzaE9iamVjdFJlZmVyZW5jZSgqdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW1hZ2VEYXRhVGFnOgotICAgICAgICAgICAgaWYgKCFyZWFkSW1hZ2VEYXRhKHZh
bHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjcmVhdG9y
LnB1c2hPYmplY3RSZWZlcmVuY2UoKnZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIGNhc2UgQXJyYXlUYWc6IHsKLSAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKLSAgICAg
ICAgICAgIGlmICghZG9SZWFkVWludDMyKCZsZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGlmICghY3JlYXRvci5jb21wbGV0ZUFycmF5KGxlbmd0aCwg
dmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgUmVnRXhwVGFnOgotICAgICAgICAgICAgaWYgKCFy
ZWFkUmVnRXhwKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBjcmVhdG9yLnB1c2hPYmplY3RSZWZlcmVuY2UoKnZhbHVlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE9iamVjdFRhZzogewotICAgICAgICAgICAgdWludDMyX3QgbnVt
UHJvcGVydGllczsKLSAgICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZudW1Qcm9wZXJ0aWVz
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWNyZWF0
b3IuY29tcGxldGVPYmplY3QobnVtUHJvcGVydGllcywgdmFsdWUpKQorICAgICAgICB3aGlsZSAo
IWlzRW9mKCkpIHsKKyAgICAgICAgICAgIFNlcmlhbGl6YXRpb25UYWcgdGFnOworICAgICAgICAg
ICAgaWYgKCFyZWFkVGFnKCZ0YWcpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU3BhcnNlQXJyYXlUYWc6
IHsKLSAgICAgICAgICAgIHVpbnQzMl90IG51bVByb3BlcnRpZXM7Ci0gICAgICAgICAgICB1aW50
MzJfdCBsZW5ndGg7Ci0gICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbnVtUHJvcGVydGll
cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkb1Jl
YWRVaW50MzIoJmxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgaWYgKCFjcmVhdG9yLmNvbXBsZXRlU3BhcnNlQXJyYXkobnVtUHJvcGVydGllcywgbGVu
Z3RoLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheUJ1ZmZlclZpZXdUYWc6IHsKLSAg
ICAgICAgICAgIGlmIChtX3ZlcnNpb24gPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAoIXJlYWRBcnJheUJ1ZmZlclZpZXcodmFsdWUsIGNyZWF0b3Ip
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNyZWF0b3IucHVz
aE9iamVjdFJlZmVyZW5jZSgqdmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBBcnJheUJ1ZmZlclRhZzogewotICAgICAgICAgICAgaWYgKG1fdmVyc2lv
biA8PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICgh
cmVhZEFycmF5QnVmZmVyKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBjcmVhdG9yLnB1c2hPYmplY3RSZWZlcmVuY2UoKnZhbHVlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2VuZXJhdGVGcmVzaE9iamVjdFRh
ZzogewotICAgICAgICAgICAgaWYgKG1fdmVyc2lvbiA8PSAwKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghY3JlYXRvci5uZXdPYmplY3QoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEdlbmVyYXRlRnJlc2hBcnJheVRhZzogewotICAgICAgICAgICAg
aWYgKG1fdmVyc2lvbiA8PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIHVpbnQzMl90IGxlbmd0aDsKLSAgICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZs
ZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICgh
Y3JlYXRvci5uZXdBcnJheShsZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWVzc2Fn
ZVBvcnRUYWc6IHsKLSAgICAgICAgICAgIGlmIChtX3ZlcnNpb24gPD0gMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAg
ICAgIGlmICghZG9SZWFkVWludDMyKCZpbmRleCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKCFjcmVhdG9yLnRyeUdldFRyYW5zZmVycmVkTWVzc2FnZVBv
cnQoaW5kZXgsIHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE9iamVjdFJlZmVyZW5jZVRhZzog
ewotICAgICAgICAgICAgaWYgKG1fdmVyc2lvbiA8PSAwKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHVpbnQzMl90IHJlZmVyZW5jZTsKLSAgICAgICAgICAgIGlm
ICghZG9SZWFkVWludDMyKCZyZWZlcmVuY2UpKQorICAgICAgICAgICAgc3dpdGNoICh0YWcpIHsK
KyAgICAgICAgICAgIGNhc2UgUmVmZXJlbmNlQ291bnRUYWc6IHsKKyAgICAgICAgICAgICAgICBp
ZiAobV92ZXJzaW9uIDw9IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB1aW50MzJfdCByZWZlcmVuY2VUYWJsZVNpemU7CisgICAgICAgICAgICAg
ICAgaWYgKCFkb1JlYWRVaW50MzIoJnJlZmVyZW5jZVRhYmxlU2l6ZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHRlc3QgZmFp
bHMsIHRoZW4gdGhlIHNlcmlhbGl6ZXIgYW5kIGRlc2VyaWFsaXplciBkaXNhZ3JlZSBhYm91dCB0
aGUgYXNzaWdubWVudAorICAgICAgICAgICAgICAgIC8vIG9mIG9iamVjdCByZWZlcmVuY2UgSURz
LgorICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VUYWJsZVNpemUgIT0gZGVzZXJpYWxpemVy
Lm9iamVjdFJlZmVyZW5jZUNvdW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh
c2UgSW52YWxpZFRhZzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBpZiAoIWNyZWF0b3IudHJ5R2V0T2JqZWN0RnJvbU9iamVjdFJlZmVyZW5jZShyZWZlcmVuY2Us
IHZhbHVlKSkKKyAgICAgICAgICAgIGNhc2UgUGFkZGluZ1RhZzoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgVW5kZWZpbmVkVGFnOgorICAgICAgICAgICAgICAgIGlm
ICghZGVzZXJpYWxpemVyLnB1c2hVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBOdWxs
VGFnOgorICAgICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVyLnB1c2hOdWxsKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHJ1ZVRhZzoKKyAgICAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXpl
ci5wdXNoVHJ1ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZhbHNlVGFnOgorICAgICAgICAgICAg
ICAgIGlmICghZGVzZXJpYWxpemVyLnB1c2hGYWxzZSgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRy
dWVPYmplY3RUYWc6CisgICAgICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZXIucHVzaFRydWVP
YmplY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGRlc2VyaWFsaXplci5hZGRSZWZlcmVuY2VGb3JUb3AoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRmFsc2VPYmplY3RUYWc6CisgICAgICAgICAgICAgICAg
aWYgKCFkZXNlcmlhbGl6ZXIucHVzaEZhbHNlT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBkZXNlcmlhbGl6ZXIuYWRkUmVmZXJlbmNl
Rm9yVG9wKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0cmlu
Z1RhZzoKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWRTdHJpbmcoZGVzZXJpYWxpemVyKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RUYWc6CisgICAgICAgICAgICAgICAgaWYgKCFy
ZWFkU3RyaW5nT2JqZWN0KGRlc2VyaWFsaXplcikpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50MzJU
YWc6CisgICAgICAgICAgICAgICAgaWYgKCFyZWFkSW50MzIoZGVzZXJpYWxpemVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBVaW50MzJUYWc6CisgICAgICAgICAgICAgICAgaWYgKCFyZWFkVWludDMy
KGRlc2VyaWFsaXplcikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRGF0ZVRhZzoKKyAgICAgICAgICAg
ICAgICBpZiAoIXJlYWREYXRlKGRlc2VyaWFsaXplcikpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTnVt
YmVyVGFnOgorICAgICAgICAgICAgICAgIGlmICghcmVhZE51bWJlcihkZXNlcmlhbGl6ZXIpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIE51bWJlck9iamVjdFRhZzoKKyAgICAgICAgICAgICAgICBpZiAo
IXJlYWROdW1iZXJPYmplY3QoZGVzZXJpYWxpemVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCbG9i
VGFnOgorICAgICAgICAgICAgICAgIGlmICghcmVhZEJsb2IoZGVzZXJpYWxpemVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBGaWxlVGFnOgorICAgICAgICAgICAgICAgIGlmICghcmVhZEZpbGUoZGVz
ZXJpYWxpemVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGaWxlTGlzdFRhZzoKKyAgICAgICAgICAg
ICAgICBpZiAoIXJlYWRGaWxlTGlzdChkZXNlcmlhbGl6ZXIpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEltYWdlRGF0YVRhZzoKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWRJbWFnZURhdGEoZGVzZXJp
YWxpemVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheVRhZzogeworICAgICAgICAgICAgICAg
IHVpbnQzMl90IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbGVu
Z3RoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGlmICghZGVzZXJpYWxpemVyLnB1c2hBcnJheShsZW5ndGgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIFJlZ0V4cFRhZzoKKyAgICAgICAgICAgICAgICBpZiAoIXJlYWRSZWdF
eHAoZGVzZXJpYWxpemVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBPYmplY3RUYWc6IHsKKyAgICAg
ICAgICAgICAgICB1aW50MzJfdCBudW1Qcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgIGlmICgh
ZG9SZWFkVWludDMyKCZudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVyLnB1c2hPYmplY3QobnVt
UHJvcGVydGllcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU3BhcnNlQXJy
YXlUYWc6IHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBudW1Qcm9wZXJ0aWVzOworICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAoIWRvUmVhZFVp
bnQzMigmbnVtUHJvcGVydGllcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbGVuZ3RoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVy
LnB1c2hTcGFyc2VBcnJheShudW1Qcm9wZXJ0aWVzLCBsZW5ndGgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIEFycmF5QnVmZmVyVmlld1RhZzogeworICAgICAgICAgICAgICAg
IGlmIChtX3ZlcnNpb24gPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGlmICghcmVhZEFycmF5QnVmZmVyVmlldyhkZXNlcmlhbGl6ZXIpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEFycmF5QnVmZmVyVGFnOiB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fdmVyc2lvbiA8PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFyZWFkQXJyYXlCdWZmZXIoZGVzZXJpYWxp
emVyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBHZW5lcmF0ZUZyZXNoT2Jq
ZWN0VGFnOiB7CisgICAgICAgICAgICAgICAgaWYgKG1fdmVyc2lvbiA8PSAwKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6
ZXIubmV3T2JqZWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR2VuZXJh
dGVGcmVzaEFycmF5VGFnOiB7CisgICAgICAgICAgICAgICAgaWYgKG1fdmVyc2lvbiA8PSAwKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgdWludDMy
X3QgbGVuZ3RoOworICAgICAgICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZsZW5ndGgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFk
ZXNlcmlhbGl6ZXIubmV3QXJyYXkobGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBNZXNzYWdlUG9ydFRhZzogeworICAgICAgICAgICAgICAgIGlmIChtX3ZlcnNpb24g
PD0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IHVpbnQzMl90IGluZGV4OworICAgICAgICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZpbmRl
eCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWRlc2VyaWFsaXplci50cnlHZXRUcmFuc2ZlcnJlZE1lc3NhZ2VQb3J0KGluZGV4KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBPYmplY3RSZWZlcmVuY2VUYWc6IHsKKyAg
ICAgICAgICAgICAgICBpZiAobV92ZXJzaW9uIDw9IDApCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCByZWZlcmVuY2U7CisgICAgICAg
ICAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJnJlZmVyZW5jZSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplci50cnlH
ZXRPYmplY3RGcm9tT2JqZWN0UmVmZXJlbmNlKHJlZmVyZW5jZSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4g
IXZhbHVlLT5Jc0VtcHR5KCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCitwcml2
YXRlOgorICAgIGJvb2wgaXNFb2YoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uID49IG1fbGVu
Z3RoOyB9CisKICAgICBib29sIHJlYWRWZXJzaW9uKHVpbnQzMl90JiB2ZXJzaW9uKQogICAgIHsK
ICAgICAgICAgU2VyaWFsaXphdGlvblRhZyB0YWc7CkBAIC0xMzQ0LDEyICsxMzMyLDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gZG9SZWFkVWludDMyKCZ2ZXJzaW9uKTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldFZlcnNpb24odWludDMyX3QgdmVyc2lvbikKLSAgICB7Ci0gICAgICAgIG1fdmVy
c2lvbiA9IHZlcnNpb247Ci0gICAgfQotCi1wcml2YXRlOgogICAgIGJvb2wgcmVhZFRhZyhTZXJp
YWxpemF0aW9uVGFnKiB0YWcpCiAgICAgewogICAgICAgICBpZiAobV9wb3NpdGlvbiA+PSBtX2xl
bmd0aCkKQEAgLTEzNzIsMjQgKzEzNTQsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgYm9vbCByZWFkU3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiog
dmFsdWUpCisgICAgYm9vbCByZWFkU3RyaW5nKFNjcmlwdFZhbHVlRGVzZXJpYWxpemVyJiBkZXNl
cmlhbGl6ZXIpCiAgICAgewogICAgICAgICB1aW50MzJfdCBsZW5ndGg7CiAgICAgICAgIGlmICgh
ZG9SZWFkVWludDMyKCZsZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBpZiAobV9wb3NpdGlvbiArIGxlbmd0aCA+IG1fbGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAqdmFsdWUgPSB2ODo6U3RyaW5nOjpOZXcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4obV9idWZmZXIgKyBtX3Bvc2l0aW9uKSwgbGVuZ3RoKTsKKyAgICAgICAg
Y29uc3QgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1fYnVmZmVy
ICsgbV9wb3NpdGlvbik7CiAgICAgICAgIG1fcG9zaXRpb24gKz0gbGVuZ3RoOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplci5wdXNoU2NyaXB0U3RyaW5n
KGRhdGEsIGxlbmd0aCk7CiAgICAgfQogCi0gICAgYm9vbCByZWFkU3RyaW5nT2JqZWN0KHY4OjpI
YW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCisgICAgYm9vbCByZWFkU3RyaW5nT2JqZWN0KFNjcmlw
dFZhbHVlRGVzZXJpYWxpemVyJiBkZXNlcmlhbGl6ZXIpCiAgICAgewotICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gc3RyaW5nVmFsdWU7Ci0gICAgICAgIGlmICghcmVhZFN0cmluZygmc3Ry
aW5nVmFsdWUpIHx8ICFzdHJpbmdWYWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgaWYgKCFyZWFk
U3RyaW5nKGRlc2VyaWFsaXplcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghZGVzZXJpYWxpemVyLnB1c2hTY3JpcHRTdHJpbmdPYmplY3QoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgKnZhbHVlID0gdjg6OlN0cmluZ09iamVjdDo6TmV3KHN0
cmluZ1ZhbHVlLkFzPHY4OjpTdHJpbmc+KCkpOworICAgICAgICBkZXNlcmlhbGl6ZXIuYWRkUmVm
ZXJlbmNlRm9yVG9wKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQwNSw1
MiArMTM4OCw1MyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBib29sIHJlYWRJbnQzMih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIGJvb2wg
cmVhZEludDMyKFNjcmlwdFZhbHVlRGVzZXJpYWxpemVyJiBkZXNlcmlhbGl6ZXIpCiAgICAgewog
ICAgICAgICB1aW50MzJfdCByYXdWYWx1ZTsKICAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJnJh
d1ZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgKnZhbHVlID0gdjg6
OkludGVnZXI6Ok5ldyhzdGF0aWNfY2FzdDxpbnQzMl90PihaaWdaYWc6OmRlY29kZShyYXdWYWx1
ZSkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZXIu
cHVzaEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFppZ1phZzo6ZGVjb2RlKHJhd1ZhbHVlKSkp
OwogICAgIH0KIAotICAgIGJvb2wgcmVhZFVpbnQzMih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZh
bHVlKQorICAgIGJvb2wgcmVhZFVpbnQzMihTY3JpcHRWYWx1ZURlc2VyaWFsaXplciYgZGVzZXJp
YWxpemVyKQogICAgIHsKICAgICAgICAgdWludDMyX3QgcmF3VmFsdWU7CiAgICAgICAgIGlmICgh
ZG9SZWFkVWludDMyKCZyYXdWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICp2YWx1ZSA9IHY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQocmF3VmFsdWUpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplci5wdXNoVUludDMy
KHJhd1ZhbHVlKTsKICAgICB9CiAKLSAgICBib29sIHJlYWREYXRlKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiogdmFsdWUpCisgICAgYm9vbCByZWFkRGF0ZShTY3JpcHRWYWx1ZURlc2VyaWFsaXplciYg
ZGVzZXJpYWxpemVyKQogICAgIHsKICAgICAgICAgZG91YmxlIG51bWJlclZhbHVlOwogICAgICAg
ICBpZiAoIWRvUmVhZE51bWJlcigmbnVtYmVyVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAqdmFsdWUgPSB2ODo6RGF0ZTo6TmV3KG51bWJlclZhbHVlKTsKKyAgICAg
ICAgaWYgKCFkZXNlcmlhbGl6ZXIucHVzaERhdGUobnVtYmVyVmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBkZXNlcmlhbGl6ZXIuYWRkUmVmZXJlbmNlRm9yVG9wKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgcmVhZE51bWJlcih2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIGJvb2wgcmVhZE51bWJlcihTY3JpcHRWYWx1
ZURlc2VyaWFsaXplciYgZGVzZXJpYWxpemVyKQogICAgIHsKICAgICAgICAgZG91YmxlIG51bWJl
cjsKICAgICAgICAgaWYgKCFkb1JlYWROdW1iZXIoJm51bWJlcikpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICp2YWx1ZSA9IHY4OjpOdW1iZXI6Ok5ldyhudW1iZXIpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplci5wdXNoTnVtYmVy
KG51bWJlcik7CiAgICAgfQotICAKLSAgICBib29sIHJlYWROdW1iZXJPYmplY3Qodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKworICAgIGJvb2wgcmVhZE51bWJlck9iamVjdChTY3JpcHRW
YWx1ZURlc2VyaWFsaXplciYgZGVzZXJpYWxpemVyKQogICAgIHsKICAgICAgICAgZG91YmxlIG51
bWJlcjsKICAgICAgICAgaWYgKCFkb1JlYWROdW1iZXIoJm51bWJlcikpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICp2YWx1ZSA9IHY4OjpOdW1iZXJPYmplY3Q6Ok5ldyhudW1i
ZXIpOworICAgICAgICBpZiAoIWRlc2VyaWFsaXplci5wdXNoTnVtYmVyT2JqZWN0KG51bWJlcikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlc2VyaWFsaXplci5hZGRSZWZl
cmVuY2VGb3JUb3AoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBy
ZWFkSW1hZ2VEYXRhKHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCisgICAgYm9vbCByZWFk
SW1hZ2VEYXRhKFNjcmlwdFZhbHVlRGVzZXJpYWxpemVyJiBkZXNlcmlhbGl6ZXIpCiAgICAgewog
ICAgICAgICB1aW50MzJfdCB3aWR0aDsKICAgICAgICAgdWludDMyX3QgaGVpZ2h0OwpAQCAtMTQ2
OSw3ICsxNDUzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKHBpeGVsQXJyYXktPmxlbmd0
aCgpID49IHBpeGVsRGF0YUxlbmd0aCk7CiAgICAgICAgIG1lbWNweShwaXhlbEFycmF5LT5kYXRh
KCksIG1fYnVmZmVyICsgbV9wb3NpdGlvbiwgcGl4ZWxEYXRhTGVuZ3RoKTsKICAgICAgICAgbV9w
b3NpdGlvbiArPSBwaXhlbERhdGFMZW5ndGg7Ci0gICAgICAgICp2YWx1ZSA9IHRvVjgoaW1hZ2VE
YXRhLnJlbGVhc2UoKSk7CisgICAgICAgIGlmICghZGVzZXJpYWxpemVyLnB1c2hJbWFnZURhdGEo
aW1hZ2VEYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVzZXJpYWxp
emVyLmFkZFJlZmVyZW5jZUZvclRvcCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
QEAgLTE0ODYsMTA3ICsxNDcyLDExNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gYXJyYXlC
dWZmZXIucmVsZWFzZSgpOwogICAgIH0KIAotICAgIGJvb2wgcmVhZEFycmF5QnVmZmVyKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCisgICAgYm9vbCByZWFkQXJyYXlCdWZmZXIoU2NyaXB0
VmFsdWVEZXNlcmlhbGl6ZXImIGRlc2VyaWFsaXplcikKICAgICB7CiAgICAgICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBkb1JlYWRBcnJheUJ1ZmZlcigpOwogICAgICAgICBp
ZiAoIWFycmF5QnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAqdmFs
dWUgPSB0b1Y4KGFycmF5QnVmZmVyLnJlbGVhc2UoKSk7CisgICAgICAgIGlmICghZGVzZXJpYWxp
emVyLnB1c2hBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGRlc2VyaWFsaXplci5hZGRSZWZlcmVuY2VGb3JUb3AoKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCByZWFkQXJyYXlCdWZmZXJWaWV3KHY4OjpI
YW5kbGU8djg6OlZhbHVlPiogdmFsdWUsIENvbXBvc2l0ZUNyZWF0b3ImIGNyZWF0b3IpCisgICAg
Ym9vbCByZWFkQXJyYXlCdWZmZXJWaWV3KFNjcmlwdFZhbHVlRGVzZXJpYWxpemVyJiBkZXNlcmlh
bGl6ZXIpCiAgICAgewogICAgICAgICBBcnJheUJ1ZmZlclZpZXdTdWJUYWcgc3ViVGFnOwogICAg
ICAgICB1aW50MzJfdCBieXRlT2Zmc2V0OwogICAgICAgICB1aW50MzJfdCBieXRlTGVuZ3RoOwog
ICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyOwotICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYXJyYXlCdWZmZXJWOFZhbHVlOwogICAgICAgICBpZiAoIXJlYWRBcnJh
eUJ1ZmZlclZpZXdTdWJUYWcoJnN1YlRhZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGlmICghZG9SZWFkVWludDMyKCZieXRlT2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJmJ5dGVMZW5ndGgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWNyZWF0b3IuY29uc3VtZVRvcE9mU3Rh
Y2soJmFycmF5QnVmZmVyVjhWYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGFycmF5QnVmZmVyID0gVjhBcnJheUJ1ZmZlcjo6dG9OYXRpdmUoYXJyYXlCdWZmZXJWOFZh
bHVlLkFzPHY4OjpPYmplY3Q+KCkpOwotICAgICAgICBpZiAoIWFycmF5QnVmZmVyKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBzd2l0Y2ggKHN1YlRhZykgewogICAgICAgICBj
YXNlIEJ5dGVBcnJheVRhZzoKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50OEFycmF5Ojpj
cmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVyLnB1c2hJbnQ4
QXJyYXkoYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgZGVzZXJpYWxpemVyLmFkZFJlZmVyZW5jZUZvclRvcCgpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgVW5zaWduZWRCeXRlQXJyYXlUYWc6
Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KFVpbnQ4QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZl
ci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKLSAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplci5wdXNoVWludDhBcnJheShieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKTsKICAgICAgICAgY2FzZSBTaG9ydEFycmF5VGFnOiB7CiAgICAgICAg
ICAgICB1aW50MzJfdCBzaG9ydExlbmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2YoaW50MTZfdCk7
CiAgICAgICAgICAgICBpZiAoc2hvcnRMZW5ndGggKiBzaXplb2YoaW50MTZfdCkgIT0gYnl0ZUxl
bmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAqdmFsdWUg
PSB0b1Y4KEludDE2QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5dGVPZmZz
ZXQsIHNob3J0TGVuZ3RoKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICgh
ZGVzZXJpYWxpemVyLnB1c2hJbnQxNkFycmF5KGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2VyaWFsaXplci5hZGRS
ZWZlcmVuY2VGb3JUb3AoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgVW5zaWduZWRTaG9ydEFycmF5VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJf
dCBzaG9ydExlbmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2YodWludDE2X3QpOwogICAgICAgICAg
ICAgaWYgKHNob3J0TGVuZ3RoICogc2l6ZW9mKHVpbnQxNl90KSAhPSBieXRlTGVuZ3RoKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoVWlu
dDE2QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIHNob3J0
TGVuZ3RoKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghZGVzZXJpYWxp
emVyLnB1c2hVaW50MTZBcnJheShieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBkZXNlcmlhbGl6ZXIuYWRkUmVmZXJlbmNl
Rm9yVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEludEFycmF5VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBpbnRMZW5ndGggPSBieXRl
TGVuZ3RoIC8gc2l6ZW9mKGludDMyX3QpOwogICAgICAgICAgICAgaWYgKGludExlbmd0aCAqIHNp
emVvZihpbnQzMl90KSAhPSBieXRlTGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50MzJBcnJheTo6Y3JlYXRlKGFycmF5QnVm
ZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgaW50TGVuZ3RoKSk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVyLnB1c2hJbnQzMkFycmF5KGJ5dGVPZmZz
ZXQsIGJ5dGVMZW5ndGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGRlc2VyaWFsaXplci5hZGRSZWZlcmVuY2VGb3JUb3AoKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgVW5zaWduZWRJbnRBcnJheVRhZzogewog
ICAgICAgICAgICAgdWludDMyX3QgaW50TGVuZ3RoID0gYnl0ZUxlbmd0aCAvIHNpemVvZih1aW50
MzJfdCk7CiAgICAgICAgICAgICBpZiAoaW50TGVuZ3RoICogc2l6ZW9mKHVpbnQzMl90KSAhPSBi
eXRlTGVuZ3RoKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICp2
YWx1ZSA9IHRvVjgoVWludDMyQXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5
dGVPZmZzZXQsIGludExlbmd0aCkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAoIWRlc2VyaWFsaXplci5wdXNoVWludDMyQXJyYXkoYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzZXJpYWxpemVy
LmFkZFJlZmVyZW5jZUZvclRvcCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBGbG9hdEFycmF5VGFnOiB7CiAgICAgICAgICAgICB1aW50MzJfdCBm
bG9hdExlbmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2YoZmxvYXQpOwogICAgICAgICAgICAgaWYg
KGZsb2F0TGVuZ3RoICogc2l6ZW9mKGZsb2F0KSAhPSBieXRlTGVuZ3RoKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoRmxvYXQzMkFycmF5
OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBmbG9hdExlbmd0aCkp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplci5wdXNo
RmxvYXQzMkFycmF5KGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGRlc2VyaWFsaXplci5hZGRSZWZlcmVuY2VGb3JUb3Ao
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRG91
YmxlQXJyYXlUYWc6IHsKICAgICAgICAgICAgIHVpbnQzMl90IGZsb2F0TGVuZ3RoID0gYnl0ZUxl
bmd0aCAvIHNpemVvZihkb3VibGUpOwogICAgICAgICAgICAgaWYgKGZsb2F0TGVuZ3RoICogc2l6
ZW9mKGRvdWJsZSkgIT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KEZsb2F0NjRBcnJheTo6Y3JlYXRlKGFycmF5QnVm
ZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgZmxvYXRMZW5ndGgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZXIucHVzaEZsb2F0NjRBcnJheShieXRl
T2Zmc2V0LCBieXRlTGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBkZXNlcmlhbGl6ZXIuYWRkUmVmZXJlbmNlRm9yVG9wKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBjYXNlIERhdGFWaWV3VGFnOgotICAgICAg
ICAgICAgKnZhbHVlID0gdG9WOChEYXRhVmlldzo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2Uo
KSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBpZiAoIWRlc2VyaWFsaXplci5wdXNoRGF0YVZpZXcoYnl0ZU9mZnNldCwgYnl0ZUxlbmd0
aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZGVzZXJpYWxp
emVyLmFkZFJlZmVyZW5jZUZvclRvcCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAg
ICAgLy8gVGhlIHZhcmlvdXMgKkFycmF5OjpjcmVhdGUoKSBtZXRob2RzIHdpbGwgcmV0dXJuIG51
bGwgaWYgdGhlIHJhbmdlIHRoZSB2aWV3IGV4cGVjdHMgaXMKLSAgICAgICAgLy8gbWlzbWF0Y2hl
ZCB3aXRoIHRoZSByYW5nZSB0aGUgYnVmZmVyIGNhbiBwcm92aWRlIG9yIGlmIHRoZSBieXRlIG9m
ZnNldCBpcyBub3QgYWxpZ25lZAotICAgICAgICAvLyB0byB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVu
dCB0eXBlLgotICAgICAgICByZXR1cm4gIXZhbHVlLT5Jc0VtcHR5KCk7CiAgICAgfQogCi0gICAg
Ym9vbCByZWFkUmVnRXhwKHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCisgICAgYm9vbCBy
ZWFkUmVnRXhwKFNjcmlwdFZhbHVlRGVzZXJpYWxpemVyJiBkZXNlcmlhbGl6ZXIpCiAgICAgewot
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGF0dGVybjsKLSAgICAgICAgaWYgKCFyZWFk
U3RyaW5nKCZwYXR0ZXJuKSkKKyAgICAgICAgaWYgKCFyZWFkU3RyaW5nKGRlc2VyaWFsaXplcikp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHVpbnQzMl90IGZsYWdzOwogICAg
ICAgICBpZiAoIWRvUmVhZFVpbnQzMigmZmxhZ3MpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAqdmFsdWUgPSB2ODo6UmVnRXhwOjpOZXcocGF0dGVybi5Bczx2ODo6U3RyaW5n
PigpLCBzdGF0aWNfY2FzdDx2ODo6UmVnRXhwOjpGbGFncz4oZmxhZ3MpKTsKKyAgICAgICAgaWYg
KCFkZXNlcmlhbGl6ZXIucHVzaFJlZ0V4cChmbGFncykpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGRlc2VyaWFsaXplci5hZGRSZWZlcmVuY2VGb3JUb3AoKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCByZWFkQmxvYih2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4qIHZhbHVlKQorICAgIGJvb2wgcmVhZEJsb2IoU2NyaXB0VmFsdWVEZXNlcmlhbGl6ZXIm
IGRlc2VyaWFsaXplcikKICAgICB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAgICAgICAgIFN0cmlu
ZyB0eXBlOwpAQCAtMTU5NywxMiArMTU5MSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWRvUmVhZFVpbnQ2NCgmc2l6ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNy
ZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlwZSwgc2l6ZSk7Ci0gICAgICAgICp2
YWx1ZSA9IHRvVjgoYmxvYik7CisgICAgICAgIGlmICghZGVzZXJpYWxpemVyLnB1c2hCbG9iKEJs
b2I6OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlwZSwgc2l6ZSkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZXNlcmlhbGl6ZXIuYWRkUmVmZXJlbmNl
Rm9yVG9wKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgcmVhZEZp
bGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICBib29sIHJlYWRGaWxlKFNjcmlw
dFZhbHVlRGVzZXJpYWxpemVyJiBkZXNlcmlhbGl6ZXIpCiAgICAgewogICAgICAgICBTdHJpbmcg
cGF0aDsKICAgICAgICAgU3RyaW5nIHVybDsKQEAgLTE2MTMsMTcgKzE2MDgsMTggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0
cmluZygmdHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFBhc3NSZWZQ
dHI8RmlsZT4gZmlsZSA9IEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsKSwgdHlwZSk7Ci0gICAgICAgICp2YWx1ZSA9IHRvVjgoZmlsZSk7CisgICAgICAgIGlmICgh
ZGVzZXJpYWxpemVyLnB1c2hGaWxlKEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJMKFBhcnNlZFVSTFN0
cmluZywgdXJsKSwgdHlwZSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBk
ZXNlcmlhbGl6ZXIuYWRkUmVmZXJlbmNlRm9yVG9wKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGJvb2wgcmVhZEZpbGVMaXN0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFs
dWUpCisgICAgYm9vbCByZWFkRmlsZUxpc3QoU2NyaXB0VmFsdWVEZXNlcmlhbGl6ZXImIGRlc2Vy
aWFsaXplcikKICAgICB7CiAgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKICAgICAgICAgaWYgKCFk
b1JlYWRVaW50MzIoJmxlbmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOworICAg
ICAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IFN0cmluZyBwYXRoOwogICAgICAgICAgICAgU3RyaW5nIHVybFN0cmluZzsKQEAgLTE2MzYsNyAr
MTYzMiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aCwgS1VSTChQYXJzZWRVUkxT
dHJpbmcsIHVybFN0cmluZyksIHR5cGUpKTsKICAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSB0
b1Y4KGZpbGVMaXN0KTsKKyAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZXIucHVzaEZpbGVMaXN0KGZp
bGVMaXN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVzZXJpYWxpemVy
LmFkZFJlZmVyZW5jZUZvclRvcCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTE2ODIsOSArMTY4MCw5IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV92ZXJzaW9uOwogfTsK
IAotY2xhc3MgRGVzZXJpYWxpemVyIDogcHVibGljIENvbXBvc2l0ZUNyZWF0b3IgeworY2xhc3Mg
VjhEZXNlcmlhbGl6ZXIgOiBwdWJsaWMgU2NyaXB0VmFsdWVEZXNlcmlhbGl6ZXIgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IERlc2VyaWFsaXplcihSZWFkZXImIHJlYWRlciwgTWVzc2FnZVBvcnRB
cnJheSogbWVzc2FnZVBvcnRzKQorICAgIGV4cGxpY2l0IFY4RGVzZXJpYWxpemVyKFJlYWRlciYg
cmVhZGVyLCBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMpCiAgICAgICAgIDogbV9yZWFk
ZXIocmVhZGVyKQogICAgICAgICAsIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMobWVzc2FnZVBv
cnRzKQogICAgICAgICAsIG1fdmVyc2lvbigwKQpAQCAtMTY5MywxOCArMTY5MSwxMiBAQCBwdWJs
aWM6CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGVzZXJpYWxpemUoKQogICAgIHsKLSAg
ICAgICAgaWYgKCFtX3JlYWRlci5yZWFkVmVyc2lvbihtX3ZlcnNpb24pIHx8IG1fdmVyc2lvbiA+
IHdpcmVGb3JtYXRWZXJzaW9uKQotICAgICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0gICAg
ICAgIG1fcmVhZGVyLnNldFZlcnNpb24obV92ZXJzaW9uKTsKICAgICAgICAgdjg6OkhhbmRsZVNj
b3BlIHNjb3BlOwotICAgICAgICB3aGlsZSAoIW1fcmVhZGVyLmlzRW9mKCkpIHsKLSAgICAgICAg
ICAgIGlmICghZG9EZXNlcmlhbGl6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB2ODo6TnVs
bCgpOwotICAgICAgICB9CisgICAgICAgIGlmICghbV9yZWFkZXIucmVhZCgqdGhpcykpCisgICAg
ICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKICAgICAgICAgaWYgKHN0YWNrRGVwdGgoKSAhPSAx
IHx8IG1fb3BlbkNvbXBvc2l0ZVJlZmVyZW5jZVN0YWNrLnNpemUoKSkKICAgICAgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOwotICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0g
c2NvcGUuQ2xvc2UoZWxlbWVudCgwKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IHJldHVybiBzY29wZS5DbG9zZShlbGVtZW50KDApKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgbmV3QXJyYXkodWludDMyX3QgbGVuZ3RoKQpAQCAtMTcxNiwyMSArMTcwOCw3OCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBjb25z
dW1lVG9wT2ZTdGFjayh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIG9iamVjdCkKKyAgICB2aXJ0dWFs
IGJvb2wgbmV3T2JqZWN0KCkKICAgICB7Ci0gICAgICAgIGlmIChzdGFja0RlcHRoKCkgPCAxKQor
ICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjg6Ok9iamVjdDo6TmV3KCk7
CisgICAgICAgIGlmIChvYmplY3QuSXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAqb2JqZWN0ID0gZWxlbWVudChzdGFja0RlcHRoKCkgLSAxKTsKLSAgICAgICAg
cG9wKDEpOworICAgICAgICBvcGVuQ29tcG9zaXRlKG9iamVjdCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBjb21wbGV0ZUFycmF5KHVpbnQzMl90IGxl
bmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB2aXJ0dWFsIGJvb2wgdHJ5
R2V0T2JqZWN0RnJvbU9iamVjdFJlZmVyZW5jZSh1aW50MzJfdCByZWZlcmVuY2UpCisgICAgewor
ICAgICAgICBpZiAocmVmZXJlbmNlID49IG1fb2JqZWN0UG9vbC5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IG1f
b2JqZWN0UG9vbFtyZWZlcmVuY2VdOworICAgICAgICBBU1NFUlQoIXZhbHVlLklzRW1wdHkoKSk7
CisgICAgICAgIHJldHVybiBwdXNoKHZhbHVlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
dHJ5R2V0VHJhbnNmZXJyZWRNZXNzYWdlUG9ydCh1aW50MzJfdCBpbmRleCkKKyAgICB7CisgICAg
ICAgIGlmICghbV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0cykKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMtPnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlID0gVjhNZXNzYWdlUG9ydDo6d3JhcChtX3RyYW5zZmVycmVkTWVzc2FnZVBv
cnRzLT5hdChpbmRleCkuZ2V0KCkpOworICAgICAgICByZXR1cm4gcHVzaCh2YWx1ZSk7CisgICAg
fQorCisgICAgdmlydHVhbCB1aW50MzJfdCBvYmplY3RSZWZlcmVuY2VDb3VudCgpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9vYmplY3RQb29sLnNpemUoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYWRkUmVmZXJlbmNlRm9yVG9wKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGFja0Rl
cHRoKCkgPiAwKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gZWxlbWVu
dChzdGFja0RlcHRoKCkgLSAxKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZS5Jc0VtcHR5KCkpOwor
ICAgICAgICBtX29iamVjdFBvb2wuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisKKworICAgIHZpcnR1
YWwgYm9vbCBwdXNoVW5kZWZpbmVkKCkgeyByZXR1cm4gcHVzaCh2ODo6VW5kZWZpbmVkKCkpOyB9
CisgICAgdmlydHVhbCBib29sIHB1c2hOdWxsKCkgeyByZXR1cm4gcHVzaCh2ODo6TnVsbCgpKTsg
fQorICAgIHZpcnR1YWwgYm9vbCBwdXNoVHJ1ZSgpIHsgcmV0dXJuIHB1c2godjg6OlRydWUoKSk7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHVzaFRydWVPYmplY3QoKSB7IHJldHVybiBwdXNoKHY4OjpC
b29sZWFuT2JqZWN0OjpOZXcodHJ1ZSkpOyB9CisgICAgdmlydHVhbCBib29sIHB1c2hGYWxzZSgp
IHsgcmV0dXJuIHB1c2godjg6OkZhbHNlKCkpOyB9CisgICAgdmlydHVhbCBib29sIHB1c2hGYWxz
ZU9iamVjdCgpIHsgcmV0dXJuIHB1c2godjg6OkJvb2xlYW5PYmplY3Q6Ok5ldyhmYWxzZSkpOyB9
CisgICAgdmlydHVhbCBib29sIHB1c2hTY3JpcHRTdHJpbmcoY29uc3QgY2hhciogZGF0YSwgdWlu
dDMyX3QgbGVuZ3RoKSB7IHJldHVybiBwdXNoKHY4OjpTdHJpbmc6Ok5ldyhkYXRhLCBsZW5ndGgp
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBwdXNoU2NyaXB0U3RyaW5nT2JqZWN0KCkKKyAgICB7Cisg
ICAgICAgIGlmIChzdGFja0RlcHRoKCkgPCAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RyaW5nID0gcG9wVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIHB1c2godjg6OlN0cmluZ09iamVjdDo6TmV3KHN0cmluZy5Bczx2ODo6U3RyaW5n
PigpKSk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBwdXNoSW50MzIoaW50MzJfdCB2YWx1ZSkg
eyByZXR1cm4gcHVzaCh2ODo6SW50ZWdlcjo6TmV3KHZhbHVlKSk7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcHVzaFVJbnQzMih1aW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gcHVzaCh2ODo6SW50ZWdlcjo6
TmV3RnJvbVVuc2lnbmVkKHZhbHVlKSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHVzaERhdGUoZG91
YmxlIG51bWJlclZhbHVlKSB7IHJldHVybiBwdXNoKHY4OjpEYXRlOjpOZXcobnVtYmVyVmFsdWUp
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBwdXNoTnVtYmVyKGRvdWJsZSB2YWx1ZSkgeyByZXR1cm4g
cHVzaCh2ODo6TnVtYmVyOjpOZXcodmFsdWUpKTsgfQorICAgIHZpcnR1YWwgYm9vbCBwdXNoTnVt
YmVyT2JqZWN0KGRvdWJsZSB2YWx1ZSkgeyByZXR1cm4gcHVzaCh2ODo6TnVtYmVyT2JqZWN0OjpO
ZXcodmFsdWUpKTsgfQorICAgIHZpcnR1YWwgYm9vbCBwdXNoQmxvYihQYXNzUmVmUHRyPEJsb2I+
IGJsb2IpIHsgcmV0dXJuIHB1c2godG9WOChibG9iKSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHVz
aEZpbGUoUGFzc1JlZlB0cjxGaWxlPiBmaWxlKSB7IHJldHVybiBwdXNoKHRvVjgoZmlsZSkpOyB9
CisgICAgdmlydHVhbCBib29sIHB1c2hGaWxlTGlzdChQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxl
TGlzdCkgeyByZXR1cm4gcHVzaCh0b1Y4KGZpbGVMaXN0KSk7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
cHVzaEltYWdlRGF0YShQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhKSB7IHJldHVybiBw
dXNoKHRvVjgoaW1hZ2VEYXRhKSk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBwdXNoQXJyYXkodWlu
dDMyX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgaWYgKGxlbmd0aCA+IHN0YWNrRGVwdGgoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4g
YXJyYXk7Ci0gICAgICAgIGlmIChtX3ZlcnNpb24gPiAwKSB7CisgICAgICAgIGlmIChtX3JlYWRl
ci52ZXJzaW9uKCkgPiAwKSB7CiAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBjb21w
b3NpdGU7CiAgICAgICAgICAgICBpZiAoIWNsb3NlQ29tcG9zaXRlKCZjb21wb3NpdGUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NDQsMjMgKzE3OTMsMjEgQEAgcHVibGlj
OgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAg
ICAgICBhcnJheS0+U2V0KGksIGVsZW1lbnQoZGVwdGggKyBpKSk7CiAgICAgICAgIHBvcChsZW5n
dGgpOwotICAgICAgICAqdmFsdWUgPSBhcnJheTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBwdXNoKGFycmF5KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgbmV3T2Jq
ZWN0KCkKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaFJlZ0V4cCh1aW50MzJfdCBmbGFncykKICAgICB7
Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6T2JqZWN0OjpOZXco
KTsKLSAgICAgICAgaWYgKG9iamVjdC5Jc0VtcHR5KCkpCisgICAgICAgIGlmIChzdGFja0RlcHRo
KCkgPCAxKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBvcGVuQ29tcG9zaXRl
KG9iamVjdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcGF0dGVybiA9IHBvcFZhbHVlKCk7CisgICAgICAgIHJldHVybiBwdXNoKHY4OjpSZWdF
eHA6Ok5ldyhwYXR0ZXJuLkFzPHY4OjpTdHJpbmc+KCksIHN0YXRpY19jYXN0PHY4OjpSZWdFeHA6
OkZsYWdzPihmbGFncykpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgY29tcGxldGVPYmpl
Y3QodWludDMyX3QgbnVtUHJvcGVydGllcywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkK
KyAgICB2aXJ0dWFsIGJvb2wgcHVzaE9iamVjdCh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzKQogICAg
IHsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgaWYgKG1f
dmVyc2lvbiA+IDApIHsKKyAgICAgICAgaWYgKG1fcmVhZGVyLnZlcnNpb24oKSA+IDApIHsKICAg
ICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNvbXBvc2l0ZTsKICAgICAgICAgICAgIGlm
ICghY2xvc2VDb21wb3NpdGUoJmNvbXBvc2l0ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTc2OSwxMyArMTgxNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBvYmplY3Qg
PSB2ODo6T2JqZWN0OjpOZXcoKTsKICAgICAgICAgaWYgKG9iamVjdC5Jc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBpbml0aWFsaXplT2JqZWN0KG9i
amVjdCwgbnVtUHJvcGVydGllcywgdmFsdWUpOworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZU9i
amVjdChvYmplY3QsIG51bVByb3BlcnRpZXMpOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBj
b21wbGV0ZVNwYXJzZUFycmF5KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHVpbnQzMl90IGxlbmd0
aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB2aXJ0dWFsIGJvb2wgcHVzaFNw
YXJzZUFycmF5KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHVpbnQzMl90IGxlbmd0aCkKICAgICB7
CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5OwotICAgICAgICBpZiAobV92ZXJz
aW9uID4gMCkgeworICAgICAgICBpZiAobV9yZWFkZXIudmVyc2lvbigpID4gMCkgewogICAgICAg
ICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY29tcG9zaXRlOwogICAgICAgICAgICAgaWYgKCFj
bG9zZUNvbXBvc2l0ZSgmY29tcG9zaXRlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNzg0LDc0ICsxODMxLDc2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGFycmF5ID0gdjg6
OkFycmF5OjpOZXcobGVuZ3RoKTsKICAgICAgICAgaWYgKGFycmF5LklzRW1wdHkoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGluaXRpYWxpemVPYmplY3QoYXJy
YXksIG51bVByb3BlcnRpZXMsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemVPYmpl
Y3QoYXJyYXksIG51bVByb3BlcnRpZXMpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBwdXNo
T2JqZWN0UmVmZXJlbmNlKGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0KQotICAg
IHsKLSAgICAgICAgbV9vYmplY3RQb29sLmFwcGVuZChvYmplY3QpOwotICAgIH0KKyAgICB2aXJ0
dWFsIGJvb2wgcHVzaEludDhBcnJheSh1aW50MzJfdCBieXRlT2Zmc2V0LCB1aW50MzJfdCBieXRl
TGVuZ3RoKSB7IHJldHVybiBwdXNoVHlwZWRBcnJheTxJbnQ4QXJyYXk+KGJ5dGVPZmZzZXQsIGJ5
dGVMZW5ndGgpOyB9CisgICAgdmlydHVhbCBib29sIHB1c2hVaW50OEFycmF5KHVpbnQzMl90IGJ5
dGVPZmZzZXQsIHVpbnQzMl90IGJ5dGVMZW5ndGgpIHsgcmV0dXJuIHB1c2hUeXBlZEFycmF5PFVp
bnQ4QXJyYXk+KGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpOyB9CisgICAgdmlydHVhbCBib29sIHB1
c2hJbnQxNkFycmF5KHVpbnQzMl90IGJ5dGVPZmZzZXQsIHVpbnQzMl90IGJ5dGVMZW5ndGgpIHsg
cmV0dXJuIHB1c2hUeXBlZEFycmF5PEludDE2QXJyYXk+KGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgp
OyB9CisgICAgdmlydHVhbCBib29sIHB1c2hVaW50MTZBcnJheSh1aW50MzJfdCBieXRlT2Zmc2V0
LCB1aW50MzJfdCBieXRlTGVuZ3RoKSB7IHJldHVybiBwdXNoVHlwZWRBcnJheTxVaW50MTZBcnJh
eT4oYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHVzaEludDMy
QXJyYXkodWludDMyX3QgYnl0ZU9mZnNldCwgdWludDMyX3QgYnl0ZUxlbmd0aCkgeyByZXR1cm4g
cHVzaFR5cGVkQXJyYXk8SW50MzJBcnJheT4oYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgcHVzaFVpbnQzMkFycmF5KHVpbnQzMl90IGJ5dGVPZmZzZXQsIHVpbnQz
Ml90IGJ5dGVMZW5ndGgpIHsgcmV0dXJuIHB1c2hUeXBlZEFycmF5PFVpbnQzMkFycmF5PihieXRl
T2Zmc2V0LCBieXRlTGVuZ3RoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBwdXNoRmxvYXQzMkFycmF5
KHVpbnQzMl90IGJ5dGVPZmZzZXQsIHVpbnQzMl90IGJ5dGVMZW5ndGgpIHsgcmV0dXJuIHB1c2hU
eXBlZEFycmF5PEZsb2F0MzJBcnJheT4oYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgcHVzaEZsb2F0NjRBcnJheSh1aW50MzJfdCBieXRlT2Zmc2V0LCB1aW50MzJf
dCBieXRlTGVuZ3RoKSB7IHJldHVybiBwdXNoVHlwZWRBcnJheTxGbG9hdDY0QXJyYXk+KGJ5dGVP
ZmZzZXQsIGJ5dGVMZW5ndGgpOyB9CisgICAgdmlydHVhbCBib29sIHB1c2hEYXRhVmlldyh1aW50
MzJfdCBieXRlT2Zmc2V0LCB1aW50MzJfdCBieXRlTGVuZ3RoKSB7IHJldHVybiBwdXNoVHlwZWRB
cnJheTxEYXRhVmlldz4oYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcHVzaEFycmF5QnVmZmVyKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyKSB7
IHJldHVybiBwdXNoKHRvVjgoYXJyYXlCdWZmZXIpKTsgfQogCi0gICAgdmlydHVhbCBib29sIHRy
eUdldFRyYW5zZmVycmVkTWVzc2FnZVBvcnQodWludDMyX3QgaW5kZXgsIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiogb2JqZWN0KQorcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICBi
b29sIHB1c2hUeXBlZEFycmF5KHVpbnQzMl90IGJ5dGVPZmZzZXQsIHVpbnQzMl90IGJ5dGVMZW5n
dGgpCiAgICAgewotICAgICAgICBpZiAoIW1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX3RyYW5zZmVycmVk
TWVzc2FnZVBvcnRzLT5zaXplKCkpCisgICAgICAgIGlmIChzdGFja0RlcHRoKCkgPCAxKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAqb2JqZWN0ID0gVjhNZXNzYWdlUG9ydDo6
d3JhcChtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLT5hdChpbmRleCkuZ2V0KCkpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdHJ5R2V0T2JqZWN0RnJv
bU9iamVjdFJlZmVyZW5jZSh1aW50MzJfdCByZWZlcmVuY2UsIHY4OjpIYW5kbGU8djg6OlZhbHVl
Piogb2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHJlZmVyZW5jZSA+PSBtX29iamVjdFBvb2wu
c2l6ZSgpKQorICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gVjhBcnJh
eUJ1ZmZlcjo6dG9OYXRpdmUocG9wVmFsdWUoKS5Bczx2ODo6T2JqZWN0PigpKTsKKyAgICAgICAg
aWYgKCFhcnJheUJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgKm9i
amVjdCA9IG1fb2JqZWN0UG9vbFtyZWZlcmVuY2VdOwotICAgICAgICByZXR1cm4gb2JqZWN0Owot
ICAgIH0KIAotICAgIHZpcnR1YWwgdWludDMyX3Qgb2JqZWN0UmVmZXJlbmNlQ291bnQoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0UG9vbC5zaXplKCk7CisgICAgICAgIC8vIFRoZSB2
YXJpb3VzICpBcnJheTo6Y3JlYXRlKCkgbWV0aG9kcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZSBy
YW5nZSB0aGUgdmlldyBleHBlY3RzIGlzCisgICAgICAgIC8vIG1pc21hdGNoZWQgd2l0aCB0aGUg
cmFuZ2UgdGhlIGJ1ZmZlciBjYW4gcHJvdmlkZSBvciBpZiB0aGUgYnl0ZSBvZmZzZXQgaXMgbm90
IGFsaWduZWQKKyAgICAgICAgLy8gdG8gdGhlIHNpemUgb2YgdGhlIGVsZW1lbnQgdHlwZS4KKyAg
ICAgICAgcmV0dXJuIHB1c2godG9WOChDOjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBi
eXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkpOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBib29sIGlu
aXRpYWxpemVPYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIHVpbnQzMl90IG51
bVByb3BlcnRpZXMsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCisgICAgYm9vbCBpbml0
aWFsaXplT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCB1aW50MzJfdCBudW1Q
cm9wZXJ0aWVzKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFvYmplY3QuSXNFbXB0eSgpKTsKICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMiAqIG51bVByb3BlcnRpZXM7CiAgICAgICAgIGlmIChs
ZW5ndGggPiBzdGFja0RlcHRoKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHN0YWNrRGVwdGgoKSAtIGxlbmd0aDsgaSA8IHN0YWNrRGVwdGgo
KTsgaSArPSAyKSB7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBwcm9wZXJ0eU5h
bWUgPSBlbGVtZW50KGkpOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcHJvcGVy
dHlWYWx1ZSA9IGVsZW1lbnQoaSArIDEpOworICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHByb3BlcnR5TmFtZSA9IGVsZW1lbnQoaSk7CisgICAgICAgICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gcHJvcGVydHlWYWx1ZSA9IGVsZW1lbnQoaSArIDEpOwogICAgICAgICAgICAgb2Jq
ZWN0LT5TZXQocHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlKTsKICAgICAgICAgfQogICAgICAg
ICBwb3AobGVuZ3RoKTsKLSAgICAgICAgKnZhbHVlID0gb2JqZWN0OwotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIHB1c2gob2JqZWN0KTsKICAgICB9CiAKLSAgICBib29sIGRv
RGVzZXJpYWxpemUoKQorICAgIGJvb2wgcHVzaCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUp
CiAgICAgewotICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYg
KCFtX3JlYWRlci5yZWFkKCZ2YWx1ZSwgKnRoaXMpKQorICAgICAgICBpZiAodmFsdWUuSXNFbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZhbHVlLklzRW1w
dHkoKSkKLSAgICAgICAgICAgIHB1c2godmFsdWUpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2
YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgcHVzaCh2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkgeyBtX3N0YWNrLmFwcGVuZCh2YWx1ZSk7IH0KLQogICAg
IHZvaWQgcG9wKHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CiAgICAgICAgIEFTU0VSVChsZW5ndGgg
PD0gbV9zdGFjay5zaXplKCkpOwogICAgICAgICBtX3N0YWNrLnNocmluayhtX3N0YWNrLnNpemUo
KSAtIGxlbmd0aCk7CiAgICAgfQogCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvcFZhbHVl
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGFja0RlcHRoKCkgPj0gMSk7CisgICAgICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b3AgPSBlbGVtZW50KHN0YWNrRGVwdGgoKSAtIDEpOworICAg
ICAgICBwb3AoMSk7CisgICAgICAgIHJldHVybiB0b3A7CisgICAgfQorCiAgICAgdW5zaWduZWQg
c3RhY2tEZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKLSAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiBlbGVtZW50KHVuc2lnbmVkIGluZGV4KQorICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBlbGVtZW50KHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgQVNTRVJU
KGluZGV4IDwgbV9zdGFjay5zaXplKCkpOwogICAgICAgICByZXR1cm4gbV9zdGFja1tpbmRleF07
CkBAIC0xODc3LDcgKzE5MjYsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFJlYWRlciYgbV9y
ZWFkZXI7Ci0gICAgVmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4gbV9zdGFjazsKKyAgICBW
ZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gbV9zdGFjazsKICAgICBWZWN0b3I8djg6Okhh
bmRsZTx2ODo6VmFsdWU+ID4gbV9vYmplY3RQb29sOwogICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9v
cGVuQ29tcG9zaXRlUmVmZXJlbmNlU3RhY2s7CiAgICAgTWVzc2FnZVBvcnRBcnJheSogbV90cmFu
c2ZlcnJlZE1lc3NhZ2VQb3J0czsKQEAgLTIwMTUsOCArMjA2NCwyNCBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShNZXNzYWdlUG9ydEFy
cmF5KiBtZXNzYQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoQnVmZmVyVmFsdWVUeXBlKSA9PSAyLCBCdWZmZXJWYWx1ZVR5cGVJc1R3b0J5dGVz
KTsKICAgICBSZWFkZXIgcmVhZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1f
ZGF0YS5pbXBsKCktPmNoYXJhY3RlcnMoKSksIDIgKiBtX2RhdGEubGVuZ3RoKCkpOwotICAgIERl
c2VyaWFsaXplciBkZXNlcmlhbGl6ZXIocmVhZGVyLCBtZXNzYWdlUG9ydHMpOworICAgIFY4RGVz
ZXJpYWxpemVyIGRlc2VyaWFsaXplcihyZWFkZXIsIG1lc3NhZ2VQb3J0cyk7CiAgICAgcmV0dXJu
IGRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZSgpOwogfQogCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoU2NyaXB0VmFsdWVTZXJp
YWxpemVyKiBzZXJpYWxpemVyKQoreworICAgIFdyaXRlciB3cml0ZXI7CisgICAgc2VyaWFsaXpl
ci0+c2VyaWFsaXplKCZ3cml0ZXIpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKFN0cmluZ0ltcGw6OmFkb3B0KHdyaXRlci5kYXRhKCkpKSk7Cit9CisKK2Jv
b2wgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShTY3JpcHRWYWx1ZURlc2VyaWFs
aXplciogZGVzZXJpYWxpemVyKQoreworICAgIGlmICghbV9kYXRhLmltcGwoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihCdWZmZXJWYWx1ZVR5cGUp
ID09IDIsIEJ1ZmZlclZhbHVlVHlwZUlzVHdvQnl0ZXMpOworICAgIFJlYWRlciByZWFkZXIocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4obV9kYXRhLmltcGwoKS0+Y2hhcmFjdGVycygp
KSwgMiAqIG1fZGF0YS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHJlYWRlci5yZWFkKCpkZXNlcmlh
bGl6ZXIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IGE1NTljZjkuLmI5
YjY2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oCkBAIC0zOCw2ICszOCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIE1lc3NhZ2VQb3J0OworY2xhc3MgU2NyaXB0VmFsdWVEZXNlcmlhbGl6ZXI7CitjbGFzcyBT
Y3JpcHRWYWx1ZVNlcmlhbGl6ZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9y
dD4sIDE+IE1lc3NhZ2VQb3J0QXJyYXk7CiAKQEAgLTcwLDYgKzcyLDkgQEAgcHVibGljOgogICAg
IC8vIGNhc2Ugb2YgZmFpbHVyZS4KICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGVzZXJpYWxp
emUoTWVzc2FnZVBvcnRBcnJheSogPSAwKTsKIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKFNjcmlwdFZhbHVlU2VyaWFsaXplciopOworICAgIGJv
b2wgZGVzZXJpYWxpemUoU2NyaXB0VmFsdWVEZXNlcmlhbGl6ZXIqKTsKKwogcHJpdmF0ZToKICAg
ICBlbnVtIFN0cmluZ0RhdGFNb2RlIHsKICAgICAgICAgU3RyaW5nVmFsdWUsCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>