<?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>86862</bug_id>
          
          <creation_ts>2012-05-18 09:26:24 -0700</creation_ts>
          <short_desc>[Chromium-Android] Run DumpRenderTree as an apk</short_desc>
          <delta_ts>2012-05-23 14:15:48 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>86922</dependson>
    
    <dependson>86923</dependson>
    
    <dependson>87196</dependson>
          <blocked>66687</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Xianzhu Wang">wangxianzhu</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>jnd</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zhenghao</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>627753</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-18 09:26:24 -0700</bug_when>
    <thetext>On Android, some features (e.g. media player) are implemented through Java API, so DumpRenderTree need to provide a Java environment so that the tests depending on those features can pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628161</commentid>
    <comment_count>1</comment_count>
      <attachid>142797</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-18 15:38:59 -0700</bug_when>
    <thetext>Created attachment 142797
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628168</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-18 15:42:23 -0700</bug_when>
    <thetext>Attachment 142797 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/D...&quot; exit_code: 1
Tools/DumpRenderTree/chromium/TestShellAndroid.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628189</commentid>
    <comment_count>3</comment_count>
      <attachid>142806</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-18 15:50:17 -0700</bug_when>
    <thetext>Created attachment 142806
patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628218</commentid>
    <comment_count>4</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-05-18 16:12:39 -0700</bug_when>
    <thetext>This patch is gigantic.  Can we split off the C++ &amp; gyp changes from the python changes?  Can the python changes be split into multiple patches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628250</commentid>
    <comment_count>5</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-18 16:40:11 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; This patch is gigantic.  Can we split off the C++ &amp; gyp changes from the python changes?  Can the python changes be split into multiple patches?

I&apos;ll split it into two parts (bug 86922 and bug 86923). It&apos;s difficult to split the python part.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142797</attachid>
            <date>2012-05-18 15:38:59 -0700</date>
            <delta_ts>2012-05-18 15:50:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>86862</filename>
            <type>text/plain</type>
            <size>65322</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExNzYzOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDEyLTA1LTE4ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBh
cyBhbiBhcGsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg2ODYyCisKKyAgICAgICAgY2hyb21pdW1fYW5kcm9pZC5weSBpcyBtb2RpZmllZCB0byBzdXBw
b3J0IHJ1bm5pbmcgRHVtcFJlbmRlclRyZWUgYXMKKyAgICAgICAgYW4gYXBrLCBzbyB0aGF0IHdl
IGNhbiBydW4gdGhlIHRlc3RzIChlLmcuIHZpZGVvKSByZXF1aXJpbmcgZmVhdHVyZXMKKyAgICAg
ICAgaW1wbGVtZW50ZWQgaW4gSmF2YSBvbiBBbmRyb2lkLgorCisgICAgICAgIEJUVyBzcGxpdCBU
ZXN0U2hlbGxMaW51eC5jcHAgaW50byBUZXN0U2hlbGxQb3NpeC5jcHAgYW5kCisgICAgICAgIFRl
c3RTaGVsbFgxMS5jcHAuIFRlc3RTaGVsbFBvc2l4LmNwcCBhbmQgVGVzdFNoZWxsQW5kcm9pZC5j
cHAgYXJlCisgICAgICAgIGNvbXBpbGVkIGZvciBBbmRyb2lkLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5neXBpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbEFuZHJvaWQuY3BwOiBBZGRlZC4gRGlyZWN0cyBzdGRpbi9zdGRvdXQvc3RkZXJyIHRv
IGZpZm9zIGFuZCBmaWxlcy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxHdGsuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bExpbnV4LmNwcDogUmVtb3ZlZC4gU3BsaXQgaW50byBUZXN0U2hlbGxYMTEuY3BwIGFuZCBUZXN0
U2hlbGxQb3NpeC5jcHAuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsUG9zaXguY3BwOiBUaGUgcG9zaXggcGFydCAodXNlZCBvbiBMaW51eCBhbmQgQW5kcm9pZCkg
b2YgdGhlIG9yaWdpbmFsIFRlc3RTaGVsbExpbnV4LmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwOiBUaGUgWDExIChmb250Y29uZmlnKSBwYXJ0
IG9mIHRoZSBvcmlnaW5hbCBUZXN0U2hlbGxMaW51eC5jcHAuCisgICAgICAgIChzZXR1cEZvbnRj
b25maWcpOgorICAgICAgICAocGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWRQb3J0Ll9faW5pdF9fKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQu
ZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5j
aGVja193ZGlmZik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0LmNoZWNrX2J1aWxkKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuc3RhcnRfaGVscGVyKToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZFBvcnQuc2tpcHBlZF9sYXlvdXRfdGVzdHMpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkUG9ydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9wYXRoX3RvX2Ry
aXZlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9nZXRfY3Jhc2hfbG9nKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3B1c2hfZXhlY3V0YWJsZSk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWRQb3J0Ll9ydW5fYWRiX2NvbW1hbmQpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkUG9ydC5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWRQb3J0Ll9nZXRfbG9nY2F0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlcik6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19pbml0X18pOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9jb21tYW5kX3dyYXBwZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLmNtZF9saW5lKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZmls
ZV9leGlzdHNfb25fZGV2aWNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fdGlt
ZW91dF9raWxsZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydCk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIucnVuX3Rlc3QpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLnN0b3ApOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl93
cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9vdXRwdXRfaW1hZ2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9nZXRf
c3RkZXJyKToKKwogMjAxMi0wNS0xOCAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28u
c2FudG9zQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBCdWlsZGJvdCBvdXRwdXQgZG9lcyBu
b3QgcHJpbnQgcmVzdWx0IHN0YXRzIGFueW1vcmUKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUuZ3lwaQkocmV2aXNpb24gMTE3NjM5KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEy
IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmgnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RTaGVsbC5oJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5j
cHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1
bS9UZXN0U2hlbGxNYWMubW0nLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4
LmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsV2luLmNwcCcsCisgICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0v
VGVzdFdlYlBsdWdpbi5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4u
aCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGV4dElucHV0Q29udHJvbGxlci5jcHAnLApJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVl
Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXAvRHVtcFJlbmRlclRyZWUuZ3lwCShyZXZpc2lvbiAxMTc2MzkpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCwxMSArNzgsMTUgQEAKICAgICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUn
LAogICAgICAgICAgICAgJ21hY19idW5kbGUnOiAxLAogICAgICAgICAgICAgJ2RlcGVuZGVuY2ll
cyc6IFsKKyAgICAgICAgICAgICAgICAnSW1hZ2VEaWZmJywKKyAgICAgICAgICAgICAgICAnVGVz
dE5ldHNjYXBlUGx1Z0luJywKKyAgICAgICAgICAgICAgICAnY29weV9UZXN0TmV0c2NhcGVQbHVn
SW4nLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwOmluc3BlY3Rvcl9yZXNvdXJjZXMnLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9k
aXIpL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwOndlYmtpdCcsCiAgICAgICAgICAgICAgICAg
Jzwoc291cmNlX2RpcikvV1RGL1dURi5neXAvV1RGLmd5cDp3dGYnLAogICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xl
dXJsJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9p
Y3UvaWN1Lmd5cDppY3V1YycsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
dGhpcmRfcGFydHkvbWVzYS9tZXNhLmd5cDpvc21lc2EnLAogICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL3Y4L3Rvb2xzL2d5cC92OC5neXA6djgnLAogICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAog
ICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3dlYmtpdC9zdXBwb3J0L3dlYmtp
dF9zdXBwb3J0Lmd5cDpibG9iJywKQEAgLTE4Nyw2ICsxOTEsMTEgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdNYWNcXC5jcHAkJ10sCiAgICAgICAgICAgICAgICAgICAg
IF0sCiAgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgWydvc19wb3NpeCE9MSBv
ciBPUz09Im1hYyInLCB7CisgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdQb3NpeFxcLmNwcCQnXSwKKyAgICAgICAg
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ3Vz
ZV94MTEgPT0gMScsIHsKICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAg
ICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxkL2xpbnV4L3N5
c3RlbS5neXA6Zm9udGNvbmZpZycsCkBAIC0yMTIsNyArMjIxLDcgQEAKICAgICAgICAgICAgICAg
ICAgICAgXSwKICAgICAgICAgICAgICAgICB9LHsgIyB1c2VfeDExICE9IDEKICAgICAgICAgICAg
ICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRl
JywgJ0xpbnV4XFwuY3BwJCddCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
WDExXFwuY3BwJCddLAogICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgfV0s
CiAgICAgICAgICAgICAgICAgWyd0b29sa2l0X3VzZXNfZ3RrID09IDEnLCB7CkBAIC0yMzEsMjEg
KzI0MCwzMCBAQAogICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgfV0sCiAg
ICAgICAgICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgeworICAgICAgICAgICAgICAgICAgICAn
dHlwZSc6ICdzaGFyZWRfbGlicmFyeScsCiAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNp
ZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnSW1hZ2VEaWZmI2hvc3QnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0
X3N1cHBvcnRfYmFzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNf
ZGlyKS90b29scy9hbmRyb2lkL2ZvcndhcmRlci9mb3J3YXJkZXIuZ3lwOmZvcndhcmRlcicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJv
aWQvbmF0aXZlX3Rlc3QuZ3lwOm5hdGl2ZV90ZXN0X25hdGl2ZV9jb2RlJywKICAgICAgICAgICAg
ICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAg
ICAgICAgICAgICAgICAgWydpbmNsdWRlJywgJ2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4XFwuY3Bw
JCddLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0seyAjIE9TIT0i
YW5kcm9pZCIKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAg
ICAgICAgICAgICAgWydleGNsdWRlJywgJyhBbmRyb2lkKVxcLmNwcCQnXQotICAgICAgICAgICAg
ICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAg
ICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzISc6IFsKICAgICAgICAgICAgICAgICAgICAgICAg
ICdJbWFnZURpZmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3ROZXRzY2FwZVBsdWdJ
bicsCiAgICAgICAgICAgICAgICAgICAgICAgICAnY29weV9UZXN0TmV0c2NhcGVQbHVnSW4nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkv
bWVzYS9tZXNhLmd5cDpvc21lc2EnLAogICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgICAgICAnY29waWVzJzogW3sKKyAgICAgICAgICAgICAgICAgICAgICAgICdkZXN0aW5h
dGlvbic6ICc8KFBST0RVQ1RfRElSKScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZXMn
OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYWhlbV9wYXRoKScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvcmVwYWNrL0R1bXBSZW5k
ZXJUcmVlLnBhaycsCisgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAg
ICAgIH1dLAorICAgICAgICAgICAgICAgIH0sIHsgIyBPUyE9ImFuZHJvaWQiCisgICAgICAgICAg
ICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVk
ZScsICdBbmRyb2lkXFwuY3BwJCddLAorICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAg
ICAgICAgIH1dLAogICAgICAgICAgICAgICAgIFsnaW5zaWRlX2Nocm9taXVtX2J1aWxkPT0xIGFu
ZCBjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7CiAgICAgICAgICAgICAgICAgICAgICdz
b3VyY2VzJzogWwpAQCAtMzgzLDUgKzQwMSw0MyBAQAogICAgICAgICAgICAgICAgICdjZmxhZ3Nf
Y2MnOiBbJy1Xbm8tYysrMHgtY29tcGF0J10sCiAgICAgICAgICAgICB9LAogICAgICAgICB9XSwK
KyAgICAgICAgWydPUz09ImFuZHJvaWQiJywgeworICAgICAgICAgICAgIyBXcmFwIGxpYkR1bXBS
ZW5kZXJUcmVlLnNvIGludG8gYW4gYW5kcm9pZCBhcGsgZm9yIGV4ZWN1dGlvbi4KKyAgICAgICAg
ICAgICMgU2VlIDwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cCBmb3IgVE9ETyhqcmcp
cyBhYm91dCB0aGlzIHN0cmF0ZWd5LgorICAgICAgICAgICAgJ3RhcmdldHMnOiBbeworICAgICAg
ICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdEdW1wUmVuZGVyVHJlZV9hcGsnLAorICAgICAgICAg
ICAgICAgICd0eXBlJzogJ25vbmUnLAorICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBb
CisgICAgICAgICAgICAgICAgICAgICdEdW1wUmVuZGVyVHJlZScsCisgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgICAnYWN0aW9ucyc6IFt7CisgICAgICAgICAgICAgICAgICAgICMg
R2VuZXJhdGUgYXBrIGZpbGVzIChpbmNsdWRpbmcgc291cmNlIGFuZCBhbnRmaWxlKSBmcm9tCisg
ICAgICAgICAgICAgICAgICAgICMgYSB0ZW1wbGF0ZSwgYW5kIGJ1aWxkcyB0aGVtLgorICAgICAg
ICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVfYW5kX2J1aWxkJywKKyAgICAg
ICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5kcm9pZC9nZW5lcmF0ZV9uYXRpdmVfdGVzdC5weScs
CisgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvbGliLnRhcmdldC9saWJE
dW1wUmVuZGVyVHJlZS5zbycsCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE8od2FuZ3hp
YW56aHUpOiBCdWlsZCB0aGUgamFyIGZvciBuYXRpdmUgdGVzdHMgd2l0aCBTREsuCisgICAgICAg
ICAgICAgICAgICAgICAgICAjIEZvciBub3cgd2UgYXJlIHVzaW5nIEFuZHJvaWQubWsgdG8gYnVp
bGQgdGhlIGFway4KKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAg
J291dHB1dHMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRHVt
cFJlbmRlclRyZWVfYXBrL0Nocm9tZU5hdGl2ZVRlc3RzLWRlYnVnLmFwaycsCisgICAgICAgICAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJvaWQvZ2VuZXJh
dGVfbmF0aXZlX3Rlc3QucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tbmF0aXZlX2xp
YnJhcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2xpYi50YXJn
ZXQvbGliRHVtcFJlbmRlclRyZWUuc28nLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RP
KHdhbmd4aWFuemh1KTogQnVpbGQgdGhlIGphciBmb3IgbmF0aXZlIHRlc3RzIHdpdGggU0RLLgor
ICAgICAgICAgICAgICAgICAgICAgICAgIyAnLS1qYXInLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIyAnZm9vL2Jhci5qYXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tb3V0cHV0JywK
KyAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EdW1wUmVuZGVyVHJlZV9h
cGsnLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tYW50LWFyZ3MnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgJy1EUFJPRFVDVF9ESVI9PChQUk9EVUNUX0RJUiknLAorICAgICAgICAgICAg
ICAgICAgICAgICAgJy0tYW50LWNvbXBpbGUnCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAgICAgfV0sCisgICAgICAgICAgICB9XSwKKyAgICAgICAgfV0sCiAgICAgXSwgIyBj
b25kaXRpb25zCiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGxBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGxBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKworI2lu
Y2x1ZGUgPGFuZHJvaWQvbG9nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IHsKKworY29uc3QgY2hhciBvcHRpb25JbkZpZm9bXSA9ICItLWluLWZpZm89IjsKK2NvbnN0IGNo
YXIgb3B0aW9uT3V0Rmlmb1tdID0gIi0tb3V0LWZpZm89IjsKK2NvbnN0IGNoYXIgb3B0aW9uRXJy
RmlsZVtdID0gIi0tZXJyLWZpbGU9IjsKKwordm9pZCBhbmRyb2lkTG9nRXJyb3IoY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOworCit2b2lkIGFuZHJv
aWRMb2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7
CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBfX2FuZHJvaWRfbG9nX3ZwcmludChB
TkRST0lEX0xPR19FUlJPUiwgIkR1bXBSZW5kZXJUcmVlIiwgZm9ybWF0LCBhcmdzKTsKKyAgICB2
YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQgcmVtb3ZlQXJnKGludCBpbmRleCwgaW50KiBhcmdjLCBj
aGFyKioqIGFyZ3YpCit7CisgICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgKmFyZ2M7ICsraSkK
KyAgICAgICAgKCphcmd2KVtpXSA9ICgqYXJndilbaSArIDFdOworICAgIC0tKmFyZ2M7Cit9CisK
K3ZvaWQgY3JlYXRlRmlmbyhjb25zdCBjaGFyKiBmaWZvUGF0aCkKK3sKKyAgICB1bmxpbmsoZmlm
b1BhdGgpOworICAgIGlmIChta2ZpZm8oZmlmb1BhdGgsIDA2MDApKSB7CisgICAgICAgIGFuZHJv
aWRMb2dFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBmaWZvICVzOiAlc1xuIiwgZmlmb1BhdGgsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisK
K3ZvaWQgcmVkaXJlY3RUb0ZpbGUoRklMRSogc3RyZWFtLCBjb25zdCBjaGFyKiBwYXRoLCBjb25z
dCBjaGFyKiBtb2RlKQoreworICAgIGlmICghZnJlb3BlbihwYXRoLCBtb2RlLCBzdHJlYW0pKSB7
CisgICAgICAgIGFuZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIHJlZGlyZWN0IHN0cmVhbSB0byBm
aWxlOiAlczogJXNcbiIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgcGxhdGZvcm1J
bml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQoreworICAgIGNvbnN0IGNoYXIqIGluRmlmbyA9
IDA7CisgICAgY29uc3QgY2hhciogb3V0RmlmbyA9IDA7CisgICAgY29uc3QgY2hhciogZXJyRmls
ZSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCAqYXJnYzsgKSB7CisgICAgICAgIGNvbnN0
IGNoYXIqIGFyZ3VtZW50ID0gKCphcmd2KVtpXTsKKyAgICAgICAgaWYgKHN0cnN0cihhcmd1bWVu
dCwgb3B0aW9uSW5GaWZvKSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgaW5GaWZvID0gYXJn
dW1lbnQgKyBzdHJsZW4ob3B0aW9uSW5GaWZvKTsKKyAgICAgICAgICAgIGNyZWF0ZUZpZm8oaW5G
aWZvKTsKKyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbk91dEZpZm8pID09IGFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICBvdXRGaWZvID0gYXJndW1lbnQgKyBzdHJsZW4ob3B0aW9uT3V0Rmlmbyk7Cisg
ICAgICAgICAgICBjcmVhdGVGaWZvKG91dEZpZm8pOworICAgICAgICAgICAgcmVtb3ZlQXJnKGks
IGFyZ2MsIGFyZ3YpOworICAgICAgICB9IGVsc2UgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9u
RXJyRmlsZSkgPT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVyckZpbGUgPSBhcmd1bWVudCAr
IHN0cmxlbihvcHRpb25FcnJGaWxlKTsKKyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBh
cmd2KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICArK2k7CisgICAgfQorCisgICAgLy8g
VGhlIG9yZGVyIG9mIGNyZWF0ZUZpZm8oKSBhbmQgcmVkaXJlY3RUb0ZpZm8oKSBpcyBpbXBvcnRh
bnQgdG8gYXZvaWQgZGVhZGxvY2suCisgICAgaWYgKG91dEZpZm8pCisgICAgICAgIHJlZGlyZWN0
VG9GaWxlKHN0ZG91dCwgb3V0RmlmbywgInciKTsKKyAgICBpZiAoaW5GaWZvKQorICAgICAgICBy
ZWRpcmVjdFRvRmlsZShzdGRpbiwgaW5GaWZvLCAiciIpOworICAgIGlmIChlcnJGaWxlKQorICAg
ICAgICByZWRpcmVjdFRvRmlsZShzdGRlcnIsIGVyckZpbGUsICJ3Iik7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIFJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQuCisgICAgICAgIGR1cDIoMSwgMik7
CisgICAgfQorfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxHdGsuY3BwCShyZXZpc2lvbiAxMTc2MzkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgogCi0jaW5jbHVk
ZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKLSNpbmNsdWRlIDxmb250Y29uZmln
L2ZvbnRjb25maWcuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+
Ci0KIAogdm9pZCBvcGVuU3RhcnR1cERpYWxvZygpCiB7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsTGludXguY3BwCShyZXZpc2lvbiAxMTc2Mzkp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFNoZWxsLmgiCi0KLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiV2Vi
Vmlldy5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0KLSNp
ZiAhT1MoQU5EUk9JRCkKLSNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNlbmRp
ZgotCi0jaWYgVVNFKEdUSykKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jZW5kaWYKLSNpbmNsdWRl
IDxzaWduYWwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotc3RhdGljIHZvaWQgQWxhcm1IYW5k
bGVyKGludCkKLXsKLSAgICAvLyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2Vz
cyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5IGJhZCBoYW5nLgotICAgIHB1dHMoIlxuI1RFU1RfVElN
RURfT1VUXG4iKTsKLSAgICBwdXRzKCIjRU9GXG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAg
ICBleGl0KDApOwotfQotCi12b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCi17Ci0g
ICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRpbmcpOwotICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7
Ci0KLSAgICAvLyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxs
IHVzIGlmIHdlIHRpbWUgb3V0LgotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Ci0g
ICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKLSAgICBzaWdlbXB0eXNl
dCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7Ci0gICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwot
Ci0gICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0s
ICZhbGFybUFjdGlvbiwgJm9sZEFjdGlvbik7Ci0gICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRG
b3JXYXRjaERvZygpIC8gMTAwMCk7Ci0KLSAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3Qg
YSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBm
aW5pc2hlcyBsb2FkaW5nLgotICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdl
YmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBhbGFy
bS4KLSAgICBhbGFybSgwKTsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7
Ci19Ci0KLSNpZiAhT1MoQU5EUk9JRCkKLXN0YXRpYyBib29sIGNoZWNrQW5kTG9hZEZvbnRGaWxl
KEZjQ29uZmlnKiBmb250Y2ZnLCBjb25zdCBjaGFyKiBwYXRoMSwgY29uc3QgY2hhciogcGF0aDIp
Ci17Ci0gICAgY29uc3QgY2hhciogZm9udCA9IHBhdGgxOwotICAgIGlmIChhY2Nlc3MoZm9udCwg
Ul9PSykgPCAwKSB7Ci0gICAgICAgIGZvbnQgPSBwYXRoMjsKLSAgICAgICAgaWYgKGFjY2Vzcyhm
b250LCBSX09LKSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBt
aXNzaW5nICVzIG9yICVzLiBXaXRob3V0IHRoaXMsIHNvbWUgbGF5b3V0IHRlc3RzIG1heSBmYWls
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvY2hyb21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4ICIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZm9yIG1vcmUuXG4iLCBwYXRoMSwgcGF0aDIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghRmNDb25maWdBcHBGb250QWRk
RmlsZShmb250Y2ZnLCAoRmNDaGFyOCAqKSBmb250KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGZvbnQpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cEZvbnRj
b25maWcoKQotewotICAgIC8vIFdlIHdpc2ggdG8gbWFrZSB0aGUgbGF5b3V0IHRlc3RzIHJlcHJv
ZHVjYWJsZSB3aXRoIHJlc3BlY3QgdG8gZm9udHMuIFNraWEKLSAgICAvLyB1c2VzIGZvbnRjb25m
aWcgdG8gcmVzb2x2ZSBmb250IGZhbWlseSBuYW1lcyBmcm9tIFdlYktpdCBpbnRvIGFjdHVhbCBm
b250Ci0gICAgLy8gZmlsZXMgZm91bmQgb24gdGhlIGN1cnJlbnQgc3lzdGVtLiBUaGlzIG1lYW5z
IHRoYXQgZm9udHMgdmFyeSBiYXNlZCBvbiB0aGUKLSAgICAvLyBzeXN0ZW0gYW5kIGFsc28gb24g
dGhlIGZvbnRjb25maWcgY29uZmlndXJhdGlvbi4KLSAgICAvLwotICAgIC8vIFRvIGF2b2lkIHRo
aXMgd2UgaW5pdGlhbGlzZSBmb250Y29uZmlnIGhlcmUgYW5kIGluc3RhbGwgYSBjb25maWd1cmF0
aW9uCi0gICAgLy8gd2hpY2ggb25seSBrbm93cyBhYm91dCBhIGZldywgc2VsZWN0LCBmb250cy4K
LQotICAgIC8vIFdlIGhhdmUgZm9udGNvbmZpZyBwYXJzZSBhIGNvbmZpZyBmaWxlIGZyb20gb3Vy
IHJlc291cmNlcyBmaWxlLiBUaGlzCi0gICAgLy8gc2V0cyBhIG51bWJlciBvZiBhbGlhc2VzICgi
c2FucyItPiJBcmlhbCIgZXRjKSwgYnV0IGRvZXNuJ3QgaW5jbHVkZSBhbnkKLSAgICAvLyBmb250
IGRpcmVjdG9yaWVzLgotICAgIEZjSW5pdCgpOwotCi0gICAgY2hhciBkcnRQYXRoW1BBVEhfTUFY
ICsgMV07Ci0gICAgaW50IGRydFBhdGhTaXplID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwg
ZHJ0UGF0aCwgUEFUSF9NQVgpOwotICAgIGlmIChkcnRQYXRoU2l6ZSA8IDAgfHwgZHJ0UGF0aFNp
emUgPiBQQVRIX01BWCkgewotICAgICAgICBmcHV0cygiVW5hYmxlIHRvIHJlc29sdmUgL3Byb2Mv
c2VsZi9leGUuIiwgc3RkZXJyKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZHJ0UGF0
aFtkcnRQYXRoU2l6ZV0gPSAwOwotICAgIHN0ZDo6c3RyaW5nIGRydERpclBhdGgoZHJ0UGF0aCk7
Ci0gICAgc2l6ZV90IGxhc3RQYXRoUG9zID0gZHJ0RGlyUGF0aC5yZmluZCgiLyIpOwotICAgIEFT
U0VSVChsYXN0UGF0aFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0gICAgZHJ0RGlyUGF0aC5l
cmFzZShsYXN0UGF0aFBvcyArIDEpOwotCi0gICAgRmNDb25maWcqIGZvbnRjZmcgPSBGY0NvbmZp
Z0NyZWF0ZSgpOwotICAgIHN0ZDo6c3RyaW5nIGZvbnRjb25maWdQYXRoID0gZHJ0RGlyUGF0aCAr
ICJmb250cy5jb25mIjsKLSAgICBpZiAoIUZjQ29uZmlnUGFyc2VBbmRMb2FkKGZvbnRjZmcsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRjb25maWdQYXRoLmNfc3RyKCkpLCB0
cnVlKSkgewotICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHBhcnNlIGZvbnRjb25maWcgY29uZmln
IGZpbGVcbiIsIHN0ZGVycik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgLy8gVGhp
cyBpcyB0aGUgbGlzdCBvZiBmb250cyB0aGF0IGZvbnRjb25maWcgd2lsbCBrbm93IGFib3V0LiBJ
dAotICAgIC8vIHdpbGwgdHJ5IGl0cyBiZXN0IHRvIG1hdGNoIGJhc2VkIG9ubHkgb24gdGhlIGZv
bnRzIGhlcmUgaW4uIFRoZQotICAgIC8vIHBhdGhzIGFyZSB3aGVyZSB0aGVzZSBmb250cyBhcmUg
Zm91bmQgb24gb3VyIFVidW50dSBib3hlcy4KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qg
Zm9udHNbXSA9IHsKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUva29jaGkva29j
aGktZ290aGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hp
L2tvY2hpLW1pbmNoby50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0FyaWFsLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfSXRhbGlj
LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
Q29taWNfU2Fuc19NUy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVNfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3LnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9s
ZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L0NvdXJpZXJfTmV3X0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfSXRhbGljLnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYS50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFf
Qm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZv
bnRzL0dlb3JnaWFfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0ltcGFjdC50dGYiLAotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NUy50
dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1Ry
ZWJ1Y2hldF9NU19Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0l0YWxp
Yy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L1RpbWVzX05ld19Sb21hbi50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGRf
SXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3Jl
Zm9udHMvVGltZXNfTmV3X1JvbWFuX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmEudHRmIiwKLSAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0JvbGQudHRmIiwKLSAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0Jv
bGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvVmVyZGFuYV9JdGFsaWMudHRmIiwKLSAgICAgICAgLy8gVGhlIERlamFWdVNhbnMg
Zm9udCBpcyB1c2VkIGJ5IHRoZSBjc3MyLjEgdGVzdHMuCi0gICAgICAgICIvdXNyL3NoYXJlL2Zv
bnRzL3RydWV0eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2Fucy50dGYiLAotICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF9oaS50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9s
b2hpdF90YS50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5k
aWMtZm9udHMtY29yZS9NdWt0aU5hcnJvdy50dGYiLAotICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhcnJheXNpemUoZm9udHMpOyArK2kpIHsKLSAgICAgICAgaWYgKGFjY2Vzcyhm
b250c1tpXSwgUl9PSykpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBt
aXNzaW5nICVzLiBUcnkgcmUtcnVubmluZyBidWlsZC9pbnN0YWxsLWJ1aWxkLWRlcHMuc2guIEFs
c28gc2VlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5b3V0VGVzdHNMaW51eCIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udHNbaV0pOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikg
Zm9udHNbaV0pKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2Fk
IGZvbnQgJXNcbiIsIGZvbnRzW2ldKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoIWNoZWNrQW5kTG9hZEZvbnRGaWxlKGZvbnRjZmcsICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL3RoYWkvR2FydWRhLnR0ZiIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90bHdnL0dhcnVkYS50dGYiKSkK
LSAgICAgICAgZXhpdCgxKTsKLQotICAgIC8vIFdlIHNwZWNpYWwgY2FzZSB0aGVzZSBmb250cyBi
ZWNhdXNlIHRoZXkncmUgb25seSBuZWVkZWQgaW4gYQotICAgIC8vIGZldyBsYXlvdXQgdGVzdHMu
Ci0gICAgY2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfcGEudHRmIiwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLXB1bmphYmktZm9udHMv
bG9oaXRfcGEudHRmIik7Ci0KLSAgICAvLyBBbHNvIGxvYWQgdGhlIGxheW91dC10ZXN0LXNwZWNp
ZmljICJBaGVtIiBmb250LgotICAgIHN0ZDo6c3RyaW5nIGFoZW1QYXRoID0gZHJ0RGlyUGF0aCAr
ICJBSEVNX19fXy5UVEYiOwotICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2Zn
LCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihhaGVtUGF0aC5jX3N0cigpKSkpIHsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBhaGVt
UGF0aC5jX3N0cigpKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBpZiAoIUZjQ29u
ZmlnU2V0Q3VycmVudChmb250Y2ZnKSkgewotICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHNldCB0
aGUgZGVmYXVsdCBmb250IGNvbmZpZ3VyYXRpb25cbiIsIHN0ZGVycik7Ci0gICAgICAgIGV4aXQo
MSk7Ci0gICAgfQotfQotI2VuZGlmIC8vICFPUyhBTkRST0lEKQotCi12b2lkIHBsYXRmb3JtSW5p
dChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKLXsKLSAgICAvLyBGSVhNRTogSXQncyBiZXR0ZXIg
Y2FsbCBndGtfaW5pdCgpIG9ubHkgd2hlbiB3ZSBydW4gcGx1Z2luIHRlc3RzLgotICAgIC8vIFNl
ZSBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vYS9jaHJvbWl1bS5vcmcvZ3JvdXAvY2hyb21pdW0t
ZGV2L2Jyb3dzZV90aHJlYWQvdGhyZWFkLzYzM2VhMTY3Y2RlMTk2Y2EjCi0jaWYgVVNFKEdUSykK
LSAgICBndGtfaW5pdChhcmdjLCBhcmd2KTsKLSNlbmRpZgotCi0jaWYgIU9TKEFORFJPSUQpCi0g
ICAgc2V0dXBGb250Y29uZmlnKCk7Ci0jZW5kaWYKLX0KLQpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcAkocmV2aXNpb24gMCkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
U2hlbGwuaCIKKworI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCisK
KyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIHZvaWQg
QWxhcm1IYW5kbGVyKGludCkKK3sKKyAgICAvLyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0
aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5IGJhZCBoYW5nLgorICAgIHB1dHMoIlxu
I1RFU1RfVElNRURfT1VUXG4iKTsKKyAgICBwdXRzKCIjRU9GXG4iKTsKKyAgICBmZmx1c2goc3Rk
b3V0KTsKKyAgICBleGl0KDApOworfQorCit2b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hl
ZCgpCit7CisgICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRpbmcpOworICAgIG1fdGVzdElzUGVuZGlu
ZyA9IHRydWU7CisKKyAgICAvLyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQg
d2lsbCBraWxsIHVzIGlmIHdlIHRpbWUgb3V0LgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1B
Y3Rpb247CisgICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKKyAgICBz
aWdlbXB0eXNldCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7CisgICAgYWxhcm1BY3Rpb24uc2FfZmxh
Z3MgPSAwOworCisgICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247CisgICAgc2lnYWN0aW9u
KFNJR0FMUk0sICZhbGFybUFjdGlvbiwgJm9sZEFjdGlvbik7CisgICAgYWxhcm0obGF5b3V0VGVz
dFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAwMCk7CisKKyAgICAvLyBUZXN0RmluaXNoZWQoKSB3
aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UK
KyAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgorICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCisg
ICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworCisgICAgLy8gUmVtb3Zl
IHRoZSBhbGFybS4KKyAgICBhbGFybSgwKTsKKyAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFj
dGlvbiwgMCk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxQb3NpeC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
WDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxYMTEuY3BwCShyZXZpc2lvbiAxMTc2MDQpCShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNwcDoxMTc2MDQpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgorCisjaW5j
bHVkZSAiU2tUeXBlZmFjZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJr
aXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCisjaWYgIU9TKEFORFJPSUQpCisjaW5jbHVk
ZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+CisjZW5kaWYKKworI2lmIFVTRShHVEspCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2VuZGlmCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisKK3N0YXRpYyB2b2lkIEFsYXJtSGFuZGxlcihpbnQpCit7CisgICAgLy8gSWYg
dGhlIGFsYXJtIGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJlYWxs
eSBiYWQgaGFuZy4KKyAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7CisgICAgcHV0cygi
I0VPRlxuIik7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgZXhpdCgwKTsKK30KKwordm9pZCBU
ZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQoKQoreworICAgIEFTU0VSVCghbV90ZXN0SXNQZW5k
aW5nKTsKKyAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOworCisgICAgLy8gSW5zdGFsbCBhbiBh
bGFybSBzaWduYWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KKyAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0aW9uOworICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRs
ZXIgPSBBbGFybUhhbmRsZXI7CisgICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2sp
OworICAgIGFsYXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKKworICAgIHN0cnVjdCBzaWdhY3Rpb24g
b2xkQWN0aW9uOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rp
b24pOworICAgIGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOwor
CisgICAgLy8gVGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFr
IHRoaXMgbG9vcCB3aGVuIHRoZSBwYWdlCisgICAgLy8gZmluaXNoZXMgbG9hZGluZy4KKyAgICB3
aGlsZSAobV90ZXN0SXNQZW5kaW5nKQorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2Fn
ZUxvb3AoKTsKKworICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCisgICAgYWxhcm0oMCk7CisgICAg
c2lnYWN0aW9uKFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOworfQorCisjaWYgIU9TKEFORFJPSUQp
CitzdGF0aWMgYm9vbCBjaGVja0FuZExvYWRGb250RmlsZShGY0NvbmZpZyogZm9udGNmZywgY29u
c3QgY2hhciogcGF0aDEsIGNvbnN0IGNoYXIqIHBhdGgyKQoreworICAgIGNvbnN0IGNoYXIqIGZv
bnQgPSBwYXRoMTsKKyAgICBpZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkgeworICAgICAgICBm
b250ID0gcGF0aDI7CisgICAgICAgIGlmIChhY2Nlc3MoZm9udCwgUl9PSykgPCAwKSB7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcyBvciAlcy4gV2l0aG91
dCB0aGlzLCBzb21lIGxheW91dCB0ZXN0cyBtYXkgZmFpbC4gIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5
b3V0VGVzdHNMaW51eCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBtb3JlLlxu
IiwgcGF0aDEsIHBhdGgyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjgg
KikgZm9udCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250
ICVzXG4iLCBmb250KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBGb250Y29uZmlnKCkKK3sKKyAgICAvLyBXZSB3
aXNoIHRvIG1ha2UgdGhlIGxheW91dCB0ZXN0cyByZXByb2R1Y2FibGUgd2l0aCByZXNwZWN0IHRv
IGZvbnRzLiBTa2lhCisgICAgLy8gdXNlcyBmb250Y29uZmlnIHRvIHJlc29sdmUgZm9udCBmYW1p
bHkgbmFtZXMgZnJvbSBXZWJLaXQgaW50byBhY3R1YWwgZm9udAorICAgIC8vIGZpbGVzIGZvdW5k
IG9uIHRoZSBjdXJyZW50IHN5c3RlbS4gVGhpcyBtZWFucyB0aGF0IGZvbnRzIHZhcnkgYmFzZWQg
b24gdGhlCisgICAgLy8gc3lzdGVtIGFuZCBhbHNvIG9uIHRoZSBmb250Y29uZmlnIGNvbmZpZ3Vy
YXRpb24uCisgICAgLy8KKyAgICAvLyBUbyBhdm9pZCB0aGlzIHdlIGluaXRpYWxpc2UgZm9udGNv
bmZpZyBoZXJlIGFuZCBpbnN0YWxsIGEgY29uZmlndXJhdGlvbgorICAgIC8vIHdoaWNoIG9ubHkg
a25vd3MgYWJvdXQgYSBmZXcsIHNlbGVjdCwgZm9udHMuCisKKyAgICAvLyBXZSBoYXZlIGZvbnRj
b25maWcgcGFyc2UgYSBjb25maWcgZmlsZSBmcm9tIG91ciByZXNvdXJjZXMgZmlsZS4gVGhpcwor
ICAgIC8vIHNldHMgYSBudW1iZXIgb2YgYWxpYXNlcyAoInNhbnMiLT4iQXJpYWwiIGV0YyksIGJ1
dCBkb2Vzbid0IGluY2x1ZGUgYW55CisgICAgLy8gZm9udCBkaXJlY3Rvcmllcy4KKyAgICBGY0lu
aXQoKTsKKworICAgIGNoYXIgZHJ0UGF0aFtQQVRIX01BWCArIDFdOworICAgIGludCBkcnRQYXRo
U2l6ZSA9IHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGRydFBhdGgsIFBBVEhfTUFYKTsKKyAg
ICBpZiAoZHJ0UGF0aFNpemUgPCAwIHx8IGRydFBhdGhTaXplID4gUEFUSF9NQVgpIHsKKyAgICAg
ICAgZnB1dHMoIlVuYWJsZSB0byByZXNvbHZlIC9wcm9jL3NlbGYvZXhlLiIsIHN0ZGVycik7Cisg
ICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGRydFBhdGhbZHJ0UGF0aFNpemVdID0gMDsKKyAg
ICBzdGQ6OnN0cmluZyBkcnREaXJQYXRoKGRydFBhdGgpOworICAgIHNpemVfdCBsYXN0UGF0aFBv
cyA9IGRydERpclBhdGgucmZpbmQoIi8iKTsKKyAgICBBU1NFUlQobGFzdFBhdGhQb3MgIT0gc3Rk
OjpzdHJpbmc6Om5wb3MpOworICAgIGRydERpclBhdGguZXJhc2UobGFzdFBhdGhQb3MgKyAxKTsK
KworICAgIEZjQ29uZmlnKiBmb250Y2ZnID0gRmNDb25maWdDcmVhdGUoKTsKKyAgICBzdGQ6OnN0
cmluZyBmb250Y29uZmlnUGF0aCA9IGRydERpclBhdGggKyAiZm9udHMuY29uZiI7CisgICAgaWYg
KCFGY0NvbmZpZ1BhcnNlQW5kTG9hZChmb250Y2ZnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZj
Q2hhcjgqPihmb250Y29uZmlnUGF0aC5jX3N0cigpKSwgdHJ1ZSkpIHsKKyAgICAgICAgZnB1dHMo
IkZhaWxlZCB0byBwYXJzZSBmb250Y29uZmlnIGNvbmZpZyBmaWxlXG4iLCBzdGRlcnIpOworICAg
ICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZm9udHMg
dGhhdCBmb250Y29uZmlnIHdpbGwga25vdyBhYm91dC4gSXQKKyAgICAvLyB3aWxsIHRyeSBpdHMg
YmVzdCB0byBtYXRjaCBiYXNlZCBvbmx5IG9uIHRoZSBmb250cyBoZXJlIGluLiBUaGUKKyAgICAv
LyBwYXRocyBhcmUgd2hlcmUgdGhlc2UgZm9udHMgYXJlIGZvdW5kIG9uIG91ciBVYnVudHUgYm94
ZXMuCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZvbnRzW10gPSB7CisgICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hpL2tvY2hpLWdvdGhpYy50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9rb2NoaS9rb2NoaS1taW5jaG8udHRmIiwKKyAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbC50dGYi
LAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFs
X0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9BcmlhbF9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVMudHRmIiwKKyAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5z
X01TX0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNv
cmVmb250cy9Db3VyaWVyX05ldy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3X0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19Cb2xkX0l0YWxp
Yy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L0NvdXJpZXJfTmV3X0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWEudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGQudHRmIiwKKyAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGRfSXRhbGlj
LnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
R2VvcmdpYV9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
bXN0dGNvcmVmb250cy9JbXBhY3QudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfQm9sZC50dGYiLAor
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hl
dF9NU19Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW4udHRmIiwK
KyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19O
ZXdfUm9tYW5fQm9sZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9J
dGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9WZXJkYW5hLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfSXRhbGlj
LnR0ZiIsCisgICAgICAgIC8vIFRoZSBEZWphVnVTYW5zIGZvbnQgaXMgdXNlZCBieSB0aGUgY3Nz
Mi4xIHRlc3RzLgorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1
L0RlamFWdVNhbnMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRm
LWluZGljLWZvbnRzLWNvcmUvbG9oaXRfaGkudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfdGEudHRmIiwKKyAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvTXVrdGlOYXJy
b3cudHRmIiwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGZv
bnRzKTsgKytpKSB7CisgICAgICAgIGlmIChhY2Nlc3MoZm9udHNbaV0sIFJfT0spKSB7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcy4gVHJ5IHJlLXJ1bm5p
bmcgYnVpbGQvaW5zdGFsbC1idWlsZC1kZXBzLnNoLiBBbHNvIHNlZSAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xh
eW91dFRlc3RzTGludXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzW2ldKTsK
KyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFGY0NvbmZpZ0Fw
cEZvbnRBZGRGaWxlKGZvbnRjZmcsIChGY0NoYXI4ICopIGZvbnRzW2ldKSkgeworICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBmb250c1tpXSk7
CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjaGVj
a0FuZExvYWRGb250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90aGFp
L0dhcnVkYS50dGYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvdGx3Zy9HYXJ1ZGEudHRmIikpCisgICAgICAgIGV4aXQoMSk7CisKKyAg
ICAvLyBXZSBzcGVjaWFsIGNhc2UgdGhlc2UgZm9udHMgYmVjYXVzZSB0aGV5J3JlIG9ubHkgbmVl
ZGVkIGluIGEKKyAgICAvLyBmZXcgbGF5b3V0IHRlc3RzLgorICAgIGNoZWNrQW5kTG9hZEZvbnRG
aWxlKGZvbnRjZmcsICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1j
b3JlL2xvaGl0X3BhLnR0ZiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL3R0Zi1wdW5qYWJpLWZvbnRzL2xvaGl0X3BhLnR0ZiIpOworCisgICAg
Ly8gQWxzbyBsb2FkIHRoZSBsYXlvdXQtdGVzdC1zcGVjaWZpYyAiQWhlbSIgZm9udC4KKyAgICBz
dGQ6OnN0cmluZyBhaGVtUGF0aCA9IGRydERpclBhdGggKyAiQUhFTV9fX18uVFRGIjsKKyAgICBp
ZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBGY0NoYXI4Kj4oYWhlbVBhdGguY19zdHIoKSkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgYWhlbVBhdGguY19zdHIoKSk7CisgICAgICAg
IGV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoZm9udGNmZykp
IHsKKyAgICAgICAgZnB1dHMoIkZhaWxlZCB0byBzZXQgdGhlIGRlZmF1bHQgZm9udCBjb25maWd1
cmF0aW9uXG4iLCBzdGRlcnIpOworICAgICAgICBleGl0KDEpOworICAgIH0KK30KKyNlbmRpZiAv
LyAhT1MoQU5EUk9JRCkKKwordm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFy
Z3YpCit7CisgICAgLy8gRklYTUU6IEl0J3MgYmV0dGVyIGNhbGwgZ3RrX2luaXQoKSBvbmx5IHdo
ZW4gd2UgcnVuIHBsdWdpbiB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cDovL2dyb3Vwcy5nb29nbGUu
Y29tL2EvY2hyb21pdW0ub3JnL2dyb3VwL2Nocm9taXVtLWRldi9icm93c2VfdGhyZWFkL3RocmVh
ZC82MzNlYTE2N2NkZTE5NmNhIworI2lmIFVTRShHVEspCisgICAgZ3RrX2luaXQoYXJnYywgYXJn
dik7CisjZW5kaWYKKworI2lmICFPUyhBTkRST0lEKQorICAgIHNldHVwRm9udGNvbmZpZygpOwor
I2VuZGlmCit9CisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bFgxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsWDExLmNwcAkocmV2aXNpb24gMTE3NjA0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNTUgKzMxLDEy
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAKLSNpbmNs
dWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIndlYmtp
dC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0KLSNpZiAhT1MoQU5EUk9JRCkKICNpbmNsdWRl
IDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNlbmRpZgogCiAjaWYgVVNFKEdUSykKICNpbmNs
dWRlIDxndGsvZ3RrLmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLQotc3RhdGljIHZvaWQgQWxhcm1IYW5kbGVyKGludCkKLXsKLSAgICAvLyBJZiB0
aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5
IGJhZCBoYW5nLgotICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VUXG4iKTsKLSAgICBwdXRzKCIj
RU9GXG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBleGl0KDApOwotfQogCi12b2lkIFRl
c3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCi17Ci0gICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRp
bmcpOwotICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7Ci0KLSAgICAvLyBJbnN0YWxsIGFuIGFs
YXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxsIHVzIGlmIHdlIHRpbWUgb3V0LgotICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Ci0gICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxl
ciA9IEFsYXJtSGFuZGxlcjsKLSAgICBzaWdlbXB0eXNldCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7
Ci0gICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwotCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBv
bGRBY3Rpb247Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhbGFybUFjdGlvbiwgJm9sZEFjdGlv
bik7Ci0gICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAwMCk7Ci0K
LSAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsg
dGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgotICAgIHdo
aWxlIChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdl
TG9vcCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBhbGFybS4KLSAgICBhbGFybSgwKTsKLSAgICBz
aWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7Ci19Ci0KLSNpZiAhT1MoQU5EUk9JRCkK
IHN0YXRpYyBib29sIGNoZWNrQW5kTG9hZEZvbnRGaWxlKEZjQ29uZmlnKiBmb250Y2ZnLCBjb25z
dCBjaGFyKiBwYXRoMSwgY29uc3QgY2hhciogcGF0aDIpCiB7CiAgICAgY29uc3QgY2hhciogZm9u
dCA9IHBhdGgxOwpAQCAtMjA2LDcgKzE2Myw2IEBAIHN0YXRpYyB2b2lkIHNldHVwRm9udGNvbmZp
ZygpCiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogfQotI2VuZGlmIC8vICFPUyhBTkRST0lEKQog
CiB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKIHsKQEAgLTIxNiw4
ICsxNzIsNiBAQCB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJnCiAgICAg
Z3RrX2luaXQoYXJnYywgYXJndik7CiAjZW5kaWYKIAotI2lmICFPUyhBTkRST0lEKQogICAgIHNl
dHVwRm9udGNvbmZpZygpOwotI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQu
cHkJKHJldmlzaW9uIDExNzYzOSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4
LDE0IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKIGltcG9y
dCByZQogaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNobGV4CitpbXBvcnQgc2h1dGlsCitpbXBvcnQg
dGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
IGltcG9ydCBiYXNlCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJv
bWl1bQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQogCkBA
IC00NSwxMyArNDgsMTcgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogIyBU
aGlzIHBhdGggaXMgZGVmaW5lZCBpbiBiYXNlL2Jhc2VfcGF0aHNfYW5kcm9pZC5jYyBhbmQKICMg
d2Via2l0L3N1cHBvcnQvcGxhdGZvcm1fc3VwcG9ydF9hbmRyb2lkLmNjLgogREVWSUNFX1NPVVJD
RV9ST09UX0RJUiA9ICcvZGF0YS9sb2NhbC90bXAvJworQ09NTUFORF9MSU5FX0ZJTEUgPSBERVZJ
Q0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZS1uYXRpdmUtdGVzdHMtY29tbWFuZC1saW5lJwog
CisjIFRoZSBkaXJlY3RvcnkgdG8gcHV0IHRvb2xzIGFuZCByZXNvdXJjZXMgb2YgRHVtcFJlbmRl
clRyZWUuCiBERVZJQ0VfRFJUX0RJUiA9ICcvZGF0YS9kcnQvJwotREVWSUNFX0RSVF9QQVRIID0g
REVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUnCi1ERVZJQ0VfRFJUX1NUREVSUiA9IERF
VklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnN0ZGVycicKIERFVklDRV9GT1JXQVJERVJf
UEFUSCA9IERFVklDRV9EUlRfRElSICsgJ2ZvcndhcmRlcicKIERFVklDRV9EUlRfU1RBTVBfUEFU
SCA9IERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnN0YW1wJwogCitEUlRfQVBQX1BB
Q0tBR0UgPSAnb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0JworRFJUX0FDVElWSVRZX0ZVTExfTkFN
RSA9IERSVF9BUFBfUEFDS0FHRSArICcvLkNocm9tZU5hdGl2ZVRlc3RBY3Rpdml0eScKK0RSVF9B
UFBfRklMRV9ESVIgPSAnL2RhdGEvdXNlci8wLycgKyBEUlRfQVBQX1BBQ0tBR0UgKyAnL2ZpbGVz
LycKKwogIyBUaGlzIG9ubHkgd29ya3MgZm9yIHNpbmdsZSBjb3JlIGRldmljZXMgc28gZmFyLgog
IyBGSVhNRTogRmluZCBhIHNvbHV0aW9uIGZvciBtdWx0aS1jb3JlIGRldmljZXMuCiBTQ0FMSU5H
X0dPVkVSTk9SID0gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5n
X2dvdmVybm9yIgpAQCAtNjksNiArNzYsOSBAQCBGT1JXQVJEX1BPUlRTID0gJzgwMDAgODA4MCA4
NDQzIDg4ODAgOTMyCiAKIE1TX1RSVUVUWVBFX0ZPTlRTX0RJUiA9ICcvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvJwogCisjIFRpbWVvdXQgaW4gc2Vjb25kcyB0byB3YWl0
IGZvciBzdGFydC9zdG9wIG9mIER1bXBSZW5kZXJUcmVlLgorRFJUX1NUQVJUX1NUT1BfVElNRU9V
VF9TRUNTID0gMTAKKwogIyBMaXN0IG9mIGZvbnRzIHRoYXQgbGF5b3V0IHRlc3RzIGV4cGVjdCwg
Y29waWVkIGZyb20gRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RTaGVsbEd0ay5jcHAuCiBIT1NUX0ZP
TlRfRklMRVMgPSBbCiAgICAgW01TX1RSVUVUWVBFX0ZPTlRTX0RJUiwgJ0FyaWFsLnR0ZiddLApA
QCAtMTQ5LDYgKzE1OSw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hy
b20KICAgICAgICAgc2VsZi5fdmVyc2lvbiA9ICdpY2VjcmVhbXNhbmR3aWNoJwogICAgICAgICBz
ZWxmLl9vcmlnaW5hbF9nb3Zlcm5vciA9IE5vbmUKICAgICAgICAgc2VsZi5fYW5kcm9pZF9iYXNl
X2RpciA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVhZF9maWZvX3Byb2MgPSBOb25lCiAKICAgICAg
ICAgc2VsZi5faG9zdF9wb3J0ID0gZmFjdG9yeS5Qb3J0RmFjdG9yeShob3N0KS5nZXQoJ2Nocm9t
aXVtJywgKiprd2FyZ3MpCiAKQEAgLTE2NSwxNSArMTc2LDI0IEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICAgICAgcmV0dXJuIDEwICogMTAwMAogCiAgICAg
ZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAjIEN1cnJlbnRseSB3
ZSBvbmx5IHVzZSBvbmUgcHJvY2VzcywgYnV0IGl0IG1pZ2h0IGJlIGhlbHBmdWwgdG8gdXNlCi0g
ICAgICAgICMgbW9yZSB0aGF0IG9uZSBwcm9jZXNzIGluIHRoZSBmdXR1cmUgdG8gaW1wcm92ZSBw
ZXJmb3JtYW5jZS4KKyAgICAgICAgIyBCZWNhdXNlIG9mIHRoZSBuYXR1cmUgb2YgYXBrLCB3ZSBk
b24ndCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgcHJvY2Vzcy4KICAgICAgICAgcmV0dXJuIDEKIAog
ICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAgcmV0dXJuIG1hcChz
ZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VsZi5GQUxMQkFDS19QQVRIUykKIAorICAgIGRl
ZiBjaGVja193ZGlmZihzZWxmLCBsb2dnaW5nPVRydWUpOgorICAgICAgICByZXR1cm4gc2VsZi5f
aG9zdF9wb3J0LmNoZWNrX3dkaWZmKGxvZ2dpbmcpCisKICAgICBkZWYgY2hlY2tfYnVpbGQoc2Vs
ZiwgbmVlZHNfaHR0cCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ob3N0X3BvcnQuY2hlY2tfYnVp
bGQobmVlZHNfaHR0cCkKKyAgICAgICAgcmVzdWx0ID0gY2hyb21pdW0uQ2hyb21pdW1Qb3J0LmNo
ZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApCisgICAgICAgIHJlc3VsdCA9IHNlbGYuY2hlY2tf
d2RpZmYoKSBhbmQgcmVzdWx0CisgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBf
bG9nLmVycm9yKCdGb3IgY29tcGxldGUgQW5kcm9pZCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFz
ZSBzZWU6JykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICBfbG9nLmVy
cm9yKCcgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvQW5kcm9pZEJ1
aWxkSW5zdHJ1Y3Rpb25zJykKKworICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgY2hl
Y2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAgIGZvciAoZm9udF9kaXIsIGZv
bnRfZmlsZSkgaW4gSE9TVF9GT05UX0ZJTEVTOgpAQCAtMjAyLDExICsyMjIsMTQgQEAgY2xhc3Mg
Q2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbQogICAgICAgICBwYXNzCiAKICAgICBk
ZWYgc3RhcnRfaGVscGVyKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydy
b290J10pCiAgICAgICAgIHNlbGYuX3NldHVwX3BlcmZvcm1hbmNlKCkKICAgICAgICAgIyBSZXF1
aXJlZCBieSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpckZpbGVQYXRoKCkuCiAgICAg
ICAgICMgT3RoZXIgZGlyZWN0b3JpZXMgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkg
YWRiIHB1c2guCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGly
JywgJy1wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0VfU09VUkNFX1JP
T1RfRElSICsgJ2Nocm9tZSddKQorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hyb21lJ10pCisg
ICAgICAgICMgQWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCB0byBmdWxseSBhY2Nlc3MgdGhl
IGRpcmVjdG9yeS4KKyAgICAgICAgIyBUaGUgbmF0aXZlIGNvZGUgbmVlZHMgdGhlIHBlcm1pc3Np
b24gdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzIGhlcmUuCisgICAgICAgIHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVJd
KQogCiAgICAgICAgIHNlbGYuX3B1c2hfZXhlY3V0YWJsZSgpCiAgICAgICAgIHNlbGYuX3B1c2hf
Zm9udHMoKQpAQCAtMjIzLDEzICsyNDYsMTUgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChj
aHJvbWl1bS5DaHJvbQogICAgICAgICAjIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBkbyBubyBo
YXJtIHRvIHN1YnNlcXVlbnQgdGVzdHMuCiAgICAgICAgIHNlbGYuX3RlYXJkb3duX3BlcmZvcm1h
bmNlKCkKIAotICAgIGRlZiBza2lwcGVkX3Rlc3RzKHNlbGYsIHRlc3RfbGlzdCk6Ci0gICAgICAg
IHJldHVybiBiYXNlLlBvcnQuX3JlYWxfdGVzdHMoc2VsZiwgWworICAgIGRlZiBza2lwcGVkX2xh
eW91dF90ZXN0cyhzZWxmLCB0ZXN0X2xpc3QpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF90
ZXN0cyhbCiAgICAgICAgICAgICAjIENhbnZhcyB0ZXN0cyBhcmUgcnVuIGFzIHZpcnR1YWwgZ3B1
IHRlc3RzLgogICAgICAgICAgICAgJ2Zhc3QvY2FudmFzJywKICAgICAgICAgICAgICdjYW52YXMv
cGhpbGlwJywKICAgICAgICAgXSkKIAorICAgICMgT3ZlcnJpZGRlbiBwcml2YXRlIGZ1bmN0aW9u
cy4KKwogICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgogICAgICAgICByZXR1cm4g
c2VsZi5faG9zdF9wb3J0Ll9idWlsZF9wYXRoKCpjb21wcykKIApAQCAtMjQwLDEwICsyNjUsOSBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9tCiAgICAgICAgIHJldHVy
biBzZWxmLl9ob3N0X3BvcnQuX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKCkKIAogICAgIGRl
ZiBfcGF0aF90b19kcml2ZXIoc2VsZiwgY29uZmlndXJhdGlvbj1Ob25lKToKLSAgICAgICAgIyBS
ZXR1cm5zIHRoZSBob3N0IHBhdGggdG8gZHJpdmVyIHdoaWNoIHdpbGwgYmUgcHVzaGVkIHRvIHRo
ZSBkZXZpY2UuCiAgICAgICAgIGlmIG5vdCBjb25maWd1cmF0aW9uOgogICAgICAgICAgICAgY29u
ZmlndXJhdGlvbiA9IHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicpCi0gICAgICAgIHJl
dHVybiBzZWxmLl9idWlsZF9wYXRoKGNvbmZpZ3VyYXRpb24sICdEdW1wUmVuZGVyVHJlZScpCisg
ICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKGNvbmZpZ3VyYXRpb24sICdEdW1wUmVuZGVy
VHJlZV9hcGsvQ2hyb21lTmF0aXZlVGVzdHMtZGVidWcuYXBrJykKIAogICAgIGRlZiBfcGF0aF90
b19oZWxwZXIoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKHNlbGYuZ2V0
X29wdGlvbignY29uZmlndXJhdGlvbicpLCAnZm9yd2FyZGVyJykKQEAgLTI2OSwyMyArMjkzLDM1
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICBkZWYgX2Ry
aXZlcl9jbGFzcyhzZWxmKToKICAgICAgICAgcmV0dXJuIENocm9taXVtQW5kcm9pZERyaXZlcgog
CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4pOgorICAgICAgICBpZiBub3Qgc3Rkb3V0OgorICAgICAgICAgICAgc3Rkb3V0
ID0gJycKKyAgICAgICAgc3Rkb3V0ICs9ICcqKioqKioqKiogTG9nY2F0OlxuJyArIHNlbGYuX2dl
dF9sb2djYXQoKQorICAgICAgICBpZiBub3Qgc3RkZXJyOgorICAgICAgICAgICAgc3RkZXJyID0g
JycKKyAgICAgICAgc3RkZXJyICs9ICcqKioqKioqKiogVG9tYnN0b25lIGZpbGU6XG4nICsgc2Vs
Zi5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSgpCisgICAgICAgIHJldHVybiBjaHJvbWl1bS5DaHJvbWl1
bVBvcnQuX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3
ZXJfdGhhbikKKworICAgICMgTG9jYWwgcHJpdmF0ZSBmdW5jdGlvbnMuCisKICAgICBkZWYgX3B1
c2hfZXhlY3V0YWJsZShzZWxmKToKICAgICAgICAgZHJ0X2hvc3RfcGF0aCA9IHNlbGYuX3BhdGhf
dG9fZHJpdmVyKCkKICAgICAgICAgZm9yd2FyZGVyX2hvc3RfcGF0aCA9IHNlbGYuX3BhdGhfdG9f
aGVscGVyKCkKLSAgICAgICAgZHJ0X2phcl9ob3N0X3BhdGggPSBkcnRfaG9zdF9wYXRoICsgJy5q
YXInCiAgICAgICAgIGhvc3Rfc3RhbXAgPSBpbnQoZmxvYXQobWF4KG9zLnN0YXQoZHJ0X2hvc3Rf
cGF0aCkuc3RfbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0
YXQoZm9yd2FyZGVyX2hvc3RfcGF0aCkuc3RfbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9zLnN0YXQoZHJ0X2phcl9ob3N0X3BhdGgpLnN0X210aW1lKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQoZm9yd2FyZGVyX2hvc3RfcGF0
aCkuc3RfbXRpbWUpKSkKICAgICAgICAgZGV2aWNlX3N0YW1wID0gaW50KGZsb2F0KHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbCiAgICAgICAgICAgICAnc2hlbGwnLCAnY2F0ICVzIDI+L2Rldi9udWxs
IHx8IGVjaG8gMCcgJSBERVZJQ0VfRFJUX1NUQU1QX1BBVEhdKSkpCiAgICAgICAgIGlmIGRldmlj
ZV9zdGFtcCA8IGhvc3Rfc3RhbXA6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCdQdXNoaW5nIGV4
ZWN1dGFibGUnKQotICAgICAgICAgICAgc2VsZi5fa2lsbF9kZXZpY2VfcHJvY2VzcyhERVZJQ0Vf
Rk9SV0FSREVSX1BBVEgpCiAgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShmb3J3YXJk
ZXJfaG9zdF9wYXRoLCBERVZJQ0VfRk9SV0FSREVSX1BBVEgpCi0gICAgICAgICAgICBzZWxmLl9w
dXNoX3RvX2RldmljZShkcnRfaG9zdF9wYXRoLCBERVZJQ0VfRFJUX1BBVEgpCi0gICAgICAgICAg
ICBzZWxmLl9wdXNoX3RvX2RldmljZShkcnRfaG9zdF9wYXRoICsgJy5wYWsnLCBERVZJQ0VfRFJU
X1BBVEggKyAnLnBhaycpCi0gICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShkcnRfaG9z
dF9wYXRoICsgJ19yZXNvdXJjZXMnLCBERVZJQ0VfRFJUX1BBVEggKyAnX3Jlc291cmNlcycpCi0g
ICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShkcnRfamFyX2hvc3RfcGF0aCwgREVWSUNF
X0RSVF9QQVRIICsgJy5qYXInKQorICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
dW5pbnN0YWxsJywgRFJUX0FQUF9QQUNLQUdFXSkKKyAgICAgICAgICAgIGluc3RhbGxfcmVzdWx0
ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQorICAg
ICAgICAgICAgaWYgaW5zdGFsbF9yZXN1bHQuZmluZCgnU3VjY2VzcycpID09IC0xOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCAlcyBvbnRv
IGRldmljZTogJXMnICUgKGRydF9ob3N0X3BhdGgsIGluc3RhbGxfcmVzdWx0KSkKKyAgICAgICAg
ICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYuX2J1aWxkX3BhdGgoc2VsZi5nZXRfb3B0aW9u
KCdjb25maWd1cmF0aW9uJyksICdEdW1wUmVuZGVyVHJlZS5wYWsnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnBhaycp
CisgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9idWlsZF9wYXRoKHNlbGYu
Z2V0X29wdGlvbignY29uZmlndXJhdGlvbicpLCAnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0VfRFJUX0RJUiArICdEdW1w
UmVuZGVyVHJlZV9yZXNvdXJjZXMnKQogICAgICAgICAgICAgIyBWZXJzaW9uIGNvbnRyb2wgb2Yg
dGVzdCByZXNvdXJjZXMgaXMgZGVwZW5kZW50IG9uIGV4ZWN1dGFibGVzLAogICAgICAgICAgICAg
IyBiZWNhdXNlIHdlIHdpbGwgYWx3YXlzIHJlYnVpbGQgZXhlY3V0YWJsZXMgd2hlbiByZXNvdXJj
ZXMgYXJlCiAgICAgICAgICAgICAjIHVwZGF0ZWQuCkBAIC0zMjksMTEgKzM2NSwxNCBAQCBjbGFz
cyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9tCiAgICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8gJWQgPiAlc1ZFUlNJT04nICUgKHZlcnNpb24sIGRp
cildKQogCiAgICAgZGVmIF9ydW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9
RmFsc2UpOgorICAgICAgICBfbG9nLmRlYnVnKCdSdW4gYWRiIGNvbW1hbmQ6ICcgKyBzdHIoY21k
KSkKICAgICAgICAgaWYgaWdub3JlX2Vycm9yOgogICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9
IHNlbGYuX2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IKICAgICAgICAgZWxzZToKICAgICAgICAgICAg
IGVycm9yX2hhbmRsZXIgPSBOb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVu
X2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFu
ZGxlcikKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYu
X2FkYl9jb21tYW5kICsgY21kLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCisgICAgICAg
IF9sb2cuZGVidWcoJ1J1biBhZGIgcmVzdWx0OlxuJyArIHJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdAogCiAgICAgZGVmIF9jb3B5X2RldmljZV9maWxlKHNlbGYsIGZyb21fZmlsZSwgdG9f
ZmlsZSwgaWdub3JlX2Vycm9yPUZhbHNlKToKICAgICAgICAgIyAnY3AnIGlzIHVuYXZhaWxhYmxl
IG9uIEFuZHJvaWQsIHNvIHVzZSAnZGQnIGluc3RlYWQuCkBAIC0zNDUsMTcgKzM4NCw3IEBAIGNs
YXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICBkZWYgX3B1bGxfZnJv
bV9kZXZpY2Uoc2VsZiwgZGV2aWNlX3BhdGgsIGhvc3RfcGF0aCwgaWdub3JlX2Vycm9yPUZhbHNl
KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCBkZXZpY2Vf
cGF0aCwgaG9zdF9wYXRoXSwgaWdub3JlX2Vycm9yKQogCi0gICAgZGVmIF9raWxsX2RldmljZV9w
cm9jZXNzKHNlbGYsIG5hbWUpOgotICAgICAgICBwc19yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdwcyddKS5zcGxpdCgnXG4nKQotICAgICAgICBmb3IgbGluZSBpbiBw
c19yZXN1bHQ6Ci0gICAgICAgICAgICBpZiBsaW5lLmZpbmQobmFtZSkgPiAwOgotICAgICAgICAg
ICAgICAgIHBpZCA9IGxpbmUuc3BsaXQoKVsxXQotICAgICAgICAgICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2tpbGwnLCBwaWRdKQotCi0gICAgZGVmIGdldF9zdGRlcnIo
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdj
YXQnLCBERVZJQ0VfRFJUX1NUREVSUl0sIGlnbm9yZV9lcnJvcj1UcnVlKQotCi0gICAgZGVmIGdl
dF9sYXN0X3N0YWNrdHJhY2Uoc2VsZik6CisgICAgZGVmIF9nZXRfbGFzdF9zdGFja3RyYWNlKHNl
bGYpOgogICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnbHMnLCAnLW4nLCAnL2RhdGEvdG9tYnN0b25lcyddKQogICAgICAgICBpZiBub3QgdG9tYnN0
b25lcyBvciB0b21ic3RvbmVzLnN0YXJ0c3dpdGgoJy9kYXRhL3RvbWJzdG9uZXM6IE5vIHN1Y2gg
ZmlsZSBvciBkaXJlY3RvcnknKToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0RSVCBjcmFzaGVk
LCBidXQgbm8gdG9tYnN0b25lIGZvdW5kIScpCkBAIC0zNzYsNyArNDA1LDExIEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICAgICAgIyBVc2UgQW5kcm9pZCB0
b29sIHZlbmRvci9nb29nbGUvdG9vbHMvc3RhY2sgdG8gY29udmVydCB0aGUgcmF3CiAgICAgICAg
ICMgc3RhY2sgdHJhY2UgaW50byBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCwgaWYgbmVlZGVkLgog
ICAgICAgICAjIEl0IHRha2VzIGEgbG9uZyB0aW1lLCBzbyBkb24ndCBkbyBpdCBoZXJlLgotICAg
ICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9kYXRh
L3RvbWJzdG9uZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkKKyAgICAgICAgcmV0dXJuICclc1xu
JXMnICUgKCcgJy5qb2luKGxhc3RfdG9tYnN0b25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsICcvZGF0YS90b21ic3Rv
bmVzLycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQorCisgICAgZGVmIF9nZXRfbG9nY2F0KHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1kJ10p
CiAKICAgICBkZWYgX3NldHVwX3BlcmZvcm1hbmNlKHNlbGYpOgogICAgICAgICAjIERpc2FibGUg
Q1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFtIGNhY2hlIHRvIHJlZHVjZSBub2lzZSBpbiB0ZXN0cwpA
QCAtMzkxLDExOSArNDI0LDE2MiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVt
LkNocm9tCiAKIAogY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNocm9taXVt
RHJpdmVyKToKKyAgICAjIFRoZSBjb250cm9sbGVyIG1heSBzdGFydCBtdWx0aXBsZSBkcml2ZXJz
IGR1cmluZyB0ZXN0LCBidXQgZm9yIG5vdyB3ZQorICAgICMgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBs
ZSBBbmRyb2lkIGFjdGl2aXRpZXMsIHNvIG9ubHkgb25lIGRyaXZlciBjYW4gYmUKKyAgICAjIHN0
YXJ0ZWQgYXQgYSB0aW1lLgorICAgIF9zdGFydGVkX2RyaXZlciA9IE5vbmUKKwogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91
dD1GYWxzZSk6CiAgICAgICAgIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9faW5pdF9fKHNlbGYs
IHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQotICAgICAgICBz
ZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCA9IE5vbmUKLSAgICAgICAgc2VsZi5fZHJ0X3JldHVybl9w
YXJzZXIgPSByZS5jb21waWxlKCcjRFJUX1JFVFVSTiAoXGQrKScpCisgICAgICAgIHNlbGYuX2lu
X2ZpZm9fcGF0aCA9IERSVF9BUFBfRklMRV9ESVIgKyAnRHVtcFJlbmRlclRyZWUuaW4nCisgICAg
ICAgIHNlbGYuX291dF9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVfRElSICsgJ0R1bXBSZW5kZXJU
cmVlLm91dCcKKyAgICAgICAgc2VsZi5fZXJyX2ZpbGVfcGF0aCA9IERSVF9BUFBfRklMRV9ESVIg
KyAnRHVtcFJlbmRlclRyZWUuZXJyJworICAgICAgICBzZWxmLl9yZXN0YXJ0X2FmdGVyX2tpbGxl
ZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JlYWRfZmlmb19wcm9jID0gTm9uZQorCisgICAgZGVm
IF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29wdGlvbik6CisgICAgICAgICMgSWdub3Jl
IGNvbW1hbmQgd3JhcHBlciB3aGljaCBpcyBub3QgYXBwbGljYWJsZSBvbiBBbmRyb2lkLgorICAg
ICAgICByZXR1cm4gW10KKworICAgIGRlZiBjbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVy
X3Rlc3RfYXJncyk6CisgICAgICAgIG9yaWdpbmFsX2NtZCA9IGNocm9taXVtLkNocm9taXVtRHJp
dmVyLmNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQorICAgICAgICBj
bWQgPSBbXQorICAgICAgICBmb3IgcGFyYW0gaW4gb3JpZ2luYWxfY21kOgorICAgICAgICAgICAg
aWYgcGFyYW0uc3RhcnRzd2l0aCgnLS1waXhlbC10ZXN0cz0nKToKKyAgICAgICAgICAgICAgICBz
ZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCA9IERSVF9BUFBfRklMRV9ESVIgKyBzZWxmLl9wb3J0Lmhv
c3QuZmlsZXN5c3RlbS5iYXNlbmFtZShzZWxmLl9pbWFnZV9wYXRoKQorICAgICAgICAgICAgICAg
IHBhcmFtID0gJy0tcGl4ZWwtdGVzdHM9JyArIHNlbGYuX2RldmljZV9pbWFnZV9wYXRoCisgICAg
ICAgICAgICBjbWQuYXBwZW5kKHBhcmFtKQorCisgICAgICAgIGNtZC5hcHBlbmQoJy0taW4tZmlm
bz0nICsgc2VsZi5faW5fZmlmb19wYXRoKQorICAgICAgICBjbWQuYXBwZW5kKCctLW91dC1maWZv
PScgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQorICAgICAgICBjbWQuYXBwZW5kKCctLWVyci1maWxl
PScgKyBzZWxmLl9lcnJfZmlsZV9wYXRoKQorICAgICAgICByZXR1cm4gY21kCisKKyAgICBkZWYg
X2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CisgICAgICAgIGFz
c2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRoKCcvJykKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5z
dHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCisKKyAgICBkZWYgX3RpbWVvdXRfa2lsbGVyKHNlbGYs
IHBpZHMsIHN0b3BfZXZlbnQpOgorICAgICAgICB0aW1lLnNsZWVwKERSVF9TVEFSVF9TVE9QX1RJ
TUVPVVRfU0VDUykKKyAgICAgICAgaWYgbm90IHN0b3BfZXZlbnQuaXNfc2V0KCk6CisgICAgICAg
ICAgICBmb3IgaSBpbiBwaWRzOgorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuX2V4ZWN1dGl2
ZS5raWxsX3Byb2Nlc3MoaSkKIAogICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBl
cl90ZXN0X2FyZ3MpOgotICAgICAgICAjIENvbnZlcnQgdGhlIG9yaWdpbmFsIGNvbW1hbmQgbGlu
ZSBpbnRvIHRvIHR3byBwYXJ0czoKLSAgICAgICAgIyAtIHRoZSAnYWRiIHNoZWxsJyBjb21tYW5k
IGxpbmUgdG8gc3RhcnQgYW4gaW50ZXJhY3RpdmUgYWRiIHNoZWxsOwotICAgICAgICAjIC0gdGhl
IER1bXBSZW5kZXJUcmVlIGNvbW1hbmQgbGluZSB0byBzZW5kIHRvIHRoZSBhZGIgc2hlbGwuCi0g
ICAgICAgIG9yaWdpbmFsX2NtZCA9IHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0
X2FyZ3MpCi0gICAgICAgIHNoZWxsX2NtZCA9IFtdCi0gICAgICAgIGRydF9hcmdzID0gW10KLSAg
ICAgICAgcGF0aF90b19kcml2ZXIgPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpCi0gICAg
ICAgIHJlYWRpbmdfYXJnc19iZWZvcmVfZHJpdmVyID0gVHJ1ZQotICAgICAgICBmb3IgcGFyYW0g
aW4gb3JpZ2luYWxfY21kOgotICAgICAgICAgICAgaWYgcmVhZGluZ19hcmdzX2JlZm9yZV9kcml2
ZXI6Ci0gICAgICAgICAgICAgICAgaWYgcGFyYW0gPT0gcGF0aF90b19kcml2ZXI6Ci0gICAgICAg
ICAgICAgICAgICAgIHJlYWRpbmdfYXJnc19iZWZvcmVfZHJpdmVyID0gRmFsc2UKLSAgICAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzaGVsbF9jbWQuYXBwZW5kKHBhcmFt
KQorICAgICAgICBpZiBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyOgorICAg
ICAgICAgICAgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydGVkX2RyaXZlci5zdG9wKCkKKwor
ICAgICAgICBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyID0gc2VsZgorCisg
ICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQorICAg
ICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxm
LmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSArIFsnPicsIENPTU1BTkRfTElO
RV9GSUxFXSkKKyAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
YW0nLCAnc3RhcnQnLCAnLW4nLCBEUlRfQUNUSVZJVFlfRlVMTF9OQU1FXSkKKyAgICAgICAgc2Vj
b25kcyA9IDAKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShz
ZWxmLl9pbl9maWZvX3BhdGgpIG9yIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2Vs
Zi5fb3V0X2ZpZm9fcGF0aCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAg
ICBzZWNvbmRzICs9IDEKKyAgICAgICAgICAgIGlmIHNlY29uZHMgPT0gRFJUX1NUQVJUX1NUT1Bf
VElNRU9VVF9TRUNTOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFy
dCBEdW1wUmVuZGVyVHJlZUFwcGxpY2F0aW9uLiBMb2c6XG4nICsgc2VsZi5fcG9ydC5fZ2V0X2xv
Z2NhdCgpKQorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8g
c3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uJykKKworICAgICAgICBzaGVsbF9jbWQg
PSBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZCArIFsnc2hlbGwnXQorICAgICAgICBleGVjdXRpdmUg
PSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUKKyAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gc2Vu
ZCBjb21tYW5kIHRocm91Z2ggdGhlIGlucHV0IGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFw
cC4KKyAgICAgICAgIyBUaGlzIHByb2Nlc3MgbXVzdCBiZSBydW4gYXMgYW4gaW50ZXJhY3RpdmUg
YWRiIHNoZWxsIGJlY2F1c2UgdGhlIG5vcm1hbCBhZGIgc2hlbGwgZG9lc24ndCBzdXBwb3J0IHN0
ZGluLgorICAgICAgICBzZWxmLl9wcm9jID0gZXhlY3V0aXZlLnBvcGVuKHNoZWxsX2NtZCwgc3Rk
aW49ZXhlY3V0aXZlLlBJUEUsIHN0ZG91dD1leGVjdXRpdmUuUElQRSwgdW5pdmVyc2FsX25ld2xp
bmVzPVRydWUpCisgICAgICAgICMgUmVhZCBiYWNrIHRoZSBzaGVsbCBwcm9tcHQgdG8gZW5zdXJl
IGFkYiBzaGVsbCByZWFkeS4KKyAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoKQorICAgICAgICBf
bG9nLmRlYnVnKCdJbnRlcmFjdGl2ZSBzaGVsbCBzdGFydGVkJykKKworICAgICAgICAjIFN0YXJ0
IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIG91dHB1dCBmaWZvIG9mIHRoZSBEdW1wUmVuZGVy
VHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KKyAgICAgICAgX2xvZy5kZWJ1ZygnUmVkaXJl
Y3Rpbmcgc3Rkb3V0IHRvICcgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQorICAgICAgICBzZWxmLl9y
ZWFkX2ZpZm9fcHJvYyA9IGV4ZWN1dGl2ZS5wb3BlbihzaGVsbF9jbWQgKyBbJ2NhdCcsIHNlbGYu
X291dF9maWZvX3BhdGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQor
CisgICAgICAgIF9sb2cuZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZGluIHRvICcgKyBzZWxmLl9pbl9m
aWZvX3BhdGgpCisgICAgICAgIChsaW5lLCBjcmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5kX2Fu
ZF9yZWFkX2xpbmUoJ2NhdCA+JXNcbicgJSBzZWxmLl9pbl9maWZvX3BhdGgpCisKKyAgICAgICAg
IyBDb21iaW5lIHRoZSB0d28gdW5pZGlyZWN0aW9uYWwgcGlwZXMgaW50byBvbmUgYmlkaXJlY3Rp
b25hbCBwaXBlIHRvIG1ha2UgX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZSgpIGV0YworICAg
ICAgICAjIHdvcmsgd2l0aCBzZWxmLl9wcm9jLgorICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5j
bG9zZSgpCisgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0ID0gc2VsZi5fcmVhZF9maWZvX3Byb2Mu
c3Rkb3V0CisKKyAgICAgICAgIyBTdGFydCBhIHRocmVhZCB0byBraWxsIHRoZSBwaXBlIHJlYWRl
ciBhbmQgd3JpdGVyIHByb2Nlc3NlcyBvbiBkZWFkbG9jayBvZiB0aGUgZmlmb3MgZHVyaW5nIHN0
YXJ0dXAuCisgICAgICAgIHN0b3Bfa2lsbGVyX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAg
ICAgICAga2lsbGVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3RpbWVv
dXRfa2lsbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
PShbc2VsZi5fcHJvYy5waWQsIHNlbGYuX3JlYWRfZmlmb19wcm9jLnBpZF0sIHN0b3Bfa2lsbGVy
X2V2ZW50KSkKKyAgICAgICAga2lsbGVyX3RocmVhZC5zdGFydCgpCisKKyAgICAgICAgb3V0cHV0
ID0gJycKKyAgICAgICAgd2hpbGUgbm90IGNyYXNoIGFuZCBsaW5lLnJzdHJpcCgpICE9ICcjUkVB
RFknOgorICAgICAgICAgICAgaWYgbGluZSA9PSAnJzogICMgRU9GIG9yIGNyYXNoZWQKKyAgICAg
ICAgICAgICAgICBjcmFzaCA9IFRydWUKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgaWYgcGFyYW0uc3RhcnRzd2l0aCgnLS1waXhlbC10ZXN0cz0nKToKLSAgICAgICAgICAgICAg
ICAgICAgaWYgbm90IHNlbGYuX2RldmljZV9pbWFnZV9wYXRoOgotICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZGV2aWNlX2ltYWdlX3BhdGggPSBERVZJQ0VfRFJUX0RJUiArIHNlbGYuX3Bv
cnQuaG9zdC5maWxlc3lzdGVtLmJhc2VuYW1lKHNlbGYuX2ltYWdlX3BhdGgpCi0gICAgICAgICAg
ICAgICAgICAgIHBhcmFtID0gJy0tcGl4ZWwtdGVzdHM9JyArIHNlbGYuX2RldmljZV9pbWFnZV9w
YXRoCi0gICAgICAgICAgICAgICAgZHJ0X2FyZ3MuYXBwZW5kKHBhcmFtKQotCi0gICAgICAgIHNo
ZWxsX2NtZCArPSBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZAotICAgICAgICBzaGVsbF9jbWQuYXBw
ZW5kKCdzaGVsbCcpCi0gICAgICAgIHJldHJpZXMgPSAwCi0gICAgICAgIHdoaWxlIFRydWU6Ci0g
ICAgICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBhZGIgc2hlbGwgZm9yIER1bXBSZW5kZXJU
cmVlOiAnICsgJyAnLmpvaW4oc2hlbGxfY21kKSkKLSAgICAgICAgICAgIGV4ZWN1dGl2ZSA9IHNl
bGYuX3BvcnQuaG9zdC5leGVjdXRpdmUKLSAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBleGVjdXRp
dmUucG9wZW4oc2hlbGxfY21kLCBzdGRpbj1leGVjdXRpdmUuUElQRSwgc3Rkb3V0PWV4ZWN1dGl2
ZS5QSVBFLCBzdGRlcnI9ZXhlY3V0aXZlLlNURE9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVl
KQotICAgICAgICAgICAgIyBSZWFkIGJhY2sgdGhlIHNoZWxsIHByb21wdCB0byBlbnN1cmUgYWRi
IHNoZWxsIHJlYWR5LgotICAgICAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoKQotICAgICAgICAg
ICAgIyBTb21lIHRlc3RzIHJlbHkgb24gdGhpcyB0byBwcm9kdWNlIHByb3BlciBudW1iZXIgZm9y
bWF0IGV0Yy4sCi0gICAgICAgICAgICAjIGUuZy4gZmFzdC9zcGVlY2gvaW5wdXQtYXBwZWFyYW5j
ZS1udW1iZXJhbmRzcGVlY2guaHRtbC4KLSAgICAgICAgICAgIHNlbGYuX3dyaXRlX2NvbW1hbmRf
YW5kX3JlYWRfbGluZSgiZXhwb3J0IExDX0NUWVBFPSdlbl9VUydcbiIpCi0gICAgICAgICAgICBz
ZWxmLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoImV4cG9ydCBDTEFTU1BBVEg9Jy9kYXRh
L2RydC9EdW1wUmVuZGVyVHJlZS5qYXInXG4iKQotCi0gICAgICAgICAgICAjIFdoZW4gRHVtcFJl
bmRlclRyZWUgY3Jhc2hlcywgdGhlIEFuZHJvaWQgZGVidWdnZXJkIHdpbGwgc3RvcCB0aGUKLSAg
ICAgICAgICAgICMgcHJvY2VzcyBiZWZvcmUgZHVtcGluZyBzdGFjayB0byBsb2cvdG9tYnN0b25l
IGZpbGUgYW5kIHRlcm1pbmF0aW5nCi0gICAgICAgICAgICAjIHRoZSBwcm9jZXNzLiBTbGVlcCAx
IHNlY29uZCAobG9uZyBlbm91Z2ggZm9yIGRlYnVnZ2VyZCB0byBkdW1wCi0gICAgICAgICAgICAj
IHN0YWNrKSBiZWZvcmUgZXhpdGluZyB0aGUgc2hlbGwgdG8gZW5zdXJlIHRoZSBwcm9jZXNzIGhh
cyBxdWl0LAotICAgICAgICAgICAgIyBvdGhlcndpc2UgdGhlIGV4aXQgd2lsbCBmYWlsIGJlY2F1
c2UgIllvdSBoYXZlIHN0b3BwZWQgam9icyIuCi0gICAgICAgICAgICBkcnRfY21kID0gJyVzICVz
IDI+JXM7ZWNobyAiI0RSVF9SRVRVUk4gJD8iO3NsZWVwIDE7ZXhpdFxuJyAlIChERVZJQ0VfRFJU
X1BBVEgsICcgJy5qb2luKGRydF9hcmdzKSwgREVWSUNFX0RSVF9TVERFUlIpCi0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCdTdGFydGluZyBEdW1wUmVuZGVyVHJlZTogJyArIGRydF9jbWQpCi0KLSAg
ICAgICAgICAgICMgV2FpdCB1bnRpbCBEUlQgZWNob3MgJyNSRUFEWScuCi0gICAgICAgICAgICBv
dXRwdXQgPSAnJwotICAgICAgICAgICAgKGxpbmUsIGNyYXNoKSA9IHNlbGYuX3dyaXRlX2NvbW1h
bmRfYW5kX3JlYWRfbGluZShkcnRfY21kKQotICAgICAgICAgICAgd2hpbGUgbm90IGNyYXNoIGFu
ZCBsaW5lLnJzdHJpcCgpICE9ICcjUkVBRFknOgotICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0g
Jyc6ICAjIEVPRiBvciBjcmFzaGVkCi0gICAgICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQot
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBsaW5l
Ci0gICAgICAgICAgICAgICAgICAgIChsaW5lLCBjcmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5k
X2FuZF9yZWFkX2xpbmUoKQorICAgICAgICAgICAgICAgIG91dHB1dCArPSBsaW5lCisgICAgICAg
ICAgICAgICAgKGxpbmUsIGNyYXNoKSA9IHNlbGYuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGlu
ZSgpCiAKICAgICAgICAgICAgIGlmIGNyYXNoOgotICAgICAgICAgICAgICAgICMgU29tZXRpbWVz
IHRoZSBkZXZpY2UgaXMgaW4gdW5zdGFibGUgc3RhdGUgKG1heSBiZSBvdXQgb2YKLSAgICAgICAg
ICAgICAgICAjIG1lbW9yeT8pIGFuZCBraWxscyBEdW1wUmVuZGVyVHJlZSBqdXN0IGFmdGVyIGl0
IGlzIHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgIyBUcnkgdG8gc3RvcCBhbmQgc3RhcnQgaXQg
YWdhaW4uCi0gICAgICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBS
ZW5kZXJUcmVlOiBcbiVzXG4lc1xuJyAlIChvdXRwdXQsIHNlbGYuX3BvcnQuZ2V0X3N0ZGVycigp
KSkKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRl
clRyZWU6IFxuJXNcbkxvZzpcbiVzJyAlIChvdXRwdXQsIHNlbGYuX3BvcnQuX2dldF9sb2djYXQo
KSkpCiAgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKLSAgICAgICAgICAgICAgICByZXRyaWVz
ICs9IDEKLSAgICAgICAgICAgICAgICBpZiByZXRyaWVzID4gMjoKLSAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCBtdWx0aXBsZSB0aW1lcyB0byBzdGFydCBE
dW1wUmVuZGVyVHJlZScpCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0Zh
aWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbicpCiAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICMgU3RhcnR1cCBzdWNjZWVkZWQuCisgICAgICAgICAgICAg
ICAgc3RvcF9raWxsZXJfZXZlbnQuc2V0KCkKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAg
IGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpOgogICAgICAgICBkcml2ZXJfb3V0cHV0
ID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIucnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0KQot
Ci0gICAgICAgIGRydF9yZXR1cm4gPSBzZWxmLl9nZXRfZHJ0X3JldHVybl92YWx1ZShkcml2ZXJf
b3V0cHV0LmVycm9yKQotICAgICAgICBpZiBkcnRfcmV0dXJuIGlzIG5vdCBOb25lOgotICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnRHVtcFJlbmRlclRyZWUgcmV0dXJuIHZhbHVlOiAlZCcgJSBkcnRf
cmV0dXJuKQotICAgICAgICAjIEZJWE1FOiBSZXRyaWV2ZSBzdGRlcnIgZnJvbSB0aGUgdGFyZ2V0
LgogICAgICAgICBpZiBkcml2ZXJfb3V0cHV0LmNyYXNoOgotICAgICAgICAgICAgIyBXaGVuIEFu
ZHJvaWQgaXMgT09NLCBpdCBzZW5kcyBhIFNJR0tJTEwgc2lnbmFsIHRvIERSVC4gRFJUCi0gICAg
ICAgICAgICAjIGlzIHN0b3BwZWQgc2lsZW50bHkgYW5kIHJlZ2FyZGVkIGFzIGNyYXNoZWQuIFJl
LXJ1biB0aGUgdGVzdCBmb3IKKyAgICAgICAgICAgICMgV2hlbiBBbmRyb2lkIGlzIE9PTSwgRFJU
IHByb2Nlc3MgbWF5IGJlIGtpbGxlZCBieSBBY3Rpdml0eU1hbmFnZXIgb3Igc3lzdGVtIE9PTS4K
KyAgICAgICAgICAgICMgSXQgbG9va3MgbGlrZSBhIGNyYXNoIGJ1dCB0aGVyZSBpcyBubyBmYXRh
bCBzaWduYWwgbG9nZ2VkLiBSZS1ydW4gdGhlIHRlc3QgZm9yCiAgICAgICAgICAgICAjIHN1Y2gg
Y3Jhc2guCi0gICAgICAgICAgICBpZiBkcnRfcmV0dXJuID09IDEyOCArIHNpZ25hbC5TSUdLSUxM
OgorICAgICAgICAgICAgIyBUbyB0ZXN0OiBhZGIgc2hlbGwgYW0gZm9yY2Utc3RvcCBvcmcuY2hy
b21pdW0ubmF0aXZlX3Rlc3QsCisgICAgICAgICAgICAjIG9yIGtpbGwgLTExIHBpZCB0d2ljZSBv
ciB0aHJlZSB0aW1lcyB0byBzaW11bGF0ZSBhIGZhdGFsIGNyYXNoLgorICAgICAgICAgICAgaWYg
c2VsZi5fcG9ydC5fZ2V0X2xvZ2NhdCgpLmZpbmQoJ0ZhdGFsIHNpZ25hbCcpID09IC0xOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWZ0ZXJfa2lsbGVkID0gVHJ1ZQogICAgICAgICAg
ICAgICAgIHNlbGYuX3BvcnQuX2RydF9yZXRyeV9hZnRlcl9raWxsZWQgKz0gMQogICAgICAgICAg
ICAgICAgIGlmIHNlbGYuX3BvcnQuX2RydF9yZXRyeV9hZnRlcl9raWxsZWQgPiAxMDoKICAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtp
bGxlZCBieSBBbmRyb2lkIGZvciB0b28gbWFueSB0aW1lcyEnKQotICAgICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtpbGxlZCBieSBTSUdLSUxMLiBSZXRyeSB0aGUg
dGVzdCAoJWQpLicgJSBzZWxmLl9wb3J0Ll9kcnRfcmV0cnlfYWZ0ZXJfa2lsbGVkKQorICAgICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtpbGxlZCBieSBzeXN0ZW0g
KCVkKS4nICUgc2VsZi5fcG9ydC5fZHJ0X3JldHJ5X2FmdGVyX2tpbGxlZCkKICAgICAgICAgICAg
ICAgICBzZWxmLnN0b3AoKQogICAgICAgICAgICAgICAgICMgU2xlZXAgMTAgc2Vjb25kcyB0byBs
ZXQgc3lzdGVtIHJlY292ZXIuCiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5fdGVzdChkcml2ZXJfaW5wdXQpCi0gICAgICAgICAg
ICAjIEZldGNoIHRoZSBzdGFjayB0cmFjZSBmcm9tIHRoZSB0b21ic3RvbmUgZmlsZS4KLSAgICAg
ICAgICAgICMgRklYTUU6IHNvbWV0aW1lcyB0aGUgY3Jhc2ggZG9lc24ndCByZWFsbHkgaGFwcGVu
IHNvIHRoYXQgbm8KLSAgICAgICAgICAgICMgdG9tYnN0b25lIGlzIGdlbmVyYXRlZC4gSW4gdGhh
dCBjYXNlIHdlIGZldGNoIHRoZSB3cm9uZyBzdGFjawotICAgICAgICAgICAgIyB0cmFjZS4KLSAg
ICAgICAgICAgIGRyaXZlcl9vdXRwdXQuZXJyb3IgKz0gc2VsZi5fcG9ydC5nZXRfbGFzdF9zdGFj
a3RyYWNlKCkuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKQotICAgICAgICAgICAgZHJpdmVyX291
dHB1dC5lcnJvciArPSBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydsb2djYXQnLCAnLWQn
XSkuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKQorCisgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWZ0
ZXJfa2lsbGVkID0gRmFsc2UKKyAgICAgICAgZHJpdmVyX291dHB1dC5lcnJvciArPSBzZWxmLl9n
ZXRfc3RkZXJyKCkKICAgICAgICAgcmV0dXJuIGRyaXZlcl9vdXRwdXQKIAogICAgIGRlZiBzdG9w
KHNlbGYpOgotICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBEdW1wUmVuZGVyVHJlZScpCisg
ICAgICAgIGlmIENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRlZF9kcml2ZXIgIT0gc2VsZiBv
ciBub3Qgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyID0gTm9uZQorCisgICAgICAgIHNlbGYuX3BvcnQu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BB
Q0tBR0VdKQorICAgICAgICBzZWNvbmRzID0gMAorICAgICAgICB3aGlsZSBzZWxmLl9maWxlX2V4
aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBvciBzZWxmLl9maWxlX2V4aXN0c19v
bl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDEp
CisgICAgICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScs
IHNlbGYuX2luX2ZpZm9fcGF0aF0pCisgICAgICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdybScsIHNlbGYuX291dF9maWZvX3BhdGhdKQorICAgICAgICAgICAg
c2Vjb25kcyArPSAxCisgICAgICAgICAgICBpZiBzZWNvbmRzID09IERSVF9TVEFSVF9TVE9QX1RJ
TUVPVVRfU0VDUzoKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRmFpbGVk
IHRvIHJlbW92ZSBmaWZvIGZpbGVzLiBNYXkgYmUgbG9ja2VkLicpCisKKyAgICAgICAgaWYgc2Vs
Zi5fcmVhZF9maWZvX3Byb2M6CisgICAgICAgICAgICBzZWxmLl9wb3J0Ll9leGVjdXRpdmUua2ls
bF9wcm9jZXNzKHNlbGYuX3JlYWRfZmlmb19wcm9jLnBpZCkKKyAgICAgICAgICAgIHNlbGYuX3Jl
YWRfZmlmb19wcm9jID0gTm9uZQorCisgICAgICAgICMgSGVyZSBkdXBsaWNhdGUgc29tZSBsb2dp
YyBpbiBDaHJvbWl1bURyaXZlci5zdG9wKCkgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGl0
LAorICAgICAgICAjIGJlY2F1c2Ugb3VyIER1bXBSZW5kZXJUcmVlIGFwcCBwcm9jZXNzIHdvbid0
IHF1aXQgYnkgaXRzZWxmIG9uIGNsb3NlIG9mIHRoZSBwaXBlcy4KICAgICAgICAgaWYgc2VsZi5f
cHJvYzoKLSAgICAgICAgICAgICMgU2VuZCBhbiBleHBsaWNpdCBRVUlUIGNvbW1hbmQgYmVjYXVz
ZSBjbG9zaW5nIHRoZSBwaXBlIGNhbid0IGxldAotICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJl
ZSBvbiBBbmRyb2lkIHF1aXQgaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0ZSgnUVVJVFxuJykKLSAgICAgICAgICAgIGV4
Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgICMgVGhlIHBpcGUgaGFzIGFscmVhZHkgYmVl
biBjbG9zZWQsIGluZGljYXRpbmcgYWJub3JtYWwKLSAgICAgICAgICAgICAgICAjIHNpdHVhdGlv
biBvY2N1cnJlZC4gV2FpdCBhIHdoaWxlIHRvIGFsbG93IHRoZSBkZXZpY2UgdG8KLSAgICAgICAg
ICAgICAgICAjIHJlY292ZXIuICpmaW5nZXJzIGNyb3NzZWQqCi0gICAgICAgICAgICAgICAgdGlt
ZS5zbGVlcCgxKQotICAgICAgICBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5zdG9wKHNlbGYpCisg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3By
b2Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYu
X3BvcnQuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcHJvYy5waWQpCisgICAgICAgICAg
ICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9wcm9jLndhaXQoKQorICAgICAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKIAogICAgIGRlZiBf
dGVzdF9zaGVsbF9jb21tYW5kKHNlbGYsIHVyaSwgdGltZW91dF9tcywgY2hlY2tzdW0pOgogICAg
ICAgICBpZiB1cmkuc3RhcnRzd2l0aCgnZmlsZTovLy8nKToKQEAgLTUxNywzMCArNTkzLDI1IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihjaHJvbWl1bS5DaHIKICAgICBkZWYgX3dyaXRl
X2NvbW1hbmRfYW5kX3JlYWRfbGluZShzZWxmLCBpbnB1dD1Ob25lKToKICAgICAgICAgKGxpbmUs
IGNyYXNoKSA9IGNocm9taXVtLkNocm9taXVtRHJpdmVyLl93cml0ZV9jb21tYW5kX2FuZF9yZWFk
X2xpbmUoc2VsZiwgaW5wdXQpCiAgICAgICAgIHVybF9tYXJrZXIgPSAnI1VSTDonCi0gICAgICAg
IGlmIG5vdCBjcmFzaCBhbmQgbGluZS5zdGFydHN3aXRoKHVybF9tYXJrZXIpIGFuZCBsaW5lLmZp
bmQoRklMRV9URVNUX1VSSV9QUkVGSVgpID09IGxlbih1cmxfbWFya2VyKToKLSAgICAgICAgICAg
ICMgQ29udmVydCB0aGUgZGV2aWNlIHRlc3QgdXJpIGJhY2sgdG8gaG9zdCB1cmkgb3RoZXJ3aXNl
Ci0gICAgICAgICAgICAjIGNocm9taXVtLkNocm9taXVtRHJpdmVyLnJ1bl90ZXN0KCkgd2lsbCBj
b21wbGFpbi4KLSAgICAgICAgICAgIGxpbmUgPSAnI1VSTDpmaWxlOi8vJXMvJXMnICUgKHNlbGYu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBsaW5lW2xlbih1cmxfbWFya2VyKSArIGxlbihGSUxF
X1RFU1RfVVJJX1BSRUZJWCk6XSkKLSAgICAgICAgaWYgbm90IGNyYXNoIGFuZCBzZWxmLl9oYXNf
Y3Jhc2hfaGludChsaW5lKToKLSAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQorICAgICAgICBpZiBu
b3QgY3Jhc2g6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgodXJsX21hcmtlcikgYW5k
IGxpbmUuZmluZChGSUxFX1RFU1RfVVJJX1BSRUZJWCkgPT0gbGVuKHVybF9tYXJrZXIpOgorICAg
ICAgICAgICAgICAgICMgQ29udmVydCB0aGUgZGV2aWNlIHRlc3QgdXJpIGJhY2sgdG8gaG9zdCB1
cmkgb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgIyBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5y
dW5fdGVzdCgpIHdpbGwgY29tcGxhaW4uCisgICAgICAgICAgICAgICAgbGluZSA9ICcjVVJMOmZp
bGU6Ly8lcy8lcycgJSAoc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIGxpbmVbbGVuKHVy
bF9tYXJrZXIpICsgbGVuKEZJTEVfVEVTVF9VUklfUFJFRklYKTpdKQorICAgICAgICAgICAgIyBj
aHJvbWl1bS5weSB1c2VzICJsaW5lID09ICcnIGFuZCBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3Qg
Tm9uZSIgdG8gZGV0ZWN0IGNyYXNoLAorICAgICAgICAgICAgIyBidXQgd2UgaGF2ZSBldmVyIHNl
ZW4gImxpbmUgPT0gJycgYW5kIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUiIHdoZW4gdGhlIGFw
cCBjcmFzaGVzLgorICAgICAgICAgICAgaWYgbGluZSA9PSAnJzoKKyAgICAgICAgICAgICAgICBj
cmFzaCA9IFRydWUKICAgICAgICAgcmV0dXJuIChsaW5lLCBjcmFzaCkKIAogICAgIGRlZiBfb3V0
cHV0X2ltYWdlKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoOgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygncHVsbGluZyBmcm9tIGRldmljZTogJXMgdG8gJXMnICUgKHNlbGYuX2Rl
dmljZV9pbWFnZV9wYXRoLCBzZWxmLl9pbWFnZV9wYXRoKSkKKyAgICAgICAgICAgIF9sb2cuZGVi
dWcoJ1B1bGxpbmcgZnJvbSBkZXZpY2U6ICVzIHRvICVzJyAlIChzZWxmLl9kZXZpY2VfaW1hZ2Vf
cGF0aCwgc2VsZi5faW1hZ2VfcGF0aCkpCiAgICAgICAgICAgICBzZWxmLl9wb3J0Ll9wdWxsX2Zy
b21fZGV2aWNlKHNlbGYuX2RldmljZV9pbWFnZV9wYXRoLCBzZWxmLl9pbWFnZV9wYXRoLCBpZ25v
cmVfZXJyb3I9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9v
dXRwdXRfaW1hZ2Uoc2VsZikKIAotICAgIGRlZiBfaGFzX2NyYXNoX2hpbnQoc2VsZiwgbGluZSk6
Ci0gICAgICAgICMgV2hlbiBEUlQgY3Jhc2hlcywgaXQgc2VuZHMgYSBzaWduYWwgdG8gQW5kcm9p
ZCBEZWJ1Z2dlcmQsIGxpa2UKLSAgICAgICAgIyBTSUdTRUdWLCBTSUdGUEUsIGV0Yy4gV2hlbiBE
ZWJ1Z2dlcmQgcmVjZWl2ZXMgdGhlIHNpZ25hbCwgaXQgc3RvcHMgRFJUCi0gICAgICAgICMgKHdo
aWNoIGNhdXNlcyBTaGVsbCB0byBvdXRwdXQgYSBtZXNzYWdlKSwgYW5kIGR1bXBzIHRoZSBzdGFj
ayBzdHJhY2UuCi0gICAgICAgICMgV2UgdXNlIHRoZSBTaGVsbCBvdXRwdXQgYXMgYSBjcmFzaCBo
aW50LgotICAgICAgICByZXR1cm4gbGluZSBpcyBub3QgTm9uZSBhbmQgbGluZS5maW5kKCdbMV0g
KyBTdG9wcGVkIChzaWduYWwpJykgPj0gMAotCi0gICAgZGVmIF9nZXRfZHJ0X3JldHVybl92YWx1
ZShzZWxmLCBlcnJvcik6Ci0gICAgICAgIHJldHVybl9tYXRjaCA9IHNlbGYuX2RydF9yZXR1cm5f
cGFyc2VyLnNlYXJjaChlcnJvcikKLSAgICAgICAgcmV0dXJuIE5vbmUgaWYgKHJldHVybl9tYXRj
aCBpcyBOb25lKSBlbHNlIGludChyZXR1cm5fbWF0Y2guZ3JvdXAoMSkpCisgICAgZGVmIF9nZXRf
c3RkZXJyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJyX2ZpbGVfcGF0aF0sIGlnbm9yZV9lcnJvcj1UcnVl
KQogCiAgICAgZGVmIF9yZWFkX3Byb21wdChzZWxmKToKICAgICAgICAgbGFzdF9jaGFyID0gJycK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142806</attachid>
            <date>2012-05-18 15:50:17 -0700</date>
            <delta_ts>2012-05-18 16:40:31 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>86862</filename>
            <type>text/plain</type>
            <size>65322</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExNzYzOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDEyLTA1LTE4ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBh
cyBhbiBhcGsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg2ODYyCisKKyAgICAgICAgY2hyb21pdW1fYW5kcm9pZC5weSBpcyBtb2RpZmllZCB0byBzdXBw
b3J0IHJ1bm5pbmcgRHVtcFJlbmRlclRyZWUgYXMKKyAgICAgICAgYW4gYXBrLCBzbyB0aGF0IHdl
IGNhbiBydW4gdGhlIHRlc3RzIChlLmcuIHZpZGVvKSByZXF1aXJpbmcgZmVhdHVyZXMKKyAgICAg
ICAgaW1wbGVtZW50ZWQgaW4gSmF2YSBvbiBBbmRyb2lkLgorCisgICAgICAgIEJUVyBzcGxpdCBU
ZXN0U2hlbGxMaW51eC5jcHAgaW50byBUZXN0U2hlbGxQb3NpeC5jcHAgYW5kCisgICAgICAgIFRl
c3RTaGVsbFgxMS5jcHAuIFRlc3RTaGVsbFBvc2l4LmNwcCBhbmQgVGVzdFNoZWxsQW5kcm9pZC5j
cHAgYXJlCisgICAgICAgIGNvbXBpbGVkIGZvciBBbmRyb2lkLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5neXBpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbEFuZHJvaWQuY3BwOiBBZGRlZC4gRGlyZWN0cyBzdGRpbi9zdGRvdXQvc3RkZXJyIHRv
IGZpZm9zIGFuZCBmaWxlcy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxHdGsuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bExpbnV4LmNwcDogUmVtb3ZlZC4gU3BsaXQgaW50byBUZXN0U2hlbGxYMTEuY3BwIGFuZCBUZXN0
U2hlbGxQb3NpeC5jcHAuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsUG9zaXguY3BwOiBUaGUgcG9zaXggcGFydCAodXNlZCBvbiBMaW51eCBhbmQgQW5kcm9pZCkg
b2YgdGhlIG9yaWdpbmFsIFRlc3RTaGVsbExpbnV4LmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwOiBUaGUgWDExIChmb250Y29uZmlnKSBwYXJ0
IG9mIHRoZSBvcmlnaW5hbCBUZXN0U2hlbGxMaW51eC5jcHAuCisgICAgICAgIChzZXR1cEZvbnRj
b25maWcpOgorICAgICAgICAocGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQucHk6CisgICAgICAgIChDaHJv
bWl1bUFuZHJvaWRQb3J0Ll9faW5pdF9fKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQu
ZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkUG9ydC5j
aGVja193ZGlmZik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0LmNoZWNrX2J1aWxkKToK
KyAgICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuc3RhcnRfaGVscGVyKToKKyAgICAgICAgKENo
cm9taXVtQW5kcm9pZFBvcnQuc2tpcHBlZF9sYXlvdXRfdGVzdHMpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkUG9ydCk6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9wYXRoX3RvX2Ry
aXZlcik6CisgICAgICAgIChDaHJvbWl1bUFuZHJvaWRQb3J0Ll9nZXRfY3Jhc2hfbG9nKToKKyAg
ICAgICAgKENocm9taXVtQW5kcm9pZFBvcnQuX3B1c2hfZXhlY3V0YWJsZSk6CisgICAgICAgIChD
aHJvbWl1bUFuZHJvaWRQb3J0Ll9ydW5fYWRiX2NvbW1hbmQpOgorICAgICAgICAoQ2hyb21pdW1B
bmRyb2lkUG9ydC5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSk6CisgICAgICAgIChDaHJvbWl1bUFuZHJv
aWRQb3J0Ll9nZXRfbG9nY2F0KToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlcik6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIuX19pbml0X18pOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLl9jb21tYW5kX3dyYXBwZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRy
b2lkRHJpdmVyLmNtZF9saW5lKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fZmls
ZV9leGlzdHNfb25fZGV2aWNlKToKKyAgICAgICAgKENocm9taXVtQW5kcm9pZERyaXZlci5fdGlt
ZW91dF9raWxsZXIpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydCk6Cisg
ICAgICAgIChDaHJvbWl1bUFuZHJvaWREcml2ZXIucnVuX3Rlc3QpOgorICAgICAgICAoQ2hyb21p
dW1BbmRyb2lkRHJpdmVyLnN0b3ApOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl93
cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJp
dmVyLl9vdXRwdXRfaW1hZ2UpOgorICAgICAgICAoQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9nZXRf
c3RkZXJyKToKKwogMjAxMi0wNS0xOCAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28u
c2FudG9zQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBCdWlsZGJvdCBvdXRwdXQgZG9lcyBu
b3QgcHJpbnQgcmVzdWx0IHN0YXRzIGFueW1vcmUKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUuZ3lwaQkocmV2aXNpb24gMTE3NjM5KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEy
IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmgnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RTaGVsbC5oJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5j
cHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1
bS9UZXN0U2hlbGxNYWMubW0nLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4
LmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsV2luLmNwcCcsCisgICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0v
VGVzdFdlYlBsdWdpbi5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4u
aCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGV4dElucHV0Q29udHJvbGxlci5jcHAnLApJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVl
Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXAvRHVtcFJlbmRlclRyZWUuZ3lwCShyZXZpc2lvbiAxMTc2MzkpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCwxMSArNzgsMTUgQEAKICAgICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUn
LAogICAgICAgICAgICAgJ21hY19idW5kbGUnOiAxLAogICAgICAgICAgICAgJ2RlcGVuZGVuY2ll
cyc6IFsKKyAgICAgICAgICAgICAgICAnSW1hZ2VEaWZmJywKKyAgICAgICAgICAgICAgICAnVGVz
dE5ldHNjYXBlUGx1Z0luJywKKyAgICAgICAgICAgICAgICAnY29weV9UZXN0TmV0c2NhcGVQbHVn
SW4nLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwOmluc3BlY3Rvcl9yZXNvdXJjZXMnLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9k
aXIpL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwOndlYmtpdCcsCiAgICAgICAgICAgICAgICAg
Jzwoc291cmNlX2RpcikvV1RGL1dURi5neXAvV1RGLmd5cDp3dGYnLAogICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xl
dXJsJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9p
Y3UvaWN1Lmd5cDppY3V1YycsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
dGhpcmRfcGFydHkvbWVzYS9tZXNhLmd5cDpvc21lc2EnLAogICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL3Y4L3Rvb2xzL2d5cC92OC5neXA6djgnLAogICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAog
ICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3dlYmtpdC9zdXBwb3J0L3dlYmtp
dF9zdXBwb3J0Lmd5cDpibG9iJywKQEAgLTE4Nyw2ICsxOTEsMTEgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdNYWNcXC5jcHAkJ10sCiAgICAgICAgICAgICAgICAgICAg
IF0sCiAgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgWydvc19wb3NpeCE9MSBv
ciBPUz09Im1hYyInLCB7CisgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdQb3NpeFxcLmNwcCQnXSwKKyAgICAgICAg
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ3Vz
ZV94MTEgPT0gMScsIHsKICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAg
ICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxkL2xpbnV4L3N5
c3RlbS5neXA6Zm9udGNvbmZpZycsCkBAIC0yMTIsNyArMjIxLDcgQEAKICAgICAgICAgICAgICAg
ICAgICAgXSwKICAgICAgICAgICAgICAgICB9LHsgIyB1c2VfeDExICE9IDEKICAgICAgICAgICAg
ICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRl
JywgJ0xpbnV4XFwuY3BwJCddCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
WDExXFwuY3BwJCddLAogICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgfV0s
CiAgICAgICAgICAgICAgICAgWyd0b29sa2l0X3VzZXNfZ3RrID09IDEnLCB7CkBAIC0yMzEsMjEg
KzI0MCwzMCBAQAogICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgfV0sCiAg
ICAgICAgICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgeworICAgICAgICAgICAgICAgICAgICAn
dHlwZSc6ICdzaGFyZWRfbGlicmFyeScsCiAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNp
ZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnSW1hZ2VEaWZmI2hvc3QnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0
X3N1cHBvcnRfYmFzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNf
ZGlyKS90b29scy9hbmRyb2lkL2ZvcndhcmRlci9mb3J3YXJkZXIuZ3lwOmZvcndhcmRlcicsCisg
ICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJv
aWQvbmF0aXZlX3Rlc3QuZ3lwOm5hdGl2ZV90ZXN0X25hdGl2ZV9jb2RlJywKICAgICAgICAgICAg
ICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAg
ICAgICAgICAgICAgICAgWydpbmNsdWRlJywgJ2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4XFwuY3Bw
JCddLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0seyAjIE9TIT0i
YW5kcm9pZCIKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAg
ICAgICAgICAgICAgWydleGNsdWRlJywgJyhBbmRyb2lkKVxcLmNwcCQnXQotICAgICAgICAgICAg
ICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAg
ICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzISc6IFsKICAgICAgICAgICAgICAgICAgICAgICAg
ICdJbWFnZURpZmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3ROZXRzY2FwZVBsdWdJ
bicsCiAgICAgICAgICAgICAgICAgICAgICAgICAnY29weV9UZXN0TmV0c2NhcGVQbHVnSW4nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkv
bWVzYS9tZXNhLmd5cDpvc21lc2EnLAogICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgICAgICAgICAnY29waWVzJzogW3sKKyAgICAgICAgICAgICAgICAgICAgICAgICdkZXN0aW5h
dGlvbic6ICc8KFBST0RVQ1RfRElSKScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZXMn
OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYWhlbV9wYXRoKScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvcmVwYWNrL0R1bXBSZW5k
ZXJUcmVlLnBhaycsCisgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAg
ICAgIH1dLAorICAgICAgICAgICAgICAgIH0sIHsgIyBPUyE9ImFuZHJvaWQiCisgICAgICAgICAg
ICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVk
ZScsICdBbmRyb2lkXFwuY3BwJCddLAorICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAg
ICAgICAgIH1dLAogICAgICAgICAgICAgICAgIFsnaW5zaWRlX2Nocm9taXVtX2J1aWxkPT0xIGFu
ZCBjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7CiAgICAgICAgICAgICAgICAgICAgICdz
b3VyY2VzJzogWwpAQCAtMzgzLDUgKzQwMSw0MyBAQAogICAgICAgICAgICAgICAgICdjZmxhZ3Nf
Y2MnOiBbJy1Xbm8tYysrMHgtY29tcGF0J10sCiAgICAgICAgICAgICB9LAogICAgICAgICB9XSwK
KyAgICAgICAgWydPUz09ImFuZHJvaWQiJywgeworICAgICAgICAgICAgIyBXcmFwIGxpYkR1bXBS
ZW5kZXJUcmVlLnNvIGludG8gYW4gYW5kcm9pZCBhcGsgZm9yIGV4ZWN1dGlvbi4KKyAgICAgICAg
ICAgICMgU2VlIDwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cCBmb3IgVE9ETyhqcmcp
cyBhYm91dCB0aGlzIHN0cmF0ZWd5LgorICAgICAgICAgICAgJ3RhcmdldHMnOiBbeworICAgICAg
ICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdEdW1wUmVuZGVyVHJlZV9hcGsnLAorICAgICAgICAg
ICAgICAgICd0eXBlJzogJ25vbmUnLAorICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBb
CisgICAgICAgICAgICAgICAgICAgICdEdW1wUmVuZGVyVHJlZScsCisgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgICAnYWN0aW9ucyc6IFt7CisgICAgICAgICAgICAgICAgICAgICMg
R2VuZXJhdGUgYXBrIGZpbGVzIChpbmNsdWRpbmcgc291cmNlIGFuZCBhbnRmaWxlKSBmcm9tCisg
ICAgICAgICAgICAgICAgICAgICMgYSB0ZW1wbGF0ZSwgYW5kIGJ1aWxkcyB0aGVtLgorICAgICAg
ICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVfYW5kX2J1aWxkJywKKyAgICAg
ICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5kcm9pZC9nZW5lcmF0ZV9uYXRpdmVfdGVzdC5weScs
CisgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvbGliLnRhcmdldC9saWJE
dW1wUmVuZGVyVHJlZS5zbycsCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRPRE8od2FuZ3hp
YW56aHUpOiBCdWlsZCB0aGUgamFyIGZvciBuYXRpdmUgdGVzdHMgd2l0aCBTREsuCisgICAgICAg
ICAgICAgICAgICAgICAgICAjIEZvciBub3cgd2UgYXJlIHVzaW5nIEFuZHJvaWQubWsgdG8gYnVp
bGQgdGhlIGFway4KKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAg
J291dHB1dHMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRHVt
cFJlbmRlclRyZWVfYXBrL0Nocm9tZU5hdGl2ZVRlc3RzLWRlYnVnLmFwaycsCisgICAgICAgICAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJvaWQvZ2VuZXJh
dGVfbmF0aXZlX3Rlc3QucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tbmF0aXZlX2xp
YnJhcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2xpYi50YXJn
ZXQvbGliRHVtcFJlbmRlclRyZWUuc28nLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RP
KHdhbmd4aWFuemh1KTogQnVpbGQgdGhlIGphciBmb3IgbmF0aXZlIHRlc3RzIHdpdGggU0RLLgor
ICAgICAgICAgICAgICAgICAgICAgICAgIyAnLS1qYXInLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIyAnZm9vL2Jhci5qYXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tb3V0cHV0JywK
KyAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EdW1wUmVuZGVyVHJlZV9h
cGsnLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tYW50LWFyZ3MnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgJy1EUFJPRFVDVF9ESVI9PChQUk9EVUNUX0RJUiknLAorICAgICAgICAgICAg
ICAgICAgICAgICAgJy0tYW50LWNvbXBpbGUnCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAgICAgfV0sCisgICAgICAgICAgICB9XSwKKyAgICAgICAgfV0sCiAgICAgXSwgIyBj
b25kaXRpb25zCiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGxBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGxBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKworI2lu
Y2x1ZGUgPGFuZHJvaWQvbG9nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNl
IHsKKworY29uc3QgY2hhciBvcHRpb25JbkZpZm9bXSA9ICItLWluLWZpZm89IjsKK2NvbnN0IGNo
YXIgb3B0aW9uT3V0Rmlmb1tdID0gIi0tb3V0LWZpZm89IjsKK2NvbnN0IGNoYXIgb3B0aW9uRXJy
RmlsZVtdID0gIi0tZXJyLWZpbGU9IjsKKwordm9pZCBhbmRyb2lkTG9nRXJyb3IoY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOworCit2b2lkIGFuZHJv
aWRMb2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7
CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBfX2FuZHJvaWRfbG9nX3ZwcmludChB
TkRST0lEX0xPR19FUlJPUiwgIkR1bXBSZW5kZXJUcmVlIiwgZm9ybWF0LCBhcmdzKTsKKyAgICB2
YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQgcmVtb3ZlQXJnKGludCBpbmRleCwgaW50KiBhcmdjLCBj
aGFyKioqIGFyZ3YpCit7CisgICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgKmFyZ2M7ICsraSkK
KyAgICAgICAgKCphcmd2KVtpXSA9ICgqYXJndilbaSArIDFdOworICAgIC0tKmFyZ2M7Cit9CisK
K3ZvaWQgY3JlYXRlRmlmbyhjb25zdCBjaGFyKiBmaWZvUGF0aCkKK3sKKyAgICB1bmxpbmsoZmlm
b1BhdGgpOworICAgIGlmIChta2ZpZm8oZmlmb1BhdGgsIDA2MDApKSB7CisgICAgICAgIGFuZHJv
aWRMb2dFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBmaWZvICVzOiAlc1xuIiwgZmlmb1BhdGgsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisK
K3ZvaWQgcmVkaXJlY3RUb0ZpbGUoRklMRSogc3RyZWFtLCBjb25zdCBjaGFyKiBwYXRoLCBjb25z
dCBjaGFyKiBtb2RlKQoreworICAgIGlmICghZnJlb3BlbihwYXRoLCBtb2RlLCBzdHJlYW0pKSB7
CisgICAgICAgIGFuZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIHJlZGlyZWN0IHN0cmVhbSB0byBm
aWxlOiAlczogJXNcbiIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgcGxhdGZvcm1J
bml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQoreworICAgIGNvbnN0IGNoYXIqIGluRmlmbyA9
IDA7CisgICAgY29uc3QgY2hhciogb3V0RmlmbyA9IDA7CisgICAgY29uc3QgY2hhciogZXJyRmls
ZSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCAqYXJnYzsgKSB7CisgICAgICAgIGNvbnN0
IGNoYXIqIGFyZ3VtZW50ID0gKCphcmd2KVtpXTsKKyAgICAgICAgaWYgKHN0cnN0cihhcmd1bWVu
dCwgb3B0aW9uSW5GaWZvKSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgaW5GaWZvID0gYXJn
dW1lbnQgKyBzdHJsZW4ob3B0aW9uSW5GaWZvKTsKKyAgICAgICAgICAgIGNyZWF0ZUZpZm8oaW5G
aWZvKTsKKyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbk91dEZpZm8pID09IGFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICBvdXRGaWZvID0gYXJndW1lbnQgKyBzdHJsZW4ob3B0aW9uT3V0Rmlmbyk7Cisg
ICAgICAgICAgICBjcmVhdGVGaWZvKG91dEZpZm8pOworICAgICAgICAgICAgcmVtb3ZlQXJnKGks
IGFyZ2MsIGFyZ3YpOworICAgICAgICB9IGVsc2UgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9u
RXJyRmlsZSkgPT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVyckZpbGUgPSBhcmd1bWVudCAr
IHN0cmxlbihvcHRpb25FcnJGaWxlKTsKKyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBh
cmd2KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICArK2k7CisgICAgfQorCisgICAgLy8g
VGhlIG9yZGVyIG9mIGNyZWF0ZUZpZm8oKSBhbmQgcmVkaXJlY3RUb0ZpZm8oKSBpcyBpbXBvcnRh
bnQgdG8gYXZvaWQgZGVhZGxvY2suCisgICAgaWYgKG91dEZpZm8pCisgICAgICAgIHJlZGlyZWN0
VG9GaWxlKHN0ZG91dCwgb3V0RmlmbywgInciKTsKKyAgICBpZiAoaW5GaWZvKQorICAgICAgICBy
ZWRpcmVjdFRvRmlsZShzdGRpbiwgaW5GaWZvLCAiciIpOworICAgIGlmIChlcnJGaWxlKQorICAg
ICAgICByZWRpcmVjdFRvRmlsZShzdGRlcnIsIGVyckZpbGUsICJ3Iik7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIFJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQuCisgICAgICAgIGR1cDIoMSwgMik7
CisgICAgfQorfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxHdGsuY3BwCShyZXZpc2lvbiAxMTc2MzkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSArMzEsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgogCi0jaW5jbHVk
ZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKLSNpbmNsdWRlIDxmb250Y29uZmln
L2ZvbnRjb25maWcuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+
Ci0KIAogdm9pZCBvcGVuU3RhcnR1cERpYWxvZygpCiB7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsTGludXguY3BwCShyZXZpc2lvbiAxMTc2Mzkp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFNoZWxsLmgiCi0KLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiV2Vi
Vmlldy5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0KLSNp
ZiAhT1MoQU5EUk9JRCkKLSNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNlbmRp
ZgotCi0jaWYgVVNFKEdUSykKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jZW5kaWYKLSNpbmNsdWRl
IDxzaWduYWwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotc3RhdGljIHZvaWQgQWxhcm1IYW5k
bGVyKGludCkKLXsKLSAgICAvLyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2Vz
cyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5IGJhZCBoYW5nLgotICAgIHB1dHMoIlxuI1RFU1RfVElN
RURfT1VUXG4iKTsKLSAgICBwdXRzKCIjRU9GXG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAg
ICBleGl0KDApOwotfQotCi12b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCi17Ci0g
ICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRpbmcpOwotICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7
Ci0KLSAgICAvLyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxs
IHVzIGlmIHdlIHRpbWUgb3V0LgotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Ci0g
ICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKLSAgICBzaWdlbXB0eXNl
dCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7Ci0gICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwot
Ci0gICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0s
ICZhbGFybUFjdGlvbiwgJm9sZEFjdGlvbik7Ci0gICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRG
b3JXYXRjaERvZygpIC8gMTAwMCk7Ci0KLSAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3Qg
YSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBm
aW5pc2hlcyBsb2FkaW5nLgotICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdl
YmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBhbGFy
bS4KLSAgICBhbGFybSgwKTsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7
Ci19Ci0KLSNpZiAhT1MoQU5EUk9JRCkKLXN0YXRpYyBib29sIGNoZWNrQW5kTG9hZEZvbnRGaWxl
KEZjQ29uZmlnKiBmb250Y2ZnLCBjb25zdCBjaGFyKiBwYXRoMSwgY29uc3QgY2hhciogcGF0aDIp
Ci17Ci0gICAgY29uc3QgY2hhciogZm9udCA9IHBhdGgxOwotICAgIGlmIChhY2Nlc3MoZm9udCwg
Ul9PSykgPCAwKSB7Ci0gICAgICAgIGZvbnQgPSBwYXRoMjsKLSAgICAgICAgaWYgKGFjY2Vzcyhm
b250LCBSX09LKSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBt
aXNzaW5nICVzIG9yICVzLiBXaXRob3V0IHRoaXMsIHNvbWUgbGF5b3V0IHRlc3RzIG1heSBmYWls
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvY2hyb21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4ICIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZm9yIG1vcmUuXG4iLCBwYXRoMSwgcGF0aDIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghRmNDb25maWdBcHBGb250QWRk
RmlsZShmb250Y2ZnLCAoRmNDaGFyOCAqKSBmb250KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGZvbnQpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cEZvbnRj
b25maWcoKQotewotICAgIC8vIFdlIHdpc2ggdG8gbWFrZSB0aGUgbGF5b3V0IHRlc3RzIHJlcHJv
ZHVjYWJsZSB3aXRoIHJlc3BlY3QgdG8gZm9udHMuIFNraWEKLSAgICAvLyB1c2VzIGZvbnRjb25m
aWcgdG8gcmVzb2x2ZSBmb250IGZhbWlseSBuYW1lcyBmcm9tIFdlYktpdCBpbnRvIGFjdHVhbCBm
b250Ci0gICAgLy8gZmlsZXMgZm91bmQgb24gdGhlIGN1cnJlbnQgc3lzdGVtLiBUaGlzIG1lYW5z
IHRoYXQgZm9udHMgdmFyeSBiYXNlZCBvbiB0aGUKLSAgICAvLyBzeXN0ZW0gYW5kIGFsc28gb24g
dGhlIGZvbnRjb25maWcgY29uZmlndXJhdGlvbi4KLSAgICAvLwotICAgIC8vIFRvIGF2b2lkIHRo
aXMgd2UgaW5pdGlhbGlzZSBmb250Y29uZmlnIGhlcmUgYW5kIGluc3RhbGwgYSBjb25maWd1cmF0
aW9uCi0gICAgLy8gd2hpY2ggb25seSBrbm93cyBhYm91dCBhIGZldywgc2VsZWN0LCBmb250cy4K
LQotICAgIC8vIFdlIGhhdmUgZm9udGNvbmZpZyBwYXJzZSBhIGNvbmZpZyBmaWxlIGZyb20gb3Vy
IHJlc291cmNlcyBmaWxlLiBUaGlzCi0gICAgLy8gc2V0cyBhIG51bWJlciBvZiBhbGlhc2VzICgi
c2FucyItPiJBcmlhbCIgZXRjKSwgYnV0IGRvZXNuJ3QgaW5jbHVkZSBhbnkKLSAgICAvLyBmb250
IGRpcmVjdG9yaWVzLgotICAgIEZjSW5pdCgpOwotCi0gICAgY2hhciBkcnRQYXRoW1BBVEhfTUFY
ICsgMV07Ci0gICAgaW50IGRydFBhdGhTaXplID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwg
ZHJ0UGF0aCwgUEFUSF9NQVgpOwotICAgIGlmIChkcnRQYXRoU2l6ZSA8IDAgfHwgZHJ0UGF0aFNp
emUgPiBQQVRIX01BWCkgewotICAgICAgICBmcHV0cygiVW5hYmxlIHRvIHJlc29sdmUgL3Byb2Mv
c2VsZi9leGUuIiwgc3RkZXJyKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZHJ0UGF0
aFtkcnRQYXRoU2l6ZV0gPSAwOwotICAgIHN0ZDo6c3RyaW5nIGRydERpclBhdGgoZHJ0UGF0aCk7
Ci0gICAgc2l6ZV90IGxhc3RQYXRoUG9zID0gZHJ0RGlyUGF0aC5yZmluZCgiLyIpOwotICAgIEFT
U0VSVChsYXN0UGF0aFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0gICAgZHJ0RGlyUGF0aC5l
cmFzZShsYXN0UGF0aFBvcyArIDEpOwotCi0gICAgRmNDb25maWcqIGZvbnRjZmcgPSBGY0NvbmZp
Z0NyZWF0ZSgpOwotICAgIHN0ZDo6c3RyaW5nIGZvbnRjb25maWdQYXRoID0gZHJ0RGlyUGF0aCAr
ICJmb250cy5jb25mIjsKLSAgICBpZiAoIUZjQ29uZmlnUGFyc2VBbmRMb2FkKGZvbnRjZmcsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRjb25maWdQYXRoLmNfc3RyKCkpLCB0
cnVlKSkgewotICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHBhcnNlIGZvbnRjb25maWcgY29uZmln
IGZpbGVcbiIsIHN0ZGVycik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgLy8gVGhp
cyBpcyB0aGUgbGlzdCBvZiBmb250cyB0aGF0IGZvbnRjb25maWcgd2lsbCBrbm93IGFib3V0LiBJ
dAotICAgIC8vIHdpbGwgdHJ5IGl0cyBiZXN0IHRvIG1hdGNoIGJhc2VkIG9ubHkgb24gdGhlIGZv
bnRzIGhlcmUgaW4uIFRoZQotICAgIC8vIHBhdGhzIGFyZSB3aGVyZSB0aGVzZSBmb250cyBhcmUg
Zm91bmQgb24gb3VyIFVidW50dSBib3hlcy4KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qg
Zm9udHNbXSA9IHsKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUva29jaGkva29j
aGktZ290aGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hp
L2tvY2hpLW1pbmNoby50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0FyaWFsLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfSXRhbGlj
LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
Q29taWNfU2Fuc19NUy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVNfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3LnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9s
ZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L0NvdXJpZXJfTmV3X0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfSXRhbGljLnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYS50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFf
Qm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZv
bnRzL0dlb3JnaWFfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0ltcGFjdC50dGYiLAotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NUy50
dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1Ry
ZWJ1Y2hldF9NU19Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0l0YWxp
Yy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L1RpbWVzX05ld19Sb21hbi50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGRf
SXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3Jl
Zm9udHMvVGltZXNfTmV3X1JvbWFuX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmEudHRmIiwKLSAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0JvbGQudHRmIiwKLSAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0Jv
bGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvVmVyZGFuYV9JdGFsaWMudHRmIiwKLSAgICAgICAgLy8gVGhlIERlamFWdVNhbnMg
Zm9udCBpcyB1c2VkIGJ5IHRoZSBjc3MyLjEgdGVzdHMuCi0gICAgICAgICIvdXNyL3NoYXJlL2Zv
bnRzL3RydWV0eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2Fucy50dGYiLAotICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF9oaS50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9s
b2hpdF90YS50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5k
aWMtZm9udHMtY29yZS9NdWt0aU5hcnJvdy50dGYiLAotICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhcnJheXNpemUoZm9udHMpOyArK2kpIHsKLSAgICAgICAgaWYgKGFjY2Vzcyhm
b250c1tpXSwgUl9PSykpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBt
aXNzaW5nICVzLiBUcnkgcmUtcnVubmluZyBidWlsZC9pbnN0YWxsLWJ1aWxkLWRlcHMuc2guIEFs
c28gc2VlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5b3V0VGVzdHNMaW51eCIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udHNbaV0pOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikg
Zm9udHNbaV0pKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2Fk
IGZvbnQgJXNcbiIsIGZvbnRzW2ldKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoIWNoZWNrQW5kTG9hZEZvbnRGaWxlKGZvbnRjZmcsICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL3RoYWkvR2FydWRhLnR0ZiIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90bHdnL0dhcnVkYS50dGYiKSkK
LSAgICAgICAgZXhpdCgxKTsKLQotICAgIC8vIFdlIHNwZWNpYWwgY2FzZSB0aGVzZSBmb250cyBi
ZWNhdXNlIHRoZXkncmUgb25seSBuZWVkZWQgaW4gYQotICAgIC8vIGZldyBsYXlvdXQgdGVzdHMu
Ci0gICAgY2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfcGEudHRmIiwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLXB1bmphYmktZm9udHMv
bG9oaXRfcGEudHRmIik7Ci0KLSAgICAvLyBBbHNvIGxvYWQgdGhlIGxheW91dC10ZXN0LXNwZWNp
ZmljICJBaGVtIiBmb250LgotICAgIHN0ZDo6c3RyaW5nIGFoZW1QYXRoID0gZHJ0RGlyUGF0aCAr
ICJBSEVNX19fXy5UVEYiOwotICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2Zn
LCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihhaGVtUGF0aC5jX3N0cigpKSkpIHsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBhaGVt
UGF0aC5jX3N0cigpKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBpZiAoIUZjQ29u
ZmlnU2V0Q3VycmVudChmb250Y2ZnKSkgewotICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHNldCB0
aGUgZGVmYXVsdCBmb250IGNvbmZpZ3VyYXRpb25cbiIsIHN0ZGVycik7Ci0gICAgICAgIGV4aXQo
MSk7Ci0gICAgfQotfQotI2VuZGlmIC8vICFPUyhBTkRST0lEKQotCi12b2lkIHBsYXRmb3JtSW5p
dChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKLXsKLSAgICAvLyBGSVhNRTogSXQncyBiZXR0ZXIg
Y2FsbCBndGtfaW5pdCgpIG9ubHkgd2hlbiB3ZSBydW4gcGx1Z2luIHRlc3RzLgotICAgIC8vIFNl
ZSBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vYS9jaHJvbWl1bS5vcmcvZ3JvdXAvY2hyb21pdW0t
ZGV2L2Jyb3dzZV90aHJlYWQvdGhyZWFkLzYzM2VhMTY3Y2RlMTk2Y2EjCi0jaWYgVVNFKEdUSykK
LSAgICBndGtfaW5pdChhcmdjLCBhcmd2KTsKLSNlbmRpZgotCi0jaWYgIU9TKEFORFJPSUQpCi0g
ICAgc2V0dXBGb250Y29uZmlnKCk7Ci0jZW5kaWYKLX0KLQpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcAkocmV2aXNpb24gMCkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0
U2hlbGwuaCIKKworI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCisK
KyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIHZvaWQg
QWxhcm1IYW5kbGVyKGludCkKK3sKKyAgICAvLyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0
aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5IGJhZCBoYW5nLgorICAgIHB1dHMoIlxu
I1RFU1RfVElNRURfT1VUXG4iKTsKKyAgICBwdXRzKCIjRU9GXG4iKTsKKyAgICBmZmx1c2goc3Rk
b3V0KTsKKyAgICBleGl0KDApOworfQorCit2b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hl
ZCgpCit7CisgICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRpbmcpOworICAgIG1fdGVzdElzUGVuZGlu
ZyA9IHRydWU7CisKKyAgICAvLyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQg
d2lsbCBraWxsIHVzIGlmIHdlIHRpbWUgb3V0LgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1B
Y3Rpb247CisgICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKKyAgICBz
aWdlbXB0eXNldCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7CisgICAgYWxhcm1BY3Rpb24uc2FfZmxh
Z3MgPSAwOworCisgICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247CisgICAgc2lnYWN0aW9u
KFNJR0FMUk0sICZhbGFybUFjdGlvbiwgJm9sZEFjdGlvbik7CisgICAgYWxhcm0obGF5b3V0VGVz
dFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAwMCk7CisKKyAgICAvLyBUZXN0RmluaXNoZWQoKSB3
aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UK
KyAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgorICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCisg
ICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworCisgICAgLy8gUmVtb3Zl
IHRoZSBhbGFybS4KKyAgICBhbGFybSgwKTsKKyAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFj
dGlvbiwgMCk7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxQb3NpeC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIExGCgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
WDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxYMTEuY3BwCShyZXZpc2lvbiAxMTc2MDQpCShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNwcDoxMTc2MDQpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgorCisjaW5j
bHVkZSAiU2tUeXBlZmFjZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJr
aXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCisjaWYgIU9TKEFORFJPSUQpCisjaW5jbHVk
ZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+CisjZW5kaWYKKworI2lmIFVTRShHVEspCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2VuZGlmCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisKK3N0YXRpYyB2b2lkIEFsYXJtSGFuZGxlcihpbnQpCit7CisgICAgLy8gSWYg
dGhlIGFsYXJtIGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJlYWxs
eSBiYWQgaGFuZy4KKyAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7CisgICAgcHV0cygi
I0VPRlxuIik7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgZXhpdCgwKTsKK30KKwordm9pZCBU
ZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQoKQoreworICAgIEFTU0VSVCghbV90ZXN0SXNQZW5k
aW5nKTsKKyAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOworCisgICAgLy8gSW5zdGFsbCBhbiBh
bGFybSBzaWduYWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KKyAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0aW9uOworICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRs
ZXIgPSBBbGFybUhhbmRsZXI7CisgICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2sp
OworICAgIGFsYXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKKworICAgIHN0cnVjdCBzaWdhY3Rpb24g
b2xkQWN0aW9uOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rp
b24pOworICAgIGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOwor
CisgICAgLy8gVGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFr
IHRoaXMgbG9vcCB3aGVuIHRoZSBwYWdlCisgICAgLy8gZmluaXNoZXMgbG9hZGluZy4KKyAgICB3
aGlsZSAobV90ZXN0SXNQZW5kaW5nKQorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2Fn
ZUxvb3AoKTsKKworICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCisgICAgYWxhcm0oMCk7CisgICAg
c2lnYWN0aW9uKFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOworfQorCisjaWYgIU9TKEFORFJPSUQp
CitzdGF0aWMgYm9vbCBjaGVja0FuZExvYWRGb250RmlsZShGY0NvbmZpZyogZm9udGNmZywgY29u
c3QgY2hhciogcGF0aDEsIGNvbnN0IGNoYXIqIHBhdGgyKQoreworICAgIGNvbnN0IGNoYXIqIGZv
bnQgPSBwYXRoMTsKKyAgICBpZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkgeworICAgICAgICBm
b250ID0gcGF0aDI7CisgICAgICAgIGlmIChhY2Nlc3MoZm9udCwgUl9PSykgPCAwKSB7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcyBvciAlcy4gV2l0aG91
dCB0aGlzLCBzb21lIGxheW91dCB0ZXN0cyBtYXkgZmFpbC4gIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5
b3V0VGVzdHNMaW51eCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBtb3JlLlxu
IiwgcGF0aDEsIHBhdGgyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjgg
KikgZm9udCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250
ICVzXG4iLCBmb250KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBGb250Y29uZmlnKCkKK3sKKyAgICAvLyBXZSB3
aXNoIHRvIG1ha2UgdGhlIGxheW91dCB0ZXN0cyByZXByb2R1Y2FibGUgd2l0aCByZXNwZWN0IHRv
IGZvbnRzLiBTa2lhCisgICAgLy8gdXNlcyBmb250Y29uZmlnIHRvIHJlc29sdmUgZm9udCBmYW1p
bHkgbmFtZXMgZnJvbSBXZWJLaXQgaW50byBhY3R1YWwgZm9udAorICAgIC8vIGZpbGVzIGZvdW5k
IG9uIHRoZSBjdXJyZW50IHN5c3RlbS4gVGhpcyBtZWFucyB0aGF0IGZvbnRzIHZhcnkgYmFzZWQg
b24gdGhlCisgICAgLy8gc3lzdGVtIGFuZCBhbHNvIG9uIHRoZSBmb250Y29uZmlnIGNvbmZpZ3Vy
YXRpb24uCisgICAgLy8KKyAgICAvLyBUbyBhdm9pZCB0aGlzIHdlIGluaXRpYWxpc2UgZm9udGNv
bmZpZyBoZXJlIGFuZCBpbnN0YWxsIGEgY29uZmlndXJhdGlvbgorICAgIC8vIHdoaWNoIG9ubHkg
a25vd3MgYWJvdXQgYSBmZXcsIHNlbGVjdCwgZm9udHMuCisKKyAgICAvLyBXZSBoYXZlIGZvbnRj
b25maWcgcGFyc2UgYSBjb25maWcgZmlsZSBmcm9tIG91ciByZXNvdXJjZXMgZmlsZS4gVGhpcwor
ICAgIC8vIHNldHMgYSBudW1iZXIgb2YgYWxpYXNlcyAoInNhbnMiLT4iQXJpYWwiIGV0YyksIGJ1
dCBkb2Vzbid0IGluY2x1ZGUgYW55CisgICAgLy8gZm9udCBkaXJlY3Rvcmllcy4KKyAgICBGY0lu
aXQoKTsKKworICAgIGNoYXIgZHJ0UGF0aFtQQVRIX01BWCArIDFdOworICAgIGludCBkcnRQYXRo
U2l6ZSA9IHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGRydFBhdGgsIFBBVEhfTUFYKTsKKyAg
ICBpZiAoZHJ0UGF0aFNpemUgPCAwIHx8IGRydFBhdGhTaXplID4gUEFUSF9NQVgpIHsKKyAgICAg
ICAgZnB1dHMoIlVuYWJsZSB0byByZXNvbHZlIC9wcm9jL3NlbGYvZXhlLiIsIHN0ZGVycik7Cisg
ICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGRydFBhdGhbZHJ0UGF0aFNpemVdID0gMDsKKyAg
ICBzdGQ6OnN0cmluZyBkcnREaXJQYXRoKGRydFBhdGgpOworICAgIHNpemVfdCBsYXN0UGF0aFBv
cyA9IGRydERpclBhdGgucmZpbmQoIi8iKTsKKyAgICBBU1NFUlQobGFzdFBhdGhQb3MgIT0gc3Rk
OjpzdHJpbmc6Om5wb3MpOworICAgIGRydERpclBhdGguZXJhc2UobGFzdFBhdGhQb3MgKyAxKTsK
KworICAgIEZjQ29uZmlnKiBmb250Y2ZnID0gRmNDb25maWdDcmVhdGUoKTsKKyAgICBzdGQ6OnN0
cmluZyBmb250Y29uZmlnUGF0aCA9IGRydERpclBhdGggKyAiZm9udHMuY29uZiI7CisgICAgaWYg
KCFGY0NvbmZpZ1BhcnNlQW5kTG9hZChmb250Y2ZnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZj
Q2hhcjgqPihmb250Y29uZmlnUGF0aC5jX3N0cigpKSwgdHJ1ZSkpIHsKKyAgICAgICAgZnB1dHMo
IkZhaWxlZCB0byBwYXJzZSBmb250Y29uZmlnIGNvbmZpZyBmaWxlXG4iLCBzdGRlcnIpOworICAg
ICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZm9udHMg
dGhhdCBmb250Y29uZmlnIHdpbGwga25vdyBhYm91dC4gSXQKKyAgICAvLyB3aWxsIHRyeSBpdHMg
YmVzdCB0byBtYXRjaCBiYXNlZCBvbmx5IG9uIHRoZSBmb250cyBoZXJlIGluLiBUaGUKKyAgICAv
LyBwYXRocyBhcmUgd2hlcmUgdGhlc2UgZm9udHMgYXJlIGZvdW5kIG9uIG91ciBVYnVudHUgYm94
ZXMuCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZvbnRzW10gPSB7CisgICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hpL2tvY2hpLWdvdGhpYy50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9rb2NoaS9rb2NoaS1taW5jaG8udHRmIiwKKyAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbC50dGYi
LAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFs
X0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9BcmlhbF9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVMudHRmIiwKKyAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5z
X01TX0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNv
cmVmb250cy9Db3VyaWVyX05ldy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3X0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19Cb2xkX0l0YWxp
Yy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L0NvdXJpZXJfTmV3X0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWEudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGQudHRmIiwKKyAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGRfSXRhbGlj
LnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
R2VvcmdpYV9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
bXN0dGNvcmVmb250cy9JbXBhY3QudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfQm9sZC50dGYiLAor
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hl
dF9NU19Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW4udHRmIiwK
KyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19O
ZXdfUm9tYW5fQm9sZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9J
dGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9WZXJkYW5hLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfSXRhbGlj
LnR0ZiIsCisgICAgICAgIC8vIFRoZSBEZWphVnVTYW5zIGZvbnQgaXMgdXNlZCBieSB0aGUgY3Nz
Mi4xIHRlc3RzLgorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1
L0RlamFWdVNhbnMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRm
LWluZGljLWZvbnRzLWNvcmUvbG9oaXRfaGkudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfdGEudHRmIiwKKyAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvTXVrdGlOYXJy
b3cudHRmIiwKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGZv
bnRzKTsgKytpKSB7CisgICAgICAgIGlmIChhY2Nlc3MoZm9udHNbaV0sIFJfT0spKSB7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcy4gVHJ5IHJlLXJ1bm5p
bmcgYnVpbGQvaW5zdGFsbC1idWlsZC1kZXBzLnNoLiBBbHNvIHNlZSAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xh
eW91dFRlc3RzTGludXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzW2ldKTsK
KyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFGY0NvbmZpZ0Fw
cEZvbnRBZGRGaWxlKGZvbnRjZmcsIChGY0NoYXI4ICopIGZvbnRzW2ldKSkgeworICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBmb250c1tpXSk7
CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjaGVj
a0FuZExvYWRGb250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90aGFp
L0dhcnVkYS50dGYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvdGx3Zy9HYXJ1ZGEudHRmIikpCisgICAgICAgIGV4aXQoMSk7CisKKyAg
ICAvLyBXZSBzcGVjaWFsIGNhc2UgdGhlc2UgZm9udHMgYmVjYXVzZSB0aGV5J3JlIG9ubHkgbmVl
ZGVkIGluIGEKKyAgICAvLyBmZXcgbGF5b3V0IHRlc3RzLgorICAgIGNoZWNrQW5kTG9hZEZvbnRG
aWxlKGZvbnRjZmcsICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1j
b3JlL2xvaGl0X3BhLnR0ZiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL3R0Zi1wdW5qYWJpLWZvbnRzL2xvaGl0X3BhLnR0ZiIpOworCisgICAg
Ly8gQWxzbyBsb2FkIHRoZSBsYXlvdXQtdGVzdC1zcGVjaWZpYyAiQWhlbSIgZm9udC4KKyAgICBz
dGQ6OnN0cmluZyBhaGVtUGF0aCA9IGRydERpclBhdGggKyAiQUhFTV9fX18uVFRGIjsKKyAgICBp
ZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBGY0NoYXI4Kj4oYWhlbVBhdGguY19zdHIoKSkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgYWhlbVBhdGguY19zdHIoKSk7CisgICAgICAg
IGV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoZm9udGNmZykp
IHsKKyAgICAgICAgZnB1dHMoIkZhaWxlZCB0byBzZXQgdGhlIGRlZmF1bHQgZm9udCBjb25maWd1
cmF0aW9uXG4iLCBzdGRlcnIpOworICAgICAgICBleGl0KDEpOworICAgIH0KK30KKyNlbmRpZiAv
LyAhT1MoQU5EUk9JRCkKKwordm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFy
Z3YpCit7CisgICAgLy8gRklYTUU6IEl0J3MgYmV0dGVyIGNhbGwgZ3RrX2luaXQoKSBvbmx5IHdo
ZW4gd2UgcnVuIHBsdWdpbiB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cDovL2dyb3Vwcy5nb29nbGUu
Y29tL2EvY2hyb21pdW0ub3JnL2dyb3VwL2Nocm9taXVtLWRldi9icm93c2VfdGhyZWFkL3RocmVh
ZC82MzNlYTE2N2NkZTE5NmNhIworI2lmIFVTRShHVEspCisgICAgZ3RrX2luaXQoYXJnYywgYXJn
dik7CisjZW5kaWYKKworI2lmICFPUyhBTkRST0lEKQorICAgIHNldHVwRm9udGNvbmZpZygpOwor
I2VuZGlmCit9CisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bFgxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsWDExLmNwcAkocmV2aXNpb24gMTE3NjA0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNTUgKzMxLDEy
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAKLSNpbmNs
dWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIndlYmtp
dC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0KLSNpZiAhT1MoQU5EUk9JRCkKICNpbmNsdWRl
IDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNlbmRpZgogCiAjaWYgVVNFKEdUSykKICNpbmNs
dWRlIDxndGsvZ3RrLmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLQotc3RhdGljIHZvaWQgQWxhcm1IYW5kbGVyKGludCkKLXsKLSAgICAvLyBJZiB0
aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5
IGJhZCBoYW5nLgotICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VUXG4iKTsKLSAgICBwdXRzKCIj
RU9GXG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBleGl0KDApOwotfQogCi12b2lkIFRl
c3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCi17Ci0gICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRp
bmcpOwotICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7Ci0KLSAgICAvLyBJbnN0YWxsIGFuIGFs
YXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxsIHVzIGlmIHdlIHRpbWUgb3V0LgotICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Ci0gICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxl
ciA9IEFsYXJtSGFuZGxlcjsKLSAgICBzaWdlbXB0eXNldCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7
Ci0gICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwotCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBv
bGRBY3Rpb247Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhbGFybUFjdGlvbiwgJm9sZEFjdGlv
bik7Ci0gICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAwMCk7Ci0K
LSAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsg
dGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgotICAgIHdo
aWxlIChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdl
TG9vcCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBhbGFybS4KLSAgICBhbGFybSgwKTsKLSAgICBz
aWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7Ci19Ci0KLSNpZiAhT1MoQU5EUk9JRCkK
IHN0YXRpYyBib29sIGNoZWNrQW5kTG9hZEZvbnRGaWxlKEZjQ29uZmlnKiBmb250Y2ZnLCBjb25z
dCBjaGFyKiBwYXRoMSwgY29uc3QgY2hhciogcGF0aDIpCiB7CiAgICAgY29uc3QgY2hhciogZm9u
dCA9IHBhdGgxOwpAQCAtMjA2LDcgKzE2Myw2IEBAIHN0YXRpYyB2b2lkIHNldHVwRm9udGNvbmZp
ZygpCiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogfQotI2VuZGlmIC8vICFPUyhBTkRST0lEKQog
CiB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKIHsKQEAgLTIxNiw4
ICsxNzIsNiBAQCB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJnCiAgICAg
Z3RrX2luaXQoYXJnYywgYXJndik7CiAjZW5kaWYKIAotI2lmICFPUyhBTkRST0lEKQogICAgIHNl
dHVwRm9udGNvbmZpZygpOwotI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX2FuZHJvaWQu
cHkJKHJldmlzaW9uIDExNzYzOSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW1fYW5kcm9pZC5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4
LDE0IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKIGltcG9y
dCByZQogaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNobGV4CitpbXBvcnQgc2h1dGlsCitpbXBvcnQg
dGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0
IGltcG9ydCBiYXNlCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBjaHJv
bWl1bQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQogCkBA
IC00NSwxMyArNDgsMTcgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogIyBU
aGlzIHBhdGggaXMgZGVmaW5lZCBpbiBiYXNlL2Jhc2VfcGF0aHNfYW5kcm9pZC5jYyBhbmQKICMg
d2Via2l0L3N1cHBvcnQvcGxhdGZvcm1fc3VwcG9ydF9hbmRyb2lkLmNjLgogREVWSUNFX1NPVVJD
RV9ST09UX0RJUiA9ICcvZGF0YS9sb2NhbC90bXAvJworQ09NTUFORF9MSU5FX0ZJTEUgPSBERVZJ
Q0VfU09VUkNFX1JPT1RfRElSICsgJ2Nocm9tZS1uYXRpdmUtdGVzdHMtY29tbWFuZC1saW5lJwog
CisjIFRoZSBkaXJlY3RvcnkgdG8gcHV0IHRvb2xzIGFuZCByZXNvdXJjZXMgb2YgRHVtcFJlbmRl
clRyZWUuCiBERVZJQ0VfRFJUX0RJUiA9ICcvZGF0YS9kcnQvJwotREVWSUNFX0RSVF9QQVRIID0g
REVWSUNFX0RSVF9ESVIgKyAnRHVtcFJlbmRlclRyZWUnCi1ERVZJQ0VfRFJUX1NUREVSUiA9IERF
VklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnN0ZGVycicKIERFVklDRV9GT1JXQVJERVJf
UEFUSCA9IERFVklDRV9EUlRfRElSICsgJ2ZvcndhcmRlcicKIERFVklDRV9EUlRfU1RBTVBfUEFU
SCA9IERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnN0YW1wJwogCitEUlRfQVBQX1BB
Q0tBR0UgPSAnb3JnLmNocm9taXVtLm5hdGl2ZV90ZXN0JworRFJUX0FDVElWSVRZX0ZVTExfTkFN
RSA9IERSVF9BUFBfUEFDS0FHRSArICcvLkNocm9tZU5hdGl2ZVRlc3RBY3Rpdml0eScKK0RSVF9B
UFBfRklMRV9ESVIgPSAnL2RhdGEvdXNlci8wLycgKyBEUlRfQVBQX1BBQ0tBR0UgKyAnL2ZpbGVz
LycKKwogIyBUaGlzIG9ubHkgd29ya3MgZm9yIHNpbmdsZSBjb3JlIGRldmljZXMgc28gZmFyLgog
IyBGSVhNRTogRmluZCBhIHNvbHV0aW9uIGZvciBtdWx0aS1jb3JlIGRldmljZXMuCiBTQ0FMSU5H
X0dPVkVSTk9SID0gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5n
X2dvdmVybm9yIgpAQCAtNjksNiArNzYsOSBAQCBGT1JXQVJEX1BPUlRTID0gJzgwMDAgODA4MCA4
NDQzIDg4ODAgOTMyCiAKIE1TX1RSVUVUWVBFX0ZPTlRTX0RJUiA9ICcvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvJwogCisjIFRpbWVvdXQgaW4gc2Vjb25kcyB0byB3YWl0
IGZvciBzdGFydC9zdG9wIG9mIER1bXBSZW5kZXJUcmVlLgorRFJUX1NUQVJUX1NUT1BfVElNRU9V
VF9TRUNTID0gMTAKKwogIyBMaXN0IG9mIGZvbnRzIHRoYXQgbGF5b3V0IHRlc3RzIGV4cGVjdCwg
Y29waWVkIGZyb20gRHVtcFJlbmRlclRyZWUvZ3RrL1Rlc3RTaGVsbEd0ay5jcHAuCiBIT1NUX0ZP
TlRfRklMRVMgPSBbCiAgICAgW01TX1RSVUVUWVBFX0ZPTlRTX0RJUiwgJ0FyaWFsLnR0ZiddLApA
QCAtMTQ5LDYgKzE1OSw3IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hy
b20KICAgICAgICAgc2VsZi5fdmVyc2lvbiA9ICdpY2VjcmVhbXNhbmR3aWNoJwogICAgICAgICBz
ZWxmLl9vcmlnaW5hbF9nb3Zlcm5vciA9IE5vbmUKICAgICAgICAgc2VsZi5fYW5kcm9pZF9iYXNl
X2RpciA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVhZF9maWZvX3Byb2MgPSBOb25lCiAKICAgICAg
ICAgc2VsZi5faG9zdF9wb3J0ID0gZmFjdG9yeS5Qb3J0RmFjdG9yeShob3N0KS5nZXQoJ2Nocm9t
aXVtJywgKiprd2FyZ3MpCiAKQEAgLTE2NSwxNSArMTc2LDI0IEBAIGNsYXNzIENocm9taXVtQW5k
cm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICAgICAgcmV0dXJuIDEwICogMTAwMAogCiAgICAg
ZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAjIEN1cnJlbnRseSB3
ZSBvbmx5IHVzZSBvbmUgcHJvY2VzcywgYnV0IGl0IG1pZ2h0IGJlIGhlbHBmdWwgdG8gdXNlCi0g
ICAgICAgICMgbW9yZSB0aGF0IG9uZSBwcm9jZXNzIGluIHRoZSBmdXR1cmUgdG8gaW1wcm92ZSBw
ZXJmb3JtYW5jZS4KKyAgICAgICAgIyBCZWNhdXNlIG9mIHRoZSBuYXR1cmUgb2YgYXBrLCB3ZSBk
b24ndCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgcHJvY2Vzcy4KICAgICAgICAgcmV0dXJuIDEKIAog
ICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAgcmV0dXJuIG1hcChz
ZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgc2VsZi5GQUxMQkFDS19QQVRIUykKIAorICAgIGRl
ZiBjaGVja193ZGlmZihzZWxmLCBsb2dnaW5nPVRydWUpOgorICAgICAgICByZXR1cm4gc2VsZi5f
aG9zdF9wb3J0LmNoZWNrX3dkaWZmKGxvZ2dpbmcpCisKICAgICBkZWYgY2hlY2tfYnVpbGQoc2Vs
ZiwgbmVlZHNfaHR0cCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ob3N0X3BvcnQuY2hlY2tfYnVp
bGQobmVlZHNfaHR0cCkKKyAgICAgICAgcmVzdWx0ID0gY2hyb21pdW0uQ2hyb21pdW1Qb3J0LmNo
ZWNrX2J1aWxkKHNlbGYsIG5lZWRzX2h0dHApCisgICAgICAgIHJlc3VsdCA9IHNlbGYuY2hlY2tf
d2RpZmYoKSBhbmQgcmVzdWx0CisgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBf
bG9nLmVycm9yKCdGb3IgY29tcGxldGUgQW5kcm9pZCBidWlsZCByZXF1aXJlbWVudHMsIHBsZWFz
ZSBzZWU6JykKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJycpCisgICAgICAgICAgICBfbG9nLmVy
cm9yKCcgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvQW5kcm9pZEJ1
aWxkSW5zdHJ1Y3Rpb25zJykKKworICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgY2hl
Y2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6CiAgICAgICAgIGZvciAoZm9udF9kaXIsIGZv
bnRfZmlsZSkgaW4gSE9TVF9GT05UX0ZJTEVTOgpAQCAtMjAyLDExICsyMjIsMTQgQEAgY2xhc3Mg
Q2hyb21pdW1BbmRyb2lkUG9ydChjaHJvbWl1bS5DaHJvbQogICAgICAgICBwYXNzCiAKICAgICBk
ZWYgc3RhcnRfaGVscGVyKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydy
b290J10pCiAgICAgICAgIHNlbGYuX3NldHVwX3BlcmZvcm1hbmNlKCkKICAgICAgICAgIyBSZXF1
aXJlZCBieSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpckZpbGVQYXRoKCkuCiAgICAg
ICAgICMgT3RoZXIgZGlyZWN0b3JpZXMgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkg
YWRiIHB1c2guCi0gICAgICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ21rZGly
JywgJy1wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0VfU09VUkNFX1JP
T1RfRElSICsgJ2Nocm9tZSddKQorICAgICAgICBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVs
bCcsICdta2RpcicsICctcCcsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVIgKyAnY2hyb21lJ10pCisg
ICAgICAgICMgQWxsb3cgdGhlIER1bXBSZW5kZXJUcmVlIGFwcCB0byBmdWxseSBhY2Nlc3MgdGhl
IGRpcmVjdG9yeS4KKyAgICAgICAgIyBUaGUgbmF0aXZlIGNvZGUgbmVlZHMgdGhlIHBlcm1pc3Np
b24gdG8gd3JpdGUgdGVtcG9yYXJ5IGZpbGVzIGhlcmUuCisgICAgICAgIHNlbGYuX3J1bl9hZGJf
Y29tbWFuZChbJ3NoZWxsJywgJ2NobW9kJywgJzc3NycsIERFVklDRV9TT1VSQ0VfUk9PVF9ESVJd
KQogCiAgICAgICAgIHNlbGYuX3B1c2hfZXhlY3V0YWJsZSgpCiAgICAgICAgIHNlbGYuX3B1c2hf
Zm9udHMoKQpAQCAtMjIzLDEzICsyNDYsMTUgQEAgY2xhc3MgQ2hyb21pdW1BbmRyb2lkUG9ydChj
aHJvbWl1bS5DaHJvbQogICAgICAgICAjIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGFuZCBkbyBubyBo
YXJtIHRvIHN1YnNlcXVlbnQgdGVzdHMuCiAgICAgICAgIHNlbGYuX3RlYXJkb3duX3BlcmZvcm1h
bmNlKCkKIAotICAgIGRlZiBza2lwcGVkX3Rlc3RzKHNlbGYsIHRlc3RfbGlzdCk6Ci0gICAgICAg
IHJldHVybiBiYXNlLlBvcnQuX3JlYWxfdGVzdHMoc2VsZiwgWworICAgIGRlZiBza2lwcGVkX2xh
eW91dF90ZXN0cyhzZWxmLCB0ZXN0X2xpc3QpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF90
ZXN0cyhbCiAgICAgICAgICAgICAjIENhbnZhcyB0ZXN0cyBhcmUgcnVuIGFzIHZpcnR1YWwgZ3B1
IHRlc3RzLgogICAgICAgICAgICAgJ2Zhc3QvY2FudmFzJywKICAgICAgICAgICAgICdjYW52YXMv
cGhpbGlwJywKICAgICAgICAgXSkKIAorICAgICMgT3ZlcnJpZGRlbiBwcml2YXRlIGZ1bmN0aW9u
cy4KKwogICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgogICAgICAgICByZXR1cm4g
c2VsZi5faG9zdF9wb3J0Ll9idWlsZF9wYXRoKCpjb21wcykKIApAQCAtMjQwLDEwICsyNjUsOSBA
QCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9tCiAgICAgICAgIHJldHVy
biBzZWxmLl9ob3N0X3BvcnQuX3BhdGhfdG9fYXBhY2hlX2NvbmZpZ19maWxlKCkKIAogICAgIGRl
ZiBfcGF0aF90b19kcml2ZXIoc2VsZiwgY29uZmlndXJhdGlvbj1Ob25lKToKLSAgICAgICAgIyBS
ZXR1cm5zIHRoZSBob3N0IHBhdGggdG8gZHJpdmVyIHdoaWNoIHdpbGwgYmUgcHVzaGVkIHRvIHRo
ZSBkZXZpY2UuCiAgICAgICAgIGlmIG5vdCBjb25maWd1cmF0aW9uOgogICAgICAgICAgICAgY29u
ZmlndXJhdGlvbiA9IHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicpCi0gICAgICAgIHJl
dHVybiBzZWxmLl9idWlsZF9wYXRoKGNvbmZpZ3VyYXRpb24sICdEdW1wUmVuZGVyVHJlZScpCisg
ICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKGNvbmZpZ3VyYXRpb24sICdEdW1wUmVuZGVy
VHJlZV9hcGsvQ2hyb21lTmF0aXZlVGVzdHMtZGVidWcuYXBrJykKIAogICAgIGRlZiBfcGF0aF90
b19oZWxwZXIoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKHNlbGYuZ2V0
X29wdGlvbignY29uZmlndXJhdGlvbicpLCAnZm9yd2FyZGVyJykKQEAgLTI2OSwyMyArMjkzLDM1
IEBAIGNsYXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICBkZWYgX2Ry
aXZlcl9jbGFzcyhzZWxmKToKICAgICAgICAgcmV0dXJuIENocm9taXVtQW5kcm9pZERyaXZlcgog
CisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4pOgorICAgICAgICBpZiBub3Qgc3Rkb3V0OgorICAgICAgICAgICAgc3Rkb3V0
ID0gJycKKyAgICAgICAgc3Rkb3V0ICs9ICcqKioqKioqKiogTG9nY2F0OlxuJyArIHNlbGYuX2dl
dF9sb2djYXQoKQorICAgICAgICBpZiBub3Qgc3RkZXJyOgorICAgICAgICAgICAgc3RkZXJyID0g
JycKKyAgICAgICAgc3RkZXJyICs9ICcqKioqKioqKiogVG9tYnN0b25lIGZpbGU6XG4nICsgc2Vs
Zi5fZ2V0X2xhc3Rfc3RhY2t0cmFjZSgpCisgICAgICAgIHJldHVybiBjaHJvbWl1bS5DaHJvbWl1
bVBvcnQuX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3
ZXJfdGhhbikKKworICAgICMgTG9jYWwgcHJpdmF0ZSBmdW5jdGlvbnMuCisKICAgICBkZWYgX3B1
c2hfZXhlY3V0YWJsZShzZWxmKToKICAgICAgICAgZHJ0X2hvc3RfcGF0aCA9IHNlbGYuX3BhdGhf
dG9fZHJpdmVyKCkKICAgICAgICAgZm9yd2FyZGVyX2hvc3RfcGF0aCA9IHNlbGYuX3BhdGhfdG9f
aGVscGVyKCkKLSAgICAgICAgZHJ0X2phcl9ob3N0X3BhdGggPSBkcnRfaG9zdF9wYXRoICsgJy5q
YXInCiAgICAgICAgIGhvc3Rfc3RhbXAgPSBpbnQoZmxvYXQobWF4KG9zLnN0YXQoZHJ0X2hvc3Rf
cGF0aCkuc3RfbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0
YXQoZm9yd2FyZGVyX2hvc3RfcGF0aCkuc3RfbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9zLnN0YXQoZHJ0X2phcl9ob3N0X3BhdGgpLnN0X210aW1lKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQoZm9yd2FyZGVyX2hvc3RfcGF0
aCkuc3RfbXRpbWUpKSkKICAgICAgICAgZGV2aWNlX3N0YW1wID0gaW50KGZsb2F0KHNlbGYuX3J1
bl9hZGJfY29tbWFuZChbCiAgICAgICAgICAgICAnc2hlbGwnLCAnY2F0ICVzIDI+L2Rldi9udWxs
IHx8IGVjaG8gMCcgJSBERVZJQ0VfRFJUX1NUQU1QX1BBVEhdKSkpCiAgICAgICAgIGlmIGRldmlj
ZV9zdGFtcCA8IGhvc3Rfc3RhbXA6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCdQdXNoaW5nIGV4
ZWN1dGFibGUnKQotICAgICAgICAgICAgc2VsZi5fa2lsbF9kZXZpY2VfcHJvY2VzcyhERVZJQ0Vf
Rk9SV0FSREVSX1BBVEgpCiAgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShmb3J3YXJk
ZXJfaG9zdF9wYXRoLCBERVZJQ0VfRk9SV0FSREVSX1BBVEgpCi0gICAgICAgICAgICBzZWxmLl9w
dXNoX3RvX2RldmljZShkcnRfaG9zdF9wYXRoLCBERVZJQ0VfRFJUX1BBVEgpCi0gICAgICAgICAg
ICBzZWxmLl9wdXNoX3RvX2RldmljZShkcnRfaG9zdF9wYXRoICsgJy5wYWsnLCBERVZJQ0VfRFJU
X1BBVEggKyAnLnBhaycpCi0gICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShkcnRfaG9z
dF9wYXRoICsgJ19yZXNvdXJjZXMnLCBERVZJQ0VfRFJUX1BBVEggKyAnX3Jlc291cmNlcycpCi0g
ICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShkcnRfamFyX2hvc3RfcGF0aCwgREVWSUNF
X0RSVF9QQVRIICsgJy5qYXInKQorICAgICAgICAgICAgc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsn
dW5pbnN0YWxsJywgRFJUX0FQUF9QQUNLQUdFXSkKKyAgICAgICAgICAgIGluc3RhbGxfcmVzdWx0
ID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnaW5zdGFsbCcsIGRydF9ob3N0X3BhdGhdKQorICAg
ICAgICAgICAgaWYgaW5zdGFsbF9yZXN1bHQuZmluZCgnU3VjY2VzcycpID09IC0xOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCAlcyBvbnRv
IGRldmljZTogJXMnICUgKGRydF9ob3N0X3BhdGgsIGluc3RhbGxfcmVzdWx0KSkKKyAgICAgICAg
ICAgIHNlbGYuX3B1c2hfdG9fZGV2aWNlKHNlbGYuX2J1aWxkX3BhdGgoc2VsZi5nZXRfb3B0aW9u
KCdjb25maWd1cmF0aW9uJyksICdEdW1wUmVuZGVyVHJlZS5wYWsnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERFVklDRV9EUlRfRElSICsgJ0R1bXBSZW5kZXJUcmVlLnBhaycp
CisgICAgICAgICAgICBzZWxmLl9wdXNoX3RvX2RldmljZShzZWxmLl9idWlsZF9wYXRoKHNlbGYu
Z2V0X29wdGlvbignY29uZmlndXJhdGlvbicpLCAnRHVtcFJlbmRlclRyZWVfcmVzb3VyY2VzJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0VfRFJUX0RJUiArICdEdW1w
UmVuZGVyVHJlZV9yZXNvdXJjZXMnKQogICAgICAgICAgICAgIyBWZXJzaW9uIGNvbnRyb2wgb2Yg
dGVzdCByZXNvdXJjZXMgaXMgZGVwZW5kZW50IG9uIGV4ZWN1dGFibGVzLAogICAgICAgICAgICAg
IyBiZWNhdXNlIHdlIHdpbGwgYWx3YXlzIHJlYnVpbGQgZXhlY3V0YWJsZXMgd2hlbiByZXNvdXJj
ZXMgYXJlCiAgICAgICAgICAgICAjIHVwZGF0ZWQuCkBAIC0zMjksMTEgKzM2NSwxNCBAQCBjbGFz
cyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVtLkNocm9tCiAgICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2VjaG8gJWQgPiAlc1ZFUlNJT04nICUgKHZlcnNpb24sIGRp
cildKQogCiAgICAgZGVmIF9ydW5fYWRiX2NvbW1hbmQoc2VsZiwgY21kLCBpZ25vcmVfZXJyb3I9
RmFsc2UpOgorICAgICAgICBfbG9nLmRlYnVnKCdSdW4gYWRiIGNvbW1hbmQ6ICcgKyBzdHIoY21k
KSkKICAgICAgICAgaWYgaWdub3JlX2Vycm9yOgogICAgICAgICAgICAgZXJyb3JfaGFuZGxlciA9
IHNlbGYuX2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IKICAgICAgICAgZWxzZToKICAgICAgICAgICAg
IGVycm9yX2hhbmRsZXIgPSBOb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVu
X2NvbW1hbmQoc2VsZi5fYWRiX2NvbW1hbmQgKyBjbWQsIGVycm9yX2hhbmRsZXI9ZXJyb3JfaGFu
ZGxlcikKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKHNlbGYu
X2FkYl9jb21tYW5kICsgY21kLCBlcnJvcl9oYW5kbGVyPWVycm9yX2hhbmRsZXIpCisgICAgICAg
IF9sb2cuZGVidWcoJ1J1biBhZGIgcmVzdWx0OlxuJyArIHJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdAogCiAgICAgZGVmIF9jb3B5X2RldmljZV9maWxlKHNlbGYsIGZyb21fZmlsZSwgdG9f
ZmlsZSwgaWdub3JlX2Vycm9yPUZhbHNlKToKICAgICAgICAgIyAnY3AnIGlzIHVuYXZhaWxhYmxl
IG9uIEFuZHJvaWQsIHNvIHVzZSAnZGQnIGluc3RlYWQuCkBAIC0zNDUsMTcgKzM4NCw3IEBAIGNs
YXNzIENocm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICBkZWYgX3B1bGxfZnJv
bV9kZXZpY2Uoc2VsZiwgZGV2aWNlX3BhdGgsIGhvc3RfcGF0aCwgaWdub3JlX2Vycm9yPUZhbHNl
KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3B1bGwnLCBkZXZpY2Vf
cGF0aCwgaG9zdF9wYXRoXSwgaWdub3JlX2Vycm9yKQogCi0gICAgZGVmIF9raWxsX2RldmljZV9w
cm9jZXNzKHNlbGYsIG5hbWUpOgotICAgICAgICBwc19yZXN1bHQgPSBzZWxmLl9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdwcyddKS5zcGxpdCgnXG4nKQotICAgICAgICBmb3IgbGluZSBpbiBw
c19yZXN1bHQ6Ci0gICAgICAgICAgICBpZiBsaW5lLmZpbmQobmFtZSkgPiAwOgotICAgICAgICAg
ICAgICAgIHBpZCA9IGxpbmUuc3BsaXQoKVsxXQotICAgICAgICAgICAgICAgIHNlbGYuX3J1bl9h
ZGJfY29tbWFuZChbJ3NoZWxsJywgJ2tpbGwnLCBwaWRdKQotCi0gICAgZGVmIGdldF9zdGRlcnIo
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdj
YXQnLCBERVZJQ0VfRFJUX1NUREVSUl0sIGlnbm9yZV9lcnJvcj1UcnVlKQotCi0gICAgZGVmIGdl
dF9sYXN0X3N0YWNrdHJhY2Uoc2VsZik6CisgICAgZGVmIF9nZXRfbGFzdF9zdGFja3RyYWNlKHNl
bGYpOgogICAgICAgICB0b21ic3RvbmVzID0gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwn
LCAnbHMnLCAnLW4nLCAnL2RhdGEvdG9tYnN0b25lcyddKQogICAgICAgICBpZiBub3QgdG9tYnN0
b25lcyBvciB0b21ic3RvbmVzLnN0YXJ0c3dpdGgoJy9kYXRhL3RvbWJzdG9uZXM6IE5vIHN1Y2gg
ZmlsZSBvciBkaXJlY3RvcnknKToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0RSVCBjcmFzaGVk
LCBidXQgbm8gdG9tYnN0b25lIGZvdW5kIScpCkBAIC0zNzYsNyArNDA1LDExIEBAIGNsYXNzIENo
cm9taXVtQW5kcm9pZFBvcnQoY2hyb21pdW0uQ2hyb20KICAgICAgICAgIyBVc2UgQW5kcm9pZCB0
b29sIHZlbmRvci9nb29nbGUvdG9vbHMvc3RhY2sgdG8gY29udmVydCB0aGUgcmF3CiAgICAgICAg
ICMgc3RhY2sgdHJhY2UgaW50byBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCwgaWYgbmVlZGVkLgog
ICAgICAgICAjIEl0IHRha2VzIGEgbG9uZyB0aW1lLCBzbyBkb24ndCBkbyBpdCBoZXJlLgotICAg
ICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAnY2F0JywgJy9kYXRh
L3RvbWJzdG9uZXMvJyArIGxhc3RfdG9tYnN0b25lWzZdXSkKKyAgICAgICAgcmV0dXJuICclc1xu
JXMnICUgKCcgJy5qb2luKGxhc3RfdG9tYnN0b25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2NhdCcsICcvZGF0YS90b21ic3Rv
bmVzLycgKyBsYXN0X3RvbWJzdG9uZVs2XV0pKQorCisgICAgZGVmIF9nZXRfbG9nY2F0KHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2FkYl9jb21tYW5kKFsnbG9nY2F0JywgJy1kJ10p
CiAKICAgICBkZWYgX3NldHVwX3BlcmZvcm1hbmNlKHNlbGYpOgogICAgICAgICAjIERpc2FibGUg
Q1BVIHNjYWxpbmcgYW5kIGRyb3AgcmFtIGNhY2hlIHRvIHJlZHVjZSBub2lzZSBpbiB0ZXN0cwpA
QCAtMzkxLDExOSArNDI0LDE2MiBAQCBjbGFzcyBDaHJvbWl1bUFuZHJvaWRQb3J0KGNocm9taXVt
LkNocm9tCiAKIAogY2xhc3MgQ2hyb21pdW1BbmRyb2lkRHJpdmVyKGNocm9taXVtLkNocm9taXVt
RHJpdmVyKToKKyAgICAjIFRoZSBjb250cm9sbGVyIG1heSBzdGFydCBtdWx0aXBsZSBkcml2ZXJz
IGR1cmluZyB0ZXN0LCBidXQgZm9yIG5vdyB3ZQorICAgICMgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBs
ZSBBbmRyb2lkIGFjdGl2aXRpZXMsIHNvIG9ubHkgb25lIGRyaXZlciBjYW4gYmUKKyAgICAjIHN0
YXJ0ZWQgYXQgYSB0aW1lLgorICAgIF9zdGFydGVkX2RyaXZlciA9IE5vbmUKKwogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91
dD1GYWxzZSk6CiAgICAgICAgIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9faW5pdF9fKHNlbGYs
IHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQotICAgICAgICBz
ZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCA9IE5vbmUKLSAgICAgICAgc2VsZi5fZHJ0X3JldHVybl9w
YXJzZXIgPSByZS5jb21waWxlKCcjRFJUX1JFVFVSTiAoXGQrKScpCisgICAgICAgIHNlbGYuX2lu
X2ZpZm9fcGF0aCA9IERSVF9BUFBfRklMRV9ESVIgKyAnRHVtcFJlbmRlclRyZWUuaW4nCisgICAg
ICAgIHNlbGYuX291dF9maWZvX3BhdGggPSBEUlRfQVBQX0ZJTEVfRElSICsgJ0R1bXBSZW5kZXJU
cmVlLm91dCcKKyAgICAgICAgc2VsZi5fZXJyX2ZpbGVfcGF0aCA9IERSVF9BUFBfRklMRV9ESVIg
KyAnRHVtcFJlbmRlclRyZWUuZXJyJworICAgICAgICBzZWxmLl9yZXN0YXJ0X2FmdGVyX2tpbGxl
ZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JlYWRfZmlmb19wcm9jID0gTm9uZQorCisgICAgZGVm
IF9jb21tYW5kX3dyYXBwZXIoY2xzLCB3cmFwcGVyX29wdGlvbik6CisgICAgICAgICMgSWdub3Jl
IGNvbW1hbmQgd3JhcHBlciB3aGljaCBpcyBub3QgYXBwbGljYWJsZSBvbiBBbmRyb2lkLgorICAg
ICAgICByZXR1cm4gW10KKworICAgIGRlZiBjbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVy
X3Rlc3RfYXJncyk6CisgICAgICAgIG9yaWdpbmFsX2NtZCA9IGNocm9taXVtLkNocm9taXVtRHJp
dmVyLmNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQorICAgICAgICBj
bWQgPSBbXQorICAgICAgICBmb3IgcGFyYW0gaW4gb3JpZ2luYWxfY21kOgorICAgICAgICAgICAg
aWYgcGFyYW0uc3RhcnRzd2l0aCgnLS1waXhlbC10ZXN0cz0nKToKKyAgICAgICAgICAgICAgICBz
ZWxmLl9kZXZpY2VfaW1hZ2VfcGF0aCA9IERSVF9BUFBfRklMRV9ESVIgKyBzZWxmLl9wb3J0Lmhv
c3QuZmlsZXN5c3RlbS5iYXNlbmFtZShzZWxmLl9pbWFnZV9wYXRoKQorICAgICAgICAgICAgICAg
IHBhcmFtID0gJy0tcGl4ZWwtdGVzdHM9JyArIHNlbGYuX2RldmljZV9pbWFnZV9wYXRoCisgICAg
ICAgICAgICBjbWQuYXBwZW5kKHBhcmFtKQorCisgICAgICAgIGNtZC5hcHBlbmQoJy0taW4tZmlm
bz0nICsgc2VsZi5faW5fZmlmb19wYXRoKQorICAgICAgICBjbWQuYXBwZW5kKCctLW91dC1maWZv
PScgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQorICAgICAgICBjbWQuYXBwZW5kKCctLWVyci1maWxl
PScgKyBzZWxmLl9lcnJfZmlsZV9wYXRoKQorICAgICAgICByZXR1cm4gY21kCisKKyAgICBkZWYg
X2ZpbGVfZXhpc3RzX29uX2RldmljZShzZWxmLCBmdWxsX2ZpbGVfcGF0aCk6CisgICAgICAgIGFz
c2VydCBmdWxsX2ZpbGVfcGF0aC5zdGFydHN3aXRoKCcvJykKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2xzJywgZnVsbF9maWxlX3BhdGhdKS5z
dHJpcCgpID09IGZ1bGxfZmlsZV9wYXRoCisKKyAgICBkZWYgX3RpbWVvdXRfa2lsbGVyKHNlbGYs
IHBpZHMsIHN0b3BfZXZlbnQpOgorICAgICAgICB0aW1lLnNsZWVwKERSVF9TVEFSVF9TVE9QX1RJ
TUVPVVRfU0VDUykKKyAgICAgICAgaWYgbm90IHN0b3BfZXZlbnQuaXNfc2V0KCk6CisgICAgICAg
ICAgICBmb3IgaSBpbiBwaWRzOgorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuX2V4ZWN1dGl2
ZS5raWxsX3Byb2Nlc3MoaSkKIAogICAgIGRlZiBfc3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBl
cl90ZXN0X2FyZ3MpOgotICAgICAgICAjIENvbnZlcnQgdGhlIG9yaWdpbmFsIGNvbW1hbmQgbGlu
ZSBpbnRvIHRvIHR3byBwYXJ0czoKLSAgICAgICAgIyAtIHRoZSAnYWRiIHNoZWxsJyBjb21tYW5k
IGxpbmUgdG8gc3RhcnQgYW4gaW50ZXJhY3RpdmUgYWRiIHNoZWxsOwotICAgICAgICAjIC0gdGhl
IER1bXBSZW5kZXJUcmVlIGNvbW1hbmQgbGluZSB0byBzZW5kIHRvIHRoZSBhZGIgc2hlbGwuCi0g
ICAgICAgIG9yaWdpbmFsX2NtZCA9IHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0
X2FyZ3MpCi0gICAgICAgIHNoZWxsX2NtZCA9IFtdCi0gICAgICAgIGRydF9hcmdzID0gW10KLSAg
ICAgICAgcGF0aF90b19kcml2ZXIgPSBzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZlcigpCi0gICAg
ICAgIHJlYWRpbmdfYXJnc19iZWZvcmVfZHJpdmVyID0gVHJ1ZQotICAgICAgICBmb3IgcGFyYW0g
aW4gb3JpZ2luYWxfY21kOgotICAgICAgICAgICAgaWYgcmVhZGluZ19hcmdzX2JlZm9yZV9kcml2
ZXI6Ci0gICAgICAgICAgICAgICAgaWYgcGFyYW0gPT0gcGF0aF90b19kcml2ZXI6Ci0gICAgICAg
ICAgICAgICAgICAgIHJlYWRpbmdfYXJnc19iZWZvcmVfZHJpdmVyID0gRmFsc2UKLSAgICAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzaGVsbF9jbWQuYXBwZW5kKHBhcmFt
KQorICAgICAgICBpZiBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyOgorICAg
ICAgICAgICAgQ2hyb21pdW1BbmRyb2lkRHJpdmVyLl9zdGFydGVkX2RyaXZlci5zdG9wKCkKKwor
ICAgICAgICBDaHJvbWl1bUFuZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyID0gc2VsZgorCisg
ICAgICAgIHNlbGYuX3BvcnQuX3J1bl9hZGJfY29tbWFuZChbJ2xvZ2NhdCcsICctYyddKQorICAg
ICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdlY2hvJ10gKyBzZWxm
LmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSArIFsnPicsIENPTU1BTkRfTElO
RV9GSUxFXSkKKyAgICAgICAgc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5kKFsnc2hlbGwnLCAn
YW0nLCAnc3RhcnQnLCAnLW4nLCBEUlRfQUNUSVZJVFlfRlVMTF9OQU1FXSkKKyAgICAgICAgc2Vj
b25kcyA9IDAKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX2ZpbGVfZXhpc3RzX29uX2RldmljZShz
ZWxmLl9pbl9maWZvX3BhdGgpIG9yIG5vdCBzZWxmLl9maWxlX2V4aXN0c19vbl9kZXZpY2Uoc2Vs
Zi5fb3V0X2ZpZm9fcGF0aCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAg
ICBzZWNvbmRzICs9IDEKKyAgICAgICAgICAgIGlmIHNlY29uZHMgPT0gRFJUX1NUQVJUX1NUT1Bf
VElNRU9VVF9TRUNTOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBzdGFy
dCBEdW1wUmVuZGVyVHJlZUFwcGxpY2F0aW9uLiBMb2c6XG4nICsgc2VsZi5fcG9ydC5fZ2V0X2xv
Z2NhdCgpKQorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGYWlsZWQgdG8g
c3RhcnQgRHVtcFJlbmRlclRyZWUgYXBwbGljYXRpb24uJykKKworICAgICAgICBzaGVsbF9jbWQg
PSBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZCArIFsnc2hlbGwnXQorICAgICAgICBleGVjdXRpdmUg
PSBzZWxmLl9wb3J0Ll9leGVjdXRpdmUKKyAgICAgICAgIyBTdGFydCBhIHByb2Nlc3MgdG8gc2Vu
ZCBjb21tYW5kIHRocm91Z2ggdGhlIGlucHV0IGZpZm8gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGFw
cC4KKyAgICAgICAgIyBUaGlzIHByb2Nlc3MgbXVzdCBiZSBydW4gYXMgYW4gaW50ZXJhY3RpdmUg
YWRiIHNoZWxsIGJlY2F1c2UgdGhlIG5vcm1hbCBhZGIgc2hlbGwgZG9lc24ndCBzdXBwb3J0IHN0
ZGluLgorICAgICAgICBzZWxmLl9wcm9jID0gZXhlY3V0aXZlLnBvcGVuKHNoZWxsX2NtZCwgc3Rk
aW49ZXhlY3V0aXZlLlBJUEUsIHN0ZG91dD1leGVjdXRpdmUuUElQRSwgdW5pdmVyc2FsX25ld2xp
bmVzPVRydWUpCisgICAgICAgICMgUmVhZCBiYWNrIHRoZSBzaGVsbCBwcm9tcHQgdG8gZW5zdXJl
IGFkYiBzaGVsbCByZWFkeS4KKyAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoKQorICAgICAgICBf
bG9nLmRlYnVnKCdJbnRlcmFjdGl2ZSBzaGVsbCBzdGFydGVkJykKKworICAgICAgICAjIFN0YXJ0
IGEgcHJvY2VzcyB0byByZWFkIGZyb20gdGhlIG91dHB1dCBmaWZvIG9mIHRoZSBEdW1wUmVuZGVy
VHJlZSBhcHAgYW5kIHByaW50IHRvIHN0ZG91dC4KKyAgICAgICAgX2xvZy5kZWJ1ZygnUmVkaXJl
Y3Rpbmcgc3Rkb3V0IHRvICcgKyBzZWxmLl9vdXRfZmlmb19wYXRoKQorICAgICAgICBzZWxmLl9y
ZWFkX2ZpZm9fcHJvYyA9IGV4ZWN1dGl2ZS5wb3BlbihzaGVsbF9jbWQgKyBbJ2NhdCcsIHNlbGYu
X291dF9maWZvX3BhdGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9ZXhlY3V0aXZlLlBJUEUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQor
CisgICAgICAgIF9sb2cuZGVidWcoJ1JlZGlyZWN0aW5nIHN0ZGluIHRvICcgKyBzZWxmLl9pbl9m
aWZvX3BhdGgpCisgICAgICAgIChsaW5lLCBjcmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5kX2Fu
ZF9yZWFkX2xpbmUoJ2NhdCA+JXNcbicgJSBzZWxmLl9pbl9maWZvX3BhdGgpCisKKyAgICAgICAg
IyBDb21iaW5lIHRoZSB0d28gdW5pZGlyZWN0aW9uYWwgcGlwZXMgaW50byBvbmUgYmlkaXJlY3Rp
b25hbCBwaXBlIHRvIG1ha2UgX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGluZSgpIGV0YworICAg
ICAgICAjIHdvcmsgd2l0aCBzZWxmLl9wcm9jLgorICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5j
bG9zZSgpCisgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0ID0gc2VsZi5fcmVhZF9maWZvX3Byb2Mu
c3Rkb3V0CisKKyAgICAgICAgIyBTdGFydCBhIHRocmVhZCB0byBraWxsIHRoZSBwaXBlIHJlYWRl
ciBhbmQgd3JpdGVyIHByb2Nlc3NlcyBvbiBkZWFkbG9jayBvZiB0aGUgZmlmb3MgZHVyaW5nIHN0
YXJ0dXAuCisgICAgICAgIHN0b3Bfa2lsbGVyX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAg
ICAgICAga2lsbGVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuX3RpbWVv
dXRfa2lsbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
PShbc2VsZi5fcHJvYy5waWQsIHNlbGYuX3JlYWRfZmlmb19wcm9jLnBpZF0sIHN0b3Bfa2lsbGVy
X2V2ZW50KSkKKyAgICAgICAga2lsbGVyX3RocmVhZC5zdGFydCgpCisKKyAgICAgICAgb3V0cHV0
ID0gJycKKyAgICAgICAgd2hpbGUgbm90IGNyYXNoIGFuZCBsaW5lLnJzdHJpcCgpICE9ICcjUkVB
RFknOgorICAgICAgICAgICAgaWYgbGluZSA9PSAnJzogICMgRU9GIG9yIGNyYXNoZWQKKyAgICAg
ICAgICAgICAgICBjcmFzaCA9IFRydWUKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgaWYgcGFyYW0uc3RhcnRzd2l0aCgnLS1waXhlbC10ZXN0cz0nKToKLSAgICAgICAgICAgICAg
ICAgICAgaWYgbm90IHNlbGYuX2RldmljZV9pbWFnZV9wYXRoOgotICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZGV2aWNlX2ltYWdlX3BhdGggPSBERVZJQ0VfRFJUX0RJUiArIHNlbGYuX3Bv
cnQuaG9zdC5maWxlc3lzdGVtLmJhc2VuYW1lKHNlbGYuX2ltYWdlX3BhdGgpCi0gICAgICAgICAg
ICAgICAgICAgIHBhcmFtID0gJy0tcGl4ZWwtdGVzdHM9JyArIHNlbGYuX2RldmljZV9pbWFnZV9w
YXRoCi0gICAgICAgICAgICAgICAgZHJ0X2FyZ3MuYXBwZW5kKHBhcmFtKQotCi0gICAgICAgIHNo
ZWxsX2NtZCArPSBzZWxmLl9wb3J0Ll9hZGJfY29tbWFuZAotICAgICAgICBzaGVsbF9jbWQuYXBw
ZW5kKCdzaGVsbCcpCi0gICAgICAgIHJldHJpZXMgPSAwCi0gICAgICAgIHdoaWxlIFRydWU6Ci0g
ICAgICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBhZGIgc2hlbGwgZm9yIER1bXBSZW5kZXJU
cmVlOiAnICsgJyAnLmpvaW4oc2hlbGxfY21kKSkKLSAgICAgICAgICAgIGV4ZWN1dGl2ZSA9IHNl
bGYuX3BvcnQuaG9zdC5leGVjdXRpdmUKLSAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBleGVjdXRp
dmUucG9wZW4oc2hlbGxfY21kLCBzdGRpbj1leGVjdXRpdmUuUElQRSwgc3Rkb3V0PWV4ZWN1dGl2
ZS5QSVBFLCBzdGRlcnI9ZXhlY3V0aXZlLlNURE9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVl
KQotICAgICAgICAgICAgIyBSZWFkIGJhY2sgdGhlIHNoZWxsIHByb21wdCB0byBlbnN1cmUgYWRi
IHNoZWxsIHJlYWR5LgotICAgICAgICAgICAgc2VsZi5fcmVhZF9wcm9tcHQoKQotICAgICAgICAg
ICAgIyBTb21lIHRlc3RzIHJlbHkgb24gdGhpcyB0byBwcm9kdWNlIHByb3BlciBudW1iZXIgZm9y
bWF0IGV0Yy4sCi0gICAgICAgICAgICAjIGUuZy4gZmFzdC9zcGVlY2gvaW5wdXQtYXBwZWFyYW5j
ZS1udW1iZXJhbmRzcGVlY2guaHRtbC4KLSAgICAgICAgICAgIHNlbGYuX3dyaXRlX2NvbW1hbmRf
YW5kX3JlYWRfbGluZSgiZXhwb3J0IExDX0NUWVBFPSdlbl9VUydcbiIpCi0gICAgICAgICAgICBz
ZWxmLl93cml0ZV9jb21tYW5kX2FuZF9yZWFkX2xpbmUoImV4cG9ydCBDTEFTU1BBVEg9Jy9kYXRh
L2RydC9EdW1wUmVuZGVyVHJlZS5qYXInXG4iKQotCi0gICAgICAgICAgICAjIFdoZW4gRHVtcFJl
bmRlclRyZWUgY3Jhc2hlcywgdGhlIEFuZHJvaWQgZGVidWdnZXJkIHdpbGwgc3RvcCB0aGUKLSAg
ICAgICAgICAgICMgcHJvY2VzcyBiZWZvcmUgZHVtcGluZyBzdGFjayB0byBsb2cvdG9tYnN0b25l
IGZpbGUgYW5kIHRlcm1pbmF0aW5nCi0gICAgICAgICAgICAjIHRoZSBwcm9jZXNzLiBTbGVlcCAx
IHNlY29uZCAobG9uZyBlbm91Z2ggZm9yIGRlYnVnZ2VyZCB0byBkdW1wCi0gICAgICAgICAgICAj
IHN0YWNrKSBiZWZvcmUgZXhpdGluZyB0aGUgc2hlbGwgdG8gZW5zdXJlIHRoZSBwcm9jZXNzIGhh
cyBxdWl0LAotICAgICAgICAgICAgIyBvdGhlcndpc2UgdGhlIGV4aXQgd2lsbCBmYWlsIGJlY2F1
c2UgIllvdSBoYXZlIHN0b3BwZWQgam9icyIuCi0gICAgICAgICAgICBkcnRfY21kID0gJyVzICVz
IDI+JXM7ZWNobyAiI0RSVF9SRVRVUk4gJD8iO3NsZWVwIDE7ZXhpdFxuJyAlIChERVZJQ0VfRFJU
X1BBVEgsICcgJy5qb2luKGRydF9hcmdzKSwgREVWSUNFX0RSVF9TVERFUlIpCi0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCdTdGFydGluZyBEdW1wUmVuZGVyVHJlZTogJyArIGRydF9jbWQpCi0KLSAg
ICAgICAgICAgICMgV2FpdCB1bnRpbCBEUlQgZWNob3MgJyNSRUFEWScuCi0gICAgICAgICAgICBv
dXRwdXQgPSAnJwotICAgICAgICAgICAgKGxpbmUsIGNyYXNoKSA9IHNlbGYuX3dyaXRlX2NvbW1h
bmRfYW5kX3JlYWRfbGluZShkcnRfY21kKQotICAgICAgICAgICAgd2hpbGUgbm90IGNyYXNoIGFu
ZCBsaW5lLnJzdHJpcCgpICE9ICcjUkVBRFknOgotICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0g
Jyc6ICAjIEVPRiBvciBjcmFzaGVkCi0gICAgICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQot
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBsaW5l
Ci0gICAgICAgICAgICAgICAgICAgIChsaW5lLCBjcmFzaCkgPSBzZWxmLl93cml0ZV9jb21tYW5k
X2FuZF9yZWFkX2xpbmUoKQorICAgICAgICAgICAgICAgIG91dHB1dCArPSBsaW5lCisgICAgICAg
ICAgICAgICAgKGxpbmUsIGNyYXNoKSA9IHNlbGYuX3dyaXRlX2NvbW1hbmRfYW5kX3JlYWRfbGlu
ZSgpCiAKICAgICAgICAgICAgIGlmIGNyYXNoOgotICAgICAgICAgICAgICAgICMgU29tZXRpbWVz
IHRoZSBkZXZpY2UgaXMgaW4gdW5zdGFibGUgc3RhdGUgKG1heSBiZSBvdXQgb2YKLSAgICAgICAg
ICAgICAgICAjIG1lbW9yeT8pIGFuZCBraWxscyBEdW1wUmVuZGVyVHJlZSBqdXN0IGFmdGVyIGl0
IGlzIHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgIyBUcnkgdG8gc3RvcCBhbmQgc3RhcnQgaXQg
YWdhaW4uCi0gICAgICAgICAgICAgICAgX2xvZy5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IER1bXBS
ZW5kZXJUcmVlOiBcbiVzXG4lc1xuJyAlIChvdXRwdXQsIHNlbGYuX3BvcnQuZ2V0X3N0ZGVycigp
KSkKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgRHVtcFJlbmRl
clRyZWU6IFxuJXNcbkxvZzpcbiVzJyAlIChvdXRwdXQsIHNlbGYuX3BvcnQuX2dldF9sb2djYXQo
KSkpCiAgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKLSAgICAgICAgICAgICAgICByZXRyaWVz
ICs9IDEKLSAgICAgICAgICAgICAgICBpZiByZXRyaWVzID4gMjoKLSAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0ZhaWxlZCBtdWx0aXBsZSB0aW1lcyB0byBzdGFydCBE
dW1wUmVuZGVyVHJlZScpCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0Zh
aWxlZCB0byBzdGFydCBEdW1wUmVuZGVyVHJlZSBhcHBsaWNhdGlvbicpCiAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICMgU3RhcnR1cCBzdWNjZWVkZWQuCisgICAgICAgICAgICAg
ICAgc3RvcF9raWxsZXJfZXZlbnQuc2V0KCkKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAg
IGRlZiBydW5fdGVzdChzZWxmLCBkcml2ZXJfaW5wdXQpOgogICAgICAgICBkcml2ZXJfb3V0cHV0
ID0gY2hyb21pdW0uQ2hyb21pdW1Ecml2ZXIucnVuX3Rlc3Qoc2VsZiwgZHJpdmVyX2lucHV0KQot
Ci0gICAgICAgIGRydF9yZXR1cm4gPSBzZWxmLl9nZXRfZHJ0X3JldHVybl92YWx1ZShkcml2ZXJf
b3V0cHV0LmVycm9yKQotICAgICAgICBpZiBkcnRfcmV0dXJuIGlzIG5vdCBOb25lOgotICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnRHVtcFJlbmRlclRyZWUgcmV0dXJuIHZhbHVlOiAlZCcgJSBkcnRf
cmV0dXJuKQotICAgICAgICAjIEZJWE1FOiBSZXRyaWV2ZSBzdGRlcnIgZnJvbSB0aGUgdGFyZ2V0
LgogICAgICAgICBpZiBkcml2ZXJfb3V0cHV0LmNyYXNoOgotICAgICAgICAgICAgIyBXaGVuIEFu
ZHJvaWQgaXMgT09NLCBpdCBzZW5kcyBhIFNJR0tJTEwgc2lnbmFsIHRvIERSVC4gRFJUCi0gICAg
ICAgICAgICAjIGlzIHN0b3BwZWQgc2lsZW50bHkgYW5kIHJlZ2FyZGVkIGFzIGNyYXNoZWQuIFJl
LXJ1biB0aGUgdGVzdCBmb3IKKyAgICAgICAgICAgICMgV2hlbiBBbmRyb2lkIGlzIE9PTSwgRFJU
IHByb2Nlc3MgbWF5IGJlIGtpbGxlZCBieSBBY3Rpdml0eU1hbmFnZXIgb3Igc3lzdGVtIE9PTS4K
KyAgICAgICAgICAgICMgSXQgbG9va3MgbGlrZSBhIGNyYXNoIGJ1dCB0aGVyZSBpcyBubyBmYXRh
bCBzaWduYWwgbG9nZ2VkLiBSZS1ydW4gdGhlIHRlc3QgZm9yCiAgICAgICAgICAgICAjIHN1Y2gg
Y3Jhc2guCi0gICAgICAgICAgICBpZiBkcnRfcmV0dXJuID09IDEyOCArIHNpZ25hbC5TSUdLSUxM
OgorICAgICAgICAgICAgIyBUbyB0ZXN0OiBhZGIgc2hlbGwgYW0gZm9yY2Utc3RvcCBvcmcuY2hy
b21pdW0ubmF0aXZlX3Rlc3QsCisgICAgICAgICAgICAjIG9yIGtpbGwgLTExIHBpZCB0d2ljZSBv
ciB0aHJlZSB0aW1lcyB0byBzaW11bGF0ZSBhIGZhdGFsIGNyYXNoLgorICAgICAgICAgICAgaWYg
c2VsZi5fcG9ydC5fZ2V0X2xvZ2NhdCgpLmZpbmQoJ0ZhdGFsIHNpZ25hbCcpID09IC0xOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWZ0ZXJfa2lsbGVkID0gVHJ1ZQogICAgICAgICAg
ICAgICAgIHNlbGYuX3BvcnQuX2RydF9yZXRyeV9hZnRlcl9raWxsZWQgKz0gMQogICAgICAgICAg
ICAgICAgIGlmIHNlbGYuX3BvcnQuX2RydF9yZXRyeV9hZnRlcl9raWxsZWQgPiAxMDoKICAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtp
bGxlZCBieSBBbmRyb2lkIGZvciB0b28gbWFueSB0aW1lcyEnKQotICAgICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtpbGxlZCBieSBTSUdLSUxMLiBSZXRyeSB0aGUg
dGVzdCAoJWQpLicgJSBzZWxmLl9wb3J0Ll9kcnRfcmV0cnlfYWZ0ZXJfa2lsbGVkKQorICAgICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJ0R1bXBSZW5kZXJUcmVlIGlzIGtpbGxlZCBieSBzeXN0ZW0g
KCVkKS4nICUgc2VsZi5fcG9ydC5fZHJ0X3JldHJ5X2FmdGVyX2tpbGxlZCkKICAgICAgICAgICAg
ICAgICBzZWxmLnN0b3AoKQogICAgICAgICAgICAgICAgICMgU2xlZXAgMTAgc2Vjb25kcyB0byBs
ZXQgc3lzdGVtIHJlY292ZXIuCiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5ydW5fdGVzdChkcml2ZXJfaW5wdXQpCi0gICAgICAgICAg
ICAjIEZldGNoIHRoZSBzdGFjayB0cmFjZSBmcm9tIHRoZSB0b21ic3RvbmUgZmlsZS4KLSAgICAg
ICAgICAgICMgRklYTUU6IHNvbWV0aW1lcyB0aGUgY3Jhc2ggZG9lc24ndCByZWFsbHkgaGFwcGVu
IHNvIHRoYXQgbm8KLSAgICAgICAgICAgICMgdG9tYnN0b25lIGlzIGdlbmVyYXRlZC4gSW4gdGhh
dCBjYXNlIHdlIGZldGNoIHRoZSB3cm9uZyBzdGFjawotICAgICAgICAgICAgIyB0cmFjZS4KLSAg
ICAgICAgICAgIGRyaXZlcl9vdXRwdXQuZXJyb3IgKz0gc2VsZi5fcG9ydC5nZXRfbGFzdF9zdGFj
a3RyYWNlKCkuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKQotICAgICAgICAgICAgZHJpdmVyX291
dHB1dC5lcnJvciArPSBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydsb2djYXQnLCAnLWQn
XSkuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKQorCisgICAgICAgIHNlbGYuX3Jlc3RhcnRfYWZ0
ZXJfa2lsbGVkID0gRmFsc2UKKyAgICAgICAgZHJpdmVyX291dHB1dC5lcnJvciArPSBzZWxmLl9n
ZXRfc3RkZXJyKCkKICAgICAgICAgcmV0dXJuIGRyaXZlcl9vdXRwdXQKIAogICAgIGRlZiBzdG9w
KHNlbGYpOgotICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBEdW1wUmVuZGVyVHJlZScpCisg
ICAgICAgIGlmIENocm9taXVtQW5kcm9pZERyaXZlci5fc3RhcnRlZF9kcml2ZXIgIT0gc2VsZiBv
ciBub3Qgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBDaHJvbWl1bUFu
ZHJvaWREcml2ZXIuX3N0YXJ0ZWRfZHJpdmVyID0gTm9uZQorCisgICAgICAgIHNlbGYuX3BvcnQu
X3J1bl9hZGJfY29tbWFuZChbJ3NoZWxsJywgJ2FtJywgJ2ZvcmNlLXN0b3AnLCBEUlRfQVBQX1BB
Q0tBR0VdKQorICAgICAgICBzZWNvbmRzID0gMAorICAgICAgICB3aGlsZSBzZWxmLl9maWxlX2V4
aXN0c19vbl9kZXZpY2Uoc2VsZi5faW5fZmlmb19wYXRoKSBvciBzZWxmLl9maWxlX2V4aXN0c19v
bl9kZXZpY2Uoc2VsZi5fb3V0X2ZpZm9fcGF0aCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDEp
CisgICAgICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2NvbW1hbmQoWydzaGVsbCcsICdybScs
IHNlbGYuX2luX2ZpZm9fcGF0aF0pCisgICAgICAgICAgICBzZWxmLl9wb3J0Ll9ydW5fYWRiX2Nv
bW1hbmQoWydzaGVsbCcsICdybScsIHNlbGYuX291dF9maWZvX3BhdGhdKQorICAgICAgICAgICAg
c2Vjb25kcyArPSAxCisgICAgICAgICAgICBpZiBzZWNvbmRzID09IERSVF9TVEFSVF9TVE9QX1RJ
TUVPVVRfU0VDUzoKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRmFpbGVk
IHRvIHJlbW92ZSBmaWZvIGZpbGVzLiBNYXkgYmUgbG9ja2VkLicpCisKKyAgICAgICAgaWYgc2Vs
Zi5fcmVhZF9maWZvX3Byb2M6CisgICAgICAgICAgICBzZWxmLl9wb3J0Ll9leGVjdXRpdmUua2ls
bF9wcm9jZXNzKHNlbGYuX3JlYWRfZmlmb19wcm9jLnBpZCkKKyAgICAgICAgICAgIHNlbGYuX3Jl
YWRfZmlmb19wcm9jID0gTm9uZQorCisgICAgICAgICMgSGVyZSBkdXBsaWNhdGUgc29tZSBsb2dp
YyBpbiBDaHJvbWl1bURyaXZlci5zdG9wKCkgaW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGl0
LAorICAgICAgICAjIGJlY2F1c2Ugb3VyIER1bXBSZW5kZXJUcmVlIGFwcCBwcm9jZXNzIHdvbid0
IHF1aXQgYnkgaXRzZWxmIG9uIGNsb3NlIG9mIHRoZSBwaXBlcy4KICAgICAgICAgaWYgc2VsZi5f
cHJvYzoKLSAgICAgICAgICAgICMgU2VuZCBhbiBleHBsaWNpdCBRVUlUIGNvbW1hbmQgYmVjYXVz
ZSBjbG9zaW5nIHRoZSBwaXBlIGNhbid0IGxldAotICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJl
ZSBvbiBBbmRyb2lkIHF1aXQgaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0ZSgnUVVJVFxuJykKLSAgICAgICAgICAgIGV4
Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgICMgVGhlIHBpcGUgaGFzIGFscmVhZHkgYmVl
biBjbG9zZWQsIGluZGljYXRpbmcgYWJub3JtYWwKLSAgICAgICAgICAgICAgICAjIHNpdHVhdGlv
biBvY2N1cnJlZC4gV2FpdCBhIHdoaWxlIHRvIGFsbG93IHRoZSBkZXZpY2UgdG8KLSAgICAgICAg
ICAgICAgICAjIHJlY292ZXIuICpmaW5nZXJzIGNyb3NzZWQqCi0gICAgICAgICAgICAgICAgdGlt
ZS5zbGVlcCgxKQotICAgICAgICBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5zdG9wKHNlbGYpCisg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3By
b2Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYu
X3BvcnQuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcHJvYy5waWQpCisgICAgICAgICAg
ICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9wcm9jLndhaXQoKQorICAgICAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKIAogICAgIGRlZiBf
dGVzdF9zaGVsbF9jb21tYW5kKHNlbGYsIHVyaSwgdGltZW91dF9tcywgY2hlY2tzdW0pOgogICAg
ICAgICBpZiB1cmkuc3RhcnRzd2l0aCgnZmlsZTovLy8nKToKQEAgLTUxNywzMCArNTkzLDI1IEBA
IGNsYXNzIENocm9taXVtQW5kcm9pZERyaXZlcihjaHJvbWl1bS5DaHIKICAgICBkZWYgX3dyaXRl
X2NvbW1hbmRfYW5kX3JlYWRfbGluZShzZWxmLCBpbnB1dD1Ob25lKToKICAgICAgICAgKGxpbmUs
IGNyYXNoKSA9IGNocm9taXVtLkNocm9taXVtRHJpdmVyLl93cml0ZV9jb21tYW5kX2FuZF9yZWFk
X2xpbmUoc2VsZiwgaW5wdXQpCiAgICAgICAgIHVybF9tYXJrZXIgPSAnI1VSTDonCi0gICAgICAg
IGlmIG5vdCBjcmFzaCBhbmQgbGluZS5zdGFydHN3aXRoKHVybF9tYXJrZXIpIGFuZCBsaW5lLmZp
bmQoRklMRV9URVNUX1VSSV9QUkVGSVgpID09IGxlbih1cmxfbWFya2VyKToKLSAgICAgICAgICAg
ICMgQ29udmVydCB0aGUgZGV2aWNlIHRlc3QgdXJpIGJhY2sgdG8gaG9zdCB1cmkgb3RoZXJ3aXNl
Ci0gICAgICAgICAgICAjIGNocm9taXVtLkNocm9taXVtRHJpdmVyLnJ1bl90ZXN0KCkgd2lsbCBj
b21wbGFpbi4KLSAgICAgICAgICAgIGxpbmUgPSAnI1VSTDpmaWxlOi8vJXMvJXMnICUgKHNlbGYu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBsaW5lW2xlbih1cmxfbWFya2VyKSArIGxlbihGSUxF
X1RFU1RfVVJJX1BSRUZJWCk6XSkKLSAgICAgICAgaWYgbm90IGNyYXNoIGFuZCBzZWxmLl9oYXNf
Y3Jhc2hfaGludChsaW5lKToKLSAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQorICAgICAgICBpZiBu
b3QgY3Jhc2g6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgodXJsX21hcmtlcikgYW5k
IGxpbmUuZmluZChGSUxFX1RFU1RfVVJJX1BSRUZJWCkgPT0gbGVuKHVybF9tYXJrZXIpOgorICAg
ICAgICAgICAgICAgICMgQ29udmVydCB0aGUgZGV2aWNlIHRlc3QgdXJpIGJhY2sgdG8gaG9zdCB1
cmkgb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgIyBjaHJvbWl1bS5DaHJvbWl1bURyaXZlci5y
dW5fdGVzdCgpIHdpbGwgY29tcGxhaW4uCisgICAgICAgICAgICAgICAgbGluZSA9ICcjVVJMOmZp
bGU6Ly8lcy8lcycgJSAoc2VsZi5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIGxpbmVbbGVuKHVy
bF9tYXJrZXIpICsgbGVuKEZJTEVfVEVTVF9VUklfUFJFRklYKTpdKQorICAgICAgICAgICAgIyBj
aHJvbWl1bS5weSB1c2VzICJsaW5lID09ICcnIGFuZCBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3Qg
Tm9uZSIgdG8gZGV0ZWN0IGNyYXNoLAorICAgICAgICAgICAgIyBidXQgd2UgaGF2ZSBldmVyIHNl
ZW4gImxpbmUgPT0gJycgYW5kIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUiIHdoZW4gdGhlIGFw
cCBjcmFzaGVzLgorICAgICAgICAgICAgaWYgbGluZSA9PSAnJzoKKyAgICAgICAgICAgICAgICBj
cmFzaCA9IFRydWUKICAgICAgICAgcmV0dXJuIChsaW5lLCBjcmFzaCkKIAogICAgIGRlZiBfb3V0
cHV0X2ltYWdlKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoOgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygncHVsbGluZyBmcm9tIGRldmljZTogJXMgdG8gJXMnICUgKHNlbGYuX2Rl
dmljZV9pbWFnZV9wYXRoLCBzZWxmLl9pbWFnZV9wYXRoKSkKKyAgICAgICAgICAgIF9sb2cuZGVi
dWcoJ1B1bGxpbmcgZnJvbSBkZXZpY2U6ICVzIHRvICVzJyAlIChzZWxmLl9kZXZpY2VfaW1hZ2Vf
cGF0aCwgc2VsZi5faW1hZ2VfcGF0aCkpCiAgICAgICAgICAgICBzZWxmLl9wb3J0Ll9wdWxsX2Zy
b21fZGV2aWNlKHNlbGYuX2RldmljZV9pbWFnZV9wYXRoLCBzZWxmLl9pbWFnZV9wYXRoLCBpZ25v
cmVfZXJyb3I9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGNocm9taXVtLkNocm9taXVtRHJpdmVyLl9v
dXRwdXRfaW1hZ2Uoc2VsZikKIAotICAgIGRlZiBfaGFzX2NyYXNoX2hpbnQoc2VsZiwgbGluZSk6
Ci0gICAgICAgICMgV2hlbiBEUlQgY3Jhc2hlcywgaXQgc2VuZHMgYSBzaWduYWwgdG8gQW5kcm9p
ZCBEZWJ1Z2dlcmQsIGxpa2UKLSAgICAgICAgIyBTSUdTRUdWLCBTSUdGUEUsIGV0Yy4gV2hlbiBE
ZWJ1Z2dlcmQgcmVjZWl2ZXMgdGhlIHNpZ25hbCwgaXQgc3RvcHMgRFJUCi0gICAgICAgICMgKHdo
aWNoIGNhdXNlcyBTaGVsbCB0byBvdXRwdXQgYSBtZXNzYWdlKSwgYW5kIGR1bXBzIHRoZSBzdGFj
ayBzdHJhY2UuCi0gICAgICAgICMgV2UgdXNlIHRoZSBTaGVsbCBvdXRwdXQgYXMgYSBjcmFzaCBo
aW50LgotICAgICAgICByZXR1cm4gbGluZSBpcyBub3QgTm9uZSBhbmQgbGluZS5maW5kKCdbMV0g
KyBTdG9wcGVkIChzaWduYWwpJykgPj0gMAotCi0gICAgZGVmIF9nZXRfZHJ0X3JldHVybl92YWx1
ZShzZWxmLCBlcnJvcik6Ci0gICAgICAgIHJldHVybl9tYXRjaCA9IHNlbGYuX2RydF9yZXR1cm5f
cGFyc2VyLnNlYXJjaChlcnJvcikKLSAgICAgICAgcmV0dXJuIE5vbmUgaWYgKHJldHVybl9tYXRj
aCBpcyBOb25lKSBlbHNlIGludChyZXR1cm5fbWF0Y2guZ3JvdXAoMSkpCisgICAgZGVmIF9nZXRf
c3RkZXJyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5fcnVuX2FkYl9jb21tYW5k
KFsnc2hlbGwnLCAnY2F0Jywgc2VsZi5fZXJyX2ZpbGVfcGF0aF0sIGlnbm9yZV9lcnJvcj1UcnVl
KQogCiAgICAgZGVmIF9yZWFkX3Byb21wdChzZWxmKToKICAgICAgICAgbGFzdF9jaGFyID0gJycK
</data>

          </attachment>
      

    </bug>

</bugzilla>