Subject: Re: rc.d (some debates never die :-) (Re: NetBSD 1.5 on uVAX II
To: Brian Chase <bdc@world.std.com>
From: David Brownlee <abs@netbsd.org>
List: port-vax
Date: 12/28/2000 13:43:26
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--0-724733992-978011006=:404
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Thu, 28 Dec 2000, Brian Chase wrote:

> I've still not looked at it yet, but is there some way we could still have
> the functionality of the individual rc.d script without invoking a new
> shell to run each script?  Could they all be executed using a single shell
> and some clever sourcing using the Bourne "." command?

	"Its funny you should mention that..."

	I've just been playing with rc.subr (sample attached), and on
	my 1.5 sparc box (no vaxen at work :/), the time taken to process
	rc.d dropped from 41 to 35 seconds.

	Can someone on a CPU/memory challenged vax could drop the modified
	rc.subr over their /etc/rc.subr and time a boot?

	(I find adding a 'date' to /etc/rc just before 'for i in $files'
	and diffing with the final date in the bootup useful :)

		David/absolute		-- www.netbsd.org: No hype required --




--0-724733992-978011006=:404
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="rc.subr"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.NEB.4.30.0012281343260.404@odysseus.int.purplei.com>
Content-Description: 
Content-Disposition: attachment; filename="rc.subr"

IyAkTmV0QlNEOiByYy5zdWJyLHYgMS4yMC4yLjQgMjAwMC8xMC8wMiAwMTow
Mjo0OSBsdWtlbSBFeHAgJA0KIw0KIyBDb3B5cmlnaHQgKGMpIDE5OTctMjAw
MCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4NCiMgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4NCiMNCiMgVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0
d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24NCiMg
YnkgTHVrZSBNZXdidXJuLg0KIw0KIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQN
CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQojIGFyZSBtZXQ6DQojIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0DQojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQNCiMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQ0KIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KIyAzLiBBbGwg
YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig
dXNlIG9mIHRoaXMgc29mdHdhcmUNCiMgICAgbXVzdCBkaXNwbGF5IHRoZSBm
b2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0KIyAgICAgICAgVGhpcyBwcm9k
dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNE
DQojICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0
b3JzLg0KIyA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91
bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KIyAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQNCiMgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KIw0KIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwg
SU5DLiBBTkQgQ09OVFJJQlVUT1JTDQojIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRA0KIyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0K
IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTDQojIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1INCiMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCiMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQojIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElODQojIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQoj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQojIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLg0KIw0KIyByYy5zdWJyDQojCWZ1bmN0aW9ucyB1
c2VkIGJ5IHZhcmlvdXMgcmMgc2NyaXB0cw0KIw0KDQojDQojCWZ1bmN0aW9u
cw0KIwktLS0tLS0tLS0NCg0KIw0KIyBjaGVja3llc25vIHZhcg0KIwlUZXN0
ICQxIHZhcmlhYmxlLCBhbmQgd2FybiBpZiBub3Qgc2V0IHRvIFlFUyBvciBO
Ty4NCiMJUmV0dXJuIDAgaWYgaXQncyAieWVzIiAoZXQgYWwpLCBub256ZXJv
IG90aGVyd2lzZS4NCiMNCmNoZWNreWVzbm8oKQ0Kew0KCWV2YWwgX3ZhbHVl
PVwkJHsxfQ0KCWNhc2UgJF92YWx1ZSBpbg0KDQoJCSMJInllcyIsICJ0cnVl
IiwgIm9uIiwgb3IgIjEiDQoJW1l5XVtFZV1bU3NdfFtUdF1bUnJdW1V1XVtF
ZV18W09vXVtObl18MSkNCgkJcmV0dXJuIDANCgkJOzsNCg0KCQkjCSJubyIs
ICJmYWxzZSIsICJvZmYiLCBvciAiMCINCglbTm5dW09vXXxbRmZdW0FhXVtM
bF1bU3NdW0VlXXxbT29dW0ZmXVtGZl18MCkNCgkJcmV0dXJuIDENCgkJOzsN
CgkqKQ0KCQl3YXJuICJcJCR7MX0gaXMgbm90IHNldCBwcm9wZXJseS4iDQoJ
CXJldHVybiAxDQoJCTs7DQoJZXNhYw0KfQ0KDQojDQojIG1vdW50X2NyaXRp
Y2FsX2ZpbGVzeXN0ZW1zDQojCUdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgY3Jp
dGljYWwgZmlsZXN5c3RlbXMsIGNoZWNraW5nIGVhY2ggb25lDQojCXRvIHNl
ZSBpZiBpdCBpcyBtb3VudGVkLCBhbmQgaWYgaXQgaXMgbm90LCBtb3VudGlu
ZyBpdC4NCiMNCm1vdW50X2NyaXRpY2FsX2ZpbGVzeXN0ZW1zKCkNCnsNCglp
ZiBbICQxID0gbG9jYWwgXTsgdGhlbg0KCQlfZnNsaXN0PSRjcml0aWNhbF9m
aWxlc3lzdGVtc19iZWZvcmVuZXQNCgllbHNlDQoJCV9mc2xpc3Q9JGNyaXRp
Y2FsX2ZpbGVzeXN0ZW1zDQoJZmkNCglmb3IgX2ZzIGluICRfZnNsaXN0OyBk
bw0KCQltb3VudCB8ICgNCgkJCV9pc21vdW50ZWQ9bm8NCgkJCXdoaWxlIHJl
YWQgd2hhdCBfb24gb24gX3R5cGUgdHlwZTsgZG8NCgkJCQlpZiBbICRvbiA9
ICRfZnMgXTsgdGhlbg0KCQkJCQlfaXNtb3VudGVkPXllcw0KCQkJCWZpDQoJ
CQlkb25lDQoJCQlpZiBbICRfaXNtb3VudGVkID0gbm8gXTsgdGhlbiANCgkJ
CQltb3VudCAkX2ZzID4vZGV2L251bGwgMj4mMQ0KCQkJZmkNCgkJKSAgDQoJ
ZG9uZQ0KfQ0KDQojDQojIGNoZWNrX3BpZGZpbGUgcGlkZmlsZSBwcm9jbmFt
ZQ0KIwlQYXJzZXMgdGhlIGZpcnN0IGxpbmUgb2YgcGlkZmlsZSBmb3IgYSBw
aWQsIGFuZCBlbnN1cmVzDQojCXRoYXQgdGhlIHByb2Nlc3MgaXMgcnVubmlu
ZyBhbmQgbWF0Y2hlcyBwcm9jbmFtZS4NCiMJUHJpbnRzIHRoZSBtYXRjaGlu
ZyBwaWQgdXBvbiBzdWNjZXNzLCBub3RoaW5nIG90aGVyd2lzZS4NCiMNCmNo
ZWNrX3BpZGZpbGUoKQ0Kew0KCV9waWRmaWxlPSQxDQoJX3Byb2NuYW1lPSQy
DQoJaWYgWyAteiAiJF9waWRmaWxlIiAtbyAteiAiJF9wcm9jbmFtZSIgXTsg
dGhlbg0KCQllcnIgMyAnVVNBR0U6IGNoZWNrX3BpZGZpbGUgcGlkZmlsZSBw
cm9jbmFtZScNCglmaQ0KCWlmIFsgISAtZiAkX3BpZGZpbGUgXTsgdGhlbg0K
CQlyZXR1cm4NCglmaQ0KCXJlYWQgX3BpZCBfanVuayA8ICRfcGlkZmlsZQ0K
CWlmIFsgLXogIiRfcGlkIiBdOyB0aGVuDQoJCXJldHVybg0KCWZpDQoJX3By
b2NuYW1lYm49YGJhc2VuYW1lICRfcHJvY25hbWVgDQoJcHMgLXAgJF9waWQg
LW8gJ3BpZCxjb21tYW5kJyB8IHdoaWxlIHJlYWQgX25waWQgX2FyZzAgX2Fy
Z3Y7IGRvDQoJCWlmIFsgIiRfbnBpZCIgPSAiUElEIiBdOyB0aGVuDQoJCQlj
b250aW51ZQ0KCQlmaQ0KCQlpZiBbICAgIiRfYXJnMCIgPSAiJF9wcm9jbmFt
ZSIgXA0KCQkgICAgLW8gIiRfYXJnMCIgPSAiJF9wcm9jbmFtZWJuIiBcDQoJ
CSAgICAtbyAiJF9hcmcwIiA9ICIke19wcm9jbmFtZWJufToiIFwNCgkJICAg
IC1vICIkX2FyZzAiID0gIigke19wcm9jbmFtZWJufSkiIF07IHRoZW4NCgkJ
CWVjaG8gJF9ucGlkDQoJCQlyZXR1cm4NCgkJZmkNCglkb25lDQp9DQoNCiMN
CiMgY2hlY2tfcHJvY2VzcyBwcm9jbmFtZQ0KIwlFbnN1cmVzIHRoYXQgYSBw
cm9jZXNzIChvciBwcm9jZXNzZXMpIG5hbWVkIHByb2NuYW1lIGlzIHJ1bm5p
bmcuDQojCVByaW50cyBhIGxpc3Qgb2YgbWF0Y2hpbmcgcGlkcy4NCiMNCmNo
ZWNrX3Byb2Nlc3MoKQ0Kew0KCV9wcm9jbmFtZT0kMQ0KCWlmIFsgLXogIiRf
cHJvY25hbWUiIF07IHRoZW4NCgkJZXJyIDMgJ1VTQUdFOiBjaGVja19wcm9j
ZXNzIHByb2NuYW1lJw0KCWZpDQoJX3Byb2NuYW1lYm49YGJhc2VuYW1lICRf
cHJvY25hbWVgDQoJX3ByZWY9DQoJcHMgLWF4IC1vICdwaWQsY29tbWFuZCcg
fCB3aGlsZSByZWFkIF9ucGlkIF9hcmcwIF9hcmd2OyBkbw0KCQlpZiBbICIk
X25waWQiID0gIlBJRCIgXTsgdGhlbg0KCQkJY29udGludWUNCgkJZmkNCgkJ
aWYgWyAgICIkX2FyZzAiID0gIiRfcHJvY25hbWUiIFwNCgkJICAgIC1vICIk
X2FyZzAiID0gIiRfcHJvY25hbWVibiIgXA0KCQkgICAgLW8gIiRfYXJnMCIg
PSAiJHtfcHJvY25hbWVibn06IiBcDQoJCSAgICAtbyAiJF9hcmcwIiA9ICIo
JHtfcHJvY25hbWVibn0pIiBdOyB0aGVuDQoJCQllY2hvIC1uICIkX3ByZWYk
X25waWQiDQoJCQlfcHJlZj0iICINCgkJZmkNCglkb25lDQp9DQoNCiMNCiMg
cnVuX3JjX2NvbW1hbmQgYXJnDQojCVNlYXJjaCBmb3IgYXJnIGluIHRoZSBs
aXN0IG9mIHN1cHBvcnRlZCBjb21tYW5kcywgd2hpY2ggaXM6DQojCQkic3Rh
cnQgc3RvcCByZXN0YXJ0IHJjdmFyIHN0YXR1cyAke2V4dHJhX2NvbW1hbmRz
fSINCiMJSWYgdGhlcmUncyBhIG1hdGNoLCBydW4gJHthcmd9X2NtZCBvciB0
aGUgZGVmYXVsdCBjb21tYW5kIChzZWUgYmVsb3cpLg0KIw0KIwlJZiBhcmcg
aGFzIGEgZ2l2ZW4gcHJlZml4LCB0aGVuIGNoYW5nZSB0aGUgb3BlcmF0aW9u
IGFzIGZvbGxvd3M6DQojCQlwcmVmaXgJb3BlcmF0aW9uDQojCQktLS0tLS0J
LS0tLS0tLS0tDQojCQlmYXN0CVNraXAgdGhlIHBpZCBjaGVjay4NCiMJCWZv
cmNlCVNldCAke3JjdmFyfSB0byBZRVMuDQojDQojCVRoZSBmb2xsb3dpbmcg
Z2xvYmFscyBhcmUgdXNlZDoNCiMNCiMJbmFtZQkJbmVlZGVkCWZ1bmN0aW9u
DQojCS0tLS0JCS0tLS0tLQktLS0tLS0tLQ0KIwluYW1lCQl5CU5hbWUgb2Yg
c2NyaXB0Lg0KIw0KIwljb21tYW5kCQluCUZ1bGwgcGF0aCB0byBjb21tYW5k
Lg0KIwkJCQlOb3QgbmVlZGVkIGlmICR7YXJnfV9jbWQgaXMgc2V0IGZvcg0K
IwkJCQllYWNoIGtleXdvcmQuDQojDQojCWNvbW1hbmRfYXJncwluCU9wdGlv
bmFsIGFyZ3Mvc2hlbGwgZGlyZWN0aXZlcyBmb3IgY29tbWFuZC4NCiMNCiMJ
ZXh0cmFfY29tbWFuZHMJbglMaXN0IG9mIGV4dHJhIGNvbW1hbmRzIHN1cHBv
cnRlZC4NCiMNCiMJcGlkZmlsZQkJbglJZiBzZXQsIHVzZSBjaGVja19waWRm
aWxlICRwaWRmaWxlLCBlbHNlIGlmDQojCQkJCSRjb21tYW5kIGlzIHNldCwg
dXNlIGNoZWNrX3Byb2Nlc3MgJGNvbW1hbmQuDQojDQojCXJjdmFyCQluCVRo
aXMgaXMgY2hlY2tlZCB3aXRoIGNoZWNreWVzbm8gdG8gZGV0ZXJtaW5lDQoj
CQkJCWlmIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHJ1bi4NCiMNCiMJJHtuYW1l
fV9jaHJvb3QJbglEaXJlY3RvcnkgdG8gY2hyb290IHRvIGJlZm9yZSBydW5u
aW5nICR7Y29tbWFuZH0NCiMNCiMJJHtuYW1lfV9jaGRpcgluCURpcmVjdG9y
eSB0byBjZCB0byBiZWZvcmUgcnVubmluZyAke2NvbW1hbmR9DQojCQkJCShp
ZiBub3QgdXNpbmcgJHtuYW1lfV9jaHJvb3QpLg0KIw0KIwkke25hbWV9X2Zs
YWdzCW4JQXJndW1lbnRzIHRvIGNhbGwgJHtjb21tYW5kfSB3aXRoLg0KIwkJ
CQlOT1RFOgkkZmxhZ3MgZnJvbSB0aGUgcGFyZW50IGVudmlyb25tZW50DQoj
CQkJCQljYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGlzLg0KIw0KIwkke25h
bWV9X25pY2UJbglOaWNlIGxldmVsIHRvIHJ1biAke2NvbW1hbmR9IGF0Lg0K
Iw0KIwkke25hbWV9X3VzZXIJbglVc2VyIHRvIHJ1biAke2NvbW1hbmR9IGFz
LCB1c2luZyBzdSgxKSBpZiBub3QNCiMJCQkJdXNpbmcgJHtuYW1lfV9jaHJv
b3QuDQojDQojCSR7bmFtZX1fZ3JvdXAJbglHcm91cCB0byBydW4gY2hyb290
ZWQgJHtjb21tYW5kfSBhcy4NCiMNCiMJJHtuYW1lfV9ncm91cHMJbglTdXBw
bGVtZW50YXJ5IGdyb3VwIGxpc3QgdG8gcnVuIGNocm9vdGVkDQojCQkJCSR7
Y29tbWFuZH0gd2l0aC4NCiMNCiMJJHtfYXJnfV9jbWQJbglJZiBzZXQsIHVz
ZSB0aGlzIGFzIHRoZSBhY3Rpb24gd2hlbiBpbnZva2VkOw0KIwkJCQkkX2Fy
ZyBpcyBhdmFpbGFibGUgdG8gdGhlIGFjdGlvbiB0byB1c2UuDQojCQkJCU90
aGVyd2lzZSwgdXNlIGRlZmF1bHQgY29tbWFuZCAoc2VlIGJlbG93KQ0KIw0K
Iwkke19hcmd9X3ByZWNtZAluCUlmIHNldCwgcnVuIGp1c3QgYmVmb3JlIHBl
cmZvcm1pbmcgdGhlIG1haW4NCiMJCQkJYWN0aW9uIGluIHRoZSBkZWZhdWx0
IGNvbW1hbmQgKGkuZSwgYWZ0ZXINCiMJCQkJY2hlY2tpbmcgZm9yIHJlcXVp
cmVkIGJpdHMgYW5kIHByb2Nlc3MNCiMJCQkJKG5vbilleGlzdGFuY2UpLg0K
IwkJCQlJZiB0aGlzIGNvbXBsZXRlcyB3aXRoIGEgbm9uLXplcm8gZXhpdCBj
b2RlLA0KIwkJCQlkb24ndCBydW4gJHtfYXJnfV9jbWQuDQojDQojCXJlcXVp
cmVkX2RpcnMJbglJZiBzZXQsIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9m
IHRoZSBnaXZlbg0KIwkJCQlkaXJlY3RvcmllcyBiZWZvcmUgcnVubmluZyB0
aGUgZGVmYXVsdA0KIwkJCQkocmUpc3RhcnQgY29tbWFuZC4NCiMNCiMJcmVx
dWlyZWRfZmlsZXMJbglJZiBzZXQsIGNoZWNrIGZvciB0aGUgcmVhZGFiaWxp
dHkgb2YgdGhlIGdpdmVuDQojCQkJCWZpbGVzIGJlZm9yZSBydW5uaW5nIHRo
ZSBkZWZhdWx0IChyZSlzdGFydA0KIwkJCQljb21tYW5kLg0KIw0KIwlyZXF1
aXJlZF92YXJzCW4JSWYgc2V0LCBwZXJmb3JtIGNoZWNreWVzbm8gb24gZWFj
aCBvZiB0aGUNCiMJCQkJbGlzdGVkIHZhcmlhYmxlcyBiZWZvcmUgcnVubmlu
ZyB0aGUgZGVmYXVsdA0KIwkJCQkocmUpc3RhcnQgY29tbWFuZC4NCiMNCiMJ
RGVmYXVsdCBjb21tYW5kcyBmb3IgYSBnaXZlbiBhcmc6DQojDQojCWFyZwkJ
ZGVmYXVsdA0KIwktLS0JCS0tLS0tLS0NCiMJc3RhdHVzCQlTaG93IGlmICR7
Y29tbWFuZH0gaXMgcnVubmluZywgZXRjLg0KIw0KIwlzdGFydAkJaWYgIXJ1
bm5pbmcgJiYgY2hlY2t5ZXNubyAke3JjdmFyfQ0KIwkJCQkke2NvbW1hbmR9
DQojDQojCXN0b3AJCWlmICR7cGlkZmlsZX0NCiMJCQkJa2lsbCAkc2lnX3N0
b3AgYGNoZWNrX3BpZGZpbGUgJHBpZGZpbGVgDQojCQkJZWxzZQ0KIwkJCQlr
aWxsICRzaWdfc3RvcCBgY2hlY2tfcHJvY2VzcyAkY29tbWFuZGANCiMJCQkk
c2lnX3N0b3AgZGVmYXVsdHMgdG8gVEVSTS4NCiMNCiMJcmVsb2FkCQlBcyBz
dG9wLCBleGNlcHQgdXNlICRzaWdfcmVsb2FkIGluc3RlYWQuDQojCQkJJHNp
Z19yZWxvYWQgZGVmYXVsdHMgdG8gSFVQLg0KIw0KIwlyZXN0YXJ0CQlSdW4g
YHN0b3AnIHRoZW4gYHN0YXJ0Jy4NCiMNCiMNCnJ1bl9yY19jb21tYW5kKCkN
CnsNCglfYXJnPSQxDQoJaWYgWyAteiAiJG5hbWUiIF07IHRoZW4NCgkJZXJy
IDMgJyRuYW1lIGlzIG5vdCBzZXQuJw0KCWZpDQoNCgljYXNlICIkX2FyZyIg
aW4NCglmYXN0KikJCQkJIyAiZmFzdCIgcHJlZml4OyBkb24ndCBjaGVjayBw
aWQNCgkJX2FyZz0ke19hcmcjZmFzdH0NCgkJX3JjX2Zhc3RfcnVuPVlFUw0K
CQk7Ow0KCWZvcmNlKikJCQkJIyAiZm9yY2UgcHJlZml4OyBhbHdheXMgc3Rh
cnQNCgkJX2FyZz0ke19hcmcjZm9yY2V9DQoJCV9yY19mb3JjZV9ydW49WUVT
DQoJCWV2YWwgJHtyY3Zhcn09WUVTDQoJCTs7DQoJZXNhYw0KDQoJX2tleXdv
cmRzPSJzdGFydCBzdG9wIHJlc3RhcnQgcmN2YXIgJGV4dHJhX2NvbW1hbmRz
Ig0KCV9waWQ9DQoJX3BpZGNtZD0NCgkJCQkJIyBzZXR1cCBwaWQgY2hlY2sg
Y29tbWFuZCBpZiBub3QgZmFzdA0KCWlmIFsgLXogIiRfcmNfZmFzdF9ydW4i
IF07IHRoZW4NCgkJaWYgWyAtbiAiJHBpZGZpbGUiIF07IHRoZW4NCgkJCV9w
aWRjbWQ9J19waWQ9YGNoZWNrX3BpZGZpbGUgJyRwaWRmaWxlJyAnJGNvbW1h
bmQnYCcNCgkJZWxpZiBbIC1uICIkY29tbWFuZCIgXTsgdGhlbg0KCQkJX3Bp
ZGNtZD0nX3BpZD1gY2hlY2tfcHJvY2VzcyAnJGNvbW1hbmQnYCcNCgkJZmkN
CgkJaWYgWyAtbiAiJF9waWRjbWQiIF07IHRoZW4NCgkJCV9rZXl3b3Jkcz0i
JHtfa2V5d29yZHN9IHN0YXR1cyINCgkJZmkNCglmaQ0KDQoJaWYgWyAteiAi
JF9hcmciIF07IHRoZW4NCgkJcmNfdXNhZ2UgIiRfa2V5d29yZHMiDQoJZmkN
Cg0KCWlmIFsgLW4gIiRmbGFncyIgXTsgdGhlbgkjIGFsbG93IG92ZXJyaWRl
IGZyb20gZW52aXJvbm1lbnQNCgkJX2ZsYWdzPSRmbGFncw0KCWVsc2UNCgkJ
ZXZhbCBfZmxhZ3M9XCQke25hbWV9X2ZsYWdzDQoJZmkNCglldmFsIF9jaGRp
cj1cJCR7bmFtZX1fY2hkaXINCglldmFsIF9jaHJvb3Q9XCQke25hbWV9X2No
cm9vdA0KCWV2YWwgX25pY2U9XCQke25hbWV9X25pY2UNCglldmFsIF91c2Vy
PVwkJHtuYW1lfV91c2VyDQoJZXZhbCBfZ3JvdXA9XCQke25hbWV9X2dyb3Vw
DQoJZXZhbCBfZ3JvdXBzPVwkJHtuYW1lfV9ncm91cHMNCg0KCQkJCQkjIGlm
ICR7cmN2YXJ9IGlzIHNldCBhbmQgd2UncmUgbm90DQoJCQkJCSMgcnVubmlu
ZyBgcmN2YXInLCB0aGVuIGNoZWNrIGl0DQoJCQkJCSMNCglpZiBbIC1uICIk
e3JjdmFyfSIgLWEgIiRfYXJnIiAhPSAicmN2YXIiIF07IHRoZW4NCgkJaWYg
ISBjaGVja3llc25vICR7cmN2YXJ9OyB0aGVuDQoJCQlyZXR1cm4gMA0KCQlm
aQ0KCWZpDQoNCglldmFsICRfcGlkY21kCQkJIyBkZXRlcm1pbmUgdGhlIHBp
ZCBpZiBuZWNlc3NhcnkNCg0KCWZvciBfZWxlbSBpbiAkX2tleXdvcmRzOyBk
bw0KCQlpZiBbICIkX2VsZW0iICE9ICIkX2FyZyIgXTsgdGhlbg0KCQkJY29u
dGludWUNCgkJZmkNCg0KCQkJCQkjIGlmIHRoZXJlJ3MgYSBjdXN0b20gJHtY
WFhfY21kfSwNCgkJCQkJIyBydW4gdGhhdCBpbnN0ZWFkIG9mIHRoZSBkZWZh
dWx0DQoJCQkJCSMNCgkJZXZhbCBfY21kPVwkJHtfYXJnfV9jbWQNCgkJZXZh
bCBfcHJlY21kPVwkJHtfYXJnfV9wcmVjbWQNCgkJaWYgWyAtbiAiJF9jbWQi
IF07IHRoZW4NCgkJCQkJIyBpZiB0aGUgcHJlY21kIGZhaWxlZCBhbmQgZm9y
Y2UNCgkJCQkJIyBpc24ndCBzZXQsIGV4aXQNCgkJCQkJIw0KCQkJaWYgISBl
dmFsICRfcHJlY21kICYmIFsgLXogIiRfcmNfZm9yY2VfcnVuIiBdOyB0aGVu
DQoJCQkJcmV0dXJuIDENCgkJCWZpDQoNCgkJCWV2YWwgJF9jbWQNCgkJCXJl
dHVybiAwDQoJCWZpDQoNCgkJY2FzZSAiJF9hcmciIGluCQkjIGRlZmF1bHQg
b3BlcmF0aW9ucy4uLg0KDQoJCXN0YXR1cykNCgkJCWlmIFsgLW4gIiRfcGlk
IiBdOyB0aGVuDQoJCQkJZWNobyAiJHtuYW1lfSBpcyBydW5uaW5nIGFzIHBp
ZCAkX3BpZC4iDQoJCQllbHNlDQoJCQkJZWNobyAiJHtuYW1lfSBpcyBub3Qg
cnVubmluZy4iDQoJCQlmaQ0KCQkJOzsNCg0KCQlzdGFydCkNCgkJCWlmIFsg
LW4gIiRfcGlkIiBdOyB0aGVuDQoJCQkJZWNobyAiJHtuYW1lfSBhbHJlYWR5
IHJ1bm5pbmc/IChwaWQ9JF9waWQpLiINCgkJCQlleGl0IDENCgkJCWZpDQoN
CgkJCWlmIFsgISAteCAkY29tbWFuZCBdOyB0aGVuDQoJCQkJcmV0dXJuIDAN
CgkJCWZpDQoNCgkJCQkJIyBjaGVjayBmb3IgcmVxdWlyZWQgdmFyaWFibGVz
LA0KCQkJCQkjIGRpcmVjdG9yaWVzLCBhbmQgZmlsZXMNCgkJCQkJIw0KCQkJ
Zm9yIF9mIGluICRyZXF1aXJlZF92YXJzOyBkbw0KCQkJCWlmICEgY2hlY2t5
ZXNubyAkX2Y7IHRoZW4NCgkJCQkJd2FybiAiXCQke19mfSBpcyBub3Qgc2V0
LiINCgkJCQkJaWYgWyAteiAiJF9yY19mb3JjZV9ydW4iIF07IHRoZW4NCgkJ
CQkJCXJldHVybiAxDQoJCQkJCWZpDQoJCQkJZmkNCgkJCWRvbmUNCgkJCWZv
ciBfZiBpbiAkcmVxdWlyZWRfZGlyczsgZG8NCgkJCQlpZiBbICEgLWQgIiR7
X2Z9Ly4iIF07IHRoZW4NCgkJCQkJd2FybiAiJHtfZn0gaXMgbm90IGEgZGly
ZWN0b3J5LiINCgkJCQkJaWYgWyAteiAiJF9yY19mb3JjZV9ydW4iIF07IHRo
ZW4NCgkJCQkJCXJldHVybiAxDQoJCQkJCWZpDQoJCQkJZmkNCgkJCWRvbmUN
CgkJCWZvciBfZiBpbiAkcmVxdWlyZWRfZmlsZXM7IGRvDQoJCQkJaWYgWyAh
IC1yICIke19mfSIgXTsgdGhlbg0KCQkJCQl3YXJuICIke19mfSBpcyBub3Qg
cmVhZGFibGUuIg0KCQkJCQlpZiBbIC16ICIkX3JjX2ZvcmNlX3J1biIgXTsg
dGhlbg0KCQkJCQkJcmV0dXJuIDENCgkJCQkJZmkNCgkJCQlmaQ0KCQkJZG9u
ZQ0KDQoJCQkJCSMgaWYgdGhlIHByZWNtZCBmYWlsZWQgYW5kIGZvcmNlDQoJ
CQkJCSMgaXNuJ3Qgc2V0LCBleGl0DQoJCQkJCSMNCgkJCWlmICEgZXZhbCAk
X3ByZWNtZCAmJiBbIC16ICIkX3JjX2ZvcmNlX3J1biIgXTsgdGhlbg0KCQkJ
CXJldHVybiAxDQoJCQlmaQ0KDQoNCgkJCQkJIyBzZXR1cCB0aGUgY29tbWFu
ZCB0byBydW4sIGFuZCBydW4gaXQNCgkJCWVjaG8gIlN0YXJ0aW5nICR7bmFt
ZX0uIg0KCQkJaWYgWyAtbiAiJF9jaHJvb3QiIF07IHRoZW4NCgkJCQlfZG9p
dD0iXA0KJHtfbmljZTorbmljZSAtbiAkX25pY2UgfVwNCmNocm9vdCAke191
c2VyOistdSAkX3VzZXIgfSR7X2dyb3VwOistZyAkX2dyb3VwIH0ke19ncm91
cHM6Ky1HICRfZ3JvdXBzIH1cDQokX2Nocm9vdCAkY29tbWFuZCAkX2ZsYWdz
ICRjb21tYW5kX2FyZ3MiDQoJCQllbHNlDQoJCQkJX2RvaXQ9IlwNCiR7X3Vz
ZXI6K3N1IC1tICRfdXNlciAtYyAnc2ggLWMgXCJ9XA0KJHtfY2hkaXI6K2Nk
ICRfY2hkaXI7IH1cDQoke19uaWNlOituaWNlIC1uICRfbmljZSB9XA0KJGNv
bW1hbmQgJF9mbGFncyAkY29tbWFuZF9hcmdzXA0KJHtfdXNlcjorXCInfSIN
CgkJCWZpDQoJCQlldmFsICRfZG9pdA0KCQkJOzsNCg0KCQlzdG9wKQ0KCQkJ
aWYgWyAteiAiJF9waWQiIF07IHRoZW4NCgkJCQlpZiBbIC1uICIkcGlkZmls
ZSIgXTsgdGhlbg0KCQkJCQllY2hvIFwNCgkJCQkgICAgIiR7bmFtZX0gbm90
IHJ1bm5pbmc/IChjaGVjayAkcGlkZmlsZSkuIg0KCQkJCWVsc2UNCgkJCQkJ
ZWNobyAiJHtuYW1lfSBub3QgcnVubmluZz8iDQoJCQkJZmkNCgkJCQlleGl0
IDENCgkJCWZpDQoNCgkJCWlmICEgZXZhbCAkX3ByZWNtZCAmJiBbIC16ICIk
X3JjX2ZvcmNlX3J1biIgXTsgdGhlbg0KCQkJCXJldHVybiAxDQoJCQlmaQ0K
CQkJZWNobyAiU3RvcHBpbmcgJHtuYW1lfS4iDQoJCQlfZG9pdD1cDQoiJHtf
dXNlcjorc3UgLW0gJF91c2VyIC1jICd9a2lsbCAtJHtzaWdfc3RvcDotVEVS
TX0gJF9waWQke191c2VyOisnfSINCgkJCWV2YWwgJF9kb2l0DQoJCQk7Ow0K
DQoJCXJlbG9hZCkNCgkJCWlmIFsgLXogIiRfcGlkIiBdOyB0aGVuDQoJCQkJ
aWYgWyAtbiAiJHBpZGZpbGUiIF07IHRoZW4NCgkJCQkJZWNobyBcDQoJCQkJ
ICAgICIke25hbWV9IG5vdCBydW5uaW5nPyAoY2hlY2sgJHBpZGZpbGUpLiIN
CgkJCQllbHNlDQoJCQkJCWVjaG8gIiR7bmFtZX0gbm90IHJ1bm5pbmc/Ig0K
CQkJCWZpDQoJCQkJZXhpdCAxDQoJCQlmaQ0KCQkJZWNobyAiUmVsb2FkaW5n
ICR7bmFtZX0gY29uZmlnIGZpbGVzLiINCgkJCWlmICEgZXZhbCAkX3ByZWNt
ZCAmJiBbIC16ICIkX3JjX2ZvcmNlX3J1biIgXTsgdGhlbg0KCQkJCXJldHVy
biAxDQoJCQlmaQ0KCQkJX2RvaXQ9XA0KIiR7X3VzZXI6K3N1IC1tICRfdXNl
ciAtYyAnfWtpbGwgLSR7c2lnX3JlbG9hZDotSFVQfSAkX3BpZCR7X3VzZXI6
Kyd9Ig0KCQkJZXZhbCAkX2RvaXQNCgkJCTs7DQoNCgkJcmVzdGFydCkNCgkJ
CWlmICEgZXZhbCAkX3ByZWNtZCAmJiBbIC16ICIkX3JjX2ZvcmNlX3J1biIg
XTsgdGhlbg0KCQkJCXJldHVybiAxDQoJCQlmaQ0KCQkJKCAkMCBzdG9wICkN
CgkJCXNsZWVwIDENCgkJCSQwIHN0YXJ0DQoNCgkJCTs7DQoNCgkJcmN2YXIp
DQoJCQllY2hvICIjICRuYW1lIg0KCQkJaWYgWyAtbiAiJHJjdmFyIiBdOyB0
aGVuDQoJCQkJaWYgY2hlY2t5ZXNubyAke3JjdmFyfTsgdGhlbg0KCQkJCQll
Y2hvICJcJCR7cmN2YXJ9PVlFUyINCgkJCQllbHNlDQoJCQkJCWVjaG8gIlwk
JHtyY3Zhcn09Tk8iDQoJCQkJZmkNCgkJCWZpDQoJCQk7Ow0KDQoJCSopDQoJ
CQlyY191c2FnZSAiJF9rZXl3b3JkcyINCgkJCTs7DQoNCgkJZXNhYw0KCQly
ZXR1cm4gMA0KCWRvbmUNCg0KCWVjaG8gMT4mMiAiJDA6IHVua25vd24gZGly
ZWN0aXZlICckX2FyZycuIg0KCXJjX3VzYWdlICIkX2tleXdvcmRzIg0KCWV4
aXQgMQ0KfQ0KDQojDQojIHJ1bl9yY19zY3JpcHQgZmlsZSBhcmcNCiMJU3Rh
cnQgdGhlIHNjcmlwdCBgZmlsZScgd2l0aCBgYXJnJywgYW5kIGNvcnJlY3Rs
eSBoYW5kbGUgdGhlDQojCXJldHVybiB2YWx1ZSBmcm9tIHRoZSBzY3JpcHQu
ICBJZiBgZmlsZScgZW5kcyB3aXRoIGAuc2gnLCBpdCdzDQojCXNvdXJjZWQg
aW50byB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gIE90aGVyd2lzZSBpdCdz
IHJ1biBhcw0KIwlhIGNoaWxkIHByb2Nlc3MuDQojDQojCU5vdGU6IGJlY2F1
c2UgYC5zaCcgZmlsZXMgYXJlIHNvdXJjZWQgaW50byB0aGUgY3VycmVudCBl
bnZpcm9ubWVudA0KIwlydW5fcmNfY29tbWFuZCBzaG91bGRuJ3QgYmUgdXNl
ZCBiZWNhdXNlIGl0cyBkaWZmaWN1bHQgdG8gZW5zdXJlDQojCXRoYXQgdGhl
IGdsb2JhbCB2YXJpYWJsZSBzdGF0ZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBz
b3VyY2luZyBvZiANCiMJdGhlIC5zaCBmaWxlIHdvbid0IGFkdmVyc2VseSBh
ZmZlY3Qgb3RoZXIgc2NyaXB0cy4NCiMNCnJ1bl9yY19zY3JpcHQoKQ0Kew0K
CV9maWxlPSQxDQoJX2FyZz0kMg0KCWlmIFsgLXogIiRfZmlsZSIgLW8gLXog
IiRfYXJnIiBdOyB0aGVuDQoJCWVyciAzICdVU0FHRTogcnVuX3JjX3Njcmlw
dCBmaWxlIGFyZycNCglmaQ0KDQoJY2FzZSAiJF9maWxlIiBpbg0KCSouc2gp
CQkJCSMgcnVuIGluIGN1cnJlbnQgc2hlbGwNCgkJc2V0ICRfYXJnIDsgLiAk
X2ZpbGUNCgkJOzsNCgkqKQkJCQkjIHJ1biBpbiBzdWJzaGVsbA0KCQljb21t
YW5kX2FyZ3M9DQoJCWV4dHJhX2NvbW1hbmRzPQ0KCQlyZWxvYWRfY21kPQ0K
CQlyZWxvYWRfcHJlY21kPQ0KCQlyZXF1aXJlZF9kaXJzPQ0KCQlyZXF1aXJl
ZF9maWxlcz0NCgkJcmVxdWlyZWRfdmFycz0NCgkJc3RhcnRfY21kPQ0KCQlz
dGFydF9wcmVjbWQ9DQoJCXN0YXR1c19jbWQ9DQoJCXN0YXR1c19wcmVjbWQ9
DQoJCXN0b3BfY21kPQ0KCQlzdG9wX3ByZWNtZD0NCgkJc2V0ICRfYXJnIDsg
LiAkX2ZpbGUNCgkJIyAoIHNldCAkX2FyZyA7IC4gJF9maWxlICkNCgkJOzsN
Cgllc2FjDQp9DQoNCiMNCiMgbG9hZF9yY19jb25maWcNCiMJU291cmNlIGlu
IHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGEgZ2l2ZW4gY29tbWFuZC4N
CiMNCmxvYWRfcmNfY29uZmlnKCkNCnsNCglfY29tbWFuZD0kMQ0KCWlmIFsg
LXogIiRfY29tbWFuZCIgXTsgdGhlbg0KCQllcnIgMyAnVVNBR0U6IGxvYWRf
cmNfY29uZmlnIGNvbW1hbmQnDQoJZmkNCg0KCS4gL2V0Yy9yYy5jb25mDQoJ
aWYgWyAtZiAvZXRjL3JjLmNvbmYuZC8iJF9jb21tYW5kIiBdOyB0aGVuDQoJ
CS4gL2V0Yy9yYy5jb25mLmQvIiRfY29tbWFuZCINCglmaQ0KfQ0KDQoNCiMN
CiMgcmNfdXNhZ2UgY29tbWFuZHMNCiMJUHJpbnQgYSB1c2FnZSBzdHJpbmcg
Zm9yICQwLCB3aXRoIGBjb21tYW5kcycgYmVpbmcgYSBsaXN0IG9mDQojCXZh
bGlkIGNvbW1hbmRzLg0KIw0KcmNfdXNhZ2UoKQ0Kew0KCWVjaG8gLW4gMT4m
MiAiVXNhZ2U6ICQwIFtmYXN0fGZvcmNlXSgiDQoNCglfc2VwPQ0KCWZvciBf
ZWxlbSBpbiAkKjsgZG8NCgkJZWNobyAtbiAxPiYyICIkX3NlcCRfZWxlbSIN
CgkJX3NlcD0ifCINCglkb25lDQoJZWNobyAxPiYyICIpIg0KCWV4aXQgMQ0K
fQ0KDQojDQojIGVyciBleGl0dmFsIG1lc3NhZ2UNCiMJRGlzcGxheSBtZXNz
YWdlIHRvIHN0ZGVyciBhbmQgbG9nIHRvIHRoZSBzeXNsb2csIGFuZCBleGl0
IHdpdGggZXhpdHZhbC4NCiMNCmVycigpDQp7DQoJZXhpdHZhbD0kMQ0KCXNo
aWZ0DQoNCglsb2dnZXIgIiQwOiBFUlJPUjogJCoiDQoJZWNobyAxPiYyICIk
MDogRVJST1I6ICQqIg0KCWV4aXQgJGV4aXR2YWwNCn0NCg0KIw0KIyB3YXJu
IG1lc3NhZ2UNCiMJRGlzcGxheSBtZXNzYWdlIHRvIHN0ZGVyciBhbmQgbG9n
IHRvIHRoZSBzeXNsb2cuDQojDQp3YXJuKCkNCnsNCglsb2dnZXIgIiQwOiBX
QVJOSU5HOiAkKiINCgllY2hvIDE+JjIgIiQwOiBXQVJOSU5HOiAkKiINCn0N
Cg==
--0-724733992-978011006=:404--