From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Amirouche Boubekki Newsgroups: gmane.lisp.guile.user Subject: Re: [HELP] a search engine in GNU Guile Date: Sun, 04 Sep 2016 15:35:39 +0200 Message-ID: <50588671ce80256f2899f7e2a01ebd05@hypermove.net> References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=_53e918395ee183beed6e0635d3fce0eb" X-Trace: blaine.gmane.org 1472996200 24869 195.159.176.226 (4 Sep 2016 13:36:40 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 4 Sep 2016 13:36:40 +0000 (UTC) User-Agent: Roundcube Webmail/1.1.2 To: Guile User Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Sun Sep 04 15:36:33 2016 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bgXb4-0005RF-FT for guile-user@m.gmane.org; Sun, 04 Sep 2016 15:36:31 +0200 Original-Received: from localhost ([::1]:49933 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bgXb2-0001k6-28 for guile-user@m.gmane.org; Sun, 04 Sep 2016 09:36:28 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:58081) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bgXaV-0001jt-54 for guile-user@gnu.org; Sun, 04 Sep 2016 09:36:02 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bgXaN-0005Y0-1a for guile-user@gnu.org; Sun, 04 Sep 2016 09:35:54 -0400 Original-Received: from relay2-d.mail.gandi.net ([217.70.183.194]:42690) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bgXaM-0005Xw-3j for guile-user@gnu.org; Sun, 04 Sep 2016 09:35:46 -0400 Original-Received: from mfilter24-d.gandi.net (mfilter24-d.gandi.net [217.70.178.152]) by relay2-d.mail.gandi.net (Postfix) with ESMTP id 09754C5A43 for ; Sun, 4 Sep 2016 15:35:45 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mfilter24-d.gandi.net Original-Received: from relay2-d.mail.gandi.net ([IPv6:::ffff:217.70.183.194]) by mfilter24-d.gandi.net (mfilter24-d.gandi.net [::ffff:10.0.15.180]) (amavisd-new, port 10024) with ESMTP id zFB9g4t4amhF for ; Sun, 4 Sep 2016 15:35:40 +0200 (CEST) X-Originating-IP: 10.58.1.143 Original-Received: from webmail.gandi.net (webmail3-d.mgt.gandi.net [10.58.1.143]) (Authenticated sender: amirouche@hypermove.net) by relay2-d.mail.gandi.net (Postfix) with ESMTPA id F2103C5A50 for ; Sun, 4 Sep 2016 15:35:39 +0200 (CEST) In-Reply-To: X-Sender: amirouche@hypermove.net X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 217.70.183.194 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.org gmane.lisp.guile.user:12875 Archived-At: --=_53e918395ee183beed6e0635d3fce0eb Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Héllo, I'd like to share with you a mini-project on the road of Culturia 0.1 [0] which is a boolean keyword search engine (similar in principle to xapian, lucene and whoosh (with less polish and features)). [0] https://github.com/amirouche/Culturia The dependencies are wiredtiger develop branch and html2text cli utility. The main design choice in this search engine is the use of an *inverted index* to store documents. It only works with languages that have space between words like english and french. The procedure used to index documents is `index`, It takes an `url` as first argument and `html` as second argument. Actually `url` can be any string reference and `html` can be plain text. (I am not happy with the naming in this `wsh.scm` in general) Here is the wiredtiger table definition: ```scheme (define-public *wsh* '((urls ((uid . record)) ((url . string)) ()) (terms ((uid . record)) ((string . string)) ((inverse (string) (uid)))) (inverted-index ((term . unsigned-integer) (url-uid . unsigned-integer) (position . unsigned-integer)) ((nothing . bytes)) ((positions (url-uid position) (term)))))) ``` This describes the tables used to store the informations needed by the search to execute (somewhat) efficently its algorithm. The first table `urls` associates an unique identifier to urls. `terms` associate a unique identifier with each term found in the whole database. When a document is indexed via `(index url html)`, `html` is preprocessed through `html2text` and `string->tokens`. In particular, `string->tokens` will: - downcase everything - remove single char words - remove words found in the stopwords.txt file `inverted-index` is the gist of this way of building a search engine will associate each term, with the documents where it's found with its position. Here is an example run: ```scheme (let ((query (search/and (search/term "database") (search/or (search/term "postgresql") (search/term "pgsql"))))) (search* query)) ``` Which is the scheme expression of `database AND (pogresql OR pgsql)`. The search vm also support negation via `search/not`. Scoring is done only using term frequency in the document and not using tf-idf because it makes the implementation simpler. If you are interested in how search queries are translated to database procedure calls the entry point is `search*` obviously but the gist of the algorithm happens in `search/vm` [1]. Basically it boilds down to do single term search via `search` procedure [2] and do list set operations like intersection and difference. I think there is an optimisation to do here but I did not bother. [1] https://github.com/amirouche/Culturia/blob/wsh-inverted-index/src/wsh.scm#L106 [2] https://github.com/amirouche/Culturia/blob/wsh-inverted-index/src/wsh.scm#L66 Have a look at `wsh.scm` at the bottom they are few tests. Also `inverted-index` table has a `positions` index on the `url-uid` and `position` to make it possible to do "phrase search", even if it's not part of the current implementation, it is possible to implement phrase search thanks to this. Phrase search are queries surrounded by double quotes like "what is gnu". One can implement phrase search as follow: - split phrase into words - search first word in the `inverted-index` table using `search`, this will give the `uid` of documents with the position `index` in that document of the first word of the phrase. - lookup `positions` index with `uid`, and `position + 1` and keep the uids for which `position + 1` is the next word in the phrase. Repeat that step until all words from the phrase are consumed. And you have phrase search. There is another thing that doesn't work right now. If you look up a term that is not in the databae it will fail. There is a test case for it in `wsh.scm`. I pushed this to `wsh-inverted-index` branch: git clone https://github.com/amirouche/Culturia --branch wsh-inverted-index And attached the interesting files to this mail. Regarding **Culturia**, I wish to re-code this on top of a graph datastructure to have more flexibility regarding how documents are related with terms and how terms are related together. Right now it's not possible without using another table to relate terms together. Culturia will rely on graphdb mainly to make the implementation simpler. The graph datastructure `grf3` [3] is implemented on top of ukv tuple space [4] which is a new implementation of uav database which make use of wiredtigerz new `env` multithread support. I also updated the documentation regarding `wiredtiger` and `wiredtigerz`. Have a look at it online github [5][6]. [3] https://github.com/amirouche/Culturia/blob/474b5910a6f1a8541280f53bc6ae6b8458929e7f/src/grf3.scm [4] https://github.com/amirouche/Culturia/blob/474b5910a6f1a8541280f53bc6ae6b8458929e7f/src/ukv.scm [5] https://amirouche.github.io/Culturia/doc/wiredtiger.html [6] https://amirouche.github.io/Culturia/doc/wiredtigerz.html Happy hacking! On 2016-08-13 17:25, Amirouche Boubekki wrote: > Héllo, > > > The goal of Culturia is to create a framework that makes it easy > to tape into Natural Language Understanding algorithms (and NLP) > and provide an interface for common tasks. > > Culturia is an intelligence augmentation software. > > It's primary interface is a search engine. Another important aspect > of the project is that it wants to be useable offline as such it will > come with infrastructure to dump, load and store dataset for offline > use. > > The current state of the project can be described as a big ball of mud. > There is a tiny search engine with crawling skills and that's basically > all of it. > > The immediate changes that should happen are in order of preference: > > - offline stackoverflow (cf. sotoki.scm) and use the generated > website to create a zim for kiwix [0]. This is great occasion to > show how great GNU Guile is! > - port whoosh/lucene to guile to improve text search > - offline hackernews, wikidata, wikipedia, wiktionary > - implement BM25f > > Culturia is a reference to _Culture and Empire_ by Pieter Hintjens. > > It has a sparse documentation is available online [1]. > It's hosted on github [2] (This can change, if contributors > don't want to use github). > > The TODO list is big, here is some stuff that needs to be done: > > - finish GrammarLink bindings > - create sophia [3] bindings > - implement TextRank > - implement PageRank > - create a GUI using sly or html > - explore ways to easily share database among several processus > > And many other things! Newbies are accepted obviously! > > Send me a mail or use #guile @ irc.freenode.net, I am amz3. > > > Happy hacking! > > > [0] http://www.kiwix.org/wiki/Main_Page > [1] https://amirouche.github.io/Culturia/doc/ > [2] https://github.com/amirouche/Culturia > [3] http://sophia.systems/ -- Amirouche ~ amz3 ~ http://www.hyperdev.fr --=_53e918395ee183beed6e0635d3fce0eb Content-Transfer-Encoding: base64 Content-Type: text/plain; name=stopwords.en.txt Content-Disposition: attachment; filename=stopwords.en.txt; size=4872 YQphYmxlCmFib3V0CmFib3ZlCmFic3QKYWNjb3JkYW5jZQphY2NvcmRpbmcKYWNjb3JkaW5nbHkK YWNyb3NzCmFjdAphY3R1YWxseQphZGRlZAphZGoKYWZmZWN0ZWQKYWZmZWN0aW5nCmFmZmVjdHMK YWZ0ZXIKYWZ0ZXJ3YXJkcwphZ2FpbgphZ2FpbnN0CmFoCmFpbid0CmFsbAphbGxvdwphbGxvd3MK YWxtb3N0CmFsb25lCmFsb25nCmFscmVhZHkKYWxzbwphbHRob3VnaAphbHdheXMKYW0KYW1vbmcK YW1vbmdzdAphbgphbmQKYW5ub3VuY2UKYW5vdGhlcgphbnkKYW55Ym9keQphbnlob3cKYW55bW9y ZQphbnlvbmUKYW55dGhpbmcKYW55d2F5CmFueXdheXMKYW55d2hlcmUKYXBhcnQKYXBwYXJlbnRs eQphcHBlYXIKYXBwcmVjaWF0ZQphcHByb3ByaWF0ZQphcHByb3hpbWF0ZWx5CmFyZQphcmVuCmFy ZW50CmFyZW4ndAphcmlzZQphcm91bmQKYXMKYSdzCmFzaWRlCmFzawphc2tpbmcKYXNzb2NpYXRl ZAphdAphdXRoCmF2YWlsYWJsZQphd2F5CmF3ZnVsbHkKYgpiYWNrCmJlCmJlY2FtZQpiZWNhdXNl CmJlY29tZQpiZWNvbWVzCmJlY29taW5nCmJlZW4KYmVmb3JlCmJlZm9yZWhhbmQKYmVnaW4KYmVn aW5uaW5nCmJlZ2lubmluZ3MKYmVnaW5zCmJlaGluZApiZWluZwpiZWxpZXZlCmJlbG93CmJlc2lk ZQpiZXNpZGVzCmJlc3QKYmV0dGVyCmJldHdlZW4KYmV5b25kCmJpb2wKYm90aApicmllZgpicmll Zmx5CmJ1dApieQpjCmNhCmNhbWUKY2FuCmNhbm5vdApjYW50CmNhbid0CmNhdXNlCmNhdXNlcwpj ZXJ0YWluCmNlcnRhaW5seQpjaGFuZ2VzCmNsZWFybHkKYydtb24KY28KY29tCmNvbWUKY29tZXMK Y29uY2VybmluZwpjb25zZXF1ZW50bHkKY29uc2lkZXIKY29uc2lkZXJpbmcKY29udGFpbgpjb250 YWluaW5nCmNvbnRhaW5zCmNvcnJlc3BvbmRpbmcKY291bGQKY291bGRudApjb3VsZG4ndApjb3Vy c2UKYydzCmN1cnJlbnRseQpkCmRhdGUKZGVmaW5pdGVseQpkZXNjcmliZWQKZGVzcGl0ZQpkaWQK ZGlkbid0CmRpZmZlcmVudApkbwpkb2VzCmRvZXNuJ3QKZG9pbmcKZG9uZQpkb24ndApkb3duCmRv d253YXJkcwpkdWUKZHVyaW5nCmUKZWFjaAplZAplZHUKZWZmZWN0CmVnCmVpZ2h0CmVpZ2h0eQpl aXRoZXIKZWxzZQplbHNld2hlcmUKZW5kCmVuZGluZwplbm91Z2gKZW50aXJlbHkKZXNwZWNpYWxs eQpldApldC1hbApldGMKZXZlbgpldmVyCmV2ZXJ5CmV2ZXJ5Ym9keQpldmVyeW9uZQpldmVyeXRo aW5nCmV2ZXJ5d2hlcmUKZXgKZXhhY3RseQpleGFtcGxlCmV4Y2VwdApmCmZhcgpmZXcKZmYKZmlm dGgKZmlyc3QKZml2ZQpmaXgKZm9sbG93ZWQKZm9sbG93aW5nCmZvbGxvd3MKZm9yCmZvcm1lcgpm b3JtZXJseQpmb3J0aApmb3VuZApmb3VyCmZyb20KZnVydGhlcgpmdXJ0aGVybW9yZQpnCmdhdmUK Z2V0CmdldHMKZ2V0dGluZwpnaXZlCmdpdmVuCmdpdmVzCmdpdmluZwpnbwpnb2VzCmdvaW5nCmdv bmUKZ290CmdvdHRlbgpncmVldGluZ3MKaApoYWQKaGFkbid0CmhhcHBlbnMKaGFyZGx5Cmhhcwpo YXNuJ3QKaGF2ZQpoYXZlbid0CmhhdmluZwpoZQpoZWQKaGUnZApoZSdsbApoZWxsbwpoZW5jZQpo ZXIKaGVyZQpoZXJlYWZ0ZXIKaGVyZWJ5CmhlcmVpbgpoZXJlcwpoZXJlJ3MKaGVyZXVwb24KaGVy cwpoZXJzZWxmCmhlcwpoZSdzCmhpCmhpZApoaW0KaGltc2VsZgpoaXMKaGl0aGVyCmhvbWUKaG9w ZWZ1bGx5Cmhvdwpob3diZWl0Cmhvd2V2ZXIKaG93J3MKaHVuZHJlZAppCkkKaWQKaSdkCmllCmlm Cmlnbm9yZWQKaSdsbAppbQppJ20KaW1tZWRpYXRlCmltbWVkaWF0ZWx5CmltcG9ydGFuY2UKaW1w b3J0YW50CmluCmluYXNtdWNoCmluYwppbmRlZWQKaW5kZXgKaW5kaWNhdGUKaW5kaWNhdGVkCmlu ZGljYXRlcwppbmZvcm1hdGlvbgppbm5lcgppbnNvZmFyCmluc3RlYWQKaW50bwppbnZlbnRpb24K aW53YXJkCmlzCmlzbid0Cml0Cml0ZAppdCdkCml0J2xsCml0cwppdCdzCml0c2VsZgppJ3ZlCmoK anVzdAprCmtlZXAKa2VlcCAJa2VlcHMKa2VlcHMKa2VwdAprZwprbQprbm93Cmtub3duCmtub3dz CmwKbGFyZ2VseQpsYXN0CmxhdGVseQpsYXRlcgpsYXR0ZXIKbGF0dGVybHkKbGVhc3QKbGVzcwps ZXN0CmxldApsZXRzCmxldCdzCmxpa2UKbGlrZWQKbGlrZWx5CmxpbmUKbGl0dGxlCidsbApsb29r Cmxvb2tpbmcKbG9va3MKbHRkCm0KbWFkZQptYWlubHkKbWFrZQptYWtlcwptYW55Cm1heQptYXli ZQptZQptZWFuCm1lYW5zCm1lYW50aW1lCm1lYW53aGlsZQptZXJlbHkKbWcKbWlnaHQKbWlsbGlv bgptaXNzCm1sCm1vcmUKbW9yZW92ZXIKbW9zdAptb3N0bHkKbXIKbXJzCm11Y2gKbXVnCm11c3QK bXVzdG4ndApteQpteXNlbGYKbgpuYQpuYW1lCm5hbWVseQpuYXkKbmQKbmVhcgpuZWFybHkKbmVj ZXNzYXJpbHkKbmVjZXNzYXJ5Cm5lZWQKbmVlZHMKbmVpdGhlcgpuZXZlcgpuZXZlcnRoZWxlc3MK bmV3Cm5leHQKbmluZQpuaW5ldHkKbm8Kbm9ib2R5Cm5vbgpub25lCm5vbmV0aGVsZXNzCm5vb25l Cm5vcgpub3JtYWxseQpub3MKbm90Cm5vdGVkCm5vdGhpbmcKbm92ZWwKbm93Cm5vd2hlcmUKbwpv YnRhaW4Kb2J0YWluZWQKb2J2aW91c2x5Cm9mCm9mZgpvZnRlbgpvaApvawpva2F5Cm9sZApvbWl0 dGVkCm9uCm9uY2UKb25lCm9uZXMKb25seQpvbnRvCm9yCm9yZApvdGhlcgpvdGhlcnMKb3RoZXJ3 aXNlCm91Z2h0Cm91cgpvdXJzCm91cnNlbHZlcwpvdXQKb3V0c2lkZQpvdmVyCm92ZXJhbGwKb3dp bmcKb3duCnAKcGFnZQpwYWdlcwpwYXJ0CnBhcnRpY3VsYXIKcGFydGljdWxhcmx5CnBhc3QKcGVy CnBlcmhhcHMKcGxhY2VkCnBsZWFzZQpwbHVzCnBvb3JseQpwb3NzaWJsZQpwb3NzaWJseQpwb3Rl bnRpYWxseQpwcApwcmVkb21pbmFudGx5CnByZXNlbnQKcHJlc3VtYWJseQpwcmV2aW91c2x5CnBy aW1hcmlseQpwcm9iYWJseQpwcm9tcHRseQpwcm91ZApwcm92aWRlcwpwdXQKcQpxdWUKcXVpY2ts eQpxdWl0ZQpxdgpyCnJhbgpyYXRoZXIKcmQKcmUKcmVhZGlseQpyZWFsbHkKcmVhc29uYWJseQpy ZWNlbnQKcmVjZW50bHkKcmVmCnJlZnMKcmVnYXJkaW5nCnJlZ2FyZGxlc3MKcmVnYXJkcwpyZWxh dGVkCnJlbGF0aXZlbHkKcmVzZWFyY2gKcmVzcGVjdGl2ZWx5CnJlc3VsdGVkCnJlc3VsdGluZwpy ZXN1bHRzCnJpZ2h0CnJ1bgpzCnNhaWQKc2FtZQpzYXcKc2F5CnNheWluZwpzYXlzCnNlYwpzZWNv bmQKc2Vjb25kbHkKc2VjdGlvbgpzZWUKc2VlaW5nCnNlZW0Kc2VlbWVkCnNlZW1pbmcKc2VlbXMK c2VlbgpzZWxmCnNlbHZlcwpzZW5zaWJsZQpzZW50CnNlcmlvdXMKc2VyaW91c2x5CnNldmVuCnNl dmVyYWwKc2hhbGwKc2hhbid0CnNoZQpzaGVkCnNoZSdkCnNoZSdsbApzaGVzCnNoZSdzCnNob3Vs ZApzaG91bGRuJ3QKc2hvdwpzaG93ZWQKc2hvd24Kc2hvd25zCnNob3dzCnNpZ25pZmljYW50CnNp Z25pZmljYW50bHkKc2ltaWxhcgpzaW1pbGFybHkKc2luY2UKc2l4CnNsaWdodGx5CnNvCnNvbWUK c29tZWJvZHkKc29tZWhvdwpzb21lb25lCnNvbWV0aGFuCnNvbWV0aGluZwpzb21ldGltZQpzb21l dGltZXMKc29tZXdoYXQKc29tZXdoZXJlCnNvb24Kc29ycnkKc3BlY2lmaWNhbGx5CnNwZWNpZmll ZApzcGVjaWZ5CnNwZWNpZnlpbmcKc3RpbGwKc3RvcApzdHJvbmdseQpzdWIKc3Vic3RhbnRpYWxs eQpzdWNjZXNzZnVsbHkKc3VjaApzdWZmaWNpZW50bHkKc3VnZ2VzdApzdXAKc3VyZQpzdXJlIAl0 CnRha2UKdGFrZW4KdGFraW5nCnRlbGwKdGVuZHMKdGgKdGhhbgp0aGFuawp0aGFua3MKdGhhbngK dGhhdAp0aGF0J2xsCnRoYXRzCnRoYXQncwp0aGF0J3ZlCnRoZQp0aGVpcgp0aGVpcnMKdGhlbQp0 aGVtc2VsdmVzCnRoZW4KdGhlbmNlCnRoZXJlCnRoZXJlYWZ0ZXIKdGhlcmVieQp0aGVyZWQKdGhl cmVmb3JlCnRoZXJlaW4KdGhlcmUnbGwKdGhlcmVvZgp0aGVyZXJlCnRoZXJlcwp0aGVyZSdzCnRo ZXJldG8KdGhlcmV1cG9uCnRoZXJlJ3ZlCnRoZXNlCnRoZXkKdGhleWQKdGhleSdkCnRoZXknbGwK dGhleXJlCnRoZXkncmUKdGhleSd2ZQp0aGluawp0aGlyZAp0aGlzCnRob3JvdWdoCnRob3JvdWdo bHkKdGhvc2UKdGhvdQp0aG91Z2gKdGhvdWdoaAp0aG91c2FuZAp0aHJlZQp0aHJvdWcKdGhyb3Vn aAp0aHJvdWdob3V0CnRocnUKdGh1cwp0aWwKdGlwCnRvCnRvZ2V0aGVyCnRvbwp0b29rCnRvd2Fy ZAp0b3dhcmRzCnRyaWVkCnRyaWVzCnRydWx5CnRyeQp0cnlpbmcKdHMKdCdzCnR3aWNlCnR3bwp1 CnVuCnVuZGVyCnVuZm9ydHVuYXRlbHkKdW5sZXNzCnVubGlrZQp1bmxpa2VseQp1bnRpbAp1bnRv CnVwCnVwb24KdXBzCnVzCnVzZQp1c2VkCnVzZWZ1bAp1c2VmdWxseQp1c2VmdWxuZXNzCnVzZXMK dXNpbmcKdXN1YWxseQp2CnZhbHVlCnZhcmlvdXMKJ3ZlCnZlcnkKdmlhCnZpegp2b2wKdm9scwp2 cwp3CndhbnQKd2FudHMKd2FzCndhc250Cndhc24ndAp3YXkKd2UKd2VkCndlJ2QKd2VsY29tZQp3 ZWxsCndlJ2xsCndlbnQKd2VyZQp3ZSdyZQp3ZXJlbnQKd2VyZW4ndAp3ZSd2ZQp3aGF0CndoYXRl dmVyCndoYXQnbGwKd2hhdHMKd2hhdCdzCndoZW4Kd2hlbmNlCndoZW5ldmVyCndoZW4ncwp3aGVy ZQp3aGVyZWFmdGVyCndoZXJlYXMKd2hlcmVieQp3aGVyZWluCndoZXJlcwp3aGVyZSdzCndoZXJl dXBvbgp3aGVyZXZlcgp3aGV0aGVyCndoaWNoCndoaWxlCndoaW0Kd2hpdGhlcgp3aG8Kd2hvZAp3 aG9ldmVyCndob2xlCndobydsbAp3aG9tCndob21ldmVyCndob3MKd2hvJ3MKd2hvc2UKd2h5Cndo eSdzCndpZGVseQp3aWxsCndpbGxpbmcKd2lzaAp3aXRoCndpdGhpbgp3aXRob3V0CndvbmRlcgp3 b250Cndvbid0CndvcmRzCndvcmxkCndvdWxkCndvdWxkbnQKd291bGRuJ3QKd3d3CngKeQp5ZXMK eWV0CnlvdQp5b3VkCnlvdSdkCnlvdSdsbAp5b3VyCnlvdXJlCnlvdSdyZQp5b3Vycwp5b3Vyc2Vs Zgp5b3Vyc2VsdmVzCnlvdSd2ZQp6Cnplcm8K --=_53e918395ee183beed6e0635d3fce0eb Content-Transfer-Encoding: base64 Content-Type: text/plain; name=text.scm Content-Disposition: attachment; filename=text.scm; size=1795 KGRlZmluZS1tb2R1bGUgKHRleHQpKQoKKHVzZS1tb2R1bGVzIChpY2UtOSBwb3BlbikpCih1c2Ut bW9kdWxlcyAoaWNlLTkgcmRlbGltKSkKKHVzZS1tb2R1bGVzIChzcmZpIHNyZmktMSkpCih1c2Ut bW9kdWxlcyAoc3JmaSBzcmZpLTI2KSkKCgo7OzsKOzs7IHdyYXBwaW5nIGh0bWwydGV4dAo7OzsK OzsKOzsgaW5zcGlyZWQgZnJvbSBpY2UtOSBwb3Blbgo7OwoKKGRlZmluZSBvcGVuLXByb2Nlc3Mg KEBAIChpY2UtOSBwb3Blbikgb3Blbi1wcm9jZXNzKSkKCihkZWZpbmUgKGh0bWwydGV4dCBzdHJp bmcpCiAgKHdpdGgtZXJyb3ItdG8tZmlsZSAiL2Rldi9udWxsIgogICAgKGxhbWJkYSAoKQogICAg ICAoY2FsbC13aXRoLXZhbHVlcyAobGFtYmRhICgpIChvcGVuLXByb2Nlc3MgT1BFTl9CT1RIICJo dG1sMnRleHQiKSkKICAgICAgICAobGFtYmRhIChyZWFkLXBvcnQgd3JpdGUtcG9ydCBwaWQpCiAg ICAgICAgICAoZGlzcGxheSBzdHJpbmcgd3JpdGUtcG9ydCkKICAgICAgICAgIChjbG9zZS1wb3J0 IHdyaXRlLXBvcnQpCiAgICAgICAgICAobGV0ICgoc3RyIChyZWFkLXN0cmluZyByZWFkLXBvcnQp KSkKICAgICAgICAgICAgKGNsb3NlLXBvcnQgcmVhZC1wb3J0KQogICAgICAgICAgICAod2FpdHBp ZCBwaWQpCiAgICAgICAgICAgIHN0cikpKSkpKQoKOzs7Cjs7OyB0b2tlbml6aW5nCjs7OwoKOzsg ZW5nbGlzaCBzdG9wIHdvcmRzCjs7IFhYWDogYWN0dWFsbHkgbm90IHZlcnkgdXNlZnVsCgooZGVm aW5lIHN0b3B3b3JkcyAobWFrZS1oYXNoLXRhYmxlKSkKCih3aXRoLWlucHV0LWZyb20tZmlsZSAi c3RvcHdvcmRzLmVuLnR4dCIgIDs7IHNuYXJmZmVkIGZyb20gaHR0cDovL3d3dy5yYW5rcy5ubC9z dG9wd29yZHMvCiAgKGxhbWJkYSAoKQogICAgKGxldCBsb29wICgoc3RvcHdvcmQgKHJlYWQtbGlu ZSkpKQogICAgICAodW5sZXNzIChlb2Ytb2JqZWN0PyBzdG9wd29yZCkKICAgICAgICAoaGFzaC1z ZXQhIHN0b3B3b3JkcyBzdG9wd29yZCAjdCkKICAgICAgICAobG9vcCAocmVhZC1saW5lKSkpKSkp CgooZGVmaW5lIChmaWx0ZXItc3RvcHdvcmRzIGxzdCkKICAoZmlsdGVyIChsYW1iZGEgKHRva2Vu KSAobm90IChoYXNoLXJlZiBzdG9wd29yZHMgdG9rZW4pKSkgbHN0KSkKCjs7IHRva2VucwoKKGRl ZmluZSBwdW5jdHVhdGlvbiAoc3RyaW5nLT5saXN0ICIhXCIjJCUmXFwnKCkqKywtLi86Ozw9Pj9A W1xcXV5fYHt8fX5cblx0IikpCgooZGVmaW5lIChjbGVhbiB0ZXh0KQogICJSZXBsYWNlIHB1bmN0 dWF0aW9uIGNoYXJhY3RlcnMgZnJvbSBURVhUIHdpdGggYSBzcGFjZSBjaGFyYWN0ZXIiCiAgKHN0 cmluZy1tYXAgKGxhbWJkYSAoY2hhcikgKGlmIChsaXN0LWluZGV4IChjdXQgZXF1YWw/IGNoYXIg PD4pIHB1bmN0dWF0aW9uKSAjXHNwYWNlIGNoYXIpKSB0ZXh0KSkKCihkZWZpbmUgc3BsaXQgKGN1 dCBzdHJpbmctc3BsaXQgPD4gI1xzcGFjZSkpCgooZGVmaW5lIChzYW5pdGl6ZSB3b3JkcykKICAi T25seSBrZWVwIHdvcmRzIHRoYXQgaGF2ZSBsZW5ndGggYmlnZ2VyIHRoYW4gb25lIgogIChmaWx0 ZXIgKGxhbWJkYSAod29yZCkgKDwgMSAoc3RyaW5nLWxlbmd0aCB3b3JkKSkpIHdvcmRzKSkKCjs7 IFhYWDogY29tcG9zZSBtdXN0IGJlIHJlYWQgZnJvbSByaWdodCB0byBsZWZ0CihkZWZpbmUgc3Ry aW5nLT50b2tlbnMgKGNvbXBvc2UgZmlsdGVyLXN0b3B3b3JkcyBzYW5pdGl6ZSBzcGxpdCBzdHJp bmctZG93bmNhc2UgY2xlYW4pKQoKKGRlZmluZS1wdWJsaWMgaHRtbC0+dG9rZW5zIChjb21wb3Nl IHN0cmluZy0+dG9rZW5zIGh0bWwydGV4dCkpCg== --=_53e918395ee183beed6e0635d3fce0eb Content-Transfer-Encoding: base64 Content-Type: text/plain; name=wiredtiger.scm Content-Disposition: attachment; filename=wiredtiger.scm; size=30440 OzsgZ3VpbGUtd2lyZWR0aWdlciAtIDAuNCAtIDIwMTYvMDcvMDcKCjs7IENvcHlyaWdodCDCqSAy MDE0LTIwMTYgQW1pcm91Y2hlIEJPVUJFS0tJIDxhbWlyb3VjaGUgYXQgaHlwZXJtb3ZlIG5ldD4K Cjs7IGd1aWxlLXdpcmVkdGlnZXIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91 ciBvcHRpb24pIG9yIHZlcnNpb24gMy4KCjs7IGd1aWxlLXdpcmVkdGlnZXIgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKOzsgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKOzsgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo7 OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKOzsgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKOzsgYWxvbmcgd2l0aCBndWlsZS13aXJlZHRpZ2VyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+Cgo7OzsgQ29tbWVudDoKOzsKOzsgVGVzdGVkIHdpdGggd2ly ZWR0aWdlciBkZXZlbG9wIGJyYW5jaAo7OwoKKGRlZmluZS1tb2R1bGUgKHdpcmVkdGlnZXIpKQoK KHVzZS1tb2R1bGVzIChzcmZpIHNyZmktOSkpICA7OyByZWNvcmRzCih1c2UtbW9kdWxlcyAoc3Jm aSBzcmZpLTkgZ251KSkgIDs7IHNldC1yZWNvcmQtdHlwZS1wcmludGVyIQoodXNlLW1vZHVsZXMg KHNyZmkgc3JmaS0yNikpIDs7IGN1dAoKKHVzZS1tb2R1bGVzIChybnJzIGJ5dGV2ZWN0b3JzKSkK Cih1c2UtbW9kdWxlcyAoaWNlLTkgaWNvbnYpKSAgOzsgc3RyaW5nLT5ieXRldmVjdG9yCih1c2Ut bW9kdWxlcyAoaWNlLTkgbWF0Y2gpKQoodXNlLW1vZHVsZXMgKGljZS05IGZvcm1hdCkpCih1c2Ut bW9kdWxlcyAoaWNlLTkgb3B0YXJncykpICA7OyBsYW1iZGEqCih1c2UtbW9kdWxlcyAoaWNlLTkg cmVjZWl2ZSkpCgoodXNlLW1vZHVsZXMgKHN5c3RlbSBmb3JlaWduKSkgIDs7IGZmaQoKOzs7Cjs7 OyBwbGFpbgo7OzsKOzsKOzsgbWFjcm8gdG8gcXVpY2tseSBkZWZpbmUgcmVjb3Jkcwo7Owo7Owo7 OyBVc2FnZToKOzsKOzsgICAoZGVmaW5lLXJlY29yZC10eXBlIDxjYXI+IHNlYXRzIHdoZWVscykK OzsgICAoZGVmaW5lIHNtYXJ0IChtYWtlLWNhciAyIDQpKQo7OyAgIChjYXItc2VhdHMgc21hcnQp IDs7ID0+IDIKOzsKCihkZWZpbmUtc3ludGF4IGRlZmluZS1yZWNvcmQtdHlwZSoKICAobGFtYmRh ICh4KQogICAgKGRlZmluZSAoJWlkLW5hbWUgbmFtZSkgKHN0cmluZy0+c3ltYm9sIChzdHJpbmct ZHJvcCAoc3RyaW5nLWRyb3AtcmlnaHQgKHN5bWJvbC0+c3RyaW5nIG5hbWUpIDEpIDEpKSkKICAg IChkZWZpbmUgKGlkLW5hbWUgY3R4IG5hbWUpCiAgICAgIChkYXR1bS0+c3ludGF4IGN0eCAoJWlk LW5hbWUgKHN5bnRheC0+ZGF0dW0gbmFtZSkpKSkKICAgIChkZWZpbmUgKGlkLWFwcGVuZCBjdHgg LiBzeW1zKQogICAgICAoZGF0dW0tPnN5bnRheCBjdHggKGFwcGx5IHN5bWJvbC1hcHBlbmQgKG1h cCBzeW50YXgtPmRhdHVtIHN5bXMpKSkpCiAgICAoc3ludGF4LWNhc2UgeCAoKQogICAgICAoKF8g cm5hbWUgZmllbGQgLi4uKQogICAgICAgKGFuZCAoaWRlbnRpZmllcj8gIydybmFtZSkgKGFuZC1t YXAgaWRlbnRpZmllcj8gIycoZmllbGQgLi4uKSkpCiAgICAgICAod2l0aC1zeW50YXggKChjb25z IChpZC1hcHBlbmQgIydybmFtZSAjJ21ha2UtIChpZC1uYW1lICMncm5hbWUgIydybmFtZSkpKQog ICAgICAgICAgICAgICAgICAgICAocHJlZCAoaWQtYXBwZW5kICMncm5hbWUgKGlkLW5hbWUgIydy bmFtZSAjJ3JuYW1lKSAjJz8pKQogICAgICAgICAgICAgICAgICAgICAoKGdldHRlciAuLi4pICht YXAgKGxhbWJkYSAoZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGlkLWFwcGVuZCBmIChpZC1uYW1lICMncm5hbWUgIydybmFtZSkgIyctIGYpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIycoZmllbGQgLi4uKSkpKQogICAgICAgICAj JyhkZWZpbmUtcmVjb3JkLXR5cGUgcm5hbWUKICAgICAgICAgICAgIChjb25zIGZpZWxkIC4uLikK ICAgICAgICAgICAgIHByZWQKICAgICAgICAgICAgIChmaWVsZCBnZXR0ZXIpCiAgICAgICAgICAg ICAuLi4pKSkpKSkKCjs7OyBmZmkgaGVscGVycwoKKGRlZmluZSBOVUxMICVudWxsLXBvaW50ZXIp CihkZWZpbmUgUE9JTlRFUiAnKikKCihkZWZpbmUqIChkeW5hbWljLWxpbmsqICM6b3B0aW9uYWwg bGlicmFyeS1uYW1lKQogIChsZXQgKChzaGFyZWQtb2JqZWN0IChpZiBsaWJyYXJ5LW5hbWUgKGR5 bmFtaWMtbGluayBsaWJyYXJ5LW5hbWUpIChkeW5hbWljLWxpbmspKSkpCiAgICAobGFtYmRhIChy ZXR1cm4tdmFsdWUgZnVuY3Rpb24tbmFtZSAuIGFyZ3VtZW50cykKICAgICAgKGxldCAoKGZ1bmN0 aW9uIChkeW5hbWljLWZ1bmMgZnVuY3Rpb24tbmFtZSBzaGFyZWQtb2JqZWN0KSkpCiAgICAgICAg KHBvaW50ZXItPnByb2NlZHVyZSByZXR1cm4tdmFsdWUgZnVuY3Rpb24gYXJndW1lbnRzKSkpKSkK CihkZWZpbmUgKHBvaW50ZXItPnByb2NlZHVyZSogcmV0dXJuLXR5cGUgZnVuY3Rpb24tcG9pbnRl ciAuIGFyZ3NfdHlwZXMpCiAgKHBvaW50ZXItPnByb2NlZHVyZSByZXR1cm4tdHlwZSBmdW5jdGlv bi1wb2ludGVyIGFyZ3NfdHlwZXMpKQoKKGRlZmluZSAobWFrZSBjb25zdHJ1Y3RvciBwb2ludGVy IHNpemUpCiAgKGxldCogKChwb2ludGVyIChtYWtlLXBvaW50ZXIgKGFycmF5LXJlZiBwb2ludGVy IDApKSkKICAgICAgICAgKHN0cnVjdCAobWFwIG1ha2UtcG9pbnRlciAodTY0dmVjdG9yLT5saXN0 IChwb2ludGVyLT5ieXRldmVjdG9yIHBvaW50ZXIgc2l6ZSAwICd1NjQpKSkpKQogICAgKGFwcGx5 IGNvbnN0cnVjdG9yIChjb25zIHBvaW50ZXIgc3RydWN0KSkpKQoKOzs7Cjs7OyB3aXJlZHRpZ2Vy IGJpbmRpbmdzCjs7OwoKKGRlZmluZSB3aXJlZHRpZ2VyIChkeW5hbWljLWxpbmsqICJsaWJ3aXJl ZHRpZ2VyLnNvIikpCgooZGVmaW5lKiB3aXJlZHRpZ2VyLXN0cmluZy1lcnJvcgogIChsZXQgKChm dW5jdGlvbiAod2lyZWR0aWdlciBQT0lOVEVSICJ3aXJlZHRpZ2VyX3N0cmVycm9yIiBpbnQpKSkK ICAgIChsYW1iZGEgKGNvZGUpCiAgICAgIChwb2ludGVyLT5zdHJpbmcgKGZ1bmN0aW9uIGNvZGUp KSkpKQoKKGRlZmluZSAoY2hlY2sgY29kZSkKICAodW5sZXNzIChlcT8gY29kZSAwKQogICAgKHRo cm93ICd3aXJlZHRpZ2VyICh3aXJlZHRpZ2VyLXN0cmluZy1lcnJvciBjb2RlKSkpKQoKOzs7Cjs7 OyBDb25uZWN0aW9uCjs7OwoKKGRlZmluZS1yZWNvcmQtdHlwZSogPCpjb25uZWN0aW9uPgogIHBv aW50ZXIKCiAgYXN5bmMtZmx1c2gKICBhc3luYy1uZXctb3AKICBjbG9zZQogIHJlY29uZmlndXJl CiAgZ2V0LWhvbWUKICBjb25maWd1cmUtbWV0aG9kCiAgaXMtbmV3CiAgb3Blbi1zZXNzaW9uCiAg bG9hZC1leHRlbnNpb24KICBhZGQtZGF0YS1zb3VyY2UKICBhZGQtY29sbGF0b3IKICBhZGQtY29t cHJlc3NvcgogIGFkZC1lbmNyeXB0b3IKICBhZGQtZXh0cmFjdG9yCiAgZ2V0LWV4dGVuc2lvbi1h cGkpCgooc2V0LXJlY29yZC10eXBlLXByaW50ZXIhIDwqY29ubmVjdGlvbj4KICAgICAgICAgICAg ICAgICAgICAgICAgICAobGFtYmRhIChyZWNvcmQgcG9ydCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChmb3JtYXQgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi PGNvbm5lY3Rpb24gMHh+eD4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw b2ludGVyLWFkZHJlc3MgKCpjb25uZWN0aW9uLXBvaW50ZXIgcmVjb3JkKSkpKSkKCihkZWZpbmUt cHVibGljIGNvbm5lY3Rpb24tb3BlbgogIChsZXQgKChmdW5jdGlvbiAod2lyZWR0aWdlciBpbnQg IndpcmVkdGlnZXJfb3BlbiIgUE9JTlRFUiBQT0lOVEVSIFBPSU5URVIgUE9JTlRFUikpKQogICAg KGxhbWJkYSAoaG9tZSBjb25maWcpCiAgICAgIChsZXQqICg7OyBpbml0IGEgZG91YmxlIHBvaW50 ZXIKICAgICAgICAgICAgIChwb2ludGVyICh1NjR2ZWN0b3IgMCkpCiAgICAgICAgICAgICAoZG91 YmxlLXBvaW50ZXIgKGJ5dGV2ZWN0b3ItPnBvaW50ZXIgcG9pbnRlcikpCiAgICAgICAgICAgICA7 OyBjb252ZXJ0IGFyZ3VtZW50cyB0byBjIHR5cGVzCiAgICAgICAgICAgICAoaG9tZSAoc3RyaW5n LT5wb2ludGVyIGhvbWUpKQogICAgICAgICAgICAgKGNvbmZpZyAoc3RyaW5nLT5wb2ludGVyIGNv bmZpZykpKQogICAgICA7OyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIGVycm9yX2hhbmRsZXIKICAg ICAgKGNoZWNrIChmdW5jdGlvbiBob21lIE5VTEwgY29uZmlnIGRvdWJsZS1wb2ludGVyKSkKICAg ICAgKG1ha2UgbWFrZS0qY29ubmVjdGlvbiBwb2ludGVyIDE1KSkpKSkKCgooZGVmaW5lKi1wdWJs aWMgKGNvbm5lY3Rpb24tY2xvc2UgY29ubmVjdGlvbiAjOm9wdGlvbmFsIChjb25maWcgIiIpKQog IChsZXQgKChmdW5jdGlvbiAocG9pbnRlci0+cHJvY2VkdXJlKiBpbnQgKCpjb25uZWN0aW9uLWNs b3NlIGNvbm5lY3Rpb24pIFBPSU5URVIgUE9JTlRFUikpKQogICAgKGxldCogKDs7IGluaXQgYSBk b3VibGUgcG9pbnRlcgogICAgICAgICAgIChwb2ludGVyICh1NjR2ZWN0b3IgMCkpCiAgICAgICAg ICAgKGRvdWJsZS1wb2ludGVyIChieXRldmVjdG9yLT5wb2ludGVyIHBvaW50ZXIpKQogICAgICAg ICAgIDs7IGNvbnZlcnQgYXJndW1lbnRzIHRvIGMgdHlwZXMKICAgICAgICAgICAoY29uZmlnIChz dHJpbmctPnBvaW50ZXIgY29uZmlnKSkpCiAgICAgICAgICAgOzsgRklYTUU6IGFkZCBzdXBwb3J0 IGZvciBlcnJvcl9oYW5kbGVyCiAgICAgIChjaGVjayAoZnVuY3Rpb24gKCpjb25uZWN0aW9uLXBv aW50ZXIgY29ubmVjdGlvbikgY29uZmlnKSkpKSkKCihkZWZpbmUgKG1ha2UtY29sbGF0b3IgZm9y bWF0IHByb2MpCiAgKGxhbWJkYSAoY29sbGF0b3Igc2Vzc2lvbiBrZXkgb3RoZXIgY21wKQogICAg ICAgIChsZXQqICgoa2V5IChwb2ludGVyLT5ieXRldmVjdG9yIGtleSAyIDAgJ3U2NCkpCiAgICAg ICAgICAgICAgICAgICAoa2V5ICgld2lyZWR0aWdlci1zdHJ1Y3QtdW5wYWNrIHNlc3Npb24gKG1h a2UtcG9pbnRlciAoYXJyYXktcmVmIGtleSAwKSkgKGFycmF5LXJlZiBrZXkgMSkgZm9ybWF0KSkp CiAgICAgICAgICAobGV0KiAoKG90aGVyIChwb2ludGVyLT5ieXRldmVjdG9yIG90aGVyIDIgMCAn dTY0KSkKICAgICAgICAgICAgICAgICAob3RoZXIgKCV3aXJlZHRpZ2VyLXN0cnVjdC11bnBhY2sg c2Vzc2lvbiAobWFrZS1wb2ludGVyIChhcnJheS1yZWYgb3RoZXIgMCkpIChhcnJheS1yZWYgb3Ro ZXIgMSkgZm9ybWF0KSkpCiAgICAgICAgICAgICAgICAgICAgICAgIChzMzJ2ZWN0b3Itc2V0ISAo cG9pbnRlci0+Ynl0ZXZlY3RvciBjbXAgMSAwICdzMzIpIDAgKHByb2Mga2V5IG90aGVyKSkKICAg ICAgICAgICAgICAgICAgICAgICAgMCkpKSkKCihkZWZpbmUtcHVibGljIChjb25uZWN0aW9uLWFk ZC1jb2xsYXRvciBjb25uZWN0aW9uIG5hbWUgZm9ybWF0IHByb2MpCiAgImFkZCBQUk9DIGFzIGEg Y29sbGF0b3IgbmFtZWQgTkFNRSBhZ2FpbnN0IENPTk5FQ1RJT04iCiAgKGxldCogKChmdW5jdGlv biAocG9pbnRlci0+cHJvY2VkdXJlKiBpbnQgKCpjb25uZWN0aW9uLWFkZC1jb2xsYXRvciBjb25u ZWN0aW9uKSAnKiAnKiAnKiAnKikpCiAgICAgICAgICAgICAgICAgKGNvbGxhdG9yIChwb2ludGVy LWFkZHJlc3MgKHByb2NlZHVyZS0+cG9pbnRlciBpbnQgKG1ha2UtY29sbGF0b3IgZm9ybWF0IHBy b2MpIChsaXN0ICcqICcqICcqICcqICcqKSkpKQogICAgICAgICAgICAgICAgIChjb2xsYXRvciAo Ynl0ZXZlY3Rvci0+cG9pbnRlciAodTY0dmVjdG9yIGNvbGxhdG9yIDAgMCkpKSkKICAgICAgICAo Y2hlY2sgKGZ1bmN0aW9uICgqY29ubmVjdGlvbi1wb2ludGVyIGNvbm5lY3Rpb24pCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy0+cG9pbnRlciBuYW1lKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhdG9yCk5VTEwpKSkp Cgo7OzsKOzs7IFNlc3Npb24KOzs7CgooZGVmaW5lLXJlY29yZC10eXBlKiA8KnNlc3Npb24+CiAg cG9pbnRlcgoKICBjb25uZWN0aW9uCiAgYXBwLXByaXZhdGUKICBjbG9zZQogIHJlY29uZmlndXJl CiAgc3RyaW5nLWVycm9yCiAgY3Vyc29yLW9wZW4KICBjcmVhdGUKICBjb21wYWN0CiAgZHJvcAog IGpvaW4KICBsb2ctZmx1c2gKICBsb2ctcHJpbnRmCiAgcmViYWxhbmNlCiAgcmVuYW1lCiAgcmVz ZXQKICBzYWx2YWdlCiAgdHJ1bmNhdGUKICB1cGdyYWRlCiAgdmVyaWZ5CiAgdHJhbnNhY3Rpb24t YmVnaW4KICB0cmFuc2FjdGlvbi1jb21taXQKICB0cmFuc2FjdGlvbi1yb2xsYmFjawogIGNoZWNr cG9pbnQKICBzbmFwc2hvdAogIHRyYW5zYWN0aW9uLXBpbm5lZC1yYW5nZQogIHRyYW5zYWN0aW9u LXN5bmMpCgooc2V0LXJlY29yZC10eXBlLXByaW50ZXIhIDwqc2Vzc2lvbj4KICAgICAgICAgICAg ICAgICAgICAgICAgICAobGFtYmRhIChyZWNvcmQgcG9ydCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChmb3JtYXQgcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi PHNlc3Npb24gMHh+eD4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2lu dGVyLWFkZHJlc3MgKCpzZXNzaW9uLXBvaW50ZXIgcmVjb3JkKSkpKSkKCihkZWZpbmUgKHNlc3Np b24tc3RyaW5nLWVycm9yKiBzZXNzaW9uIGNvZGUpCiAgKGxldCAoKGZ1bmN0aW9uIChwb2ludGVy LT5wcm9jZWR1cmUqIFBPSU5URVIgKCpzZXNzaW9uLXN0cmluZy1lcnJvciBzZXNzaW9uKSBQT0lO VEVSIGludCkpKQogICAgKHBvaW50ZXItPnN0cmluZyAoZnVuY3Rpb24gKCpzZXNzaW9uLXBvaW50 ZXIgc2Vzc2lvbikgY29kZSkpKSkKCihkZWZpbmUgKHNlc3Npb24tY2hlY2sgc2Vzc2lvbiBjb2Rl KQogICh1bmxlc3MgKGVxPyBjb2RlIDApCiAgICAodGhyb3cgJ3dpcmVkdGlnZXIgKHNlc3Npb24t c3RyaW5nLWVycm9yKiBzZXNzaW9uIGNvZGUpKSkpCgooZGVmaW5lKi1wdWJsaWMgKHNlc3Npb24t b3BlbiBjb25uZWN0aW9uICM6b3B0aW9uYWwgKGNvbmZpZyAiIikpCiAgKGxldCAoKGZ1bmN0aW9u IChwb2ludGVyLT5wcm9jZWR1cmUqIGludCAoKmNvbm5lY3Rpb24tb3Blbi1zZXNzaW9uIGNvbm5l Y3Rpb24pIFBPSU5URVIgUE9JTlRFUiBQT0lOVEVSIFBPSU5URVIpKSkKICAgIChsZXQqICg7OyBp bml0IGEgZG91YmxlIHBvaW50ZXIKICAgICAgICAgICAocG9pbnRlciAodTY0dmVjdG9yIDApKQog ICAgICAgICAgIChkb3VibGUtcG9pbnRlciAoYnl0ZXZlY3Rvci0+cG9pbnRlciBwb2ludGVyKSkK ICAgICAgICAgICA7OyBjb252ZXJ0IGFyZ3VtZW50cyB0byBjIHR5cGVzCiAgICAgICAgICAgKGNv bmZpZyAoc3RyaW5nLT5wb2ludGVyIGNvbmZpZykpCiAgICAgICAgICAgOzsgY2FsbCB0aGUgZm9y ZWlnbiBmdW5jdGlvbgogICAgICAgICAgIDs7IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZXJyb3Jf aGFuZGxlcgogICAgICAgICAgIChjb2RlIChmdW5jdGlvbiAoKmNvbm5lY3Rpb24tcG9pbnRlciBj b25uZWN0aW9uKSBOVUxMIGNvbmZpZyBkb3VibGUtcG9pbnRlcikpKQogICAgICAoY2hlY2sgIGNv ZGUpCiAgICAgIChtYWtlIG1ha2UtKnNlc3Npb24gcG9pbnRlciAyNikpKSkKCihkZWZpbmUtcHVi bGljIChzZXNzaW9uLWNyZWF0ZSBzZXNzaW9uIG5hbWUgY29uZmlnKQogIChsZXQgKChmdW5jdGlv biAocG9pbnRlci0+cHJvY2VkdXJlKiBpbnQgKCpzZXNzaW9uLWNyZWF0ZSBzZXNzaW9uKSBQT0lO VEVSIFBPSU5URVIgUE9JTlRFUikpKQogICAgKGxldCogKDs7IGNvbnZlcnQgYXJndW1lbnRzIHRv IGMgdHlwZXMKICAgICAgICAgICAobmFtZSAoc3RyaW5nLT5wb2ludGVyIG5hbWUpKQogICAgICAg ICAgIChjb25maWcgKHN0cmluZy0+cG9pbnRlciBjb25maWcpKQogICAgICAgICAgIDs7IGNhbGwg dGhlIGZvcmVpZ24gZnVuY3Rpb24KICAgICAgICAgICAoY29kZSAoZnVuY3Rpb24gKCpzZXNzaW9u LXBvaW50ZXIgc2Vzc2lvbikgbmFtZSBjb25maWcpKSkKICAgICAgKHNlc3Npb24tY2hlY2sgc2Vz c2lvbiBjb2RlKSkpKQoKKGRlZmluZS1wdWJsaWMgKHNlc3Npb24tY2xvc2Ugc2Vzc2lvbikKICAo bGV0ICgoZnVuY3Rpb24gKHBvaW50ZXItPnByb2NlZHVyZSogaW50ICgqc2Vzc2lvbi1jbG9zZSBz ZXNzaW9uKSBQT0lOVEVSKSkpCiAgICAoc2Vzc2lvbi1jaGVjayBzZXNzaW9uIChmdW5jdGlvbiAo KnNlc3Npb24tcG9pbnRlciBzZXNzaW9uKSkpKSkKCihkZWZpbmUqLXB1YmxpYyAoc2Vzc2lvbi10 cmFuc2FjdGlvbi1iZWdpbiBzZXNzaW9uICM6b3B0aW9uYWwgKGNvbmZpZyAiIikpCiAgKGxldCAo KGZ1bmN0aW9uIChwb2ludGVyLT5wcm9jZWR1cmUqIGludCAoKnNlc3Npb24tdHJhbnNhY3Rpb24t YmVnaW4gc2Vzc2lvbikgUE9JTlRFUiBQT0lOVEVSKSkpCiAgICAoc2Vzc2lvbi1jaGVjayBzZXNz aW9uIChmdW5jdGlvbiAoKnNlc3Npb24tcG9pbnRlciBzZXNzaW9uKSAoc3RyaW5nLT5wb2ludGVy IGNvbmZpZykpKSkpCgooZGVmaW5lKi1wdWJsaWMgKHNlc3Npb24tdHJhbnNhY3Rpb24tY29tbWl0 IHNlc3Npb24gIzpvcHRpb25hbCAoY29uZmlnICIiKSkKICAobGV0ICgoZnVuY3Rpb24gKHBvaW50 ZXItPnByb2NlZHVyZSogaW50ICgqc2Vzc2lvbi10cmFuc2FjdGlvbi1jb21taXQgc2Vzc2lvbikg UE9JTlRFUiBQT0lOVEVSKSkpCiAgICAoc2Vzc2lvbi1jaGVjayBzZXNzaW9uIChmdW5jdGlvbiAo KnNlc3Npb24tcG9pbnRlciBzZXNzaW9uKSAoc3RyaW5nLT5wb2ludGVyIGNvbmZpZykpKSkpCgoo ZGVmaW5lKi1wdWJsaWMgKHNlc3Npb24tdHJhbnNhY3Rpb24tcm9sbGJhY2sgc2Vzc2lvbiAjOm9w dGlvbmFsIChjb25maWcgIiIpKQogIChsZXQgKChmdW5jdGlvbiAocG9pbnRlci0+cHJvY2VkdXJl KiBpbnQgKCpzZXNzaW9uLXRyYW5zYWN0aW9uLXJvbGxiYWNrIHNlc3Npb24pIFBPSU5URVIgUE9J TlRFUikpKQogICAgKHNlc3Npb24tY2hlY2sgc2Vzc2lvbiAoZnVuY3Rpb24gKCpzZXNzaW9uLXBv aW50ZXIgc2Vzc2lvbikgKHN0cmluZy0+cG9pbnRlciBjb25maWcpKSkpKQoKOzs7Cjs7OyBDdXJz b3IKOzs7CgooZGVmaW5lLXJlY29yZC10eXBlKiA8KmN1cnNvcj4KICBwb2ludGVyCiAgc2Vzc2lv bgogIGNvbmZpZwoKICBzZXNzaW9uLXBvaW50ZXIKICB1cmkKICBrZXktZm9ybWF0CiAgdmFsdWUt Zm9ybWF0CiAga2V5LXJlZgogIHZhbHVlLXJlZgogIGtleS1zZXQKICB2YWx1ZS1zZXQKICBjb21w YXJlCiAgZXF1YWxzCiAgbmV4dAogIHByZXZpb3VzCiAgcmVzZXQKICBzZWFyY2gKICBzZWFyY2gt bmVhcgogIGluc2VydAogIHVwZGF0ZQogIHJlbW92ZQogIGNsb3NlCiAgcmVjb25maWd1cmUKICA7 OyBYWFg6IG90aGVyIGZpZWxkcyBhcmUgZGVmaW5lZCBpbiB0aGUgaGVhZGVyCiAgOzsgICAgICB0 aG9zZSBhcmUgb25seSB1c2VmdWwgdG8gaW1wbGVtZW50IGEgbmV3IGN1cnNvciB0eXBlCiAgOzsg ICAgICBhbmQgYXMgc3VjaCBhcmUgbm90IHBhcnQgdGhlIHJlY29yZAogICkKCihzZXQtcmVjb3Jk LXR5cGUtcHJpbnRlciEgPCpjdXJzb3I+CiAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJk YSAocmVjb3JkIHBvcnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0IHBvcnQK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxjdXJzb3IgMHh+eCB1cmk9fnMg a2V5PX5zIHZhbHVlPX5zIGNvbmZpZz1+cz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChwb2ludGVyLWFkZHJlc3MgKCpjdXJzb3ItcG9pbnRlciByZWNvcmQpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnRlci0+c3RyaW5nICgqY3Vyc29yLXVy aSByZWNvcmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3Vyc29yLWtl eS1mb3JtYXQgcmVjb3JkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3Vy c29yLXZhbHVlLWZvcm1hdCByZWNvcmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgqY3Vyc29yLWNvbmZpZyByZWNvcmQpKSkpCgooZGVmaW5lIChjdXJzb3Ita2V5LWZvcm1h dCBjdXJzb3IpCiAgOzsgRklYTUU6IGNhY2hlIHRoaXMgdmFsdWUKICAocG9pbnRlci0+c3RyaW5n ICgqY3Vyc29yLWtleS1mb3JtYXQgY3Vyc29yKSkpCgooZGVmaW5lIChjdXJzb3ItdmFsdWUtZm9y bWF0IGN1cnNvcikKICA7OyBGSVhNRTogY2FjaGUgdGhpcyB2YWx1ZQogIChwb2ludGVyLT5zdHJp bmcgKCpjdXJzb3ItdmFsdWUtZm9ybWF0IGN1cnNvcikpKQoKKGRlZmluZSotcHVibGljIChjdXJz b3Itb3BlbiBzZXNzaW9uIHVyaSAjOm9wdGlvbmFsIChjb25maWcgIiIpKQogIChsZXQgKChmdW5j dGlvbiAocG9pbnRlci0+cHJvY2VkdXJlKiBpbnQgKCpzZXNzaW9uLWN1cnNvci1vcGVuIHNlc3Np b24pIFBPSU5URVIgUE9JTlRFUiBQT0lOVEVSIFBPSU5URVIgUE9JTlRFUikpKQogICAgKGxldCog KDs7IGluaXQgYSBkb3VibGUgcG9pbnRlcgogICAgICAgICAgIChwb2ludGVyICh1NjR2ZWN0b3Ig MCkpCiAgICAgICAgICAgKGRvdWJsZS1wb2ludGVyIChieXRldmVjdG9yLT5wb2ludGVyIHBvaW50 ZXIpKQogICAgICAgICAgIDs7IGNhbGwgdGhlIGZvcmVpZ24gZnVuY3Rpb24KICAgICAgICAgICAo Y29kZSAoZnVuY3Rpb24gKCpzZXNzaW9uLXBvaW50ZXIgc2Vzc2lvbikKICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZy0+cG9pbnRlciB1cmkpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy0+cG9pbnRlciBjb25m aWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZS1wb2ludGVyKSkpCiAgICAgIChz ZXNzaW9uLWNoZWNrIHNlc3Npb24gY29kZSkKICAgICAgOzsgbWFrZSBjdXJzb3IgcmVjb3JkCiAg ICAgIChsZXQqICgoc2l6ZSAyMCkKICAgICAgICAgICAgIChwb2ludGVyIChtYWtlLXBvaW50ZXIg KGFycmF5LXJlZiBwb2ludGVyIDApKSkKICAgICAgICAgICAgIChzdHJ1Y3QgKG1hcCBtYWtlLXBv aW50ZXIgKHU2NHZlY3Rvci0+bGlzdCAocG9pbnRlci0+Ynl0ZXZlY3RvciBwb2ludGVyIHNpemUg MCAndTY0KSkpKSkKICAgICAgICAoYXBwbHkgbWFrZS0qY3Vyc29yIChjb25zKiBwb2ludGVyIHNl c3Npb24gY29uZmlnIHN0cnVjdCkpKSkpKQoKOzs7IGtleS92YWx1ZSBzZXQvcmVmCgooZGVmaW5l IChpdGVtLT5zdHJpbmcgYnYpCiAgKHBvaW50ZXItPnN0cmluZyAobWFrZS1wb2ludGVyIChhcnJh eS1yZWYgYnYgMCkpKSkKCihkZWZpbmUgKGl0ZW0tPmludGVnZXIgYnYpCiAgKGFycmF5LXJlZiBi diAwKSkKCihkZWZpbmUgKGl0ZW0tPnNpZ25lZC1pbnRlZ2VyIGJ2KQogIChzMzJ2ZWN0b3ItcmVm IGJ2IDApKQoKKGRlZmluZSAoaXRlbS0+Ynl0ZXMgaXRlbSkKICAobGV0KiAoKHNpemUgKHMzMnZl Y3Rvci1yZWYgaXRlbSAyKSkpCiAgICAoaWYgKHplcm8/IHNpemUpCiAgICAgICAgI3Z1OCgpCiAg ICAgICAgKGJ5dGV2ZWN0b3ItY29weSAocG9pbnRlci0+Ynl0ZXZlY3RvciAobWFrZS1wb2ludGVy IChzNjR2ZWN0b3ItcmVmIGl0ZW0gMCkpIHNpemUgMCAndTgpKSkpKQoKKGRlZmluZSAqaXRlbS0+ dmFsdWUqIGAoKCNcUyAuICxpdGVtLT5zdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICgj XFEgLiAsaXRlbS0+aW50ZWdlcikKICAgICAgICAgICAgICAgICAgICAgICAgKCNccSAuICxpdGVt LT5zaWduZWQtaW50ZWdlcikKICAgICAgICAgICAgICAgICAgICAgICAgKCNcciAuICxpdGVtLT5p bnRlZ2VyKQogICAgICAgICAgICAgICAgICAgICAgICAoI1x1IC4gLGl0ZW0tPmJ5dGVzKSkpCgoo ZGVmaW5lIChwb2ludGVycy0+c2NtIGZvcm1hdHMgcG9pbnRlcnMpCiAgKGxldCBsb29wICgoZm9y bWF0cyAoc3RyaW5nLT5saXN0IGZvcm1hdHMpKQogICAgICAgICAgICAgKHBvaW50ZXJzIHBvaW50 ZXJzKQogICAgICAgICAgICAgKG91dCAnKCkpKQogICAgKGNvbmQKICAgICAoKGFuZCAobnVsbD8g Zm9ybWF0cykgKG51bGw/IHBvaW50ZXJzKSkgb3V0KQogICAgICgob3IgKG51bGw/IGZvcm1hdHMp IChudWxsPyBwb2ludGVycykpCiAgICAgICh0aHJvdyAnd2lyZWR0aWdlciAiZmFpbGVkIHRvIHJl ZiBjdXJzb3IgdmFsdWUgZHVlIHRvIGZvcm1hdCBlcnJvciIpKQogICAgIChlbHNlIChsb29wIChj ZHIgZm9ybWF0cykKICAgICAgICAgICAgICAgICAoY2RyIHBvaW50ZXJzKQogICAgICAgICAgICAg ICAgIChhcHBlbmQgb3V0IChsaXN0ICgoYXNzb2MtcmVmICppdGVtLT52YWx1ZSogKGNhciBmb3Jt YXRzKSkgKGNhciBwb2ludGVycykpKSkpKSkpKQoKKGRlZmluZS1wdWJsaWMgKGN1cnNvci1rZXkt cmVmIGN1cnNvcikKICAobGV0KiAoKGFyZ3MgKG1hcCAobGFtYmRhIF8gKHU2NHZlY3RvciAwIDAp KSAoc3RyaW5nLT5saXN0IChjdXJzb3Ita2V5LWZvcm1hdCBjdXJzb3IpKSkpCiAgICAgICAgIChh cmdzKiAoY29ucyAoKmN1cnNvci1wb2ludGVyIGN1cnNvcikgKG1hcCBieXRldmVjdG9yLT5wb2lu dGVyIGFyZ3MpKSkKICAgICAgICAgKHNpZ25hdHVyZSAobWFwIChsYW1iZGEgXyBQT0lOVEVSKSBh cmdzKikpCiAgICAgICAgIChmdW5jdGlvbiAocG9pbnRlci0+cHJvY2VkdXJlIGludCAoKmN1cnNv ci1rZXktcmVmIGN1cnNvcikgc2lnbmF0dXJlKSkpCiAgICAoYXBwbHkgZnVuY3Rpb24gYXJncyop CiAgICAocG9pbnRlcnMtPnNjbSAoY3Vyc29yLWtleS1mb3JtYXQgY3Vyc29yKSBhcmdzKSkpCgoo ZGVmaW5lLXB1YmxpYyAoY3Vyc29yLXZhbHVlLXJlZiBjdXJzb3IpCiAgKGxldCogKChhcmdzICht YXAgKGxhbWJkYSBfICh1NjR2ZWN0b3IgMCAwKSkgKHN0cmluZy0+bGlzdCAoY3Vyc29yLXZhbHVl LWZvcm1hdCBjdXJzb3IpKSkpCiAgICAgICAgIChhcmdzKiAoY29ucyAoKmN1cnNvci1wb2ludGVy IGN1cnNvcikgKG1hcCBieXRldmVjdG9yLT5wb2ludGVyIGFyZ3MpKSkKICAgICAgICAgKHNpZ25h dHVyZSAobWFwIChsYW1iZGEgXyBQT0lOVEVSKSBhcmdzKikpCiAgICAgICAgIChmdW5jdGlvbiAo cG9pbnRlci0+cHJvY2VkdXJlIGludCAoKmN1cnNvci12YWx1ZS1yZWYgY3Vyc29yKSBzaWduYXR1 cmUpKSkKICAgIChhcHBseSBmdW5jdGlvbiBhcmdzKikKICAgIChwb2ludGVycy0+c2NtIChjdXJz b3ItdmFsdWUtZm9ybWF0IGN1cnNvcikgYXJncykpKQoKOzs7IHNldCBwcm9jZWR1cmVzCgooZGVm aW5lIG1ha2Utc3RyaW5nLXBvaW50ZXIKICAoY29tcG9zZSBieXRldmVjdG9yLT5wb2ludGVyCiAg ICAgICAgICAgKGN1dCBzdHJpbmctPmJ5dGV2ZWN0b3IgPD4gInV0Zi04IikKICAgICAgICAgICAo Y3V0IHN0cmluZy1hcHBlbmQgPD4gIlwwIikpKQoKKGRlZmluZSAobWFrZS1ieXRlcy1pdGVtIGJ2 KQogIChsZXQgKChpdGVtICAodTY0dmVjdG9yIDAgMCkpKQogICAgKHMzMnZlY3Rvci1zZXQhIGl0 ZW0gMiAoYnl0ZXZlY3Rvci1sZW5ndGggYnYpKQogICAgKHU2NHZlY3Rvci1zZXQhIGl0ZW0gMCAo cG9pbnRlci1hZGRyZXNzIChieXRldmVjdG9yLT5wb2ludGVyIGJ2KSkpCiAgICAoYnl0ZXZlY3Rv ci0+cG9pbnRlciBpdGVtKSkpCgoKKGRlZmluZSAqZm9ybWF0LT5wb2ludGVyKiBgKCgjXFMgLiAs bWFrZS1zdHJpbmctcG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgjXFEgLiAs bWFrZS1wb2ludGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCNccSAuICxtYWtlLXBv aW50ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoI1xyIC4gLG1ha2UtcG9pbnRlcikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgjXHUgLiAsbWFrZS1ieXRlcy1pdGVtKSkpCgoo ZGVmaW5lIChmb3JtYXRzLT5pdGVtcyBmb3JtYXRzIHZhbHVlcykKICAobGV0IGxvb3AgKChmb3Jt YXRzIChzdHJpbmctPmxpc3QgZm9ybWF0cykpCiAgICAgICAgICAgICAodmFsdWVzIHZhbHVlcykK ICAgICAgICAgICAgIChvdXQgJygpKSkKICAgIChjb25kCiAgICAgKChhbmQgKG51bGw/IGZvcm1h dHMpIChudWxsPyB2YWx1ZXMpKSBvdXQpCiAgICAgKChvciAobnVsbD8gZm9ybWF0cykgKG51bGw/ IHZhbHVlcykpCiAgICAgICh0aHJvdyAnd2lyZWR0aWdlciAiZmFpbGVkIHRvIHNldCBjdXJzb3Ig ZHVlIHRvIGZvcm1hdCBlcnJvciIpKQogICAgIChlbHNlIChsb29wIChjZHIgZm9ybWF0cykKICAg ICAgICAgICAgICAgICAoY2RyIHZhbHVlcykKICAgICAgICAgICAgICAgICAoYXBwZW5kIG91dCAo bGlzdCAoKGFzc29jLXJlZiAqZm9ybWF0LT5wb2ludGVyKiAoY2FyIGZvcm1hdHMpKSAoY2FyIHZh bHVlcykpKSkpKSkpKQoKKGRlZmluZS1wdWJsaWMgKGN1cnNvci1rZXktc2V0IGN1cnNvciAuIGtl eSkKICAobGV0KiAoKGFyZ3MgKGNvbnMgKCpjdXJzb3ItcG9pbnRlciBjdXJzb3IpIChmb3JtYXRz LT5pdGVtcyAoY3Vyc29yLWtleS1mb3JtYXQgY3Vyc29yKSBrZXkpKSkKICAgICAgICAgKHNpZ25h dHVyZSAobWFwIChsYW1iZGEgaWdub3JlIFBPSU5URVIpIGFyZ3MpKQogICAgICAgICAoZnVuY3Rp b24gKHBvaW50ZXItPnByb2NlZHVyZSBpbnQgKCpjdXJzb3Ita2V5LXNldCBjdXJzb3IpIHNpZ25h dHVyZSkpKQogICAgKGFwcGx5IGZ1bmN0aW9uIGFyZ3MpKSkKCihkZWZpbmUtcHVibGljIChjdXJz b3ItdmFsdWUtc2V0IGN1cnNvciAuIHZhbHVlKQogIChsZXQqICgoYXJncyAoY29ucyAoKmN1cnNv ci1wb2ludGVyIGN1cnNvcikgKGZvcm1hdHMtPml0ZW1zIChjdXJzb3ItdmFsdWUtZm9ybWF0IGN1 cnNvcikgdmFsdWUpKSkKICAgICAgICAgKHNpZ25hdHVyZSAobWFwIChsYW1iZGEgaWdub3JlIFBP SU5URVIpIGFyZ3MpKQogICAgICAgICAoZnVuY3Rpb24gKHBvaW50ZXItPnByb2NlZHVyZSBpbnQg KCpjdXJzb3ItdmFsdWUtc2V0IGN1cnNvcikgc2lnbmF0dXJlKSkpCiAgICAoYXBwbHkgZnVuY3Rp b24gYXJncykpKQoKKGRlZmluZS1wdWJsaWMgKGN1cnNvci1yZXNldCBjdXJzb3IpCiAgKGxldCAo KGZ1bmN0aW9uIChwb2ludGVyLT5wcm9jZWR1cmUqIGludCAoKmN1cnNvci1yZXNldCBjdXJzb3Ip IFBPSU5URVIpKSkKICAgIChzZXNzaW9uLWNoZWNrICgqY3Vyc29yLXNlc3Npb24gY3Vyc29yKSAo ZnVuY3Rpb24gKCpjdXJzb3ItcG9pbnRlciBjdXJzb3IpKSkpKQoKKGRlZmluZS1wdWJsaWMgKGN1 cnNvci1uZXh0IGN1cnNvcikKICAobGV0ICgoZnVuY3Rpb24gKHBvaW50ZXItPnByb2NlZHVyZSog aW50ICgqY3Vyc29yLW5leHQgY3Vyc29yKSBQT0lOVEVSKSkpCiAgICAoc2Vzc2lvbi1jaGVjayAo KmN1cnNvci1zZXNzaW9uIGN1cnNvcikgKGZ1bmN0aW9uICgqY3Vyc29yLXBvaW50ZXIgY3Vyc29y KSkpKSkKCihkZWZpbmUtcHVibGljIChjdXJzb3ItcHJldmlvdXMgY3Vyc29yKQogIChsZXQgKChm dW5jdGlvbiAocG9pbnRlci0+cHJvY2VkdXJlKiBpbnQgKCpjdXJzb3ItcHJldmlvdXMgY3Vyc29y KSBQT0lOVEVSKSkpCiAgICAoc2Vzc2lvbi1jaGVjayAoKmN1cnNvci1zZXNzaW9uIGN1cnNvcikg KGZ1bmN0aW9uICgqY3Vyc29yLXBvaW50ZXIgY3Vyc29yKSkpKSkKCihkZWZpbmUtcHVibGljIChj dXJzb3Itc2VhcmNoIGN1cnNvcikKICAobGV0ICgoZnVuY3Rpb24gKHBvaW50ZXItPnByb2NlZHVy ZSogaW50ICgqY3Vyc29yLXNlYXJjaCBjdXJzb3IpIFBPSU5URVIpKSkKICAgIChzZXNzaW9uLWNo ZWNrICgqY3Vyc29yLXNlc3Npb24gY3Vyc29yKSAoZnVuY3Rpb24gKCpjdXJzb3ItcG9pbnRlciBj dXJzb3IpKSkpKQoKKGRlZmluZS1wdWJsaWMgKGN1cnNvci1zZWFyY2gtbmVhciBjdXJzb3IpCiAg KGxldCAoKGZ1bmN0aW9uIChwb2ludGVyLT5wcm9jZWR1cmUqIGludCAoKmN1cnNvci1zZWFyY2gt bmVhciBjdXJzb3IpIFBPSU5URVIgUE9JTlRFUikpKQogICAgKGxldCogKChpbnRlZ2VyIChzMzJ2 ZWN0b3IgMCkpCiAgICAgICAgICAgKHBvaW50ZXIgKGJ5dGV2ZWN0b3ItPnBvaW50ZXIgaW50ZWdl cikpKQogICAgICAoc2Vzc2lvbi1jaGVjayAoKmN1cnNvci1zZXNzaW9uIGN1cnNvcikgKGZ1bmN0 aW9uICgqY3Vyc29yLXBvaW50ZXIgY3Vyc29yKSBwb2ludGVyKSkKICAgICAgKHMzMnZlY3Rvci1y ZWYgaW50ZWdlciAwKSkpKQoKKGRlZmluZS1wdWJsaWMgKGN1cnNvci1pbnNlcnQgY3Vyc29yKQog IChsZXQgKChmdW5jdGlvbiAocG9pbnRlci0+cHJvY2VkdXJlKiBpbnQgKCpjdXJzb3ItaW5zZXJ0 IGN1cnNvcikgUE9JTlRFUikpKQogICAgKHNlc3Npb24tY2hlY2sgKCpjdXJzb3Itc2Vzc2lvbiBj dXJzb3IpIChmdW5jdGlvbiAoKmN1cnNvci1wb2ludGVyIGN1cnNvcikpKSkpCgooZGVmaW5lLXB1 YmxpYyAoY3Vyc29yLXVwZGF0ZSBjdXJzb3IpCiAgKGxldCAoKGZ1bmN0aW9uIChwb2ludGVyLT5w cm9jZWR1cmUqIGludCAoKmN1cnNvci11cGRhdGUgY3Vyc29yKSBQT0lOVEVSKSkpCiAgICAoc2Vz c2lvbi1jaGVjayAoKmN1cnNvci1zZXNzaW9uIGN1cnNvcikgKGZ1bmN0aW9uICgqY3Vyc29yLXBv aW50ZXIgY3Vyc29yKSkpKSkKCihkZWZpbmUtcHVibGljIChjdXJzb3ItcmVtb3ZlIGN1cnNvcikK ICAobGV0ICgoZnVuY3Rpb24gKHBvaW50ZXItPnByb2NlZHVyZSogaW50ICgqY3Vyc29yLXJlbW92 ZSBjdXJzb3IpIFBPSU5URVIpKSkKICAgIChzZXNzaW9uLWNoZWNrICgqY3Vyc29yLXNlc3Npb24g Y3Vyc29yKSAoZnVuY3Rpb24gKCpjdXJzb3ItcG9pbnRlciBjdXJzb3IpKSkpKQoKKGRlZmluZS1w dWJsaWMgKGN1cnNvci1jbG9zZSBjdXJzb3IpCiAgKGxldCAoKGZ1bmN0aW9uIChwb2ludGVyLT5w cm9jZWR1cmUqIGludCAoKmN1cnNvci1jbG9zZSBjdXJzb3IpIFBPSU5URVIpKSkKICAgIChzZXNz aW9uLWNoZWNrICgqY3Vyc29yLXNlc3Npb24gY3Vyc29yKSAoZnVuY3Rpb24gKCpjdXJzb3ItcG9p bnRlciBjdXJzb3IpKSkpKQoKKGRlZmluZS1zeW50YXgtcnVsZSAod2l0aC1jbnggY29ubmVjdGlv biBlIC4uLikKICAobGV0ICgoY254IGNvbm5lY3Rpb24pCiAgICAgICAgKG91dCAoYmVnaW4gZSAu Li4pKSkKICAgIChjb25uZWN0aW9uLWNsb3NlIGNueCkKICAgIG91dCkpCgooZXhwb3J0IHdpdGgt Y254KQoKOzs7IGhlbHBlcnMKCihkZWZpbmUgKHdpcmVkdGlnZXItc3RydWN0LXNpemUgc2Vzc2lv biBmb3JtYXQgLiBhcmdzKQogIChsZXQqICgoc2l6ZSAodTY0dmVjdG9yIDApKQogICAgICAgICAo aXRlbXMgKGZvcm1hdHMtPml0ZW1zIGZvcm1hdCBhcmdzKSkKICAgICAgICAgKHNpZ25hdHVyZSAo bWFwIChsYW1iZGEgXyAnKikgYXJncykpCiAgICAgICAgIChmdW5jdGlvbiAoYXBwbHkgd2lyZWR0 aWdlciAoY29ucyogaW50ICJ3aXJlZHRpZ2VyX3N0cnVjdF9zaXplIiAnKiAnKiAnKiBzaWduYXR1 cmUpKSkpCiAgICAoY2hlY2sgKGFwcGx5IGZ1bmN0aW9uIChjb25zKiAoKnNlc3Npb24tcG9pbnRl ciBzZXNzaW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3It PnBvaW50ZXIgc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmct PnBvaW50ZXIgZm9ybWF0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMp KSkKICAgICh1NjR2ZWN0b3ItcmVmIHNpemUgMCkpKQoKKGRlZmluZS1wdWJsaWMgKHdpcmVkdGln ZXItc3RydWN0LXBhY2sgc2Vzc2lvbiBmb3JtYXQgLiBhcmdzKSAKICAobGV0KiAoKHNpemUgKGFw cGx5IHdpcmVkdGlnZXItc3RydWN0LXNpemUgKGNvbnMqIHNlc3Npb24gZm9ybWF0IGFyZ3MpKSkK ICAgICAgICAgKGJ1ZmZlciAoYXBwbHkgdTh2ZWN0b3IgKGlvdGEgc2l6ZSkpKQogICAgICAgICAo aXRlbXMgKGZvcm1hdHMtPml0ZW1zIGZvcm1hdCBhcmdzKSkKICAgICAgICAgKHNpZ25hdHVyZSAo bWFwIChsYW1iZGEgXyAnKikgYXJncykpCiAgICAgICAgIChmdW5jdGlvbiAoYXBwbHkgd2lyZWR0 aWdlciAoY29ucyogaW50ICJ3aXJlZHRpZ2VyX3N0cnVjdF9wYWNrIiAnKiAnKiBzaXplX3QgJyog c2lnbmF0dXJlKSkpKQogICAgKGNoZWNrIChhcHBseSBmdW5jdGlvbiAoY29ucyogKCpzZXNzaW9u LXBvaW50ZXIgc2Vzc2lvbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRl dmVjdG9yLT5wb2ludGVyIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctPnBvaW50ZXIg Zm9ybWF0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMpKSkKICAgIGJ1 ZmZlcikpCiAgICAKKGRlZmluZSAoJXdpcmVkdGlnZXItc3RydWN0LXVucGFjayBzZXNzaW9uIGJ1 ZmZlciBzaXplIGZvcm1hdCkKICA7OyBzZXNzaW9uIG11c3QgdGhlIHJhdyBwb2ludGVyLCBub3Qg dGhlIHJlY29yZAogIChsZXQqICgoYXJncyAobWFwIChsYW1iZGEgXyAodTY0dmVjdG9yIDApKSAo c3RyaW5nLT5saXN0IGZvcm1hdCkpKQogICAgICAgICAgICAgICAgIChhcmdzKiAobWFwIGJ5dGV2 ZWN0b3ItPnBvaW50ZXIgYXJncykpCiAgICAgICAgICAgICAgICAgKHNpZ25hdHVyZSAobWFwIChs YW1iZGEgXyBQT0lOVEVSKSBhcmdzKikpCiAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIChhcHBs eSB3aXJlZHRpZ2VyIChjb25zKiBpbnQgIndpcmVkdGlnZXJfc3RydWN0X3VucGFjayIgJyogJyog c2l6ZV90ICcqIHNpZ25hdHVyZSkpKSkKICAgICAgICAoYXBwbHkgZnVuY3Rpb24gKGNvbnMqIHNl c3Npb24gYnVmZmVyIHNpemUgKHN0cmluZy0+cG9pbnRlciBmb3JtYXQpIGFyZ3MqKSkKKHBvaW50 ZXJzLT5zY20gZm9ybWF0IGFyZ3MpKSkKCihkZWZpbmUtcHVibGljICh3aXJlZHRpZ2VyLXN0cnVj dC11bnBhY2sgc2Vzc2lvbiBidWZmZXIgZm9ybWF0KQogICgld2lyZWR0aWdlci1zdHJ1Y3QtdW5w YWNrICgqc2Vzc2lvbi1wb2ludGVyIHNlc3Npb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGJ5dGV2ZWN0b3ItPnBvaW50ZXIgYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChieXRldmVjdG9yLWxlbmd0aCBidWZmZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9ybWF0KSkKOzs7IHRlc3RzCgoodXNlLW1vZHVsZXMgKHRlc3QtY2hlY2spKQoKKHdoZW4g KG9yIChnZXRlbnYgIkNIRUNLIikgKGdldGVudiAiQ0hFQ0tfV0lSRURUSUdFUiIpKQogIChmb3Jt YXQgI3RydWUgIiogdGVzdGluZyB3aXJlZHRpZ2VyXG4iKQoKICAodGVzdC1jaGVjayAiY3JlYXRl IGFuZCBjbG9zZSBkYXRhYmFzZSIKICAgICAgICAgICAgICAod2l0aC1jbnggKGNvbm5lY3Rpb24t b3BlbiAiL3RtcC93dCIgImNyZWF0ZSIpICN0cnVlKQogICAgICAgICAgICAgICN0cnVlKQoKICAo dGVzdC1jaGVjayAidGFibGUgd2l0aCBpbmRleCwgaW5zZXJ0IGFuZCBpbmRleCB2YWx1ZSIKICAg ICAgICAgICAgICAobGV0KiAoKGNueCAoY29ubmVjdGlvbi1vcGVuICIvdG1wL3d0IiAiY3JlYXRl IikpCiAgICAgICAgICAgICAgICAgICAgIChzZXNzaW9uIChzZXNzaW9uLW9wZW4gY254KSkpCiAg ICAgICAgICAgICAgICA7OyBjcmVhdGUgYSB0YWJsZQogICAgICAgICAgICAgICAgKHNlc3Npb24t Y3JlYXRlIHNlc3Npb24gInRhYmxlOm5vZGVzIiAia2V5X2Zvcm1hdD1RLHZhbHVlX2Zvcm1hdD1T Uyxjb2x1bW5zPShhLGIsYykiKQogICAgICAgICAgICAgICAgKHNlc3Npb24tY3JlYXRlIHNlc3Np b24gImluZGV4Om5vZGVzOmluZGV4IiAiY29sdW1ucz0oYixjKSIpCiAgICAgICAgICAgICAgICA7 OyBvcGVuIGEgY3Vyc29yIG92ZXIgdGhhdCB0YWJsZQogICAgICAgICAgICAgICAgKGxldCAoKGN1 cnNvciAoY3Vyc29yLW9wZW4gc2Vzc2lvbiAidGFibGU6bm9kZXMiKSkpCiAgICAgICAgICAgICAg ICAgIChzZXNzaW9uLXRyYW5zYWN0aW9uLWJlZ2luIHNlc3Npb24gImlzb2xhdGlvbj1cInNuYXBz aG90XCIiKQogICAgICAgICAgICAgICAgICAoY3Vyc29yLWtleS1zZXQgY3Vyc29yIDQyKQogICAg ICAgICAgICAgICAgICAoY3Vyc29yLXZhbHVlLXNldCBjdXJzb3IgImEiICJiIikKICAgICAgICAg ICAgICAgICAgKGN1cnNvci1pbnNlcnQgY3Vyc29yKQogICAgICAgICAgICAgICAgICAoc2Vzc2lv bi10cmFuc2FjdGlvbi1jb21taXQgc2Vzc2lvbikKICAgICAgICAgICAgICAgICAgKGxldCAoKGlu ZGV4IChjdXJzb3Itb3BlbiBzZXNzaW9uICJpbmRleDpub2RlczppbmRleChhKSIpKSkKICAgICAg ICAgICAgICAgICAgICAoY3Vyc29yLW5leHQgaW5kZXgpCiAgICAgICAgICAgICAgICAgICAgKHdp dGgtY254IGNueAogICAgICAgICAgICAgICAgICAgICAgKGxpc3QgKGN1cnNvci1rZXktcmVmIGlu ZGV4KSAoY3Vyc29yLXZhbHVlLXJlZiBpbmRleCkpKSkpKQogICAgICAgICAgICAgIChsaXN0IChs aXN0ICJhIiAiYiIpIChsaXN0IDQyKSkpCgogICh0ZXN0LWNoZWNrICJjdXJzb3Igc2VhcmNoIG9u IGVtcHR5IHRhYmxlIgogICAgICAgICAgICAgIChsZXQqICgoY254IChjb25uZWN0aW9uLW9wZW4g Ii90bXAvd3QiICJjcmVhdGUiKSkKICAgICAgICAgICAgICAgICAgICAgKHNlc3Npb24gKHNlc3Np b24tb3BlbiBjbngpKSkKICAgICAgICAgICAgICAgIDs7IGNyZWF0ZSBhIHRhYmxlCiAgICAgICAg ICAgICAgICAoc2Vzc2lvbi1jcmVhdGUgc2Vzc2lvbiAidGFibGU6bm9kZXMiICJrZXlfZm9ybWF0 PVEsdmFsdWVfZm9ybWF0PVNTLGNvbHVtbnM9KGEsYixjKSIpCiAgICAgICAgICAgICAgICA7OyBv cGVuIGEgY3Vyc29yIG92ZXIgdGhhdCB0YWJsZQogICAgICAgICAgICAgICAgKGxldCAoKGN1cnNv ciAoY3Vyc29yLW9wZW4gc2Vzc2lvbiAidGFibGU6bm9kZXMiKSkpCiAgICAgICAgICAgICAgICAg IChjdXJzb3Ita2V5LXNldCBjdXJzb3IgNDIpCiAgICAgICAgICAgICAgICAgICh3aXRoLWNueCBj bngKICAgICAgICAgICAgICAgICAgICAoY2F0Y2ggJ3dpcmVkdGlnZXIKICAgICAgICAgICAgICAg ICAgICAgIChsYW1iZGEgKCkgKGN1cnNvci1zZWFyY2ggY3Vyc29yKSAjZmFsc2UpCiAgICAgICAg ICAgICAgICAgICAgICAobGFtYmRhIChrZXkgdmFsdWUpICN0cnVlKSkpKSkKICAgICAgICAgICAg ICAjdHJ1ZSkKCiAgKHRlc3QtY2hlY2sgImN1cnNvciBzZWFyY2giCiAgICAgICAgICAgICAgKGxl dCogKChjbnggKGNvbm5lY3Rpb24tb3BlbiAiL3RtcC93dCIgImNyZWF0ZSIpKQogICAgICAgICAg ICAgICAgICAgICAoc2Vzc2lvbiAoc2Vzc2lvbi1vcGVuIGNueCkpKQogICAgICAgICAgICAgICAg OzsgY3JlYXRlIGEgdGFibGUKICAgICAgICAgICAgICAgIChzZXNzaW9uLWNyZWF0ZSBzZXNzaW9u ICJ0YWJsZTpub2RlcyIgImtleV9mb3JtYXQ9USx2YWx1ZV9mb3JtYXQ9U1MsY29sdW1ucz0oYSxi LGMpIikKICAgICAgICAgICAgICAgIDs7IG9wZW4gYSBjdXJzb3Igb3ZlciB0aGF0IHRhYmxlCiAg ICAgICAgICAgICAgICAobGV0ICgoY3Vyc29yIChjdXJzb3Itb3BlbiBzZXNzaW9uICJ0YWJsZTpu b2RlcyIpKSkKICAgICAgICAgICAgICAgICAgKGN1cnNvci1rZXktc2V0IGN1cnNvciA0MikKICAg ICAgICAgICAgICAgICAgKGN1cnNvci12YWx1ZS1zZXQgY3Vyc29yICJiIiAiYyIpCiAgICAgICAg ICAgICAgICAgIChjdXJzb3ItaW5zZXJ0IGN1cnNvcikKICAgICAgICAgICAgICAgICAgKGN1cnNv ci1rZXktc2V0IGN1cnNvciA0MikKICAgICAgICAgICAgICAgICAgKHdpdGgtY254IGNueAogICAg ICAgICAgICAgICAgICAgIChjYXRjaCAjdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgKGxhbWJk YSAoKSAoY3Vyc29yLXNlYXJjaCBjdXJzb3IpICN0cnVlKQogICAgICAgICAgICAgICAgICAgICAg KGxhbWJkYSBfICNmYWxzZSkpKSkpCiAgICAgICAgICAgICAgI3RydWUpCgogICh0ZXN0LWNoZWNr ICJjdXJzb3Igc2VhcmNoIG5lYXIgb24gZW1wdHkgdGFibGUiCiAgICAgICAgICAgICAgKGxldCog KChjbnggKGNvbm5lY3Rpb24tb3BlbiAiL3RtcC93dCIgImNyZWF0ZSIpKQogICAgICAgICAgICAg ICAgICAgICAoc2Vzc2lvbiAoc2Vzc2lvbi1vcGVuIGNueCkpKQogICAgICAgICAgICAgICAgKHNl c3Npb24tY3JlYXRlIHNlc3Npb24gInRhYmxlOm5vZGVzIiAia2V5X2Zvcm1hdD1RLHZhbHVlX2Zv cm1hdD1TLGNvbHVtbnM9KGEsYikiKQogICAgICAgICAgICAgICAgKGxldCAoKGN1cnNvciAoY3Vy c29yLW9wZW4gc2Vzc2lvbiAidGFibGU6bm9kZXMiKSkpCiAgICAgICAgICAgICAgICAgIChjdXJz b3Ita2V5LXNldCBjdXJzb3IgNDIpCiAgICAgICAgICAgICAgICAgICh3aXRoLWNueCBjbngKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjYXRjaCAjdHJ1ZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobGFtYmRhICgpIChjdXJzb3Itc2VhcmNoLW5lYXIgY3Vyc29yKSAjZmFsc2Up CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgXyAjdHJ1ZSkpKSkpCiAgICAg ICAgICAgICAgI3RydWUpCgogICh0ZXN0LWNoZWNrICJjdXJzb3Igc2VhcmNoIG5lYXIgYmVsb3ci CiAgICAgICAgICAgICAgKGxldCogKChjbnggKGNvbm5lY3Rpb24tb3BlbiAiL3RtcC93dCIgImNy ZWF0ZSIpKQogICAgICAgICAgICAgICAgICAgICAoc2Vzc2lvbiAoc2Vzc2lvbi1vcGVuIGNueCkp KQogICAgICAgICAgICAgICAgKHNlc3Npb24tY3JlYXRlIHNlc3Npb24gInRhYmxlOm5vZGVzIiAi a2V5X2Zvcm1hdD1RLHZhbHVlX2Zvcm1hdD1TLGNvbHVtbnM9KGEsYikiKQogICAgICAgICAgICAg ICAgKGxldCAoKGN1cnNvciAoY3Vyc29yLW9wZW4gc2Vzc2lvbiAidGFibGU6bm9kZXMiKSkpCiAg ICAgICAgICAgICAgICAgIDs7IHByZXBhcmUKICAgICAgICAgICAgICAgICAgKGN1cnNvci1rZXkt c2V0IGN1cnNvciA0MikKICAgICAgICAgICAgICAgICAgKGN1cnNvci12YWx1ZS1zZXQgY3Vyc29y ICJtYWdpYyBudW1iZXIiKQogICAgICAgICAgICAgICAgICAoY3Vyc29yLWluc2VydCBjdXJzb3Ip CiAgICAgICAgICAgICAgICAgIDs7IHRlc3QKICAgICAgICAgICAgICAgICAgKGN1cnNvci1rZXkt c2V0IGN1cnNvciA0MykKICAgICAgICAgICAgICAgICAgKHdpdGgtY254IGNueAogICAgICAgICAg ICAgICAgICAgIChjdXJzb3Itc2VhcmNoLW5lYXIgY3Vyc29yKSkpKQogICAgICAgICAgICAgIC0x KQoKICAodGVzdC1jaGVjayAiY3Vyc29yIHNlYXJjaCBuZWFyIGFib3ZlIgogICAgICAgICAgICAg IChsZXQqICgoY254IChjb25uZWN0aW9uLW9wZW4gIi90bXAvd3QiICJjcmVhdGUiKSkKICAgICAg ICAgICAgICAgICAgICAgKHNlc3Npb24gKHNlc3Npb24tb3BlbiBjbngpKSkKICAgICAgICAgICAg ICAgIChzZXNzaW9uLWNyZWF0ZSBzZXNzaW9uICJ0YWJsZTpub2RlcyIgImtleV9mb3JtYXQ9USx2 YWx1ZV9mb3JtYXQ9Uyxjb2x1bW5zPShhLGIpIikKICAgICAgICAgICAgICAgIChsZXQgKChjdXJz b3IgKGN1cnNvci1vcGVuIHNlc3Npb24gInRhYmxlOm5vZGVzIikpKQogICAgICAgICAgICAgICAg ICA7OyBwcmVwYXJlCiAgICAgICAgICAgICAgICAgIChjdXJzb3Ita2V5LXNldCBjdXJzb3IgNDEp CiAgICAgICAgICAgICAgICAgIChjdXJzb3ItdmFsdWUtc2V0IGN1cnNvciAiYW5vdGhlciBudW1i ZXIiKQogICAgICAgICAgICAgICAgICAoY3Vyc29yLWluc2VydCBjdXJzb3IpCiAgICAgICAgICAg ICAgICAgIChjdXJzb3Ita2V5LXNldCBjdXJzb3IgNDIpCiAgICAgICAgICAgICAgICAgIChjdXJz b3ItdmFsdWUtc2V0IGN1cnNvciAibWFnaWMgbnVtYmVyIikKICAgICAgICAgICAgICAgICAgKGN1 cnNvci1pbnNlcnQgY3Vyc29yKQogICAgICAgICAgICAgICAgICAoY3Vyc29yLWtleS1zZXQgY3Vy c29yIDQ1KQogICAgICAgICAgICAgICAgICAoY3Vyc29yLXZhbHVlLXNldCBjdXJzb3IgInJhbmRv bSBudW1iZXIiKQogICAgICAgICAgICAgICAgICAoY3Vyc29yLWluc2VydCBjdXJzb3IpCiAgICAg ICAgICAgICAgICAgIDs7IHRlc3QKICAgICAgICAgICAgICAgICAgKGN1cnNvci1rZXktc2V0IGN1 cnNvciA0MykKICAgICAgICAgICAgICAgICAgKHdpdGgtY254IGNueAogICAgICAgICAgICAgICAg ICAgICg8IDAgKGN1cnNvci1zZWFyY2gtbmVhciBjdXJzb3IpKSkpKQogICAgICAgICAgICAgICN0 cnVlKQoKICAodGVzdC1jaGVjayAiY3Vyc29yIHNlYXJjaCBuZWFyIGV4YWN0IG1hdGNoIgogICAg ICAgICAgICAgIChsZXQqICgoY254IChjb25uZWN0aW9uLW9wZW4gIi90bXAvd3QiICJjcmVhdGUi KSkKICAgICAgICAgICAgICAgICAgICAgKHNlc3Npb24gKHNlc3Npb24tb3BlbiBjbngpKSkKICAg ICAgICAgICAgICAgIChzZXNzaW9uLWNyZWF0ZSBzZXNzaW9uICJ0YWJsZTpub2RlcyIgImtleV9m b3JtYXQ9USx2YWx1ZV9mb3JtYXQ9Uyxjb2x1bW5zPShhLGIpIikKICAgICAgICAgICAgICAgIChs ZXQgKChjdXJzb3IgKGN1cnNvci1vcGVuIHNlc3Npb24gInRhYmxlOm5vZGVzIikpKQogICAgICAg ICAgICAgICAgICA7OyBwcmVwYXJlCiAgICAgICAgICAgICAgICAgIChjdXJzb3Ita2V5LXNldCBj dXJzb3IgNDEpCiAgICAgICAgICAgICAgICAgIChjdXJzb3ItdmFsdWUtc2V0IGN1cnNvciAiYW5v dGhlciBudW1iZXIiKQogICAgICAgICAgICAgICAgICAoY3Vyc29yLWluc2VydCBjdXJzb3IpCiAg ICAgICAgICAgICAgICAgIChjdXJzb3Ita2V5LXNldCBjdXJzb3IgNDIpCiAgICAgICAgICAgICAg ICAgIChjdXJzb3ItdmFsdWUtc2V0IGN1cnNvciAibWFnaWMgbnVtYmVyIikKICAgICAgICAgICAg ICAgICAgKGN1cnNvci1pbnNlcnQgY3Vyc29yKQogICAgICAgICAgICAgICAgICAoY3Vyc29yLWtl eS1zZXQgY3Vyc29yIDQ1KQogICAgICAgICAgICAgICAgICAoY3Vyc29yLXZhbHVlLXNldCBjdXJz b3IgInJhbmRvbSBudW1iZXIiKQogICAgICAgICAgICAgICAgICAoY3Vyc29yLWluc2VydCBjdXJz b3IpCiAgICAgICAgICAgICAgICAgIDs7IHRlc3QKICAgICAgICAgICAgICAgICAgKGN1cnNvci1r ZXktc2V0IGN1cnNvciA0MikKICAgICAgICAgICAgICAgICAgKHdpdGgtY254IGNueAogICAgICAg ICAgICAgICAgICAgIChjdXJzb3Itc2VhcmNoLW5lYXIgY3Vyc29yKSkpKQogICAgICAgICAgICAg IDApCgogICh0ZXN0LWNoZWNrICJyZWNvcmQgdGFibGUsIGluc2VydCBhbmQgcmV0cmlldmUga2V5 IgogICAgICAgICAgICAgIChsZXQqICgoY254IChjb25uZWN0aW9uLW9wZW4gIi90bXAvd3QiICJj cmVhdGUiKSkKICAgICAgICAgICAgICAgICAgICAgKHNlc3Npb24gKHNlc3Npb24tb3BlbiBjbngp KSkKICAgICAgICAgICAgICAgIChzZXNzaW9uLWNyZWF0ZSBzZXNzaW9uICJ0YWJsZTp0ZXJtcyIg ImtleV9mb3JtYXQ9cix2YWx1ZV9mb3JtYXQ9UyIpCiAgICAgICAgICAgICAgICAobGV0ICgoY3Vy c29yIChjdXJzb3Itb3BlbiBzZXNzaW9uICJ0YWJsZTp0ZXJtcyIgImFwcGVuZCIpKSkKICAgICAg ICAgICAgICAgICAgKGN1cnNvci12YWx1ZS1zZXQgY3Vyc29yICJ0aW1lc2luayIpCiAgICAgICAg ICAgICAgICAgIChjdXJzb3ItaW5zZXJ0IGN1cnNvcikKICAgICAgICAgICAgICAgICAgKHdpdGgt Y254IGNueCAoY2FyIChjdXJzb3Ita2V5LXJlZiBjdXJzb3IpKSkpKQogICAgICAgICAgICAgIDEp CgogICh0ZXN0LWNoZWNrICJyYXcgaXRlbSwgaW5zZXJ0IGFuZCByZXRyaWV2ZSB2YWx1ZSIKICAg ICAgICAgICAgICAobGV0KiAoKGNueCAoY29ubmVjdGlvbi1vcGVuICIvdG1wL3d0IiAiY3JlYXRl IikpCiAgICAgICAgICAgICAgICAgICAgIChzZXNzaW9uIChzZXNzaW9uLW9wZW4gY254KSkpCiAg ICAgICAgICAgICAgICAoc2Vzc2lvbi1jcmVhdGUgc2Vzc2lvbiAidGFibGU6dGVybXMiICJrZXlf Zm9ybWF0PXIsdmFsdWVfZm9ybWF0PXUiKQogICAgICAgICAgICAgICAgKGxldCAoKGN1cnNvciAo Y3Vyc29yLW9wZW4gc2Vzc2lvbiAidGFibGU6dGVybXMiICJhcHBlbmQiKSkpCiAgICAgICAgICAg ICAgICAgIChjdXJzb3ItdmFsdWUtc2V0IGN1cnNvciAodTh2ZWN0b3IgMSAyIDMgNCkpCiAgICAg ICAgICAgICAgICAgIChjdXJzb3ItaW5zZXJ0IGN1cnNvcikKICAgICAgICAgICAgICAgICAgKGN1 cnNvci1yZXNldCBjdXJzb3IpCiAgICAgICAgICAgICAgICAgIChjdXJzb3ItbmV4dCBjdXJzb3Ip CiAgICAgICAgICAgICAgICAgICh3aXRoLWNueCBjbngKICAgICAgICAgICAgICAgICAgICAoY3Vy c29yLXZhbHVlLXJlZiBjdXJzb3IpKSkpCiAgICAgICAgICAgICAgJygjdnU4KDEgMiAzIDQpKSkK CiAgKHRlc3QtY2hlY2sgIndpcmVkdGlnZXItc3RydWN0LXNpemUiCiAgICAgICAgICAgICAgKGxl dCogKChjbnggKGNvbm5lY3Rpb24tb3BlbiAiL3RtcC93dCIgImNyZWF0ZSIpKQogICAgICAgICAg ICAgICAgICAgICAoc2Vzc2lvbiAoc2Vzc2lvbi1vcGVuIGNueCkpKQogICAgICAgICAgICAgICAg KHdpdGgtY254IGNueAogICAgICAgICAgICAgICAgICAod2lyZWR0aWdlci1zdHJ1Y3Qtc2l6ZSBz ZXNzaW9uICJxUVMiIDEgNDIgImjDqWxsbyIpKSkKICAgICAgICAgICAgICAnOSkKCiAgKHRlc3Qt Y2hlY2sgIndpcmVkdGlnZXItc3RydWN0LXBhY2svdW5wYWNrIgogICAgKGxldCogKChjbnggKGNv bm5lY3Rpb24tb3BlbiAiL3RtcC93dCIgImNyZWF0ZSIpKQogICAgICAgICAgIChzZXNzaW9uIChz ZXNzaW9uLW9wZW4gY254KSkpCiAgICAgICh3aXRoLWNueCBjbngKICAgICAgICAod2lyZWR0aWdl ci1zdHJ1Y3QtdW5wYWNrIHNlc3Npb24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAod2lyZWR0aWdlci1zdHJ1Y3QtcGFjayBzZXNzaW9uICJxUVMiIDEgNDIgImjDqWxsbyIpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicVFTIikpKQogICAgJygxIDQyICJow6ls bG8iKSkKCiAgOzsgKHRlc3QtY2hlY2sgImNyZWF0ZSB0YWJsZSB3aXRoIHNjaGVtZSBjb2xsYXRv ciIKICA7OyAgIChyZWNlaXZlIChjbnggY3R4KSAod2lyZWR0aWdlci1vcGVuKiAiL3RtcC93dCIg Jyh0YWJsZQogIDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgoa2V5IC4gcmVjb3JkKSkKICA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKHNjaGVtZSAuIHN0cmluZykpCiAgOzsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChyZXZlcnNlZCAoc2No ZW1lKSAoa2V5KSkpKSkKCiAgOzsgICAgIChjb25uZWN0aW9uLWFkZC1jb2xsYXRvciBjbnggImNp IiAiU3IiIChsYW1iZGEgKGtleSBvdGhlcikKICA7OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoaWYgKHN0cmluZz0/IChjYXIga2V5KSAoY2FyIG90aGVyKSkK ICA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAog IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYg KHN0cmluZy1jaTw/IChjYXIga2V5KSAoY2FyIG90aGVyKSkgLTEgMSkpKSkKICA7OyAgICAgKHNl c3Npb24tY3JlYXRlIHNlc3Npb24gInRhYmxlOnRlcm1zIiAia2V5X2Zvcm1hdD1yLHZhbHVlX2Zv cm1hdD1TLGNvbHVtbnM9KGEsYikiKQogIDs7ICAgICAoc2Vzc2lvbi1jcmVhdGUgc2Vzc2lvbiAi aW5kZXg6dGVybXM6cmV2ZXJzZWQiICJjb2x1bW5zPShiKSxjb2xsYXRvcj1jaSIpCgogIDs7ICAg ICAobGV0ICgoY3Vyc29yIChjdXJzb3Itb3BlbiBzZXNzaW9uICJ0YWJsZTp0ZXJtcyIgImFwcGVu ZCIpKSkKICA7OyAgICAgICAoY3Vyc29yLXZhbHVlLXNldCBjdXJzb3IgImEiKQogIDs7ICAgICAg IChjdXJzb3ItaW5zZXJ0IGN1cnNvcikKICA7OyAgICAgICAoY3Vyc29yLXZhbHVlLXNldCBjdXJz b3IgIkEiKQogIDs7ICAgICAgIChjdXJzb3ItaW5zZXJ0IGN1cnNvcikKICA7OyAgICAgICAoY3Vy c29yLXZhbHVlLXNldCBjdXJzb3IgImIiKQogIDs7ICAgICAgIChjdXJzb3ItaW5zZXJ0IGN1cnNv cikKICA7OyAgICAgICAoY3Vyc29yLXZhbHVlLXNldCBjdXJzb3IgIkIiKQogIDs7ICAgICAgIChj dXJzb3ItaW5zZXJ0IGN1cnNvcikpCgogIDs7ICAgICAobGV0ICgoY3Vyc29yIChjdXJzb3Itb3Bl biBzZXNzaW9uICJpbmRleDp0ZXJtczpyZXZlcnNlZCIpKSkKICA7OyAgICAgICAod2l0aC1jbngg Y254CiAgOzsgICAgICAgICAobGV0IGxvb3AgKChuZXh0PyAoY3Vyc29yLW5leHQgY3Vyc29yKSkK ICA7OyAgICAgICAgICAgICAgICAgICAgKG91dCAnKCkpKQogIDs7ICAgICAgICAgICAoaWYgbmV4 dD8KICA7OyAgICAgICAgICAgICAgIChsZXQgKChrZXkgKGN1cnNvci1rZXktcmVmIGN1cnNvcikp KQogIDs7ICAgICAgICAgICAgICAgICAobG9vcCAoY2F0Y2ggJ3dpcmVkdGlnZXIKICA7OyAgICAg ICAgICAgICAgICAgICAgICAgICAobGFtYmRhICgpIChjdXJzb3ItbmV4dCBjdXJzb3IpICN0cnVl KQogIDs7ICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgaWdub3JlICNmYWxzZSkpCiAg OzsgICAgICAgICAgICAgICAgICAgICAgIChjb25zIGtleSBvdXQpKSkKICA7OyAgICAgICAgICAg ICAgIG91dCkpKSkpCiAgOzsgICAnKCgiQiIpICgiYiIpICgiQSIpICgiYSIpKSkKICA7OyAodGVz dC1jaGVjayAiY3JlYXRlIHRhYmxlIHdpdGggY29sbGF0b3IiCiAgOzsgICAobGV0KiAoKGNueCAo Y29ubmVjdGlvbi1vcGVuICIvdG1wL3d0IiAiY3JlYXRlIikpCiAgOzsgICAgICAgICAgKHNlc3Np b24gKHNlc3Npb24tb3BlbiBjbngpKSkKICA7OyAgICAgKGNvbm5lY3Rpb24tYWRkLWNvbGxhdG9y IGNueCAiY2kiICJTciIgKGxhbWJkYSAoa2V5IG90aGVyKQogIDs7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoc3RyaW5nPT8gKGNhciBrZXkpIChjYXIg b3RoZXIpKQogIDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwCiAgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChpZiAoc3RyaW5nLWNpPD8gKGNhciBrZXkpIChjYXIgb3RoZXIpKSAtMSAxKSkpKQogIDs7 ICAgICAoc2Vzc2lvbi1jcmVhdGUgc2Vzc2lvbiAidGFibGU6dGVybXMiICJrZXlfZm9ybWF0PXIs dmFsdWVfZm9ybWF0PVMsY29sdW1ucz0oYSxiKSIpCiAgOzsgICAgIChzZXNzaW9uLWNyZWF0ZSBz ZXNzaW9uICJpbmRleDp0ZXJtczpyZXZlcnNlZCIgImNvbHVtbnM9KGIpLGNvbGxhdG9yPWNpIikK CiAgOzsgICAgIChsZXQgKChjdXJzb3IgKGN1cnNvci1vcGVuIHNlc3Npb24gInRhYmxlOnRlcm1z IiAiYXBwZW5kIikpKQogIDs7ICAgICAgIChjdXJzb3ItdmFsdWUtc2V0IGN1cnNvciAiYSIpCiAg OzsgICAgICAgKGN1cnNvci1pbnNlcnQgY3Vyc29yKQogIDs7ICAgICAgIChjdXJzb3ItdmFsdWUt c2V0IGN1cnNvciAiQSIpCiAgOzsgICAgICAgKGN1cnNvci1pbnNlcnQgY3Vyc29yKQogIDs7ICAg ICAgIChjdXJzb3ItdmFsdWUtc2V0IGN1cnNvciAiYiIpCiAgOzsgICAgICAgKGN1cnNvci1pbnNl cnQgY3Vyc29yKQogIDs7ICAgICAgIChjdXJzb3ItdmFsdWUtc2V0IGN1cnNvciAiQiIpCiAgOzsg ICAgICAgKGN1cnNvci1pbnNlcnQgY3Vyc29yKSkKICA7OyAgICAgKGxldCAoKGN1cnNvciAoY3Vy c29yLW9wZW4gc2Vzc2lvbiAiaW5kZXg6dGVybXM6cmV2ZXJzZWQiKSkpCiAgOzsgICAgICAgKHdp dGgtY254IGNueAogIDs7ICAgICAgICAgKGxldCBsb29wICgobmV4dD8gKGN1cnNvci1uZXh0IGN1 cnNvcikpCiAgOzsgICAgICAgICAgICAgICAgICAgIChvdXQgJygpKSkKICA7OyAgICAgICAgICAg KGlmIG5leHQ/CiAgOzsgICAgICAgICAgICAgICAobGV0ICgoa2V5IChjdXJzb3Ita2V5LXJlZiBj dXJzb3IpKSkKICA7OyAgICAgICAgICAgICAgICAgKGxvb3AgKGNhdGNoICd3aXJlZHRpZ2VyCiAg OzsgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoKSAoY3Vyc29yLW5leHQgY3Vyc29y KSAjdHJ1ZSkKICA7OyAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIGlnbm9yZSAjZmFs c2UpKQogIDs7ICAgICAgICAgICAgICAgICAgICAgICAoY29ucyBrZXkgb3V0KSkpCiAgOzsgICAg ICAgICAgICAgICBvdXQpKSkpKQogIDs7ICAgJygoIkIiKSAoImIiKSAoIkEiKSAoImEiKSkpCiAg KQo= --=_53e918395ee183beed6e0635d3fce0eb Content-Transfer-Encoding: base64 Content-Type: text/plain; name=wiredtigerz.scm Content-Disposition: attachment; filename=wiredtigerz.scm; size=29105 OzsgZ3VpbGUtd2lyZWR0aWdlciAtIDAuNCAtIDIwMTYvMDcvMTUKCjs7IENvcHlyaWdodCDCqSAy MDE0LTIwMTYgQW1pcm91Y2hlIEJPVUJFS0tJIDxhbWlyb3VjaGVAaHlwZXJtb3ZlLm5ldD4KCjs7 IGd1aWxlLXdpcmVkdGlnZXIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91ciBv cHRpb24pIG9yIHZlcnNpb24gMy4KCjs7IGd1aWxlLXdpcmVkdGlnZXIgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKOzsgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKOzsgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo7OyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKOzsgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK OzsgYWxvbmcgd2l0aCBndWlsZS13aXJlZHRpZ2VyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+Cgo7OzsgQ29tbWVudDoKOzsKOzsgVGVzdGVkIHdpdGggd2lyZWR0 aWdlciBkZXZlbG9wIGJyYW5jaAo7OwooZGVmaW5lLW1vZHVsZSAod2lyZWR0aWdlcnopKQoKKHVz ZS1tb2R1bGVzIChpY2UtOSBtYXRjaCkpCih1c2UtbW9kdWxlcyAoaWNlLTkgdGhyZWFkcykpCih1 c2UtbW9kdWxlcyAoaWNlLTkgcmVjZWl2ZSkpCih1c2UtbW9kdWxlcyAoaWNlLTkgb3B0YXJncykp CgoodXNlLW1vZHVsZXMgKHNyZmkgc3JmaS0xKSkgIDs7IGFwcGVuZC1tYXAKKHVzZS1tb2R1bGVz IChzcmZpIHNyZmktOSkpICA7OyByZWNvcmRzCih1c2UtbW9kdWxlcyAoc3JmaSBzcmZpLTkgZ251 KSkgIDs7IHNldC1yZWNvcmQtdHlwZS1wcmludGVyIQoodXNlLW1vZHVsZXMgKHNyZmkgc3JmaS0y NikpICA7OyBjdXQKCih1c2UtbW9kdWxlcyAod2lyZWR0aWdlcikpCgoKOzs7Cjs7OyBwbGFpbiBy ZWNvcmRzCjs7Owo7Owo7OyBtYWNybyB0byBxdWlja2x5IGRlZmluZSByZWNvcmRzCjs7CihkZWZp bmUtc3ludGF4IGRlZmluZS1yZWNvcmQtdHlwZSoKICAobGFtYmRhICh4KQogICAgKGRlZmluZSAo JWlkLW5hbWUgbmFtZSkgKHN0cmluZy0+c3ltYm9sIChzdHJpbmctZHJvcCAoc3RyaW5nLWRyb3At cmlnaHQgKHN5bWJvbC0+c3RyaW5nIG5hbWUpIDEpIDEpKSkKICAgIChkZWZpbmUgKGlkLW5hbWUg Y3R4IG5hbWUpCiAgICAgIChkYXR1bS0+c3ludGF4IGN0eCAoJWlkLW5hbWUgKHN5bnRheC0+ZGF0 dW0gbmFtZSkpKSkKICAgIChkZWZpbmUgKGlkLWFwcGVuZCBjdHggLiBzeW1zKQogICAgICAoZGF0 dW0tPnN5bnRheCBjdHggKGFwcGx5IHN5bWJvbC1hcHBlbmQgKG1hcCBzeW50YXgtPmRhdHVtIHN5 bXMpKSkpCiAgICAoZGVmaW5lIChpZC1hcHBlbmQhIGN0eCAuIHN5bXMpCiAgICAgIChkYXR1bS0+ c3ludGF4IGN0eCAoc3ltYm9sLWFwcGVuZCAoYXBwbHkgc3ltYm9sLWFwcGVuZCAobWFwIHN5bnRh eC0+ZGF0dW0gc3ltcykpICchKSkpCiAgICAoc3ludGF4LWNhc2UgeCAoKQogICAgICAoKF8gcm5h bWUgZmllbGQgLi4uKQogICAgICAgKGFuZCAoaWRlbnRpZmllcj8gIydybmFtZSkgKGFuZC1tYXAg aWRlbnRpZmllcj8gIycoZmllbGQgLi4uKSkpCiAgICAgICAod2l0aC1zeW50YXggKChjb25zIChp ZC1hcHBlbmQgIydybmFtZSAjJ21ha2UtIChpZC1uYW1lICMncm5hbWUgIydybmFtZSkpKQogICAg ICAgICAgICAgICAgICAgICAocHJlZCAoaWQtYXBwZW5kICMncm5hbWUgKGlkLW5hbWUgIydybmFt ZSAjJ3JuYW1lKSAjJz8pKQogICAgICAgICAgICAgICAgICAgICAoKGdldHRlciAuLi4pIChtYXAg KGxhbWJkYSAoZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlk LWFwcGVuZCBmIChpZC1uYW1lICMncm5hbWUgIydybmFtZSkgIyctIGYpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIycoZmllbGQgLi4uKSkpCiAgICAgICAgICAgICAg ICAgICAgICgoc2V0dGVyIC4uLikgKG1hcCAobGFtYmRhIChmKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaWQtYXBwZW5kISBmIChpZC1uYW1lICMncm5hbWUgIydy bmFtZSkgIyctIGYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyco ZmllbGQgLi4uKSkpKQogICAgICAgICAjJyhkZWZpbmUtcmVjb3JkLXR5cGUgcm5hbWUKICAgICAg ICAgICAgIChjb25zIGZpZWxkIC4uLikKICAgICAgICAgICAgIHByZWQKICAgICAgICAgICAgIChm aWVsZCBnZXR0ZXIgc2V0dGVyKQogICAgICAgICAgICAgLi4uKSkpKSkpCgo7OzsgaGVscGVycwoK KGRlZmluZS1wdWJsaWMgKHNjbS0+c3RyaW5nIHNjbSkKICAoY2FsbC13aXRoLW91dHB1dC1zdHJp bmcKICAgIChsYW1iZGEgKHBvcnQpCiAgICAgICh3cml0ZSBzY20gcG9ydCkpKSkKCihkZWZpbmUt cHVibGljIChzdHJpbmctPnNjbSBzdHJpbmcpCiAgKGNhbGwtd2l0aC1pbnB1dC1zdHJpbmcgc3Ry aW5nIHJlYWQpKQoKOzs7Cjs7OyB3aXJlZHRpZ2VyeiB0cnkgdG8gZXhwbGljaXQgbWFpbiB3aXJl ZHRpZ2VyIHdvcmtmbG93Cjs7Owo7Owo7OyBUaGlzIG1vZHVsZXMgZGVmaW5lcyBhIHN0YXIgcHJv Y2VkdXJlIHZlcnNpb24gb2Ygd2lyZWR0aWdlciBwcm9jZWR1cmUKOzsgdG8gaGVscCBqdW1wIGlu dG8gd2lyZWR0aWdlciBtYWtpbmcgdGhlIG1haW4gd29ya2Zsb3cgbW9yZSBleHBsaWNpdC4KOzsK OzsgVGhlIG1haW4gd29ya2Zsb3cgaXMgdGhlIGZvbGxvd2luZzoKOzsKOzsgMS4gZGVmaW5lIGEg c29tZSB0YWJsZSBhbmQgaW5kaWNlcwo7OyAyLiBvcGVuIHNlc3Npb24gcGVyIHRocmVhZAo7OyAz LiBvcGVuIGEgc2luZ2xlIGN1cnNvciBwZXIgdGFibGUgYW5kIGluZGljZXMKOzsgNC4gZm9yd2Fy ZCBjdXJzb3IgbmF2aWdhdGlvbgo7Owo7OyBJbiB0aGVvcnkgeW91IG1pZ2h0IG9wZW4gbXVsdGlw bGUgY3Vyc29ycyBmb3IgdGhlIHNhbWUgdGFibGUvaW5kZXggYnV0IHRoaXMKOzsgbGVhZHMgdG8g ZXh0cmEgYm9va2VlcGluZyBmb3Igd2hpY2ggSSBoYXZlIG5vIGdvb2QgcmVhc29uIHRvIGFwcGx5 Lgo7Owo7OyBUaGUgQVBJIGRlZmluZWQgYXMgc3RhciBwcm9jZWR1cmUgdHJ5IHRvIHJlbWFpbnMg dGhpbiBvbiB0b3Agb2Ygd2lyZWR0aWdlcgo7OyBzbyB0aGF0IHlvdSBjYW4gZHJvcCB0byByYXcg d2lyZWR0aWdlciB3aGVuIHJlcXVpcmVkLCBsaWtlIG9wZW4gbXVsdGlwbGUgY3Vyc29ycy4KOzsK OzsgVGhpcyBpbnRyb2R1Y2UgYSBkZWNsYXJhdGl2ZSBBUEkgKGRlc2NyaWJlZCBiZWxvdykgdGhh dCBib3RoIGRlZmluZXMgdGhlIHRhYmxlcwo7OyBhbmQgdGhlIGN1cnNvciBpbiBzaW5nbGUgYmxv Y2sgb2YgY29kZSB3aGljaCBtdXN0IGJlIHVzZWQgd2l0aCBgc2Vzc2lvbi1jcmVhdGUqYAo7OyBh bmQgYGN1cnNvci1vcGVuKmAgd2hpY2ggZG8gdGhlIGpvYiBkZXNjcmliZWQgaW4gMS4gYW5kIDIu Cjs7Cjs7IEFsc28gd2lyZWR0aWdlciBtYWlubHkgcmVseSBvbiBzdGF0ZWZ1bGwgQVBJIHdoZXJl IHRoZSBjdXJzb3IgaXMgZmlyc3QgY29uZmlndXJlZCB3aXRoCjs7IGN1cnNvci1rZXktc2V0IGFu ZCAgdGhlbiBhbiBvcGVyYXRpb24gaXMgZXhlY3V0ZWQgb24gaXQgbGlrZSBjdXJzb3Itc2VhcmNo IG9yCjs7IGN1cnNvci1yZW1vdmUuIFRoaXMgbGVhdmVzIHRoZSBkb29yIG9wZW4gZm9yIG1hbnkg d29ya2Zsb3dzIHdoaWxlIGtlZXBpbmcgZWFjaAo7OyBwcm9jZWR1cmUgc2lnbmF0dXJlIHNpbXBs ZS4KOzsKOzsgVGhlIHB1cnBvc2Ugb2YgdGhlIHByb3Bvc2VkIChzdGFyKSBwcm9jZWR1cmVzIGlz IHRvIHNpbXBsaWZ5IHVzZXIgY29kZSBieSBjb3ZlcmluZwo7OyB0aGUgbWFpbiB3b3JrZmxvdyAo SSd2ZSBlbmNvdW50ZXJlZCkgd2hpbGUgbGVhdmluZyBhc2lkZSBzb21lIHBlcmZvcm1hbmNlIGNv bmNlcm5zLgo7OwoKOzs7Cjs7OyBEZWNsYXJhdGl2ZSBhcGkKOzs7Cjs7Cjs7IERlY2xhcmUgdGhl IGxheW91dCBvZiB0aGUgZGF0YWJhc2UgYW5kIGl0cyBjdXJzb3JzIHVzaW5nIGxpc3QgYW5kIHN5 bWJvbHMKOzsgSGVyZSBpcyB0d28gZXhhbXBsZSBjb25maWd1cmF0aW9uczoKOzsKOzsgICAoZGVm aW5lIGF0b21zICcoYXRvbXMKOzsgICAgICAgICAgICAgICAgICAgKCh1aWQgLiByZWNvcmQpKQo7 OyAgICAgICAgICAgICAgICAgICAoKGFzc29jIC4gcmF3KSkKOzsgICAgICAgICAgICAgICAgICAg KCkpKQo7Owo7OyAgIChkZWZpbmUgYXJyb3dzICcoYXJyb3dzCjs7ICAgICAgICAgICAgICAgICAg ICAoKGtleSAuIHJlY29yZCkpCjs7ICAgICAgICAgICAgICAgICAgICAoKHN0YXJ0IC4gdW5zaWdu ZWQtaW50ZWdlcikKOzsgICAgICAgICAgICAgICAgICAgICAoZW5kIC4gdW5zaWduZWQtaW50ZWdl cikpCjs7ICAgICAgICAgICAgICAgICAgICA7OyBpbmRleAo7OyAgICAgICAgICAgICAgICAgICAg Jygob3V0Z29pbmdzIChzdGFydCkgKHVpZCBlbmQpKQo7OyAgICAgICAgICAgICAgICAgICAgICAo aW5jb21pbmdzIChlbmQpICh1aWQgc3RhcnQpKSkpKQo7Owo7OyBUaGUgZm9ybWF0IGNhbiBiZSBk ZXNjcmliZWQgYXMgZm9sbG93Ogo7Owo7OyAodGFibGUtbmFtZQo7OyAgKGtleSBhc3NvYyBhcyAo Y29sdW1uLW5hbWUgLiBjb2x1bW4tdHlwZSkpCjs7ICAodmFsdWUgYXNzb2MgYXMgKGNvbHVtbi1u YW1lIC4gY29sdW1uLXR5cGUpKQo7OyAgKGluZGljZXMgYXMgKGluZGV4ZWQgbmFtZSAoaW5kZXhl ZCBrZXlzKSAocHJvamVjdGlvbiBhcyBjb2x1bW4gbmFtZXMpKSkpCjs7Cjs7Cjs7IElmIHRoZXJl IGlzIG5vIGluZGljZXMsIHRoZSBmaWVsZCBNVVNUIE5PVCBiZSBvbWl0ZWQgYnV0IHJlcGxhY2Vk IHdpdGggYW4gZW1wdHkgbGlzdAo7Owo7OyBUaGUgY29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZCBp biAoc2Vzc2lvbi1jcmVhdGUqIHNlc3Npb24gLiBjb25maWdzKSB0byBjcmVhdGUKOzsgdGhlIHRh YmxlcyBhbmQgaW5kaWNlcy4KOzsKOzsgQW5kIHRoZW4gaW4gKGN1cnNvci1vcGVuKiBzZXNzaW9u IC4gY29uZmlncykgdG8gYWxsIHRoZSB0YWJsZSBhbmQgaW5kaWNlcyBjdXJzb3JzLgo7Owo7OyBB IDxjb250ZXh0PiByZWNvcmQgZXhpc3RzIHdoaWNoIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgg YSB0aHJlYWQuIEl0IGVuY2Fwc3VsYXRlcwo7OyBhIDxzZXNzaW9uPiBhbmQgY3Vyc29ycy4KOzsg QSA8Y29udGV4dD4gY2FuIGJlIGNyZWF0ZWQgd2l0aCAoY29udGV4dC1vcGVuIGNvbm5lY3Rpb24g LiBjb25maWcpLgo7OyBTaG9ydGN1dHMgZXhpc3RzIHRvIGV4ZWN1dGUgdHJhbnNhY3Rpb24gYWdh aW5zdCBhIGNvbnRleHQgZGlyZWN0bHkuCjs7Cgo7OyB1dGlscyBmb3IgZGVjbGFyYXRpdmUgY29u ZmlndXJhdGlvbgoKKGRlZmluZS1yZWNvcmQtdHlwZSogPGNvbmZpZz4gbmFtZSBrZXkgdmFsdWUg aW5kaWNlcykKKGRlZmluZS1yZWNvcmQtdHlwZSogPGluZGV4PiBuYW1lIGtleXMgdmFsdWVzKQoK OzsgRklYTUU6IHNvbWUgdHlwZXMgYXJlIG1pc3NpbmcKKGRlZmluZSAoc3ltYm9sLT5jb25maWcg c3ltYm9sKQogIChhc3NvYy1yZWYgJygocmVjb3JkIC4gInIiKQogICAgICAgICAgICAgICAoc3Ry aW5nIC4gIlMiKQogICAgICAgICAgICAgICAodW5zaWduZWQtaW50ZWdlciAuICJRIikKICAgICAg ICAgICAgICAgKHBvc2l0aXZlLWludGVnZXIgLiAiUSIpCiAgICAgICAgICAgICAgIChpbnRlZ2Vy IC4gInEiKQogICAgICAgICAgICAgICAoYnl0ZXMgLiAidSIpKQogICAgICAgICAgICAgc3ltYm9s KSkKCgo7OzsgZGVmaW5lIHNlc3Npb24tY3JlYXRlKgoKKGRlZmluZS1wdWJsaWMgKHNlc3Npb24t Y3JlYXRlKiBzZXNzaW9uIC4gY29uZmlncykKICA7OyBYWFg6IGhlcmUgaW5zdGVhZCBvZiB1c2lu ZyBgc2Vzc2lvbi1jcmVhdGVgIGRvd25zdHJlYW0KICA7OyB3ZSB3YWl0IGZvciBgc2Vzc2lvbi1j cmVhdGVgIGFyZ3VtZW50cyBpbnN0ZWFkLgogIDs7IFRoaXMgbWFrZXMgdGhlIGNvZGUgZWFzaWVy IHRvIHRlc3QuLi4KICAoZGVmaW5lIChjcmVhdGUgYXJncykKICAgIChhcHBseSBzZXNzaW9uLWNy ZWF0ZSAoY29ucyBzZXNzaW9uIGFyZ3MpKSkKICA7OyBwcmVwYXJlIGFyZ3VtZW50cyBmb3IgZXZl cnkgY29uZmlnIGFuZCBhcHBseSB0aGVtCiAgKGZvci1lYWNoIGNyZWF0ZSAoYXBwZW5kLW1hcCBj b25maWctcHJlcGFyZS1jcmVhdGUgY29uZmlncykpKQoKKGRlZmluZS1wdWJsaWMgKGNvbmZpZy1w cmVwYXJlLWNyZWF0ZSBjb25maWcpCiAgOzsgYSBjb25maWcgZ2VuZXJhdGUgb25lIHRhYmxlIGFu ZCBtYXliZSBzZXZlcmFsIGluZGljZXMKICAoY29ucyAoY29uZmlnLXByZXBhcmUtY3JlYXRlLXRh YmxlIGNvbmZpZykKICAgICAgICAoY29uZmlnLXByZXBhcmUtY3JlYXRlLWluZGljZXMgY29uZmln KSkpCgooZGVmaW5lIChjb25maWctcHJlcGFyZS1jcmVhdGUtdGFibGUgY29uZmlnKQogIDs7IHRy YW5zZm9ybSBkZWNsYXJhdGl2ZSBhcGkgaW50byBhIHNlc3Npb24tY3JlYXRlIGFyZ3VtZW50cwog IChkZWZpbmUgKHN5bWJvbHMtPmNvbmZpZyBzeW1ib2xzKQogICAgKHN0cmluZy1jb25jYXRlbmF0 ZSAobWFwIChjdXQgc3ltYm9sLT5jb25maWcgPD4pIHN5bWJvbHMpKSkKCiAgKGRlZmluZSAoc3lt Ym9scy0+Y29sdW1ucyBzeW1ib2xzKQogICAgKHN0cmluZy1qb2luIChtYXAgKGN1dCBzeW1ib2wt PnN0cmluZyA8Pikgc3ltYm9scykgIiwiKSkKCiAgKGxldCogKChjb25maWcgKGFwcGx5IG1ha2Ut Y29uZmlnIGNvbmZpZykpCiAgICAgICAgIChuYW1lIChzdHJpbmctYXBwZW5kICJ0YWJsZToiIChz eW1ib2wtPnN0cmluZyAoY29uZmlnLW5hbWUgY29uZmlnKSkpKQogICAgICAgICAoa2V5IChzeW1i b2xzLT5jb25maWcgKG1hcCBjZHIgKGNvbmZpZy1rZXkgY29uZmlnKSkpKQogICAgICAgICAodmFs dWUgKHN5bWJvbHMtPmNvbmZpZyAobWFwIGNkciAoY29uZmlnLXZhbHVlIGNvbmZpZykpKSkKICAg ICAgICAgKGNvbHVtbnMgKGFwcGVuZCAoY29uZmlnLWtleSBjb25maWcpIChjb25maWctdmFsdWUg Y29uZmlnKSkpCiAgICAgICAgIChjb2x1bW5zIChzeW1ib2xzLT5jb2x1bW5zIChtYXAgY2FyIGNv bHVtbnMpKSkKICAgICAgICAgKGNvbmZpZyAoZm9ybWF0ICNmYWxzZQogICAgICAgICAgICAgICAg ICAgICAgICAgImtleV9mb3JtYXQ9fmEsdmFsdWVfZm9ybWF0PX5hLGNvbHVtbnM9KH5hKSIKICAg ICAgICAgICAgICAgICAgICAgICAgIGtleSB2YWx1ZSBjb2x1bW5zKSkpCiAgICAobGlzdCBuYW1l IGNvbmZpZykpKQoKKGRlZmluZSAoY29uZmlnLXByZXBhcmUtY3JlYXRlLWluZGljZXMgY29uZmln KQogIDs7IG9uZSBjb25maWcgbWF5IGhhdmUgbXVsdGlwbGUgaW5kaWNlcwogIChsZXQgKChjb25m aWcgKGFwcGx5IG1ha2UtY29uZmlnIGNvbmZpZykpKQogICAgKG1hcCAoY29uZmlnLXByZXBhcmUt Y3JlYXRlLWluZGV4IChjb25maWctbmFtZSBjb25maWcpKSAoY29uZmlnLWluZGljZXMgY29uZmln KSkpKQoKKGRlZmluZSAoY29uZmlnLXByZXBhcmUtY3JlYXRlLWluZGV4IG5hbWUpCiAgOzsgY29u dmVydCBkZWNsYXJhdGl2ZSBjb25maWd1cmF0aW9uIHRvIHNlc3Npb24tY3JlYXRlIGFyZ3VtZW50 cwogIChkZWZpbmUgKHN5bWJvbHMtPmNvbHVtbnMgc3ltYm9scykKICAgIChzdHJpbmctam9pbiAo bWFwIChjdXQgc3ltYm9sLT5zdHJpbmcgPD4pIHN5bWJvbHMpICIsIikpCgogIChsYW1iZGEgKGlu ZGV4KQogICAgKGxldCogKChpbmRleCAoYXBwbHkgbWFrZS1pbmRleCBpbmRleCkpCiAgICAgICAg ICAgKG5hbWUgKHN0cmluZy1hcHBlbmQgImluZGV4OiIgKHN5bWJvbC0+c3RyaW5nIG5hbWUpICI6 IiAoc3ltYm9sLT5zdHJpbmcgKGluZGV4LW5hbWUgaW5kZXgpKSkpCiAgICAgICAgICAgKGNvbHVt bnMgKGZvcm1hdCAjZmFsc2UgImNvbHVtbnM9KH5hKSIgKHN5bWJvbHMtPmNvbHVtbnMgKGluZGV4 LWtleXMgaW5kZXgpKSkpKQogICAgICAobGlzdCBuYW1lIGNvbHVtbnMpKSkpCgo7OzsKOzs7IGRl ZmluZSBjdXJzb3Itb3BlbioKOzs7Cjs7Cjs7IG9wZW4gY3Vyc29yIGZvciBldmVyeSB0YWJsZSBh bmQgaW5kaWNlcyBpbiBhbiBhc3NvYyB3aGVyZSB0aGUga2V5IGlzCjs7IHRoZSB0YWJsZSBuYW1l IGZvciBtYWluIGN1cnNvciwgJy1hcHBlbmQgcHJlZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0YWJs ZQo7OyBmb3IgdGhlIGFwcGVuZCBjdXJzb3Igd2hlbiBhcHBsaWNhYmxlIGFuZCB0aGUgbmFtZSBp bmRleCBwcmVmaXhlZCB3aXRoCjs7IHRoZSBuYW1lIG9mIHRoZSB0YWJsZS4KOzsgY3Vyc29yLW9w ZW4qIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYSAnYXBwZW5kJyBjdXJzb3IgZm9yIHRhYmxl cwo7OyB0aGF0IGhhdmUgc2luZ2xlIHJlY29yZCBjb2x1bW4uCjs7CgooZGVmaW5lLXB1YmxpYyAo Y3Vyc29yLW9wZW4qIHNlc3Npb24gLiBjb25maWdzKQogICJPcGVuIGN1cnNvcnMgYWdhaW5zdCBT RVNTSU9OIHVzaW5nIENPTkZJR1MgYW5kIHJldHVybiBhbiBhc3NvYwp3aXRoIGN1cnNvciBzeW1i b2xzIGFzIGtleSBhbmQgY3Vyc29ycyBhcyB2YWx1ZSIKICA7OyBYWFg6IGp1c3QgbGlrZSBzZXNz aW9uLW9wZW4qIHdlIGV4cGVjdCBjdXJzb3Itb3BlbiBhcmd1bWVudHMKICA7OyBidXQgdGhpcyB0 aW1lIHdlIHJldHVybiBhbiBhc3NvYyBtYWRlIG9mICgnY3Vyc29yLW5hbWUgLiBjdXJzb3IpCiAg KGRlZmluZSAob3BlbiBuYW1lK2FyZ3MpCiAgICAoY29ucyAoY2FyIG5hbWUrYXJncykgKGFwcGx5 IGN1cnNvci1vcGVuIChjb25zIHNlc3Npb24gKGNhZHIgbmFtZSthcmdzKSkpKSkKICA7OyBwcmVw YXJlIGFyZ3VtZW50cyBmb3IgZXZlcnkgY29uZmlnIGFuZCBhcHBseSB0aGVtCiAgKG1hcCBvcGVu IChhcHBlbmQtbWFwIGNvbmZpZy1wcmVwYXJlLW9wZW4gY29uZmlncykpKQoKKGRlZmluZSAoY29u ZmlnLXByZXBhcmUtb3BlbiBjb25maWcpCiAgKGFwcGVuZCAoY29uZmlnLXByZXBhcmUtY3Vyc29y LW9wZW4gY29uZmlnKQogICAgICAgICAgKGNvbmZpZy1wcmVwYXJlLWN1cnNvci1hcHBlbmQtb3Bl biBjb25maWcpCiAgICAgICAgICAoY29uZmlnLXByZXBhcmUtY3Vyc29yLWluZGljZXMtb3BlbiBj b25maWcpKSkKCihkZWZpbmUgKGNvbmZpZy1wcmVwYXJlLWN1cnNvci1vcGVuIGNvbmZpZykKICAo bGV0KiAoKGNvbmZpZyAoYXBwbHkgbWFrZS1jb25maWcgY29uZmlnKSkKICAgICAgICAgKG5hbWUg KGNvbmZpZy1uYW1lIGNvbmZpZykpKQogICAgOzsgWFhYOiBjb25maWctcHJlcGFyZS1vcGVuIGV4 cGVjdCBhIGxpc3Qgb2YgY3Vyc29yLW9wZW4gYXJndW1lbnRzCiAgICAobGlzdCAobGlzdCBuYW1l IChsaXN0IChmb3JtYXQgI2ZhbHNlICJ0YWJsZTp+YSIgbmFtZSkpKSkpKQoKKGRlZmluZSAoY29u ZmlnLXByZXBhcmUtY3Vyc29yLWFwcGVuZC1vcGVuIGNvbmZpZykKICAoZGVmaW5lIChrZXktaXMt cmVjb3JkPyBrZXkpCiAgICAoYW5kIChlcT8gKGxlbmd0aCBrZXkpIDEpIChlcT8gKGNkYXIga2V5 KSAncmVjb3JkKSkpCiAgKGxldCogKChjb25maWcgKGFwcGx5IG1ha2UtY29uZmlnIGNvbmZpZykp CiAgICAgICAgIChuYW1lIChjb25maWctbmFtZSBjb25maWcpKQogICAgICAgICAoY3Vyc29yLW5h bWUgKHN5bWJvbC1hcHBlbmQgbmFtZSAnLWFwcGVuZCkpKQogICAgKGlmIChrZXktaXMtcmVjb3Jk PyAoY29uZmlnLWtleSBjb25maWcpKQogICAgICAgIDs7IGFkZCBhIGFwcGVuZCBjdXJzb3Igb3Zl ciB0aGUgdGFibGUKICAgICAgICA7OyBYWFg6IGNvbmZpZy1wcmVwYXJlLW9wZW4gZXhwZWN0IGEg bGlzdCBvZiBjdXJzb3Itb3BlbiBhcmd1bWVudHMKICAgICAgICAobGlzdCAobGlzdCBjdXJzb3It bmFtZSAobGlzdCAoZm9ybWF0ICNmYWxzZSAidGFibGU6fmEiIG5hbWUpICJhcHBlbmQiKSkpCiAg ICAgICAgOzsgbm8gY3Vyc29yIGlzIHJlcXVpcmVkCiAgICAgICAgKGxpc3QpKSkpCgooZGVmaW5l IChjb25maWctcHJlcGFyZS1jdXJzb3ItaW5kaWNlcy1vcGVuIGNvbmZpZykKICAobGV0ICgoY29u ZmlnIChhcHBseSBtYWtlLWNvbmZpZyBjb25maWcpKSkKICAgIChtYXAgKGNvbmZpZy1wcmVwYXJl LWN1cnNvci1pbmRleC1vcGVuIChjb25maWctbmFtZSBjb25maWcpKSAoY29uZmlnLWluZGljZXMg Y29uZmlnKSkpKQoKKGRlZmluZSAoY29uZmlnLXByZXBhcmUtY3Vyc29yLWluZGV4LW9wZW4gbmFt ZSkKICAoZGVmaW5lIChzeW1ib2xzLT5jb2x1bW5zIHN5bWJvbHMpCiAgICAoc3RyaW5nLWpvaW4g KG1hcCAoY3V0IHN5bWJvbC0+c3RyaW5nIDw+KSBzeW1ib2xzKSAiLCIpKQoKICAobGFtYmRhIChp bmRleCkKICAgIChsZXQqICgoaW5kZXggKGFwcGx5IG1ha2UtaW5kZXggaW5kZXgpKQogICAgICAg ICAgIChjb2x1bW5zIChzeW1ib2xzLT5jb2x1bW5zIChpbmRleC12YWx1ZXMgaW5kZXgpKSkKICAg ICAgICAgICAoY3Vyc29yLW5hbWUgKHN5bWJvbC1hcHBlbmQgbmFtZSAnLSAoaW5kZXgtbmFtZSBp bmRleCkpKSkKICAgICAgKGlmIChlcXVhbD8gY29sdW1ucyAiIikKICAgICAgICAgIChsaXN0IGN1 cnNvci1uYW1lCiAgICAgICAgICAgICAgICAobGlzdCAoZm9ybWF0ICNmYWxzZSAiaW5kZXg6fmE6 fmEiIG5hbWUgKGluZGV4LW5hbWUgaW5kZXgpKSkpCiAgICAgICAgICAobGlzdCBjdXJzb3ItbmFt ZQogICAgICAgICAgICAgICAgKGxpc3QgKGZvcm1hdCAjZmFsc2UgImluZGV4On5hOn5hKH5hKSIg bmFtZSAoaW5kZXgtbmFtZSBpbmRleCkgY29sdW1ucykpKSkpKSkKOzs7Cjs7OyA8ZW52Pgo7OzsK OzsKOzsgQW4gZW52aXJvbm1lbnQgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZl biBkYXRhYmFzZSBhbmQKOzsgaXRzIGNvbnRleHRzLiBJdCdzIHRocmVhZHNhZmUuCjs7CgooZGVm aW5lLXJlY29yZC10eXBlKiA8ZW52PiBjb25uZWN0aW9uIGNvbmZpZ3MgY29udGV4dHMgbXV0ZXgp CgooZGVmaW5lICpjb250ZXh0KiAobWFrZS11bmJvdW5kLWZsdWlkKSkKCihkZWZpbmUtcHVibGlj IChlbnYtb3BlbiBwYXRoKQogIChtYWtlLWVudiAoY29ubmVjdGlvbi1vcGVuIHBhdGggImNyZWF0 ZSIpICcoKSAnKCkgKG1ha2UtbXV0ZXgpKSkKCihkZWZpbmUtcHVibGljIChlbnYtY2xvc2UgZW52 KQogIChjb25uZWN0aW9uLWNsb3NlIChlbnYtY29ubmVjdGlvbiBlbnYpKSkKCihkZWZpbmUtcHVi bGljIChlbnYtY29uZmlnLWFkZCBlbnYgY29uZmlnKQogIChlbnYtY29uZmlncyEgZW52IChjb25z IGNvbmZpZyAoZW52LWNvbmZpZ3MgZW52KSkpKQoKKGRlZmluZS1wdWJsaWMgKGVudi1vcGVuKiBw YXRoIGNvbmZpZ3MpCiAgKGxldCAoKGVudiAoZW52LW9wZW4gcGF0aCkpKQogICAgKGZvci1lYWNo IChjdXQgZW52LWNvbmZpZy1hZGQgZW52IDw+KSBjb25maWdzKQogICAgKGVudi1jcmVhdGUgZW52 KQogICAgZW52KSkKCihkZWZpbmUtcHVibGljIChlbnYtY3JlYXRlIGVudikKICAobGV0KiAoKGNv bm5lY3Rpb24gKGVudi1jb25uZWN0aW9uIGVudikpCiAgICAgICAgIChzZXNzaW9uIChzZXNzaW9u LW9wZW4gY29ubmVjdGlvbikpKQogICAgKGFwcGx5IHNlc3Npb24tY3JlYXRlKiAoY29ucyBzZXNz aW9uIChlbnYtY29uZmlncyBlbnYpKSkKICAgIChzZXNzaW9uLWNsb3NlIHNlc3Npb24pKSkKICAK KGRlZmluZSAoZ2V0LW9yLWNyZWF0ZS1jb250ZXh0IGVudikKICAod2l0aC1tdXRleCAoZW52LW11 dGV4IGVudikKICAgIChsZXQgKChjb250ZXh0cyAoZW52LWNvbnRleHRzIGVudikpKQogICAgICAo aWYgKG51bGw/IGNvbnRleHRzKQogICAgICAgICAgOzsgY3JlYXRlIGEgbmV3IGNvbnRleHQKICAg ICAgICAgIDs7IFhYWDogdGhlIG51bWJlciBvZiBhY3RpdmUgY29udGV4dCBpcyB1bmJvdW5kCiAg ICAgICAgICAoYXBwbHkgY29udGV4dC1vcGVuIChjb25zIChlbnYtY29ubmVjdGlvbiBlbnYpIChl bnYtY29uZmlncyBlbnYpKSkKICAgICAgICAgIDs7IHJlLXVzZSBhbiBleGlzdGluZyBjb250ZXh0 CiAgICAgICAgICAobGV0ICgoY29udGV4dCAoY2FyIGNvbnRleHRzKSkpCiAgICAgICAgICAgIChl bnYtY29udGV4dHMhIGVudiAoY2RyIGNvbnRleHRzKSkKICAgICAgICAgICAgY29udGV4dCkpKSkp CgooZGVmaW5lLXN5bnRheC1ydWxlICh3aXRoLWNvbnRleHQgZW52IGJvZHkgLi4uKQogIChsZXQg KChlbnYqIGVudikpCiAgICA7OyBnZXQgb3IgY3JlYXRlIGEgY29udGV4dCBhbmQgc2V0IGl0IGFz IGN1cnJlbnQgKmNvbnRleHQqIHZhbHVlCiAgICAobGV0ICgoY29udGV4dCAoZ2V0LW9yLWNyZWF0 ZS1jb250ZXh0IGVudiopKSkKICAgICAgKHdpdGgtZmx1aWRzICgoKmNvbnRleHQqIGNvbnRleHQp KQogICAgICAgIDs7IGV4ZWN1dGUgdGhlIGJvZHkKICAgICAgICAobGV0ICgob3V0IChiZWdpbiBi b2R5IC4uLikpKQogICAgICAgICAgOzsgcHVzaCBiYWNrIHRoZSBjb250ZXh0IHRvIHRoZSBjb250 ZXh0IHBvb2wKICAgICAgICAgICh3aXRoLW11dGV4IChlbnYtbXV0ZXggZW52KikKICAgICAgICAg ICAgKGVudi1jb250ZXh0cyEgZW52KiAoY29ucyBjb250ZXh0IChlbnYtY29udGV4dHMgZW52Kikp KSkKICAgICAgICAgIG91dCkpKSkpCgooZXhwb3J0IHdpdGgtY29udGV4dCkKCihkZWZpbmUtc3lu dGF4LXJ1bGUgKHdpdGgtZW52IGVudiBlIC4uLikKICAobGV0KiAoKGVudiogZW52KQogICAgICAg ICAob3V0ICh3aXRoLWNvbnRleHQgZW52KiBlIC4uLikpKQogICAgKGVudi1jbG9zZSBlbnYqKQog ICAgb3V0KSkKCihleHBvcnQgd2l0aC1lbnYpCgo7OzsKOzs7IDxjb250ZXh0Pgo7OzsKOzsKOzsg QSBzZXNzaW9uIGFuZCBjdXJzb3JzIGFzc29jCjs7CgooZGVmaW5lLXJlY29yZC10eXBlKiA8Y29u dGV4dD4gc2Vzc2lvbiBjdXJzb3JzKQoKKGV4cG9ydCBjb250ZXh0LXNlc3Npb24pCihleHBvcnQg Y29udGV4dC1jdXJzb3JzKQoKKGRlZmluZS1wdWJsaWMgKGNvbnRleHQtb3BlbiBjb25uZWN0aW9u IC4gY29uZmlncykKICAiT3BlbiBhIGNvbnRleHQgdXNpbmcgQ09OTkVDVElPTiB3aXRoIENPTkZJ R1MiCiAgKGxldCogKChzZXNzaW9uIChzZXNzaW9uLW9wZW4gY29ubmVjdGlvbikpCiAgICAgICAg IChjdXJzb3JzIChhcHBseSBjdXJzb3Itb3BlbiogKGNvbnMgc2Vzc2lvbiBjb25maWdzKSkpKQog ICAgKG1ha2UtY29udGV4dCBzZXNzaW9uIGN1cnNvcnMpKSkKCihkZWZpbmUtcHVibGljICh3aXJl ZHRpZ2VyLW9wZW4qIHBhdGggLiBjb25maWdzKQogICJPcGVuIG9yIGNyZWF0ZSBhIGRhdGFiYXNl IGF0IFBBVEggd2l0aCBDT05GSUdTIGFuZCByZXR1cm4KYSB0d28gdmFsdWVzOiB0aGUgY29ubmVj dGlvbiBhbmQgYSBjb250ZXh0IgogIChsZXQqICgoY29ubmVjdGlvbiAoY29ubmVjdGlvbi1vcGVu IHBhdGggImNyZWF0ZSIpKQogICAgICAgICAoc2Vzc2lvbiAoc2Vzc2lvbi1vcGVuIGNvbm5lY3Rp b24pKSkKICAgIChhcHBseSBzZXNzaW9uLWNyZWF0ZSogKGNvbnMgc2Vzc2lvbiBjb25maWdzKSkK ICAgICh2YWx1ZXMgY29ubmVjdGlvbiAobWFrZS1jb250ZXh0IHNlc3Npb24gKGFwcGx5IGN1cnNv ci1vcGVuKiAoY29ucyBzZXNzaW9uIGNvbmZpZ3MpKSkpKSkKCihkZWZpbmUtcHVibGljIChjb250 ZXh0LXJlZiBjb250ZXh0IG5hbWUpCiAgIlJldHVybiB0aGUgY3Vyc29yIGFzc29jaWF0ZWQgd2l0 aCBOQU1FIGluIENPTlRFWFQiCiAgKGFzc29jLXJlZiAoY29udGV4dC1jdXJzb3JzIGNvbnRleHQp IG5hbWUpKQoKKGRlZmluZS1wdWJsaWMgKGNvbnRleHQtYmVnaW4gY29udGV4dCkKICAiU3RhcnQg YSB0cmFuc2FjdGlvbiBhZ2FpbnN0IENPTlRFWFQiCiAgKHNlc3Npb24tdHJhbnNhY3Rpb24tYmVn aW4gKGNvbnRleHQtc2Vzc2lvbiBjb250ZXh0KSkpCgooZGVmaW5lLXB1YmxpYyAoY29udGV4dC1j b21taXQgY29udGV4dCkKICAiQ29tbWl0IHRyYW5zYWN0aW9uIGFnYWluc3QgQ09OVEVYVCIKICAo c2Vzc2lvbi10cmFuc2FjdGlvbi1jb21taXQgKGNvbnRleHQtc2Vzc2lvbiBjb250ZXh0KSkpCgoo ZGVmaW5lLXB1YmxpYyAoY29udGV4dC1yb2xsYmFjayBjb250ZXh0KQogICJSb2xsYmFjayB0cmFu c2FjdGlvbiBhZ2FpbnN0IENPTlRFWFQiCiAgKHNlc3Npb24tdHJhbnNhY3Rpb24tcm9sbGJhY2sg KGNvbnRleHQtc2Vzc2lvbiBjb250ZXh0KSkpCgooZGVmaW5lLXN5bnRheC1ydWxlICh3aXRoLXRy YW5zYWN0aW9uIGUgLi4uKQogIChjYXRjaCAjdHJ1ZQogICAgKGxhbWJkYSAoKQogICAgICAoY29u dGV4dC1iZWdpbiAoZmx1aWQtcmVmICpjb250ZXh0KikpCiAgICAgIChsZXQgKChvdXQgKGJlZ2lu IGUgLi4uKSkpCiAgICAgICAgKGNvbnRleHQtY29tbWl0IChmbHVpZC1yZWYgKmNvbnRleHQqKSkK ICAgICAgICBvdXQpKQogICAgKGxhbWJkYSAoa2V5IC4gYXJncykKICAgICAgKGNvbnRleHQtcm9s bGJhY2sgKGZsdWlkLXJlZiAqY29udGV4dCopKQogICAgICAoYXBwbHkgdGhyb3cgKGNvbnMga2V5 IGFyZ3MpKSkpKQoKKGV4cG9ydCB3aXRoLXRyYW5zYWN0aW9uKQoKOzs7Cjs7OyBDdXJzb3IgbmF2 aWdhdGlvbgo7OzsKOzsKOzsgUXVpY2tseSBvcGVyYXRlIG9uIGN1cnNvcnMKOzsKCjs7IGhlbHBl ciBmb3IgcmVzZXRpbmcgY3Vyc29ycyBhZnRlciBkb2luZyBzb21lIG9wZXJhdGlvbnMKOzsgQEBA OiBlbWFjczogKHB1dCAnd2l0aC1jdXJzb3IgJ3NjaGVtZS1pbmRlbnQtZnVuY3Rpb24gMSkKKGRl ZmluZS1zeW50YXgtcnVsZSAod2l0aC1jdXJzb3IgY3Vyc29yIGUgLi4uKQogIChsZXQgKChvdXQg KGJlZ2luIGUgLi4uKSkpCiAgICAoY3Vyc29yLXJlc2V0IGN1cnNvcikKICAgIG91dCkpCgooZXhw b3J0IHdpdGgtY3Vyc29yKQoKKGRlZmluZS1zeW50YXgtcnVsZSAoY2FsbC13aXRoLWN1cnNvciBu YW1lIHByb2MpCiAgKGxldCogKChjb250ZXh0IChmbHVpZC1yZWYgKmNvbnRleHQqKSkKICAgICAg ICAgKGN1cnNvciAoY29udGV4dC1yZWYgY29udGV4dCBuYW1lKSkpCiAgICAobGV0ICgob3V0IChw cm9jIGN1cnNvcikpKQogICAgICAoY3Vyc29yLXJlc2V0IGN1cnNvcikKICAgICAgICBvdXQpKSkK CihleHBvcnQgY2FsbC13aXRoLWN1cnNvcikKCihkZWZpbmUtcHVibGljIChjdXJzb3ItbmV4dCog Y3Vyc29yKQogICJNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgcmVzdWx0IGFuZCByZXR1cm4g I3QuClJldHVybiAjZiBpZiB0aGVyZSBpcyBubyBuZXh0IHJlc3VsdCAoZW5kIG9mIHRoZSB0YWJs ZSkuCgpUaGlzIHByb2NlZHVyZSByZXR1cm4gYSBib29sZWFuIGluc3RlYWQgb2YgdGhyb3dpbmcg YW4gZXhjZXB0aW9uIgogIChjYXRjaCAnd2lyZWR0aWdlcgogICAgKGxhbWJkYSAoKSAoY3Vyc29y LW5leHQgY3Vyc29yKSAjdCkKICAgIChsYW1iZGEgXyAjZikpKQoKKGRlZmluZS1wdWJsaWMgKGN1 cnNvci1wcmV2aW91cyogY3Vyc29yKQogICJNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3Vz IHJlc3VsdCBhbmQgcmV0dXJuICN0LgpSZXR1cm4gI2YgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMg cmVzdWx0IChlbmQgb2YgdGhlIHRhYmxlKS4KClRoaXMgcHJvY2VkdXJlIHJldHVybiBhIGJvb2xl YW4gaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBleGNlcHRpb24iCiAgKGNhdGNoICd3aXJlZHRpZ2Vy CiAgICAobGFtYmRhICgpIChjdXJzb3ItcHJldmlvdXMgY3Vyc29yKSAjdCkKICAgIChsYW1iZGEg XyAjZikpKQoKKGRlZmluZS1wdWJsaWMgKGN1cnNvci1kZWJ1ZyBjdXJzb3IpCiAgIlByaW50cyB0 aGUgd2hvbGUgdGFibGUgc3RhcnRpbmcgYXQgY3Vyc29yIHBvc2l0aW9uIgogIChwayAnY3Vyc29y LWRlYnVnIGN1cnNvcikKICAod2l0aC1jdXJzb3IgY3Vyc29yCiAgICAobGV0IGxvb3AgKChuZXh0 IChjdXJzb3ItbmV4dCogY3Vyc29yKSkpCiAgICAgICh3aGVuIG5leHQKICAgICAgICAocGsgKGN1 cnNvci1rZXktcmVmIGN1cnNvcikgKGN1cnNvci12YWx1ZS1yZWYgY3Vyc29yKSkKICAgICAgICAo bG9vcCAoY3Vyc29yLW5leHQqIGN1cnNvcikpKSkpKQoKKGRlZmluZS1wdWJsaWMgKGN1cnNvci12 YWx1ZS1yZWYqIGN1cnNvciAuIGtleSkKICAiU2VhcmNoIEtFWSBhbmQgcmV0dXJuIHRoZSBhc3Nv Y2lhdGVkIHZhbHVlLgpUaHJvdyBhICd3aXJlZHRpZ2VyIGVycm9yIGlmIHRoZSBrZXkgaXMgbm90 IGZvdW5kIgogICh3aXRoLWN1cnNvciBjdXJzb3IKICAgIChhcHBseSBjdXJzb3Itc2VhcmNoKiAo Y29ucyBjdXJzb3Iga2V5KSkKICAgIChjdXJzb3ItdmFsdWUtcmVmIGN1cnNvcikpKQoKKGRlZmlu ZS1wdWJsaWMgKGN1cnNvci1pbnNlcnQqIGN1cnNvciBrZXkgdmFsdWUpCiAgIkluc2VydCB1c2lu ZyBDVVJTT1IgS0VZIGFuZCBWQUxVRS4gSWYgS0VZIGlzIG51bGwsCnRoZSBrZXkgd2lsbCBub3Qg YmUgc2V0IGFuZCB0aGUga2V5IGFzc2lnbmVkIGJ5IHdpcmVkdGlnZXIKd2lsbCBiZSByZXR1cm5l ZC4gVGhpcyBpcyB1c2VmdWwgaW4gdGhlIGNhc2Ugb2YgYSB0YWJsZSB3aXRoCmEgc2luZ2xlIHJl Y29yZCBrZXkgY29sdW1uLiIKICAodW5sZXNzIChudWxsPyBrZXkpCiAgICAoYXBwbHkgY3Vyc29y LWtleS1zZXQgKGNvbnMgY3Vyc29yIGtleSkpKQogIChhcHBseSBjdXJzb3ItdmFsdWUtc2V0IChj b25zIGN1cnNvciB2YWx1ZSkpCiAgKGN1cnNvci1pbnNlcnQgY3Vyc29yKQogICh3aGVuIChudWxs PyBrZXkpICA7OyB1c2VkIHdpdGggc2luZ2xlIHJlY29yZCBrZXkgY29sdW1uCiAgICAoY2FyIChj dXJzb3Ita2V5LXJlZiBjdXJzb3IpKSkpCgooZGVmaW5lLXB1YmxpYyAoY3Vyc29yLXVwZGF0ZSog Y3Vyc29yIGtleSB2YWx1ZSkKICAiVXBkYXRlIEtFWSB3aXRoIFZBTFVFIHVzaW5nIENVUlNPUiIK ICAoYXBwbHkgY3Vyc29yLWtleS1zZXQgKGNvbnMgY3Vyc29yIGtleSkpCiAgKGFwcGx5IGN1cnNv ci12YWx1ZS1zZXQgKGNvbnMgY3Vyc29yIHZhbHVlKSkKICAoY3Vyc29yLXVwZGF0ZSBjdXJzb3Ip KQoKKGRlZmluZS1wdWJsaWMgKGN1cnNvci1yZW1vdmUqIGN1cnNvciAuIGtleSkKICAiUmVtb3Zl IHJvdyBoYXZpbmcgS0VZIGFzIGtleSB1c2luZyBDVVJTT1IiCiAgKGFwcGx5IGN1cnNvci1rZXkt c2V0IChjb25zIGN1cnNvciBrZXkpKQogIChjdXJzb3ItcmVtb3ZlIGN1cnNvcikpCgooZGVmaW5l LXB1YmxpYyAoY3Vyc29yLXNlYXJjaCogY3Vyc29yIC4ga2V5KQogICJQb3NpdGlvbiB0aGUgIGN1 cnNvciBhdCBLRVkuIFRocm93IGEgJ3dpcmVkdGlnZXIgZXJyb3IKaWYgS0VZIGlzIG5vdCBmb3Vu ZCIKICAoYXBwbHkgY3Vyc29yLWtleS1zZXQgKGNvbnMgY3Vyc29yIGtleSkpCiAgKGN1cnNvci1z ZWFyY2ggY3Vyc29yKSkKCihkZWZpbmUtcHVibGljIChjdXJzb3Itc2VhcmNoLW5lYXIqIGN1cnNv ciAuIGtleS1wcmVmaXgpCiAgIlNlYXJjaCBuZWFyIEtFWS1QUkVGSVggb24gQ1VSU09SIgogIChh cHBseSBjdXJzb3Ita2V5LXNldCAoY29ucyBjdXJzb3Iga2V5LXByZWZpeCkpCiAgKGN1cnNvci1z ZWFyY2gtbmVhciBjdXJzb3IpKQoKOzsgY3Vyc29yLXJhbmdlCgooZGVmaW5lLXB1YmxpYyAoY3Vy c29yLXJhbmdlIGN1cnNvciAuIGtleSkKICAiUmV0dXJuIGEgbGlzdCBtYWRlIG9mIHRoZSB2YWx1 ZXMgdGFrZW4gYnkgcm93cyBoYXZpbmcgS0VZIGFzIGtleSIKICAod2l0aC1jdXJzb3IgY3Vyc29y CiAgICAoY2F0Y2ggJ3dpcmVkdGlnZXIKICAgICAgKGxhbWJkYSAoKQogICAgICAgIChhcHBseSBj dXJzb3Itc2VhcmNoKiAoY29ucyBjdXJzb3Iga2V5KSkKICAgICAgICAobGV0IGxvb3AgKChvdXQg KGxpc3QgKGN1cnNvci12YWx1ZS1yZWYgY3Vyc29yKSkpKQogICAgICAgICAgKGlmIChjdXJzb3It bmV4dCogY3Vyc29yKQogICAgICAgICAgICAgIChpZiAoZXF1YWw/IChjdXJzb3Ita2V5LXJlZiBj dXJzb3IpIGtleSkKICAgICAgICAgICAgICAgICAgKGxvb3AgKGNvbnMgKGN1cnNvci12YWx1ZS1y ZWYgY3Vyc29yKSBvdXQpKQogICAgICAgICAgICAgICAgICBvdXQpCiAgICAgICAgICAgICAgb3V0 KSkpCiAgICAgIChsYW1iZGEgXyAnKCkpKSkpCgo7OyBjdXJzb3ItcmFuZ2UtcHJlZml4CgooZGVm aW5lLXB1YmxpYyAocHJlZml4PyBwcmVmaXggb3RoZXIpCiAgIlJldHVybiAjdHJ1ZSBpZiBPVEhF UiBoYXMgS0VZIGFzIHByZWZpeCIKICA7OyBmaWx0ZXIgImVtcHR5IiB2YWx1ZXMgZnJvbSB0aGUg a2V5CiAgKGRlZmluZSAoZW1wdHk/IHgpIChvciAoZXE/IHggMCkgKGVxdWFsPyB4ICIiKSAoZXE/ IHggI3Z1OCgpKSkpCiAgKGRlZmluZSAocHJlZGljYXRlPyBhIGIpIChub3QgKG9yIChlbXB0eT8g YSkgKGVxdWFsPyBhIGIpKSkpCiAgKG5vdCAoYW55IHByZWRpY2F0ZT8gcHJlZml4IG90aGVyKSkp CgooZGVmaW5lLXB1YmxpYyAoY3Vyc29yLXJhbmdlLXByZWZpeCBjdXJzb3IgLiBrZXktcHJlZml4 KQogICJSZXR1cm4gQ1VSU09SIHJhbmdlIGFzc29jaWF0aW9uIHdoZXJlIGtleXMgbWF0Y2ggUFJF RklYIgogIChkZWZpbmUgKG5leHQ/KQogICAgKGNhdGNoICd3aXJlZHRpZ2VyCiAgICAgIChsYW1i ZGEgKCkKICAgICAgICAoY3Vyc29yLW5leHQgY3Vyc29yKQogICAgICAgIChwcmVmaXg/IGtleS1w cmVmaXggKGN1cnNvci1rZXktcmVmIGN1cnNvcikpKQogICAgICAobGFtYmRhIChrZXkgLiBhcmdz KQogICAgICAgICNmYWxzZSkpKQogICh3aXRoLWN1cnNvciBjdXJzb3IKICAgIChsZXQgKChjb2Rl IChjYXRjaCAnd2lyZWR0aWdlcgogICAgICAgICAgICAgICAgICAobGFtYmRhICgpIChhcHBseSBj dXJzb3Itc2VhcmNoLW5lYXIqIChjb25zIGN1cnNvciBrZXktcHJlZml4KSkpCiAgICAgICAgICAg ICAgICAgIChsYW1iZGEgKGtleSAuIGFyZ3MpICNmKSkpKQogICAgICAoaWYgY29kZQogICAgICAg ICAgKGlmIChvciAoZXE/IGNvZGUgMCkgKGVxPyBjb2RlIDEpIChhbmQgKGVxPyBjb2RlIC0xKSAo Y3Vyc29yLW5leHQqIGN1cnNvcikpKQogICAgICAgICAgICAgIChsZXQgbG9vcCAoKG91dCAobGlz dCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAodmFsaWQ/IChwcmVmaXg/IGtleS1wcmVmaXgg KGN1cnNvci1rZXktcmVmIGN1cnNvcikpKSkKICAgICAgICAgICAgICAgIChpZiB2YWxpZD8KICAg ICAgICAgICAgICAgICAgICAobG9vcCAoYWNvbnMgKGN1cnNvci1rZXktcmVmIGN1cnNvcikgKGN1 cnNvci12YWx1ZS1yZWYgY3Vyc29yKSBvdXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5l eHQ/KSkKICAgICAgICAgICAgICAgICAgICBvdXQpKQogICAgICAgICAgICAgICcoKSkKICAgICAg ICAgICcoKSkpKSkKCihkZWZpbmUtcHVibGljIChjdXJzb3ItY291bnQtcHJlZml4IGN1cnNvciAu IGtleS1wcmVmaXgpCiAgOzsgRklYTUU6IG9ubHkgY291bnRpbmcga2V5cyB3b3VsZCBpbXByb3Zl IHBlcmZvcm1hbmNlCiAgKGxlbmd0aCAoYXBwbHkgY3Vyc29yLXJhbmdlLXByZWZpeCAoY29ucyBj dXJzb3Iga2V5LXByZWZpeCkpKSkKCgo7OzsKOzs7IGdlbmVyYXRlLXVpZAo7OzsKCihkZWZpbmUg KHJhbmRvbS1pZCBzaXplKQogICJHZW5lcmF0ZSBhbmQgcmFuZG9tIGlkZW50aWZpZXIgb2YgbGVu Z3RoIFNJWkUiCiAgKGRlZmluZSBDSEFSUyAiMDEyMzQ1Njc4OUFaRVJUWVVJT1BRU0RGR0hKS0xN V1hDVkJOIikKICA7OyBhcHBlbmQgU0laRSBhbHBoYW51bWVyaWMgY2hhcnMgZnJvbSBgQ0hBUlNg CiAgKGxldCBsb29wICgoY291bnQgc2l6ZSkKICAgICAgICAgICAgIChpZCAiIikpCiAgICAoaWYg KGVxPyBjb3VudCAwKQogICAgICAgIGlkCiAgICAgICAgKGxvb3AgKDEtIGNvdW50KSAoZm9ybWF0 ICNmICJ+YX5hIiBpZCAoc3RyaW5nLXJlZiBDSEFSUyAocmFuZG9tIDM2KSkpKSkpKQoKKGRlZmlu ZSotcHVibGljIChnZW5lcmF0ZS11aWQgZXhpc3RzPyAjOm9wdGlvbmFsIChzaXplIDgpKQogICJH ZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgbWFkZSB1cCBhbHBoYW51bWVyaWMgYXNjaWkgY2hhcnMg dGhhdCBkb2Vzbid0IGV4aXN0cwogICBhY2NvcmRpbmcgdG8gYGV4aXN0cz9gIgogIChsZXQgbG9v cCAoKQogICAgOzsgZ2VuZXJhdGUgYSByYW5kb20gaWRlbnRpZmllciB1bnRpbCBpdCBmaW5kIGFu IG9uZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBgZXhpc3RzP2AKICAgIChsZXQgKChpZCAocmFuZG9t LWlkIHNpemUpKSkKICAgICAgKGlmIChleGlzdHM/IGlkKSAobG9vcCkgaWQpKSkpCgo7OzsKOzs7 IHRlc3RzCjs7OwoKKHVzZS1tb2R1bGVzICh0ZXN0LWNoZWNrKSkKCih3aGVuIChvciAoZ2V0ZW52 ICJDSEVDSyIpIChnZXRlbnYgIkNIRUNLX1dJUkVEVElHRVJaIikpCiAgKGZvcm1hdCAjdHJ1ZSAi KiB0ZXN0aW5nIHdpcmVkdGlnZXJ6XG4iKQoKICA7OyB0ZXN0IGRlY2xhcmF0aXZlIEFQSQoKICAo dGVzdC1jaGVjayAiY3JlYXRlIHRhYmxlIGNvbmZpZyB3aXRob3V0IGluZGV4IgogICAgKGNvbmZp Zy1wcmVwYXJlLWNyZWF0ZSAnKGF0b21zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1 aWQgLiByZWNvcmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYXNzb2MgLiBieXRl cykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpKQogICAgKGxpc3QgKGxpc3QgInRh YmxlOmF0b21zIiAia2V5X2Zvcm1hdD1yLHZhbHVlX2Zvcm1hdD11LGNvbHVtbnM9KHVpZCxhc3Nv YykiKSkpCgogICh0ZXN0LWNoZWNrICJjcmVhdGUgdGFibGUgY29uZmlnIHdpdGggaW5kZXggYW5k IHByb2plY3Rpb25zIgogICAgKGNvbmZpZy1wcmVwYXJlLWNyZWF0ZSAnKGFycm93cwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgoa2V5IC4gcmVjb3JkKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKHN0YXJ0IC4gdW5zaWduZWQtaW50ZWdlcikKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGVuZCAuIHVuc2lnbmVkLWludGVnZXIpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDs7IGluZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChvdXRnb2lu Z3MgKHVpZCxzdGFydCkgKHVpZCBlbmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo aW5jb21pbmdzIChlbmQpICgpKSkpKQogICAgKGxpc3QgKGxpc3QgInRhYmxlOmFycm93cyIgImtl eV9mb3JtYXQ9cix2YWx1ZV9mb3JtYXQ9UVEsY29sdW1ucz0oa2V5LHN0YXJ0LGVuZCkiKQogICAg ICAgICAgKGxpc3QgImluZGV4OmFycm93czpvdXRnb2luZ3MiICJjb2x1bW5zPSh1aWQsc3RhcnQp IikKICAgICAgICAgIChsaXN0ICJpbmRleDphcnJvd3M6aW5jb21pbmdzIiAiY29sdW1ucz0oZW5k KSIpKSkKCiAgKHRlc3QtY2hlY2sgImNyZWF0ZSBjdXJzb3IgY29uZmlnIHdpdGhvdXQgaW5kZXgi CiAgICAoY29uZmlnLXByZXBhcmUtb3BlbiAnKGF0b21zCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICgodWlkIC4gcmVjb3JkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhc3NvYyAu IGJ5dGVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkpKQogICAgKGxpc3QgKGxpc3Qg J2F0b21zIChsaXN0ICJ0YWJsZTphdG9tcyIpKQogICAgICAgICAgKGxpc3QgJ2F0b21zLWFwcGVu ZCAobGlzdCAidGFibGU6YXRvbXMiICJhcHBlbmQiKSkpKQoKICAodGVzdC1jaGVjayAiY3JlYXRl IGN1cnNvciBjb25maWcgd2l0aCBpbmRleCB3aXRoIGFuZCB3aXRob3V0IHByb2plY3Rpb24iCiAg ICAoY29uZmlnLXByZXBhcmUtb3BlbiAnKGF0b21zCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICgodWlkIC4gcmVjb3JkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhc3NvYyAuIGJ5 dGVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChyZXZlcnNleCAoYXNzb2MpICh1aWQp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJldmVyc2UgKGFzc29jKSAoKSkpKSkKICAg IChsaXN0IChsaXN0ICdhdG9tcyAobGlzdCAidGFibGU6YXRvbXMiKSkKICAgICAgICAgIChsaXN0 ICdhdG9tcy1hcHBlbmQgKGxpc3QgInRhYmxlOmF0b21zIiAiYXBwZW5kIikpCiAgICAgICAgICAo bGlzdCAnYXRvbXMtcmV2ZXJzZXggKGxpc3QgImluZGV4OmF0b21zOnJldmVyc2V4KHVpZCkiKSkK ICAgICAgICAgIChsaXN0ICdhdG9tcy1yZXZlcnNlIChsaXN0ICJpbmRleDphdG9tczpyZXZlcnNl IikpKSkKCiAgOzsgdGVzdCBzdGFyIEFQSQoKICAodGVzdC1jaGVjayAid2lyZWR0aWdlci1vcGVu KiIKICAgIChyZWNlaXZlIChjbnggY3R4KQogICAgICAgICh3aXJlZHRpZ2VyLW9wZW4qICIvdG1w L3d0IgogICAgICAgICAgICAgICAgICAgICAgICAgICcodGFibGUgKChrZXkgLiByZWNvcmQpKSAo KHZhbHVlIC4gaW50ZWdlcikpICgpKSkKICAgICAgKHdpdGgtY254IGNueCAjdHJ1ZSkpCiAgICAj dHJ1ZSkKCiAgKHRlc3QtY2hlY2sgImN1cnNvci1pbnNlcnQqIGFuZCBjdXJzb3Itc2VhcmNoKiIK ICAgIChyZWNlaXZlIChjbnggY3R4KQogICAgICAgICh3aXJlZHRpZ2VyLW9wZW4qICIvdG1wL3d0 IgogICAgICAgICAgICAgICAgICAgICAgICAgICcodGVybXMgKChrZXkgLiByZWNvcmQpKSAoKHZh bHVlIC4gdW5zaWduZWQtaW50ZWdlcikpICgpKSkKICAgICAgKHdpdGgtY254IGNueAogICAgICAg IChsZXQgKChhcHBlbmQgKGNvbnRleHQtcmVmIGN0eCAndGVybXMtYXBwZW5kKSkpCiAgICAgICAg ICAoY3Vyc29yLWluc2VydCogYXBwZW5kICNuaWwgKGxpc3QgNDIpKQogICAgICAgICAgKGN1cnNv ci1pbnNlcnQqIGFwcGVuZCAjbmlsIChsaXN0IDEzMzcpKQogICAgICAgICAgKGN1cnNvci1pbnNl cnQqIGFwcGVuZCAjbmlsIChsaXN0IDE5ODUpKSkpKQogICAgMykKCiAgKHRlc3QtY2hlY2sgImN1 cnNvci1yYW5nZSAwIgogICAgKHJlY2VpdmUgKGNueCBjdHgpICh3aXJlZHRpZ2VyLW9wZW4qICIv dG1wL3d0IiAnKHRhYmxlICgoayAuIHJlY29yZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2IC4gaW50ZWdlcikpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChyZXZl cnNlZCAodikgKGspKSkpKQogICAgICAod2l0aC1jbnggY254CiAgICAgICAgKGN1cnNvci1yYW5n ZSAoY29udGV4dC1yZWYgY3R4ICd0YWJsZS1yZXZlcnNlZCkgNDIpKSkKICAgICcoKSkKCiAgKHRl c3QtY2hlY2sgImN1cnNvci1yYW5nZSAxIgogICAgKHJlY2VpdmUgKGNueCBjdHgpICh3aXJlZHRp Z2VyLW9wZW4qICIvdG1wL3d0IiAnKHRhYmxlICgoayAuIHJlY29yZCkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2IC4gaW50ZWdl cikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKChyZXZlcnNlZCAodikgKGspKSkpKQogICAgICAoY3Vyc29yLWluc2VydCogKGNvbnRl eHQtcmVmIGN0eCAndGFibGUtYXBwZW5kKSAjbmlsICcoMSkpCiAgICAgIChjdXJzb3ItaW5zZXJ0 KiAoY29udGV4dC1yZWYgY3R4ICd0YWJsZS1hcHBlbmQpICNuaWwgJyg0MikpCiAgICAgIChjdXJz b3ItaW5zZXJ0KiAoY29udGV4dC1yZWYgY3R4ICd0YWJsZS1hcHBlbmQpICNuaWwgJyg0MikpCiAg ICAgIChjdXJzb3ItaW5zZXJ0KiAoY29udGV4dC1yZWYgY3R4ICd0YWJsZS1hcHBlbmQpICNuaWwg Jyg0MikpCiAgICAgIChjdXJzb3ItaW5zZXJ0KiAoY29udGV4dC1yZWYgY3R4ICd0YWJsZS1hcHBl bmQpICNuaWwgJygxKSkKICAgICAgKHdpdGgtY254IGNueAogICAgICAgIChjdXJzb3ItcmFuZ2Ug KGNvbnRleHQtcmVmIGN0eCAndGFibGUtcmV2ZXJzZWQpIDQyKSkpCiAgICAnKCg0KSAoMykgKDIp KSkKCiAgKHRlc3QtY2hlY2sgImN1cnNvci1yYW5nZSAyIgogICAgKHJlY2VpdmUgKGNueCBjdHgp ICh3aXJlZHRpZ2VyLW9wZW4qICIvdG1wL3d0IiAnKHRhYmxlICgoayAuIHJlY29yZCkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2 IC4gaW50ZWdlcikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKChyZXZlcnNlZCAodikgKGspKSkpKQogICAgICAoY3Vyc29yLWluc2Vy dCogKGNvbnRleHQtcmVmIGN0eCAndGFibGUtYXBwZW5kKSAjbmlsICcoMSkpCiAgICAgIChjdXJz b3ItaW5zZXJ0KiAoY29udGV4dC1yZWYgY3R4ICd0YWJsZS1hcHBlbmQpICNuaWwgJygxKSkKICAg ICAgKHdpdGgtY254IGNueAogICAgICAgIChjdXJzb3ItcmFuZ2UgKGNvbnRleHQtcmVmIGN0eCAn dGFibGUtcmV2ZXJzZWQpIDQyKSkpCiAgICAnKCkpCgogICh0ZXN0LWNoZWNrICJjdXJzb3ItcmFu Z2UgMyIKICAgIChyZWNlaXZlIChjbnggY3R4KSAod2lyZWR0aWdlci1vcGVuKiAiL3RtcC93dCIg Jyh0YWJsZSAoKGsgLiByZWNvcmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgodiAuIGludGVnZXIpKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocmV2ZXJzZWQgKHYp IChrKSkpKSkKICAgICAgKGN1cnNvci1pbnNlcnQqIChjb250ZXh0LXJlZiBjdHggJ3RhYmxlLWFw cGVuZCkgI25pbCAnKDEpKQogICAgICAoY3Vyc29yLWluc2VydCogKGNvbnRleHQtcmVmIGN0eCAn dGFibGUtYXBwZW5kKSAjbmlsICcoNDIpKQogICAgICAoY3Vyc29yLWluc2VydCogKGNvbnRleHQt cmVmIGN0eCAndGFibGUtYXBwZW5kKSAjbmlsICcoMSkpCiAgICAgICh3aXRoLWNueCBjbngKICAg ICAgICAoY3Vyc29yLXJhbmdlIChjb250ZXh0LXJlZiBjdHggJ3RhYmxlLXJldmVyc2VkKSA0Mikp KQogICAgJygoMikpKQoKICAodGVzdC1jaGVjayAiY3Vyc29yLXJhbmdlLXByZWZpeCIKICAgIChy ZWNlaXZlIChjbnggY3R4KQogICAgICAgICh3aXJlZHRpZ2VyLW9wZW4qICIvdG1wL3d0IgogICAg ICAgICAgICAgICAgICAgICAgICAgICcodGFibGUgKChhIC4gaW50ZWdlcikgKGIgLiBpbnRlZ2Vy KSkgKChjIC4gaW50ZWdlcikpICgpKSkKICAgICAgKGxldCAoKGN1cnNvciAoY29udGV4dC1yZWYg Y3R4ICd0YWJsZSkpKQogICAgICAgIChjdXJzb3ItaW5zZXJ0KiBjdXJzb3IgKGxpc3QgMCAwKSAo bGlzdCAwKSkKICAgICAgICAoY3Vyc29yLWluc2VydCogY3Vyc29yIChsaXN0IDEgMSkgKGxpc3Qg MSkpCiAgICAgICAgKGN1cnNvci1pbnNlcnQqIGN1cnNvciAobGlzdCAxIDIpIChsaXN0IDEpKQog ICAgICAgIChjdXJzb3ItaW5zZXJ0KiBjdXJzb3IgKGxpc3QgMiAwKSAobGlzdCAyKSkKICAgICAg ICAod2l0aC1jbnggY254CiAgICAgICAgICAoY3Vyc29yLXJhbmdlLXByZWZpeCBjdXJzb3IgMSAw KSkpKQogICAgJygoKDEgMikgMSkKICAgICAgKCgxIDEpIDEpKSkKCiAgKHRlc3QtY2hlY2sgImN1 cnNvci1yYW5nZS1wcmVmaXggMiIKICAgIChyZWNlaXZlIChjbnggY3R4KQogICAgICAgICh3aXJl ZHRpZ2VyLW9wZW4qICIvdG1wL3d0IgogICAgICAgICAgICAgICAgICAgICAgICAgICcodGFibGUg KChhIC4gaW50ZWdlcikgKGIgLiBpbnRlZ2VyKSkgKChjIC4gaW50ZWdlcikpICgpKSkKICAgICAg KGxldCAoKGN1cnNvciAoY29udGV4dC1yZWYgY3R4ICd0YWJsZSkpKQogICAgICAgIChjdXJzb3It aW5zZXJ0KiBjdXJzb3IgKGxpc3QgMSAxKSAobGlzdCAxKSkKICAgICAgICAoY3Vyc29yLWluc2Vy dCogY3Vyc29yIChsaXN0IDEgMikgKGxpc3QgMSkpCiAgICAgICAgKGN1cnNvci1pbnNlcnQqIGN1 cnNvciAobGlzdCAyIDApIChsaXN0IDIpKQogICAgICAgICh3aXRoLWNueCBjbngKICAgICAgICAg IChjdXJzb3ItcmFuZ2UtcHJlZml4IGN1cnNvciAxIDApKSkpCiAgICAnKCgoMSAyKSAxKQogICAg ICAoKDEgMSkgMSkpKQoKICAodGVzdC1jaGVjayAiY3Vyc29yLXJhbmdlLXByZWZpeCAzIgogICAg KHJlY2VpdmUgKGNueCBjdHgpCiAgICAgICAgKHdpcmVkdGlnZXItb3BlbiogIi90bXAvd3QiCiAg ICAgICAgICAgICAgICAgICAgICAgICAgJyh0YWJsZSAoKGEgLiBpbnRlZ2VyKSAoYiAuIGludGVn ZXIpKSAoKGMgLiBpbnRlZ2VyKSkgKCkpKQogICAgICAobGV0ICgoY3Vyc29yIChjb250ZXh0LXJl ZiBjdHggJ3RhYmxlKSkpCiAgICAgICAgKGN1cnNvci1pbnNlcnQqIGN1cnNvciAobGlzdCAyIDAp IChsaXN0IDIpKQogICAgICAgICh3aXRoLWNueCBjbngKICAgICAgICAgIChjdXJzb3ItcmFuZ2Ut cHJlZml4IGN1cnNvciAxIDApKSkpCiAgICAnKCkpCgogICh0ZXN0LWNoZWNrICJjdXJzb3ItcmFu Z2UtcHJlZml4IDMiCiAgICAocmVjZWl2ZSAoY254IGN0eCkKICAgICAgICAod2lyZWR0aWdlci1v cGVuKiAiL3RtcC93dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAnKHRhYmxlICgoYSAuIGlu dGVnZXIpIChiIC4gaW50ZWdlcikpICgoYyAuIGludGVnZXIpKSAoKSkpCiAgICAgIChsZXQgKChj dXJzb3IgKGNvbnRleHQtcmVmIGN0eCAndGFibGUpKSkKICAgICAgICAoY3Vyc29yLWluc2VydCog Y3Vyc29yIChsaXN0IDAgMCkgKGxpc3QgMCkpCiAgICAgICAgKHdpdGgtY254IGNueAogICAgICAg ICAgKGN1cnNvci1yYW5nZS1wcmVmaXggY3Vyc29yIDEgMCkpKSkKICAgICcoKSkKCiAgKHRlc3Qt Y2hlY2sgImN1cnNvci1yYW5nZS1wcmVmaXggNCIKICAgIChyZWNlaXZlIChjbnggY3R4KQogICAg ICAgICh3aXJlZHRpZ2VyLW9wZW4qICIvdG1wL3d0IgogICAgICAgICAgICAgICAgICAgICAgICAg ICcodGFibGUgKChhIC4gaW50ZWdlcikgKGIgLiBpbnRlZ2VyKSkgKChjIC4gaW50ZWdlcikpICgp KSkKICAgICAgKGxldCAoKGN1cnNvciAoY29udGV4dC1yZWYgY3R4ICd0YWJsZSkpKQogICAgICAg IChjdXJzb3ItaW5zZXJ0KiBjdXJzb3IgKGxpc3QgMCAwKSAobGlzdCAwKSkKICAgICAgICAoY3Vy c29yLWluc2VydCogY3Vyc29yIChsaXN0IDEgMCkgKGxpc3QgMCkpCiAgICAgICAgKGN1cnNvci1p bnNlcnQqIGN1cnNvciAobGlzdCAxIDEpIChsaXN0IDEpKQogICAgICAgIChjdXJzb3ItaW5zZXJ0 KiBjdXJzb3IgKGxpc3QgMSAyKSAobGlzdCAxKSkKICAgICAgICAoY3Vyc29yLWluc2VydCogY3Vy c29yIChsaXN0IDIgMCkgKGxpc3QgMikpCiAgICAgICAgKHdpdGgtY254IGNueAogICAgICAgICAg KGN1cnNvci1yYW5nZS1wcmVmaXggY3Vyc29yIDEgMCkpKSkKICAgICcoKCgxIDIpIDEpCiAgICAg ICgoMSAxKSAxKQogICAgICAoKDEgMCkgMCkpKQoKICAodGVzdC1jaGVjayAiY3Vyc29yLXJhbmdl LXByZWZpeCA1IgogICAgKHJlY2VpdmUgKGNueCBjdHgpCiAgICAgICAgKHdpcmVkdGlnZXItb3Bl biogIi90bXAvd3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyh0YWJsZSAoKGEgLiBpbnRl Z2VyKSAoYiAuIGludGVnZXIpKSAoKGMgLiBpbnRlZ2VyKSkgKCkpKQogICAgICAobGV0ICgoY3Vy c29yIChjb250ZXh0LXJlZiBjdHggJ3RhYmxlKSkpCiAgICAgICAgKGN1cnNvci1pbnNlcnQqIGN1 cnNvciAobGlzdCAwIDApIChsaXN0IDApKQogICAgICAgIChjdXJzb3ItaW5zZXJ0KiBjdXJzb3Ig KGxpc3QgMSAwKSAobGlzdCAwKSkKICAgICAgICAoY3Vyc29yLWluc2VydCogY3Vyc29yIChsaXN0 IDEgMSkgKGxpc3QgMSkpCiAgICAgICAgKGN1cnNvci1pbnNlcnQqIGN1cnNvciAobGlzdCAxIDIp IChsaXN0IDEpKQogICAgICAgICh3aXRoLWNueCBjbngKICAgICAgICAgIChjdXJzb3ItcmFuZ2Ut cHJlZml4IGN1cnNvciAxIDApKSkpCiAgICAnKCgoMSAyKSAxKQogICAgICAoKDEgMSkgMSkKICAg ICAgKCgxIDApIDApKSkKCiAgKHRlc3QtY2hlY2sgImN1cnNvciB3aXRoIGVtcHR5IHJhbmdlLXBy ZWZpeCIKICAgIChyZWNlaXZlIChjbnggY3R4KQogICAgICAgICh3aXJlZHRpZ2VyLW9wZW4qICIv dG1wL3d0IgogICAgICAgICAgICAgICAgICAgICAgICAgICcodGFibGUgKChhIC4gaW50ZWdlcikg KGIgLiBpbnRlZ2VyKSkgKChjIC4gaW50ZWdlcikpICgpKSkKICAgICAgKGxldCAoKGN1cnNvciAo Y29udGV4dC1yZWYgY3R4ICd0YWJsZSkpKQogICAgICAgICh3aXRoLWNueCBjbngKICAgICAgICAg IChjdXJzb3ItcmFuZ2UtcHJlZml4IGN1cnNvciAxIDApKSkpCiAgICAnKCkpCiAgKHRlc3QtY2hl Y2sgImN1cnNvci12YWx1ZS1yZWYqIG9uIGVtcHR5IHRhYmxlIgogICAgKHJlY2VpdmUgKGNueCBj dHgpCiAgICAgICAgKHdpcmVkdGlnZXItb3BlbiogIi90bXAvd3QiCiAgICAgICAgICAgICAgICAg ICAgICAgICAgJyh0YWJsZSAoKGEgLiBpbnRlZ2VyKSAoYiAuIGludGVnZXIpKSAoKGMgLiBpbnRl Z2VyKSkgKCkpKQogICAgICAobGV0ICgoY3Vyc29yIChjb250ZXh0LXJlZiBjdHggJ3RhYmxlKSkp CiAgICAgICAgKHdpdGgtY254IGNueAogICAgICAgICAgKGNhdGNoICd3aXJlZHRpZ2VyCiAgICAg ICAgICAgIChsYW1iZGEgKCkKICAgICAgICAgICAgICAoY3Vyc29yLXZhbHVlLXJlZiogY3Vyc29y IDQyKSkKICAgICAgICAgICAgKGxhbWJkYSAoa2V5IC4gYXJncykKICAgICAgICAgICAgICAjdHJ1 ZSkpKSkpCiAgICAjdHJ1ZSkKCiAgKHRlc3QtY2hlY2sgIndpdGgtY29udGV4dCIKICAgIChsZXQg KChlbnYgKGVudi1vcGVuICIvdG1wL3d0IikpKQogICAgICAoZW52LWNvbmZpZy1hZGQgZW52ICco Y291bnRlciAoKG5hbWUgLiBzdHJpbmcpKSAoKHZhbHVlIC4gaW50ZWdlcikpICgpKSkKICAgICAg KGVudi1jcmVhdGUgZW52KQogICAgICAod2l0aC1jbnggKGVudi1jb25uZWN0aW9uIGVudikKICAg ICAgICAod2l0aC1jb250ZXh0IGVudgogICAgICAgICAgKGNhbGwtd2l0aC1jdXJzb3IgJ2NvdW50 ZXIKICAgICAgICAgICAgKGxhbWJkYSAoY3Vyc29yKQogICAgICAgICAgICAgIChjdXJzb3ItaW5z ZXJ0KiBjdXJzb3IgKGxpc3QgImNvdW50ZXIiKSAobGlzdCA0MikpKSkpCiAgICAgICAgKHdpdGgt Y29udGV4dCBlbnYKICAgICAgICAgIChjYWxsLXdpdGgtY3Vyc29yICdjb3VudGVyCiAgICAgICAg ICAgIChsYW1iZGEgKGN1cnNvcikKICAgICAgICAgICAgICAoY3Vyc29yLXZhbHVlLXJlZiogY3Vy c29yICJjb3VudGVyIikpKSkpKQogICAgJyg0MikpCiAgKQo= --=_53e918395ee183beed6e0635d3fce0eb Content-Transfer-Encoding: base64 Content-Type: text/plain; name=wsh.scm Content-Disposition: attachment; filename=wsh.scm; size=13267 KGRlZmluZS1tb2R1bGUgKHdzaCkpCgoodXNlLW1vZHVsZXMgKGljZS05IHJlY2VpdmUpKQoodXNl LW1vZHVsZXMgKHNyZmkgc3JmaS0yNikpCih1c2UtbW9kdWxlcyAoc3JmaSBzcmZpLTEpKQoodXNl LW1vZHVsZXMgKGljZS05IG1hdGNoKSkKCih1c2UtbW9kdWxlcyAod2lyZWR0aWdlcnopKQoodXNl LW1vZHVsZXMgKHdpcmVkdGlnZXIpKQoodXNlLW1vZHVsZXMgKHRleHQpKQoKCihkZWZpbmUtcHVi bGljICp3c2gqICcoKHVybHMKICAgICAgICAgICAgICAgICAgICAgICAgKCh1aWQgLiByZWNvcmQp KQogICAgICAgICAgICAgICAgICAgICAgICAoKHVybCAuIHN0cmluZykpCiAgICAgICAgICAgICAg ICAgICAgICAgICgpKQogICAgICAgICAgICAgICAgICAgICAgICh0ZXJtcwogICAgICAgICAgICAg ICAgICAgICAgICAoKHVpZCAuIHJlY29yZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICgoc3Ry aW5nIC4gc3RyaW5nKSkKICAgICAgICAgICAgICAgICAgICAgICAgKChpbnZlcnNlIChzdHJpbmcp ICh1aWQpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKGludmVydGVkLWluZGV4CiAgICAgICAg ICAgICAgICAgICAgICAgICgodGVybSAuIHVuc2lnbmVkLWludGVnZXIpCiAgICAgICAgICAgICAg ICAgICAgICAgICAodXJsLXVpZCAuIHVuc2lnbmVkLWludGVnZXIpCiAgICAgICAgICAgICAgICAg ICAgICAgICAocG9zaXRpb24gLiB1bnNpZ25lZC1pbnRlZ2VyKSkKICAgICAgICAgICAgICAgICAg ICAgICAgKChub3RoaW5nIC4gYnl0ZXMpKQogICAgICAgICAgICAgICAgICAgICAgICAoKHBvc2l0 aW9ucyAodXJsLXVpZCBwb3NpdGlvbikgKHRlcm0pKSkpKSkKCihkZWZpbmUgKGluZGV4LXRlcm0t d2l0aC1wb3NpdGlvbiB1cmwtdWlkKQogIChtYXRjaC1sYW1iZGEKICAgICgodGVybSBwb3NpdGlv bikKICAgICAobGV0ICgodWlkIDs7IGdldCBvciBjcmVhdGUgdGVybQogICAgICAgICAgICAoY2Fs bC13aXRoLWN1cnNvciAndGVybXMtaW52ZXJzZQogICAgICAgICAgICAgIChsYW1iZGEgKGN1cnNv cikKICAgICAgICAgICAgICAgIChjYXRjaCAnd2lyZWR0aWdlcgogICAgICAgICAgICAgICAgICAo bGFtYmRhICgpIChjYXIgKGN1cnNvci12YWx1ZS1yZWYqIGN1cnNvciB0ZXJtKSkpCiAgICAgICAg ICAgICAgICAgIChsYW1iZGEgXyAoY2FsbC13aXRoLWN1cnNvciAndGVybXMtYXBwZW5kCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGN1cnNvcikKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY3Vyc29yLWluc2VydCogY3Vyc29yICcoKSAobGlzdCB0ZXJtKSkp KSkpKSkpKQogICAgICAgKGNhbGwtd2l0aC1jdXJzb3IgJ2ludmVydGVkLWluZGV4CiAgICAgICAg IChsYW1iZGEgKGN1cnNvcikKICAgICAgICAgICAoY3Vyc29yLWluc2VydCogY3Vyc29yIChsaXN0 IHVpZCB1cmwtdWlkIHBvc2l0aW9uKSAobGlzdCAjdnU4KCkpKSkpKSkpKQoKKGRlZmluZS1wdWJs aWMgKGluZGV4IHVybCBodG1sKQogIChjYWxsLXdpdGgtY3Vyc29yICd1cmxzLWFwcGVuZAogICAg KGxhbWJkYSAoY3Vyc29yKQogICAgICA7OyBpbnNlcnQgdXJsIGFuZCByZXRyaWV2ZSBpdHMgdWlk CiAgICAgIChsZXQgKCh1cmwtdWlkIChjdXJzb3ItaW5zZXJ0KiBjdXJzb3IgJygpIChsaXN0IHVy bCkpKSkKICAgICAgICA7OyBjb252ZXJ0IGh0bWwgdG8gdG9rZW5zIGFuZCBhZGQgcG9zaXRpb25z CiAgICAgICAgKGxldCogKCh0ZXJtcyAoaHRtbC0+dG9rZW5zIGh0bWwpKQogICAgICAgICAgICAg ICAodGVybXMrcG9zaXRpb25zICh6aXAgdGVybXMgKGlvdGEgKGxlbmd0aCB0ZXJtcykpKSkpCiAg ICAgICAgICAoZm9yLWVhY2ggKGluZGV4LXRlcm0td2l0aC1wb3NpdGlvbiB1cmwtdWlkKSB0ZXJt cytwb3NpdGlvbnMpKSkpKSkKCgooZGVmaW5lICh1aWQtPnVybCB1aWQpCiAgKGNhbGwtd2l0aC1j dXJzb3IgJ3VybHMKICAgIChsYW1iZGEgKGN1cnNvcikKICAgICAgKGNhciAoY3Vyc29yLXZhbHVl LXJlZiogY3Vyc29yIHVpZCkpKSkpCgooZGVmaW5lICh0ZXJtLXVpZCB0ZXJtKQogIChjYXRjaCAn d2lyZWR0aWdlcgogICAgKGxhbWJkYSgpIChjYWxsLXdpdGgtY3Vyc29yICd0ZXJtcy1pbnZlcnNl CiAgICAgICAgICAgICAgICAobGFtYmRhIChjdXJzb3IpCiAgICAgICAgICAgICAgICAgIChjYXIg KGN1cnNvci12YWx1ZS1yZWYqIGN1cnNvciB0ZXJtKSkpKSkKICAgIChsYW1iZGEgKGtleSAuIGFy Z3MpICNmKQogICAgI2YpKQoKKGRlZmluZSAoc2VhcmNoIHRlcm0pCiAgKGxldCAoKHVpZCAodGVy bS11aWQgdGVybSkpKQogICAgKGNhbGwtd2l0aC1jdXJzb3IgJ2ludmVydGVkLWluZGV4CiAgICAg IChsYW1iZGEgKGN1cnNvcikKICAgICAgICA7OyByZXR1cm4gZG9jdW1lbnQtaWQgYW5kIHBvc2l0 aW9uCiAgICAgICAgKGRlbGV0ZS1kdXBsaWNhdGVzIChtYXAgY2FkYXIgKGN1cnNvci1yYW5nZS1w cmVmaXggY3Vyc29yIHVpZCAwIDApKSkpKSkpCgooZGVmaW5lLXB1YmxpYyAoZGVidWcpCiAgKGNh bGwtd2l0aC1jdXJzb3IgJ2ludmVydGVkLWluZGV4CiAgICAobGFtYmRhIChjdXJzb3IpCiAgICAg IChjdXJzb3ItZGVidWcgY3Vyc29yKSkpKQoKKGRlZmluZS1wdWJsaWMgKHNlYXJjaC90ZXJtIHRl cm0pCiAgKGNvbnMgJ3Rlcm0gdGVybSkpCgooZGVmaW5lLXB1YmxpYyAoc2VhcmNoL2FuZCAuIGFy Z3MpCiAgKGNvbnMgJ2FuZCBhcmdzKSkKCihkZWZpbmUtcHVibGljIChzZWFyY2gvb3IgLiBhcmdz KQogIChjb25zICdvciBhcmdzKSkKCihkZWZpbmUtcHVibGljIChzZWFyY2gvbm90IGFyZykKICAo Y29ucyAnbm90IGFyZykpCgooZGVmaW5lIHRydWU/IChjdXQgZXE/ICN0IDw+KSkKCihkZWZpbmUg KHNlYXJjaC9tYWtlLXByZWRpY2F0ZSBhcmcpCiAgKG1hdGNoIGFyZwogICAgKCgndGVybSAuIHRl cm0pIChsZXQgKCh0ZXJtaWQgKHRlcm0tdWlkIHRlcm0pKSkKICAgICAgICAgICAgICAgICAgICAg IChsYW1iZGEgKGRvY2lkKQogICAgICAgICAgICAgICAgICAgICAgICAoY2FsbC13aXRoLWN1cnNv ciAnaW52ZXJ0ZWQtaW5kZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChjdXJz b3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm90ICh6ZXJvPyAoY3Vyc29yLWNvdW50 LXByZWZpeCBjdXJzb3IgdGVybWlkIGRvY2lkIDApKSkpKSkpKQogICAgKCgnYW5kIC4gYXJncykg KGxldCAoKHByZWRpY2F0ZXMgKG1hcCAoY3V0IHNlYXJjaC9tYWtlLXByZWRpY2F0ZSA8PikgYXJn cykpKQogICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChkb2NpZCkKICAgICAgICAgICAgICAg ICAgICAgICAoZXZlcnkgdHJ1ZT8gKG1hcCAoY3V0IDw+IGRvY2lkKSBwcmVkaWNhdGVzKSkpKSkK ICAgICgoJ29yIC4gYXJncykgKGxldCAoKHByZWRpY2F0ZXMgKG1hcCAoY3V0IHNlYXJjaC9tYWtl LXByZWRpY2F0ZSA8PikgYXJncykpKQogICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGRvY2lk KQogICAgICAgICAgICAgICAgICAgICAgKGFueSB0cnVlPyAobWFwIChjdXQgPD4gZG9jaWQpIHBy ZWRpY2F0ZXMpKSkpKSkpCgooZGVmaW5lIChzZWFyY2gvdm0gcXVlcnkpCiAgKG1hdGNoIHF1ZXJ5 CiAgICAoKCd0ZXJtIC4gdGVybSkgKHNlYXJjaCB0ZXJtKSkKICAgICgoJ2FuZCAuIGFyZ3MpCiAg ICAgOzsgc2VwYXJhdGUgJ25vdCcgZm9yIG90aGVycwogICAgIChsZXQqICgobm90cyAoZmlsdGVy IChsYW1iZGEgKGFyZykgKGVxPyAoY2FyIGFyZykgJ25vdCkpIGFyZ3MpKQogICAgICAgICAgICAo b3RoZXJzIChsc2V0LWRpZmZlcmVuY2UgZXF1YWw/IGFyZ3Mgbm90cykpKQogICAgICAgOzsgcmV0 cmlldmUgaGl0cyBiZWZvcmUgYXBwbHlpbmcgJ25vdCcKICAgICAgIChsZXQqICgobm90cyAobWFw IHNlYXJjaC92bSBub3RzKSkKICAgICAgICAgICAgICAoaGl0cyAoYXBwbHkgbHNldC1pbnRlcnNl Y3Rpb24gKGNvbnMgZXE/IChtYXAgc2VhcmNoL3ZtIG90aGVycykpKSkpCiAgICAgICAgIChsZXQg bG9vcCAoKG5vdHMgbm90cykKICAgICAgICAgICAgICAgICAgICAoaGl0cyBoaXRzKSkKICAgICAg ICAgICAoY29uZAogICAgICAgICAgICAoKG51bGw/IG5vdHMpIGhpdHMpCiAgICAgICAgICAgICgo bnVsbD8gaGl0cykgJygpKQogICAgICAgICAgICAoZWxzZSAobG9vcCAoY2RyIG5vdHMpICgoY2Fy IG5vdHMpIGhpdHMpKSkpKSkpKQogICAgKCgnb3IgLiBhcmdzKSAoZGVsZXRlLWR1cGxpY2F0ZXMg KGFwcGVuZC1tYXAgc2VhcmNoL3ZtIGFyZ3MpKSkKICAgICgoJ25vdCAuIGFyZykgKGxhbWJkYSAo aGl0cykKICAgICAgICAgICAgICAgICAgICAobHNldC1kaWZmZXJlbmNlIGVxPyBoaXRzIChzZWFy Y2gvdm0gYXJnKSkpKSkpCgooZGVmaW5lIChmbGF0dGVuIGxzdCkKICAobGV0IGxvb3AgKChsc3Qg bHN0KQogICAgICAgICAgICAgKG91dCAnKCkpKQogICAgKGlmIChsaXN0PyBsc3QpCiAgICAgICAg KGlmIChudWxsPyBsc3QpCiAgICAgICAgICAgIG91dAogICAgICAgICAgICAoaWYgKGxpc3Q/IChj YXIgbHN0KSkKICAgICAgICAgICAgICAgIChsb29wIChjZHIgbHN0KSAoYXBwZW5kIChmbGF0dGVu IChjYXIgbHN0KSkgb3V0KSkKICAgICAgICAgICAgICAgIChsb29wIChjZHIgbHN0KSAoY29ucyAo Y2FyIGxzdCkgb3V0KSkpKQogICAgICAgIGxzdCkpKQoKKGRlZmluZSAocXVlcnktdGVybXMlIHF1 ZXJ5KQogIChtYXRjaCBxdWVyeQogICAgKCgndGVybSAuIHRlcm0pICh0ZXJtLXVpZCB0ZXJtKSkK ICAgICgoJ2FuZCAuIGFyZ3MpIChtYXAgcXVlcnktdGVybXMlIGFyZ3MpKQogICAgKCgnb3IgLiBh cmdzKSAobWFwIHF1ZXJ5LXRlcm1zJSBhcmdzKSkKICAgICgoJ25vdCAuIGFyZykgJygpKSkpCgoo ZGVmaW5lIChxdWVyeS10ZXJtcyBxdWVyeSkKICAiY29udmVydCBRVUVSWSB0byBhIGxpc3Qgb2Yg cmVsZXZhbnQgdGVybXMgZm9yIGNvbXB1dGluZyB0aGUgc2NvcmUiCiAgKGZsYXR0ZW4gKHF1ZXJ5 LXRlcm1zJSBxdWVyeSkpKQoKKGRlZmluZSAodGVybS1mcmVxdWVuY3kgdGVybS1pZCBkb2MtaWQp CiAgImZyZXF1ZW5jeSBvZiBURVJNLUlEIGluIERPQy1JRCIKICAoY2FsbC13aXRoLWN1cnNvciAn aW52ZXJ0ZWQtaW5kZXgKICAgIChsYW1iZGEgKGN1cnNvcikKICAgICAgKGN1cnNvci1jb3VudC1w cmVmaXggY3Vyc29yIHRlcm0taWQgZG9jLWlkIDApKSkpCgooZGVmaW5lIChzY29yZSB0ZXJtLWlk cyBkb2MtaWQpCiAgInNjb3JlIERPQy1JRCBhZ2FpbnN0IFRFUk0tSURTIgogIChhcHBseSArICht YXAgKGN1dCB0ZXJtLWZyZXF1ZW5jeSA8PiBkb2MtaWQpIHRlcm0taWRzKSkpCgooZGVmaW5lLXB1 YmxpYyAoc2VhcmNoKiBxdWVyeSkKICAicmV0cmlldmUgc29ydGVkIHVybHMgZm9yIFFVRVJZIgog IDs7IGNvbXB1dGUgaGl0cyBmb3IgcXVlcnkKICAobGV0ICgoaGl0cyAoc2VhcmNoL3ZtIHF1ZXJ5 KSkpCiAgICA7OyByZXRyaWV2ZSByZWxldmFudCBxdWVyeSB0ZXJtcwogICAgKGxldCAoKHRlcm0t aWRzIChxdWVyeS10ZXJtcyBxdWVyeSkpKQogICAgICA7OyBzY29yZSBldmVyeSBoaXRzIGFnYWlu c3QgdGVybXMKICAgICAgKGxldCAoKHNjb3JlcyAobWFwIChjdXQgc2NvcmUgdGVybS1pZHMgPD4p IGhpdHMpKSkKICAgICAgICAobGV0ICgodXJscyAobWFwIHVpZC0+dXJsIGhpdHMpKSkKICAgICAg ICAgIChzb3J0IChtYXAgY29ucyB1cmxzIHNjb3JlcykgKGxhbWJkYSAoYSBiKSAoPiAoY2RyIGEp IChjZHIgYikpKSApKSkpKSkKCjs7Owo7OzsgdGVzdHMKOzs7CgoodXNlLW1vZHVsZXMgKHRlc3Qt Y2hlY2spKQoKKHdoZW4gKG9yIChnZXRlbnYgIkNIRUNLIikgKGdldGVudiAiQ0hFQ0tfV1NIIikp CiAgKGZvcm1hdCAjdCAiKiBjaGVjayB3c2hcbiIpCiAgCiAgKHRlc3QtY2hlY2sgImluZGV4Igog ICAgKHdpdGgtZW52IChlbnYtb3BlbiogIi90bXAvd3QiICp3c2gqKQogICAgICAobm90IChudWxs PyAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgImZvbyBiYXIgYmF6IikpKSkKICAgICN0KQoK ICAodGVzdC1jaGVjayAicXVlcnktdGVybXMgMSIKICAgICh3aXRoLWVudiAoZW52LW9wZW4qICIv dG1wL3d0IiAqd3NoKikKICAgICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgImRhdGFi YXNlIikKICAgICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgInNwYW0iKQogICAgICAg IChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAiZWdnIikKICAgICAgICAoaW5kZXggImh0dHA6 Ly9leGFtcGxlLm5ldCIgInBvc3RncmVzcWwiKQogICAgICAgIChpbmRleCAiaHR0cDovL2V4YW1w bGUubmV0IiAicGdzcWwiKQogICAgICAgIChxdWVyeS10ZXJtcyAoc2VhcmNoL2FuZCAoc2VhcmNo L3Rlcm0gImRhdGFiYXNlIikgKHNlYXJjaC90ZXJtICJzcGFtIikpKSkKICAgICcoMiAxKSkKCiAg KHRlc3QtY2hlY2sgInF1ZXJ5LXRlcm1zIDIiCiAgICAod2l0aC1lbnYgKGVudi1vcGVuKiAiL3Rt cC93dCIgKndzaCopCiAgICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAiZGF0YWJhc2Ui KQogICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgInNwYW0iKQogICAgICAoaW5kZXgg Imh0dHA6Ly9leGFtcGxlLm5ldCIgImVnZyIpCiAgICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUu bmV0IiAicG9zdGdyZXNxbCIpCiAgICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAicGdz cWwiKQogICAgICAocXVlcnktdGVybXMgKHNlYXJjaC9hbmQgKHNlYXJjaC90ZXJtICJkYXRhYmFz ZSIpIChzZWFyY2gvdGVybSAic3BhbSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo c2VhcmNoL29yIChzZWFyY2gvdGVybSAicGdzcWwiKSAoc2VhcmNoL3Rlcm0gInBvc3RncmVzcWwi KSkpKSkKICAgICcoNCA1IDIgMSkpCgogICh0ZXN0LWNoZWNrICJxdWVyeS10ZXJtcyAzIgogICAg KHdpdGgtZW52IChlbnYtb3BlbiogIi90bXAvd3QiICp3c2gqKQogICAgICAoaW5kZXggImh0dHA6 Ly9leGFtcGxlLm5ldCIgImRhdGFiYXNlIikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5u ZXQiICJzcGFtIikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJlZ2ciKQogICAg ICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgInBvc3RncmVzcWwiKQogICAgICAoaW5kZXgg Imh0dHA6Ly9leGFtcGxlLm5ldCIgInBnc3FsIikKICAgICAgKHF1ZXJ5LXRlcm1zIChzZWFyY2gv YW5kIChzZWFyY2gvdGVybSAiZGF0YWJhc2UiKSAoc2VhcmNoL3Rlcm0gInNwYW0iKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaC9vciAoc2VhcmNoL3Rlcm0gInBnc3FsIikg KHNlYXJjaC90ZXJtICJwb3N0Z3Jlc3FsIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc2VhcmNoL25vdCAoc2VhcmNoL3Rlcm0gInNwYW0iKSkpKSkKICAgICcoNCA1IDIgMSkpCgog ICh0ZXN0LWNoZWNrICJzZWFyY2gvdm0gYW5kL29yIgogICAgKHdpdGgtZW52IChlbnYtb3Blbiog Ii90bXAvd3QiICp3c2gqKQogICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgImRhdGFi YXNlICYgcG9zdGdyZXNxbCIpCiAgICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAic3Bh bSAmIHBnc3FsIikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJzcGFtICYgZWdn IikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIGVnZyIpCiAg ICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAiZGF0YWJhc2UgJiBwZ3NxbCIpCiAgICAg IChzZWFyY2gvdm0gKHNlYXJjaC9hbmQgKHNlYXJjaC90ZXJtICJkYXRhYmFzZSIpIChzZWFyY2gv b3IgKHNlYXJjaC90ZXJtICJwb3N0Z3Jlc3FsIikKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VhcmNoL3Rlcm0gInBnc3Fs IikpKSkpCiAgICAnKDUgMSkpCgogICh0ZXN0LWNoZWNrICJzZWFyY2gvdm0gb3IgYXZvaWQgZHVw bGljYXRlcyIKICAgICh3aXRoLWVudiAoZW52LW9wZW4qICIvdG1wL3d0IiAqd3NoKikKICAgICAg KGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSIpCiAgICAgIChpbmRleCAiaHR0 cDovL2V4YW1wbGUubmV0IiAid2lyZWR0aWdlciAmIGRhdGFiYXNlIikKICAgICAgKGluZGV4ICJo dHRwOi8vZXhhbXBsZS5uZXQiICJ3aXJlZHRpZ2VyIikKICAgICAgCiAgICAgIChzZWFyY2gvdm0g KHNlYXJjaC9vciAoc2VhcmNoL3Rlcm0gImRhdGFiYXNlIikKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzZWFyY2gvdGVybSAid2lyZWR0aWdlciIpKSkpCiAgICAnKDIgMSAzKSkKCiAgKHRl c3QtY2hlY2sgInNlYXJjaC92bSBhdm9pZCBkdXBsaWNhdGVzIgogICAgKHdpdGgtZW52IChlbnYt b3BlbiogIi90bXAvd3QiICp3c2gqKQogICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIg IndpcmVkdGlnZXIgJiB3aXJlZHRpZ2VyIikKICAgICAgKHNlYXJjaC92bSAoc2VhcmNoL3Rlcm0g IndpcmVkdGlnZXIiKSkpCiAgICAnKDEpKQoKICAodGVzdC1jaGVjayAic2VhcmNoL3ZtIGFuZC9u b3QiCiAgICAod2l0aC1lbnYgKGVudi1vcGVuKiAiL3RtcC93dCIgKndzaCopCiAgICAgIChpbmRl eCAiaHR0cDovL2V4YW1wbGUubmV0IiAiZGF0YWJhc2UgJiBwb3N0Z3Jlc3FsIikKICAgICAgKGlu ZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJzcGFtICYgcGdzcWwiKQogICAgICAoaW5kZXggImh0 dHA6Ly9leGFtcGxlLm5ldCIgInNwYW0gJiBlZ2ciKQogICAgICAoaW5kZXggImh0dHA6Ly9leGFt cGxlLm5ldCIgImRhdGFiYXNlICYgZWdnIikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5u ZXQiICJkYXRhYmFzZSAmIHBnc3FsIikKICAgICAgKHNlYXJjaC92bSAoc2VhcmNoL2FuZCAoc2Vh cmNoL3Rlcm0gImRhdGFiYXNlIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VhcmNo L25vdCAoc2VhcmNoL3Rlcm0gImVnZyIpKSkpKQogICcoNSAxKSkKCiAgKHRlc3QtY2hlY2sgInNl YXJjaC92bSBhbmQvbm90L2FuZCIKICAgICh3aXRoLWVudiAoZW52LW9wZW4qICIvdG1wL3d0IiAq d3NoKikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIGVnZyIp CiAgICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAiZGF0YWJhc2UgJiBzcGFtICYgZWdn IikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIHNwYW0gJiBl Z2ciKQogICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgImRhdGFiYXNlICYgZWdnIikK ICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIHNwYW0iKQogICAg ICAoc2VhcmNoL3ZtIChzZWFyY2gvYW5kIChzZWFyY2gvdGVybSAiZGF0YWJhc2UiKSAoc2VhcmNo L25vdCAoc2VhcmNoL2FuZCAoc2VhcmNoL3Rlcm0gImVnZyIpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzZWFyY2gvdGVybSAic3BhbSIpKSkpKSkKICAgICcoNSA0IDEpKQoKICAodGVzdC1jaGVjayAi c2VhcmNoL3ZtIGFuZC9ub3QiCiAgICAod2l0aC1lbnYgKGVudi1vcGVuKiAiL3RtcC93dCIgKndz aCopCiAgICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAiZGF0YWJhc2UgJiBwb3N0Z3Jl c3FsIikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJzcGFtICYgcGdzcWwiKQog ICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgInNwYW0gJiBlZ2ciKQogICAgICAoaW5k ZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgImRhdGFiYXNlICYgZWdnIikKICAgICAgKGluZGV4ICJo dHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIHBnc3FsIikKICAgICAgKHNlYXJjaC92bSAo c2VhcmNoL2FuZCAoc2VhcmNoL3Rlcm0gImRhdGFiYXNlIikKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc2VhcmNoL25vdCAoc2VhcmNoL29yIChzZWFyY2gvdGVybSAiZWdnIikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWFyY2gvdGVy bSAicGdzcWwiKSkpKSkpCiAgICAnKDEpKQogIAogICh0ZXN0LWNoZWNrICJzZWFyY2gvbWFrZS1w cmVkaWNhdGUgMSIKICAgICh3aXRoLWVudiAoZW52LW9wZW4qICIvdG1wL3d0IiAqd3NoKikKICAg ICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIHBvc3RncmVzcWwiKQog ICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgInNwYW0gJiBwZ3NxbCIpCiAgICAgIChp bmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAic3BhbSAmIGVnZyIpCiAgICAgIChpbmRleCAiaHR0 cDovL2V4YW1wbGUubmV0IiAiZGF0YWJhc2UgJiBlZ2ciKQogICAgICAoaW5kZXggImh0dHA6Ly9l eGFtcGxlLm5ldCIgImRhdGFiYXNlICYgcGdzcWwgJiBzcGFtIikKICAgICAgKGxldCogKChxdWVy eSAoc2VhcmNoL3Rlcm0gImRhdGFiYXNlIikpCiAgICAgICAgICAgICAocHJlZGljYXRlIChzZWFy Y2gvbWFrZS1wcmVkaWNhdGUgcXVlcnkpKSkKICAgICAgICAKICAgICAgICAoZmlsdGVyIHByZWRp Y2F0ZSAobWFwIChjdXQgKyAxIDw+KSAoaW90YSA1KSkpKSkKICAnKDEgNCA1KSkKCiAgKHRlc3Qt Y2hlY2sgInNlYXJjaC9tYWtlLXByZWRpY2F0ZSAyIgogICAgKHdpdGgtZW52IChlbnYtb3Blbiog Ii90bXAvd3QiICp3c2gqKQogICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgImRhdGFi YXNlICYgcG9zdGdyZXNxbCIpCiAgICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAic3Bh bSAmIHBnc3FsIikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJzcGFtICYgZWdn IikKICAgICAgKGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIGVnZyIpCiAg ICAgIChpbmRleCAiaHR0cDovL2V4YW1wbGUubmV0IiAiZGF0YWJhc2UgJiBwZ3NxbCAmIHNwYW0i KQogICAgICAobGV0KiAoKHF1ZXJ5IChzZWFyY2gvYW5kIChzZWFyY2gvdGVybSAiZGF0YWJhc2Ui KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWFyY2gvdGVybSAicG9zdGdyZXNx bCIpKSkKICAgICAgICAgICAgIChwcmVkaWNhdGUgKHNlYXJjaC9tYWtlLXByZWRpY2F0ZSBxdWVy eSkpKQogICAgICAgIAogICAgICAgIChmaWx0ZXIgcHJlZGljYXRlIChtYXAgKGN1dCArIDEgPD4p IChpb3RhIDUpKSkpKQogICcoMSkpCgogICh0ZXN0LWNoZWNrICJzZWFyY2gvbWFrZS1wcmVkaWNh dGUgMyIKICAgICh3aXRoLWVudiAoZW52LW9wZW4qICIvdG1wL3d0IiAqd3NoKikKICAgICAgKGlu ZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIHBvc3RncmVzcWwiKQogICAgICAo aW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgInNwYW0gJiBwZ3NxbCIpCiAgICAgIChpbmRleCAi aHR0cDovL2V4YW1wbGUubmV0IiAic3BhbSAmIGVnZyIpCiAgICAgIChpbmRleCAiaHR0cDovL2V4 YW1wbGUubmV0IiAiZGF0YWJhc2UgJiBlZ2ciKQogICAgICAoaW5kZXggImh0dHA6Ly9leGFtcGxl Lm5ldCIgImRhdGFiYXNlICYgcGdzcWwgJiBzcGFtIikKICAgICAgKGxldCogKChxdWVyeSAoc2Vh cmNoL2FuZCAoc2VhcmNoL3Rlcm0gImRhdGFiYXNlIikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc2VhcmNoL29yIChzZWFyY2gvdGVybSAicG9zdGdyZXNxbCIpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VhcmNoL3Rlcm0gInBnc3FsIikpKSkK ICAgICAgICAgICAgIChwcmVkaWNhdGUgKHNlYXJjaC9tYWtlLXByZWRpY2F0ZSBxdWVyeSkpKQog ICAgICAgIAogICAgICAgIChmaWx0ZXIgcHJlZGljYXRlIChtYXAgKGN1dCArIDEgPD4pIChpb3Rh IDUpKSkpKQogICcoMSA1KSkKCiAgKHRlc3QtY2hlY2sgInNlYXJjaCoiCiAgICAod2l0aC1lbnYg KGVudi1vcGVuKiAiL3RtcC93dCIgKndzaCopCiAgICAgIChpbmRleCAiaHR0cDovL2RhdGFiYXNl LnBvc3RncmVzcWwucGdzcWwubmV0IiAiZGF0YWJhc2UgJiBwb3N0Z3Jlc3FsICYgcGdzcWwiKQog ICAgICAoaW5kZXggImh0dHA6Ly9kYXRhYmFzZS5wb3N0Z3Jlc3FsLm5ldCIgImRhdGFiYXNlICYg cG9zdGdyZXNxbCIpCiAgICAgIChpbmRleCAiaHR0cDovL3NwYW0uZWdnLm5ldCIgInNwYW0gJiBl Z2ciKQogICAgICAoaW5kZXggImh0dHA6Ly9kYXRhYmFzZS5lZ2cubmV0IiAiZGF0YWJhc2UgJiBl Z2ciKQogICAgICAoaW5kZXggImh0dHA6Ly9kYXRhYmFzZS5wZ3NxbC5zcGFtLm5ldCIgImRhdGFi YXNlICYgcGdzcWwgJiBzcGFtIikKICAgICAgKGluZGV4ICJodHRwOi8vZGF0YWJhc2UucG9zdGdy ZXNxbC5wZ3NxbC5uZXQvZGF0YWJhc2UiICJkYXRhYmFzZSAmIHBvc3RncmVzcWwgJiBwZ3NxbCAm IGRhdGFiYXNlIGFnYWluIikKICAgICAgKGxldCAoKHF1ZXJ5IChzZWFyY2gvYW5kIChzZWFyY2gv dGVybSAiZGF0YWJhc2UiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJjaC9v ciAoc2VhcmNoL3Rlcm0gInBvc3RncmVzcWwiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoc2VhcmNoL3Rlcm0gInBnc3FsIikpKSkpCiAgICAgICAgKHNlYXJjaCog cXVlcnkpKSkKICAgICcoKCJodHRwOi8vZGF0YWJhc2UucG9zdGdyZXNxbC5wZ3NxbC5uZXQvZGF0 YWJhc2UiIC4gNCkgKCJodHRwOi8vZGF0YWJhc2UucG9zdGdyZXNxbC5wZ3NxbC5uZXQiIC4gMykg KCJodHRwOi8vZGF0YWJhc2UucGdzcWwuc3BhbS5uZXQiIC4gMikgKCJodHRwOi8vZGF0YWJhc2Uu cG9zdGdyZXNxbC5uZXQiIC4gMikpKQoKICAodGVzdC1jaGVjayAic2VhcmNoL3ZtIHVua25vd24g a2V5d29yZCIKICAgICh3aXRoLWVudiAoZW52LW9wZW4qICIvdG1wL3d0IiAqd3NoKikKICAgICAg KGluZGV4ICJodHRwOi8vZXhhbXBsZS5uZXQiICJkYXRhYmFzZSAmIHBvc3RncmVzcWwiKQogICAg ICAoaW5kZXggImh0dHA6Ly9leGFtcGxlLm5ldCIgInNwYW0gJiBwZ3NxbCIpCiAgICAgIChpbmRl eCAiaHR0cDovL2V4YW1wbGUubmV0IiAic3BhbSAmIGVnZyIpCiAgICAgIChpbmRleCAiaHR0cDov L2V4YW1wbGUubmV0IiAiZGF0YWJhc2UgJiBlZ2ciKQogICAgICAoaW5kZXggImh0dHA6Ly9leGFt cGxlLm5ldCIgImRhdGFiYXNlICYgcGdzcWwiKQogICAgICAoc2VhcmNoL3ZtIChzZWFyY2gvYW5k IChzZWFyY2gvdGVybSAid2lyZWR0aWdlciIpKSkpCiAgICAnKDEpKQopCg== --=_53e918395ee183beed6e0635d3fce0eb--